# HG changeset patch # User chegar # Date 1417634915 0 # Node ID 097b1d6f6894dee50a4ac0e95997038accddf5e7 # Parent 9fffb959eb4197ff806e4ac12244761815b4deee# Parent 614b01b4950f4f8052282c9a7b8249a9074b737c Merge diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/CompileDemos.gmk --- a/jdk/make/CompileDemos.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/CompileDemos.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -44,7 +44,7 @@ DEMO_SHARE_SRC := $(JDK_TOPDIR)/src/demo/share DEMO_CLOSED_SHARE_SRC := $(JDK_TOPDIR)/src/closed/demo/share DEMO_SOLARIS_SRC := $(JDK_TOPDIR)/src/demo/solaris -DEMO_OS_API_SRC := $(JDK_TOPDIR)/src/demo/$(OPENJDK_TARGET_OS_API_DIR) +DEMO_OS_TYPE_SRC := $(JDK_TOPDIR)/src/demo/$(OPENJDK_TARGET_OS_TYPE) VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/common/version.rc ################################################################################################## @@ -214,13 +214,13 @@ # Param 2 = add these directories to the includes, default is agent_util # Param 3 = extra CFLAGS # Param 4 = C or C++ (defaults to C) - # Param 5 = libs for posix + # Param 5 = libs for unix # Param 6 = libs for windows # Param 7 = libs for solaris # Param 8 = libs for linux # Param 9 = extra directories with required sources BUILD_DEMO_JVMTI_$1_EXTRA_SRC := \ - $$(wildcard $(DEMO_OS_API_SRC)/jvmti/$1) \ + $$(wildcard $(DEMO_OS_TYPE_SRC)/jvmti/$1) \ $$(wildcard $$(addprefix $(DEMO_SHARE_SRC)/jvmti/, $2)) \ $9 BUILD_DEMO_JVMTI_$1_EXTRA_SRC_EXCLUDE := \ @@ -257,7 +257,7 @@ LDFLAGS := $(filter-out -incremental:no -opt:ref, $(LDFLAGS_JDKLIB)), \ LDFLAGS_macosx := $(call SET_EXECUTABLE_ORIGIN), \ LDFLAGS_SUFFIX := $$($1_EXTRA_CXX), \ - LDFLAGS_SUFFIX_posix := $5, \ + LDFLAGS_SUFFIX_unix := $5, \ LDFLAGS_SUFFIX_windows := $6, \ LDFLAGS_SUFFIX_solaris := $7 -lc, \ LDFLAGS_SUFFIX_linux := $8, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/Import.gmk --- a/jdk/make/Import.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/Import.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -30,7 +30,7 @@ ################################################################################ -# Put the libraries here. Different locations for different target apis. +# Put the libraries here. Different locations for different target OS types. ifneq ($(OPENJDK_TARGET_OS), windows) HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR) BASE_INSTALL_LIBRARIES_HERE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR) diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/copy/Copy-java.base.gmk --- a/jdk/make/copy/Copy-java.base.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/copy/Copy-java.base.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -85,7 +85,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx) JVMCFG_SRC := $(JDK_TOPDIR)/src/java.base/macosx/conf/$(JVMCFG_ARCH)/jvm.cfg else - JVMCFG_SRC := $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/conf/$(JVMCFG_ARCH)/jvm.cfg + JVMCFG_SRC := $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/$(JVMCFG_ARCH)/jvm.cfg endif JVMCFG_DIR := $(LIB_DST_DIR)$(OPENJDK_TARGET_CPU_LIBDIR) JVMCFG := $(JVMCFG_DIR)/jvm.cfg @@ -192,7 +192,7 @@ TARGETS += $(CONF_DST_DIR)/net.properties ifeq ($(OPENJDK_TARGET_OS), solaris) - $(CONF_DST_DIR)/sdp/sdp.conf.template: $(JDK_TOPDIR)/src/java.base/${OPENJDK_TARGET_OS_API_DIR}/conf/sdp/sdp.conf.template + $(CONF_DST_DIR)/sdp/sdp.conf.template: $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template $(ECHO) $(LOG_INFO) Copying $(@F) $(call install-file) diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/copy/Copy-java.desktop.gmk --- a/jdk/make/copy/Copy-java.desktop.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/copy/Copy-java.desktop.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -104,13 +104,13 @@ # Copy cursor.properties and cursors gif files to LIB_DST_DIR # ifneq ($(OPENJDK_TARGET_OS), macosx) - OPENJDK_TARGET_OS_LIB_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/conf + OPENJDK_TARGET_OS_LIB_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/conf else OPENJDK_TARGET_OS_LIB_SRC := $(JDK_TOPDIR)/src/java.desktop/macosx/conf endif CURSORS_DEST_DIR := $(LIB_DST_DIR)/images/cursors -CURSORS_OPENJDK_TARGET_OS_LIB_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/conf/images/cursors +CURSORS_OPENJDK_TARGET_OS_LIB_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/conf/images/cursors $(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_OPENJDK_TARGET_OS_LIB_SRC)/cursors.properties $(call install-file) diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/VERSION --- a/jdk/make/data/tzdata/VERSION Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/VERSION Wed Dec 03 19:28:35 2014 +0000 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2014i +tzdata2014j diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/africa --- a/jdk/make/data/tzdata/africa Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/africa Wed Dec 03 19:28:35 2014 +0000 @@ -29,20 +29,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2013-02-21): +# From Paul Eggert (2014-10-31): # -# A good source for time zone historical data outside the U.S. is +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Another source occasionally used is Edward W. Whitman, World Time Differences, # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which @@ -88,7 +87,6 @@ # 3:00 CAST Central Africa Summer Time (no longer used) # 3:00 SAST South Africa Summer Time (no longer used) # 3:00 EAT East Africa Time -# 4:00 EAST East Africa Summer Time (no longer used) # Algeria # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -169,9 +167,7 @@ 1:00 - WAT # Comoros -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro - 3:00 - EAT +# See Africa/Nairobi. # Democratic Republic of the Congo # See Africa/Lagos for the western part and Africa/Maputo for the eastern. @@ -195,9 +191,7 @@ Link Africa/Abidjan Atlantic/St_Helena # St Helena # Djibouti -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul - 3:00 - EAT +# See Africa/Nairobi. ############################################################################### @@ -410,27 +404,8 @@ # See Africa/Lagos. # Eritrea -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Asmara 2:35:32 - LMT 1870 - 2:35:32 - AMT 1890 # Asmara Mean Time - 2:35:20 - ADMT 1936 May 5 # Adis Dera MT - 3:00 - EAT - # Ethiopia -# From Paul Eggert (2014-07-31): -# Like the Swahili of Kenya and Tanzania, many Ethiopians keep a -# 12-hour clock starting at our 06:00, so their "8 o'clock" is our -# 02:00 or 14:00. Keep this in mind when you ask the time in Amharic. -# -# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time -# zones between 1870 and 1890, that they merged to 38E50 (2:35:20) in -# 1890, and that they switched to 3:00 on 1936-05-05. Perhaps 38E50 -# was for Adis Dera. Quite likely the Shanks data entries are wrong -# anyway. -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Addis_Ababa 2:34:48 - LMT 1870 - 2:35:20 - ADMT 1936 May 5 # Adis Dera MT - 3:00 - EAT +# See Africa/Nairobi. # Gabon # See Africa/Lagos. @@ -474,6 +449,15 @@ 2:30 - BEAT 1940 2:45 - BEAUT 1960 3:00 - EAT +Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia +Link Africa/Nairobi Africa/Asmara # Eritrea +Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania +Link Africa/Nairobi Africa/Djibouti +Link Africa/Nairobi Africa/Kampala # Uganda +Link Africa/Nairobi Africa/Mogadishu # Somalia +Link Africa/Nairobi Indian/Antananarivo # Madagascar +Link Africa/Nairobi Indian/Comoro +Link Africa/Nairobi Indian/Mayotte # Lesotho # See Africa/Johannesburg. @@ -551,11 +535,7 @@ 2:00 - EET # Madagascar -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul - 3:00 - EAT 1954 Feb 27 23:00s - 3:00 1:00 EAST 1954 May 29 23:00s - 3:00 - EAT +# See Africa/Nairobi. # Malawi # See Africa/Maputo. @@ -658,9 +638,7 @@ # no information; probably like Indian/Mauritius # Mayotte -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou - 3:00 - EAT +# See Africa/Nairobi. # Morocco # See the 'europe' file for Spanish Morocco (Africa/Ceuta). @@ -1072,11 +1050,7 @@ # See Africa/Abidjan. # Somalia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov - 3:00 - EAT 1931 - 2:30 - BEAT 1957 - 3:00 - EAT +# See Africa/Nairobi. # South Africa # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -1119,11 +1093,7 @@ # See Africa/Johannesburg. # Tanzania -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 - 3:00 - EAT 1948 - 2:45 - BEAUT 1961 - 3:00 - EAT +# See Africa/Nairobi. # Togo # See Africa/Abidjan. @@ -1229,12 +1199,7 @@ 1:00 Tunisia CE%sT # Uganda -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Kampala 2:09:40 - LMT 1928 Jul - 3:00 - EAT 1930 - 2:30 - BEAT 1948 - 2:45 - BEAUT 1957 - 3:00 - EAT +# See Africa/Nairobi. # Zambia # Zimbabwe diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/asia --- a/jdk/make/data/tzdata/asia Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/asia Wed Dec 03 19:28:35 2014 +0000 @@ -29,20 +29,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2013-08-11): +# From Paul Eggert (2014-10-31): # -# A good source for time zone historical data outside the U.S. is +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Another source occasionally used is Edward W. Whitman, World Time Differences, # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which @@ -1686,44 +1685,70 @@ # Korea (North and South) # From Annie I. Bang (2006-07-10): -# http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp -# The Ministry of Commerce, Industry and Energy has already -# commissioned a research project [to reintroduce DST] and has said -# the system may begin as early as 2008.... Korea ran a daylight -# saving program from 1949-61 but stopped it during the 1950-53 Korean War. +# http://www.koreaherald.com/view.php?ud=200607100012 +# Korea ran a daylight saving program from 1949-61 but stopped it +# during the 1950-53 Korean War. The system was temporarily enforced +# between 1987 and 1988 ... -# From Shanks & Pottenger: +# From Sanghyuk Jung (2014-10-29): +# http://mm.icann.org/pipermail/tz/2014-October/021830.html +# According to the Korean Wikipedia +# http://ko.wikipedia.org/wiki/한국_표준시 +# [oldid=12896437 2014-09-04 08:03 UTC] +# DST in Republic of Korea was as follows.... And I checked old +# newspapers in Korean, all articles correspond with data in Wikipedia. +# For example, the article in 1948 (Korean Language) proved that DST +# started at June 1 in that year. For another example, the article in +# 1988 said that DST started at 2:00 AM in that year. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule ROK 1960 only - May 15 0:00 1:00 D -Rule ROK 1960 only - Sep 13 0:00 0 S -Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D -Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S +Rule ROK 1948 only - Jun 1 0:00 1:00 D +Rule ROK 1948 only - Sep 13 0:00 0 S +Rule ROK 1949 only - Apr 3 0:00 1:00 D +Rule ROK 1949 1951 - Sep Sun>=8 0:00 0 S +Rule ROK 1950 only - Apr 1 0:00 1:00 D +Rule ROK 1951 only - May 6 0:00 1:00 D +Rule ROK 1955 only - May 5 0:00 1:00 D +Rule ROK 1955 only - Sep 9 0:00 0 S +Rule ROK 1956 only - May 20 0:00 1:00 D +Rule ROK 1956 only - Sep 30 0:00 0 S +Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D +Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S +Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D +Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S -# From Paul Eggert (2014-07-01): -# The following entries are from Shanks & Pottenger, except that I -# guessed that time zone abbreviations through 1945 followed the same +# From Paul Eggert (2014-10-30): +# The Korean Wikipedia entry gives the following sources for UT offsets: +# +# 1908: Official Journal Article No. 3994 (Edict No. 5) +# 1912: Governor-General of Korea Official Gazette Issue No. 367 +# (Announcement No. 338) +# 1954: Presidential Decree No. 876 (1954-03-17) +# 1961: Law No. 676 (1961-08-07) +# 1987: Law No. 3919 (1986-12-31) +# +# The Wikipedia entry also has confusing information about a change +# to UT+9 in April 1910, but then what would be the point of the later change +# to UT+9 on 1912-01-01? Omit the 1910 change for now. +# +# I guessed that time zone abbreviations through 1945 followed the same # rules as discussed under Taiwan, with nominal switches from JST to KST # when the respective cities were taken over by the Allies after WWII. +# +# For Pyongyang we have no information; guess no changes since World War II. # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Seoul 8:27:52 - LMT 1890 - 8:30 - KST 1904 Dec - 9:00 - JCST 1928 - 8:30 - KST 1932 +Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 + 8:30 - KST 1912 Jan 1 9:00 - JCST 1937 Oct 1 9:00 - JST 1945 Sep 8 9:00 - KST 1954 Mar 21 - 8:00 ROK K%sT 1961 Aug 10 - 8:30 - KST 1968 Oct + 8:30 ROK K%sT 1961 Aug 10 9:00 ROK K%sT -Zone Asia/Pyongyang 8:23:00 - LMT 1890 - 8:30 - KST 1904 Dec - 9:00 - JCST 1928 - 8:30 - KST 1932 +Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1 + 8:30 - KST 1912 Jan 1 9:00 - JCST 1937 Oct 1 9:00 - JST 1945 Aug 24 - 9:00 - KST 1954 Mar 21 - 8:00 - KST 1961 Aug 10 9:00 - KST ############################################################################### diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/australasia --- a/jdk/make/data/tzdata/australasia Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/australasia Wed Dec 03 19:28:35 2014 +0000 @@ -820,19 +820,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2013-02-21): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Another source occasionally used is Edward W. Whitman, World Time Differences, # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/europe --- a/jdk/make/data/tzdata/europe Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/europe Wed Dec 03 19:28:35 2014 +0000 @@ -29,16 +29,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2014-05-31): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # A reliable and entertaining source about time zones is # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). @@ -310,6 +313,14 @@ # "Timeball on the ballast office is down. Dunsink time." # -- James Joyce, Ulysses +# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time +# was among various actions undertaken by the 'English' government that +# would 'put the whole country into the SF (Sinn Féin) camp'. She claimed +# Irish 'public feeling (was) outraged by forcing of English time on us'." +# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising. +# Irish Times 2014-10-27. +# http://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411 + # From Joseph S. Myers (2005-01-26): # Irish laws are available online at . # These include various relating to legal time, for example: @@ -617,6 +628,7 @@ Rule Russia 1993 2010 - Mar lastSun 2:00s 1:00 S Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - Rule Russia 1996 2010 - Oct lastSun 2:00s 0 - +# As described below, Russia's 2014 change affects Zone data, not Rule data. # From Alexander Krivenyshev (2011-06-14): # According to Kremlin press service, Russian President Dmitry Medvedev diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/leapseconds --- a/jdk/make/data/tzdata/leapseconds Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/leapseconds Wed Dec 03 19:28:35 2014 +0000 @@ -33,8 +33,8 @@ # The NTP Timescale and Leap Seconds # http://www.eecis.udel.edu/~mills/leap.html -# The International Earth Rotation Service periodically uses leap seconds -# to keep UTC to within 0.9 s of UT1 +# The International Earth Rotation and Reference Systems Service +# periodically uses leap seconds to keep UTC to within 0.9 s of UT1 # (which measures the true angular orientation of the earth in space); see # Terry J Quinn, The BIPM and the accurate measure of time, # Proc IEEE 79, 7 (July 1991), 894-905 . diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/northamerica --- a/jdk/make/data/tzdata/northamerica Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/northamerica Wed Dec 03 19:28:35 2014 +0000 @@ -1014,19 +1014,19 @@ ################################################################################ -# From Paul Eggert (2006-03-22): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Other sources occasionally used include: # @@ -3154,13 +3154,17 @@ # From Paul Eggert (2014-08-19): # The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See: # http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm -# Model this as a switch from EST/EDT to AST on 2014-11-02 at 02:00. +# Model this as a switch from EST/EDT to AST ... +# From Chris Walton (2014-11-04): +# ... the TCI government appears to have delayed the switch to +# "permanent daylight saving time" by one year.... +# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm # # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Grand_Turk -4:44:32 - LMT 1890 -5:07:11 - KMT 1912 Feb # Kingston Mean Time -5:00 - EST 1979 - -5:00 US E%sT 2014 Nov 2 2:00 + -5:00 US E%sT 2015 Nov Sun>=1 2:00 -4:00 - AST # British Virgin Is diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/data/tzdata/southamerica --- a/jdk/make/data/tzdata/southamerica Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/data/tzdata/southamerica Wed Dec 03 19:28:35 2014 +0000 @@ -29,23 +29,23 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2006-03-22): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). -# -# For data circa 1899, a common source is: -# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. -# http://www.jstor.org/stable/1774359 +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# For data circa 1899, a common source is: +# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. +# http://www.jstor.org/stable/1774359 # # Earlier editions of these tables used the North American style (e.g. ARST and # ARDT for Argentine Standard and Daylight Time), but the following quote diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/gensrc/GensrcIcons.gmk --- a/jdk/make/gensrc/GensrcIcons.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/gensrc/GensrcIcons.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -29,9 +29,9 @@ GENSRC_AWT_ICONS_DST := $(GENSRC_AWT_ICONS_TMP)/sun/awt/ ifdef OPENJDK - X11_ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR) + X11_ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE) else - X11_ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/closed/java.desktop/$(OPENJDK_TARGET_OS_API_DIR) + X11_ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/closed/java.desktop/$(OPENJDK_TARGET_OS_TYPE) endif GENSRC_AWT_ICONS_SRC += \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/gensrc/GensrcProperties.gmk --- a/jdk/make/gensrc/GensrcProperties.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/gensrc/GensrcProperties.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -58,13 +58,15 @@ $1_CLASS := $3 # Convert .../src//share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties - # to .../langtools/gensrc//com/sun/tools/javac/resources/javac_zh_CN.java + # to .../support/gensrc//com/sun/tools/javac/resources/javac_zh_CN.java # Strip away prefix and suffix, leaving for example only: # "/share/classes/com/sun/tools/javac/resources/javac_zh_CN" $1_JAVAS := $$(patsubst $(JDK_TOPDIR)/src/%, \ $(SUPPORT_OUTPUTDIR)/gensrc/%, \ $$(patsubst %.properties, %.java, \ - $$(subst /share/classes,, $$($1_SRCS)))) + $$(subst /$(OPENJDK_TARGET_OS)/classes,, \ + $$(subst /$(OPENJDK_TARGET_OS_TYPE)/classes,, \ + $$(subst /share/classes,, $$($1_SRCS)))))) # Generate the package dirs for the to be generated java files. Sort to remove # duplicates. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/gensrc/GensrcX11Wrappers.gmk --- a/jdk/make/gensrc/GensrcX11Wrappers.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/gensrc/GensrcX11Wrappers.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -95,8 +95,8 @@ -I$(JDK_TOPDIR)/src/java.base/share/native/include \ -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_EXPORT_DIR)/native/include \ -I$(JDK_TOPDIR)/src/java.base/share/native/libjava \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjava \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/awt \ + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \ # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/launcher/Launcher-jdk.runtime.gmk --- a/jdk/make/launcher/Launcher-jdk.runtime.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/launcher/Launcher-jdk.runtime.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -42,7 +42,7 @@ $(JDK_TOPDIR)/src/jdk.runtime/share/native/unpack200 UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/jdk.runtime/share/native/common-unpack \ -I$(JDK_TOPDIR)/src/java.base/share/native/libjava \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjava + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava ifeq ($(USE_EXTERNAL_LIBZ), true) UNPACKEXE_CFLAGS += -DSYSTEM_ZLIB @@ -77,7 +77,7 @@ EXE_OUT_OPTION := -Fe # With the current way unpack200 is built, debug symbols aren't supported # anyway. - UNPACKEXE_DEBUG_SYMBOLS := + UNPACKEXE_DEBUG_SYMBOLS := false endif # The linker on older SuSE distros (e.g. on SLES 10) complains with: @@ -102,7 +102,7 @@ MAPFILE := $(UNPACK_MAPFILE),\ LDFLAGS := $(UNPACKEXE_ZIPOBJS), \ LDFLAGS_windows := $(CXXFLAGS_JDKEXE), \ - LDFLAGS_posix := $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \ + LDFLAGS_unix := $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \ $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX)) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_linux := -lc, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/launcher/LauncherCommon.gmk --- a/jdk/make/launcher/LauncherCommon.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/launcher/LauncherCommon.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -58,7 +58,7 @@ LAUNCHER_SRC := $(JDK_TOPDIR)/src/java.base/share/native/launcher LAUNCHER_CFLAGS := -I$(JDK_TOPDIR)/src/java.base/share/native/launcher \ -I$(JDK_TOPDIR)/src/java.base/share/native/libjli \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjli \ + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli \ -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli \ # GLOBAL_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/common/version.rc @@ -67,10 +67,10 @@ # Until the shuffle is permanent, we can't add this in configure CFLAGS_JDKEXE := $(filter-out %javavm/export, $(CFLAGS_JDKEXE)) CFLAGS_JDKEXE += -I$(JDK_TOPDIR)/src/java.base/share/native/include \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/include + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include CXXFLAGS_JDKEXE := $(filter-out %javavm/export, $(CXXFLAGS_JDKEXE)) CXXFLAGS_JDKEXE += -I$(JDK_TOPDIR)/src/java.base/share/native/include \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/include + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include JAVA_MANIFEST := $(JDK_TOPDIR)/src/java.base/windows/native/launcher/java.manifest define SetupLauncher @@ -78,7 +78,7 @@ # Parameter 1 is the name of the launcher (java, javac, jar...) # Parameter 2 is extra CFLAGS # Parameter 3 is extra LDFLAGS - # Parameter 4 is extra LDFLAGS_SUFFIX_posix + # Parameter 4 is extra LDFLAGS_SUFFIX_unix # Parameter 5 is extra LDFLAGS_SUFFIX_windows # Parameter 6 is optional Windows JLI library (full path) # Parameter 7 is optional Windows resource (RC) flags @@ -183,7 +183,7 @@ $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \ MAPFILE := $$($1_MAPFILE), \ LDFLAGS_SUFFIX := $(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX), \ - LDFLAGS_SUFFIX_posix := $4, \ + LDFLAGS_SUFFIX_unix := $4, \ LDFLAGS_SUFFIX_windows := $$($1_WINDOWS_JLI_LIB) \ $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib advapi32.lib $5, \ LDFLAGS_SUFFIX_linux := -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli $(LIBDL) -lc, \ @@ -227,4 +227,3 @@ else JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/closed/java.base/windows/native/launcher/icons" endif - diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Awt2dLibraries.gmk --- a/jdk/make/lib/Awt2dLibraries.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Awt2dLibraries.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -31,7 +31,7 @@ $(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/medialib BUILD_LIBMLIB_CFLAGS := -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \ $(addprefix -I, $(BUILD_LIBMLIB_SRC)) \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libmlib_image + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libmlib_image BUILD_LIBMLIB_LDLIBS := BUILD_LIBMLIB_IMAGE_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmlib_image/mapfile-vers @@ -144,9 +144,9 @@ ################################################################################ LIBAWT_DIRS := $(JDK_TOPDIR)/src/java.desktop/share/native/libawt \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/awt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \ # ifeq ($(OPENJDK_TARGET_OS), aix) @@ -211,7 +211,7 @@ # Why does libawt need java.base headers? LIBAWT_CFLAGS += -I$(JDK_TOPDIR)/src/java.desktop/share/native/common/font \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/common/java2d/opengl \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/java2d/opengl \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/opengl \ -I$(JDK_TOPDIR)/src/java.desktop/windows/native/include \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/include \ -I$(SUPPORT_OUTPUTDIR)/headers/java.base \ @@ -299,15 +299,15 @@ ifndef BUILD_HEADLESS_ONLY LIBAWT_XAWT_DIRS := \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt_xawt \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libjawt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt_xawt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libjawt \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/utility \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/font \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/java2d/opengl \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/java2d/opengl \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/java2d/x11 \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/awt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/opengl \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/x11 \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \ # LIBAWT_XAWT_EXCLUDES := medialib @@ -316,15 +316,15 @@ -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/include \ -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS)/native/include \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/include \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/include \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt/java2d \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/java2d \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/loops \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/pipe \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libsunwjdga \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/font \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libsunwjdga \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/font \ $(LIBJAVA_HEADER_FLAGS) # @@ -421,7 +421,7 @@ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/liblcms/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_posix := -L $(INSTALL_LIBRARIES_HERE), \ + LDFLAGS_unix := -L $(INSTALL_LIBRARIES_HERE), \ LDFLAGS_solaris := /usr/lib$(OPENJDK_TARGET_CPU_ISADIR)/libm.so.2, \ LDFLAGS_windows := $(WIN_AWT_LIB) $(WIN_JAVA_LIB), \ LDFLAGS_SUFFIX_solaris := -lawt -ljava -ljvm -lc $(LCMS_LIBS), \ @@ -517,14 +517,14 @@ ################################################################################ LIBFONTMANAGER_SRC := $(JDK_TOPDIR)/src/java.desktop/share/native/libfontmanager \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libfontmanager + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libfontmanager LIBFONTMANAGER_CFLAGS := \ $(addprefix -I, $(shell $(FIND) \ $(LIBFONTMANAGER_SRC) \ $(JDK_TOPDIR)/src/java.desktop/share/native/libawt \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt \ $(JDK_TOPDIR)/src/java.desktop/share/native/common \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common -type d)) \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common -type d)) \ -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \ $(LIBJAVA_HEADER_FLAGS) \ # @@ -545,7 +545,7 @@ LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ X11TextRenderer.c LIBFONTMANAGER_OPTIMIZATION := HIGHEST - LIBFONTMANAGER_CFLAGS += -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt/windows + LIBFONTMANAGER_CFLAGS += -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/windows else ifeq ($(OPENJDK_TARGET_OS), macosx) LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ X11TextRenderer.c \ @@ -581,7 +581,7 @@ MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \ LDFLAGS := $(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_posix := -L $(INSTALL_LIBRARIES_HERE), \ + LDFLAGS_unix := -L $(INSTALL_LIBRARIES_HERE), \ LDFLAGS_SUFFIX := $(BUILD_LIBFONTMANAGER_FONTLIB), \ LDFLAGS_SUFFIX_linux := -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \ LDFLAGS_SUFFIX_solaris := $(filter-out -R%, $(X_LIBS)) \ @@ -610,12 +610,12 @@ ################################################################################ ifeq ($(OPENJDK_TARGET_OS), windows) - LIBJAWT_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libjawt - LIBJAWT_CFLAGS := -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt/windows \ + LIBJAWT_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libjawt + LIBJAWT_CFLAGS := -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/windows \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt/java2d/windows \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/java2d/windows \ -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \ -I$(JDK_TOPDIR)/src/java.desktop/windows/native/include \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/include \ @@ -659,12 +659,12 @@ ifeq ($(OPENJDK_TARGET_OS), macosx) LIBJAWT_SRC := $(JDK_TOPDIR)/src/java.desktop/macosx/native/libjawt else - LIBJAWT_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libjawt + LIBJAWT_SRC := $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libjawt endif LIBJAWT_CFLAGS := \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/awt \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \ -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS)/native/include \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/include \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/include \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/include \ $(LIBJAVA_HEADER_FLAGS) \ # @@ -698,7 +698,7 @@ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjawt/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_posix := -L $(INSTALL_LIBRARIES_HERE), \ + LDFLAGS_unix := -L $(INSTALL_LIBRARIES_HERE), \ LDFLAGS_solaris := $(X_LIBS), \ LDFLAGS_SUFFIX_linux := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX), \ LDFLAGS_SUFFIX_aix := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX),\ @@ -729,9 +729,9 @@ ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),) LIBAWT_HEADLESS_DIRS := $(JDK_TOPDIR)/src/java.desktop/unix/native/libawt_headless/awt \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/awt \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/java2d/opengl \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/java2d/x11 \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/opengl \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/java2d/x11 \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/java2d/opengl \ $(JDK_TOPDIR)/src/java.desktop/share/native/common/font \ # @@ -744,11 +744,11 @@ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/java2d/pipe \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/libawt/awt/image \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt/java2d \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libawt/java2d \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/common/font \ -I$(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/debug \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/common/font \ - -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libsunwjdga/ \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/font \ + -I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libsunwjdga/ \ $(LIBJAVA_HEADER_FLAGS) \ # @@ -775,7 +775,7 @@ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_headless/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_posix := -L $(INSTALL_LIBRARIES_HERE), \ + LDFLAGS_unix := -L $(INSTALL_LIBRARIES_HERE), \ LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN)., \ @@ -823,7 +823,7 @@ endif ifneq ($(OPENJDK_TARGET_OS), macosx) - LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libsplashscreen + LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libsplashscreen else LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/java.desktop/macosx/native/libsplashscreen endif @@ -997,7 +997,7 @@ -I$(JDK_TOPDIR)/src/java.desktop/macosx/native/libawt_lwawt/awt \ -I$(JDK_TOPDIR)/src/java.desktop/macosx/native/libosxapp \ -I$(JDK_TOPDIR)/src/java.base/share/native/libjava \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjava \ + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \ -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN) \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/CoreLibraries.gmk --- a/jdk/make/lib/CoreLibraries.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/CoreLibraries.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -99,7 +99,7 @@ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libverify/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_posix := -ljvm -lc, \ + LDFLAGS_SUFFIX_unix := -ljvm -lc, \ LDFLAGS_SUFFIX_windows := jvm.lib, \ VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \ RC_FLAGS := $(RC_FLAGS) \ @@ -160,7 +160,7 @@ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_posix := -ljvm -lverify, \ + LDFLAGS_SUFFIX_unix := -ljvm -lverify, \ LDFLAGS_SUFFIX_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc, \ LDFLAGS_SUFFIX_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \ LDFLAGS_SUFFIX_aix := $(LIBDL) $(BUILD_LIBFDLIBM) -lm,\ @@ -216,9 +216,9 @@ CFLAGS := $(CFLAGS_JDKLIB) \ $(ZLIB_CPPFLAGS) \ -I$(JDK_TOPDIR)/src/java.base/share/native/libjava \ - -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjava \ + -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \ -I$(SUPPORT_OUTPUTDIR)/headers/java.base, \ - CFLAGS_posix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \ + CFLAGS_unix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libzip/mapfile-vers, \ REORDER := $(BUILD_LIBZIP_REORDER), \ LDFLAGS := $(LDFLAGS_JDKLIB) \ @@ -248,7 +248,7 @@ ########################################################################################## BUILD_LIBJLI_SRC_DIRS := $(JDK_TOPDIR)/src/java.base/share/native/libjli \ - $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjli + $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli LIBJLI_CFLAGS := $(CFLAGS_JDKLIB) @@ -292,7 +292,7 @@ # if the architecture specific ergo file exists then # use it, else use the generic definitions from ergo.c - ifneq ($(wildcard $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjli/$(ERGO_ARCH_FILE)), ) + ifneq ($(wildcard $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli/$(ERGO_ARCH_FILE)), ) BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE) else # !ERGO_ARCH_FILE LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-java.instrument.gmk --- a/jdk/make/lib/Lib-java.instrument.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-java.instrument.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -28,7 +28,7 @@ ################################################################################ LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/java.instrument/share/native/libinstrument \ - $(JDK_TOPDIR)/src/java.instrument/$(OPENJDK_TARGET_OS_API_DIR)/native/libinstrument \ + $(JDK_TOPDIR)/src/java.instrument/$(OPENJDK_TARGET_OS_TYPE)/native/libinstrument \ # LIBINSTRUMENT_CFLAGS := $(CFLAGS_JDKLIB) \ $(addprefix -I, $(LIBINSTRUMENT_SRC)) \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-java.management.gmk --- a/jdk/make/lib/Lib-java.management.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-java.management.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -31,7 +31,7 @@ ################################################################################ BUILD_LIBMANAGEMENT_SRC += $(JDK_TOPDIR)/src/java.management/share/native/libmanagement \ - $(JDK_TOPDIR)/src/java.management/$(OPENJDK_TARGET_OS_API_DIR)/native/libmanagement + $(JDK_TOPDIR)/src/java.management/$(OPENJDK_TARGET_OS_TYPE)/native/libmanagement BUILD_LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/java.management/share/native/include \ $(addprefix -I,$(BUILD_LIBMANAGEMENT_SRC)) \ -I$(SUPPORT_OUTPUTDIR)/headers/java.management \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-java.prefs.gmk --- a/jdk/make/lib/Lib-java.prefs.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-java.prefs.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -30,7 +30,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx) LIBPREF_SRC_DIRS := $(JDK_TOPDIR)/src/java.prefs/macosx/native/libprefs else - LIBPREF_SRC_DIRS := $(JDK_TOPDIR)/src/java.prefs/$(OPENJDK_TARGET_OS_API_DIR)/native/libprefs + LIBPREF_SRC_DIRS := $(JDK_TOPDIR)/src/java.prefs/$(OPENJDK_TARGET_OS_TYPE)/native/libprefs endif $(eval $(call SetupNativeCompilation,BUILD_LIBPREFS, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-java.security.jgss.gmk --- a/jdk/make/lib/Lib-java.security.jgss.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-java.security.jgss.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -29,7 +29,7 @@ ifneq ($(OPENJDK_TARGET_OS), windows) LIBJ2GSS_SRC := $(JDK_TOPDIR)/src/java.security.jgss/share/native/libj2gss \ - $(JDK_TOPDIR)/src/java.security.jgss/$(OPENJDK_TARGET_OS_API_DIR)/native/libj2gss \ + $(JDK_TOPDIR)/src/java.security.jgss/$(OPENJDK_TARGET_OS_TYPE)/native/libj2gss \ # $(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS, \ @@ -58,7 +58,7 @@ BUILD_LIBKRB5_NAME := ifeq ($(OPENJDK_TARGET_OS), windows) BUILD_LIBKRB5_NAME := w2k_lsa_auth - BUILD_LIBKRB5_SRC := $(JDK_TOPDIR)/src/java.security.jgss/$(OPENJDK_TARGET_OS_API_DIR)/native/libw2k_lsa_auth + BUILD_LIBKRB5_SRC := $(JDK_TOPDIR)/src/java.security.jgss/$(OPENJDK_TARGET_OS_TYPE)/native/libw2k_lsa_auth BUILD_LIBKRB5_LIBS := advapi32.lib Secur32.lib netapi32.lib kernel32.lib user32.lib \ gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib \ ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-java.smartcardio.gmk --- a/jdk/make/lib/Lib-java.smartcardio.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-java.smartcardio.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -28,9 +28,9 @@ ################################################################################ LIBJ2PCSC_SRC := $(JDK_TOPDIR)/src/java.smartcardio/share/native/libj2pcsc \ - $(JDK_TOPDIR)/src/java.smartcardio/$(OPENJDK_TARGET_OS_API_DIR)/native/libj2pcsc + $(JDK_TOPDIR)/src/java.smartcardio/$(OPENJDK_TARGET_OS_TYPE)/native/libj2pcsc LIBJ2PCSC_CPPFLAGS := $(addprefix -I,$(LIBJ2PCSC_SRC)) \ - -I$(JDK_TOPDIR)/src/java.smartcardio/$(OPENJDK_TARGET_OS_API_DIR)/native/libj2pcsc/MUSCLE \ + -I$(JDK_TOPDIR)/src/java.smartcardio/$(OPENJDK_TARGET_OS_TYPE)/native/libj2pcsc/MUSCLE \ -I$(SUPPORT_OUTPUTDIR)/headers/java.smartcardio $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC, \ @@ -38,13 +38,13 @@ OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ SRC := $(LIBJ2PCSC_SRC), \ LANG := C, \ - CFLAGS_posix := -D__sun_jdk, \ + CFLAGS_unix := -D__sun_jdk, \ OPTIMIZATION := LOW, \ CFLAGS := $(CFLAGS_JDKLIB) $(LIBJ2PCSC_CPPFLAGS), \ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2pcsc/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_posix := $(LIBDL), \ + LDFLAGS_SUFFIX_unix := $(LIBDL), \ LDFLAGS_SUFFIX_windows := winscard.lib, \ LDFLAGS_SUFFIX_solaris := -lc, \ VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.crypto.mscapi.gmk --- a/jdk/make/lib/Lib-jdk.crypto.mscapi.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.crypto.mscapi.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -29,7 +29,7 @@ ifeq ($(OPENJDK_TARGET_OS), windows) - LIBSUNMSCAPI_SRC := $(JDK_TOPDIR)/src/jdk.crypto.mscapi/$(OPENJDK_TARGET_OS_API_DIR)/native/libsunmscapi + LIBSUNMSCAPI_SRC := $(JDK_TOPDIR)/src/jdk.crypto.mscapi/$(OPENJDK_TARGET_OS_TYPE)/native/libsunmscapi $(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI, \ LIBRARY := sunmscapi, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.crypto.pkcs11.gmk --- a/jdk/make/lib/Lib-jdk.crypto.pkcs11.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.crypto.pkcs11.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -28,7 +28,7 @@ ################################################################################ LIBJ2PKCS11_SRC := $(JDK_TOPDIR)/src/jdk.crypto.pkcs11/share/native/libj2pkcs11 \ - $(JDK_TOPDIR)/src/jdk.crypto.pkcs11/$(OPENJDK_TARGET_OS_API_DIR)/native/libj2pkcs11 + $(JDK_TOPDIR)/src/jdk.crypto.pkcs11/$(OPENJDK_TARGET_OS_TYPE)/native/libj2pkcs11 $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11, \ LIBRARY := j2pkcs11, \ @@ -42,7 +42,7 @@ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2pkcs11/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_posix := $(LIBDL), \ + LDFLAGS_SUFFIX_unix := $(LIBDL), \ LDFLAGS_SUFFIX_solaris := -lc, \ VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \ RC_FLAGS := $(RC_FLAGS) \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.jdi.gmk --- a/jdk/make/lib/Lib-jdk.jdi.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.jdi.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -30,7 +30,7 @@ ifeq ($(OPENJDK_TARGET_OS), windows) LIBDT_SHMEM_SRC := $(JDK_TOPDIR)/src/jdk.jdi/share/native/libdt_shmem \ - $(JDK_TOPDIR)/src/jdk.jdi/$(OPENJDK_TARGET_OS_API_DIR)/native/libdt_shmem \ + $(JDK_TOPDIR)/src/jdk.jdi/$(OPENJDK_TARGET_OS_TYPE)/native/libdt_shmem \ # LIBDT_SHMEM_CPPFLAGS := -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ $(addprefix -I, $(LIBDT_SHMEM_SRC)) \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.jdwp.agent.gmk --- a/jdk/make/lib/Lib-jdk.jdwp.agent.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.jdwp.agent.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -28,7 +28,7 @@ ################################################################################ LIBDT_SOCKET_SRC := $(JDK_TOPDIR)/src/jdk.jdwp.agent/share/native/libdt_socket \ - $(JDK_TOPDIR)/src/jdk.jdwp.agent/$(OPENJDK_TARGET_OS_API_DIR)/native/libdt_socket + $(JDK_TOPDIR)/src/jdk.jdwp.agent/$(OPENJDK_TARGET_OS_TYPE)/native/libdt_socket LIBDT_SOCKET_CPPFLAGS := \ $(addprefix -I, $(LIBDT_SOCKET_SRC)) \ -I$(JDK_TOPDIR)/src/jdk.jdwp.agent/share/native/libjdwp/export \ @@ -66,7 +66,7 @@ ################################################################################ LIBJDWP_SRC := $(JDK_TOPDIR)/src/jdk.jdwp.agent/share/native/libjdwp \ - $(JDK_TOPDIR)/src/jdk.jdwp.agent/$(OPENJDK_TARGET_OS_API_DIR)/native/libjdwp + $(JDK_TOPDIR)/src/jdk.jdwp.agent/$(OPENJDK_TARGET_OS_TYPE)/native/libjdwp LIBJDWP_CPPFLAGS := \ -I$(JDK_TOPDIR)/src/jdk.jdwp.agent/share/native/libjdwp/export \ -I$(JDK_TOPDIR)/src/jdk.jdwp.agent/share/native/include \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.runtime.gmk --- a/jdk/make/lib/Lib-jdk.runtime.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.runtime.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -45,7 +45,7 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_windows := -map:$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/unpack.map -debug \ jvm.lib $(WIN_JAVA_LIB), \ - LDFLAGS_SUFFIX_posix := -ljvm $(LIBCXX) -ljava -lc, \ + LDFLAGS_SUFFIX_unix := -ljvm $(LIBCXX) -ljava -lc, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libunpack, \ VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \ RC_FLAGS := $(RC_FLAGS) \ @@ -61,7 +61,7 @@ ################################################################################ LIBJSDT_SRC := $(JDK_TOPDIR)/src/jdk.runtime/share/native/libjsdt \ - $(JDK_TOPDIR)/src/jdk.runtime/$(OPENJDK_TARGET_OS_API_DIR)/native/libjsdt + $(JDK_TOPDIR)/src/jdk.runtime/$(OPENJDK_TARGET_OS_TYPE)/native/libjsdt $(eval $(call SetupNativeCompilation,BUILD_LIBJSDT, \ LIBRARY := jsdt, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.sctp.gmk --- a/jdk/make/lib/Lib-jdk.sctp.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.sctp.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -27,7 +27,7 @@ ################################################################################ -ifeq ($(OPENJDK_TARGET_OS_API), posix) +ifeq ($(OPENJDK_TARGET_OS_TYPE), unix) ifeq (, $(filter $(OPENJDK_TARGET_OS), macosx aix)) @@ -40,11 +40,11 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP, \ LIBRARY := sctp, \ OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ - SRC := $(JDK_TOPDIR)/src/jdk.sctp/$(OPENJDK_TARGET_OS_API_DIR)/native/libsctp, \ + SRC := $(JDK_TOPDIR)/src/jdk.sctp/$(OPENJDK_TARGET_OS_TYPE)/native/libsctp, \ LANG := C, \ OPTIMIZATION := LOW, \ CFLAGS := $(CFLAGS_JDKLIB) \ - -I $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libnio/ch \ + -I $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libnio/ch \ -I $(JDK_TOPDIR)/src/java.base/share/native/libnio/ch \ $(addprefix -I, $(call FindSrcDirsForLib, java.base, net)) \ $(LIBJAVA_HEADER_FLAGS) \ @@ -55,7 +55,7 @@ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX_linux := -lpthread $(LIBDL) -ljava -ljvm, \ - LDFLAGS_SUFFIX_posix := -lnio -lnet, \ + LDFLAGS_SUFFIX_unix := -lnio -lnet, \ LDFLAGS_SUFFIX_solaris := -lsocket -ljava -ljvm -lc, \ LDFLAGS_SUFFIX_macosx := -ljava -ljvm, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsctp, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/Lib-jdk.security.auth.gmk --- a/jdk/make/lib/Lib-jdk.security.auth.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/Lib-jdk.security.auth.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -43,7 +43,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAAS, \ LIBRARY := $(LIBJAAS_NAME), \ OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ - SRC := $(JDK_TOPDIR)/src/jdk.security.auth/$(OPENJDK_TARGET_OS_API_DIR)/native/libjaas, \ + SRC := $(JDK_TOPDIR)/src/jdk.security.auth/$(OPENJDK_TARGET_OS_TYPE)/native/libjaas, \ LANG := C, \ OPTIMIZATION := LOW, \ CFLAGS := $(CFLAGS_JDKLIB) -I$(SUPPORT_OUTPUTDIR)/headers/jdk.security.auth, \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/LibCommon.gmk --- a/jdk/make/lib/LibCommon.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/LibCommon.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -36,15 +36,17 @@ # elegant solution to this. WIN_JAVA_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib -# Use this variable to set DEBUG_SYMBOLS true on windows for all libraries, but -# not on other platforms. -ifeq ($(OPENJDK_TARGET_OS), windows) +ifdef OPENJDK + # Build everything with debugging on OpenJDK DEBUG_ALL_BINARIES := true -endif - -# Build everything with debugging on OpenJDK -ifdef OPENJDK - DEBUG_ALL_BINARIES := true +else + # Use this variable to set DEBUG_SYMBOLS true on windows for all libraries, but + # not on other platforms. + ifeq ($(OPENJDK_TARGET_OS), windows) + DEBUG_ALL_BINARIES := true + else + DEBUG_ALL_BINARIES := false + endif endif ################################################################################ @@ -54,14 +56,14 @@ define FindSrcDirsForLib $(call uniq, $(wildcard \ $(JDK_TOPDIR)/src/$(strip $1)/$(OPENJDK_TARGET_OS)/native/lib$(strip $2) \ - $(JDK_TOPDIR)/src/$(strip $1)/$(OPENJDK_TARGET_OS_API_DIR)/native/lib$(strip $2) \ + $(JDK_TOPDIR)/src/$(strip $1)/$(OPENJDK_TARGET_OS_TYPE)/native/lib$(strip $2) \ $(JDK_TOPDIR)/src/$(strip $1)/share/native/lib$(strip $2))) endef ################################################################################ # Find lib dir for module # Param 1 - module name -ifeq ($(OPENJDK_TARGET_OS_API), posix) +ifeq ($(OPENJDK_TARGET_OS_TYPE), unix) define FindLibDirForModule $(SUPPORT_OUTPUTDIR)/modules_libs/$(strip $1)$(OPENJDK_TARGET_CPU_LIBDIR) endef diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/NetworkingLibraries.gmk --- a/jdk/make/lib/NetworkingLibraries.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/NetworkingLibraries.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -24,7 +24,7 @@ # LIBNET_SRC_DIRS := $(JDK_TOPDIR)/src/java.base/share/native/libnet \ - $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libnet + $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libnet LIBNET_CFLAGS += -I$(SUPPORT_OUTPUTDIR)/headers/java.base \ $(LIBJAVA_HEADER_FLAGS) @@ -77,4 +77,3 @@ $(BUILD_LIBNET): $(BUILD_LIBJAVA) TARGETS += $(BUILD_LIBNET) - diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/NioLibraries.gmk --- a/jdk/make/lib/NioLibraries.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/NioLibraries.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -25,10 +25,10 @@ BUILD_LIBNIO_SRC := \ $(JDK_TOPDIR)/src/java.base/share/native/libnio/ch \ - $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libnio \ + $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libnio \ $(sort $(wildcard \ - $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libnio/ch \ - $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libnio/fs \ + $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libnio/ch \ + $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libnio/fs \ $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libnio/ch \ $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libnio/fs)) \ # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/lib/SoundLibraries.gmk --- a/jdk/make/lib/SoundLibraries.gmk Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/lib/SoundLibraries.gmk Wed Dec 03 19:28:35 2014 +0000 @@ -25,7 +25,7 @@ LIBJSOUND_SRC_DIRS := \ $(JDK_TOPDIR)/src/java.desktop/share/native/libjsound \ - $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libjsound \ + $(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/libjsound \ # LIBJSOUND_CFLAGS := \ -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \ @@ -165,7 +165,7 @@ -framework CoreServices -framework AudioUnit $(LIBCXX) \ -framework CoreMIDI -framework AudioToolbox, \ LDFLAGS_windows := $(WIN_JAVA_LIB) advapi32.lib winmm.lib, \ - LDFLAGS_SUFFIX_posix := -ljava -ljvm, \ + LDFLAGS_SUFFIX_unix := -ljava -ljvm, \ LDFLAGS_SUFFIX_solaris := -lc, \ VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \ RC_FLAGS := $(RC_FLAGS) \ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java --- a/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java Wed Dec 03 19:28:35 2014 +0000 @@ -95,7 +95,17 @@ obj = zones.get(zoneId); } if (obj == null) { - throw new ZoneRulesException("Unknown time-zone ID: " + zoneId0); + // Timezone link can be located in 'backward' file and it + // can refer to another link, so we need to check for + // link one more time, before throwing an exception + String zoneIdBack = zoneId; + if (links.containsKey(zoneId)) { + zoneId = links.get(zoneId); + obj = zones.get(zoneId); + } + if (obj == null) { + throw new ZoneRulesException("Unknown time-zone ID: " + zoneIdBack); + } } } if (obj instanceof ZoneRules) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/Class.java --- a/jdk/src/java.base/share/classes/java/lang/Class.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/Class.java Wed Dec 03 19:28:35 2014 +0000 @@ -691,6 +691,8 @@ ClassLoader getClassLoader0() { return classLoader; } // Initialized in JVM not by private constructor + // This field is filtered from reflection access, i.e. getDeclaredField + // will throw NoSuchFieldException private final ClassLoader classLoader; /** @@ -719,15 +721,15 @@ /** - * Returns the {@code Class} representing the superclass of the entity - * (class, interface, primitive type or void) represented by this - * {@code Class}. If this {@code Class} represents either the + * Returns the {@code Class} representing the direct superclass of the + * entity (class, interface, primitive type or void) represented by + * this {@code Class}. If this {@code Class} represents either the * {@code Object} class, an interface, a primitive type, or void, then * null is returned. If this object represents an array class then the * {@code Class} object representing the {@code Object} class is * returned. * - * @return the superclass of the class represented by this object. + * @return the direct superclass of the class represented by this object */ public native Class getSuperclass(); @@ -758,7 +760,7 @@ * @throws java.lang.reflect.MalformedParameterizedTypeException if the * generic superclass refers to a parameterized type that cannot be * instantiated for any reason - * @return the superclass of the class represented by this object + * @return the direct superclass of the class represented by this object * @since 1.5 */ public Type getGenericSuperclass() { @@ -798,15 +800,15 @@ /** - * Determines the interfaces implemented by the class or interface + * Returns the interfaces directly implemented by the class or interface * represented by this object. * - *

If this object represents a class, the return value is an array - * containing objects representing all interfaces implemented by the - * class. The order of the interface objects in the array corresponds to - * the order of the interface names in the {@code implements} clause - * of the declaration of the class represented by this object. For - * example, given the declaration: + *

If this object represents a class, the return value is an array + * containing objects representing all interfaces directly implemented by + * the class. The order of the interface objects in the array corresponds + * to the order of the interface names in the {@code implements} clause of + * the declaration of the class represented by this object. For example, + * given the declaration: *

* {@code class Shimmer implements FloorWax, DessertTopping { ... }} *
@@ -823,23 +825,23 @@ * is the {@code Class} object that represents interface * {@code DessertTopping}. * - *

If this object represents an interface, the array contains objects - * representing all interfaces extended by the interface. The order of the - * interface objects in the array corresponds to the order of the interface - * names in the {@code extends} clause of the declaration of the - * interface represented by this object. + *

If this object represents an interface, the array contains objects + * representing all interfaces directly extended by the interface. The + * order of the interface objects in the array corresponds to the order of + * the interface names in the {@code extends} clause of the declaration of + * the interface represented by this object. * - *

If this object represents a class or interface that implements no + *

If this object represents a class or interface that implements no * interfaces, the method returns an array of length 0. * - *

If this object represents a primitive type or void, the method + *

If this object represents a primitive type or void, the method * returns an array of length 0. * - *

If this {@code Class} object represents an array type, the + *

If this {@code Class} object represents an array type, the * interfaces {@code Cloneable} and {@code java.io.Serializable} are * returned in that order. * - * @return an array of interfaces implemented by this class. + * @return an array of interfaces directly implemented by this class */ public Class[] getInterfaces() { ReflectionData rd = reflectionData(); @@ -873,28 +875,27 @@ * for the semantics of the creation process for parameterized * types. * - *

If this object represents a class, the return value is an - * array containing objects representing all interfaces - * implemented by the class. The order of the interface objects in - * the array corresponds to the order of the interface names in - * the {@code implements} clause of the declaration of the class - * represented by this object. In the case of an array class, the - * interfaces {@code Cloneable} and {@code Serializable} are - * returned in that order. + *

If this object represents a class, the return value is an array + * containing objects representing all interfaces directly implemented by + * the class. The order of the interface objects in the array corresponds + * to the order of the interface names in the {@code implements} clause of + * the declaration of the class represented by this object. * - *

If this object represents an interface, the array contains - * objects representing all interfaces directly extended by the - * interface. The order of the interface objects in the array - * corresponds to the order of the interface names in the - * {@code extends} clause of the declaration of the interface - * represented by this object. + *

If this object represents an interface, the array contains objects + * representing all interfaces directly extended by the interface. The + * order of the interface objects in the array corresponds to the order of + * the interface names in the {@code extends} clause of the declaration of + * the interface represented by this object. * - *

If this object represents a class or interface that - * implements no interfaces, the method returns an array of length - * 0. + *

If this object represents a class or interface that implements no + * interfaces, the method returns an array of length 0. * - *

If this object represents a primitive type or void, the - * method returns an array of length 0. + *

If this object represents a primitive type or void, the method + * returns an array of length 0. + * + *

If this {@code Class} object represents an array type, the + * interfaces {@code Cloneable} and {@code java.io.Serializable} are + * returned in that order. * * @throws java.lang.reflect.GenericSignatureFormatError * if the generic class signature does not conform to the format @@ -905,7 +906,7 @@ * @throws java.lang.reflect.MalformedParameterizedTypeException * if any of the generic superinterfaces refer to a parameterized * type that cannot be instantiated for any reason - * @return an array of interfaces implemented by this class + * @return an array of interfaces directly implemented by this class * @since 1.5 */ public Type[] getGenericInterfaces() { @@ -1533,7 +1534,8 @@ * 0. * *

If this {@code Class} object represents a class, then this method - * returns the public fields of the class and of all its superclasses. + * returns the public fields of the class and of all its superclasses and + * superinterfaces. * *

If this {@code Class} object represents an interface, then this * method returns the fields of the interface and of all its diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/Object.java --- a/jdk/src/java.base/share/classes/java/lang/Object.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/Object.java Wed Dec 03 19:28:35 2014 +0000 @@ -453,7 +453,7 @@ "nanosecond timeout value out of range"); } - if (nanos >= 500000 || (nanos != 0 && timeout == 0)) { + if (nanos > 0) { timeout++; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/Thread.java --- a/jdk/src/java.base/share/classes/java/lang/Thread.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/Thread.java Wed Dec 03 19:28:35 2014 +0000 @@ -145,7 +145,7 @@ registerNatives(); } - private volatile char name[]; + private volatile String name; private int priority; private Thread threadQ; private long eetop; @@ -366,7 +366,7 @@ throw new NullPointerException("name cannot be null"); } - this.name = name.toCharArray(); + this.name = name; Thread parent = currentThread(); SecurityManager security = System.getSecurityManager(); @@ -1119,7 +1119,11 @@ */ public final synchronized void setName(String name) { checkAccess(); - this.name = name.toCharArray(); + if (name == null) { + throw new NullPointerException("name cannot be null"); + } + + this.name = name; if (threadStatus != 0) { setNativeName(name); } @@ -1132,7 +1136,7 @@ * @see #setName(String) */ public final String getName() { - return new String(name, true); + return name; } /** diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandle.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandle.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandle.java Wed Dec 03 19:28:35 2014 +0000 @@ -867,15 +867,11 @@ MethodType postSpreadType = asSpreaderChecks(arrayType, arrayLength); int arity = type().parameterCount(); int spreadArgPos = arity - arrayLength; - if (USE_LAMBDA_FORM_EDITOR) { - MethodHandle afterSpread = this.asType(postSpreadType); - BoundMethodHandle mh = afterSpread.rebind(); - LambdaForm lform = mh.editor().spreadArgumentsForm(1 + spreadArgPos, arrayType, arrayLength); - MethodType preSpreadType = postSpreadType.replaceParameterTypes(spreadArgPos, arity, arrayType); - return mh.copyWith(preSpreadType, lform); - } else { - return MethodHandleImpl.makeSpreadArguments(this, arrayType, spreadArgPos, arrayLength); - } + MethodHandle afterSpread = this.asType(postSpreadType); + BoundMethodHandle mh = afterSpread.rebind(); + LambdaForm lform = mh.editor().spreadArgumentsForm(1 + spreadArgPos, arrayType, arrayLength); + MethodType preSpreadType = postSpreadType.replaceParameterTypes(spreadArgPos, arity, arrayType); + return mh.copyWith(preSpreadType, lform); } /** @@ -996,23 +992,15 @@ public MethodHandle asCollector(Class arrayType, int arrayLength) { asCollectorChecks(arrayType, arrayLength); int collectArgPos = type().parameterCount() - 1; - if (USE_LAMBDA_FORM_EDITOR) { - BoundMethodHandle mh = rebind(); - MethodType resultType = type().asCollectorType(arrayType, arrayLength); - MethodHandle newArray = MethodHandleImpl.varargsArray(arrayType, arrayLength); - LambdaForm lform = mh.editor().collectArgumentArrayForm(1 + collectArgPos, newArray); - if (lform != null) { - return mh.copyWith(resultType, lform); - } - lform = mh.editor().collectArgumentsForm(1 + collectArgPos, newArray.type().basicType()); - return mh.copyWithExtendL(resultType, lform, newArray); - } else { - MethodHandle target = this; - if (arrayType != type().parameterType(collectArgPos)) - target = MethodHandleImpl.makePairwiseConvert(this, type().changeParameterType(collectArgPos, arrayType), true); - MethodHandle collector = MethodHandleImpl.varargsArray(arrayType, arrayLength); - return MethodHandles.collectArguments(target, collectArgPos, collector); + BoundMethodHandle mh = rebind(); + MethodType resultType = type().asCollectorType(arrayType, arrayLength); + MethodHandle newArray = MethodHandleImpl.varargsArray(arrayType, arrayLength); + LambdaForm lform = mh.editor().collectArgumentArrayForm(1 + collectArgPos, newArray); + if (lform != null) { + return mh.copyWith(resultType, lform); } + lform = mh.editor().collectArgumentsForm(1 + collectArgPos, newArray.type().basicType()); + return mh.copyWithExtendL(resultType, lform, newArray); } /** diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Dec 03 19:28:35 2014 +0000 @@ -191,11 +191,7 @@ MethodType dstType = target.type(); if (srcType == dstType) return target; - if (USE_LAMBDA_FORM_EDITOR) { - return makePairwiseConvertByEditor(target, srcType, strict, monobox); - } else { - return makePairwiseConvertIndirect(target, srcType, strict, monobox); - } + return makePairwiseConvertByEditor(target, srcType, strict, monobox); } private static int countNonNull(Object[] array) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java Wed Dec 03 19:28:35 2014 +0000 @@ -45,23 +45,21 @@ static final boolean DUMP_CLASS_FILES; static final boolean TRACE_INTERPRETER; static final boolean TRACE_METHOD_LINKAGE; - static final boolean USE_LAMBDA_FORM_EDITOR; static final int COMPILE_THRESHOLD; static final int DONT_INLINE_THRESHOLD; static final int PROFILE_LEVEL; static { - final Object[] values = new Object[8]; + final Object[] values = new Object[7]; AccessController.doPrivileged(new PrivilegedAction() { public Void run() { values[0] = Boolean.getBoolean("java.lang.invoke.MethodHandle.DEBUG_NAMES"); values[1] = Boolean.getBoolean("java.lang.invoke.MethodHandle.DUMP_CLASS_FILES"); values[2] = Boolean.getBoolean("java.lang.invoke.MethodHandle.TRACE_INTERPRETER"); values[3] = Boolean.getBoolean("java.lang.invoke.MethodHandle.TRACE_METHOD_LINKAGE"); - values[4] = Boolean.getBoolean("java.lang.invoke.MethodHandle.USE_LF_EDITOR"); - values[5] = Integer.getInteger("java.lang.invoke.MethodHandle.COMPILE_THRESHOLD", 30); - values[6] = Integer.getInteger("java.lang.invoke.MethodHandle.DONT_INLINE_THRESHOLD", 30); - values[7] = Integer.getInteger("java.lang.invoke.MethodHandle.PROFILE_LEVEL", 0); + values[4] = Integer.getInteger("java.lang.invoke.MethodHandle.COMPILE_THRESHOLD", 0); + values[5] = Integer.getInteger("java.lang.invoke.MethodHandle.DONT_INLINE_THRESHOLD", 30); + values[6] = Integer.getInteger("java.lang.invoke.MethodHandle.PROFILE_LEVEL", 0); return null; } }); @@ -69,10 +67,9 @@ DUMP_CLASS_FILES = (Boolean) values[1]; TRACE_INTERPRETER = (Boolean) values[2]; TRACE_METHOD_LINKAGE = (Boolean) values[3]; - USE_LAMBDA_FORM_EDITOR = (Boolean) values[4]; - COMPILE_THRESHOLD = (Integer) values[5]; - DONT_INLINE_THRESHOLD = (Integer) values[6]; - PROFILE_LEVEL = (Integer) values[7]; + COMPILE_THRESHOLD = (Integer) values[4]; + DONT_INLINE_THRESHOLD = (Integer) values[5]; + PROFILE_LEVEL = (Integer) values[6]; } /** Tell if any of the debugging switches are turned on. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Wed Dec 03 19:28:35 2014 +0000 @@ -2103,115 +2103,65 @@ reorder = reorder.clone(); // get a private copy MethodType oldType = target.type(); permuteArgumentChecks(reorder, newType, oldType); - if (USE_LAMBDA_FORM_EDITOR) { - // first detect dropped arguments and handle them separately - int[] originalReorder = reorder; - BoundMethodHandle result = target.rebind(); - LambdaForm form = result.form; - int newArity = newType.parameterCount(); - // Normalize the reordering into a real permutation, - // by removing duplicates and adding dropped elements. - // This somewhat improves lambda form caching, as well - // as simplifying the transform by breaking it up into steps. - for (int ddIdx; (ddIdx = findFirstDupOrDrop(reorder, newArity)) != 0; ) { - if (ddIdx > 0) { - // We found a duplicated entry at reorder[ddIdx]. - // Example: (x,y,z)->asList(x,y,z) - // permuted by [1*,0,1] => (a0,a1)=>asList(a1,a0,a1) - // permuted by [0,1,0*] => (a0,a1)=>asList(a0,a1,a0) - // The starred element corresponds to the argument - // deleted by the dupArgumentForm transform. - int srcPos = ddIdx, dstPos = srcPos, dupVal = reorder[srcPos]; - boolean killFirst = false; - for (int val; (val = reorder[--dstPos]) != dupVal; ) { - // Set killFirst if the dup is larger than an intervening position. - // This will remove at least one inversion from the permutation. - if (dupVal > val) killFirst = true; - } - if (!killFirst) { - srcPos = dstPos; - dstPos = ddIdx; - } - form = form.editor().dupArgumentForm(1 + srcPos, 1 + dstPos); - assert (reorder[srcPos] == reorder[dstPos]); - oldType = oldType.dropParameterTypes(dstPos, dstPos + 1); - // contract the reordering by removing the element at dstPos - int tailPos = dstPos + 1; - System.arraycopy(reorder, tailPos, reorder, dstPos, reorder.length - tailPos); - reorder = Arrays.copyOf(reorder, reorder.length - 1); - } else { - int dropVal = ~ddIdx, insPos = 0; - while (insPos < reorder.length && reorder[insPos] < dropVal) { - // Find first element of reorder larger than dropVal. - // This is where we will insert the dropVal. - insPos += 1; - } - Class ptype = newType.parameterType(dropVal); - form = form.editor().addArgumentForm(1 + insPos, BasicType.basicType(ptype)); - oldType = oldType.insertParameterTypes(insPos, ptype); - // expand the reordering by inserting an element at insPos - int tailPos = insPos + 1; - reorder = Arrays.copyOf(reorder, reorder.length + 1); - System.arraycopy(reorder, insPos, reorder, tailPos, reorder.length - tailPos); - reorder[insPos] = dropVal; + // first detect dropped arguments and handle them separately + int[] originalReorder = reorder; + BoundMethodHandle result = target.rebind(); + LambdaForm form = result.form; + int newArity = newType.parameterCount(); + // Normalize the reordering into a real permutation, + // by removing duplicates and adding dropped elements. + // This somewhat improves lambda form caching, as well + // as simplifying the transform by breaking it up into steps. + for (int ddIdx; (ddIdx = findFirstDupOrDrop(reorder, newArity)) != 0; ) { + if (ddIdx > 0) { + // We found a duplicated entry at reorder[ddIdx]. + // Example: (x,y,z)->asList(x,y,z) + // permuted by [1*,0,1] => (a0,a1)=>asList(a1,a0,a1) + // permuted by [0,1,0*] => (a0,a1)=>asList(a0,a1,a0) + // The starred element corresponds to the argument + // deleted by the dupArgumentForm transform. + int srcPos = ddIdx, dstPos = srcPos, dupVal = reorder[srcPos]; + boolean killFirst = false; + for (int val; (val = reorder[--dstPos]) != dupVal; ) { + // Set killFirst if the dup is larger than an intervening position. + // This will remove at least one inversion from the permutation. + if (dupVal > val) killFirst = true; } - assert (permuteArgumentChecks(reorder, newType, oldType)); + if (!killFirst) { + srcPos = dstPos; + dstPos = ddIdx; + } + form = form.editor().dupArgumentForm(1 + srcPos, 1 + dstPos); + assert (reorder[srcPos] == reorder[dstPos]); + oldType = oldType.dropParameterTypes(dstPos, dstPos + 1); + // contract the reordering by removing the element at dstPos + int tailPos = dstPos + 1; + System.arraycopy(reorder, tailPos, reorder, dstPos, reorder.length - tailPos); + reorder = Arrays.copyOf(reorder, reorder.length - 1); + } else { + int dropVal = ~ddIdx, insPos = 0; + while (insPos < reorder.length && reorder[insPos] < dropVal) { + // Find first element of reorder larger than dropVal. + // This is where we will insert the dropVal. + insPos += 1; + } + Class ptype = newType.parameterType(dropVal); + form = form.editor().addArgumentForm(1 + insPos, BasicType.basicType(ptype)); + oldType = oldType.insertParameterTypes(insPos, ptype); + // expand the reordering by inserting an element at insPos + int tailPos = insPos + 1; + reorder = Arrays.copyOf(reorder, reorder.length + 1); + System.arraycopy(reorder, insPos, reorder, tailPos, reorder.length - tailPos); + reorder[insPos] = dropVal; } - assert (reorder.length == newArity); // a perfect permutation - // Note: This may cache too many distinct LFs. Consider backing off to varargs code. - form = form.editor().permuteArgumentsForm(1, reorder); - if (newType == result.type() && form == result.internalForm()) - return result; - return result.copyWith(newType, form); - } else { - // first detect dropped arguments and handle them separately - MethodHandle originalTarget = target; - int newArity = newType.parameterCount(); - for (int dropIdx; (dropIdx = findFirstDrop(reorder, newArity)) >= 0; ) { - // dropIdx is missing from reorder; add it in at the end - int oldArity = reorder.length; - target = dropArguments(target, oldArity, newType.parameterType(dropIdx)); - reorder = Arrays.copyOf(reorder, oldArity + 1); - reorder[oldArity] = dropIdx; - } - assert(target == originalTarget || permuteArgumentChecks(reorder, newType, target.type())); - // Note: This may cache too many distinct LFs. Consider backing off to varargs code. - BoundMethodHandle result = target.rebind(); - LambdaForm form = result.form.permuteArguments(1, reorder, basicTypes(newType.parameterList())); - return result.copyWith(newType, form); + assert (permuteArgumentChecks(reorder, newType, oldType)); } - } - - /** Return the first value in [0..newArity-1] that is not present in reorder. */ - private static int findFirstDrop(int[] reorder, int newArity) { - final int BIT_LIMIT = 63; // max number of bits in bit mask - if (newArity < BIT_LIMIT) { - long mask = 0; - for (int arg : reorder) { - assert(arg < newArity); - mask |= (1L << arg); - } - if (mask == (1L << newArity) - 1) { - assert(Long.numberOfTrailingZeros(Long.lowestOneBit(~mask)) == newArity); - return -1; - } - // find first zero - long zeroBit = Long.lowestOneBit(~mask); - int zeroPos = Long.numberOfTrailingZeros(zeroBit); - assert(zeroPos < newArity); - return zeroPos; - } else { - BitSet mask = new BitSet(newArity); - for (int arg : reorder) { - assert (arg < newArity); - mask.set(arg); - } - int zeroPos = mask.nextClearBit(0); - assert(zeroPos <= newArity); - if (zeroPos == newArity) - return -1; - return zeroPos; - } + assert (reorder.length == newArity); // a perfect permutation + // Note: This may cache too many distinct LFs. Consider backing off to varargs code. + form = form.editor().permuteArgumentsForm(1, reorder); + if (newType == result.type() && form == result.internalForm()) + return result; + return result.copyWith(newType, form); } /** @@ -2502,13 +2452,9 @@ if (dropped == 0) return target; BoundMethodHandle result = target.rebind(); LambdaForm lform = result.form; - if (USE_LAMBDA_FORM_EDITOR) { - int insertFormArg = 1 + pos; - for (Class ptype : valueTypes) { - lform = lform.editor().addArgumentForm(insertFormArg++, BasicType.basicType(ptype)); - } - } else { - lform = lform.addArguments(pos, valueTypes); + int insertFormArg = 1 + pos; + for (Class ptype : valueTypes) { + lform = lform.editor().addArgumentForm(insertFormArg++, BasicType.basicType(ptype)); } result = result.copyWith(newType, lform); return result; @@ -2659,18 +2605,14 @@ /*non-public*/ static MethodHandle filterArgument(MethodHandle target, int pos, MethodHandle filter) { filterArgumentChecks(target, pos, filter); - if (USE_LAMBDA_FORM_EDITOR) { - MethodType targetType = target.type(); - MethodType filterType = filter.type(); - BoundMethodHandle result = target.rebind(); - Class newParamType = filterType.parameterType(0); - LambdaForm lform = result.editor().filterArgumentForm(1 + pos, BasicType.basicType(newParamType)); - MethodType newType = targetType.changeParameterType(pos, newParamType); - result = result.copyWithExtendL(newType, lform, filter); - return result; - } else { - return MethodHandleImpl.makeCollectArguments(target, filter, pos, false); - } + MethodType targetType = target.type(); + MethodType filterType = filter.type(); + BoundMethodHandle result = target.rebind(); + Class newParamType = filterType.parameterType(0); + LambdaForm lform = result.editor().filterArgumentForm(1 + pos, BasicType.basicType(newParamType)); + MethodType newType = targetType.changeParameterType(pos, newParamType); + result = result.copyWithExtendL(newType, lform, filter); + return result; } private static void filterArgumentsCheckArity(MethodHandle target, int pos, MethodHandle[] filters) { @@ -2797,21 +2739,17 @@ public static MethodHandle collectArguments(MethodHandle target, int pos, MethodHandle filter) { MethodType newType = collectArgumentsChecks(target, pos, filter); - if (USE_LAMBDA_FORM_EDITOR) { - MethodType collectorType = filter.type(); - BoundMethodHandle result = target.rebind(); - LambdaForm lform; - if (collectorType.returnType().isArray() && filter.intrinsicName() == Intrinsic.NEW_ARRAY) { - lform = result.editor().collectArgumentArrayForm(1 + pos, filter); - if (lform != null) { - return result.copyWith(newType, lform); - } + MethodType collectorType = filter.type(); + BoundMethodHandle result = target.rebind(); + LambdaForm lform; + if (collectorType.returnType().isArray() && filter.intrinsicName() == Intrinsic.NEW_ARRAY) { + lform = result.editor().collectArgumentArrayForm(1 + pos, filter); + if (lform != null) { + return result.copyWith(newType, lform); } - lform = result.editor().collectArgumentsForm(1 + pos, collectorType.basicType()); - return result.copyWithExtendL(newType, lform, filter); - } else { - return MethodHandleImpl.makeCollectArguments(target, filter, pos, false); } + lform = result.editor().collectArgumentsForm(1 + pos, collectorType.basicType()); + return result.copyWithExtendL(newType, lform, filter); } private static MethodType collectArgumentsChecks(MethodHandle target, int pos, MethodHandle filter) throws RuntimeException { @@ -2890,16 +2828,12 @@ MethodType targetType = target.type(); MethodType filterType = filter.type(); filterReturnValueChecks(targetType, filterType); - if (USE_LAMBDA_FORM_EDITOR) { - BoundMethodHandle result = target.rebind(); - BasicType rtype = BasicType.basicType(filterType.returnType()); - LambdaForm lform = result.editor().filterReturnForm(rtype, false); - MethodType newType = targetType.changeReturnType(filterType.returnType()); - result = result.copyWithExtendL(newType, lform, filter); - return result; - } else { - return MethodHandleImpl.makeCollectArguments(filter, target, 0, false); - } + BoundMethodHandle result = target.rebind(); + BasicType rtype = BasicType.basicType(filterType.returnType()); + LambdaForm lform = result.editor().filterReturnForm(rtype, false); + MethodType newType = targetType.changeReturnType(filterType.returnType()); + result = result.copyWithExtendL(newType, lform, filter); + return result; } private static void filterReturnValueChecks(MethodType targetType, MethodType filterType) throws RuntimeException { @@ -2993,19 +2927,15 @@ MethodType targetType = target.type(); MethodType combinerType = combiner.type(); Class rtype = foldArgumentChecks(foldPos, targetType, combinerType); - if (USE_LAMBDA_FORM_EDITOR) { - BoundMethodHandle result = target.rebind(); - boolean dropResult = (rtype == void.class); - // Note: This may cache too many distinct LFs. Consider backing off to varargs code. - LambdaForm lform = result.editor().foldArgumentsForm(1 + foldPos, dropResult, combinerType.basicType()); - MethodType newType = targetType; - if (!dropResult) - newType = newType.dropParameterTypes(foldPos, foldPos + 1); - result = result.copyWithExtendL(newType, lform, combiner); - return result; - } else { - return MethodHandleImpl.makeCollectArguments(target, combiner, foldPos, true); - } + BoundMethodHandle result = target.rebind(); + boolean dropResult = (rtype == void.class); + // Note: This may cache too many distinct LFs. Consider backing off to varargs code. + LambdaForm lform = result.editor().foldArgumentsForm(1 + foldPos, dropResult, combinerType.basicType()); + MethodType newType = targetType; + if (!dropResult) + newType = newType.dropParameterTypes(foldPos, foldPos + 1); + result = result.copyWithExtendL(newType, lform, combiner); + return result; } private static Class foldArgumentChecks(int foldPos, MethodType targetType, MethodType combinerType) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java --- a/jdk/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -140,13 +140,6 @@ throw new SecurityException("Cannot make a java.lang.Class" + " constructor accessible"); } - } else if (obj instanceof Field && flag == true) { - Field f = (Field)obj; - if (f.getDeclaringClass() == Class.class && - f.getName().equals("classLoader")) { - throw new SecurityException("Cannot make java.lang.Class.classLoader" + - " accessible"); - } } obj.override = flag; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/net/Authenticator.java --- a/jdk/src/java.base/share/classes/java/net/Authenticator.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/net/Authenticator.java Wed Dec 03 19:28:35 2014 +0000 @@ -60,7 +60,7 @@ class Authenticator { // The system-wide authenticator object. See setDefault(). - private static Authenticator theAuthenticator; + private static volatile Authenticator theAuthenticator; private String requestingHost; private InetAddress requestingSite; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/net/DatagramSocket.java --- a/jdk/src/java.base/share/classes/java/net/DatagramSocket.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/net/DatagramSocket.java Wed Dec 03 19:28:35 2014 +0000 @@ -771,6 +771,7 @@ } // end of while } } + DatagramPacket tmp = null; if ((connectState == ST_CONNECTED_NO_IMPL) || explicitFilter) { // We have to do the filtering the old fashioned way since // the native impl doesn't support connect or the connect @@ -795,11 +796,13 @@ if ((!connectedAddress.equals(peekAddress)) || (connectedPort != peekPort)) { // throw the packet away and silently continue - DatagramPacket tmp = new DatagramPacket( + tmp = new DatagramPacket( new byte[1024], 1024); getImpl().receive(tmp); if (explicitFilter) { - bytesLeftToFilter -= tmp.getLength(); + if (checkFiltering(tmp)) { + stop = true; + } } } else { stop = true; @@ -809,18 +812,22 @@ // If the security check succeeds, or the datagram is // connected then receive the packet getImpl().receive(p); - if (explicitFilter) { - bytesLeftToFilter -= p.getLength(); - if (bytesLeftToFilter <= 0) { - explicitFilter = false; - } else { - // break out of filter, if there is no more data queued - explicitFilter = getImpl().dataAvailable() > 0; - } + if (explicitFilter && tmp == null) { + // packet was not filtered, account for it here + checkFiltering(p); } } } + private boolean checkFiltering(DatagramPacket p) throws SocketException { + bytesLeftToFilter -= p.getLength(); + if (bytesLeftToFilter <= 0 || getImpl().dataAvailable() <= 0) { + explicitFilter = false; + return true; + } + return false; + } + /** * Gets the local address to which the socket is bound. * diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java --- a/jdk/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java Wed Dec 03 19:28:35 2014 +0000 @@ -198,7 +198,7 @@ blockedOn(null); Thread interrupted = this.interrupted; if (interrupted != null && interrupted == Thread.currentThread()) { - interrupted = null; + this.interrupted = null; throw new ClosedByInterruptException(); } if (!completed && !open) diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/nio/file/Files.java --- a/jdk/src/java.base/share/classes/java/nio/file/Files.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/nio/file/Files.java Wed Dec 03 19:28:35 2014 +0000 @@ -1778,7 +1778,7 @@ * @param options * options indicating how symbolic links are handled * - * @return the {@code path} parameter + * @return the given path * * @throws UnsupportedOperationException * if the attribute view is not available @@ -2019,7 +2019,7 @@ * @param perms * The new set of permissions * - * @return The path + * @return The given path * * @throws UnsupportedOperationException * if the associated file system does not support the {@code @@ -2102,7 +2102,7 @@ * @param owner * The new file owner * - * @return The path + * @return The given path * * @throws UnsupportedOperationException * if the associated file system does not support the {@code @@ -2289,14 +2289,14 @@ * @param time * the new last modified time * - * @return the path + * @return the given path * * @throws IOException * if an I/O error occurs * @throws SecurityException - * In the case of the default provider, the security manager's {@link - * SecurityManager#checkWrite(String) checkWrite} method is invoked - * to check write access to file + * In the case of the default provider, and a security manager is + * installed, its {@link SecurityManager#checkWrite(String) + * checkWrite} method denies write access to the file. * * @see BasicFileAttributeView#setTimes */ @@ -2304,7 +2304,7 @@ throws IOException { getFileAttributeView(path, BasicFileAttributeView.class) - .setTimes(time, null, null); + .setTimes(Objects.requireNonNull(time), null, null); return path; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/nio/file/Path.java --- a/jdk/src/java.base/share/classes/java/nio/file/Path.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/nio/file/Path.java Wed Dec 03 19:28:35 2014 +0000 @@ -325,7 +325,7 @@ * * @return the resulting path or this path if it does not contain * redundant name elements; an empty path is returned if this path - * does have a root component and all name elements are redundant + * does not have a root component and all name elements are redundant * * @see #getParent * @see #toRealPath diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/security/KeyStore.java --- a/jdk/src/java.base/share/classes/java/security/KeyStore.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/security/KeyStore.java Wed Dec 03 19:28:35 2014 +0000 @@ -416,7 +416,8 @@ /** * Retrieves the attributes associated with an entry. - *

+ * + * @implSpec * The default implementation returns an empty {@code Set}. * * @return an unmodifiable {@code Set} of attributes, possibly empty diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/security/Principal.java --- a/jdk/src/java.base/share/classes/java/security/Principal.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/security/Principal.java Wed Dec 03 19:28:35 2014 +0000 @@ -74,7 +74,8 @@ /** * Returns true if the specified subject is implied by this principal. * - *

The default implementation of this method returns true if + * @implSpec + * The default implementation of this method returns true if * {@code subject} is non-null and contains at least one principal that * is equal to this principal. * diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/text/AttributedString.java --- a/jdk/src/java.base/share/classes/java/text/AttributedString.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/text/AttributedString.java Wed Dec 03 19:28:35 2014 +0000 @@ -48,21 +48,18 @@ */ public class AttributedString { - - // since there are no vectors of int, we have to use arrays. - // We allocate them in chunks of 10 elements so we don't have to allocate all the time. - private static final int ARRAY_SIZE_INCREMENT = 10; - // field holding the text String text; - // fields holding run attribute information - // run attributes are organized by run - int runArraySize; // current size of the arrays - int runCount; // actual number of runs, <= runArraySize - int runStarts[]; // start index for each run - Vector runAttributes[]; // vector of attribute keys for each run - Vector runAttributeValues[]; // parallel vector of attribute values for each run + // Fields holding run attribute information. + // Run attributes are organized by run. + // Arrays are always of equal lengths (the current capacity). + // Since there are no vectors of int, we have to use arrays. + private static final int INITIAL_CAPACITY = 10; + int runCount; // actual number of runs, <= current capacity + int[] runStarts; // start index for each run + Vector[] runAttributes; // vector of attribute keys for each run + Vector[] runAttributeValues; // parallel vector of attribute values for each run /** * Constructs an AttributedString instance with the given @@ -416,18 +413,17 @@ private final void createRunAttributeDataVectors() { // use temporary variables so things remain consistent in case of an exception - int newRunStarts[] = new int[ARRAY_SIZE_INCREMENT]; + int[] newRunStarts = new int[INITIAL_CAPACITY]; @SuppressWarnings("unchecked") - Vector newRunAttributes[] = (Vector[]) new Vector[ARRAY_SIZE_INCREMENT]; + Vector[] newRunAttributes = (Vector[]) new Vector[INITIAL_CAPACITY]; @SuppressWarnings("unchecked") - Vector newRunAttributeValues[] = (Vector[]) new Vector[ARRAY_SIZE_INCREMENT]; + Vector[] newRunAttributeValues = (Vector[]) new Vector[INITIAL_CAPACITY]; runStarts = newRunStarts; runAttributes = newRunAttributes; runAttributeValues = newRunAttributeValues; - runArraySize = ARRAY_SIZE_INCREMENT; runCount = 1; // assume initial run starting at index 0 } @@ -465,25 +461,22 @@ // we'll have to break up a run // first, make sure we have enough space in our arrays - if (runCount == runArraySize) { - int newArraySize = runArraySize + ARRAY_SIZE_INCREMENT; - int newRunStarts[] = new int[newArraySize]; - - @SuppressWarnings("unchecked") - Vector newRunAttributes[] = (Vector[]) new Vector[newArraySize]; + int currentCapacity = runStarts.length; + if (runCount == currentCapacity) { + // We need to resize - we grow capacity by 25%. + int newCapacity = currentCapacity + (currentCapacity >> 2); - @SuppressWarnings("unchecked") - Vector newRunAttributeValues[] = (Vector[]) new Vector[newArraySize]; + // use temporary variables so things remain consistent in case of an exception + int[] newRunStarts = + Arrays.copyOf(runStarts, newCapacity); + Vector[] newRunAttributes = + Arrays.copyOf(runAttributes, newCapacity); + Vector[] newRunAttributeValues = + Arrays.copyOf(runAttributeValues, newCapacity); - for (int i = 0; i < runArraySize; i++) { - newRunStarts[i] = runStarts[i]; - newRunAttributes[i] = runAttributes[i]; - newRunAttributeValues[i] = runAttributeValues[i]; - } runStarts = newRunStarts; runAttributes = newRunAttributes; runAttributeValues = newRunAttributeValues; - runArraySize = newArraySize; } // make copies of the attribute information of the old run that the new one used to be part of diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/Formatter.java --- a/jdk/src/java.base/share/classes/java/util/Formatter.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/Formatter.java Wed Dec 03 19:28:35 2014 +0000 @@ -2624,10 +2624,11 @@ private boolean dt = false; private char c; - private int index(String s) { - if (s != null) { + private int index(String s, int start, int end) { + if (start >= 0) { try { - index = Integer.parseInt(s.substring(0, s.length() - 1)); + // skip the trailing '$' + index = Integer.parseInt(s, start, end - 1, 10); } catch (NumberFormatException x) { assert(false); } @@ -2648,11 +2649,11 @@ return f; } - private int width(String s) { + private int width(String s, int start, int end) { width = -1; - if (s != null) { + if (start >= 0) { try { - width = Integer.parseInt(s); + width = Integer.parseInt(s, start, end, 10); if (width < 0) throw new IllegalFormatWidthException(width); } catch (NumberFormatException x) { @@ -2662,12 +2663,12 @@ return width; } - private int precision(String s) { + private int precision(String s, int start, int end) { precision = -1; - if (s != null) { + if (start >= 0) { try { - // remove the '.' - precision = Integer.parseInt(s.substring(1)); + // skip the leading '.' + precision = Integer.parseInt(s, start + 1, end, 10); if (precision < 0) throw new IllegalFormatPrecisionException(precision); } catch (NumberFormatException x) { @@ -2695,23 +2696,19 @@ } FormatSpecifier(String s, Matcher m) { - int idx = 1; - - index(m.group(idx++)); - flags(s, m.start(idx), m.end(idx++)); - width(m.group(idx++)); - precision(m.group(idx++)); - - int tTStart = m.start(idx); - int tTEnd = m.end(idx++); - if (tTStart != -1 && tTEnd != -1) { + index(s, m.start(1), m.end(1)); + flags(s, m.start(2), m.end(2)); + width(s, m.start(3), m.end(3)); + precision(s, m.start(4), m.end(4)); + + int tTStart = m.start(5); + if (tTStart >= 0) { dt = true; - if (tTStart == tTEnd - 1 && s.charAt(tTStart) == 'T') { + if (s.charAt(tTStart) == 'T') { f.add(Flags.UPPERCASE); } } - - conversion(s.charAt(m.start(idx))); + conversion(s.charAt(m.start(6))); if (dt) checkDateTime(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/SplittableRandom.java --- a/jdk/src/java.base/share/classes/java/util/SplittableRandom.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/SplittableRandom.java Wed Dec 03 19:28:35 2014 +0000 @@ -25,7 +25,6 @@ package java.util; -import java.net.NetworkInterface; import java.util.concurrent.atomic.AtomicLong; import java.util.function.IntConsumer; import java.util.function.LongConsumer; @@ -140,11 +139,10 @@ * other cases, this split must be performed in a thread-safe * manner, so we use an AtomicLong to represent the seed rather * than use an explicit SplittableRandom. To bootstrap the - * defaultGen, we start off using a seed based on current time and - * network interface address unless the java.util.secureRandomSeed - * property is set. This serves as a slimmed-down (and insecure) - * variant of SecureRandom that also avoids stalls that may occur - * when using /dev/random. + * defaultGen, we start off using a seed based on current time + * unless the java.util.secureRandomSeed property is set. This + * serves as a slimmed-down (and insecure) variant of SecureRandom + * that also avoids stalls that may occur when using /dev/random. * * It is a relatively simple matter to apply the basic design here * to use 128 bit seeds. However, emulating 128bit arithmetic and @@ -237,34 +235,7 @@ s = (s << 8) | ((long)(seedBytes[i]) & 0xffL); return s; } - long h = 0L; - try { - Enumeration ifcs = - NetworkInterface.getNetworkInterfaces(); - boolean retry = false; // retry once if getHardwareAddress is null - while (ifcs.hasMoreElements()) { - NetworkInterface ifc = ifcs.nextElement(); - if (!ifc.isVirtual()) { // skip fake addresses - byte[] bs = ifc.getHardwareAddress(); - if (bs != null) { - int n = bs.length; - int m = Math.min(n >>> 1, 4); - for (int i = 0; i < m; ++i) - h = (h << 16) ^ (bs[i] << 8) ^ bs[n-1-i]; - if (m < 4) - h = (h << 8) ^ bs[n-1-m]; - h = mix64(h); - break; - } - else if (!retry) - retry = true; - else - break; - } - } - } catch (Exception ignore) { - } - return (h ^ mix64(System.currentTimeMillis()) ^ + return (mix64(System.currentTimeMillis()) ^ mix64(System.nanoTime())); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/concurrent/ThreadLocalRandom.java --- a/jdk/src/java.base/share/classes/java/util/concurrent/ThreadLocalRandom.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/ThreadLocalRandom.java Wed Dec 03 19:28:35 2014 +0000 @@ -36,8 +36,6 @@ package java.util.concurrent; import java.io.ObjectStreamField; -import java.net.NetworkInterface; -import java.util.Enumeration; import java.util.Random; import java.util.Spliterator; import java.util.concurrent.atomic.AtomicInteger; @@ -147,34 +145,7 @@ s = (s << 8) | ((long)(seedBytes[i]) & 0xffL); return s; } - long h = 0L; - try { - Enumeration ifcs = - NetworkInterface.getNetworkInterfaces(); - boolean retry = false; // retry once if getHardwareAddress is null - while (ifcs.hasMoreElements()) { - NetworkInterface ifc = ifcs.nextElement(); - if (!ifc.isVirtual()) { // skip fake addresses - byte[] bs = ifc.getHardwareAddress(); - if (bs != null) { - int n = bs.length; - int m = Math.min(n >>> 1, 4); - for (int i = 0; i < m; ++i) - h = (h << 16) ^ (bs[i] << 8) ^ bs[n-1-i]; - if (m < 4) - h = (h << 8) ^ bs[n-1-m]; - h = mix64(h); - break; - } - else if (!retry) - retry = true; - else - break; - } - } - } catch (Exception ignore) { - } - return (h ^ mix64(System.currentTimeMillis()) ^ + return (mix64(System.currentTimeMillis()) ^ mix64(System.nanoTime())); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/jar/Attributes.java --- a/jdk/src/java.base/share/classes/java/util/jar/Attributes.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/jar/Attributes.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,7 +28,7 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.Collection; @@ -47,6 +47,9 @@ * JAR File Specification * for more information about valid attribute names and values. * + *

This map and its views have a predictable iteration order, namely the + * order that keys were inserted into the map, as with {@link LinkedHashMap}. + * * @author David Connelly * @see Manifest * @since 1.2 @@ -71,7 +74,7 @@ * @param size the initial number of attributes */ public Attributes(int size) { - map = new HashMap<>(size); + map = new LinkedHashMap<>(size); } /** @@ -81,7 +84,7 @@ * @param attr the specified Attributes */ public Attributes(Attributes attr) { - map = new HashMap<>(attr); + map = new LinkedHashMap<>(attr); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/zip/Adler32.java --- a/jdk/src/java.base/share/classes/java/util/zip/Adler32.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/zip/Adler32.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,9 +34,8 @@ * can be computed much faster. * *

Passing a {@code null} argument to a method in this class will cause - * a {@link NullPointerException} to be thrown. + * a {@link NullPointerException} to be thrown.

* - * @see Checksum * @author David Connelly */ public @@ -53,9 +52,8 @@ /** * Updates the checksum with the specified byte (the low eight * bits of the argument b). - * - * @param b the byte to update the checksum with */ + @Override public void update(int b) { adler = update(adler, b); } @@ -63,11 +61,12 @@ /** * Updates the checksum with the specified array of bytes. * - * @throws ArrayIndexOutOfBoundsException - * if {@code off} is negative, or {@code len} is negative, - * or {@code off+len} is greater than the length of the - * array {@code b} + * @throws ArrayIndexOutOfBoundsException + * if {@code off} is negative, or {@code len} is negative, or + * {@code off+len} is negative or greater than the length of + * the array {@code b}. */ + @Override public void update(byte[] b, int off, int len) { if (b == null) { throw new NullPointerException(); @@ -79,28 +78,15 @@ } /** - * Updates the checksum with the specified array of bytes. - * - * @param b the byte array to update the checksum with - */ - public void update(byte[] b) { - adler = updateBytes(adler, b, 0, b.length); - } - - - /** * Updates the checksum with the bytes from the specified buffer. * - * The checksum is updated using - * buffer.{@link java.nio.Buffer#remaining() remaining()} - * bytes starting at - * buffer.{@link java.nio.Buffer#position() position()} - * Upon return, the buffer's position will be updated to its - * limit; its limit will not have been changed. + * The checksum is updated with the remaining bytes in the buffer, starting + * at the buffer's position. Upon return, the buffer's position will be + * updated to its limit; its limit will not have been changed. * - * @param buffer the ByteBuffer to update the checksum with * @since 1.8 */ + @Override public void update(ByteBuffer buffer) { int pos = buffer.position(); int limit = buffer.limit(); @@ -113,9 +99,12 @@ } else if (buffer.hasArray()) { adler = updateBytes(adler, buffer.array(), pos + buffer.arrayOffset(), rem); } else { - byte[] b = new byte[rem]; - buffer.get(b); - adler = updateBytes(adler, b, 0, b.length); + byte[] b = new byte[Math.min(buffer.remaining(), 4096)]; + while (buffer.hasRemaining()) { + int length = Math.min(buffer.remaining(), b.length); + buffer.get(b, 0, length); + update(b, 0, length); + } } buffer.position(limit); } @@ -123,6 +112,7 @@ /** * Resets the checksum to initial value. */ + @Override public void reset() { adler = 1; } @@ -130,6 +120,7 @@ /** * Returns the checksum value. */ + @Override public long getValue() { return (long)adler & 0xffffffffL; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/zip/CRC32.java --- a/jdk/src/java.base/share/classes/java/util/zip/CRC32.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/zip/CRC32.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,9 +32,8 @@ * A class that can be used to compute the CRC-32 of a data stream. * *

Passing a {@code null} argument to a method in this class will cause - * a {@link NullPointerException} to be thrown. + * a {@link NullPointerException} to be thrown.

* - * @see Checksum * @author David Connelly */ public @@ -51,9 +50,8 @@ /** * Updates the CRC-32 checksum with the specified byte (the low * eight bits of the argument b). - * - * @param b the byte to update the checksum with */ + @Override public void update(int b) { crc = update(crc, b); } @@ -61,11 +59,12 @@ /** * Updates the CRC-32 checksum with the specified array of bytes. * - * @throws ArrayIndexOutOfBoundsException - * if {@code off} is negative, or {@code len} is negative, - * or {@code off+len} is greater than the length of the - * array {@code b} + * @throws ArrayIndexOutOfBoundsException + * if {@code off} is negative, or {@code len} is negative, or + * {@code off+len} is negative or greater than the length of + * the array {@code b}. */ + @Override public void update(byte[] b, int off, int len) { if (b == null) { throw new NullPointerException(); @@ -77,27 +76,15 @@ } /** - * Updates the CRC-32 checksum with the specified array of bytes. + * Updates the CRC-32 checksum with the bytes from the specified buffer. * - * @param b the array of bytes to update the checksum with - */ - public void update(byte[] b) { - crc = updateBytes(crc, b, 0, b.length); - } - - /** - * Updates the checksum with the bytes from the specified buffer. + * The checksum is updated with the remaining bytes in the buffer, starting + * at the buffer's position. Upon return, the buffer's position will be + * updated to its limit; its limit will not have been changed. * - * The checksum is updated using - * buffer.{@link java.nio.Buffer#remaining() remaining()} - * bytes starting at - * buffer.{@link java.nio.Buffer#position() position()} - * Upon return, the buffer's position will - * be updated to its limit; its limit will not have been changed. - * - * @param buffer the ByteBuffer to update the checksum with * @since 1.8 */ + @Override public void update(ByteBuffer buffer) { int pos = buffer.position(); int limit = buffer.limit(); @@ -110,9 +97,12 @@ } else if (buffer.hasArray()) { crc = updateBytes(crc, buffer.array(), pos + buffer.arrayOffset(), rem); } else { - byte[] b = new byte[rem]; - buffer.get(b); - crc = updateBytes(crc, b, 0, b.length); + byte[] b = new byte[Math.min(buffer.remaining(), 4096)]; + while (buffer.hasRemaining()) { + int length = Math.min(buffer.remaining(), b.length); + buffer.get(b, 0, length); + update(b, 0, length); + } } buffer.position(limit); } @@ -120,6 +110,7 @@ /** * Resets CRC-32 to initial value. */ + @Override public void reset() { crc = 0; } @@ -127,6 +118,7 @@ /** * Returns CRC-32 value. */ + @Override public long getValue() { return (long)crc & 0xffffffffL; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/zip/CRC32C.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/java/util/zip/CRC32C.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,339 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.util.zip; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import sun.misc.Unsafe; +import sun.nio.ch.DirectBuffer; + +/** + * A class that can be used to compute the CRC-32C of a data stream. + * + *

+ * CRC-32C is defined in RFC + * 3720: Internet Small Computer Systems Interface (iSCSI). + *

+ * + *

+ * Passing a {@code null} argument to a method in this class will cause a + * {@link NullPointerException} to be thrown. + *

+ * + * @since 1.9 + */ +public final class CRC32C implements Checksum { + + /* + * This CRC-32C implementation uses the 'slicing-by-8' algorithm described + * in the paper "A Systematic Approach to Building High Performance + * Software-Based CRC Generators" by Michael E. Kounavis and Frank L. Berry, + * Intel Research and Development + */ + + /** + * CRC-32C Polynomial + */ + private static final int CRC32C_POLY = 0x1EDC6F41; + private static final int REVERSED_CRC32C_POLY = Integer.reverse(CRC32C_POLY); + + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); + + // Lookup tables + // Lookup table for single byte calculations + private static final int[] byteTable; + // Lookup tables for bulk operations in 'slicing-by-8' algorithm + private static final int[][] byteTables = new int[8][256]; + private static final int[] byteTable0 = byteTables[0]; + private static final int[] byteTable1 = byteTables[1]; + private static final int[] byteTable2 = byteTables[2]; + private static final int[] byteTable3 = byteTables[3]; + private static final int[] byteTable4 = byteTables[4]; + private static final int[] byteTable5 = byteTables[5]; + private static final int[] byteTable6 = byteTables[6]; + private static final int[] byteTable7 = byteTables[7]; + + static { + // Generate lookup tables + // High-order polynomial term stored in LSB of r. + for (int index = 0; index < byteTables[0].length; index++) { + int r = index; + for (int i = 0; i < Byte.SIZE; i++) { + if ((r & 1) != 0) { + r = (r >>> 1) ^ REVERSED_CRC32C_POLY; + } else { + r >>>= 1; + } + } + byteTables[0][index] = r; + } + + for (int index = 0; index < byteTables[0].length; index++) { + int r = byteTables[0][index]; + + for (int k = 1; k < byteTables.length; k++) { + r = byteTables[0][r & 0xFF] ^ (r >>> 8); + byteTables[k][index] = r; + } + } + + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + byteTable = byteTables[0]; + } else { // ByteOrder.BIG_ENDIAN + byteTable = new int[byteTable0.length]; + System.arraycopy(byteTable0, 0, byteTable, 0, byteTable0.length); + for (int[] table : byteTables) { + for (int index = 0; index < table.length; index++) { + table[index] = Integer.reverseBytes(table[index]); + } + } + } + } + + /** + * Calculated CRC-32C value + */ + private int crc = 0xFFFFFFFF; + + /** + * Creates a new CRC32C object. + */ + public CRC32C() { + } + + /** + * Updates the CRC-32C checksum with the specified byte (the low eight bits + * of the argument b). + */ + @Override + public void update(int b) { + crc = (crc >>> 8) ^ byteTable[(crc ^ (b & 0xFF)) & 0xFF]; + } + + /** + * Updates the CRC-32C checksum with the specified array of bytes. + * + * @throws ArrayIndexOutOfBoundsException + * if {@code off} is negative, or {@code len} is negative, or + * {@code off+len} is negative or greater than the length of + * the array {@code b}. + */ + @Override + public void update(byte[] b, int off, int len) { + if (b == null) { + throw new NullPointerException(); + } + if (off < 0 || len < 0 || off > b.length - len) { + throw new ArrayIndexOutOfBoundsException(); + } + crc = updateBytes(crc, b, off, (off + len)); + } + + /** + * Updates the CRC-32C checksum with the bytes from the specified buffer. + * + * The checksum is updated with the remaining bytes in the buffer, starting + * at the buffer's position. Upon return, the buffer's position will be + * updated to its limit; its limit will not have been changed. + */ + @Override + public void update(ByteBuffer buffer) { + int pos = buffer.position(); + int limit = buffer.limit(); + assert (pos <= limit); + int rem = limit - pos; + if (rem <= 0) { + return; + } + + if (buffer instanceof DirectBuffer) { + crc = updateDirectByteBuffer(crc, ((DirectBuffer) buffer).address(), + pos, limit); + } else if (buffer.hasArray()) { + crc = updateBytes(crc, buffer.array(), pos + buffer.arrayOffset(), + limit + buffer.arrayOffset()); + } else { + byte[] b = new byte[Math.min(buffer.remaining(), 4096)]; + while (buffer.hasRemaining()) { + int length = Math.min(buffer.remaining(), b.length); + buffer.get(b, 0, length); + update(b, 0, length); + } + } + buffer.position(limit); + } + + /** + * Resets CRC-32C to initial value. + */ + @Override + public void reset() { + crc = 0xFFFFFFFF; + } + + /** + * Returns CRC-32C value. + */ + @Override + public long getValue() { + return (~crc) & 0xFFFFFFFFL; + } + + /** + * Updates the CRC-32C checksum with the specified array of bytes. + */ + private static int updateBytes(int crc, byte[] b, int off, int end) { + + // Do only byte reads for arrays so short they can't be aligned + // or if bytes are stored with a larger witdh than one byte.,% + if (end - off >= 8 && Unsafe.ARRAY_BYTE_INDEX_SCALE == 1) { + + // align on 8 bytes + int alignLength + = (8 - ((Unsafe.ARRAY_BYTE_BASE_OFFSET + off) & 0x7)) & 0x7; + for (int alignEnd = off + alignLength; off < alignEnd; off++) { + crc = (crc >>> 8) ^ byteTable[(crc ^ b[off]) & 0xFF]; + } + + if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) { + crc = Integer.reverseBytes(crc); + } + + // slicing-by-8 + for (; off < (end - Long.BYTES); off += Long.BYTES) { + int firstHalf; + int secondHalf; + if (Unsafe.ADDRESS_SIZE == 4) { + // On 32 bit platforms read two ints instead of a single 64bit long + firstHalf = UNSAFE.getInt(b, Unsafe.ARRAY_BYTE_BASE_OFFSET + off); + secondHalf = UNSAFE.getInt(b, Unsafe.ARRAY_BYTE_BASE_OFFSET + off + + Integer.BYTES); + } else { + long value = UNSAFE.getLong(b, Unsafe.ARRAY_BYTE_BASE_OFFSET + off); + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + firstHalf = (int) value; + secondHalf = (int) (value >>> 32); + } else { // ByteOrder.BIG_ENDIAN + firstHalf = (int) (value >>> 32); + secondHalf = (int) value; + } + } + crc ^= firstHalf; + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + crc = byteTable7[crc & 0xFF] + ^ byteTable6[(crc >>> 8) & 0xFF] + ^ byteTable5[(crc >>> 16) & 0xFF] + ^ byteTable4[crc >>> 24] + ^ byteTable3[secondHalf & 0xFF] + ^ byteTable2[(secondHalf >>> 8) & 0xFF] + ^ byteTable1[(secondHalf >>> 16) & 0xFF] + ^ byteTable0[secondHalf >>> 24]; + } else { // ByteOrder.BIG_ENDIAN + crc = byteTable0[secondHalf & 0xFF] + ^ byteTable1[(secondHalf >>> 8) & 0xFF] + ^ byteTable2[(secondHalf >>> 16) & 0xFF] + ^ byteTable3[secondHalf >>> 24] + ^ byteTable4[crc & 0xFF] + ^ byteTable5[(crc >>> 8) & 0xFF] + ^ byteTable6[(crc >>> 16) & 0xFF] + ^ byteTable7[crc >>> 24]; + } + } + + if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) { + crc = Integer.reverseBytes(crc); + } + } + + // Tail + for (; off < end; off++) { + crc = (crc >>> 8) ^ byteTable[(crc ^ b[off]) & 0xFF]; + } + + return crc; + } + + /** + * Updates the CRC-32C checksum reading from the specified address. + */ + private static int updateDirectByteBuffer(int crc, long address, + int off, int end) { + + // Do only byte reads for arrays so short they can't be aligned + if (end - off >= 8) { + + // align on 8 bytes + int alignLength = (8 - (int) ((address + off) & 0x7)) & 0x7; + for (int alignEnd = off + alignLength; off < alignEnd; off++) { + crc = (crc >>> 8) + ^ byteTable[(crc ^ UNSAFE.getByte(address + off)) & 0xFF]; + } + + if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) { + crc = Integer.reverseBytes(crc); + } + + // slicing-by-8 + for (; off <= (end - Long.BYTES); off += Long.BYTES) { + // Always reading two ints as reading a long followed by + // shifting and casting was slower. + int firstHalf = UNSAFE.getInt(address + off); + int secondHalf = UNSAFE.getInt(address + off + Integer.BYTES); + crc ^= firstHalf; + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + crc = byteTable7[crc & 0xFF] + ^ byteTable6[(crc >>> 8) & 0xFF] + ^ byteTable5[(crc >>> 16) & 0xFF] + ^ byteTable4[crc >>> 24] + ^ byteTable3[secondHalf & 0xFF] + ^ byteTable2[(secondHalf >>> 8) & 0xFF] + ^ byteTable1[(secondHalf >>> 16) & 0xFF] + ^ byteTable0[secondHalf >>> 24]; + } else { // ByteOrder.BIG_ENDIAN + crc = byteTable0[secondHalf & 0xFF] + ^ byteTable1[(secondHalf >>> 8) & 0xFF] + ^ byteTable2[(secondHalf >>> 16) & 0xFF] + ^ byteTable3[secondHalf >>> 24] + ^ byteTable4[crc & 0xFF] + ^ byteTable5[(crc >>> 8) & 0xFF] + ^ byteTable6[(crc >>> 16) & 0xFF] + ^ byteTable7[crc >>> 24]; + } + } + + if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) { + crc = Integer.reverseBytes(crc); + } + } + + // Tail + for (; off < end; off++) { + crc = (crc >>> 8) + ^ byteTable[(crc ^ UNSAFE.getByte(address + off)) & 0xFF]; + } + + return crc; + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/zip/Checksum.java --- a/jdk/src/java.base/share/classes/java/util/zip/Checksum.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/zip/Checksum.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,17 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ +package java.util.zip; -package java.util.zip; +import java.nio.ByteBuffer; /** * An interface representing a data checksum. * - * @author David Connelly + * @author David Connelly */ -public -interface Checksum { +public interface Checksum { + /** * Updates the current checksum with the specified byte. * @@ -41,6 +42,24 @@ /** * Updates the current checksum with the specified array of bytes. + * + * @implSpec This default implementation is equal to calling + * {@code update(b, 0, b.length)}. + * + * @param b the array of bytes to update the checksum with + * + * @throws NullPointerException + * if {@code b} is {@code null} + * + * @since 1.9 + */ + default public void update(byte[] b) { + update(b, 0, b.length); + } + + /** + * Updates the current checksum with the specified array of bytes. + * * @param b the byte array to update the checksum with * @param off the start offset of the data * @param len the number of bytes to use for the update @@ -48,7 +67,64 @@ public void update(byte[] b, int off, int len); /** + * Updates the current checksum with the bytes from the specified buffer. + * + * The checksum is updated with the remaining bytes in the buffer, starting + * at the buffer's position. Upon return, the buffer's position will be + * updated to its limit; its limit will not have been changed. + * + * @apiNote For best performance with DirectByteBuffer and other ByteBuffer + * implementations without a backing array implementers of this interface + * should override this method. + * + * @implSpec The default implementation has the following behavior.
+ * For ByteBuffers backed by an accessible byte array. + *
{@code
+     * update(buffer.array(),
+     *        buffer.position() + buffer.arrayOffset(),
+     *        buffer.remaining());
+     * }
+ * For ByteBuffers not backed by an accessible byte array. + *
{@code
+     * byte[] b = new byte[Math.min(buffer.remaining(), 4096)];
+     * while (buffer.hasRemaining()) {
+     *     int length = Math.min(buffer.remaining(), b.length);
+     *     buffer.get(b, 0, length);
+     *     update(b, 0, length);
+     * }
+     * }
+ * + * @param buffer the ByteBuffer to update the checksum with + * + * @throws NullPointerException + * if {@code buffer} is {@code null} + * + * @since 1.9 + */ + default public void update(ByteBuffer buffer) { + int pos = buffer.position(); + int limit = buffer.limit(); + assert (pos <= limit); + int rem = limit - pos; + if (rem <= 0) { + return; + } + if (buffer.hasArray()) { + update(buffer.array(), pos + buffer.arrayOffset(), rem); + } else { + byte[] b = new byte[Math.min(buffer.remaining(), 4096)]; + while (buffer.hasRemaining()) { + int length = Math.min(buffer.remaining(), b.length); + buffer.get(b, 0, length); + update(b, 0, length); + } + } + buffer.position(limit); + } + + /** * Returns the current checksum value. + * * @return the current checksum value */ public long getValue(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/zip/package-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/java/util/zip/package-info.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/** + * Provides classes for reading and writing the standard ZIP and GZIP file + * formats. Also includes classes for compressing and decompressing data using + * the DEFLATE compression algorithm, which is used by the ZIP and GZIP file + * formats. Additionally, there are utility classes for computing the CRC-32, + * CRC-32C and Adler-32 checksums of arbitrary input streams. + * + *

Package Specification

+ * + * + * + * @since 1.1 + */ +package java.util.zip; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/java/util/zip/package.html --- a/jdk/src/java.base/share/classes/java/util/zip/package.html Wed Jul 05 20:08:43 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ - - - - - - - - -Provides classes for reading and writing the standard ZIP and GZIP -file formats. Also includes classes for compressing and decompressing -data using the DEFLATE compression algorithm, which is used by the -ZIP and GZIP file formats. Additionally, there are utility classes -for computing the CRC-32 and Adler-32 checksums of arbitrary -input streams. - - -

Package Specification

- - - - - - -@since 1.1 - - - - diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/javax/crypto/CipherInputStream.java --- a/jdk/src/java.base/share/classes/javax/crypto/CipherInputStream.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/javax/crypto/CipherInputStream.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -88,6 +88,8 @@ private int ofinish = 0; // stream status private boolean closed = false; + // The stream has been read from. False if the stream has never been read. + private boolean read = false; /** * private convenience function. @@ -103,6 +105,7 @@ private int getMoreData() throws IOException { if (done) return -1; int readin = input.read(ibuffer); + read = true; if (readin == -1) { done = true; try { @@ -306,7 +309,11 @@ } } catch (BadPaddingException | IllegalBlockSizeException ex) { - throw new IOException(ex); + /* If no data has been read from the stream to be en/decrypted, + we supress any exceptions, and close quietly. */ + if (read) { + throw new IOException(ex); + } } ostart = 0; ofinish = 0; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java --- a/jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java Wed Dec 03 19:28:35 2014 +0000 @@ -41,7 +41,7 @@ * on this {@code Object} will result in an * {@code IllegalStateException} being thrown. * - *

+ * @implSpec * The default implementation throws {@code DestroyFailedException}. * * @exception DestroyFailedException if the destroy operation fails.

@@ -56,7 +56,7 @@ /** * Determine if this {@code Object} has been destroyed. * - *

+ * @implSpec * The default implementation returns false. * * @return true if this {@code Object} has been destroyed, diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java --- a/jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java Wed Dec 03 19:28:35 2014 +0000 @@ -657,9 +657,10 @@ cachedHttpClient = false; if (!failedOnce && requests != null) { failedOnce = true; - if (getRequestMethod().equals("CONNECT") || - (httpuc.getRequestMethod().equals("POST") && - (!retryPostProp || streaming))) { + if (getRequestMethod().equals("CONNECT") + || streaming + || (httpuc.getRequestMethod().equals("POST") + && !retryPostProp)) { // do not retry the request } else { // try once more @@ -769,9 +770,10 @@ } else if (nread != 8) { if (!failedOnce && requests != null) { failedOnce = true; - if (getRequestMethod().equals("CONNECT") || - (httpuc.getRequestMethod().equals("POST") && - (!retryPostProp || streaming))) { + if (getRequestMethod().equals("CONNECT") + || streaming + || (httpuc.getRequestMethod().equals("POST") + && !retryPostProp)) { // do not retry the request } else { closeServer(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java --- a/jdk/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java Wed Dec 03 19:28:35 2014 +0000 @@ -752,7 +752,7 @@ } do { tmpBuf.clear(); - } while (read(tmpBuf) > 0); + } while (receive(tmpBuf) != null); } finally { if (blocking) { configureBlocking(true); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/reflect/Reflection.java --- a/jdk/src/java.base/share/classes/sun/reflect/Reflection.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/reflect/Reflection.java Wed Dec 03 19:28:35 2014 +0000 @@ -46,6 +46,7 @@ map.put(Reflection.class, new String[] {"fieldFilterMap", "methodFilterMap"}); map.put(System.class, new String[] {"security"}); + map.put(Class.class, new String[] {"classLoader"}); fieldFilterMap = map; methodFilterMap = new HashMap<>(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/reflect/generics/repository/ClassRepository.java --- a/jdk/src/java.base/share/classes/sun/reflect/generics/repository/ClassRepository.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/reflect/generics/repository/ClassRepository.java Wed Dec 03 19:28:35 2014 +0000 @@ -42,8 +42,11 @@ public static final ClassRepository NONE = ClassRepository.make("Ljava/lang/Object;", null); - private Type superclass; // caches the generic superclass info - private Type[] superInterfaces; // caches the generic superinterface info + /** The generic superclass info. Lazily initialized. */ + private volatile Type superclass; + + /** The generic superinterface info. Lazily initialized. */ + private volatile Type[] superInterfaces; // private, to enforce use of static factory private ClassRepository(String rawSig, GenericsFactory f) { @@ -79,31 +82,34 @@ * with which the repository was created. */ - public Type getSuperclass(){ + public Type getSuperclass() { + Type superclass = this.superclass; if (superclass == null) { // lazily initialize superclass Reifier r = getReifier(); // obtain visitor // Extract superclass subtree from AST and reify getTree().getSuperclass().accept(r); // extract result from visitor and cache it superclass = r.getResult(); - } + this.superclass = superclass; + } return superclass; // return cached result } - public Type[] getSuperInterfaces(){ + public Type[] getSuperInterfaces() { + Type[] superInterfaces = this.superInterfaces; if (superInterfaces == null) { // lazily initialize super interfaces // first, extract super interface subtree(s) from AST TypeTree[] ts = getTree().getSuperInterfaces(); // create array to store reified subtree(s) - Type[] sis = new Type[ts.length]; + superInterfaces = new Type[ts.length]; // reify all subtrees for (int i = 0; i < ts.length; i++) { Reifier r = getReifier(); // obtain visitor ts[i].accept(r);// reify subtree // extract result from visitor and store it - sis[i] = r.getResult(); + superInterfaces[i] = r.getResult(); } - superInterfaces = sis; // cache overall result + this.superInterfaces = superInterfaces; } return superInterfaces.clone(); // return cached result } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java --- a/jdk/src/java.base/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Wed Dec 03 19:28:35 2014 +0000 @@ -42,7 +42,8 @@ public abstract class GenericDeclRepository extends AbstractRepository { - private TypeVariable[] typeParams; // caches the formal type parameters + /** The formal type parameters. Lazily initialized. */ + private volatile TypeVariable[] typeParams; protected GenericDeclRepository(String rawSig, GenericsFactory f) { super(rawSig, f); @@ -55,8 +56,7 @@ * If the corresponding field is non-null, it is returned. * If not, it is created lazily. This is done by selecting the appropriate * part of the tree and transforming it into a reflective object - * using a visitor. - * a visitor, which is created by feeding it the factory + * using a visitor, which is created by feeding it the factory * with which the repository was created. */ @@ -64,20 +64,21 @@ * Return the formal type parameters of this generic declaration. * @return the formal type parameters of this generic declaration */ - public TypeVariable[] getTypeParameters(){ + public TypeVariable[] getTypeParameters() { + TypeVariable[] typeParams = this.typeParams; if (typeParams == null) { // lazily initialize type parameters // first, extract type parameter subtree(s) from AST FormalTypeParameter[] ftps = getTree().getFormalTypeParameters(); // create array to store reified subtree(s) - TypeVariable[] tps = new TypeVariable[ftps.length]; + typeParams = new TypeVariable[ftps.length]; // reify all subtrees for (int i = 0; i < ftps.length; i++) { Reifier r = getReifier(); // obtain visitor ftps[i].accept(r); // reify subtree // extract result from visitor and store it - tps[i] = (TypeVariable) r.getResult(); + typeParams[i] = (TypeVariable) r.getResult(); } - typeParams = tps; // cache overall result + this.typeParams = typeParams; // cache overall result } return typeParams.clone(); // return cached result } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/reflect/generics/scope/AbstractScope.java --- a/jdk/src/java.base/share/classes/sun/reflect/generics/scope/AbstractScope.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/reflect/generics/scope/AbstractScope.java Wed Dec 03 19:28:35 2014 +0000 @@ -42,7 +42,9 @@ implements Scope { private final D recvr; // the declaration whose scope this instance represents - private Scope enclosingScope; // the enclosing scope of this scope + + /** The enclosing scope of this scope. Lazily initialized. */ + private volatile Scope enclosingScope; /** * Constructor. Takes a reflective object whose scope the newly @@ -71,7 +73,11 @@ * @return the enclosing scope */ protected Scope getEnclosingScope(){ - if (enclosingScope == null) {enclosingScope = computeEnclosingScope();} + Scope enclosingScope = this.enclosingScope; + if (enclosingScope == null) { + enclosingScope = computeEnclosingScope(); + this.enclosingScope = enclosingScope; + } return enclosingScope; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/share/classes/sun/security/ssl/CipherSuite.java --- a/jdk/src/java.base/share/classes/sun/security/ssl/CipherSuite.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/security/ssl/CipherSuite.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -968,7 +968,7 @@ * 1. Prefer Suite B compliant cipher suites, see RFC6460 (To be * changed later, see below). * 2. Prefer the stronger bulk cipher, in the order of AES_256(GCM), - * AES_128(GCM), AES_256, AES_128, RC-4, 3DES-EDE. + * AES_128(GCM), AES_256, AES_128, 3DES-EDE, RC-4. * 3. Prefer the stronger MAC algorithm, in the order of SHA384, * SHA256, SHA, MD5. * 4. Prefer the better performance of key exchange and digital @@ -1087,18 +1087,6 @@ add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", 0x0032, --p, K_DHE_DSS, B_AES_128, T); - // RC-4 - add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N); - add("TLS_ECDHE_RSA_WITH_RC4_128_SHA", - 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N); - add("SSL_RSA_WITH_RC4_128_SHA", - 0x0005, --p, K_RSA, B_RC4_128, N); - add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", - 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N); - add("TLS_ECDH_RSA_WITH_RC4_128_SHA", - 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N); - // 3DES_EDE add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", 0xC008, --p, K_ECDHE_ECDSA, B_3DES, T); @@ -1115,6 +1103,17 @@ add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", 0x0013, --p, K_DHE_DSS, B_3DES, N); + // RC-4 + add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N); + add("TLS_ECDHE_RSA_WITH_RC4_128_SHA", + 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N); + add("SSL_RSA_WITH_RC4_128_SHA", + 0x0005, --p, K_RSA, B_RC4_128, N); + add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N); + add("TLS_ECDH_RSA_WITH_RC4_128_SHA", + 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N); add("SSL_RSA_WITH_RC4_128_MD5", 0x0004, --p, K_RSA, B_RC4_128, N); @@ -1134,7 +1133,7 @@ * 2. If a cipher suite has been obsoleted, we put it at the end of * the list. * 3. Prefer the stronger bulk cipher, in the order of AES_256, - * AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL. + * AES_128, 3DES-EDE, RC-4, DES, DES40, RC4_40, NULL. * 4. Prefer the stronger MAC algorithm, in the order of SHA384, * SHA256, SHA, MD5. * 5. Prefer the better performance of key exchange and digital @@ -1162,15 +1161,40 @@ add("TLS_DH_anon_WITH_AES_128_CBC_SHA", 0x0034, --p, K_DH_ANON, B_AES_128, N); + add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", + 0xC017, --p, K_ECDH_ANON, B_3DES, N); + add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", + 0x001b, --p, K_DH_ANON, B_3DES, N); + add("TLS_ECDH_anon_WITH_RC4_128_SHA", 0xC016, --p, K_ECDH_ANON, B_RC4_128, N); add("SSL_DH_anon_WITH_RC4_128_MD5", 0x0018, --p, K_DH_ANON, B_RC4_128, N); - add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", - 0xC017, --p, K_ECDH_ANON, B_3DES, N); - add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", - 0x001b, --p, K_DH_ANON, B_3DES, N); + // weak cipher suites obsoleted in TLS 1.2 + add("SSL_RSA_WITH_DES_CBC_SHA", + 0x0009, --p, K_RSA, B_DES, N, tls12); + add("SSL_DHE_RSA_WITH_DES_CBC_SHA", + 0x0015, --p, K_DHE_RSA, B_DES, N, tls12); + add("SSL_DHE_DSS_WITH_DES_CBC_SHA", + 0x0012, --p, K_DHE_DSS, B_DES, N, tls12); + add("SSL_DH_anon_WITH_DES_CBC_SHA", + 0x001a, --p, K_DH_ANON, B_DES, N, tls12); + + // weak cipher suites obsoleted in TLS 1.1 + add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", + 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11); + add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", + 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11); + add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", + 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11); + add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", + 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11); + + add("SSL_RSA_EXPORT_WITH_RC4_40_MD5", + 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11); + add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", + 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11); add("TLS_RSA_WITH_NULL_SHA256", 0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256); @@ -1189,52 +1213,27 @@ add("SSL_RSA_WITH_NULL_MD5", 0x0001, --p, K_RSA, B_NULL, N); - // weak cipher suites obsoleted in TLS 1.2 - add("SSL_RSA_WITH_DES_CBC_SHA", - 0x0009, --p, K_RSA, B_DES, N, tls12); - add("SSL_DHE_RSA_WITH_DES_CBC_SHA", - 0x0015, --p, K_DHE_RSA, B_DES, N, tls12); - add("SSL_DHE_DSS_WITH_DES_CBC_SHA", - 0x0012, --p, K_DHE_DSS, B_DES, N, tls12); - add("SSL_DH_anon_WITH_DES_CBC_SHA", - 0x001a, --p, K_DH_ANON, B_DES, N, tls12); - - // weak cipher suites obsoleted in TLS 1.1 - add("SSL_RSA_EXPORT_WITH_RC4_40_MD5", - 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11); - add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11); - - add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11); - add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11); - add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11); - add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", - 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11); - // Supported Kerberos ciphersuites from RFC2712 + add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", + 0x001f, --p, K_KRB5, B_3DES, N); + add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", + 0x0023, --p, K_KRB5, B_3DES, N); add("TLS_KRB5_WITH_RC4_128_SHA", 0x0020, --p, K_KRB5, B_RC4_128, N); add("TLS_KRB5_WITH_RC4_128_MD5", 0x0024, --p, K_KRB5, B_RC4_128, N); - add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", - 0x001f, --p, K_KRB5, B_3DES, N); - add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", - 0x0023, --p, K_KRB5, B_3DES, N); add("TLS_KRB5_WITH_DES_CBC_SHA", 0x001e, --p, K_KRB5, B_DES, N, tls12); add("TLS_KRB5_WITH_DES_CBC_MD5", 0x0022, --p, K_KRB5, B_DES, N, tls12); + add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", + 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); + add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", + 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", 0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11); add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", 0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11); - add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", - 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); - add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", - 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); /* * Other values from the TLS Cipher Suite Registry, as of August 2010. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/unix/classes/java/lang/UNIXProcess.java --- a/jdk/src/java.base/unix/classes/java/lang/UNIXProcess.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/unix/classes/java/lang/UNIXProcess.java Wed Dec 03 19:28:35 2014 +0000 @@ -406,14 +406,17 @@ if (hasExited) return true; if (timeout <= 0) return false; - long timeoutAsNanos = unit.toNanos(timeout); - long startTime = System.nanoTime(); - long rem = timeoutAsNanos; + long remainingNanos = unit.toNanos(timeout); + long deadline = System.nanoTime() + remainingNanos; - while (!hasExited && (rem > 0)) { - wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); - rem = timeoutAsNanos - (System.nanoTime() - startTime); - } + do { + // Round up to next millisecond + wait(TimeUnit.NANOSECONDS.toMillis(remainingNanos + 999_999L)); + if (hasExited) { + return true; + } + remainingNanos = deadline - System.nanoTime(); + } while (remainingNanos > 0); return hasExited; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/windows/classes/java/lang/ProcessImpl.java --- a/jdk/src/java.base/windows/classes/java/lang/ProcessImpl.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/windows/classes/java/lang/ProcessImpl.java Wed Dec 03 19:28:35 2014 +0000 @@ -461,11 +461,21 @@ if (getExitCodeProcess(handle) != STILL_ACTIVE) return true; if (timeout <= 0) return false; - long msTimeout = unit.toMillis(timeout); + long remainingNanos = unit.toNanos(timeout); + long deadline = System.nanoTime() + remainingNanos ; - waitForTimeoutInterruptibly(handle, msTimeout); - if (Thread.interrupted()) - throw new InterruptedException(); + do { + // Round up to next millisecond + long msTimeout = TimeUnit.NANOSECONDS.toMillis(remainingNanos + 999_999L); + waitForTimeoutInterruptibly(handle, msTimeout); + if (Thread.interrupted()) + throw new InterruptedException(); + if (getExitCodeProcess(handle) != STILL_ACTIVE) { + return true; + } + remainingNanos = deadline - System.nanoTime(); + } while (remainingNanos > 0); + return (getExitCodeProcess(handle) != STILL_ACTIVE); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.base/windows/native/libnet/AbstractPlainDatagramSocketImpl.c --- a/jdk/src/java.base/windows/native/libnet/AbstractPlainDatagramSocketImpl.c Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.base/windows/native/libnet/AbstractPlainDatagramSocketImpl.c Wed Dec 03 19:28:35 2014 +0000 @@ -32,9 +32,11 @@ #include "java_net_AbstractPlainDatagramSocketImpl.h" -static jfieldID IO_fd_fdID; +static jfieldID IO_fd_fdID = NULL; +static jfieldID apdsi_fdID = NULL; -static jfieldID apdsi_fdID; +static jfieldID apdsi_fd1ID = NULL; +static jclass two_stacks_clazz = NULL; /* @@ -48,10 +50,21 @@ apdsi_fdID = (*env)->GetFieldID(env, cls, "fd", "Ljava/io/FileDescriptor;"); CHECK_NULL(apdsi_fdID); - IO_fd_fdID = NET_GetFileDescriptorID(env); CHECK_NULL(IO_fd_fdID); + two_stacks_clazz = (*env)->FindClass(env, "java/net/TwoStacksPlainDatagramSocketImpl"); + CHECK_NULL(two_stacks_clazz); + + /* Handle both TwoStacks and DualStack here */ + + if (JNU_Equals(env, cls, two_stacks_clazz)) { + /* fd1 present only in TwoStack.. */ + apdsi_fd1ID = (*env)->GetFieldID(env, cls, "fd1", + "Ljava/io/FileDescriptor;"); + CHECK_NULL(apdsi_fd1ID); + } + JNU_CHECK_EXCEPTION(env); } @@ -63,20 +76,38 @@ JNIEXPORT jint JNICALL Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable (JNIEnv *env, jobject this) { SOCKET fd; - int retval; - + SOCKET fd1; + int rv = -1, rv1 = -1; jobject fdObj = (*env)->GetObjectField(env, this, apdsi_fdID); - if (IS_NULL(fdObj)) { + if (!IS_NULL(fdObj)) { + int retval = 0; + fd = (SOCKET)(*env)->GetIntField(env, fdObj, IO_fd_fdID); + rv = ioctlsocket(fd, FIONREAD, &retval); + if (retval > 0) { + return retval; + } + } + + if (!IS_NULL(apdsi_fd1ID)) { + /* TwoStacks */ + jobject fd1Obj = (*env)->GetObjectField(env, this, apdsi_fd1ID); + if (!IS_NULL(fd1Obj)) { + int retval = 0; + fd1 = (SOCKET)(*env)->GetIntField(env, fd1Obj, IO_fd_fdID); + rv1 = ioctlsocket(fd1, FIONREAD, &retval); + if (retval > 0) { + return retval; + } + } + } + + if (rv < 0 && rv1 < 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", - "Socket closed"); + "Socket closed"); return -1; } - fd = (SOCKET)(*env)->GetIntField(env, fdObj, IO_fd_fdID); - if (ioctlsocket(fd, FIONREAD, &retval) < 0) { - return -1; - } - return retval; + return 0; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.desktop/share/classes/META-INF/services/sun.datatransfer.DesktopDatatransferService --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.desktop/share/classes/META-INF/services/sun.datatransfer.DesktopDatatransferService Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,1 @@ +sun.awt.datatransfer.DesktopDatatransferServiceImpl diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.desktop/share/classes/java/awt/Window.java --- a/jdk/src/java.desktop/share/classes/java/awt/Window.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/java/awt/Window.java Wed Dec 03 19:28:35 2014 +0000 @@ -2254,7 +2254,18 @@ } firePropertyChange("alwaysOnTop", oldAlwaysOnTop, alwaysOnTop); } - for (WeakReference ref : ownedWindowList) { + setOwnedWindowsAlwaysOnTop(alwaysOnTop); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private void setOwnedWindowsAlwaysOnTop(boolean alwaysOnTop) { + WeakReference[] ownedWindowArray; + synchronized (ownedWindowList) { + ownedWindowArray = new WeakReference[ownedWindowList.size()]; + ownedWindowList.copyInto(ownedWindowArray); + } + + for (WeakReference ref : ownedWindowArray) { Window window = ref.get(); if (window != null) { try { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java --- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,16 +31,14 @@ import javax.accessibility.AccessibleContext; import javax.swing.*; import javax.swing.plaf.*; -import javax.swing.border.*; import javax.swing.event.InternalFrameEvent; -import java.util.EventListener; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; -import java.beans.VetoableChangeListener; import java.beans.PropertyVetoException; import sun.swing.DefaultLookup; -import sun.swing.UIAction; + +import static sun.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY; /** * The class that manages a basic title bar @@ -215,6 +213,12 @@ createButtons(); addSubComponents(); + updateProperties(); + } + + private void updateProperties() { + final Object aaTextInfo = frame.getClientProperty(AA_TEXT_PROPERTY_KEY); + putClientProperty(AA_TEXT_PROPERTY_KEY, aaTextInfo); } /** diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTransferable.java --- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTransferable.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTransferable.java Wed Dec 03 19:28:35 2014 +0000 @@ -24,6 +24,8 @@ */ package javax.swing.plaf.basic; +import sun.datatransfer.DataFlavorUtil; + import java.io.*; import java.awt.datatransfer.*; import javax.swing.plaf.UIResource; @@ -145,7 +147,7 @@ } else if (Reader.class.equals(flavor.getRepresentationClass())) { return new StringReader(data); } else if (InputStream.class.equals(flavor.getRepresentationClass())) { - return new StringBufferInputStream(data); + return createInputStream(flavor, data); } // fall through to unsupported } else if (isPlainFlavor(flavor)) { @@ -156,7 +158,7 @@ } else if (Reader.class.equals(flavor.getRepresentationClass())) { return new StringReader(data); } else if (InputStream.class.equals(flavor.getRepresentationClass())) { - return new StringBufferInputStream(data); + return createInputStream(flavor, data); } // fall through to unsupported @@ -168,6 +170,15 @@ throw new UnsupportedFlavorException(flavor); } + private InputStream createInputStream(DataFlavor flavor, String data) + throws IOException, UnsupportedFlavorException { + String cs = DataFlavorUtil.getTextCharset(flavor); + if (cs == null) { + throw new UnsupportedFlavorException(flavor); + } + return new ByteArrayInputStream(data.getBytes(cs)); + } + // --- richer subclass flavors ---------------------------------------------- protected boolean isRicherFlavor(DataFlavor flavor) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java --- a/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Wed Dec 03 19:28:35 2014 +0000 @@ -1882,6 +1882,9 @@ public synchronized void setWindowDeactivationTime(Window w, long time) { AppContext ctx = getAppContext(w); + if (ctx == null) { + return; + } @SuppressWarnings("unchecked") WeakHashMap map = (WeakHashMap)ctx.get(DEACTIVATION_TIMES_MAP_KEY); if (map == null) { @@ -1893,6 +1896,9 @@ public synchronized long getWindowDeactivationTime(Window w) { AppContext ctx = getAppContext(w); + if (ctx == null) { + return -1; + } @SuppressWarnings("unchecked") WeakHashMap map = (WeakHashMap)ctx.get(DEACTIVATION_TIMES_MAP_KEY); if (map == null) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.desktop/share/classes/sun/awt/datatransfer/META-INF/services/sun.datatransfer.DesktopDatatransferService --- a/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/META-INF/services/sun.datatransfer.DesktopDatatransferService Wed Jul 05 20:08:43 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -sun.awt.datatransfer.DesktopDatatransferServiceImpl diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.logging/share/classes/java/util/logging/LogManager.java --- a/jdk/src/java.logging/share/classes/java/util/logging/LogManager.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.logging/share/classes/java/util/logging/LogManager.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,6 +31,7 @@ import java.security.*; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; +import java.util.concurrent.CopyOnWriteArrayList; import sun.misc.JavaAWTAccess; import sun.misc.SharedSecrets; @@ -100,6 +101,19 @@ * Note that these Handlers may be created lazily, when they are * first used. * + *

  • A property "<logger>.handlers.ensureCloseOnReset". This defines a + * a boolean value. If "<logger>.handlers" is not defined or is empty, + * this property is ignored. Otherwise it defaults to {@code true}. When the + * value is {@code true}, the handlers associated with the logger are guaranteed + * to be closed on {@linkplain #reset} and shutdown. This can be turned off + * by explicitly setting "<logger>.handlers.ensureCloseOnReset=false" in + * the configuration. Note that turning this property off causes the risk of + * introducing a resource leak, as the logger may get garbage collected before + * {@code reset()} is called, thus preventing its handlers from being closed + * on {@code reset()}. In that case it is the responsibility of the application + * to ensure that the handlers are closed before the logger is garbage + * collected. + * *
  • A property "<logger>.useParentHandlers". This defines a boolean * value. By default every logger calls its parent in addition to * handling the logging message itself, this often result in messages @@ -169,6 +183,33 @@ // True if JVM death is imminent and the exit hook has been called. private boolean deathImminent; + // This list contains the loggers for which some handlers have been + // explicitly configured in the configuration file. + // It prevents these loggers from being arbitrarily garbage collected. + private static final class CloseOnReset { + private final Logger logger; + private CloseOnReset(Logger ref) { + this.logger = Objects.requireNonNull(ref); + } + @Override + public boolean equals(Object other) { + return (other instanceof CloseOnReset) && ((CloseOnReset)other).logger == logger; + } + @Override + public int hashCode() { + return System.identityHashCode(logger); + } + public Logger get() { + return logger; + } + public static CloseOnReset create(Logger logger) { + return new CloseOnReset(logger); + } + } + private final CopyOnWriteArrayList closeOnResetLoggers = + new CopyOnWriteArrayList<>(); + + private final Map listeners = Collections.synchronizedMap(new IdentityHashMap<>()); @@ -204,7 +245,6 @@ }); } - // This private class is used as a shutdown hook. // It does a "reset" to close all open handlers. private class Cleaner extends Thread { @@ -875,30 +915,39 @@ @Override public Object run() { String names[] = parseClassNames(handlersPropertyName); - for (String word : names) { + final boolean ensureCloseOnReset = names.length > 0 + && getBooleanProperty(handlersPropertyName + ".ensureCloseOnReset",true); + + int count = 0; + for (String type : names) { try { - Class clz = ClassLoader.getSystemClassLoader().loadClass(word); + Class clz = ClassLoader.getSystemClassLoader().loadClass(type); Handler hdl = (Handler) clz.newInstance(); // Check if there is a property defining the // this handler's level. - String levs = getProperty(word + ".level"); + String levs = getProperty(type + ".level"); if (levs != null) { Level l = Level.findLevel(levs); if (l != null) { hdl.setLevel(l); } else { // Probably a bad level. Drop through. - System.err.println("Can't set level for " + word); + System.err.println("Can't set level for " + type); } } // Add this Handler to the logger logger.addHandler(hdl); + if (++count == 1 && ensureCloseOnReset) { + // add this logger to the closeOnResetLoggers list. + closeOnResetLoggers.addIfAbsent(CloseOnReset.create(logger)); + } } catch (Exception ex) { - System.err.println("Can't load log handler \"" + word + "\""); + System.err.println("Can't load log handler \"" + type + "\""); System.err.println("" + ex); ex.printStackTrace(); } } + return null; } }); @@ -1233,8 +1282,15 @@ public void reset() throws SecurityException { checkPermission(); + List persistent; synchronized (this) { props = new Properties(); + // make sure we keep the loggers persistent until reset is done. + // Those are the loggers for which we previously created a + // handler from the configuration, and we need to prevent them + // from being gc'ed until those handlers are closed. + persistent = new ArrayList<>(closeOnResetLoggers); + closeOnResetLoggers.clear(); // Since we are doing a reset we no longer want to initialize // the global handlers, if they haven't been initialized yet. initializedGlobalHandlers = true; @@ -1249,6 +1305,7 @@ } } } + persistent.clear(); } // Private method to reset an individual target logger. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.management/share/classes/sun/management/Flag.java --- a/jdk/src/java.management/share/classes/sun/management/Flag.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.management/share/classes/sun/management/Flag.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,6 +28,7 @@ import java.util.*; import com.sun.management.VMOption; import com.sun.management.VMOption.Origin; +import java.security.AccessController; /** * Flag class is a helper class for constructing a VMOption. @@ -115,6 +116,13 @@ static synchronized native void setStringValue(String name, String value); static { + AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public Void run() { + System.loadLibrary("management"); + return null; + } + }); initialize(); } private static native void initialize(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.management/share/classes/sun/management/jmxremote/ConnectorBootstrap.java --- a/jdk/src/java.management/share/classes/sun/management/jmxremote/ConnectorBootstrap.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.management/share/classes/sun/management/jmxremote/ConnectorBootstrap.java Wed Dec 03 19:28:35 2014 +0000 @@ -767,7 +767,7 @@ JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs); connServer.start(); } catch (IOException e) { - if (connServer == null) { + if (connServer == null || connServer.getAddress() == null) { throw new AgentConfigurationError(CONNECTOR_SERVER_IO_ERROR, e, url.toString()); } else { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/EncryptionKey.java --- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/EncryptionKey.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/EncryptionKey.java Wed Dec 03 19:28:35 2014 +0000 @@ -158,6 +158,11 @@ return destroyed; } + /** + * Returns an informative textual representation of this {@code EncryptionKey}. + * + * @return an informative textual representation of this {@code EncryptionKey}. + */ @Override public String toString() { if (destroyed) { @@ -166,6 +171,11 @@ return "key " + key.toString(); } + /** + * Returns a hash code for this {@code EncryptionKey}. + * + * @return a hash code for this {@code EncryptionKey}. + */ @Override public int hashCode() { int result = 17; @@ -177,15 +187,17 @@ } /** - * Compares the specified Object with this key for equality. - * Returns true if the given object is also a + * Compares the specified object with this key for equality. + * Returns true if the given object is also an * {@code EncryptionKey} and the two - * {@code EncryptionKey} instances are equivalent. + * {@code EncryptionKey} instances are equivalent. More formally two + * {@code EncryptionKey} instances are equal if they have equal key types + * and key material. + * A destroyed {@code EncryptionKey} object is only equal to itself. * - * @param other the Object to compare to - * @return true if the specified object is equal to this EncryptionKey, - * false otherwise. NOTE: Returns false if either of the EncryptionKey - * objects has been destroyed. + * @param other the object to compare to + * @return true if the specified object is equal to this + * {@code EncryptionKey}, false otherwise. */ @Override public boolean equals(Object other) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosCredMessage.java --- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosCredMessage.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosCredMessage.java Wed Dec 03 19:28:35 2014 +0000 @@ -130,6 +130,11 @@ return destroyed; } + /** + * Returns an informative textual representation of this {@code KerberosCredMessage}. + * + * @return an informative textual representation of this {@code KerberosCredMessage}. + */ @Override public String toString() { if (destroyed) { @@ -140,6 +145,11 @@ } } + /** + * Returns a hash code for this {@code KerberosCredMessage}. + * + * @return a hash code for this {@code KerberosCredMessage}. + */ @Override public int hashCode() { if (isDestroyed()) { @@ -149,6 +159,19 @@ } } + /** + * Compares the specified object with this {@code KerberosCredMessage} + * for equality. Returns true if the given object is also a + * {@code KerberosCredMessage} and the two {@code KerberosCredMessage} + * instances are equivalent. More formally two {@code KerberosCredMessage} + * instances are equal if they have equal sender, recipient, and encoded + * KRB_CRED messages. + * A destroyed {@code KerberosCredMessage} object is only equal to itself. + * + * @param other the object to compare to + * @return true if the specified object is equal to this + * {@code KerberosCredMessage}, false otherwise. + */ @Override public boolean equals(Object other) { if (other == this) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosKey.java --- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosKey.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosKey.java Wed Dec 03 19:28:35 2014 +0000 @@ -61,10 +61,10 @@ * * It might be necessary for the application to be granted a * {@link javax.security.auth.PrivateCredentialPermission - * PrivateCredentialPermission} if it needs to access the KerberosKey + * PrivateCredentialPermission} if it needs to access the {@code KerberosKey} * instance from a Subject. This permission is not needed when the * application depends on the default JGSS Kerberos mechanism to access the - * KerberosKey. In that case, however, the application will need an + * {@code KerberosKey}. In that case, however, the application will need an * appropriate * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}.

    * @@ -113,9 +113,9 @@ private transient boolean destroyed = false; /** - * Constructs a KerberosKey from the given bytes when the key type and - * key version number are known. This can be used when reading the secret - * key information from a Kerberos "keytab". + * Constructs a {@code KerberosKey} from the given bytes when the key type + * and key version number are known. This can be used when reading the + * secret key information from a Kerberos "keytab". * * @param principal the principal that this secret key belongs to * @param keyBytes the key material for the secret key @@ -133,9 +133,9 @@ } /** - * Constructs a KerberosKey from a principal's password using the specified - * algorithm name. The algorithm name (case insensitive) should be provided - * as the encryption type string defined on the IANA + * Constructs a {@code KerberosKey} from a principal's password using the + * specified algorithm name. The algorithm name (case insensitive) should + * be provided as the encryption type string defined on the IANA * Kerberos Encryption Type Numbers * page. The version number of the key generated will be 0. * @@ -261,6 +261,11 @@ return destroyed; } + /** + * Returns an informative textual representation of this {@code KerberosKey}. + * + * @return an informative textual representation of this {@code KerberosKey}. + */ public String toString() { if (destroyed) { return "Destroyed KerberosKey"; @@ -271,9 +276,9 @@ } /** - * Returns a hashcode for this KerberosKey. + * Returns a hash code for this {@code KerberosKey}. * - * @return a hashCode() for the {@code KerberosKey} + * @return a hash code for this {@code KerberosKey}. * @since 1.6 */ public int hashCode() { @@ -290,15 +295,15 @@ } /** - * Compares the specified Object with this KerberosKey for equality. - * Returns true if the given object is also a + * Compares the specified object with this {@code KerberosKey} for + * equality. Returns true if the given object is also a * {@code KerberosKey} and the two * {@code KerberosKey} instances are equivalent. + * A destroyed {@code KerberosKey} object is only equal to itself. * - * @param other the Object to compare to - * @return true if the specified object is equal to this KerberosKey, - * false otherwise. NOTE: Returns false if either of the KerberosKey - * objects has been destroyed. + * @param other the object to compare to + * @return true if the specified object is equal to this {@code KerberosKey}, + * false otherwise. * @since 1.6 */ public boolean equals(Object other) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java --- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java Wed Dec 03 19:28:35 2014 +0000 @@ -88,8 +88,8 @@ /** - * Constructs a KerberosPrincipal from the provided string input. The - * name type for this principal defaults to + * Constructs a {@code KerberosPrincipal} from the provided string input. + * The name type for this principal defaults to * {@link #KRB_NT_PRINCIPAL KRB_NT_PRINCIPAL} * This string is assumed to contain a name in the format * that is specified in Section 2.1.1. (Kerberos Principal Name Form) of @@ -127,7 +127,7 @@ } /** - * Constructs a KerberosPrincipal from the provided string and + * Constructs a {@code KerberosPrincipal} from the provided string and * name type input. The string is assumed to contain a name in the * format that is specified in Section 2.1 (Mandatory Name Forms) of * RFC 1964. @@ -137,7 +137,7 @@ * (for example, duke@FOO.COM, is a valid input string for the * name type, KRB_NT_PRINCIPAL where duke * represents a principal, and FOO.COM represents a realm). - + * *

    If the input name does not contain a realm, the default realm * is used. The default realm can be specified either in a Kerberos * configuration file or via the java.security.krb5.realm @@ -179,28 +179,28 @@ } /** - * Returns a hashcode for this principal. The hash code is defined to - * be the result of the following calculation: + * Returns a hash code for this {@code KerberosPrincipal}. The hash code + * is defined to be the result of the following calculation: *

    {@code
          *  hashCode = getName().hashCode();
          * }
    * - * @return a hashCode() for the {@code KerberosPrincipal} + * @return a hash code for this {@code KerberosPrincipal}. */ public int hashCode() { return getName().hashCode(); } /** - * Compares the specified Object with this Principal for equality. + * Compares the specified object with this principal for equality. * Returns true if the given object is also a * {@code KerberosPrincipal} and the two * {@code KerberosPrincipal} instances are equivalent. * More formally two {@code KerberosPrincipal} instances are equal * if the values returned by {@code getName()} are equal. * - * @param other the Object to compare to - * @return true if the Object passed in represents the same principal + * @param other the object to compare to + * @return true if the object passed in represents the same principal * as this one, false otherwise. */ public boolean equals(Object other) { @@ -217,11 +217,11 @@ } /** - * Save the KerberosPrincipal object to a stream + * Save the {@code KerberosPrincipal} object to a stream * * @serialData this {@code KerberosPrincipal} is serialized * by writing out the PrincipalName and the - * realm in their DER-encoded form as specified in Section 5.2.2 of + * Realm in their DER-encoded form as specified in Section 5.2.2 of * RFC4120. */ private void writeObject(ObjectOutputStream oos) @@ -268,7 +268,7 @@ } /** - * Returns the name type of the KerberosPrincipal. Valid name types + * Returns the name type of the {@code KerberosPrincipal}. Valid name types * are specified in Section 6.2 of * RFC4120. * @@ -278,7 +278,11 @@ return nameType; } - // Inherits javadocs from Object + /** + * Returns an informative textual representation of this {@code KerberosPrincipal}. + * + * @return an informative textual representation of this {@code KerberosPrincipal}. + */ public String toString() { return getName(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosTicket.java --- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosTicket.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosTicket.java Wed Dec 03 19:28:35 2014 +0000 @@ -53,10 +53,10 @@ * * It might be necessary for the application to be granted a * {@link javax.security.auth.PrivateCredentialPermission - * PrivateCredentialPermission} if it needs to access a KerberosTicket - * instance from a Subject. This permission is not needed when the + * PrivateCredentialPermission} if it needs to access a {@code KerberosTicket} + * instance from a {@code Subject}. This permission is not needed when the * application depends on the default JGSS Kerberos mechanism to access the - * KerberosTicket. In that case, however, the application will need an + * {@code KerberosTicket}. In that case, however, the application will need an * appropriate * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}. *

    @@ -193,7 +193,7 @@ private transient boolean destroyed = false; /** - * Constructs a KerberosTicket using credentials information that a + * Constructs a {@code KerberosTicket} using credentials information that a * client either receives from a KDC or reads from a cache. * * @param asn1Encoding the ASN.1 encoding of the ticket as defined by @@ -565,8 +565,8 @@ try { krb5Creds = new sun.security.krb5.Credentials(asn1Encoding, - client.toString(), - server.toString(), + client.getName(), + server.getName(), sessionKey.getEncoded(), sessionKey.getKeyType(), flags, @@ -644,6 +644,11 @@ return destroyed; } + /** + * Returns an informative textual representation of this {@code KerberosTicket}. + * + * @return an informative textual representation of this {@code KerberosTicket}. + */ public String toString() { if (destroyed) { return "Destroyed KerberosTicket"; @@ -677,9 +682,9 @@ } /** - * Returns a hashcode for this KerberosTicket. + * Returns a hash code for this {@code KerberosTicket}. * - * @return a hashCode() for the {@code KerberosTicket} + * @return a hash code for this {@code KerberosTicket}. * @since 1.6 */ public int hashCode() { @@ -714,15 +719,15 @@ } /** - * Compares the specified Object with this KerberosTicket for equality. + * Compares the specified object with this {@code KerberosTicket} for equality. * Returns true if the given object is also a * {@code KerberosTicket} and the two * {@code KerberosTicket} instances are equivalent. + * A destroyed {@code KerberosTicket} object is only equal to itself. * - * @param other the Object to compare to - * @return true if the specified object is equal to this KerberosTicket, - * false otherwise. NOTE: Returns false if either of the KerberosTicket - * objects has been destroyed. + * @param other the object to compare to + * @return true if the specified object is equal to this {@code KerberosTicket}, + * false otherwise. * @since 1.6 */ public boolean equals(Object other) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyTab.java --- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyTab.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyTab.java Wed Dec 03 19:28:35 2014 +0000 @@ -58,10 +58,10 @@ *

    * It might be necessary for the application to be granted a * {@link javax.security.auth.PrivateCredentialPermission - * PrivateCredentialPermission} if it needs to access the KeyTab - * instance from a Subject. This permission is not needed when the + * PrivateCredentialPermission} if it needs to access the {@code KeyTab} + * instance from a {@code Subject}. This permission is not needed when the * application depends on the default JGSS Kerberos mechanism to access the - * KeyTab. In that case, however, the application will need an appropriate + * {@code KeyTab}. In that case, however, the application will need an appropriate * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}. *

    * The keytab file format is described at @@ -249,7 +249,7 @@ * could potentially be expired. *

    * If there is any error (say, I/O error or format error) - * during the reading process of the KeyTab file, a saved result should be + * during the reading process of the keytab file, a saved result should be * returned. If there is no saved result (say, this is the first time this * method is called, or, all previous read attempts failed), an empty array * should be returned. This can make sure the result is not drastically @@ -316,6 +316,11 @@ return !takeSnapshot().isMissing(); } + /** + * Returns an informative textual representation of this {@code KeyTab}. + * + * @return an informative textual representation of this {@code KeyTab}. + */ public String toString() { String s = (file == null) ? "Default keytab" : file.toString(); if (!bound) return s; @@ -324,22 +329,22 @@ } /** - * Returns a hashcode for this KeyTab. + * Returns a hash code for this {@code KeyTab}. * - * @return a hashCode() for the {@code KeyTab} + * @return a hash code for this {@code KeyTab}. */ public int hashCode() { return Objects.hash(file, princ, bound); } /** - * Compares the specified Object with this KeyTab for equality. + * Compares the specified object with this {@code KeyTab} for equality. * Returns true if the given object is also a * {@code KeyTab} and the two * {@code KeyTab} instances are equivalent. * - * @param other the Object to compare to - * @return true if the specified object is equal to this KeyTab + * @param other the object to compare to + * @return true if the specified object is equal to this {@code KeyTab} */ public boolean equals(Object other) { if (other == this) @@ -359,9 +364,9 @@ * Returns the service principal this {@code KeyTab} object * is bound to. Returns {@code null} if it's not bound. *

    - * Please note the deprecated constructors create a KeyTab object bound for - * some unknown principal. In this case, this method also returns null. - * User can call {@link #isBound()} to verify this case. + * Please note the deprecated constructors create a {@code KeyTab} object + * bound for some unknown principal. In this case, this method also returns + * null. User can call {@link #isBound()} to verify this case. * @return the service principal * @since 1.8 */ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/BaseRowSet.java --- a/jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/BaseRowSet.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/BaseRowSet.java Wed Dec 03 19:28:35 2014 +0000 @@ -462,7 +462,7 @@ * false that it is not. The default is true. * @serial */ - private boolean escapeProcessing; + private boolean escapeProcessing = true; /** * A constant indicating the isolation level of the connection diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.sql/share/classes/java/sql/Connection.java --- a/jdk/src/java.sql/share/classes/java/sql/Connection.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.sql/share/classes/java/sql/Connection.java Wed Dec 03 19:28:35 2014 +0000 @@ -1116,7 +1116,7 @@ * * @return true if the connection is valid, false otherwise * @exception SQLException if the value supplied for timeout - * is less then 0 + * is less than 0 * @since 1.6 * * @see java.sql.DatabaseMetaData#getClientInfoProperties diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/NodeSetData.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/NodeSetData.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/NodeSetData.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,9 +37,10 @@ * * @author Sean Mullan * @author JSR 105 Expert Group + * @param the type of nodes maintained by this set * @since 1.6 */ -public interface NodeSetData extends Data { +public interface NodeSetData extends Data, Iterable { /** * Returns a read-only iterator over the nodes contained in this @@ -52,6 +53,5 @@ * @return an Iterator over the nodes in this * NodeSetData in document order */ - @SuppressWarnings("rawtypes") - Iterator iterator(); + Iterator iterator(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dom/DOMCryptoContext.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dom/DOMCryptoContext.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dom/DOMCryptoContext.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import org.w3c.dom.Element; /** @@ -219,8 +220,7 @@ * * @return a read-only iterator over the set of mappings */ - @SuppressWarnings("rawtypes") - public Iterator iterator() { + public Iterator> iterator() { return Collections.unmodifiableMap(idMap).entrySet().iterator(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/Manifest.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/Manifest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/Manifest.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,8 +51,8 @@ * *

      *   XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");
    - *   List references = Collections.singletonList(factory.newReference
    - *       ("#reference-1", DigestMethod.SHA1));
    + *   Reference ref = factory.newReference("#reference-1", DigestMethod.SHA1);
    + *   List references = Collections.singletonList(ref);
      *   Manifest manifest = factory.newManifest(references, "manifest-1");
      * 
    * @@ -86,6 +86,5 @@ * * @return an unmodifiable list of one or more References */ - @SuppressWarnings("rawtypes") - List getReferences(); + List getReferences(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/Reference.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/Reference.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/Reference.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,8 +85,7 @@ * @return an unmodifiable list of Transforms * (may be empty but never null) */ - @SuppressWarnings("rawtypes") - List getTransforms(); + List getTransforms(); /** * Returns the digest method of this Reference. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureProperties.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureProperties.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureProperties.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -87,6 +87,5 @@ * @return an unmodifiable list of one or more * SignaturePropertys */ - @SuppressWarnings("rawtypes") - List getProperties(); + List getProperties(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureProperty.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureProperty.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureProperty.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -91,6 +91,5 @@ * * @return an unmodifiable list of one or more XMLStructures */ - @SuppressWarnings("rawtypes") - List getContent(); + List getContent(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignedInfo.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignedInfo.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignedInfo.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -80,8 +80,7 @@ * * @return an unmodifiable list of one or more {@link Reference}s */ - @SuppressWarnings("rawtypes") - List getReferences(); + List getReferences(); /** * Returns the optional Id attribute of this diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLObject.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,7 +64,8 @@ * *
      *   XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
    - *   List content = Collections.singletonList(fac.newManifest(references)));
    + *   Manifest manifest = fac.newManifest(references);
    + *   List content = Collections.singletonList(manifest);
      *   XMLObject object = factory.newXMLObject(content, "object-1", null, null);
      * 
    * @@ -100,8 +101,7 @@ * @return an unmodifiable list of XMLStructures (may be empty * but never null) */ - @SuppressWarnings("rawtypes") - List getContent(); + List getContent(); /** * Returns the Id of this XMLObject. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignature.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignature.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignature.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -136,8 +136,7 @@ * @return an unmodifiable list of XMLObjects (may be empty * but never null) */ - @SuppressWarnings("rawtypes") - List getObjects(); + List getObjects(); /** * Returns the optional Id of this XMLSignature. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignatureFactory.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignatureFactory.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/XMLSignatureFactory.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -365,9 +365,8 @@ * @throws ClassCastException if any of the objects are not of * type XMLObject */ - @SuppressWarnings("rawtypes") public abstract XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki, - List objects, String id, String signatureValueId); + List objects, String id, String signatureValueId); /** * Creates a Reference with the specified URI and digest @@ -399,9 +398,8 @@ * compliant * @throws NullPointerException if dm is null */ - @SuppressWarnings("rawtypes") public abstract Reference newReference(String uri, DigestMethod dm, - List transforms, String type, String id); + List transforms, String type, String id); /** * Creates a Reference with the specified parameters and @@ -430,9 +428,9 @@ * @throws NullPointerException if dm or * digestValue is null */ - @SuppressWarnings("rawtypes") public abstract Reference newReference(String uri, DigestMethod dm, - List transforms, String type, String id, byte[] digestValue); + List transforms, String type, String id, + byte[] digestValue); /** * Creates a Reference with the specified parameters. @@ -473,10 +471,9 @@ * appliedTransforms or result is * null */ - @SuppressWarnings("rawtypes") public abstract Reference newReference(String uri, DigestMethod dm, - List appliedTransforms, Data result, List transforms, String type, - String id); + List appliedTransforms, Data result, + List transforms, String type, String id); /** * Creates a SignedInfo with the specified canonicalization @@ -493,9 +490,8 @@ * @throws NullPointerException if any of the parameters * are null */ - @SuppressWarnings("rawtypes") public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm, - SignatureMethod sm, List references); + SignatureMethod sm, List references); /** * Creates a SignedInfo with the specified parameters. @@ -512,9 +508,8 @@ * @throws NullPointerException if cm, sm, or * references are null */ - @SuppressWarnings("rawtypes") public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm, - SignatureMethod sm, List references, String id); + SignatureMethod sm, List references, String id); // Object factory methods /** @@ -530,9 +525,8 @@ * @throws ClassCastException if content contains any * entries that are not of type {@link XMLStructure} */ - @SuppressWarnings("rawtypes") - public abstract XMLObject newXMLObject(List content, String id, - String mimeType, String encoding); + public abstract XMLObject newXMLObject(List content, + String id, String mimeType, String encoding); /** * Creates a Manifest containing the specified @@ -547,8 +541,7 @@ * @throws ClassCastException if references contains any * entries that are not of type {@link Reference} */ - @SuppressWarnings("rawtypes") - public abstract Manifest newManifest(List references); + public abstract Manifest newManifest(List references); /** * Creates a Manifest containing the specified @@ -564,8 +557,8 @@ * @throws ClassCastException if references contains any * entries that are not of type {@link Reference} */ - @SuppressWarnings("rawtypes") - public abstract Manifest newManifest(List references, String id); + public abstract Manifest newManifest(List references, + String id); /** * Creates a SignatureProperty containing the specified @@ -583,9 +576,8 @@ * @throws ClassCastException if content contains any * entries that are not of type {@link XMLStructure} */ - @SuppressWarnings("rawtypes") public abstract SignatureProperty newSignatureProperty - (List content, String target, String id); + (List content, String target, String id); /** * Creates a SignatureProperties containing the specified @@ -602,9 +594,8 @@ * @throws ClassCastException if properties contains any * entries that are not of type {@link SignatureProperty} */ - @SuppressWarnings("rawtypes") public abstract SignatureProperties newSignatureProperties - (List properties, String id); + (List properties, String id); // Algorithm factory methods /** diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfo.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfo.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfo.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,8 +94,7 @@ * in this KeyInfo. Never returns null or an * empty list. */ - @SuppressWarnings("rawtypes") - List getContent(); + List getContent(); /** * Return the optional Id attribute of this KeyInfo, which diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfoFactory.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfoFactory.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/KeyInfoFactory.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -305,8 +305,7 @@ * @throws ClassCastException if content contains any entries * that are not of type {@link XMLStructure} */ - @SuppressWarnings("rawtypes") - public abstract KeyInfo newKeyInfo(List content); + public abstract KeyInfo newKeyInfo(List content); /** * Creates a KeyInfo containing the specified list of key @@ -325,8 +324,8 @@ * @throws ClassCastException if content contains any entries * that are not of type {@link XMLStructure} */ - @SuppressWarnings("rawtypes") - public abstract KeyInfo newKeyInfo(List content, String id); + public abstract KeyInfo newKeyInfo(List content, + String id); /** * Creates a KeyName from the specified name. @@ -387,9 +386,8 @@ * @throws ClassCastException if other contains any * entries that are not of type {@link XMLStructure} */ - @SuppressWarnings("rawtypes") public abstract PGPData newPGPData(byte[] keyId, byte[] keyPacket, - List other); + List other); /** * Creates a PGPData from the specified PGP key material @@ -411,8 +409,8 @@ * @throws ClassCastException if other contains any * entries that are not of type {@link XMLStructure} */ - @SuppressWarnings("rawtypes") - public abstract PGPData newPGPData(byte[] keyPacket, List other); + public abstract PGPData newPGPData(byte[] keyPacket, + List other); /** * Creates a RetrievalMethod from the specified URI. @@ -443,9 +441,8 @@ * @throws ClassCastException if transforms contains any * entries that are not of type {@link Transform} */ - @SuppressWarnings("rawtypes") public abstract RetrievalMethod newRetrievalMethod(String uri, String type, - List transforms); + List transforms); /** * Creates a X509Data containing the specified list of @@ -469,8 +466,7 @@ * @throws ClassCastException if content contains any entries * that are not of one of the valid types mentioned above */ - @SuppressWarnings("rawtypes") - public abstract X509Data newX509Data(List content); + public abstract X509Data newX509Data(List content); /** * Creates an X509IssuerSerial from the specified X.500 issuer diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/PGPData.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/PGPData.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/PGPData.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,6 +112,5 @@ * @return an unmodifiable list of XMLStructures (may be * empty, but never null) */ - @SuppressWarnings("rawtypes") - List getExternalElements(); + List getExternalElements(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/RetrievalMethod.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/RetrievalMethod.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/RetrievalMethod.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -80,8 +80,7 @@ * @return an unmodifiable list of Transform objects (may be * empty but never null). */ - @SuppressWarnings("rawtypes") - List getTransforms(); + List getTransforms(); /** * Returns the URI of the referenced KeyInfo information. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/X509Data.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/X509Data.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/keyinfo/X509Data.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -109,6 +109,5 @@ * @return an unmodifiable list of the content in this X509Data * (never null or empty) */ - @SuppressWarnings("rawtypes") - List getContent(); + List getContent(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/ExcC14NParameterSpec.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/ExcC14NParameterSpec.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/ExcC14NParameterSpec.java Wed Dec 03 19:28:35 2014 +0000 @@ -59,7 +59,7 @@ */ public final class ExcC14NParameterSpec implements C14NMethodParameterSpec { - private List preList; + private final List prefixList; /** * Indicates the default namespace ("#default"). @@ -71,7 +71,7 @@ * list. */ public ExcC14NParameterSpec() { - preList = Collections.emptyList(); + prefixList = Collections.emptyList(); } /** @@ -86,22 +86,14 @@ * @throws ClassCastException if any of the entries in the list are not * of type String */ - @SuppressWarnings("rawtypes") - public ExcC14NParameterSpec(List prefixList) { + public ExcC14NParameterSpec(List prefixList) { if (prefixList == null) { throw new NullPointerException("prefixList cannot be null"); } - List copy = new ArrayList<>((List)prefixList); - for (int i = 0, size = copy.size(); i < size; i++) { - if (!(copy.get(i) instanceof String)) { - throw new ClassCastException("not a String"); - } - } - - @SuppressWarnings("unchecked") - List temp = (List)copy; - - preList = Collections.unmodifiableList(temp); + List tempList = Collections.checkedList(new ArrayList<>(), + String.class); + tempList.addAll(prefixList); + this.prefixList = Collections.unmodifiableList(tempList); } /** @@ -114,8 +106,7 @@ * @return the inclusive namespace prefix list (may be empty but never * null) */ - @SuppressWarnings("rawtypes") - public List getPrefixList() { - return preList; + public List getPrefixList() { + return prefixList; } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathFilter2ParameterSpec.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathFilter2ParameterSpec.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathFilter2ParameterSpec.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,27 +59,18 @@ * @throws NullPointerException if xPathList is * null */ - @SuppressWarnings("rawtypes") - public XPathFilter2ParameterSpec(List xPathList) { + public XPathFilter2ParameterSpec(List xPathList) { if (xPathList == null) { throw new NullPointerException("xPathList cannot be null"); } - List xPathListCopy = new ArrayList<>((List)xPathList); - if (xPathListCopy.isEmpty()) { + List tempList = + Collections.checkedList(new ArrayList(), + XPathType.class); + tempList.addAll(xPathList); + if (tempList.isEmpty()) { throw new IllegalArgumentException("xPathList cannot be empty"); } - int size = xPathListCopy.size(); - for (int i = 0; i < size; i++) { - if (!(xPathListCopy.get(i) instanceof XPathType)) { - throw new ClassCastException - ("xPathList["+i+"] is not a valid type"); - } - } - - @SuppressWarnings("unchecked") - List temp = (List)xPathListCopy; - - this.xPathList = Collections.unmodifiableList(temp); + this.xPathList = Collections.unmodifiableList(tempList); } /** @@ -91,8 +82,7 @@ * @return a List of XPathType objects * (never null or empty) */ - @SuppressWarnings("rawtypes") - public List getXPathList() { + public List getXPathList() { return xPathList; } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathFilterParameterSpec.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathFilterParameterSpec.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathFilterParameterSpec.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.Map.Entry; /** * Parameters for the @@ -51,8 +50,8 @@ */ public final class XPathFilterParameterSpec implements TransformParameterSpec { - private String xPath; - private Map nsMap; + private final String xPath; + private final Map nsMap; /** * Creates an XPathFilterParameterSpec with the specified @@ -83,26 +82,16 @@ * @throws ClassCastException if any of the map's keys or entries are not * of type String */ - @SuppressWarnings("rawtypes") - public XPathFilterParameterSpec(String xPath, Map namespaceMap) { + public XPathFilterParameterSpec(String xPath, Map namespaceMap) { if (xPath == null || namespaceMap == null) { throw new NullPointerException(); } this.xPath = xPath; - Map copy = new HashMap<>((Map)namespaceMap); - Iterator> entries = copy.entrySet().iterator(); - while (entries.hasNext()) { - Map.Entry me = entries.next(); - if (!(me.getKey() instanceof String) || - !(me.getValue() instanceof String)) { - throw new ClassCastException("not a String"); - } - } - - @SuppressWarnings("unchecked") - Map temp = (Map)copy; - - nsMap = Collections.unmodifiableMap(temp); + Map tempMap = Collections.checkedMap(new HashMap<>(), + String.class, + String.class); + tempMap.putAll(namespaceMap); + this.nsMap = Collections.unmodifiableMap(tempMap); } /** @@ -125,8 +114,7 @@ * @return a Map of namespace prefixes to namespace URIs (may * be empty, but never null) */ - @SuppressWarnings("rawtypes") - public Map getNamespaceMap() { + public Map getNamespaceMap() { return nsMap; } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathType.java --- a/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathType.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/spec/XPathType.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ package javax.xml.crypto.dsig.spec; import java.util.Collections; -import java.util.Iterator; import java.util.HashMap; import java.util.Map; @@ -106,7 +105,7 @@ private final String expression; private final Filter filter; - private Map nsMap; + private final Map nsMap; /** * Creates an XPathType instance with the specified XPath @@ -147,26 +146,24 @@ * @throws ClassCastException if any of the map's keys or entries are * not of type String */ - @SuppressWarnings("rawtypes") - public XPathType(String expression, Filter filter, Map namespaceMap) { - this(expression, filter); + public XPathType(String expression, Filter filter, + Map namespaceMap) { + if (expression == null) { + throw new NullPointerException("expression cannot be null"); + } + if (filter == null) { + throw new NullPointerException("filter cannot be null"); + } if (namespaceMap == null) { throw new NullPointerException("namespaceMap cannot be null"); } - Map copy = new HashMap<>((Map)namespaceMap); - Iterator> entries = copy.entrySet().iterator(); - while (entries.hasNext()) { - Map.Entry me = entries.next(); - if (!(me.getKey() instanceof String) || - !(me.getValue() instanceof String)) { - throw new ClassCastException("not a String"); - } - } - - @SuppressWarnings("unchecked") - Map temp = (Map)copy; - - nsMap = Collections.unmodifiableMap(temp); + this.expression = expression; + this.filter = filter; + Map tempMap = Collections.checkedMap(new HashMap<>(), + String.class, + String.class); + tempMap.putAll(namespaceMap); + this.nsMap = Collections.unmodifiableMap(tempMap); } /** @@ -198,8 +195,7 @@ * @return a Map of namespace prefixes to namespace URIs * (may be empty, but never null) */ - @SuppressWarnings("rawtypes") - public Map getNamespaceMap() { + public Map getNamespaceMap() { return nsMap; } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,7 +21,7 @@ * under the License. */ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. */ /* * $Id: ApacheCanonicalizer.java 1333869 2012-05-04 10:42:44Z coheigea $ @@ -166,11 +166,9 @@ (subTree.getRoot()))); } } else if (data instanceof NodeSetData) { - NodeSetData nsd = (NodeSetData)data; - // convert Iterator to Set - @SuppressWarnings("unchecked") - Set ns = Utils.toNodeSet(nsd.iterator()); - nodeSet = ns; + NodeSetData nsd = (NodeSetData)data; + // convert Iterator to Set + nodeSet = Utils.toNodeSet(nsd.iterator()); if (log.isLoggable(java.util.logging.Level.FINE)) { log.log(java.util.logging.Level.FINE, "Canonicalizing " + nodeSet.size() + " nodes"); } @@ -236,7 +234,6 @@ in = new XMLSignatureInput(subTree.getRoot()); in.setExcludeComments(subTree.excludeComments()); } else { - @SuppressWarnings("unchecked") Set nodeSet = Utils.toNodeSet(((NodeSetData)data).iterator()); in = new XMLSignatureInput(nodeSet); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java Wed Dec 03 19:28:35 2014 +0000 @@ -39,7 +39,7 @@ import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; -public class ApacheNodeSetData implements ApacheData, NodeSetData { +public class ApacheNodeSetData implements ApacheData, NodeSetData { private XMLSignatureInput xi; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,7 +21,7 @@ * under the License. */ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. */ /* * $Id: ApacheTransform.java 1333869 2012-05-04 10:42:44Z coheigea $ @@ -175,7 +175,6 @@ in = new XMLSignatureInput(subTree.getRoot()); in.setExcludeComments(subTree.excludeComments()); } else { - @SuppressWarnings("unchecked") Set nodeSet = Utils.toNodeSet(((NodeSetData)data).iterator()); in = new XMLSignatureInput(nodeSet); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,7 +21,7 @@ * under the License. */ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. */ /* * $Id: DOMExcC14NMethod.java 1197150 2011-11-03 14:34:57Z coheigea $ @@ -119,7 +119,6 @@ ExcC14NParameterSpec params = (ExcC14NParameterSpec)spec; StringBuilder prefixListAttr = new StringBuilder(""); - @SuppressWarnings("unchecked") List prefixList = params.getPrefixList(); for (int i = 0, size = prefixList.size(); i < size; i++) { prefixListAttr.append(prefixList.get(i)); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Wed Dec 03 19:28:35 2014 +0000 @@ -68,17 +68,14 @@ if (content == null) { throw new NullPointerException("content cannot be null"); } - this.keyInfoTypes = - Collections.unmodifiableList(new ArrayList(content)); + List tempList = + Collections.checkedList(new ArrayList(), + XMLStructure.class); + tempList.addAll(content); + this.keyInfoTypes = Collections.unmodifiableList(tempList); if (this.keyInfoTypes.isEmpty()) { throw new IllegalArgumentException("content cannot be empty"); } - for (int i = 0, size = this.keyInfoTypes.size(); i < size; i++) { - if (!(this.keyInfoTypes.get(i) instanceof XMLStructure)) { - throw new ClassCastException - ("content["+i+"] is not a valid KeyInfo type"); - } - } this.id = id; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Wed Dec 03 19:28:35 2014 +0000 @@ -34,6 +34,7 @@ import java.util.List; import javax.xml.crypto.*; import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.Transform; import javax.xml.crypto.dsig.keyinfo.*; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -48,13 +49,11 @@ public DOMKeyInfoFactory() { } - @SuppressWarnings("rawtypes") - public KeyInfo newKeyInfo(List content) { + public KeyInfo newKeyInfo(List content) { return newKeyInfo(content, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public KeyInfo newKeyInfo(List content, String id) { + public KeyInfo newKeyInfo(List content, String id) { return new DOMKeyInfo(content, id); } @@ -79,13 +78,13 @@ return newPGPData(keyId, null, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public PGPData newPGPData(byte[] keyId, byte[] keyPacket, List other) { + public PGPData newPGPData(byte[] keyId, byte[] keyPacket, + List other) { return new DOMPGPData(keyId, keyPacket, other); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public PGPData newPGPData(byte[] keyPacket, List other) { + public PGPData newPGPData(byte[] keyPacket, + List other) { return new DOMPGPData(keyPacket, other); } @@ -93,17 +92,15 @@ return newRetrievalMethod(uri, null, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) public RetrievalMethod newRetrievalMethod(String uri, String type, - List transforms) { + List transforms) { if (uri == null) { throw new NullPointerException("uri must not be null"); } return new DOMRetrievalMethod(uri, type, transforms); } - @SuppressWarnings("rawtypes") - public X509Data newX509Data(List content) { + public X509Data newX509Data(List content) { return new DOMX509Data(content); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java Wed Dec 03 19:28:35 2014 +0000 @@ -33,7 +33,6 @@ import javax.xml.crypto.dsig.*; import javax.xml.crypto.dsig.keyinfo.KeyValue; -// import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.security.AccessController; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java Wed Dec 03 19:28:35 2014 +0000 @@ -67,18 +67,15 @@ if (references == null) { throw new NullPointerException("references cannot be null"); } - this.references = - Collections.unmodifiableList(new ArrayList(references)); + List tempList = + Collections.checkedList(new ArrayList(), + Reference.class); + tempList.addAll(references); + this.references = Collections.unmodifiableList(tempList); if (this.references.isEmpty()) { throw new IllegalArgumentException("list of references must " + "contain at least one entry"); } - for (int i = 0, size = this.references.size(); i < size; i++) { - if (!(this.references.get(i) instanceof Reference)) { - throw new ClassCastException - ("references["+i+"] is not a valid type"); - } - } this.id = id; } @@ -127,7 +124,6 @@ return id; } - @SuppressWarnings("unchecked") static List getManifestReferences(Manifest mf) { return mf.getReferences(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java Wed Dec 03 19:28:35 2014 +0000 @@ -73,18 +73,13 @@ if (keyPacket == null) { throw new NullPointerException("keyPacket cannot be null"); } - if (other == null || other.isEmpty()) { - this.externalElements = Collections.emptyList(); - } else { - this.externalElements = - Collections.unmodifiableList(new ArrayList(other)); - for (int i = 0, size = this.externalElements.size(); i < size; i++) { - if (!(this.externalElements.get(i) instanceof XMLStructure)) { - throw new ClassCastException - ("other["+i+"] is not a valid PGPData type"); - } - } + List tempList = + Collections.checkedList(new ArrayList(), + XMLStructure.class); + if (other != null) { + tempList.addAll(other); } + this.externalElements = Collections.unmodifiableList(tempList); this.keyPacket = keyPacket.clone(); checkKeyPacket(keyPacket); this.keyId = null; @@ -120,18 +115,13 @@ if (keyId.length != 8) { throw new IllegalArgumentException("keyId must be 8 bytes long"); } - if (other == null || other.isEmpty()) { - this.externalElements = Collections.emptyList(); - } else { - this.externalElements = - Collections.unmodifiableList(new ArrayList(other)); - for (int i = 0, size = this.externalElements.size(); i < size; i++) { - if (!(this.externalElements.get(i) instanceof XMLStructure)) { - throw new ClassCastException - ("other["+i+"] is not a valid PGPData type"); - } - } + List tempList = + Collections.checkedList(new ArrayList(), + XMLStructure.class); + if (other != null) { + tempList.addAll(other); } + this.externalElements = Collections.unmodifiableList(tempList); this.keyId = keyId.clone(); this.keyPacket = keyPacket == null ? null : keyPacket.clone(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java Wed Dec 03 19:28:35 2014 +0000 @@ -147,29 +147,21 @@ if (dm == null) { throw new NullPointerException("DigestMethod must be non-null"); } - if (appliedTransforms == null) { - this.allTransforms = new ArrayList(); - } else { - this.allTransforms = new ArrayList(appliedTransforms); - for (int i = 0, size = this.allTransforms.size(); i < size; i++) { - if (!(this.allTransforms.get(i) instanceof Transform)) { - throw new ClassCastException - ("appliedTransforms["+i+"] is not a valid type"); - } - } + List tempList = + Collections.checkedList(new ArrayList(), + Transform.class); + if (appliedTransforms != null) { + tempList.addAll(appliedTransforms); } - if (transforms == null) { - this.transforms = Collections.emptyList(); - } else { - this.transforms = new ArrayList(transforms); - for (int i = 0, size = this.transforms.size(); i < size; i++) { - if (!(this.transforms.get(i) instanceof Transform)) { - throw new ClassCastException - ("transforms["+i+"] is not a valid type"); - } - } - this.allTransforms.addAll(this.transforms); + List tempList2 = + Collections.checkedList(new ArrayList(), + Transform.class); + if (transforms != null) { + tempList.addAll(transforms); + tempList2.addAll(transforms); } + this.allTransforms = Collections.unmodifiableList(tempList); + this.transforms = tempList2; this.digestMethod = dm; this.uri = uri; if ((uri != null) && (!uri.equals(""))) { @@ -642,7 +634,7 @@ if (xsi.isNodeSet()) { try { final Set s = xsi.getNodeSet(); - return new NodeSetData() { + return new NodeSetData() { public Iterator iterator() { return s.iterator(); } }; } catch (Exception e) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Wed Dec 03 19:28:35 2014 +0000 @@ -90,18 +90,13 @@ if (uri == null) { throw new NullPointerException("uri cannot be null"); } - if (transforms == null || transforms.isEmpty()) { - this.transforms = Collections.emptyList(); - } else { - this.transforms = Collections.unmodifiableList( - new ArrayList(transforms)); - for (int i = 0, size = this.transforms.size(); i < size; i++) { - if (!(this.transforms.get(i) instanceof Transform)) { - throw new ClassCastException - ("transforms["+i+"] is not a valid type"); - } - } + List tempList = + Collections.checkedList(new ArrayList(), + Transform.class); + if (transforms != null) { + tempList.addAll(transforms); } + this.transforms = Collections.unmodifiableList(tempList); this.uri = uri; if (!uri.equals("")) { try { @@ -244,7 +239,7 @@ // guard against RetrievalMethod loops if ((data instanceof NodeSetData) && Utils.secureValidation(context)) { - NodeSetData nsd = (NodeSetData)data; + NodeSetData nsd = (NodeSetData)data; Iterator i = nsd.iterator(); if (i.hasNext()) { Node root = (Node)i.next(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java Wed Dec 03 19:28:35 2014 +0000 @@ -69,18 +69,15 @@ { if (properties == null) { throw new NullPointerException("properties cannot be null"); - } else if (properties.isEmpty()) { + } + List tempList = + Collections.checkedList(new ArrayList(), + SignatureProperty.class); + tempList.addAll(properties); + if (tempList.isEmpty()) { throw new IllegalArgumentException("properties cannot be empty"); - } else { - this.properties = Collections.unmodifiableList( - new ArrayList(properties)); - for (int i = 0, size = this.properties.size(); i < size; i++) { - if (!(this.properties.get(i) instanceof SignatureProperty)) { - throw new ClassCastException - ("properties["+i+"] is not a valid type"); - } - } } + this.properties = Collections.unmodifiableList(tempList); this.id = id; } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java Wed Dec 03 19:28:35 2014 +0000 @@ -71,20 +71,18 @@ { if (target == null) { throw new NullPointerException("target cannot be null"); - } else if (content == null) { + } + if (content == null) { throw new NullPointerException("content cannot be null"); - } else if (content.isEmpty()) { + } + List tempList = + Collections.checkedList(new ArrayList(), + XMLStructure.class); + tempList.addAll(content); + if (tempList.isEmpty()) { throw new IllegalArgumentException("content cannot be empty"); - } else { - this.content = Collections.unmodifiableList( - new ArrayList(content)); - for (int i = 0, size = this.content.size(); i < size; i++) { - if (!(this.content.get(i) instanceof XMLStructure)) { - throw new ClassCastException - ("content["+i+"] is not a valid type"); - } - } } + this.content = Collections.unmodifiableList(tempList); this.target = target; this.id = id; } @@ -169,7 +167,6 @@ boolean idsEqual = (id == null ? osp.getId() == null : id.equals(osp.getId())); - @SuppressWarnings("unchecked") List ospContent = osp.getContent(); return (equalsContent(ospContent) && target.equals(osp.getTarget()) && idsEqual); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Wed Dec 03 19:28:35 2014 +0000 @@ -100,19 +100,14 @@ } this.canonicalizationMethod = cm; this.signatureMethod = sm; - this.references = Collections.unmodifiableList( - new ArrayList(references)); - if (this.references.isEmpty()) { - throw new IllegalArgumentException("list of references must " + - "contain at least one entry"); + List tempList = + Collections.checkedList(new ArrayList(), + Reference.class); + tempList.addAll(references); + if (tempList.isEmpty()) { + throw new IllegalArgumentException("references cannot be empty"); } - for (int i = 0, size = this.references.size(); i < size; i++) { - Object obj = this.references.get(i); - if (!(obj instanceof Reference)) { - throw new ClassCastException("list of references contains " + - "an illegal type"); - } - } + this.references = Collections.unmodifiableList(tempList); } /** diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java Wed Dec 03 19:28:35 2014 +0000 @@ -44,7 +44,7 @@ * directly on the subdocument and there is no need to convert it * first to an XPath node-set. */ -public class DOMSubTreeData implements NodeSetData { +public class DOMSubTreeData implements NodeSetData { private boolean excludeComments; private Node root; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java Wed Dec 03 19:28:35 2014 +0000 @@ -367,9 +367,7 @@ private static boolean paramsEqual(XPathFilter2ParameterSpec spec1, XPathFilter2ParameterSpec spec2) { - @SuppressWarnings("unchecked") List types = spec1.getXPathList(); - @SuppressWarnings("unchecked") List otypes = spec2.getXPathList(); int size = types.size(); if (size != otypes.size()) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java Wed Dec 03 19:28:35 2014 +0000 @@ -135,7 +135,7 @@ this.content = Collections.unmodifiableList(content); } - public List getContent() { + public List getContent() { return content; } @@ -265,7 +265,7 @@ } X509Data oxd = (X509Data)o; - @SuppressWarnings("unchecked") List ocontent = oxd.getContent(); + List ocontent = oxd.getContent(); int size = content.size(); if (size != ocontent.size()) { return false; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -70,18 +70,13 @@ public DOMXMLObject(List content, String id, String mimeType, String encoding) { - if (content == null || content.isEmpty()) { - this.content = Collections.emptyList(); - } else { - this.content = Collections.unmodifiableList( - new ArrayList(content)); - for (int i = 0, size = this.content.size(); i < size; i++) { - if (!(this.content.get(i) instanceof XMLStructure)) { - throw new ClassCastException - ("content["+i+"] is not a valid type"); - } - } + List tempList = + Collections.checkedList(new ArrayList(), + XMLStructure.class); + if (content != null) { + tempList.addAll(content); } + this.content = Collections.unmodifiableList(tempList); this.id = id; this.mimeType = mimeType; this.encoding = encoding; @@ -204,7 +199,6 @@ (mimeType == null ? oxo.getMimeType() == null : mimeType.equals(oxo.getMimeType())); - @SuppressWarnings("unchecked") List oxoContent = oxo.getContent(); return (idsEqual && encodingsEqual && mimeTypesEqual && equalsContent(oxoContent)); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Wed Dec 03 19:28:35 2014 +0000 @@ -109,18 +109,13 @@ this.si = si; this.id = id; this.sv = new DOMSignatureValue(signatureValueId); - if (objs == null) { - this.objects = Collections.emptyList(); - } else { - this.objects = - Collections.unmodifiableList(new ArrayList(objs)); - for (int i = 0, size = this.objects.size(); i < size; i++) { - if (!(this.objects.get(i) instanceof XMLObject)) { - throw new ClassCastException - ("objs["+i+"] is not an XMLObject"); - } - } + List tempList = + Collections.checkedList(new ArrayList(), + XMLObject.class); + if (objs != null) { + tempList.addAll(objs); } + this.objects = Collections.unmodifiableList(tempList); this.ki = ki; } @@ -270,7 +265,6 @@ } // validate all References - @SuppressWarnings("unchecked") List refs = this.si.getReferences(); boolean validateRefs = true; for (int i = 0, size = refs.size(); validateRefs && i < size; i++) { @@ -297,7 +291,6 @@ { for (int i=0, size=objects.size(); validateMans && i < size; i++) { XMLObject xo = objects.get(i); - @SuppressWarnings("unchecked") List content = xo.getContent(); int csize = content.size(); for (int j = 0; validateMans && j < csize; j++) { @@ -307,7 +300,6 @@ log.log(java.util.logging.Level.FINE, "validating manifest"); } Manifest man = (Manifest)xs; - @SuppressWarnings("unchecked") List manRefs = man.getReferences(); int rsize = manRefs.size(); for (int k = 0; validateMans && k < rsize; k++) { @@ -348,20 +340,17 @@ signatureIdMap = new HashMap(); signatureIdMap.put(id, this); signatureIdMap.put(si.getId(), si); - @SuppressWarnings("unchecked") List refs = si.getReferences(); for (Reference ref : refs) { signatureIdMap.put(ref.getId(), ref); } for (XMLObject obj : objects) { signatureIdMap.put(obj.getId(), obj); - @SuppressWarnings("unchecked") List content = obj.getContent(); for (XMLStructure xs : content) { if (xs instanceof Manifest) { Manifest man = (Manifest)xs; signatureIdMap.put(man.getId(), man); - @SuppressWarnings("unchecked") List manRefs = man.getReferences(); for (Reference ref : manRefs) { allReferences.add(ref); @@ -483,7 +472,6 @@ // reference dependencies in the XPath Transform - so be on // the safe side, and skip and do at end in the final sweep if (uri.length() == 0) { - @SuppressWarnings("unchecked") List transforms = ref.getTransforms(); for (Transform transform : transforms) { String transformAlg = transform.getAlgorithm(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Wed Dec 03 19:28:35 2014 +0000 @@ -58,9 +58,8 @@ return new DOMXMLSignature(si, ki, null, null, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) public XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki, - List objects, String id, String signatureValueId) { + List objects, String id, String signatureValueId) { return new DOMXMLSignature(si, ki, objects, id, signatureValueId); } @@ -68,16 +67,14 @@ return newReference(uri, dm, null, null, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public Reference newReference(String uri, DigestMethod dm, List transforms, - String type, String id) { + public Reference newReference(String uri, DigestMethod dm, + List transforms, String type, String id) { return new DOMReference(uri, type, dm, transforms, id, getProvider()); } - @SuppressWarnings({ "unchecked", "rawtypes" }) public Reference newReference(String uri, DigestMethod dm, - List appliedTransforms, Data result, List transforms, String type, - String id) { + List appliedTransforms, Data result, + List transforms, String type, String id) { if (appliedTransforms == null) { throw new NullPointerException("appliedTransforms cannot be null"); } @@ -91,9 +88,9 @@ (uri, type, dm, appliedTransforms, result, transforms, id, getProvider()); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public Reference newReference(String uri, DigestMethod dm, List transforms, - String type, String id, byte[] digestValue) { + public Reference newReference(String uri, DigestMethod dm, + List transforms, String type, String id, + byte[] digestValue) { if (digestValue == null) { throw new NullPointerException("digestValue cannot be null"); } @@ -101,43 +98,38 @@ (uri, type, dm, null, null, transforms, id, digestValue, getProvider()); } - @SuppressWarnings("rawtypes") public SignedInfo newSignedInfo(CanonicalizationMethod cm, - SignatureMethod sm, List references) { + SignatureMethod sm, List references) { return newSignedInfo(cm, sm, references, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) public SignedInfo newSignedInfo(CanonicalizationMethod cm, - SignatureMethod sm, List references, String id) { + SignatureMethod sm, List references, String id) { return new DOMSignedInfo(cm, sm, references, id); } // Object factory methods - @SuppressWarnings({ "unchecked", "rawtypes" }) - public XMLObject newXMLObject(List content, String id, String mimeType, - String encoding) { + public XMLObject newXMLObject(List content, + String id, String mimeType, String encoding) { return new DOMXMLObject(content, id, mimeType, encoding); } - @SuppressWarnings("rawtypes") - public Manifest newManifest(List references) { + public Manifest newManifest(List references) { return newManifest(references, null); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public Manifest newManifest(List references, String id) { + public Manifest newManifest(List references, + String id) { return new DOMManifest(references, id); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public SignatureProperties newSignatureProperties(List props, String id) { + public SignatureProperties newSignatureProperties( + List props, String id) { return new DOMSignatureProperties(props, id); } - @SuppressWarnings({ "unchecked", "rawtypes" }) public SignatureProperty newSignatureProperty - (List info, String target, String id) { + (List info, String target, String id) { return new DOMSignatureProperty(info, target, id); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java Wed Dec 03 19:28:35 2014 +0000 @@ -133,7 +133,6 @@ String prefix = DOMUtils.getNSPrefix(context, Transform.XPATH2); String qname = (prefix == null || prefix.length() == 0) ? "xmlns" : "xmlns:" + prefix; - @SuppressWarnings("unchecked") List xpathList = xp.getXPathList(); for (XPathType xpathType : xpathList) { Element elem = DOMUtils.createElement(ownerDoc, "XPath", @@ -146,7 +145,6 @@ Transform.XPATH2); // add namespace attributes, if necessary - @SuppressWarnings("unchecked") Set> entries = xpathType.getNamespaceMap().entrySet(); for (Map.Entry entry : entries) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java Wed Dec 03 19:28:35 2014 +0000 @@ -99,7 +99,6 @@ xpathElem.appendChild(ownerDoc.createTextNode(xp.getXPath())); // add namespace attributes, if necessary - @SuppressWarnings("unchecked") Set> entries = xp.getNamespaceMap().entrySet(); for (Map.Entry entry : entries) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java --- a/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java Wed Dec 03 19:28:35 2014 +0000 @@ -70,10 +70,10 @@ * @param i the Iterator * @return the Set of Nodes */ - static Set toNodeSet(Iterator i) { + static Set toNodeSet(Iterator i) { Set nodeSet = new HashSet(); while (i.hasNext()) { - Node n = i.next(); + Node n = (Node)i.next(); nodeSet.add(n); // insert attributes nodes to comply with XPath if (n.getNodeType() == Node.ELEMENT_NODE) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/jdk.deploy.osx/macosx/native/libosx/KeystoreImpl.m --- a/jdk/src/jdk.deploy.osx/macosx/native/libosx/KeystoreImpl.m Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/jdk.deploy.osx/macosx/native/libosx/KeystoreImpl.m Wed Dec 03 19:28:35 2014 +0000 @@ -300,11 +300,21 @@ // Make a java array of certificate data from the chain. jclass byteArrayClass = (*env)->FindClass(env, "[B"); + if (byteArrayClass == NULL) { + goto errOut; + } jobjectArray javaCertArray = (*env)->NewObjectArray(env, certCount, byteArrayClass, NULL); + // Cleanup first then check for a NULL return code (*env)->DeleteLocalRef(env, byteArrayClass); + if (javaCertArray == NULL) { + goto errOut; + } // And, make an array of the certificate refs. jlongArray certRefArray = (*env)->NewLongArray(env, certCount); + if (certRefArray == NULL) { + goto errOut; + } SecCertificateRef currCertRef = NULL; @@ -319,6 +329,9 @@ bzero(&currCertData, sizeof(CSSM_DATA)); err = SecCertificateGetData(currCertRef, &currCertData); jbyteArray encodedCertData = (*env)->NewByteArray(env, currCertData.Length); + if (encodedCertData == NULL) { + goto errOut; + } (*env)->SetByteArrayRegion(env, encodedCertData, 0, currCertData.Length, (jbyte *)currCertData.Data); (*env)->SetObjectArrayElement(env, javaCertArray, i, encodedCertData); jlong certRefElement = ptr_to_jlong(currCertRef); @@ -331,6 +344,9 @@ // Find the label. It's a 'blob', but we interpret as characters. jstring alias = getLabelFromItem(env, (SecKeychainItemRef)certificate); + if (alias == NULL) { + goto errOut; + } // Find the creation date. jlong creationDate = getModDateFromItem(env, (SecKeychainItemRef)certificate); @@ -341,6 +357,7 @@ } } while (searchResult == noErr); +errOut: if (identitySearch != NULL) { CFRelease(identitySearch); } @@ -363,10 +380,16 @@ CSSM_DATA currCertificate; err = SecCertificateGetData(certRef, &currCertificate); jbyteArray certData = (*env)->NewByteArray(env, currCertificate.Length); + if (certData == NULL) { + goto errOut; + } (*env)->SetByteArrayRegion(env, certData, 0, currCertificate.Length, (jbyte *)currCertificate.Data); // Find the label. It's a 'blob', but we interpret as characters. jstring alias = getLabelFromItem(env, theItem); + if (alias == NULL) { + goto errOut; + } // Find the creation date. jlong creationDate = getModDateFromItem(env, theItem); @@ -377,6 +400,7 @@ } } while (searchResult == noErr); +errOut: if (keychainItemSearch != NULL) { CFRelease(keychainItemSearch); } @@ -405,6 +429,9 @@ if (passwordLen > 0) { passwordChars = (*env)->GetCharArrayElements(env, passwordObj, NULL); + if (passwordChars == NULL) { + goto errOut; + } passwordStrRef = CFStringCreateWithCharacters(kCFAllocatorDefault, passwordChars, passwordLen); } } @@ -424,9 +451,13 @@ if (err == noErr) { CFIndex size = CFDataGetLength(exportedData); returnValue = (*env)->NewByteArray(env, size); + if (returnValue == NULL) { + goto errOut; + } (*env)->SetByteArrayRegion(env, returnValue, 0, size, (jbyte *)CFDataGetBytePtr(exportedData)); } +errOut: if (exportedData) CFRelease(exportedData); if (passwordStrRef) CFRelease(passwordStrRef); @@ -467,6 +498,9 @@ jsize dataSize = (*env)->GetArrayLength(env, rawDataObj); jbyte *rawData = (*env)->GetByteArrayElements(env, rawDataObj, NULL); + if (rawData == NULL) { + goto errOut; + } CFDataRef cfDataToImport = CFDataCreate(kCFAllocatorDefault, (UInt8 *)rawData, dataSize); CFArrayRef createdItems = NULL; @@ -523,6 +557,8 @@ CFRelease(createdItems); } +errOut: ; + JNF_COCOA_EXIT(env); return returnValue; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java --- a/jdk/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,6 +82,7 @@ private Timer timer, timer1; private Logger logger; + private Thread dispatcherThread; ServerImpl ( HttpServer wrapper, String protocol, InetSocketAddress addr, int backlog @@ -141,9 +142,9 @@ if (executor == null) { executor = new DefaultExecutor(); } - Thread t = new Thread (dispatcher); + dispatcherThread = new Thread (dispatcher); started = true; - t.start(); + dispatcherThread.start(); } public void setExecutor (Executor executor) { @@ -205,6 +206,14 @@ if (timer1Enabled) { timer1.cancel(); } + if (dispatcherThread != null) { + try { + dispatcherThread.join(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + logger.log(Level.FINER, "ServerImpl.stop: ", e); + } + } } Dispatcher dispatcher; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugLoop.c --- a/jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugLoop.c Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugLoop.c Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,7 @@ static volatile struct PacketList *cmdQueue; static jrawMonitorID cmdQueueLock; -static jrawMonitorID resumeLock; +static jrawMonitorID vmDeathLock; static jboolean transportError; static jboolean @@ -60,28 +60,17 @@ } } -static jboolean -resumeCommand(jdwpCmdPacket *cmd) -{ - if ( (cmd->cmdSet == JDWP_COMMAND_SET(VirtualMachine)) && - (cmd->cmd == JDWP_COMMAND(VirtualMachine, Resume)) ) { - return JNI_TRUE; - } else { - return JNI_FALSE; - } -} - void debugLoop_initialize(void) { - resumeLock = debugMonitorCreate("JDWP Resume Lock"); + vmDeathLock = debugMonitorCreate("JDWP VM_DEATH Lock"); } void debugLoop_sync(void) { - debugMonitorEnter(resumeLock); - debugMonitorExit(resumeLock); + debugMonitorEnter(vmDeathLock); + debugMonitorExit(vmDeathLock); } /* @@ -136,14 +125,14 @@ jboolean replyToSender = JNI_TRUE; /* - * For VirtualMachine.Resume commands we hold the resumeLock + * For VirtualMachine commands we hold the vmDeathLock * while executing and replying to the command. This ensures - * that a Resume after VM_DEATH will be allowed to complete + * that a VM command after VM_DEATH will be allowed to complete * before the thread posting the VM_DEATH continues VM * termination. */ - if (resumeCommand(cmd)) { - debugMonitorEnter(resumeLock); + if (cmd->cmdSet == JDWP_COMMAND_SET(VirtualMachine)){ + debugMonitorEnter(vmDeathLock); } /* Initialize the input and output streams */ @@ -181,10 +170,10 @@ } /* - * Release the resumeLock as the reply has been posted. + * Release the vmDeathLock as the reply has been posted. */ - if (resumeCommand(cmd)) { - debugMonitorExit(resumeLock); + if (cmd->cmdSet == JDWP_COMMAND_SET(VirtualMachine)){ + debugMonitorExit(vmDeathLock); } inStream_destroy(&in); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/ProblemList.txt Wed Dec 03 19:28:35 2014 +0000 @@ -127,6 +127,10 @@ # 8058536 java/lang/instrument/NativeMethodPrefixAgent.java generic-all +# 8061177 +java/lang/instrument/RedefineBigClass.sh generic-all +java/lang/instrument/RetransformBigClass.sh generic-all + ############################################################################ # jdk_management @@ -344,6 +348,9 @@ # 6456333 sun/tools/jps/TestJpsJarRelative.java generic-all +# 6734748 +sun/tools/jinfo/JInfoRunningProcessFlagTest.java generic-all + # 8057732 sun/jvmstat/monitor/MonitoredVm/MonitorVmStartTerminate.java generic-all diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/TEST.groups --- a/jdk/test/TEST.groups Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/TEST.groups Wed Dec 03 19:28:35 2014 +0000 @@ -292,6 +292,65 @@ :jdk_sound \ :jdk_imageio +############################################################################### +# +# Serviceability sanity groups +# +# These groups specify a subset of Serviceability tests that are supposed to +# guard against breakage of Serviceability features by other component teams. +# They are added to the "hotspot" testset in JPRT so that they will run on all +# full-forest pushes through JPRT. +# + +jdk_svc_sanity = \ + :jdk_management_sanity \ + :jdk_instrument_sanity \ + :jdk_jmx_sanity \ + :jdk_jdi_sanity \ + :svc_tools_sanity + +jdk_management_sanity = + +jdk_instrument_sanity = + +jdk_jmx_sanity = + +jdk_jdi_sanity = \ + com/sun/jdi/AcceptTimeout.java \ + com/sun/jdi/AccessSpecifierTest.java \ + com/sun/jdi/AfterThreadDeathTest.java \ + com/sun/jdi/ArrayRangeTest.java \ + com/sun/jdi/ConstantPoolInfo.java \ + com/sun/jdi/CountFilterTest.java \ + com/sun/jdi/EarlyReturnNegativeTest.java \ + com/sun/jdi/EarlyReturnTest.java \ + com/sun/jdi/FieldWatchpoints.java \ + com/sun/jdi/FramesTest.java \ + com/sun/jdi/InstanceFilter.java \ + com/sun/jdi/InterfaceMethodsTest.java \ + com/sun/jdi/InvokeTest.java \ + com/sun/jdi/LocalVariableEqual.java \ + com/sun/jdi/LocationTest.java \ + com/sun/jdi/ModificationWatchpoints.java \ + com/sun/jdi/MonitorEventTest.java \ + com/sun/jdi/MonitorFrameInfo.java \ + com/sun/jdi/NullThreadGroupNameTest.java \ + com/sun/jdi/PopAndStepTest.java \ + com/sun/jdi/PopAsynchronousTest.java \ + com/sun/jdi/ProcessAttachTest.java \ + com/sun/jdi/ReferrersTest.java \ + com/sun/jdi/RequestReflectionTest.java \ + com/sun/jdi/ResumeOneThreadTest.java \ + com/sun/jdi/RunToExit.java \ + com/sun/jdi/SourceNameFilterTest.java \ + com/sun/jdi/VarargsTest.java \ + com/sun/jdi/Vars.java \ + com/sun/jdi/redefineMethod/RedefineTest.java \ + com/sun/jdi/sde/MangleTest.java \ + com/sun/jdi/sde/TemperatureTableTest.java + +svc_tools_sanity = + ############################# # # Stable test groups diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/com/sun/awt/Translucency/WindowOpacity.java --- a/jdk/test/com/sun/awt/Translucency/WindowOpacity.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/com/sun/awt/Translucency/WindowOpacity.java Wed Dec 03 19:28:35 2014 +0000 @@ -33,15 +33,12 @@ import java.awt.event.*; import com.sun.awt.AWTUtilities; -import sun.awt.SunToolkit; public class WindowOpacity { //*** test-writer defined static variables go here *** - private static void realSync() { - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); - } + private static Robot robot; private static void init() @@ -60,6 +57,12 @@ System.out.println("Either the Toolkit or the native system does not support controlling the window opacity level."); pass(); } + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException ("Unexpected failure"); + } boolean passed; @@ -137,7 +140,7 @@ f.setBounds(100, 100, 300, 200); f.setVisible(true); - realSync(); + robot.waitForIdle(); curOpacity = AWTUtilities.getWindowOpacity(f); if (curOpacity < 0.75f || curOpacity > 0.75f) { @@ -147,7 +150,7 @@ AWTUtilities.setWindowOpacity(f, 0.5f); - realSync(); + robot.waitForIdle(); curOpacity = AWTUtilities.getWindowOpacity(f); if (curOpacity < 0.5f || curOpacity > 0.5f) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java --- a/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java Wed Dec 03 19:28:35 2014 +0000 @@ -30,8 +30,7 @@ import javax.swing.*; import java.awt.Graphics; -import java.awt.Toolkit; -import sun.awt.SunToolkit; +import java.awt.Robot; public class bug8016551 { private static volatile RuntimeException exception = null; @@ -64,8 +63,8 @@ } }); - SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit(); - tk.realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); if (exception != null) { throw exception; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/com/sun/net/httpserver/SimpleHttpServerTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/net/httpserver/SimpleHttpServerTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8015692 + * @summary Test HttpServer instantiation, start, and stop repeated in a loop + * Testing for Bind exception on Windows + */ + +import java.net.InetSocketAddress; +import java.net.ServerSocket; + +import com.sun.net.httpserver.HttpServer; + + +public class SimpleHttpServerTest { + + public static void main(String[] args) throws Exception { + + System.out.println(System.getProperty("java.version")); + InetSocketAddress serverAddr = new InetSocketAddress(0); + HttpServer server = HttpServer.create(serverAddr, 0); + final int serverPort = server.getAddress().getPort(); + server.start(); + server.stop(0); + serverAddr = new InetSocketAddress(serverPort); + int exceptionCount = 0; + System.out.println("Using serverPort == " + serverPort); + for (int i = 0; i < 100; i++) { + try { + server = HttpServer.create(serverAddr, 0); + server.start(); + server.stop(0); + } catch (Exception ex) { + ex.printStackTrace(); + exceptionCount++; + } + } + if (exceptionCount > 0) { + throw new RuntimeException("Test Failed"); + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/com/sun/net/httpserver/StopNoStartTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/net/httpserver/StopNoStartTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8066130 + * @summary Test HttpServer stop method invocation before a start has been called + */ + +import java.net.InetSocketAddress; +import com.sun.net.httpserver.HttpServer; + + +public class StopNoStartTest { + + public static void main(String[] args) throws Exception { + + InetSocketAddress serverAddr = new InetSocketAddress(0); + HttpServer server = HttpServer.create(serverAddr, 0); + server.stop(0); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Component/CompEventOnHiddenComponent/CompEventOnHiddenComponent.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Component/CompEventOnHiddenComponent/CompEventOnHiddenComponent.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,441 @@ +/* + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 6383903 + @summary REGRESSION: componentMoved is now getting called for some hidden components + @author andrei.dmitriev: area=awt.component + @run main CompEventOnHiddenComponent +*/ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class CompEventOnHiddenComponent +{ + transient static boolean moved = false; + transient static boolean resized = false; + + transient static boolean ancestor_moved = false; + transient static boolean ancestor_resized = false; + static String passed = ""; + + private static void init() + { + String[] instructions = + { + "This is an AUTOMATIC test, simply wait until it is done.", + "The result (passed or failed) will be shown in the", + "message window below." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } + + EventQueue.invokeLater(new Runnable(){ + public void run(){ + JFrame f = new JFrame("JFrame"); + JButton b = new JButton("JButton"); + f.add(b); + new JOptionPane(). + createInternalFrame(b, "Test"). + addComponentListener(new ComponentAdapter() { + public void componentMoved(ComponentEvent e) { + moved = true; + System.out.println(e); + } + public void componentResized(ComponentEvent e) { + resized = true; + System.out.println(e); + } + }); + } + }); + + robot.waitForIdle(); + + if (moved || resized){ + passed = "Hidden component got COMPONENT_MOVED or COMPONENT_RESIZED event"; + } else { + System.out.println("Stage 1 passed."); + } + + EventQueue.invokeLater(new Runnable() { + public void run() { + JFrame parentWindow = new JFrame("JFrame 1"); + JButton component = new JButton("JButton 1");; + JButton smallButton = new JButton("Small Button"); + + + smallButton.addHierarchyBoundsListener(new HierarchyBoundsAdapter() { + public void ancestorMoved(HierarchyEvent e) { + ancestor_moved = true; + System.out.println("SMALL COMPONENT >>>>>"+e); + } + public void ancestorResized(HierarchyEvent e) { + ancestor_resized = true; + System.out.println("SMALL COMPONENT >>>>>"+e); + } + }); + + + parentWindow.add(component); + component.add(smallButton); + + component.setSize(100, 100); + component.setLocation(100, 100); + + } + }); + + robot.waitForIdle(); + + if (!ancestor_resized || !ancestor_moved){ + passed = "Hidden component didn't get ANCESTOR event"; + } else { + System.out.println("Stage 2 passed."); + } + + robot.waitForIdle(); + + if (passed.equals("")){ + CompEventOnHiddenComponent.pass(); + } else { + CompEventOnHiddenComponent.fail(passed); + } + + }//End init() + + + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class CompEventOnHiddenComponent + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// if want to make listeners, here is the recommended place for them, then instantiate +// them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + CompEventOnHiddenComponent.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + CompEventOnHiddenComponent.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + System.out.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java --- a/jdk/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java Wed Dec 03 19:28:35 2014 +0000 @@ -36,7 +36,6 @@ */ import java.awt.*; -import sun.awt.SunToolkit; public class NoUpdateUponShow { @@ -70,7 +69,13 @@ }); f.setVisible(true); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } if (wasUpdate) { fail(" Unexpected update. "); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Component/PaintAll/PaintAll.java --- a/jdk/test/java/awt/Component/PaintAll/PaintAll.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Component/PaintAll/PaintAll.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,8 +21,6 @@ * questions. */ -import sun.awt.SunToolkit; - import java.awt.Button; import java.awt.Canvas; import java.awt.Checkbox; @@ -48,6 +46,8 @@ @bug 6596915 @summary Test Component.paintAll() method @author sergey.bylokhov@oracle.com: area=awt.component + @library ../../../../lib/testlibrary/ + @build ExtendedRobot @run main PaintAll */ public class PaintAll { @@ -66,6 +66,7 @@ private static volatile boolean scrollPanePainted; private static volatile boolean textAreaPainted; private static volatile boolean textFieldPainted; + private static ExtendedRobot robot = null; private static final Button buttonStub = new Button() { @Override @@ -283,11 +284,15 @@ } private static void sleep() { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); - try { - Thread.sleep(500L); - } catch (InterruptedException ignored) { + if(robot == null) { + try { + robot = new ExtendedRobot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } } + robot.waitForIdle(500); } private static void fail(final String message) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Focus/ModalBlockedStealsFocusTest/ModalBlockedStealsFocusTest.java --- a/jdk/test/java/awt/Focus/ModalBlockedStealsFocusTest/ModalBlockedStealsFocusTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Focus/ModalBlockedStealsFocusTest/ModalBlockedStealsFocusTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -34,11 +34,9 @@ import java.applet.Applet; import java.util.concurrent.atomic.AtomicBoolean; import java.lang.reflect.InvocationTargetException; -import sun.awt.SunToolkit; import test.java.awt.regtesthelpers.Util; public class ModalBlockedStealsFocusTest extends Applet { - SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit(); Frame frame = new Frame("Blocked Frame"); Dialog dialog = new Dialog(frame, "Modal Dialog", Dialog.ModalityType.TOOLKIT_MODAL); AtomicBoolean lostFocus = new AtomicBoolean(false); @@ -85,7 +83,13 @@ }).start(); Util.waitTillShown(dialog); - toolkit.realSync(); + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } // Test 1. Show a modal blocked frame, check that it doesn't steal focus. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Focus/WindowInitialFocusTest/WindowInitialFocusTest.java --- a/jdk/test/java/awt/Focus/WindowInitialFocusTest/WindowInitialFocusTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Focus/WindowInitialFocusTest/WindowInitialFocusTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -33,7 +33,6 @@ import java.awt.event.*; import java.applet.Applet; import java.util.concurrent.atomic.AtomicBoolean; -import sun.awt.SunToolkit; import test.java.awt.regtesthelpers.Util; public class WindowInitialFocusTest extends Applet { @@ -41,7 +40,7 @@ Window window = new Window(frame); Button button = new Button("button"); AtomicBoolean focused = new AtomicBoolean(false); - SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit(); + Robot robot; public static void main(String[] args) { WindowInitialFocusTest app = new WindowInitialFocusTest(); @@ -75,12 +74,18 @@ }}); frame.setVisible(true); - toolkit.realSync(); + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } + robot.waitForIdle(); // Test 1. Show the window, check that it become focused. window.setVisible(true); - toolkit.realSync(); + robot.waitForIdle(); if (!Util.waitForCondition(focused, 2000L)) { throw new TestFailedException("the window didn't get focused on its showing!"); @@ -89,13 +94,13 @@ // Test 2. Show unfocusable window, check that it doesn't become focused. window.setVisible(false); - toolkit.realSync(); + robot.waitForIdle(); window.setFocusableWindowState(false); focused.set(false); window.setVisible(true); - toolkit.realSync(); + robot.waitForIdle(); if (Util.waitForCondition(focused, 2000L)) { throw new TestFailedException("the unfocusable window got focused on its showing!"); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java --- a/jdk/test/java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -30,11 +30,8 @@ import java.awt.*; -import sun.awt.SunToolkit; - public class ExceptionOnSetExtendedStateTest { private static final int[] frameStates = { Frame.NORMAL, Frame.ICONIFIED, Frame.MAXIMIZED_BOTH }; - private static final SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit(); private static boolean validatePlatform() { String osName = System.getProperty("os.name"); @@ -53,7 +50,13 @@ frame.setSize(200, 200); frame.setUndecorated(!decoratedFrame); frame.setVisible(true); - toolkit.realSync(); + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } frame.setExtendedState(oldState); sleep(1000); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Frame/FrameSize/TestFrameSize.java --- a/jdk/test/java/awt/Frame/FrameSize/TestFrameSize.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Frame/FrameSize/TestFrameSize.java Wed Dec 03 19:28:35 2014 +0000 @@ -77,7 +77,13 @@ mainWindow.setVisible(true); - ((sun.awt.SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure."); + } Dimension clientSize2 = getClientSize(mainWindow); System.out.println("Client size after showing: " + clientSize2); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Frame/MaximizedByPlatform/MaximizedByPlatform.java --- a/jdk/test/java/awt/Frame/MaximizedByPlatform/MaximizedByPlatform.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Frame/MaximizedByPlatform/MaximizedByPlatform.java Wed Dec 03 19:28:35 2014 +0000 @@ -25,11 +25,12 @@ * @bug 8026143 * @summary [macosx] Maximized state could be inconsistent between peer and frame * @author Petr Pchelko + * @library ../../../../lib/testlibrary + * @build jdk.testlibrary.OSInfo * @run main MaximizedByPlatform */ -import sun.awt.OSInfo; -import sun.awt.SunToolkit; +import jdk.testlibrary.OSInfo; import java.awt.*; @@ -43,6 +44,13 @@ return; } + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } availableScreenBounds = getAvailableScreenBounds(); // Test 1. The maximized state is set in setBounds @@ -51,12 +59,12 @@ frame.setBounds(100, 100, 100, 100); frame.setVisible(true); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); frame.setBounds(availableScreenBounds.x, availableScreenBounds.y, availableScreenBounds.width, availableScreenBounds.height); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); if (frame.getExtendedState() != Frame.MAXIMIZED_BOTH) { throw new RuntimeException("Maximized state was not set for frame in setBounds"); @@ -73,7 +81,7 @@ availableScreenBounds.width + 100, availableScreenBounds.height); frame.setVisible(true); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); if (frame.getExtendedState() != Frame.MAXIMIZED_BOTH) { throw new RuntimeException("Maximized state was not set for frame in setVisible"); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Frame/MaximizedToMaximized/MaximizedToMaximized.java --- a/jdk/test/java/awt/Frame/MaximizedToMaximized/MaximizedToMaximized.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Frame/MaximizedToMaximized/MaximizedToMaximized.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,7 +28,7 @@ import java.awt.Insets; import java.awt.Rectangle; import java.awt.Toolkit; -import sun.awt.SunToolkit; +import java.awt.Robot; /** * @test @@ -65,7 +65,8 @@ Rectangle frameBounds = frame.getBounds(); frame.setExtendedState(Frame.MAXIMIZED_BOTH); - ((SunToolkit) toolkit).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); Rectangle maximizedFrameBounds = frame.getBounds(); if (maximizedFrameBounds.width < frameBounds.width diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Frame/SlideNotResizableTest/SlideNotResizableTest.java --- a/jdk/test/java/awt/Frame/SlideNotResizableTest/SlideNotResizableTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Frame/SlideNotResizableTest/SlideNotResizableTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,8 +21,6 @@ * questions. */ -import sun.awt.SunToolkit; - import java.awt.*; import java.awt.Dimension; import java.awt.Point; @@ -62,8 +60,9 @@ } } - private static void sync() throws InterruptedException { - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + private static void sync() throws Exception { + Robot robot = new Robot(); + robot.waitForIdle(); Thread.sleep(1000); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java --- a/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Wed Dec 03 19:28:35 2014 +0000 @@ -34,10 +34,17 @@ import static java.awt.GraphicsDevice.WindowTranslucency.*; -import sun.awt.SunToolkit; public class TranslucentWindow { public static void main(String args[]) { + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); @@ -47,10 +54,10 @@ // First, check it can be made fullscreen window without any effects applied gd.setFullScreenWindow(f); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); gd.setFullScreenWindow(null); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); // Second, check if it applying any effects doesn't prevent the window // from going into the fullscreen mode @@ -64,7 +71,7 @@ f.setBackground(new Color(0, 0, 0, 128)); } gd.setFullScreenWindow(f); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); // Third, make sure all the effects are unset when entering the fullscreen mode if (f.getShape() != null) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java --- a/jdk/test/java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java Wed Dec 03 19:28:35 2014 +0000 @@ -27,16 +27,17 @@ import java.awt.Frame; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; -import java.awt.Toolkit; - -import sun.awt.SunToolkit; /** * @test * @bug 8019587 * @author Sergey Bylokhov + * @library ../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main IncorrectDisplayModeExitFullscreen */ public class IncorrectDisplayModeExitFullscreen { + static ExtendedRobot robot; public static void main(final String[] args) { @@ -64,6 +65,13 @@ return; } + try { + robot = new ExtendedRobot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } + final Frame frame = new Frame(); frame.setBackground(Color.GREEN); frame.setUndecorated(true); @@ -85,10 +93,6 @@ } } private static void sleep() { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); - try { - Thread.sleep(1500); - } catch (InterruptedException ignored) { - } + robot.waitForIdle(1500); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java --- a/jdk/test/java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -71,7 +71,14 @@ frame.pack(); frame.setVisible(true); - ((sun.awt.SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + Robot robot; + try { + robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } Dimension minSize = jtf.getMinimumSize(); if ( minSize.width + customIpadx != jtf.getSize().width || diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/List/ListPeer/R2303044ListSelection.java --- a/jdk/test/java/awt/List/ListPeer/R2303044ListSelection.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/List/ListPeer/R2303044ListSelection.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,12 +21,10 @@ * questions. */ -import sun.awt.SunToolkit; - import java.awt.Frame; import java.awt.HeadlessException; import java.awt.List; -import java.awt.Toolkit; +import java.awt.Robot; /** * @test @@ -57,9 +55,11 @@ private static void sleep() { try { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); Thread.sleep(1000); - } catch (final InterruptedException ignored) { + } catch (final Exception ignored) { + ignored.printStackTrace(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/List/SingleModeDeselect/SingleModeDeselect.java --- a/jdk/test/java/awt/List/SingleModeDeselect/SingleModeDeselect.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/List/SingleModeDeselect/SingleModeDeselect.java Wed Dec 03 19:28:35 2014 +0000 @@ -30,7 +30,6 @@ */ import java.awt.*; -import sun.awt.SunToolkit; public class SingleModeDeselect { @@ -50,7 +49,13 @@ list.select(0); list.deselect(1); - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } if (list.getSelectedIndex() != 0){ throw new RuntimeException("Test failed: List.getSelectedIndex() returns "+list.getSelectedIndex()); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Paint/ExposeOnEDT.java --- a/jdk/test/java/awt/Paint/ExposeOnEDT.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Paint/ExposeOnEDT.java Wed Dec 03 19:28:35 2014 +0000 @@ -22,18 +22,19 @@ */ -import sun.awt.SunToolkit; - import java.awt.*; /** * @test * @bug 7090424 * @author Sergey Bylokhov + * @library ../../../lib/testlibrary/ + * @build ExtendedRobot * @run main ExposeOnEDT */ public final class ExposeOnEDT { + private static ExtendedRobot robot = null; private static final Button buttonStub = new Button() { @Override public void paint(final Graphics g) { @@ -275,11 +276,15 @@ } private static void sleep() { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); - try { - Thread.sleep(1000L); - } catch (InterruptedException ignored) { + if(robot == null) { + try { + robot = new ExtendedRobot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } } + robot.waitForIdle(1000); } private static void fail(final String message) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java --- a/jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java Wed Dec 03 19:28:35 2014 +0000 @@ -26,12 +26,13 @@ import java.awt.ScrollPane; import java.awt.Toolkit; -import sun.awt.SunToolkit; - /** * @test * @bug 7124213 * @author Sergey Bylokhov + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main ScrollPanePreferredSize */ public final class ScrollPanePreferredSize { @@ -54,10 +55,12 @@ } private static void sleep() { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); try { - Thread.sleep(500L); - } catch (InterruptedException ignored) { + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(500); + } catch (Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/TextArea/DisposeTest/TestDispose.java --- a/jdk/test/java/awt/TextArea/DisposeTest/TestDispose.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/TextArea/DisposeTest/TestDispose.java Wed Dec 03 19:28:35 2014 +0000 @@ -35,14 +35,12 @@ import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; -import java.awt.Toolkit; +import java.awt.Robot; import java.lang.reflect.InvocationTargetException; import javax.swing.JFrame; import javax.swing.SwingUtilities; -import sun.awt.SunToolkit; - public class TestDispose { public static Frame frame = null; @@ -51,7 +49,14 @@ public void testDispose() throws InvocationTargetException, InterruptedException { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } + SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -69,7 +74,7 @@ frame.setVisible(true); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -77,7 +82,7 @@ frame.dispose(); } }); - toolkit.realSync(); + robot.waitForIdle(); } public static void main(String[] args) throws Exception{ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java --- a/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java Wed Dec 03 19:28:35 2014 +0000 @@ -34,7 +34,7 @@ import java.awt.FlowLayout; import java.awt.TextArea; -import java.awt.Toolkit; +import java.awt.Robot; import java.lang.reflect.Field; import javax.swing.JFrame; @@ -42,7 +42,6 @@ import javax.swing.SwingUtilities; import javax.swing.text.DefaultCaret; -import sun.awt.SunToolkit; public class bug7129742 { @@ -51,7 +50,7 @@ public static boolean fastreturn = false; public static void main(String[] args) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -88,7 +87,7 @@ } } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java --- a/jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java Wed Dec 03 19:28:35 2014 +0000 @@ -24,9 +24,8 @@ import java.awt.Dimension; import java.awt.Frame; import java.awt.TextArea; -import java.awt.Toolkit; +import java.awt.Robot; -import sun.awt.SunToolkit; /** * @test @@ -55,10 +54,12 @@ } private static void sleep() { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); try { + Robot robot = new Robot(); + robot.waitForIdle(); Thread.sleep(500L); - } catch (InterruptedException ignored) { + } catch (Exception ignored) { + ignored.printStackTrace(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/TextField/DisposeTest/TestDispose.java --- a/jdk/test/java/awt/TextField/DisposeTest/TestDispose.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/TextField/DisposeTest/TestDispose.java Wed Dec 03 19:28:35 2014 +0000 @@ -35,14 +35,12 @@ import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextField; -import java.awt.Toolkit; +import java.awt.Robot; import java.lang.reflect.InvocationTargetException; import javax.swing.JFrame; import javax.swing.SwingUtilities; -import sun.awt.SunToolkit; - public class TestDispose { public static Frame frame = null; @@ -51,7 +49,13 @@ public void testDispose() throws InvocationTargetException, InterruptedException { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -69,7 +73,7 @@ frame.setVisible(true); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -77,7 +81,7 @@ frame.dispose(); } }); - toolkit.realSync(); + robot.waitForIdle(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java --- a/jdk/test/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -26,12 +26,13 @@ @bug 8007220 @summary Reference to the popup leaks after the TrayIcon is removed @author Petr Pchelko + @library ../../../../lib/testlibrary/ + @build ExtendedRobot @run main/othervm -Xmx50m PopupMenuLeakTest */ import java.awt.*; import javax.swing.SwingUtilities; -import sun.awt.SunToolkit; import java.awt.image.BufferedImage; import java.lang.ref.WeakReference; @@ -42,8 +43,10 @@ static final AtomicReference> iconWeakReference = new AtomicReference<>(); static final AtomicReference> popupWeakReference = new AtomicReference<>(); + static ExtendedRobot robot; public static void main(String[] args) throws Exception { + robot = new ExtendedRobot(); SwingUtilities.invokeAndWait(PopupMenuLeakTest::createSystemTrayIcon); sleep(); // To make the test automatic we explicitly call addNotify on a popup to create the peer @@ -141,9 +144,6 @@ } private static void sleep() { - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); - try { - Thread.sleep(100); - } catch (InterruptedException ignored) { } + robot.waitForIdle(100); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/8027025/Test8027025.java --- a/jdk/test/java/awt/Window/8027025/Test8027025.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Window/8027025/Test8027025.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,8 +28,6 @@ * @run main Test8027025 */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; import java.util.concurrent.atomic.AtomicReference; @@ -49,7 +47,8 @@ window.setVisible(true); }); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); AtomicReference point = new AtomicReference<>(); SwingUtilities.invokeAndWait(() -> point.set(window.getLocationOnScreen())); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/AlwaysOnTop/AlwaysOnTopFieldTest.java --- a/jdk/test/java/awt/Window/AlwaysOnTop/AlwaysOnTopFieldTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Window/AlwaysOnTop/AlwaysOnTopFieldTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -22,9 +22,8 @@ */ import java.awt.Dialog; import java.awt.Frame; -import java.awt.Toolkit; +import java.awt.Robot; import java.awt.Window; -import sun.awt.SunToolkit; /** * @test * @bug 7081594 @@ -35,19 +34,25 @@ public class AlwaysOnTopFieldTest { public static void main(String[] args) { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } Window window = new Frame("Window 1"); window.setSize(200, 200); window.setAlwaysOnTop(true); window.setVisible(true); - toolkit.realSync(); + robot.waitForIdle(); Dialog dialog = new Dialog(window, "Owned dialog 1"); dialog.setSize(200, 200); dialog.setLocation(100, 100); dialog.setVisible(true); - toolkit.realSync(); + robot.waitForIdle(); try { if (!window.isAlwaysOnTop()) { @@ -64,17 +69,17 @@ window = new Frame("Window 2"); window.setSize(200, 200); window.setVisible(true); - toolkit.realSync(); + robot.waitForIdle(); dialog = new Dialog(window, "Owned dialog 2"); dialog.setSize(200, 200); dialog.setLocation(100, 100); dialog.setVisible(true); - toolkit.realSync(); + robot.waitForIdle(); window.setAlwaysOnTop(true); - toolkit.realSync(); + robot.waitForIdle(); try { if (!window.isAlwaysOnTop()) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/AlwaysOnTop/SyncAlwaysOnTopFieldTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Window/AlwaysOnTop/SyncAlwaysOnTopFieldTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Window; + +/** + * @test + * @bug 8064468 + * @author Alexander Scherbatiy + * @summary ownedWindowList access requires synchronization in + * Window.setAlwaysOnTop() method + * @run main SyncAlwaysOnTopFieldTest + */ +public class SyncAlwaysOnTopFieldTest { + + private static final int WINDOWS_COUNT = 200; + private static final int STEPS_COUNT = 20; + + public static void main(String[] args) throws Exception { + final Window rootWindow = createWindow(null); + + new Thread(() -> { + for (int i = 0; i < WINDOWS_COUNT; i++) { + createWindow(rootWindow); + } + }).start(); + + boolean alwaysOnTop = true; + for (int i = 0; i < STEPS_COUNT; i++) { + Thread.sleep(10); + rootWindow.setAlwaysOnTop(alwaysOnTop); + alwaysOnTop = !alwaysOnTop; + } + } + + private static Window createWindow(Window parent) { + Window window = new Window(parent); + window.setSize(200, 200); + window.setVisible(true); + return window; + } +} \ No newline at end of file diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/GetWindowsTest/GetWindowsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Window/GetWindowsTest/GetWindowsTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 6322270 + @summary Test for new API introduced in the fix for 6322270: Window.getWindows(), +Window.getOwnerlessWindows() and Frame.getFrames() + @author artem.ananiev: area=awt.toplevel + @run main GetWindowsTest +*/ + +import java.awt.*; +import java.awt.event.*; + +import java.util.*; + +public class GetWindowsTest +{ + private static Vector frames = new Vector(); + private static Vector windows = new Vector(); + private static Vector ownerless = new Vector(); + + private static void init() + { + Frame f1 = new Frame("F1"); + f1.setBounds(100, 100, 100, 100); + f1.setVisible(true); + addToWindowsList(f1); + + Dialog d1 = new Dialog(f1, "D1", Dialog.ModalityType.MODELESS); + d1.setBounds(120, 120, 100, 100); + d1.setVisible(true); + addToWindowsList(d1); + + Window w1 = new Window(d1); + w1.setBounds(140, 140, 100, 100); + w1.setVisible(true); + addToWindowsList(w1); + + Frame f2 = new Frame("F2"); + f2.setBounds(300, 100, 100, 100); + f2.setVisible(true); + addToWindowsList(f2); + + Window w2 = new Window(f2); + w2.setBounds(320, 120, 100, 100); + w2.setVisible(true); + addToWindowsList(w2); + + Dialog d2 = new Dialog(f2, "D2", Dialog.ModalityType.MODELESS); + d2.setBounds(340, 140, 100, 100); + d2.setVisible(true); + addToWindowsList(d2); + + Dialog d3 = new Dialog((Frame)null, "D3", Dialog.ModalityType.MODELESS); + d3.setBounds(500, 100, 100, 100); + d3.setVisible(true); + addToWindowsList(d3); + + Dialog d4 = new Dialog(d3, "D4", Dialog.ModalityType.MODELESS); + d4.setBounds(520, 120, 100, 100); + d4.setVisible(true); + addToWindowsList(d4); + + Window w3 = new Window((Frame)null); + w3.setBounds(700, 100, 100, 100); + w3.setVisible(true); + addToWindowsList(w3); + + Window w4 = new Window(w3); + w4.setBounds(720, 120, 100, 100); + w4.setVisible(true); + addToWindowsList(w4); + + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected failure"); + } + + Frame[] fl = Frame.getFrames(); + Vector framesToCheck = new Vector(); + for (Frame f : fl) + { + framesToCheck.add(f); + } + checkWindowsList(frames, framesToCheck, "Frame.getFrames()"); + + Window[] wl = Window.getWindows(); + Vector windowsToCheck = new Vector(); + for (Window w : wl) + { + windowsToCheck.add(w); + } + checkWindowsList(windows, windowsToCheck, "Window.getWindows()"); + + Window[] ol = Window.getOwnerlessWindows(); + Vector ownerlessToCheck = new Vector(); + for (Window o : ol) + { + ownerlessToCheck.add(o); + } + checkWindowsList(ownerless, ownerlessToCheck, "Window.getOwnerlessWindows()"); + + GetWindowsTest.pass(); + } + + private static void addToWindowsList(Window w) + { + if (w instanceof Frame) + { + frames.add(w); + } + windows.add(w); + if (w.getOwner() == null) + { + ownerless.add(w); + } + } + + private static void checkWindowsList(Vector wl1, Vector wl2, String methodName) + { + if ((wl1.size() != wl2.size()) || + !wl1.containsAll(wl2) || + !wl2.containsAll(wl1)) + { + fail("Test FAILED: method " + methodName + " returns incorrect list of windows"); + } + } + +/***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + } + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + } + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + } +} + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.html Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,23 @@ + + + + + + + +

    HandleWindowDestroyTest
    Bug ID: 6260648

    + +

    This is an AUTOMATIC test, simply wait for completion

    + + + + + diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + test + @bug 6260648 + @summary Tests that WINDOW_DESTROY event can be handled by overriding handleEvent(). Also, +tests that handleEvent() is not called by AWT if any listener is added to the component +(i. e. when post-1.1 events schema is used) + @author artem.ananiev: area=awt.event + @run applet HandleWindowDestroyTest.html +*/ + +import java.applet.*; + +import java.awt.*; +import java.awt.event.*; + +public class HandleWindowDestroyTest extends Applet +{ + private volatile boolean handleEventCalled; + + public void start () + { + setSize (200,200); + setVisible(true); + validate(); + + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } + + Frame f = new Frame("Frame") + { + public boolean handleEvent(Event e) + { + if (e.id == Event.WINDOW_DESTROY) + { + handleEventCalled = true; + } + return super.handleEvent(e); + } + }; + f.setBounds(100, 100, 100, 100); + f.setVisible(true); + robot.waitForIdle(); + + handleEventCalled = false; + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new WindowEvent(f, Event.WINDOW_DESTROY)); + robot.waitForIdle(); + + if (!handleEventCalled) + { + throw new RuntimeException("Test FAILED: handleEvent() is not called"); + } + + f.addWindowListener(new WindowAdapter() + { + }); + + handleEventCalled = false; + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new WindowEvent(f, Event.WINDOW_DESTROY)); + robot.waitForIdle(); + + if (handleEventCalled) + { + throw new RuntimeException("Test FAILED: handleEvent() is called event with a listener added"); + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/Window/OwnedWindowsSerialization/OwnedWindowsSerialization.java --- a/jdk/test/java/awt/Window/OwnedWindowsSerialization/OwnedWindowsSerialization.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/Window/OwnedWindowsSerialization/OwnedWindowsSerialization.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,8 +21,6 @@ * questions. */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; import java.io.ByteArrayInputStream; @@ -54,7 +52,8 @@ subDialog = new Dialog(dialog, SUBDIALOG_LABEL); }); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); if (!topFrame.isAlwaysOnTop() || !dialog.isAlwaysOnTop() || !subDialog.isAlwaysOnTop()) { throw new RuntimeException("TEST FAILED: AlwaysOnTop was not set properly"); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/event/ComponentEvent/MovedResizedTwiceTest/MovedResizedTwiceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/event/ComponentEvent/MovedResizedTwiceTest/MovedResizedTwiceTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 5025858 + @summary Tests that after programmatically moving or resizing a component, +corresponding ComponentEvents are generated only once + @author artem.ananiev: area=awt.event + @run main/manual MovedResizedTwiceTest +*/ + +import java.awt.*; +import java.awt.event.*; + +/* + IMPORTANT: this test is made manual as some window managers may generate + strange events and that would lead to the test to fail. However, on most + popular platforms (windows, linux w/ KDE or GNOME, solaris w/ CDE or + GNOME) it usually passes successfully. +*/ + +public class MovedResizedTwiceTest +{ + private static volatile int componentMovedCount; + private static volatile int componentResizedCount; + + private static volatile int rightX, rightY; + + private static volatile boolean failed = false; + + private static void init() + { + componentMovedCount = componentResizedCount = 0; + + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Cannot create Robot: failure"); + } + + Frame f = new Frame("Frame F"); + f.setLayout(null); + f.setBounds(100, 100, 100, 100); + f.add(new Button("Button")); + + f.setVisible(true); + robot.waitForIdle(); + + ComponentListener cl = new ComponentAdapter() + { + public void componentMoved(ComponentEvent e) + { + componentMovedCount++; + Component c = (Component)e.getSource(); + if (!(c instanceof Window)) + { + return; + } + Point p = c.getLocationOnScreen(); + if ((p.x != rightX) || (p.y != rightY)) + { + System.err.println("Error: wrong location on screen after COMPONENT_MOVED"); + System.err.println("Location on screen is (" + p.x + ", " + p.y + ") against right location (" + rightX + ", " + rightY + ")"); + failed = true; + } + } + public void componentResized(ComponentEvent e) + { + componentResizedCount++; + } + }; + + f.addComponentListener(cl); + + componentResizedCount = componentMovedCount = 0; + rightX = 100; + rightY = 100; + f.setSize(200, 200); + robot.waitForIdle(); + checkResized("setSize", f); + + componentResizedCount = componentMovedCount = 0; + rightX = 200; + rightY = 200; + f.setLocation(200, 200); + robot.waitForIdle(); + checkMoved("setLocation", f); + + componentResizedCount = componentMovedCount = 0; + rightX = 150; + rightY = 150; + f.setBounds(150, 150, 100, 100); + robot.waitForIdle(); + checkResized("setBounds", f); + checkMoved("setBounds", f); + + Button b = new Button("B"); + b.setBounds(10, 10, 40, 40); + f.add(b); + robot.waitForIdle(); + + b.addComponentListener(cl); + + componentResizedCount = componentMovedCount = 0; + b.setBounds(20, 20, 50, 50); + robot.waitForIdle(); + checkMoved("setBounds", b); + checkResized("setBounds", b); + f.remove(b); + + Component c = new Component() {}; + c.setBounds(10, 10, 40, 40); + f.add(c); + robot.waitForIdle(); + + c.addComponentListener(cl); + + componentResizedCount = componentMovedCount = 0; + c.setBounds(20, 20, 50, 50); + robot.waitForIdle(); + checkMoved("setBounds", c); + checkResized("setBounds", c); + f.remove(c); + + if (failed) + { + MovedResizedTwiceTest.fail("Test FAILED"); + } + else + { + MovedResizedTwiceTest.pass(); + } + } + + private static void checkResized(String methodName, Component c) + { + String failMessage = null; + if (componentResizedCount == 1) + { + return; + } + else if (componentResizedCount == 0) + { + failMessage = "Test FAILED: COMPONENT_RESIZED is not sent after call to " + methodName + "()"; + } + else + { + failMessage = "Test FAILED: COMPONENT_RESIZED is sent " + componentResizedCount + " + times after call to " + methodName + "()"; + } + System.err.println("Failed component: " + c); + MovedResizedTwiceTest.fail(failMessage); + } + + private static void checkMoved(String methodName, Component c) + { + String failMessage = null; + if (componentMovedCount == 1) + { + return; + } + if (componentMovedCount == 0) + { + failMessage = "Test FAILED: COMPONENT_MOVED is not sent after call to " + methodName + "()"; + } + else + { + failMessage = "Test FAILED: COMPONENT_MOVED is sent " + componentMovedCount + " times after call to " + methodName + "()"; + } + System.err.println("Failed component: " + c); + MovedResizedTwiceTest.fail(failMessage); + } + + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch (TestPassedException e) + { + return; + } + + try + { + Thread.sleep(sleepTime); + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + if (!testGeneratedInterrupt) + { + throw e; + } + + testGeneratedInterrupt = false; + + if (!theTestPassed) + { + throw new RuntimeException( failureMessage ); + } + } + } + + public static synchronized void setTimeoutTo(int seconds) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + if (mainThread == Thread.currentThread()) + { + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + } + + public static synchronized void fail() + { + fail("it just plain failed! :-)"); + } + + public static synchronized void fail(String whyFailed) + { + if (mainThread == Thread.currentThread()) + { + throw new RuntimeException(whyFailed); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + } +} + +class TestPassedException extends RuntimeException +{ +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/event/TextEvent/TextEventSequenceTest/TextEventSequenceTest.java --- a/jdk/test/java/awt/event/TextEvent/TextEventSequenceTest/TextEventSequenceTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/event/TextEvent/TextEventSequenceTest/TextEventSequenceTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -30,7 +30,6 @@ */ import java.awt.*; import java.awt.event.*; -import sun.awt.SunToolkit; public class TextEventSequenceTest { @@ -48,43 +47,50 @@ } private static void test(String test) { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } createAndShowGUI(test); - toolkit.realSync(); + robot.waitForIdle(); initCounts(); t.setText("Hello "); - toolkit.realSync(); + robot.waitForIdle(); t.append("World! !"); - toolkit.realSync(); + robot.waitForIdle(); t.insert("from Roger Pham", 13); - toolkit.realSync(); + robot.waitForIdle(); t.replaceRange("Java Duke", 18, 28); - toolkit.realSync(); + robot.waitForIdle(); checkCounts(0, 4); initCounts(); t.setText(""); - toolkit.realSync(); + robot.waitForIdle(); t.setText(""); - toolkit.realSync(); + robot.waitForIdle(); t.setText(""); - toolkit.realSync(); + robot.waitForIdle(); checkCounts(1, 0); initCounts(); tf.setText("Hello There!"); - toolkit.realSync(); + robot.waitForIdle(); checkCounts(0, 1); initCounts(); tf.setText(""); - toolkit.realSync(); + robot.waitForIdle(); tf.setText(""); - toolkit.realSync(); + robot.waitForIdle(); tf.setText(""); - toolkit.realSync(); + robot.waitForIdle(); checkCounts(1, 0); f.dispose(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/geom/AffineTransform/TestInvertMethods.java --- a/jdk/test/java/awt/geom/AffineTransform/TestInvertMethods.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/geom/AffineTransform/TestInvertMethods.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /** * @test - * @bug 4987374 + * @bug 4987374 8062163 * @summary Unit test for inversion methods: * * AffineTransform.createInverse(); @@ -188,6 +188,8 @@ double m11 = at.getScaleY(); double m02 = at.getTranslateX(); double m12 = at.getTranslateY(); + if (Math.abs(m00-1.0) < 1E-10) m00 = 1.0; + if (Math.abs(m11-1.0) < 1E-10) m11 = 1.0; if (Math.abs(m02) < 1E-10) m02 = 0.0; if (Math.abs(m12) < 1E-10) m12 = 0.0; if (Math.abs(m01) < 1E-15) m01 = 0.0; @@ -273,7 +275,7 @@ int inc = full ? 10 : 45; for (int i = -720; i <= 720; i += inc) { AffineTransform at2 = new AffineTransform(init); - at2.rotate(Math.toRadians(i)); + at2.rotate(i / 180.0 * Math.PI); if (verbose) System.out.println("*Rotate("+i+") = "+at2); next.test(at2, full); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java --- a/jdk/test/java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -26,26 +26,25 @@ @bug 8041490 @summary tests that the WarningWindow's surface is invalidated on dispose @author Petr Pchelko - @run main/othervm WarningWindowDisposeCrashTest + @run main/othervm/policy=policy -Djava.security.manager WarningWindowDisposeCrashTest */ -import sun.applet.AppletSecurity; -import sun.awt.SunToolkit; import java.awt.*; public class WarningWindowDisposeCrashTest { public static void main(String[] args) throws Exception { - System.setSecurityManager(new AppletSecurity() { - @Override - public void checkPackageAccess (String s){ - } - }); - Frame f = new Frame(); f.setVisible(true); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + Robot robot; + try{ + robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Cannot create Robot"); + } Thread.sleep(1000); f.dispose(); // If the bug is present VM could crash after this call diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeTest.java --- a/jdk/test/java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,12 +31,11 @@ @run main WarningWindowDisposeTest */ -import sun.applet.AppletSecurity; -import sun.awt.SunToolkit; - import java.awt.*; import java.awt.Toolkit; import java.util.concurrent.atomic.AtomicBoolean; +import java.security.Permission; +import java.io.File; import test.java.awt.regtesthelpers.process.ProcessCommunicator; import test.java.awt.regtesthelpers.process.ProcessResults; @@ -57,7 +56,9 @@ }, "TimeoutThread").start(); String classpath = System.getProperty("java.class.path"); - ProcessResults pres = ProcessCommunicator.executeChildProcess(TestApplication.class, classpath, new String[0]); + String policyPath = System.getProperty("test.src")+File.separatorChar+"policy"; + System.out.println("policyPath in main: "+policyPath); + ProcessResults pres = ProcessCommunicator.executeChildProcess(TestApplication.class, classpath+" -Djava.security.manager -Djava.security.policy="+policyPath, new String[0]); passed.set(true); if (pres.getStdErr() != null && pres.getStdErr().length() > 0) { System.err.println("========= Child VM System.err ========"); @@ -74,14 +75,16 @@ public static class TestApplication { public static void main(String[] args) throws Exception { - System.setSecurityManager(new AppletSecurity() { - @Override - public void checkPackageAccess (String s){ - } - }); + Robot robot; + try{ + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Cannot create Robot"); + } Frame f = new Frame("Test frame"); f.setVisible(true); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); Thread.sleep(500); f.setVisible(false); f.dispose(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/awt/security/WarningWindowDisposeTest/policy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/security/WarningWindowDisposeTest/policy Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,3 @@ +grant { + permission java.awt.AWTPermission "createRobot"; +}; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/io/readBytes/MemoryLeak.java --- a/jdk/test/java/io/readBytes/MemoryLeak.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/io/readBytes/MemoryLeak.java Wed Dec 03 19:28:35 2014 +0000 @@ -40,7 +40,7 @@ try { s.read(bytes); throw new Error("expected IOException"); - } catch (IOException _) { + } catch (IOException expected) { /* OK */ } catch (OutOfMemoryError oome) { System.out.printf("Got OutOfMemoryError, i=%d%n", i); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/Class/TypeCheckMicroBenchmark.java --- a/jdk/test/java/lang/Class/TypeCheckMicroBenchmark.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/Class/TypeCheckMicroBenchmark.java Wed Dec 03 19:28:35 2014 +0000 @@ -182,7 +182,7 @@ for (int i = 0; i < iterations; i++) { for (Object x : list.toArray()) { try { a[0] = x; } - catch (ArrayStoreException _) { + catch (ArrayStoreException unused) { throw new ClassCastException(); }}}}}, new Job("write into dynamic array") { void work() { for (int i = 0; i < iterations; i++) { @@ -190,7 +190,7 @@ Object[] a = (Object[]) java.lang.reflect.Array.newInstance(klazz, 1); try { a[0] = x; } - catch (ArrayStoreException _) { + catch (ArrayStoreException unused) { throw new ClassCastException(); }}}}} }; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/Class/getDeclaredField/ClassDeclaredFieldsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/Class/getDeclaredField/ClassDeclaredFieldsTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.reflect.Field; +import java.lang.reflect.ReflectPermission; +import java.security.CodeSource; +import java.security.Permission; +import java.security.PermissionCollection; +import java.security.Permissions; +import java.security.Policy; +import java.security.ProtectionDomain; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * @test + * @bug 8065552 + * @summary test that all fields returned by getDeclaredFields() can be + * set accessible if the right permission is granted; this test + * also verifies that Class.classLoader final private field is + * hidden from reflection access. + * @run main/othervm ClassDeclaredFieldsTest UNSECURE + * @run main/othervm ClassDeclaredFieldsTest SECURE + * + * @author danielfuchs + */ +public class ClassDeclaredFieldsTest { + + // Test with or without a security manager + public static enum TestCase { + UNSECURE, SECURE; + public void run() throws Exception { + System.out.println("Running test case: " + name()); + Configure.setUp(this); + test(this); + } + } + /** + * @param args the command line arguments + */ + public static void main(String[] args) throws Exception { + System.out.println(System.getProperty("java.version")); + if (args == null || args.length == 0) { + args = new String[] { "SECURE" }; + } else if (args.length != 1) { + throw new IllegalArgumentException("Only one arg expected: " + + Arrays.asList(args)); + } + TestCase.valueOf(args[0]).run(); + } + + static void test(TestCase test) { + for (Field f : Class.class.getDeclaredFields()) { + f.setAccessible(true); + System.out.println("Field "+f.getName()+" is now accessible."); + if (f.getName().equals("classLoader")) { + throw new RuntimeException("Found "+f.getName()+" field!"); + } + } + try { + Class.class.getDeclaredField("classLoader"); + throw new RuntimeException("Expected NoSuchFieldException for" + + " 'classLoader' field not raised"); + } catch(NoSuchFieldException x) { + System.out.println("Got expected exception: " + x); + } + System.out.println("Passed "+test); + } + + // A helper class to configure the security manager for the test, + // and bypass it when needed. + static class Configure { + static Policy policy = null; + static final ThreadLocal allowAll = new ThreadLocal() { + @Override + protected AtomicBoolean initialValue() { + return new AtomicBoolean(false); + } + }; + static void setUp(TestCase test) { + switch (test) { + case SECURE: + if (policy == null && System.getSecurityManager() != null) { + throw new IllegalStateException("SecurityManager already set"); + } else if (policy == null) { + policy = new SimplePolicy(TestCase.SECURE, allowAll); + Policy.setPolicy(policy); + System.setSecurityManager(new SecurityManager()); + } + if (System.getSecurityManager() == null) { + throw new IllegalStateException("No SecurityManager."); + } + if (policy == null) { + throw new IllegalStateException("policy not configured"); + } + break; + case UNSECURE: + if (System.getSecurityManager() != null) { + throw new IllegalStateException("SecurityManager already set"); + } + break; + default: + throw new InternalError("No such testcase: " + test); + } + } + static void doPrivileged(Runnable run) { + allowAll.get().set(true); + try { + run.run(); + } finally { + allowAll.get().set(false); + } + } + } + + // A Helper class to build a set of permissions. + final static class PermissionsBuilder { + final Permissions perms; + public PermissionsBuilder() { + this(new Permissions()); + } + public PermissionsBuilder(Permissions perms) { + this.perms = perms; + } + public PermissionsBuilder add(Permission p) { + perms.add(p); + return this; + } + public PermissionsBuilder addAll(PermissionCollection col) { + if (col != null) { + for (Enumeration e = col.elements(); e.hasMoreElements(); ) { + perms.add(e.nextElement()); + } + } + return this; + } + public Permissions toPermissions() { + final PermissionsBuilder builder = new PermissionsBuilder(); + builder.addAll(perms); + return builder.perms; + } + } + + // Policy for the test... + public static class SimplePolicy extends Policy { + + final Permissions permissions; + final Permissions allPermissions; + final ThreadLocal allowAll; // actually: this should be in a thread locale + public SimplePolicy(TestCase test, ThreadLocal allowAll) { + this.allowAll = allowAll; + // we don't actually need any permission to create our + // FileHandlers because we're passing invalid parameters + // which will make the creation fail... + permissions = new Permissions(); + permissions.add(new RuntimePermission("accessDeclaredMembers")); + permissions.add(new ReflectPermission("suppressAccessChecks")); + + // these are used for configuring the test itself... + allPermissions = new Permissions(); + allPermissions.add(new java.security.AllPermission()); + + } + + @Override + public boolean implies(ProtectionDomain domain, Permission permission) { + if (allowAll.get().get()) return allPermissions.implies(permission); + return permissions.implies(permission); + } + + @Override + public PermissionCollection getPermissions(CodeSource codesource) { + return new PermissionsBuilder().addAll(allowAll.get().get() + ? allPermissions : permissions).toPermissions(); + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain domain) { + return new PermissionsBuilder().addAll(allowAll.get().get() + ? allPermissions : permissions).toPermissions(); + } + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/Class/getFields/Sanity.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/Class/getFields/Sanity.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,168 @@ +/* + * Copyright 2014 Google, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8063147 + * @summary Tests for Class.getFields(). + * @run testng Sanity + */ + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.testng.annotations.Test; +import static org.testng.Assert.*; + +public class Sanity { + public interface EmptyInterface {} + class EmptyClass {} + interface BI1 { + public int i = 1; + int j = 2; + } + interface BI2 { + int k = 1; + } + public interface DI extends BI1, BI2, EmptyInterface { + int m = 5; + } + interface DDI extends DI { + int n = 6; + } + + public class D extends EmptyClass { + public int publicDField; + protected int protectedDField; + private int privateDField; + } + + class DD extends D { + public int publicDDField; + protected int protectedDDField; + private int privateDDField; + } + + public class Universe extends DD implements DDI { + public int publicUniverseField; + protected int protectedUniverseField; + private int privateUniverseField; + } + + void assertContainsNoFields(Class clazz) { + assertEquals(clazz.getFields().length, 0); + } + + @Test + public void primitiveTypesHaveNoFields() throws Exception { + assertContainsNoFields(byte.class); + assertContainsNoFields(char.class); + assertContainsNoFields(short.class); + assertContainsNoFields(int.class); + assertContainsNoFields(long.class); + assertContainsNoFields(boolean.class); + assertContainsNoFields(void.class); + assertContainsNoFields(double.class); + assertContainsNoFields(float.class); + } + + @Test + public void arrayTypesHaveNoFields() throws Exception { + assertContainsNoFields(byte[].class); + assertContainsNoFields(Object[].class); + assertContainsNoFields(java.util.Map[].class); + assertContainsNoFields(java.util.HashMap[].class); + } + + @Test + public void emptyInterfacesHaveNoFields() throws Exception { + assertContainsNoFields(EmptyInterface.class); + } + + @Test + public void emptyClassesHaveNoFields() throws Exception { + assertContainsNoFields(EmptyClass.class); + class EmptyLocalClass {} + assertContainsNoFields(EmptyLocalClass.class); + } + + void assertContainsFields(Class clazz, int count) { + assertEquals(clazz.getFields().length, count); + } + + @Test + public void checkFieldCounts() throws Exception { + assertContainsFields(BI1.class, 2); + assertContainsFields(BI2.class, 1); + assertContainsFields(DI.class, 4); + assertContainsFields(DDI.class, 5); + assertContainsFields(D.class, 1); + assertContainsFields(DD.class, 2); + assertContainsFields(Universe.class, 8); + } + + void assertContainsFields(Class derived, Class base) { + List derivedFields = Arrays.asList(derived.getFields()); + List baseFields = Arrays.asList(base.getFields()); + assertTrue(derivedFields.containsAll(baseFields)); + } + + List> directSupers(Class clazz) { + List> directSupers = new ArrayList<>(); + directSupers.addAll(Arrays.asList(clazz.getInterfaces())); + if (clazz.getSuperclass() != null) { + directSupers.add(clazz.getSuperclass()); + } + return directSupers; + } + + void assertContainsSuperFields(Class clazz) { + for (Class directSuper : directSupers(clazz)) { + assertContainsFields(clazz, directSuper); + } + } + + List> testClasses() { + List> testClasses = new ArrayList<>(); + testClasses.add(Sanity.class); + testClasses.addAll(Arrays.asList(Sanity.class.getDeclaredClasses())); + assertEquals(testClasses.size(), 10); + return testClasses; + } + + @Test + public void fieldsAreInheritedFromSupers() throws Exception { + for (Class clazz : testClasses()) { + assertContainsSuperFields(clazz); + } + } + + @Test + public void getFieldIsConsistentWithGetFields() throws Exception { + for (Class clazz : testClasses()) { + for (Field field : clazz.getFields()) { + assertEquals(field, clazz.getField(field.getName())); + } + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/ProcessBuilder/Zombies.java --- a/jdk/test/java/lang/ProcessBuilder/Zombies.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/ProcessBuilder/Zombies.java Wed Dec 03 19:28:35 2014 +0000 @@ -47,17 +47,17 @@ try { rt.exec("no-such-file"); throw new Error("expected IOException not thrown"); - } catch (IOException _) {/* OK */} + } catch (IOException expected) {/* OK */} try { rt.exec("."); throw new Error("expected IOException not thrown"); - } catch (IOException _) {/* OK */} + } catch (IOException expected) {/* OK */} try { rt.exec(TrueCommand, null, new File("no-such-dir")); throw new Error("expected IOException not thrown"); - } catch (IOException _) {/* OK */} + } catch (IOException expected) {/* OK */} rt.exec(TrueCommand).waitFor(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/invoke/6998541/Test6998541.java --- a/jdk/test/java/lang/invoke/6998541/Test6998541.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/invoke/6998541/Test6998541.java Wed Dec 03 19:28:35 2014 +0000 @@ -214,13 +214,13 @@ } private static void boolean2prim_invalid(boolean x) throws Throwable { if (DO_CASTS) return; - try { byte y = (byte) mh_bz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> byte - try { char y = (char) mh_cz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> char - try { short y = (short) mh_sz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> short - try { int y = (int) mh_iz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> int - try { long y = (long) mh_jz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> long - try { float y = (float) mh_fz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> float - try { double y = (double) mh_dz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> double + try { byte y = (byte) mh_bz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> byte + try { char y = (char) mh_cz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> char + try { short y = (short) mh_sz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> short + try { int y = (int) mh_iz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> int + try { long y = (long) mh_jz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> long + try { float y = (float) mh_fz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> float + try { double y = (double) mh_dz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> double } private static MethodHandle mh_b(Class ret) { return mh(ret, byte.class); } @@ -248,8 +248,8 @@ } private static void byte2prim_invalid(byte x) throws Throwable { if (DO_CASTS) return; - try { char y = (char) mh_cb.invokeExact(x); fail(); } catch (ClassCastException _) {} // byte -> char - try { boolean y = (boolean) mh_zb.invokeExact(x); fail(); } catch (ClassCastException _) {} // byte -> boolean + try { char y = (char) mh_cb.invokeExact(x); fail(); } catch (ClassCastException expected) {} // byte -> char + try { boolean y = (boolean) mh_zb.invokeExact(x); fail(); } catch (ClassCastException expected) {} // byte -> boolean } private static MethodHandle mh_c(Class ret) { return mh(ret, char.class); } @@ -277,9 +277,9 @@ } private static void char2prim_invalid(char x) throws Throwable { if (DO_CASTS) return; - try { boolean y = (boolean) mh_zc.invokeExact(x); fail(); } catch (ClassCastException _) {} // char -> boolean - try { byte y = (byte) mh_bc.invokeExact(x); fail(); } catch (ClassCastException _) {} // char -> byte - try { short y = (short) mh_sc.invokeExact(x); fail(); } catch (ClassCastException _) {} // char -> short + try { boolean y = (boolean) mh_zc.invokeExact(x); fail(); } catch (ClassCastException expected) {} // char -> boolean + try { byte y = (byte) mh_bc.invokeExact(x); fail(); } catch (ClassCastException expected) {} // char -> byte + try { short y = (short) mh_sc.invokeExact(x); fail(); } catch (ClassCastException expected) {} // char -> short } private static MethodHandle mh_s(Class ret) { return mh(ret, short.class); } @@ -307,9 +307,9 @@ } private static void short2prim_invalid(short x) throws Throwable { if (DO_CASTS) return; - try { boolean y = (boolean) mh_zs.invokeExact(x); fail(); } catch (ClassCastException _) {} // short -> boolean - try { byte y = (byte) mh_bs.invokeExact(x); fail(); } catch (ClassCastException _) {} // short -> byte - try { char y = (char) mh_cs.invokeExact(x); fail(); } catch (ClassCastException _) {} // short -> char + try { boolean y = (boolean) mh_zs.invokeExact(x); fail(); } catch (ClassCastException expected) {} // short -> boolean + try { byte y = (byte) mh_bs.invokeExact(x); fail(); } catch (ClassCastException expected) {} // short -> byte + try { char y = (char) mh_cs.invokeExact(x); fail(); } catch (ClassCastException expected) {} // short -> char } private static MethodHandle mh_i(Class ret) { return mh(ret, int.class); } @@ -337,10 +337,10 @@ } private static void int2prim_invalid(int x) throws Throwable { if (DO_CASTS) return; - try { boolean y = (boolean) mh_zi.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> boolean - try { byte y = (byte) mh_bi.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> byte - try { char y = (char) mh_ci.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> char - try { short y = (short) mh_si.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> short + try { boolean y = (boolean) mh_zi.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> boolean + try { byte y = (byte) mh_bi.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> byte + try { char y = (char) mh_ci.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> char + try { short y = (short) mh_si.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> short } private static MethodHandle mh_j(Class ret) { return mh(ret, long.class); } @@ -368,11 +368,11 @@ } private static void long2prim_invalid(long x) throws Throwable { if (DO_CASTS) return; - try { boolean y = (boolean) mh_zj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> boolean - try { byte y = (byte) mh_bj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> byte - try { char y = (char) mh_cj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> char - try { short y = (short) mh_sj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> short - try { int y = (int) mh_ij.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> int + try { boolean y = (boolean) mh_zj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> boolean + try { byte y = (byte) mh_bj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> byte + try { char y = (char) mh_cj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> char + try { short y = (short) mh_sj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> short + try { int y = (int) mh_ij.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> int } private static MethodHandle mh_f(Class ret) { return mh(ret, float.class); } @@ -400,12 +400,12 @@ } private static void float2prim_invalid(float x) throws Throwable { if (DO_CASTS) return; - try { boolean y = (boolean) mh_zf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> boolean - try { byte y = (byte) mh_bf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> byte - try { char y = (char) mh_cf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> char - try { short y = (short) mh_sf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> short - try { int y = (int) mh_if.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> int - try { long y = (long) mh_jf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> long + try { boolean y = (boolean) mh_zf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> boolean + try { byte y = (byte) mh_bf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> byte + try { char y = (char) mh_cf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> char + try { short y = (short) mh_sf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> short + try { int y = (int) mh_if.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> int + try { long y = (long) mh_jf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> long } private static MethodHandle mh_d(Class ret) { return mh(ret, double.class); } @@ -433,13 +433,13 @@ } private static void double2prim_invalid(double x) throws Throwable { if (DO_CASTS) return; - try { boolean y = (boolean) mh_zd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> boolean - try { byte y = (byte) mh_bd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> byte - try { char y = (char) mh_cd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> char - try { short y = (short) mh_sd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> short - try { int y = (int) mh_id.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> int - try { long y = (long) mh_jd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> long - try { float y = (float) mh_fd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> float + try { boolean y = (boolean) mh_zd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> boolean + try { byte y = (byte) mh_bd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> byte + try { char y = (char) mh_cd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> char + try { short y = (short) mh_sd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> short + try { int y = (int) mh_id.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> int + try { long y = (long) mh_jd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> long + try { float y = (float) mh_fd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> float } private final static MethodHandle mh_zv = mh(boolean.class); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,7 +31,7 @@ * @build TestMethods * @build LambdaFormTestCase * @build LFGarbageCollectedTest - * @run main/othervm/timeout=600 -Djava.lang.invoke.MethodHandle.USE_LF_EDITOR=true -DtestLimit=150 LFGarbageCollectedTest + * @run main/othervm LFGarbageCollectedTest */ import java.lang.invoke.MethodHandle; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,7 +31,7 @@ * @build LambdaFormTestCase * @build LFCachingTestCase * @build LFMultiThreadCachingTest - * @run main/othervm/timeout=300 -Djava.lang.invoke.MethodHandle.USE_LF_EDITOR=true LFMultiThreadCachingTest + * @run main/othervm LFMultiThreadCachingTest */ import java.lang.invoke.MethodHandle; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,7 +31,7 @@ * @build LambdaFormTestCase * @build LFCachingTestCase * @build LFSingleThreadCachingTest - * @run main/othervm/timeout=300 -Djava.lang.invoke.MethodHandle.USE_LF_EDITOR=true LFSingleThreadCachingTest + * @run main/othervm LFSingleThreadCachingTest */ import java.lang.invoke.MethodHandle; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java --- a/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Wed Dec 03 19:28:35 2014 +0000 @@ -27,6 +27,7 @@ import java.lang.reflect.Method; import java.util.Collection; import java.util.function.Function; +import jdk.testlibrary.Utils; /** * Lambda forms caching test case class. Contains all necessary test routines to @@ -41,6 +42,7 @@ private final static String INTERNAL_FORM_METHOD_NAME = "internalForm"; private static final double ITERATIONS_TO_CODE_CACHE_SIZE_RATIO = 45 / (128.0 * 1024 * 1024); + private static final long TIMEOUT = Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT); /** * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is @@ -120,6 +122,7 @@ System.out.printf("Number of iterations is set to %d (%d cases)%n", iterations, iterations * testCaseNum); System.out.flush(); + long startTime = System.currentTimeMillis(); for (long i = 0; i < iterations; i++) { System.err.println(String.format("Iteration %d:", i)); for (TestMethods testMethod : testMethods) { @@ -137,6 +140,14 @@ } testCounter++; } + long passedTime = System.currentTimeMillis() - startTime; + long avgIterTime = passedTime / (i + 1); + long remainTime = TIMEOUT - passedTime; + if (avgIterTime > 2 * remainTime) { + System.err.printf("Stopping iterations because of lack of time.%n" + + "Increase timeout factor for more iterations.%n"); + break; + } } if (!passed) { throw new Error(String.format("%d of %d test cases FAILED! %n" diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java --- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -24,6 +24,8 @@ import com.oracle.testlibrary.jsr292.Helper; import jdk.testlibrary.Asserts; +import jdk.testlibrary.TimeLimitedRunner; +import jdk.testlibrary.Utils; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; @@ -33,6 +35,7 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; +import java.util.concurrent.TimeUnit; /* @test * @library /lib/testlibrary/jsr292 /lib/testlibrary/ @@ -93,14 +96,23 @@ } public static void main(String[] args) throws Throwable { + TestFactory factory = new TestFactory(); + long timeout = Helper.IS_THOROUGH ? 0L : Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT); + // substract vm init time and reserve time for vm exit + timeout *= 0.9; + TimeLimitedRunner runner = new TimeLimitedRunner(timeout, 2.0d, + () -> { + CatchExceptionTest test = factory.nextTest(); + if (test != null) { + test.runTest(); + return true; + } + return false; + }); for (CatchExceptionTest test : TestFactory.MANDATORY_TEST_CASES) { test.runTest(); } - TestFactory factory = new TestFactory(); - CatchExceptionTest test; - while ((test = factory.nextTest()) != null ) { - test.runTest(); - } + runner.call(); } private List> getThrowerParams(boolean isVararg, int argsCount) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest2.sh --- a/jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest2.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest2.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ # @test # @bug 4982128 # @summary Test low memory detection of non-heap memory pool -# +# @requires vm.gc=="null" # @run build LowMemoryTest2 MemoryUtil # @run shell/timeout=600 LowMemoryTest2.sh # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/MemoryMXBean/MemoryManagementConcMarkSweepGC.sh --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagementConcMarkSweepGC.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagementConcMarkSweepGC.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ # @bug 4530538 # @summary Run MemoryManagement test with concurrent mark sweep GC # @author Mandy Chung -# +# @requires vm.gc=="ConcMarkSweep" | vm.gc=="null" # @run build MemoryManagement # @run shell/timeout=600 MemoryManagementConcMarkSweepGC.sh # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/MemoryMXBean/MemoryManagementParallelGC.sh --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagementParallelGC.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagementParallelGC.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ # @bug 4530538 # @summary Run MemoryManagement test with parallel GC # @author Mandy Chung -# +# @requires vm.gc=="Parallel" | vm.gc=="null" # @run build MemoryManagement # @run shell/timeout=600 MemoryManagementParallelGC.sh # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/MemoryMXBean/MemoryManagementSerialGC.sh --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagementSerialGC.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagementSerialGC.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ # @bug 4530538 # @summary Run MemoryManagement test with serial GC # @author Mandy Chung -# +# @requires vm.gc=="Serial" | vm.gc=="null" # @run build MemoryManagement # @run shell/timeout=600 MemoryManagementSerialGC.sh # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/MemoryMXBean/MemoryTestAllGC.sh --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryTestAllGC.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryTestAllGC.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ # @bug 4530538 # @summary # @author Mandy Chung -# +# @requires vm.gc=="Parallel" | vm.gc=="null" # @run compile MemoryTest.java # @run shell MemoryTestAllGC.sh # @@ -52,7 +52,5 @@ # Test MemoryTest with parallel scavenger collector runOne -XX:+UseParallelGC MemoryTest 2 -# Test MemoryTest with concurrent collector -#runOne -XX:+UseConcMarkSweepGC MemoryTest 3 exit 0 diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/MemoryMXBean/PendingAllGC.sh --- a/jdk/test/java/lang/management/MemoryMXBean/PendingAllGC.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/MemoryMXBean/PendingAllGC.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ # @bug 4530538 # @summary # @author Mandy Chung -# +# @requires vm.gc=="null" # @run compile Pending.java # @run shell PendingAllGC.sh # diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/management/RuntimeMXBean/TestInputArgument.sh --- a/jdk/test/java/lang/management/RuntimeMXBean/TestInputArgument.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/management/RuntimeMXBean/TestInputArgument.sh Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ # @bug 4530538 # @summary # @author Mandy Chung -# # @run compile InputArgument.java # @run shell TestInputArgument.sh # @@ -48,8 +47,8 @@ runOne InputArgument -runOne -XX:+UseParallelGC -XX:+PrintGCDetails InputArgument -XX:+PrintGCDetails -runOne -XX:+UseParallelGC -XX:+PrintGCDetails InputArgument -XX:+UseParallelGC +runOne -XX:+UseFastJNIAccessors -XX:+PrintGCDetails InputArgument -XX:+PrintGCDetails +runOne -XX:+UseFastJNIAccessors -XX:+PrintGCDetails InputArgument -XX:+UseFastJNIAccessors runOne "-Dprops=one two three" InputArgument "-Dprops=one two three" exit 0 diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/ref/EnqueuePollRace.java --- a/jdk/test/java/lang/ref/EnqueuePollRace.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/ref/EnqueuePollRace.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ * @bug 8014890 * @summary Verify that a race between ReferenceQueue.enqueue() and poll() does not occur. * @author thomas.schatzl@oracle.com - * @run main/othervm -XX:+UseSerialGC -Xmx10M EnqueuePollRace + * @run main/othervm -Xmx10M EnqueuePollRace */ import java.lang.ref.*; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/reflect/Parameter/BadClassFiles.java --- a/jdk/test/java/lang/reflect/Parameter/BadClassFiles.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/lang/reflect/Parameter/BadClassFiles.java Wed Dec 03 19:28:35 2014 +0000 @@ -81,10 +81,23 @@ 0,25,0,0,0,3,0,0, 0,1,-79,0,0,0,1,0, 7,0,0,0,6,0,1,0, - 0,0,2,0,10,0,0,0, - 9,2,0,11,0,0,0,12, - 0,0,0,1,0,13,0,0, - 0,2,0,14 + 0,0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,11, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] BadModifiers_bytes = { @@ -121,10 +134,23 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,11,0,51,51,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,11, + // first parameter modifiers + 51,51, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] BadNameIndex_bytes = { @@ -161,10 +187,23 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,1,0,0,0,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,1, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] NameIndexOutOfBounds_bytes = { @@ -203,11 +242,23 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,-1,0,0,0,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 - + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,-1, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] ExtraParams_bytes = { @@ -244,10 +295,26 @@ 0,0,3,0,0,0,1,-79, 0,0,0,1,0,7,0,0, 0,6,0,1,0,0,0,2, - 0,10,0,0,0,13,3,0, - 11,0,0,0,12,0,0,0, - 11,0,0,0,1,0,13,0, - 0,0,2,0,14 + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,13, + // parameter_count + 3, + // first parameter name + 0,11, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // third parameter name + 0,11, + // third parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] BadName1_bytes = { @@ -283,10 +350,23 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,11,0,0,0,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,11, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] BadName2_bytes = { @@ -322,10 +402,23 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,11,0,0,0,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,11, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] BadName3_bytes = { @@ -361,10 +454,23 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,11,0,0,0,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,11, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static final byte[] BadName4_bytes = { @@ -400,10 +506,68 @@ 25,0,0,0,3,0,0,0, 1,-79,0,0,0,1,0,7, 0,0,0,6,0,1,0,0, - 0,2,0,10,0,0,0,9, - 2,0,11,0,0,0,12,0, - 0,0,1,0,13,0,0,0, - 2,0,14 + 0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,11, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 + }; + + private static final byte[] BadParams_bytes = { + -54,-2,-70,-66,0,0,0, + 52,0,18,10,0,3,0,15, + 7,0,16,7,0,17,1,0,6, + 60,105,110,105,116,62, + 1,0,3,40,41,86,1,0,4, + 67,111,100,101,1,0,15, + 76,105,110,101,78,117, + 109,98,101,114,84,97, + 98,108,101,1,0,1,109, + 1,0,5,40,73,73,41,86, + 1,0,16,77,101,116,104, + 111,100,80,97,114,97, + 109,101,116,101,114,115, + 1,0,1,97,1,0,1,98,1, + 0,10,83,111,117,114, + 99,101,70,105,108,101, + 1,0,14,66,97,100,80,97, + 114,97,109,115,46,106, + 97,118,97,12,0,4,0,5, + 1,0,9,66,97,100,80,97, + 114,97,109,115,1,0,16, + 106,97,118,97,47,108,97, + 110,103,47,79,98,106, + 101,99,116,0,33,0, + 2,0,3,0,0,0,0,0,2, + 0,1,0,4,0,5,0,1,0, + 6,0,0,0,29,0,1,0,1, + 0,0,0,5,42,-73,0,1, + -79,0,0,0,1,0,7,0,0, + 0,6,0,1,0,0,0,1,0,1, + 0,8,0,9,0,2,0,6,0,0, + 0,25,0,0,0,3,0,0,0,1, + -79,0,0,0,1,0,7,0,0, + 0,6,0,1,0,0,0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,1, + // parameter_count + 0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 }; private static class InMemoryClassLoader extends ClassLoader { @@ -423,6 +587,7 @@ loader.defineClass("BadNameIndex", BadNameIndex_bytes), loader.defineClass("NameIndexOutOfBounds", NameIndexOutOfBounds_bytes), loader.defineClass("ExtraParams", ExtraParams_bytes), + loader.defineClass("BadParams", BadParams_bytes), // Name with . loader.defineClass("BadName1", BadName1_bytes), // Name with [ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/lang/reflect/Parameter/NoName.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/reflect/Parameter/NoName.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @run main NoName + * @summary The reflection API should report parameters with no name properly. + */ +import java.lang.Class; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.lang.reflect.MalformedParametersException; +import java.lang.ClassLoader; +import java.lang.ClassNotFoundException; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class NoName { + + private static final byte[] NoName_bytes = { + -54,-2,-70,-66,0,0,0,52, + 0,18,10,0,3,0,15,7, + 0,16,7,0,17,1,0,6, + 60,105,110,105,116,62,1,0, + 3,40,41,86,1,0,4,67, + 111,100,101,1,0,15,76,105, + 110,101,78,117,109,98,101,114, + 84,97,98,108,101,1,0,1, + 109,1,0,5,40,73,73,41, + 86,1,0,16,77,101,116,104, + 111,100,80,97,114,97,109,101, + 116,101,114,115,1,0,0,1, + 0,1,98,1,0,10,83,111, + 117,114,99,101,70,105,108,101, + 1,0,14,69,109,112,116,121, + 78,97,109,101,46,106,97,118, + 97,12,0,4,0,5,1,0, + 9,69,109,112,116,121,78,97, + 109,101,1,0,16,106,97,118, + 97,47,108,97,110,103,47,79, + 98,106,101,99,116,0,33,0, + 2,0,3,0,0,0,0,0, + 2,0,1,0,4,0,5,0, + 1,0,6,0,0,0,29,0, + 1,0,1,0,0,0,5,42, + -73,0,1,-79,0,0,0,1, + 0,7,0,0,0,6,0,1, + 0,0,0,1,0,1,0,8, + 0,9,0,2,0,6,0,0, + 0,25,0,0,0,3,0,0, + 0,1,-79,0,0,0,1,0, + 7,0,0,0,6,0,1,0, + 0,0,2, + // Method Parameters attribute here + 0,10, + // attribute_length + 0,0,0,9, + // parameter_count + 2, + // first parameter name + 0,0, + // first parameter modifiers + 0,0, + // second parameter name + 0,12, + // second parameter modifiers + 0,0, + // end attribute + 0,1,0,13,0,0,0,2,0,14 + }; + + private static class InMemoryClassLoader extends ClassLoader { + public Class defineClass(String name, byte[] b) { + return defineClass(name, b, 0, b.length); + } + }; + + private static final InMemoryClassLoader loader = new InMemoryClassLoader(); + + private final Class noName; + + private NoName() throws ClassNotFoundException { + noName = loader.defineClass("EmptyName", NoName_bytes); + } + + public static void main(String... args) + throws NoSuchMethodException, IOException, ClassNotFoundException { + new NoName().run(); + } + + public void run() throws NoSuchMethodException { + final Class cls = noName; + System.err.println("Trying " + cls); + final Method method = cls.getMethod("m", int.class, int.class); + final Parameter[] params = method.getParameters(); + System.err.println("Name " + params[0].getName()); + System.err.println("Name " + params[1].getName()); + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java --- a/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,10 +31,6 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLClassLoader; import java.nio.charset.Charset; import java.security.AccessController; import java.security.PrivilegedAction; @@ -45,7 +41,6 @@ import java.util.Vector; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import sun.misc.Launcher; public class NIOCharsetAvailabilityTest { @@ -111,18 +106,6 @@ classPathSegments.insertElementAt(dir, 0); } - // add extensions from the extension class loader - ClassLoader appLoader = Launcher.getLauncher().getClassLoader(); - URLClassLoader extLoader = (URLClassLoader) appLoader.getParent(); - URL[] urls = extLoader.getURLs(); - for (int i = 0; i < urls.length; i++) { - try { - URI uri = new URI(urls[i].toString()); - classPathSegments.insertElementAt(uri.getPath(), 0); - } catch (URISyntaxException e) { - } - } - String[] classList = (String[]) java.security.AccessController.doPrivileged( new java.security.PrivilegedAction() { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/nio/file/Files/FileAttributes.java --- a/jdk/test/java/nio/file/Files/FileAttributes.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/nio/file/Files/FileAttributes.java Wed Dec 03 19:28:35 2014 +0000 @@ -52,12 +52,6 @@ } } - // checks that two time values are within 1s of each other - static void checkNearEqual(FileTime t1, FileTime t2) { - long diff = Math.abs(t1.toMillis() - t2.toMillis()); - assertTrue(diff <= 1000); - } - // Exercise getAttribute/setAttribute/readAttributes on basic attributes static void checkBasicAttributes(Path file, BasicFileAttributes attrs) throws IOException diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/nio/file/Files/SetLastModifiedTime.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/file/Files/SetLastModifiedTime.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.FileTime; + +import org.testng.annotations.Test; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertFalse; + +/** + * @test + * @bug 4313887 8062949 + * @library .. + * @run testng SetLastModifiedTime + * @summary Unit test for Files.setLastModifiedTime + */ + +public class SetLastModifiedTime { + + static Path testDir; + + @BeforeClass + void createTestDirectory() throws Exception { + testDir = TestUtil.createTemporaryDirectory(); + } + + @AfterClass + void removeTestDirectory() throws Exception { + TestUtil.removeAll(testDir); + } + + /** + * Exercise Files.setLastModifiedTime on the given file + */ + void test(Path path) throws Exception { + FileTime now = Files.getLastModifiedTime(path); + FileTime zero = FileTime.fromMillis(0L); + + Path result = Files.setLastModifiedTime(path, zero); + assertTrue(result == path); + assertEquals(Files.getLastModifiedTime(path), zero); + + result = Files.setLastModifiedTime(path, now); + assertTrue(result == path); + assertEquals(Files.getLastModifiedTime(path), now); + } + + @Test + public void testRegularFile() throws Exception { + Path file = Files.createFile(testDir.resolve("file")); + test(file); + } + + @Test + public void testDirectory() throws Exception { + Path dir = Files.createDirectory(testDir.resolve("dir")); + test(dir); + } + + @Test + public void testSymbolicLink() throws Exception { + if (TestUtil.supportsLinks(testDir)) { + Path target = Files.createFile(testDir.resolve("target")); + Path link = testDir.resolve("link"); + Files.createSymbolicLink(link, target); + test(link); + } + } + + @Test + public void testNulls() throws Exception { + Path path = Paths.get("foo"); + FileTime zero = FileTime.fromMillis(0L); + + try { + Files.setLastModifiedTime(null, zero); + assertTrue(false); + } catch (NullPointerException expected) { } + + try { + Files.setLastModifiedTime(path, null); + assertTrue(false); + } catch (NullPointerException expected) { } + + try { + Files.setLastModifiedTime(null, null); + assertTrue(false); + } catch (NullPointerException expected) { } + } +} + diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java --- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -262,7 +262,7 @@ e.getClass().getName(), e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); obj = null; } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java --- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -130,7 +130,7 @@ myRMI = null; System.err.println("rmid shut down"); - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java --- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,7 +112,7 @@ myRMI = null; System.err.println("rmid shut down"); - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); TestLibrary.unexport(group); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java --- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -164,7 +164,7 @@ throw new RuntimeException("CheckRegisterInLog got exception " + e.getMessage()); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java --- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -155,7 +155,7 @@ e.getClass().getName(), e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); obj = null; } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -138,7 +138,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java --- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -135,7 +135,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,7 +69,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java --- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -248,7 +248,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); for (int i = 0 ; i < HOW_MANY ; i ++) { TestLibrary.unexport(unicastObjs[i]); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java --- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -176,7 +176,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java --- a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -118,7 +118,7 @@ } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java --- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -165,7 +165,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java --- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,7 +139,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java --- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -231,7 +231,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); TestLibrary.unexport(unicastObj); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java --- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -247,7 +247,7 @@ } catch (Exception e) { TestLibrary.bomb(e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); TestLibrary.unexport(callbackObj); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java --- a/jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -221,7 +221,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); TestLibrary.unexport(unicastObj); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java --- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -125,7 +125,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java --- a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -163,7 +163,7 @@ } finally { obj1 = obj2 = null; - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/ActivationGroup/downloadActivationGroup/DownloadActivationGroup.java --- a/jdk/test/java/rmi/activation/ActivationGroup/downloadActivationGroup/DownloadActivationGroup.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/ActivationGroup/downloadActivationGroup/DownloadActivationGroup.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,7 +156,7 @@ } catch (Exception e) { TestLibrary.bomb(e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/ActivationSystem/activeGroup/IdempotentActiveGroup.java --- a/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/IdempotentActiveGroup.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/IdempotentActiveGroup.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -108,7 +108,7 @@ } catch (NoSuchObjectException unexpected) { throw new AssertionError(unexpected); } - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/ModifyDescriptor.java --- a/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/ModifyDescriptor.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/ModifyDescriptor.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,7 +250,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java --- a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -171,7 +171,7 @@ } canCreateStubs = null; - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); System.err.println("rmid shut down"); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java --- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,7 +156,7 @@ } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java --- a/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -203,7 +203,7 @@ actsys.unregisterGroup(gid); Thread.sleep(5000); - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } public static class DebugExecWatcher diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java --- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -121,7 +121,7 @@ if (obj != null) { UnicastRemoteObject.unexportObject(obj, true); } - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java --- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -119,7 +119,7 @@ if (obj != null) { UnicastRemoteObject.unexportObject(obj, true); } - ActivationLibrary.rmidCleanup(rmid); + rmid.cleanup(); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java --- a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java Wed Dec 03 19:28:35 2014 +0000 @@ -104,13 +104,6 @@ utilityToStart + " to die"); if (time >= TIME_OUT) { - - // dont pollute other tests; increase the likelihood - // that rmid will go away if it did not exit already. - if (utility.equals(ACTIVATION)) { - RMID.shutdown(port); - } - TestLibrary.bomb(utilityToStart + " took too long to die..."); } else { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ RMID rmid = null; try { - rmid = RMID.createRMID(true); + rmid = RMID.createRMID(); rmid.addArguments(new String[] { "-C-Djava.security.policy=" + TestParams.defaultGroupPolicy + diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/testlibrary/ActivationLibrary.java --- a/jdk/test/java/rmi/testlibrary/ActivationLibrary.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/testlibrary/ActivationLibrary.java Wed Dec 03 19:28:35 2014 +0000 @@ -103,68 +103,4 @@ } catch (NoSuchObjectException e) { } } - - /** cleanup after rmid */ - public static void rmidCleanup(RMID rmid) { - if (rmid != null) { - if (!ActivationLibrary.safeDestroy(rmid, SAFE_WAIT_TIME)) { - TestLibrary.bomb("rmid not destroyed in: " + - SAFE_WAIT_TIME + - " milliseconds"); - } - } - RMID.removeLog(); - } - - /** - * Invoke shutdown on rmid in a way that will not cause a test - * to hang. - * - * @return whether or not shutdown completed succesfully in the - * timeAllowed - */ - private static boolean safeDestroy(RMID rmid, long timeAllowed) { - DestroyThread destroyThread = new DestroyThread(rmid); - destroyThread.start(); - - try { - destroyThread.join(timeAllowed); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - } - - return destroyThread.shutdownSucceeded(); - } - - /** - * Thread class to handle the destruction of rmid - */ - private static class DestroyThread extends Thread { - private final RMID rmid; - private final int port; - private boolean succeeded = false; - - DestroyThread(RMID rmid) { - this.rmid = rmid; - this.port = rmid.getPort(); - this.setDaemon(true); - } - - public void run() { - if (RMID.lookupSystem(port) != null) { - rmid.destroy(); - synchronized (this) { - // flag that the test was able to shutdown rmid - succeeded = true; - } - mesg("finished destroying rmid"); - } else { - mesg("tried to shutdown when rmid was not running"); - } - } - - public synchronized boolean shutdownSucceeded() { - return succeeded; - } - } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/rmi/testlibrary/RMID.java --- a/jdk/test/java/rmi/testlibrary/RMID.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/rmi/testlibrary/RMID.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,14 +21,11 @@ * questions. */ -/** - * - */ - import java.io.*; import java.rmi.*; import java.rmi.activation.*; import java.rmi.registry.*; +import java.util.concurrent.TimeoutException; /** * Utility class that creates an instance of rmid with a policy @@ -39,6 +36,14 @@ */ public class RMID extends JavaVM { + // TODO: adjust these based on the timeout factor + // such as jcov.sleep.multiplier; see start(long) method. + // Also consider the test.timeout.factor property (a float). + private static final long TIMEOUT_SHUTDOWN_MS = 60_000L; + private static final long TIMEOUT_DESTROY_MS = 10_000L; + private static final long STARTTIME_MS = 15_000L; + private static final long POLLTIME_MS = 100L; + private static final String SYSTEM_NAME = ActivationSystem.class.getName(); // "java.rmi.activation.ActivationSystem" @@ -140,15 +145,8 @@ * policy file. */ public static RMID createRMID() { - return createRMID(System.out, System.err, true); - } - - public static RMID createRMID(boolean debugExec) { - return createRMID(System.out, System.err, debugExec); - } - - public static RMID createRMID(OutputStream out, OutputStream err) { - return createRMID(out, err, true); + return createRMID(System.out, System.err, true, true, + TestLibrary.getUnusedRandomPort()); } public static RMID createRMID(OutputStream out, OutputStream err, @@ -173,24 +171,24 @@ /** - * Test RMID should be created with the createRMID method. + * Private constructor. RMID instances should be created + * using the static factory methods. */ - protected RMID(String classname, String options, String args, + private RMID(String classname, String options, String args, OutputStream out, OutputStream err, int port) { super(classname, options, args, out, err); this.port = port; } + /** + * Removes rmid's log file directory. + */ public static void removeLog() { - /* - * Remove previous log file directory before - * starting up rmid. - */ File f = new File(LOGDIR, log); if (f.exists()) { - mesg("removing rmid's old log file..."); + mesg("Removing rmid's old log file."); String[] files = f.list(); if (files != null) { @@ -199,8 +197,8 @@ } } - if (f.delete() != true) { - mesg("\t" + " unable to delete old log file."); + if (! f.delete()) { + mesg("Warning: unable to delete old log file."); } } } @@ -215,14 +213,6 @@ return TestLibrary.getExtraProperty("rmid.jcov.args",""); } - public void start() throws IOException { - start(10000); - } - - public void slowStart() throws IOException { - start(60000); - } - /** * Looks up the activation system in the registry on the given port, * returning its stub, or null if it's not present. This method differs from @@ -239,12 +229,24 @@ } } + /** + * Starts rmid and waits up to the default timeout period + * to confirm that it's running. + */ + public void start() throws IOException { + start(STARTTIME_MS); + } + + /** + * Starts rmid and waits up to the given timeout period + * to confirm that it's running. + */ public void start(long waitTime) throws IOException { // if rmid is already running, then the test will fail with // a well recognized exception (port already in use...). - mesg("starting rmid on port #" + port + "..."); + mesg("Starting rmid on port " + port + "."); super.start(); int slopFactor = 1; @@ -254,20 +256,17 @@ } catch (NumberFormatException ignore) {} waitTime = waitTime * slopFactor; - // We check several times (as many as provides passed waitTime) to - // see if Rmid is currently running. Waiting steps last 100 msecs. - final long rmidStartSleepTime = 100; + // We check several times, for a maximum of waitTime, until we have + // verified that rmid is running. do { - // Sleeping for another rmidStartSleepTime time slice. try { - Thread.sleep(Math.min(waitTime, rmidStartSleepTime)); + Thread.sleep(Math.min(waitTime, POLLTIME_MS)); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); - mesg("Thread interrupted while checking for start of Activation System. Giving up check."); - mesg("Activation System state unknown"); + mesg("Interrupted while starting activation system, giving up."); return; } - waitTime -= rmidStartSleepTime; + waitTime -= POLLTIME_MS; // Checking if rmid is present if (lookupSystem(port) != null) { @@ -279,7 +278,7 @@ * incorrect value. */ System.setProperty("java.rmi.activation.port", Integer.toString(port)); - mesg("finished starting rmid."); + mesg("Started successfully."); return; } else { if (waitTime > 0) { @@ -287,9 +286,15 @@ } } } while (waitTime > 0); - TestLibrary.bomb("start rmid failed... giving up", null); + TestLibrary.bomb("Failed to start rmid, giving up.", null); } + /** + * Destroys rmid and restarts it. Note that this does NOT clean up + * the log file, because it stores information about restartable + * and activatable objects that must be carried over to the new + * rmid instance. + */ public void restart() throws IOException { destroy(); start(); @@ -298,30 +303,35 @@ /** * Ask rmid to shutdown gracefully using a remote method call. * catch any errors that might occur from rmid not being present - * at time of shutdown invocation. - * - * Shutdown does not nullify possible references to the rmid - * process object (destroy does though). + * at time of shutdown invocation. If the remote call is + * successful, wait for the process to terminate. Return true + * if the process terminated, otherwise return false. */ - public static void shutdown(int port) { + private boolean shutdown() throws InterruptedException { + mesg("shutdown()"); + ActivationSystem system = lookupSystem(port); + if (system == null) { + mesg("lookupSystem() returned null"); + return false; + } try { - ActivationSystem system = lookupSystem(port); - - if (system == null) { - TestLibrary.bomb("reference to the activation system was null"); - } - + mesg("ActivationSystem.shutdown()"); system.shutdown(); - } catch (RemoteException re) { - mesg("shutting down the activation daemon failed"); } catch (Exception e) { - mesg("caught exception trying to shutdown rmid"); - mesg(e.getMessage()); + mesg("Caught exception from ActivationSystem.shutdown():"); e.printStackTrace(); } - mesg("testlibrary finished shutting down rmid"); + try { + waitFor(TIMEOUT_SHUTDOWN_MS); + mesg("Shutdown successful."); + return true; + } catch (TimeoutException ex) { + mesg("Shutdown timed out:"); + ex.printStackTrace(); + return false; + } } /** @@ -330,60 +340,46 @@ * if rmid is a child process of the current VM. */ public void destroy() { - // attempt graceful shutdown of the activation system - shutdown(port); + if (vm == null) { + throw new IllegalStateException("can't wait for RMID that isn't running"); + } - if (vm != null) { - try { - /* Waiting for distant RMID process to shutdown. - * Waiting is bounded at a hardcoded max of 60 secs (1 min). - * Waiting by steps of 200 msecs, thus at most 300 such attempts - * for termination of distant RMID process. If process is not - * known to be terminated properly after that time, - * we give up for a gracefull termination, and thus go for - * forcibly destroying the process. - */ - boolean vmEnded = false; - int waitingTrials = 0; - final int maxTrials = 300; - final long vmProcessEndWaitInterval = 200; - int vmExitValue; - do { - try { - Thread.sleep(vmProcessEndWaitInterval); - waitingTrials++; - vmExitValue = vm.exitValue(); - mesg("rmid exited on shutdown request"); - vmEnded = true; - } catch (IllegalThreadStateException illegal) { - mesg("RMID's process still not terminated after more than " + - (waitingTrials * vmProcessEndWaitInterval) + " milliseconds"); - } + // First, attempt graceful shutdown of the activation system. + try { + if (! shutdown()) { + // Graceful shutdown failed, use Process.destroy(). + mesg("Destroying RMID process."); + vm.destroy(); + try { + waitFor(TIMEOUT_DESTROY_MS); + mesg("Destroy successful."); + } catch (TimeoutException ex) { + mesg("Destroy timed out, giving up."); + ex.printStackTrace(); } - while (!vmEnded && - (waitingTrials < maxTrials)); - - if (waitingTrials >= maxTrials) { - mesg("RMID's process still not terminated after more than " + - (waitingTrials * vmProcessEndWaitInterval) + " milliseconds." + - "Givinp up gracefull termination..."); - mesg("destroying RMID's process using Process.destroy()"); - super.destroy(); - } + } + } catch (InterruptedException ie) { + mesg("Shutdown/destroy interrupted, giving up."); + ie.printStackTrace(); + Thread.currentThread().interrupt(); + return; + } - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - mesg("Thread interrupted while checking for termination of distant rmid vm. Giving up check."); - } catch (Exception e) { - mesg("caught unexpected exception trying to destroy rmid: " + - e.getMessage()); - e.printStackTrace(); - } - - // rmid will not restart if its process is not null - vm = null; - } + vm = null; } - public int getPort() {return port;} + /** + * Shuts down rmid and then removes its log file. + */ + public void cleanup() { + destroy(); + RMID.removeLog(); + } + + /** + * Gets the port on which this rmid is listening. + */ + public int getPort() { + return port; + } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/EnumSet/BogusEnumSet.java --- a/jdk/test/java/util/EnumSet/BogusEnumSet.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/EnumSet/BogusEnumSet.java Wed Dec 03 19:28:35 2014 +0000 @@ -82,7 +82,7 @@ System.out.println("Set size: " + es.size()); // 64 System.out.println("Set: " + es); // Throws IndexOutOfBoundsException throw new AssertionError("Expected exception InvalidObjectException not thrown"); - } catch (java.io.InvalidObjectException _) { /* OK */ } + } catch (java.io.InvalidObjectException expected) { /* OK */ } } private static Object deserialize(byte[] sf) throws Throwable { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/Basic-X.java.template --- a/jdk/test/java/util/Formatter/Basic-X.java.template Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/Basic-X.java.template Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -572,6 +580,14 @@ test("%(10d", " (12345)", negate(oneToFive)); test("%-10d", "12345 ", oneToFive); test("%-10d", "-12345 ", negate(oneToFive)); + // , variations: + test("% ,d", " 12,345", oneToFive); + test("% ,d", "-12,345", negate(oneToFive)); + test("%0,10d", "000012,345", oneToFive); + test("%0,10d", "-00012,345", negate(oneToFive)); + test("%(,10d", " (12,345)", negate(oneToFive)); + test("%-,10d", "12,345 ", oneToFive); + test("%-,10d", "-12,345 ", negate(oneToFive)); #else[short] #if[prim] @@ -594,6 +610,16 @@ test("%(10d", " (1234567)", negate(oneToSeven)); test("%-10d", "1234567 ", oneToSeven); test("%-10d", "-1234567 ", negate(oneToSeven)); + // , variations: + test("% ,d", " 1,234,567", oneToSeven); + test("% ,d", "-1,234,567", negate(oneToSeven)); + test("%+,10d", "+1,234,567", oneToSeven); + test("%0,10d", "01,234,567", oneToSeven); + test("%0,10d", "-1,234,567", negate(oneToSeven)); + test("%(,10d", "(1,234,567)", negate(oneToSeven)); + test("%-,10d", "1,234,567 ", oneToSeven); + test("%-,10d", "-1,234,567", negate(oneToSeven)); + #end[prim] #end[short] #end[byte] @@ -781,6 +807,14 @@ test("%+d", "-1234567", new BigInteger("-1234567", 10)); test("%-10d", "1234567 ", new BigInteger("1234567", 10)); test("%-10d", "-1234567 ", new BigInteger("-1234567", 10)); + // , variations: + test("%0,10d", "01,234,567", new BigInteger("1234567", 10)); + test("%0,10d", "-1,234,567", new BigInteger("-1234567", 10)); + test("%(,10d", "(1,234,567)", new BigInteger("-1234567", 10)); + test("%+,d", "+1,234,567", new BigInteger("1234567", 10)); + test("%+,d", "-1,234,567", new BigInteger("-1234567", 10)); + test("%-,10d", "1,234,567 ", new BigInteger("1234567", 10)); + test("%-,10d", "-1,234,567", new BigInteger("-1234567", 10)); //--------------------------------------------------------------------- // %o - BigInteger @@ -1039,6 +1073,14 @@ test("%3.0f", "1000000", 1000000.00); test("%3.0f", "10000000", 10000000.00); test("%3.0f", "100000000", 100000000.00); + test("%10.0f", " 1000000", 1000000.00); + test("%,10.0f", " 1,000,000", 1000000.00); + test("%,10.1f", "1,000,000.0", 1000000.00); + test("%,3.0f", "1,000,000", 1000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); #if[BigDecimal] //--------------------------------------------------------------------- // %f - BigDecimal diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicBigDecimal.java --- a/jdk/test/java/util/Formatter/BasicBigDecimal.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicBigDecimal.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -831,6 +839,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %s - BigDecimal //--------------------------------------------------------------------- @@ -1039,6 +1073,14 @@ test("%3.0f", "1000000", 1000000.00); test("%3.0f", "10000000", 10000000.00); test("%3.0f", "100000000", 100000000.00); + test("%10.0f", " 1000000", 1000000.00); + test("%,10.0f", " 1,000,000", 1000000.00); + test("%,10.1f", "1,000,000.0", 1000000.00); + test("%,3.0f", "1,000,000", 1000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); //--------------------------------------------------------------------- // %f - BigDecimal @@ -1351,6 +1393,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %f, %e, %g, %a - Boundaries //--------------------------------------------------------------------- diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicBigInteger.java --- a/jdk/test/java/util/Formatter/BasicBigInteger.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicBigInteger.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -754,6 +762,24 @@ + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // BigInteger - errors //--------------------------------------------------------------------- @@ -781,6 +807,14 @@ test("%+d", "-1234567", new BigInteger("-1234567", 10)); test("%-10d", "1234567 ", new BigInteger("1234567", 10)); test("%-10d", "-1234567 ", new BigInteger("-1234567", 10)); + // , variations: + test("%0,10d", "01,234,567", new BigInteger("1234567", 10)); + test("%0,10d", "-1,234,567", new BigInteger("-1234567", 10)); + test("%(,10d", "(1,234,567)", new BigInteger("-1234567", 10)); + test("%+,d", "+1,234,567", new BigInteger("1234567", 10)); + test("%+,d", "-1,234,567", new BigInteger("-1234567", 10)); + test("%-,10d", "1,234,567 ", new BigInteger("1234567", 10)); + test("%-,10d", "-1,234,567", new BigInteger("-1234567", 10)); //--------------------------------------------------------------------- // %o - BigInteger @@ -1573,6 +1607,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicBoolean.java --- a/jdk/test/java/util/Formatter/BasicBoolean.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicBoolean.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -1573,6 +1581,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicBooleanObject.java --- a/jdk/test/java/util/Formatter/BasicBooleanObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicBooleanObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -1573,6 +1581,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicByte.java --- a/jdk/test/java/util/Formatter/BasicByte.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicByte.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -597,6 +605,24 @@ + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %d - errors //--------------------------------------------------------------------- @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicByteObject.java --- a/jdk/test/java/util/Formatter/BasicByteObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicByteObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -597,6 +605,24 @@ + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %d - errors //--------------------------------------------------------------------- @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicChar.java --- a/jdk/test/java/util/Formatter/BasicChar.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicChar.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -1573,6 +1581,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicCharObject.java --- a/jdk/test/java/util/Formatter/BasicCharObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicCharObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -1573,6 +1581,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicDateTime.java --- a/jdk/test/java/util/Formatter/BasicDateTime.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicDateTime.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -1573,6 +1581,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicDouble.java --- a/jdk/test/java/util/Formatter/BasicDouble.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicDouble.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,9 @@ import java.text.DateFormatSymbols; import java.util.*; +import sun.misc.DoubleConsts; + + import static java.util.Calendar.*; @@ -48,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -55,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -859,6 +870,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %s - double //--------------------------------------------------------------------- @@ -1036,6 +1073,14 @@ test("%3.0f", "1000000", 1000000.00); test("%3.0f", "10000000", 10000000.00); test("%3.0f", "100000000", 100000000.00); + test("%10.0f", " 1000000", 1000000.00); + test("%,10.0f", " 1,000,000", 1000000.00); + test("%,10.1f", "1,000,000.0", 1000000.00); + test("%,3.0f", "1,000,000", 1000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); @@ -1310,12 +1355,12 @@ test("%.1a", "-0x1.0p0", -1.0); test("%.11a", "0x1.80000000000p1", 3.0); test("%.1a", "0x1.8p1", 3.0); - test("%.11a", "0x1.00000000000p-1022", Double.MIN_NORMAL); - test("%.1a", "0x1.0p-1022", Double.MIN_NORMAL); + test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL); + test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL); test("%.11a", "0x1.00000000000p-1022", - Math.nextDown(Double.MIN_NORMAL)); + Math.nextDown(DoubleConsts.MIN_NORMAL)); test("%.1a", "0x1.0p-1022", - Math.nextDown(Double.MIN_NORMAL)); + Math.nextDown(DoubleConsts.MIN_NORMAL)); test("%.11a", "0x1.ffffffffffep-1023", 0x0.fffffffffffp-1022); test("%.1a", "0x1.0p-1022", 0x0.fffffffffffp-1022); test("%.30a", "0x0.000000000000100000000000000000p-1022", Double.MIN_VALUE); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicDoubleObject.java --- a/jdk/test/java/util/Formatter/BasicDoubleObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicDoubleObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -872,6 +880,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %s - Double //--------------------------------------------------------------------- @@ -1039,6 +1073,14 @@ test("%3.0f", "1000000", 1000000.00); test("%3.0f", "10000000", 10000000.00); test("%3.0f", "100000000", 100000000.00); + test("%10.0f", " 1000000", 1000000.00); + test("%,10.0f", " 1,000,000", 1000000.00); + test("%,10.1f", "1,000,000.0", 1000000.00); + test("%,3.0f", "1,000,000", 1000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); @@ -1351,6 +1393,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %f, %e, %g, %a - Boundaries //--------------------------------------------------------------------- diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicFloat.java --- a/jdk/test/java/util/Formatter/BasicFloat.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicFloat.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -842,6 +850,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %s - float //--------------------------------------------------------------------- @@ -1039,6 +1073,14 @@ test("%3.0f", "1000000", 1000000.00); test("%3.0f", "10000000", 10000000.00); test("%3.0f", "100000000", 100000000.00); + test("%10.0f", " 1000000", 1000000.00); + test("%,10.0f", " 1,000,000", 1000000.00); + test("%,10.1f", "1,000,000.0", 1000000.00); + test("%,3.0f", "1,000,000", 1000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); @@ -1351,6 +1393,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %f, %e, %g, %a - Boundaries //--------------------------------------------------------------------- diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicFloatObject.java --- a/jdk/test/java/util/Formatter/BasicFloatObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicFloatObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -852,6 +860,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %s - Float //--------------------------------------------------------------------- @@ -1039,6 +1073,14 @@ test("%3.0f", "1000000", 1000000.00); test("%3.0f", "10000000", 10000000.00); test("%3.0f", "100000000", 100000000.00); + test("%10.0f", " 1000000", 1000000.00); + test("%,10.0f", " 1,000,000", 1000000.00); + test("%,10.1f", "1,000,000.0", 1000000.00); + test("%,3.0f", "1,000,000", 1000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); + test("%,3.0f", "10,000,000", 10000000.00); + test("%,3.0f", "100,000,000", 100000000.00); @@ -1351,6 +1393,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %f, %e, %g, %a - Boundaries //--------------------------------------------------------------------- diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicInt.java --- a/jdk/test/java/util/Formatter/BasicInt.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicInt.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -575,6 +583,14 @@ + + + + + + + + //--------------------------------------------------------------------- // %d - int and long //--------------------------------------------------------------------- @@ -594,6 +610,16 @@ test("%(10d", " (1234567)", negate(oneToSeven)); test("%-10d", "1234567 ", oneToSeven); test("%-10d", "-1234567 ", negate(oneToSeven)); + // , variations: + test("% ,d", " 1,234,567", oneToSeven); + test("% ,d", "-1,234,567", negate(oneToSeven)); + test("%+,10d", "+1,234,567", oneToSeven); + test("%0,10d", "01,234,567", oneToSeven); + test("%0,10d", "-1,234,567", negate(oneToSeven)); + test("%(,10d", "(1,234,567)", negate(oneToSeven)); + test("%-,10d", "1,234,567 ", oneToSeven); + test("%-,10d", "-1,234,567", negate(oneToSeven)); + @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicIntObject.java --- a/jdk/test/java/util/Formatter/BasicIntObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicIntObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -597,6 +605,24 @@ + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %d - errors //--------------------------------------------------------------------- @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicLong.java --- a/jdk/test/java/util/Formatter/BasicLong.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicLong.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -575,6 +583,14 @@ + + + + + + + + //--------------------------------------------------------------------- // %d - int and long //--------------------------------------------------------------------- @@ -594,6 +610,16 @@ test("%(10d", " (1234567)", negate(oneToSeven)); test("%-10d", "1234567 ", oneToSeven); test("%-10d", "-1234567 ", negate(oneToSeven)); + // , variations: + test("% ,d", " 1,234,567", oneToSeven); + test("% ,d", "-1,234,567", negate(oneToSeven)); + test("%+,10d", "+1,234,567", oneToSeven); + test("%0,10d", "01,234,567", oneToSeven); + test("%0,10d", "-1,234,567", negate(oneToSeven)); + test("%(,10d", "(1,234,567)", negate(oneToSeven)); + test("%-,10d", "1,234,567 ", oneToSeven); + test("%-,10d", "-1,234,567", negate(oneToSeven)); + @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicLongObject.java --- a/jdk/test/java/util/Formatter/BasicLongObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicLongObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -597,6 +605,24 @@ + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %d - errors //--------------------------------------------------------------------- @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicShort.java --- a/jdk/test/java/util/Formatter/BasicShort.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicShort.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -572,6 +580,24 @@ test("%(10d", " (12345)", negate(oneToFive)); test("%-10d", "12345 ", oneToFive); test("%-10d", "-12345 ", negate(oneToFive)); + // , variations: + test("% ,d", " 12,345", oneToFive); + test("% ,d", "-12,345", negate(oneToFive)); + test("%0,10d", "000012,345", oneToFive); + test("%0,10d", "-00012,345", negate(oneToFive)); + test("%(,10d", " (12,345)", negate(oneToFive)); + test("%-,10d", "12,345 ", oneToFive); + test("%-,10d", "-12,345 ", negate(oneToFive)); + + + + + + + + + + @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/BasicShortObject.java --- a/jdk/test/java/util/Formatter/BasicShortObject.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/BasicShortObject.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,10 @@ Formatter f = new Formatter(new StringBuilder(), Locale.US); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), Locale.US); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(Locale l, String fs, String exp, Object ... args) @@ -58,6 +62,10 @@ Formatter f = new Formatter(new StringBuilder(), l); f.format(fs, args); ck(fs, exp, f.toString()); + + f = new Formatter(new StringBuilder(), l); + f.format("foo " + fs + " bar", args); + ck(fs, "foo " + exp + " bar", f.toString()); } private static void test(String fs, Object ... args) { @@ -597,6 +605,24 @@ + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %d - errors //--------------------------------------------------------------------- @@ -1573,6 +1599,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //--------------------------------------------------------------------- // %t // diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Formatter/genBasic.sh --- a/jdk/test/java/util/Formatter/genBasic.sh Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Formatter/genBasic.sh Wed Dec 03 19:28:35 2014 +0000 @@ -23,7 +23,7 @@ # questions. # -javac -d . ../../../../make/tools/src/build/tools/spp/Spp.java +javac -d . ../../../../make/src/classes/build/tools/spp/Spp.java gen() { # if [ $3 = "true" ] diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/Timer/NameConstructors.java --- a/jdk/test/java/util/Timer/NameConstructors.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/java/util/Timer/NameConstructors.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,37 +23,42 @@ /* * @test - * @bug 4279061 + * @bug 4279061 8056313 * @summary Basic test for constructors with thread name */ -import java.util.*; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.LinkedTransferQueue; public class NameConstructors { private static final String NAME1 = "Norm D. Plume"; private static final String NAME2 = "Ann Onymous"; - public static void main (String[] args) throws Exception { - Random rnd = new Random(); + public static void main (String[] args) throws InterruptedException { test(new Timer(NAME1), NAME1); test(new Timer(NAME2, true), NAME2); } - private static boolean done, passed; + public static void test(Timer timer, String expected) throws InterruptedException { + try { + LinkedTransferQueue queue = new LinkedTransferQueue<>(); - public static void test(Timer timer, final String name) throws Exception { - done = passed = false; + TimerTask task = new TimerTask() { + public void run() { + queue.put(Thread.currentThread().getName()); + } + }; - TimerTask task = new TimerTask() { - public void run() { - passed = Thread.currentThread().getName().equals(name); - done = true; + timer.schedule(task, 0L); // immediately + String actual = queue.take(); + + if (!expected.equals(actual)) { + throw new AssertionError( + String.format("expected='%s', actual='%s'", expected, actual)); } - }; - timer.schedule(task, 0); // Immediate - Thread.sleep(500); - if (!(done && passed)) - throw new RuntimeException(done + " : " + passed); - timer.cancel(); + } finally { + timer.cancel(); + } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/jar/Attributes/IterationOrder.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/jar/Attributes/IterationOrder.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,74 @@ +/* + * Copyright 2014 Google, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8062194 + * @summary Ensure Attribute iteration order is the insertion order. + */ + +import java.util.Arrays; +import java.util.Map; +import java.util.jar.Attributes; +import java.util.jar.Attributes.Name; + +public class IterationOrder { + static void checkOrder(Attributes.Name k0, String v0, + Attributes.Name k1, String v1, + Attributes.Name k2, String v2) { + Attributes x = new Attributes(); + x.put(k0, v0); + x.put(k1, v1); + x.put(k2, v2); + Map.Entry[] entries + = x.entrySet().toArray(new Map.Entry[3]); + if (!(entries.length == 3 + && entries[0].getKey() == k0 + && entries[0].getValue() == v0 + && entries[1].getKey() == k1 + && entries[1].getValue() == v1 + && entries[2].getKey() == k2 + && entries[2].getValue() == v2)) { + throw new AssertionError(Arrays.toString(entries)); + } + + Object[] keys = x.keySet().toArray(); + if (!(keys.length == 3 + && keys[0] == k0 + && keys[1] == k1 + && keys[2] == k2)) { + throw new AssertionError(Arrays.toString(keys)); + } + } + + public static void main(String[] args) throws Exception { + Attributes.Name k0 = Name.MANIFEST_VERSION; + Attributes.Name k1 = Name.MAIN_CLASS; + Attributes.Name k2 = Name.SEALED; + String v0 = "42.0"; + String v1 = "com.google.Hello"; + String v2 = "yes"; + checkOrder(k0, v0, k1, v1, k2, v2); + checkOrder(k1, v1, k0, v0, k2, v2); + checkOrder(k2, v2, k1, v1, k0, v0); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/logging/LogManager/Configuration/ParentLoggerWithHandlerGC.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/logging/LogManager/Configuration/ParentLoggerWithHandlerGC.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,517 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FilePermission; +import java.io.IOException; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.WeakReference; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.CodeSource; +import java.security.Permission; +import java.security.PermissionCollection; +import java.security.Permissions; +import java.security.Policy; +import java.security.ProtectionDomain; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.FileHandler; +import java.util.logging.Handler; +import java.util.logging.LogManager; +import java.util.logging.Logger; +import java.util.logging.LoggingPermission; + +/** + * @test + * @bug 8060132 + * @summary tests that FileHandlers configured on abstract nodes in logging.properties + * will be closed by reset(). + * @run main/othervm ParentLoggerWithHandlerGC UNSECURE + * @run main/othervm ParentLoggerWithHandlerGC SECURE + * @author danielfuchs + */ +public class ParentLoggerWithHandlerGC { + + /** + * We will test the handling of abstract logger nodes with file handlers in + * two configurations: + * UNSECURE: No security manager. + * SECURE: With the security manager present - and the required + * permissions granted. + */ + public static enum TestCase { + UNSECURE, SECURE; + public void run(Properties propertyFile) throws Exception { + System.out.println("Running test case: " + name()); + Configure.setUp(this, propertyFile); + test(this.name() + " " + propertyFile.getProperty("test.name"), propertyFile); + } + } + + + private static final String PREFIX = + "FileHandler-" + UUID.randomUUID() + ".log"; + private static final String userDir = System.getProperty("user.dir", "."); + private static final boolean userDirWritable = Files.isWritable(Paths.get(userDir)); + + static enum ConfigMode { DEFAULT, ENSURE_CLOSE_ON_RESET_TRUE, ENSURE_CLOSE_ON_RESET_FALSE } + + private static final List properties; + static { + Properties props1 = new Properties(); + props1.setProperty("test.name", "parent logger with handler"); + props1.setProperty("test.config.mode", ConfigMode.DEFAULT.name()); + props1.setProperty(FileHandler.class.getName() + ".pattern", PREFIX); + props1.setProperty(FileHandler.class.getName() + ".limit", String.valueOf(Integer.MAX_VALUE)); + props1.setProperty(FileHandler.class.getName() + ".level", "ALL"); + props1.setProperty(FileHandler.class.getName() + ".formatter", "java.util.logging.SimpleFormatter"); + props1.setProperty("com.foo.handlers", FileHandler.class.getName()); + props1.setProperty("com.bar.level", "FINEST"); + + Properties props2 = new Properties(); + props2.setProperty("test.name", "parent logger with handler"); + props2.setProperty("test.config.mode", ConfigMode.ENSURE_CLOSE_ON_RESET_TRUE.name()); + props2.setProperty(FileHandler.class.getName() + ".pattern", PREFIX); + props2.setProperty(FileHandler.class.getName() + ".limit", String.valueOf(Integer.MAX_VALUE)); + props2.setProperty(FileHandler.class.getName() + ".level", "ALL"); + props2.setProperty(FileHandler.class.getName() + ".formatter", "java.util.logging.SimpleFormatter"); + props2.setProperty("com.foo.handlers", FileHandler.class.getName()); + props2.setProperty("com.foo.handlers.ensureCloseOnReset", "true"); + props2.setProperty("com.bar.level", "FINEST"); + + Properties props3 = new Properties(); + props3.setProperty("test.name", "parent logger with handler"); + props3.setProperty("test.config.mode", ConfigMode.ENSURE_CLOSE_ON_RESET_FALSE.name()); + props3.setProperty(FileHandler.class.getName() + ".pattern", PREFIX); + props3.setProperty(FileHandler.class.getName() + ".limit", String.valueOf(Integer.MAX_VALUE)); + props3.setProperty(FileHandler.class.getName() + ".level", "ALL"); + props3.setProperty(FileHandler.class.getName() + ".formatter", "java.util.logging.SimpleFormatter"); + props3.setProperty("com.foo.handlers", FileHandler.class.getName()); + props3.setProperty("com.foo.handlers.ensureCloseOnReset", "false"); + props3.setProperty("com.bar.level", "FINEST"); + + properties = Collections.unmodifiableList(Arrays.asList( + props1, props2, props3)); + } + + public static void main(String... args) throws Exception { + + + if (args == null || args.length == 0) { + args = new String[] { + TestCase.UNSECURE.name(), + TestCase.SECURE.name(), + }; + } + + try { + for (String testName : args) { + for (Properties propertyFile : properties) { + TestCase test = TestCase.valueOf(testName); + test.run(propertyFile); + } + } + } finally { + if (userDirWritable) { + Configure.doPrivileged(() -> { + // cleanup - delete files that have been created + try { + Files.list(Paths.get(userDir)) + .filter((f) -> f.toString().contains(PREFIX)) + .forEach((f) -> { + try { + System.out.println("deleting " + f); + Files.delete(f); + } catch(Throwable t) { + System.err.println("Failed to delete " + f + ": " + t); + } + }); + } catch(Throwable t) { + System.err.println("Cleanup failed to list files: " + t); + t.printStackTrace(); + } + }); + } + } + } + + static class Configure { + static Policy policy = null; + static final AtomicBoolean allowAll = new AtomicBoolean(false); + static void setUp(TestCase test, Properties propertyFile) { + switch (test) { + case SECURE: + if (policy == null && System.getSecurityManager() != null) { + throw new IllegalStateException("SecurityManager already set"); + } else if (policy == null) { + policy = new SimplePolicy(TestCase.SECURE, allowAll); + Policy.setPolicy(policy); + System.setSecurityManager(new SecurityManager()); + } + if (System.getSecurityManager() == null) { + throw new IllegalStateException("No SecurityManager."); + } + if (policy == null) { + throw new IllegalStateException("policy not configured"); + } + break; + case UNSECURE: + if (System.getSecurityManager() != null) { + throw new IllegalStateException("SecurityManager already set"); + } + break; + default: + new InternalError("No such testcase: " + test); + } + doPrivileged(() -> { + try { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + propertyFile.store(bytes, propertyFile.getProperty("test.name")); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes.toByteArray()); + LogManager.getLogManager().readConfiguration(bais); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + }); + } + static void doPrivileged(Runnable run) { + allowAll.set(true); + try { + run.run(); + } finally { + allowAll.set(false); + } + } + static T callPrivileged(Callable call) throws Exception { + allowAll.set(true); + try { + return call.call(); + } finally { + allowAll.set(false); + } + } + } + + @FunctionalInterface + public static interface FileHandlerSupplier { + public FileHandler test() throws Exception; + } + + static final class TestAssertException extends RuntimeException { + TestAssertException(String msg) { + super(msg); + } + } + + private static void assertEquals(long expected, long received, String msg) { + if (expected != received) { + throw new TestAssertException("Unexpected result for " + msg + + ".\n\texpected: " + expected + + "\n\tactual: " + received); + } else { + System.out.println("Got expected " + msg + ": " + received); + } + } + + + public static void test(String name, Properties props) throws Exception { + ConfigMode configMode = ConfigMode.valueOf(props.getProperty("test.config.mode")); + System.out.println("\nTesting: " + name + " mode=" + configMode); + if (!userDirWritable) { + throw new RuntimeException("Not writable: "+userDir); + } + switch(configMode) { + case DEFAULT: + case ENSURE_CLOSE_ON_RESET_TRUE: + testCloseOnResetTrue(name, props); break; + case ENSURE_CLOSE_ON_RESET_FALSE: + testCloseOnResetFalse(name, props); break; + default: + throw new RuntimeException("Unknwown mode: " + configMode); + } + } + + + // Test a configuration which has either + // com.foo.handlers.ensureCloseOnReset=true, or where + // com.foo.handlers.ensureCloseOnReset is not specified. + public static void testCloseOnResetTrue(String name, Properties props) + throws Exception { + Logger fooChild = Logger.getLogger("com.foo.child"); + fooChild.info("hello world"); + Logger barChild = Logger.getLogger("com.bar.child"); + barChild.info("hello world"); + + ReferenceQueue queue = new ReferenceQueue(); + WeakReference fooRef = new WeakReference<>(Logger.getLogger("com.foo"), queue); + if (fooRef.get() != fooChild.getParent()) { + throw new RuntimeException("Unexpected parent logger: " + + fooChild.getParent() +"\n\texpected: " + fooRef.get()); + } + WeakReference barRef = new WeakReference<>(Logger.getLogger("com.bar"), queue); + if (barRef.get() != barChild.getParent()) { + throw new RuntimeException("Unexpected parent logger: " + + barChild.getParent() +"\n\texpected: " + barRef.get()); + } + fooChild = barChild = null; + Reference ref2 = null; + while ((ref2 = queue.poll()) == null) { + System.gc(); + Thread.sleep(1000); + } + Throwable failed = null; + try { + do { + if (ref2 != barRef) { + throw new RuntimeException("Unexpected reference: " + + ref2 +"\n\texpected: " + barRef); + } + if (ref2.get() != null) { + throw new RuntimeException("Referent not cleared: " + + ref2.get()); + } + System.out.println("Got barRef"); + System.gc(); + Thread.sleep(1000); + } while( (ref2 = queue.poll()) != null); + System.out.println("Parent logger GCed"); + } catch(Throwable t) { + failed = t; + } finally { + final Throwable suppressed = failed; + Configure.doPrivileged(() -> LogManager.getLogManager().reset()); + Configure.doPrivileged(() -> { + try { + StringBuilder builder = new StringBuilder(); + Files.list(Paths.get(userDir)) + .filter((f) -> f.toString().contains(PREFIX)) + .filter((f) -> f.toString().endsWith(".lck")) + .forEach((f) -> { + builder.append(f.toString()).append('\n'); + }); + if (!builder.toString().isEmpty()) { + throw new RuntimeException("Lock files not cleaned:\n" + + builder.toString()); + } + } catch(RuntimeException | Error x) { + if (suppressed != null) x.addSuppressed(suppressed); + throw x; + } catch(Exception x) { + if (suppressed != null) x.addSuppressed(suppressed); + throw new RuntimeException(x); + } + }); + while ((ref2 = queue.poll()) == null) { + System.gc(); + Thread.sleep(1000); + } + if (ref2 != fooRef) { + throw new RuntimeException("Unexpected reference: " + + ref2 +"\n\texpected: " + fooRef); + } + if (ref2.get() != null) { + throw new RuntimeException("Referent not cleared: " + ref2.get()); + } + System.out.println("Got fooRef after reset()"); + + } + if (failed != null) { + // should rarely happen... + throw new RuntimeException(failed); + } + + } + + private static Handler getHandlerToClose() throws Exception { + return Configure.callPrivileged( + () -> Logger.getLogger("com.foo.child").getParent().getHandlers()[0]); + } + + // Test a configuration which has com.foo.handlers.ensureCloseOnReset=false + public static void testCloseOnResetFalse(String name, Properties props) + throws Exception { + Logger fooChild = Logger.getLogger("com.foo.child"); + fooChild.info("hello world"); + Logger barChild = Logger.getLogger("com.bar.child"); + barChild.info("hello world"); + + Handler toClose = getHandlerToClose(); + + ReferenceQueue queue = new ReferenceQueue(); + WeakReference fooRef = new WeakReference<>(Logger.getLogger("com.foo"), queue); + if (fooRef.get() != fooChild.getParent()) { + throw new RuntimeException("Unexpected parent logger: " + + fooChild.getParent() +"\n\texpected: " + fooRef.get()); + } + WeakReference barRef = new WeakReference<>(Logger.getLogger("com.bar"), queue); + if (barRef.get() != barChild.getParent()) { + throw new RuntimeException("Unexpected parent logger: " + + barChild.getParent() +"\n\texpected: " + barRef.get()); + } + fooChild = barChild = null; + Reference ref2 = null; + Set> expectedRefs = new HashSet<>(Arrays.asList(fooRef, barRef)); + Throwable failed = null; + try { + int l=0; + while (failed == null && !expectedRefs.isEmpty()) { + int max = 60; + while ((ref2 = queue.poll()) == null) { + if (l > 0 && max-- <= 0) { + throw new RuntimeException("Logger #2 not GC'ed!" + + " max too short (max=60) or " + + "com.foo.handlers.ensureCloseOnReset=false" + + " does not work"); + } + System.gc(); + Thread.sleep(1000); + } + do { + if (!expectedRefs.contains(ref2)) { + throw new RuntimeException("Unexpected reference: " + + ref2 +"\n\texpected: " + expectedRefs); + } + if (ref2.get() != null) { + throw new RuntimeException("Referent not cleared: " + + ref2.get()); + } + expectedRefs.remove(ref2); + System.out.println("Got "+ + (ref2 == barRef ? "barRef" + : (ref2 == fooRef ? "fooRef" + : ref2.toString()))); + System.gc(); + Thread.sleep(1000); + System.out.println("Logger #" + (++l) + " GCed"); + } while( (ref2 = queue.poll()) != null); + } + } catch(Throwable t) { + failed = t; + } finally { + final Throwable suppressed = failed; + Configure.doPrivileged(() -> LogManager.getLogManager().reset()); + Configure.doPrivileged(() -> { + try { + toClose.close(); + StringBuilder builder = new StringBuilder(); + Files.list(Paths.get(userDir)) + .filter((f) -> f.toString().contains(PREFIX)) + .filter((f) -> f.toString().endsWith(".lck")) + .forEach((f) -> { + builder.append(f.toString()).append('\n'); + }); + if (!builder.toString().isEmpty()) { + throw new RuntimeException("Lock files not cleaned:\n" + builder.toString()); + } + } catch(RuntimeException | Error x) { + if (suppressed != null) x.addSuppressed(suppressed); + throw x; + } catch(Exception x) { + if (suppressed != null) x.addSuppressed(suppressed); + throw new RuntimeException(x); + } + }); + } + if (failed != null) { + // should rarely happen... + throw new RuntimeException(failed); + } + + } + + + final static class PermissionsBuilder { + final Permissions perms; + public PermissionsBuilder() { + this(new Permissions()); + } + public PermissionsBuilder(Permissions perms) { + this.perms = perms; + } + public PermissionsBuilder add(Permission p) { + perms.add(p); + return this; + } + public PermissionsBuilder addAll(PermissionCollection col) { + if (col != null) { + for (Enumeration e = col.elements(); e.hasMoreElements(); ) { + perms.add(e.nextElement()); + } + } + return this; + } + public Permissions toPermissions() { + final PermissionsBuilder builder = new PermissionsBuilder(); + builder.addAll(perms); + return builder.perms; + } + } + + public static class SimplePolicy extends Policy { + + final Permissions permissions; + final Permissions allPermissions; + final AtomicBoolean allowAll; + public SimplePolicy(TestCase test, AtomicBoolean allowAll) { + this.allowAll = allowAll; + permissions = new Permissions(); + permissions.add(new LoggingPermission("control", null)); + permissions.add(new FilePermission(PREFIX+".lck", "read,write,delete")); + permissions.add(new FilePermission(PREFIX, "read,write")); + + // these are used for configuring the test itself... + allPermissions = new Permissions(); + allPermissions.add(new java.security.AllPermission()); + + } + + @Override + public boolean implies(ProtectionDomain domain, Permission permission) { + if (allowAll.get()) return allPermissions.implies(permission); + return permissions.implies(permission); + } + + @Override + public PermissionCollection getPermissions(CodeSource codesource) { + return new PermissionsBuilder().addAll(allowAll.get() + ? allPermissions : permissions).toPermissions(); + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain domain) { + return new PermissionsBuilder().addAll(allowAll.get() + ? allPermissions : permissions).toPermissions(); + } + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/zip/ChecksumBase.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/zip/ChecksumBase.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Base class for Checksum tests + */ +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; +import java.util.zip.Checksum; + +public class ChecksumBase { + + private final static byte[] BYTES_123456789 = "123456789".getBytes(StandardCharsets.US_ASCII); + + public static void testAll(Checksum checksum, long expected) { + testBytes(checksum, expected); + testByteArray(checksum, expected); + testWrappedByteBuffer(checksum, expected); + testReadonlyByteBuffer(checksum, expected); + testDirectByteBuffer(checksum, expected); + testByteArrayOffset(checksum, expected); + testDirectByteBufferOffset(checksum, expected); + testLittleEndianDirectByteBufferOffset(checksum, expected); + testWrappedByteBufferOffset(checksum, expected); + testLittleEndianWrappedByteBufferOffset(checksum, expected); + testReadonlyByteBufferOffset(checksum, expected); + testLittleEndianReadonlyByteBufferOffset(checksum, expected); + } + + private static void testBytes(Checksum checksum, long expected) { + checksum.reset(); + for (byte bits : BYTES_123456789) { + checksum.update(bits); + } + checkChecksum(checksum, expected); + } + + private static void testByteArray(Checksum checksum, long expected) { + checksum.reset(); + checksum.update(BYTES_123456789); + checkChecksum(checksum, expected); + } + + private static void testWrappedByteBuffer(Checksum checksum, long expected) { + checksum.reset(); + ByteBuffer bb = ByteBuffer.wrap(BYTES_123456789); + checksum.update(bb); + checkChecksum(checksum, expected); + } + + private static void testReadonlyByteBuffer(Checksum checksum, long expected) { + checksum.reset(); + ByteBuffer bb = ByteBuffer.wrap(BYTES_123456789).asReadOnlyBuffer(); + checksum.update(bb); + checkChecksum(checksum, expected); + } + + private static void testDirectByteBuffer(Checksum checksum, long expected) { + checksum.reset(); + ByteBuffer bb = ByteBuffer.allocateDirect(BYTES_123456789.length); + bb.put(BYTES_123456789); + bb.rewind(); + checksum.update(bb); + checkChecksum(checksum, expected); + } + + private static void checkChecksum(Checksum checksum, long expected) { + if (checksum.getValue() != expected) { + throw new RuntimeException("Calculated checksum result was invalid." + + " Expected " + Long.toHexString(expected) + + ", but got " + Long.toHexString(checksum.getValue()) + "."); + } + } + + private static void testByteArrayOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + checksum.update(unaligned_bytes_123456789, i, BYTES_123456789.length); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void testDirectByteBufferOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + ByteBuffer bb = ByteBuffer.allocateDirect(unaligned_bytes_123456789.length); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + bb.put(unaligned_bytes_123456789); + bb.position(i); + bb.limit(i + BYTES_123456789.length); + checksum.update(bb); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void testLittleEndianDirectByteBufferOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + ByteBuffer bb = ByteBuffer.allocateDirect(unaligned_bytes_123456789.length); + bb.order(ByteOrder.LITTLE_ENDIAN); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + bb.put(unaligned_bytes_123456789); + bb.position(i); + bb.limit(i + BYTES_123456789.length); + checksum.update(bb); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void testWrappedByteBufferOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + ByteBuffer bb = ByteBuffer.wrap(unaligned_bytes_123456789); + bb.position(i); + bb.limit(i + BYTES_123456789.length); + checksum.update(bb); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void testLittleEndianWrappedByteBufferOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + ByteBuffer bb = ByteBuffer.wrap(unaligned_bytes_123456789); + bb.order(ByteOrder.LITTLE_ENDIAN); + bb.position(i); + bb.limit(i + BYTES_123456789.length); + checksum.update(bb); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void testReadonlyByteBufferOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + ByteBuffer bb = ByteBuffer.wrap(unaligned_bytes_123456789).asReadOnlyBuffer(); + bb.position(i); + bb.limit(i + BYTES_123456789.length); + checksum.update(bb); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void testLittleEndianReadonlyByteBufferOffset(Checksum checksum, long expected) { + byte[] unaligned_bytes_123456789 = new byte[BYTES_123456789.length + 64]; + for (int i = 0; i < unaligned_bytes_123456789.length - BYTES_123456789.length; i++) { + checksum.reset(); + System.arraycopy(BYTES_123456789, 0, unaligned_bytes_123456789, i, BYTES_123456789.length); + ByteBuffer bb = ByteBuffer.wrap(unaligned_bytes_123456789).asReadOnlyBuffer(); + bb.order(ByteOrder.LITTLE_ENDIAN); + bb.position(i); + bb.limit(i + BYTES_123456789.length); + checksum.update(bb); + checkChecksumOffset(checksum, expected, i); + } + } + + private static void checkChecksumOffset(Checksum checksum, long expected, int offset) { + if (checksum.getValue() != expected) { + throw new RuntimeException("Calculated CRC32C result was invalid. Array offset " + + offset + ". Expected: " + Long.toHexString(expected) + ", Got: " + + Long.toHexString(checksum.getValue())); + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/zip/TestCRC32.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/zip/TestCRC32.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,40 @@ + +import java.util.zip.CRC32; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test @summary Check that CRC-32 returns the expected CRC value for the + * string 123456789 + * http://reveng.sourceforge.net/crc-catalogue/all.htm#crc.cat.crc-32 + * @build ChecksumBase + * @run main TestCRC32 + */ + +public class TestCRC32 { + + public static void main(String[] args) { + ChecksumBase.testAll(new CRC32(), 0xCBF43926L); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/zip/TestCRC32C.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/zip/TestCRC32C.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,40 @@ + +import java.util.zip.CRC32C; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test @summary Check that CRC-32C returns the expected CRC value for the + * string 123456789 + * http://reveng.sourceforge.net/crc-catalogue/all.htm#crc.cat.crc-32c + * @build ChecksumBase + * @run main TestCRC32C + */ + +public class TestCRC32C { + + public static void main(String[] args) { + ChecksumBase.testAll(new CRC32C(), 0xE3069283L); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/java/util/zip/TestChecksum.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/zip/TestChecksum.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test @summary Test that default methods in Checksum works as expected + * @build ChecksumBase + * @run main TestChecksum + */ +import java.util.zip.CRC32C; +import java.util.zip.Checksum; + +public class TestChecksum { + + public static void main(String[] args) { + ChecksumBase.testAll(new MyCRC32C(), 0xE3069283L); + } + + /** + * Only implementing required methods + */ + private static class MyCRC32C implements Checksum { + + private final CRC32C crc32c = new CRC32C(); + + @Override + public void update(int b) { + crc32c.update(b); + } + + @Override + public void update(byte[] b, int off, int len) { + crc32c.update(b, off, len); + } + + @Override + public long getValue() { + return crc32c.getValue(); + } + + @Override + public void reset() { + crc32c.reset(); + } + + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/management/monitor/CounterMonitorTest.java --- a/jdk/test/javax/management/monitor/CounterMonitorTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/management/monitor/CounterMonitorTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ * @bug 4981829 * @summary Test that the counter monitor, when running in difference mode, * emits a notification every time the threshold is exceeded. - * @author Luis-Miguel Alventosa + * @author Luis-Miguel Alventosa, Shanliang JIANG * @run clean CounterMonitorTest * @run build CounterMonitorTest * @run main CounterMonitorTest @@ -50,23 +50,31 @@ private boolean notifyFlag = true; // granularity period - private int granularityperiod = 500; + private int granularityperiod = 10; - // counter values - private int[] values = new int[] {4, 6, 9, 11}; + // derived gauge + private volatile int derivedGauge = 2; // flag to notify that a message has been received private volatile boolean messageReceived = false; + private volatile Object observedValue = null; + // MBean class public class StdObservedObject implements StdObservedObjectMBean { public Object getNbObjects() { + echo(">>> StdObservedObject.getNbObjects: " + count); + synchronized(CounterMonitorTest.class) { + observedValue = count; + CounterMonitorTest.class.notifyAll(); + } return count; } public void setNbObjects(Object n) { + echo(">>> StdObservedObject.setNbObjects: " + n); count = n; } - private Object count= null; + private volatile Object count= null; } // MBean interface @@ -166,18 +174,18 @@ Attribute attrib = new Attribute("NbObjects", data); server.setAttribute(stdObsObjName, attrib); - // Wait for granularity period (multiplied by 2 for sure) - // - Thread.sleep(granularityperiod * 2); + waitObservation(data); // Loop through the values // - for (int i = 0; i < values.length; i++) { - data = new Integer(values[i]); - echo(">>> Set data = " + data.intValue()); + while (derivedGauge++ < 10) { + System.out.print(">>> Set data from " + data.intValue()); + data = new Integer(data.intValue() + derivedGauge); + echo(" to " + data.intValue()); attrib = new Attribute("NbObjects", data); server.setAttribute(stdObsObjName, attrib); + waitObservation(data); echo("\tdoWait in Counter Monitor"); doWait(); @@ -214,6 +222,20 @@ } } + private void waitObservation(Object value) { + synchronized (CounterMonitorTest.class) { + while (value != observedValue) { + try { + CounterMonitorTest.class.wait(); + } catch (InterruptedException e) { + System.err.println("Got unexpected exception: " + e); + e.printStackTrace(); + break; + } + } + } + } + /* * Print message */ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/net/ssl/sanity/ciphersuites/CipherSuitesInOrder.java --- a/jdk/test/javax/net/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/net/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Wed Dec 03 19:28:35 2014 +0000 @@ -85,11 +85,6 @@ "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDHE_RSA_WITH_RC4_128_SHA", - "SSL_RSA_WITH_RC4_128_SHA", - "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDH_RSA_WITH_RC4_128_SHA", "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", @@ -98,6 +93,12 @@ "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", + + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDHE_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_RC4_128_SHA", + "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDH_RSA_WITH_RC4_128_SHA", "SSL_RSA_WITH_RC4_128_MD5", "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", @@ -111,10 +112,23 @@ "TLS_DH_anon_WITH_AES_128_CBC_SHA256", "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", "TLS_DH_anon_WITH_AES_128_CBC_SHA", + "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", + "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", "TLS_ECDH_anon_WITH_RC4_128_SHA", "SSL_DH_anon_WITH_RC4_128_MD5", - "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", - "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", + + "SSL_RSA_WITH_DES_CBC_SHA", + "SSL_DHE_RSA_WITH_DES_CBC_SHA", + "SSL_DHE_DSS_WITH_DES_CBC_SHA", + "SSL_DH_anon_WITH_DES_CBC_SHA", + "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", + "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", + "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", + "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", + + "SSL_RSA_EXPORT_WITH_RC4_40_MD5", + "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", + "TLS_RSA_WITH_NULL_SHA256", "TLS_ECDHE_ECDSA_WITH_NULL_SHA", "TLS_ECDHE_RSA_WITH_NULL_SHA", @@ -123,26 +137,17 @@ "TLS_ECDH_RSA_WITH_NULL_SHA", "TLS_ECDH_anon_WITH_NULL_SHA", "SSL_RSA_WITH_NULL_MD5", - "SSL_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_DSS_WITH_DES_CBC_SHA", - "SSL_DH_anon_WITH_DES_CBC_SHA", - "SSL_RSA_EXPORT_WITH_RC4_40_MD5", - "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", + + "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", + "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", "TLS_KRB5_WITH_RC4_128_SHA", "TLS_KRB5_WITH_RC4_128_MD5", - "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", - "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", "TLS_KRB5_WITH_DES_CBC_SHA", "TLS_KRB5_WITH_DES_CBC_MD5", + "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", + "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", - "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", - "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5" + "TLS_KRB5_EXPORT_WITH_RC4_40_MD5" ); private final static String[] protocols = { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/sql/testng/test/rowset/BaseRowSetTests.java --- a/jdk/test/javax/sql/testng/test/rowset/BaseRowSetTests.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/sql/testng/test/rowset/BaseRowSetTests.java Wed Dec 03 19:28:35 2014 +0000 @@ -186,11 +186,11 @@ } /* - * Validate that getEscapeProcessing() returns false by default + * Validate that getEscapeProcessing() returns true by default */ @Test public void test08() throws Exception { - assertFalse(brs.getEscapeProcessing()); + assertTrue(brs.getEscapeProcessing()); } /* diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/DataTransfer/8059739/bug8059739.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/DataTransfer/8059739/bug8059739.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 8059739 + @summary Dragged and Dropped data is corrupted for two data types + @author Anton Nashatyrev +*/ + +import javax.swing.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class bug8059739 { + + private static boolean passed = true; + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + try { + runTest(); + } catch (Exception e) { + e.printStackTrace(); + passed = false; + } + } + }); + + if (!passed) { + throw new RuntimeException("Test FAILED."); + } else { + System.out.println("Passed."); + } + } + + private static void runTest() throws Exception { + String testString = "my string"; + JTextField tf = new JTextField(testString); + tf.selectAll(); + Clipboard clipboard = new Clipboard("clip"); + tf.getTransferHandler().exportToClipboard(tf, clipboard, TransferHandler.COPY); + DataFlavor[] dfs = clipboard.getAvailableDataFlavors(); + for (DataFlavor df: dfs) { + String charset = df.getParameter("charset"); + if (InputStream.class.isAssignableFrom(df.getRepresentationClass()) && + charset != null) { + BufferedReader br = new BufferedReader(new InputStreamReader( + (InputStream) clipboard.getData(df), charset)); + String s = br.readLine(); + System.out.println("Content: '" + s + "'"); + passed &= s.contains(testString); + } + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java --- a/jdk/test/javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,12 +31,13 @@ import javax.swing.JFrame; import javax.swing.SwingUtilities; -import sun.awt.SunToolkit; - /** * @test * @bug 8009919 * @author Sergey Bylokhov + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main JButtonPaintNPE */ public final class JButtonPaintNPE { @@ -69,9 +70,11 @@ private static void sleep() { try { - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); - Thread.sleep(1000); - } catch (final InterruptedException ignored) { - } + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(1000); + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JComboBox/6406264/bug6406264.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JComboBox/6406264/bug6406264.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 6406264 + @summary Tests that JComboBox's focusable popup can be shown. + @author Mikhail Lapshin + @run main bug6406264 + */ + +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import javax.swing.plaf.basic.BasicComboBoxUI; +import javax.swing.plaf.basic.ComboPopup; +import javax.swing.plaf.basic.BasicComboPopup; +import java.awt.*; + +public class bug6406264 extends JComboBox { + + static JFrame frame; + static bug6406264 comboBox; + + public static void main(String[] args) throws Exception { + + Robot robot = new Robot(); + // Setup and show frame + SwingUtilities.invokeAndWait( + new Runnable() { + public void run() { + frame = new JFrame("JComboBox6406264 test"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + comboBox = new bug6406264("One", "Two", "Three"); + frame.getContentPane().add(comboBox); + + frame.setLocationRelativeTo(null); + frame.pack(); + frame.setVisible(true); + } + } + ); + + robot.waitForIdle(); + + // Show popup + SwingUtilities.invokeAndWait( + new Runnable() { + public void run() { + comboBox.showPopup(); + } + }); + robot.waitForIdle(); + + // Check that popup is visible + SwingUtilities.invokeAndWait( + new Runnable() { + public void run() { + if (comboBox.getUI().isPopupVisible(comboBox) == false) + { + throw new RuntimeException("A focusable popup is not visible " + + "in JComboBox!"); + } + } + } + ); + + frame.dispose(); + } + + public bug6406264(Object ... items) { + super(items); + } + + public void updateUI() { + setUI(new CustomComboBoxUI()); + } + + // Use FocusablePopup for our JComboBox + private class CustomComboBoxUI extends BasicComboBoxUI { + protected ComboPopup createPopup() { + return new FocusablePopup(bug6406264.this); + } + } + + // Popup window which can take a focus + private class FocusablePopup extends BasicComboPopup { + public FocusablePopup(JComboBox combo) { + super(combo); + } + + public boolean isFocusable() { + return true; + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JComboBox/8015300/Test8015300.java --- a/jdk/test/javax/swing/JComboBox/8015300/Test8015300.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JComboBox/8015300/Test8015300.java Wed Dec 03 19:28:35 2014 +0000 @@ -41,10 +41,13 @@ * @bug 8015300 * @summary Tests that editable combobox select all text * @author Sergey Malenkov + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main Test8015300 */ public class Test8015300 { - private static final SunToolkit STK = (SunToolkit) Toolkit.getDefaultToolkit(); + private static final ExtendedRobot robot = createRobot(); private static final String[] ITEMS = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; @@ -113,7 +116,15 @@ combo.setSelectedIndex(index); } }); - STK.realSync(); - Thread.sleep(50L); + robot.waitForIdle(50); + } + private static ExtendedRobot createRobot() { + try { + ExtendedRobot robot = new ExtendedRobot(); + return robot; + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JComboBox/ShowPopupAfterHidePopupTest/ShowPopupAfterHidePopupTest.java --- a/jdk/test/javax/swing/JComboBox/ShowPopupAfterHidePopupTest/ShowPopupAfterHidePopupTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JComboBox/ShowPopupAfterHidePopupTest/ShowPopupAfterHidePopupTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -25,6 +25,7 @@ @bug 8006417 @summary JComboBox.showPopup(), hidePopup() fails in JRE 1.7 on OS X @author Anton Litvinov + @run main ShowPopupAfterHidePopupTest */ import java.awt.*; @@ -32,8 +33,6 @@ import javax.swing.*; import javax.swing.plaf.metal.*; -import sun.awt.SunToolkit; - public class ShowPopupAfterHidePopupTest { private static JFrame frame = null; private static JComboBox comboBox = null; @@ -41,6 +40,7 @@ public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(new MetalLookAndFeel()); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { @@ -51,8 +51,7 @@ frame.setVisible(true); } }); - final SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit(); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -62,7 +61,7 @@ comboBox.showPopup(); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JComponent/6989617/bug6989617.java --- a/jdk/test/javax/swing/JComponent/6989617/bug6989617.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JComponent/6989617/bug6989617.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,8 +28,6 @@ @run main bug6989617 */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; @@ -38,7 +36,7 @@ private static JButton button; public static void main(String... args) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { JFrame frame = new JFrame(); @@ -56,14 +54,14 @@ // Testing the panel as a painting origin, // the panel.paintImmediately() must be triggered // when button.repaint() is called - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { panel.resetPaintRectangle(); button.repaint(); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { Rectangle pr = panel.getPaintRectangle(); @@ -78,7 +76,7 @@ // Testing the panel as NOT a painting origin // the panel.paintImmediately() must NOT be triggered // when button.repaint() is called - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { panel.resetPaintRectangle(); @@ -89,7 +87,7 @@ button.repaint(); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { if(panel.getPaintRectangle() != null) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java --- a/jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java Wed Dec 03 19:28:35 2014 +0000 @@ -25,10 +25,9 @@ * @bug 4492274 * @summary Tests if JEditorPane.getPage() correctly returns anchor reference. * @author Denis Sharypov + * @run main bug4492274 */ -import sun.awt.SunToolkit; - import javax.swing.*; import javax.swing.text.html.HTMLEditorKit; import java.awt.*; @@ -42,8 +41,8 @@ private static JEditorPane jep; public static void main(String args[]) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { @@ -51,7 +50,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -65,7 +64,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); if (getPageAnchor() == null) { throw new RuntimeException("JEditorPane.getPage() returns null anchor reference"); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java --- a/jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java Wed Dec 03 19:28:35 2014 +0000 @@ -24,6 +24,8 @@ @bug 4251301 @summary Keybinding for show/hide the system menu. @author Andrey Pikalev + @library ../../../../lib/testlibrary + @build jdk.testlibrary.OSInfo @run main/manual bug4251301 */ @@ -32,12 +34,10 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.*; -import sun.awt.OSInfo; -import sun.awt.SunToolkit; +import jdk.testlibrary.OSInfo; public class bug4251301 { - private static final SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); static Test test = new Test(); public static void main(String[] args) throws Exception { if (OSInfo.getOSType() == OSInfo.OSType.MACOSX) { @@ -50,7 +50,8 @@ createAndShowGUI(); } }); - toolkit.realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); test.waitTestResult(); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JInternalFrame/6647340/bug6647340.java --- a/jdk/test/javax/swing/JInternalFrame/6647340/bug6647340.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JInternalFrame/6647340/bug6647340.java Wed Dec 03 19:28:35 2014 +0000 @@ -26,10 +26,11 @@ * @summary Checks that iconified internal frame follows * the main frame borders properly. * @author Mikhail Lapshin + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main bug6647340 */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; import java.beans.PropertyVetoException; @@ -38,6 +39,7 @@ private JFrame frame; private Point location; private JInternalFrame jif; + private static ExtendedRobot robot = createRobot(); public static void main(String[] args) throws Exception { final bug6647340 test = new bug6647340(); @@ -74,13 +76,13 @@ } private void test() throws Exception { - realSync(); + sync(); test1(); - realSync(); + sync(); check1(); - realSync(); + sync(); test2(); - realSync(); + sync(); check2(); } @@ -101,14 +103,14 @@ setIcon(false); } }); - realSync(); + sync(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { Dimension size = frame.getSize(); frame.setSize(size.width - 100, size.height - 100); } }); - realSync(); + sync(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { setIcon(true); @@ -132,8 +134,17 @@ } } - private static void realSync() { - ((SunToolkit) (Toolkit.getDefaultToolkit())).realSync(); + private static void sync() { + robot.waitForIdle(); + } + private static ExtendedRobot createRobot() { + try { + ExtendedRobot robot = new ExtendedRobot(); + return robot; + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } } private void setIcon(boolean b) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JInternalFrame/6725409/bug6725409.java --- a/jdk/test/javax/swing/JInternalFrame/6725409/bug6725409.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JInternalFrame/6725409/bug6725409.java Wed Dec 03 19:28:35 2014 +0000 @@ -26,6 +26,9 @@ * @summary Checks that JInternalFrame's system menu * can be localized during run-time * @author Mikhail Lapshin + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main bug6725409 */ import javax.swing.*; @@ -36,6 +39,7 @@ private JInternalFrame iFrame; private TestTitlePane testTitlePane; private boolean passed; + private static ExtendedRobot robot = createRobot(); public static void main(String[] args) throws Exception { try { @@ -53,19 +57,19 @@ bug6725409.setupUIStep1(); } }); - realSync(); + sync(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { bug6725409.setupUIStep2(); } }); - realSync(); + sync(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { bug6725409.test(); } }); - realSync(); + sync(); bug6725409.checkResult(); } finally { if (bug6725409.frame != null) { @@ -137,8 +141,17 @@ } } - private static void realSync() { - ((sun.awt.SunToolkit) (Toolkit.getDefaultToolkit())).realSync(); + private static void sync() { + robot.waitForIdle(); + } + private static ExtendedRobot createRobot() { + try { + ExtendedRobot robot = new ExtendedRobot(); + return robot; + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } } // Extend WindowsInternalFrameTitlePane to get access to systemPopupMenu diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JLayer/6824395/bug6824395.java --- a/jdk/test/javax/swing/JLayer/6824395/bug6824395.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JLayer/6824395/bug6824395.java Wed Dec 03 19:28:35 2014 +0000 @@ -25,11 +25,12 @@ * @test * @summary Checks that JLayer inside JViewport works is correctly laid out * @author Alexander Potochkin + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot * @run main bug6824395 */ -import sun.awt.SunToolkit; import javax.swing.*; import javax.swing.plaf.LayerUI; @@ -40,7 +41,6 @@ static JScrollPane scrollPane; public static void main(String[] args) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { JFrame frame = new JFrame("testing"); @@ -68,7 +68,13 @@ frame.setVisible(true); } }); - toolkit.realSync(); + try { + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(300); + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } SwingUtilities.invokeAndWait(new Runnable() { public void run() { if (scrollPane.getViewportBorderBounds().width != scrollPane.getViewport().getView().getWidth()) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JPopupMenu/6583251/bug6583251.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JPopupMenu/6583251/bug6583251.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* +@test +@bug 6583251 +@summary One more ClassCastException in Swing with TrayIcon +@author Alexander Potochkin +@run main bug6583251 +*/ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; + +public class bug6583251 { + private static JFrame frame; + private static JPopupMenu menu; + + private static void createGui() { + frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + JPanel panel = new JPanel(); + menu = new JPopupMenu(); + menu.add(new JMenuItem("item")); + panel.setComponentPopupMenu(menu); + frame.add(panel); + + frame.setSize(200, 200); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + + public static void main(String[] args) throws Exception { + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + createGui(); + } + }); + + Robot robot = new Robot(); + robot.waitForIdle(); + menu.show(frame, 0, 0); + robot.waitForIdle(); + + TrayIcon trayIcon = new TrayIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)); + MouseEvent ev = new MouseEvent( + new JButton(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, 0, 0, 1, false); + ev.setSource(trayIcon); + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ev); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java --- a/jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,8 +31,6 @@ * @run main bug6691503 */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; @@ -93,7 +91,13 @@ } private void checkResult() { - ((SunToolkit)(Toolkit.getDefaultToolkit())).realSync(); + try { + Robot robot = new Robot(); + robot.waitForIdle(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } if (!isAlwaysOnTop1 || isAlwaysOnTop2) { throw new RuntimeException("Malicious applet can show always-on-top " + "popup menu which has whole screen size"); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JPopupMenu/6694823/bug6694823.java --- a/jdk/test/javax/swing/JPopupMenu/6694823/bug6694823.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JPopupMenu/6694823/bug6694823.java Wed Dec 03 19:28:35 2014 +0000 @@ -32,25 +32,25 @@ import javax.swing.*; import java.awt.*; -import sun.awt.SunToolkit; import java.security.Permission; -import sun.awt.AWTPermissions; public class bug6694823 { private static JFrame frame; private static JPopupMenu popup; - private static SunToolkit toolkit; + private static Toolkit toolkit; private static Insets screenInsets; + private static Robot robot; public static void main(String[] args) throws Exception { - toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + robot = new Robot(); + toolkit = Toolkit.getDefaultToolkit(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { createGui(); } }); - toolkit.realSync(); + robot.waitForIdle(); // Get screen insets screenInsets = toolkit.getScreenInsets(frame.getGraphicsConfiguration()); @@ -61,12 +61,9 @@ System.setSecurityManager(new SecurityManager(){ - private String allowsAlwaysOnTopPermission = - AWTPermissions.SET_WINDOW_ALWAYS_ON_TOP_PERMISSION.getName(); - @Override public void checkPermission(Permission perm) { - if (allowsAlwaysOnTopPermission.equals(perm.getName())) { + if (perm.getName().equals("setWindowAlwaysOnTop") ) { throw new SecurityException(); } } @@ -107,7 +104,7 @@ }); // Ensure frame is visible - toolkit.realSync(); + robot.waitForIdle(); final Point point = new Point(); SwingUtilities.invokeAndWait(new Runnable() { @@ -120,7 +117,7 @@ }); // Ensure popup is visible - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JScrollBar/4865918/bug4865918.java --- a/jdk/test/javax/swing/JScrollBar/4865918/bug4865918.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JScrollBar/4865918/bug4865918.java Wed Dec 03 19:28:35 2014 +0000 @@ -33,15 +33,14 @@ import java.awt.*; import java.awt.event.*; import java.util.*; -import sun.awt.SunToolkit; public class bug4865918 { private static TestScrollBar sbar; public static void main(String[] argv) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { @@ -49,7 +48,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @@ -59,7 +58,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); int value = getValue(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JScrollPane/6274267/bug6274267.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JScrollPane/6274267/bug6274267.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 6274267 + @summary Checks that ScrollPaneLayout properly calculates preferred + layout size. + @author Mikhail Lapshin + @run main bug6274267 +*/ + +import javax.swing.*; +import java.awt.*; + +public class bug6274267 { + private JFrame frame; + private Component left; + + public static void main(String[] args) throws Exception { + final bug6274267 test = new bug6274267(); + Robot robot = new Robot(); + try { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + test.setupUI1(); + } + }); + robot.waitForIdle(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + test.setupUI2(); + } + }); + test.test(); + } finally { + if (test.frame != null) { + test.frame.dispose(); + } + } + } + + private void setupUI1() { + frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + left = new JPanel(); + left.setPreferredSize(new Dimension(100, 100)); + + JPanel rightPanel = new JPanel(); + rightPanel.setPreferredSize(new Dimension(100, 50)); + Component right = new JScrollPane(rightPanel); + + JSplitPane split = + new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right); + + frame = new JFrame(); + frame.add(split); + frame.pack(); + } + + // It is important to separate frame.pack() from frame.setVisible(true). + // Otherwise the repaint manager will combine validate() calls and + // the bug won't appear. + private void setupUI2() { + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + + private void test() throws Exception { + if (left.getSize().width == 100) { + System.out.println("Test passed"); + } else { + throw new RuntimeException("ScrollPaneLayout sometimes improperly " + + "calculates the preferred layout size. "); + } + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JSpinner/8008657/bug8008657.java --- a/jdk/test/javax/swing/JSpinner/8008657/bug8008657.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JSpinner/8008657/bug8008657.java Wed Dec 03 19:28:35 2014 +0000 @@ -22,7 +22,7 @@ */ import java.awt.ComponentOrientation; -import java.awt.Toolkit; +import java.awt.Robot; import java.util.Calendar; import java.util.Date; import javax.swing.JFrame; @@ -32,7 +32,6 @@ import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingUtilities; -import sun.awt.SunToolkit; /** * @test @@ -43,19 +42,19 @@ */ public class bug8008657 { - private static SunToolkit toolkit; + private static Robot robot; private static JSpinner spinner; public static void main(String[] args) throws Exception { - toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + robot = new Robot(); SwingUtilities.invokeAndWait(() -> { createDateSpinner(); createAndShowUI(); }); - toolkit.realSync(); + robot.waitForIdle(); testSpinner(false); SwingUtilities.invokeAndWait(() -> { @@ -63,7 +62,7 @@ createAndShowUI(); }); - toolkit.realSync(); + robot.waitForIdle(); testSpinner(true); } @@ -73,7 +72,7 @@ SwingUtilities.invokeAndWait(() -> { spinner.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(() -> { @@ -91,7 +90,7 @@ spinner.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(() -> { JTextField textField = getTextField(); @@ -152,4 +151,4 @@ frame.getContentPane().add(spinner); frame.setVisible(true); } -} \ No newline at end of file +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java --- a/jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java Wed Dec 03 19:28:35 2014 +0000 @@ -30,7 +30,6 @@ import javax.swing.*; import java.awt.*; import java.lang.reflect.*; -import sun.awt.SunToolkit; public class bug4816114 { @@ -46,14 +45,14 @@ static bug4816114 test = new bug4816114(); - public static void main(String[] args) throws InterruptedException, InvocationTargetException { + public static void main(String[] args) throws InterruptedException, InvocationTargetException, AWTException { SwingUtilities.invokeAndWait(new Runnable() { public void run() { test.createAndShowGUI(); } }); - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); - toolkit.realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); Thread.sleep(1000); Thread.sleep(2000); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JTabbedPane/7024235/Test7024235.java --- a/jdk/test/javax/swing/JTabbedPane/7024235/Test7024235.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JTabbedPane/7024235/Test7024235.java Wed Dec 03 19:28:35 2014 +0000 @@ -22,7 +22,6 @@ */ import java.awt.BorderLayout; -import sun.awt.SunToolkit; import java.awt.Container; import java.awt.Rectangle; @@ -41,7 +40,10 @@ * @test * @bug 7024235 * @summary Tests JFrame.pack() with the JTabbedPane + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot * @author Sergey Malenkov + * @run main Test7024235 */ public class Test7024235 implements Runnable { @@ -50,13 +52,17 @@ public static void main(String[] args) throws Exception { Test7024235 test = new Test7024235(); - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { UIManager.setLookAndFeel(info.getClassName()); test.test(); - toolkit.realSync(); - Thread.sleep(1000); + try { + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(1000); + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } test.test(); } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JTabbedPane/7170310/bug7170310.java --- a/jdk/test/javax/swing/JTabbedPane/7170310/bug7170310.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JTabbedPane/7170310/bug7170310.java Wed Dec 03 19:28:35 2014 +0000 @@ -34,13 +34,14 @@ import javax.swing.UIManager; import javax.swing.plaf.metal.MetalLookAndFeel; -import sun.awt.SunToolkit; /** * @test * @bug 7170310 * @author Alexey Ivanov * @summary Selected tab should be scrolled into view. + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot * @run main bug7170310 */ public class bug7170310 { @@ -58,12 +59,11 @@ UIManager.setLookAndFeel(new MetalLookAndFeel()); SwingUtilities.invokeAndWait(bug7170310::createAndShowUI); - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); - toolkit.realSync(); + sync(); for (int i = 0; i < TABS_NUMBER; i++) { SwingUtilities.invokeAndWait(bug7170310::addTab); - toolkit.realSync(); + sync(); } SwingUtilities.invokeAndWait(bug7170310::check); @@ -121,4 +121,13 @@ exception = e; } } + private static void sync() { + try { + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(300); + }catch(Exception ex) { + ex.printStackTrace(); + throw new Error("Unexpected Failure"); + } + } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JTabbedPane/8017284/bug8017284.java --- a/jdk/test/javax/swing/JTabbedPane/8017284/bug8017284.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JTabbedPane/8017284/bug8017284.java Wed Dec 03 19:28:35 2014 +0000 @@ -22,12 +22,12 @@ */ import java.awt.BorderLayout; import java.awt.Toolkit; +import java.awt.Robot; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import javax.swing.plaf.metal.MetalLookAndFeel; -import sun.awt.SunToolkit; /** * @test @@ -45,6 +45,7 @@ public static void main(String[] args) throws Exception { + Robot robot = new Robot(); SwingUtilities.invokeAndWait(() -> { frame = new JFrame(); frame.setSize(500, 500); @@ -61,7 +62,7 @@ frame.setVisible(true); }); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(() -> { for (int j = 0; j < ITERATIONS; j++) { @@ -70,7 +71,7 @@ } } }); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(() -> frame.dispose()); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JTable/8032874/bug8032874.java --- a/jdk/test/javax/swing/JTable/8032874/bug8032874.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JTable/8032874/bug8032874.java Wed Dec 03 19:28:35 2014 +0000 @@ -37,15 +37,13 @@ import javax.swing.table.AbstractTableModel; import javax.swing.table.TableRowSorter; -import sun.awt.SunToolkit; - public class bug8032874 { private static final int ROW_COUNT = 5; private static JTable table; private static TestTableModel tableModel; public static void main(String args[]) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -53,7 +51,7 @@ createAndShowUI(); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -63,7 +61,7 @@ table.setRowSelectionInterval(1, 2); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JTextArea/7049024/bug7049024.java --- a/jdk/test/javax/swing/JTextArea/7049024/bug7049024.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JTextArea/7049024/bug7049024.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,8 +31,6 @@ * @author Sean Chou */ -import sun.awt.SunToolkit; - import javax.swing.*; import javax.swing.text.DefaultCaret; import java.awt.*; @@ -53,7 +51,7 @@ public static void main(String[] args) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { @@ -70,7 +68,7 @@ frame.setVisible(true); } }); - toolkit.realSync(); + robot.waitForIdle(); clipboard = textField.getToolkit().getSystemSelection(); if (null == clipboard) { @@ -83,7 +81,7 @@ textField.requestFocusInWindow(); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -93,7 +91,7 @@ caret.moveDot(4); } }); - toolkit.realSync(); + robot.waitForIdle(); String oldSelection = (String) clipboard.getData(DataFlavor.stringFlavor); System.out.println("oldSelection is " + oldSelection); @@ -104,7 +102,7 @@ button.requestFocusInWindow(); } }); - toolkit.realSync(); // So JTextField loses the focus. + robot.waitForIdle(); // So JTextField loses the focus. SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -113,7 +111,7 @@ caret.moveDot(6); } }); - toolkit.realSync(); + robot.waitForIdle(); String newSelection = (String) clipboard.getData(DataFlavor.stringFlavor); System.out.println("newSelection is " + newSelection); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JToolBar/4529206/bug4529206.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JToolBar/4529206/bug4529206.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 4529206 + @summary JToolBar - setFloating does not work correctly + @author Konstantin Eremin + @run main bug4529206 +*/ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class bug4529206 extends JFrame { + static JFrame frame; + static JToolBar jToolBar1; + public bug4529206() { + setDefaultCloseOperation(EXIT_ON_CLOSE); + JPanel jPanFrame = (JPanel) this.getContentPane(); + jPanFrame.setLayout(new BorderLayout()); + this.setSize(new Dimension(200, 100)); + this.setLocation(125, 75); + this.setTitle("Test Floating Toolbar"); + jToolBar1 = new JToolBar(); + JButton jButton1 = new JButton("Float"); + jPanFrame.add(jToolBar1, BorderLayout.NORTH); + JTextField tf = new JTextField("click here"); + jPanFrame.add(tf); + jToolBar1.add(jButton1, null); + jButton1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + buttonPressed(e); + } + }); + makeToolbarFloat(); + setVisible(true); + } + + private void makeToolbarFloat() { + javax.swing.plaf.basic.BasicToolBarUI ui = (javax.swing.plaf.basic.BasicToolBarUI) jToolBar1.getUI(); + if (!ui.isFloating()) { + ui.setFloatingLocation(100, 100); + ui.setFloating(true, jToolBar1.getLocation()); + } + } + + private void buttonPressed(ActionEvent e) { + makeToolbarFloat(); + } + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + frame = new bug4529206(); + } + }); + Robot robot = new Robot(); + robot.waitForIdle(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + if (frame.isFocused()) { + throw (new RuntimeException("setFloating does not work correctly")); + } + } + }); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/JViewport/7107099/bug7107099.java --- a/jdk/test/javax/swing/JViewport/7107099/bug7107099.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/JViewport/7107099/bug7107099.java Wed Dec 03 19:28:35 2014 +0000 @@ -27,8 +27,6 @@ @author Pavel Porvatov */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; @@ -43,7 +41,8 @@ private static int extent; public static void main(String[] args) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + + java.awt.Robot robot = new java.awt.Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -61,7 +60,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -81,7 +80,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/Popup/6514582/bug6514582.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/Popup/6514582/bug6514582.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 6514582 + @summary SubMenu of a JMenu with no items paints a single pixel tiny menu. + @author Alexander Potochkin + @run main bug6514582 +*/ + +import javax.swing.*; +import java.awt.*; + +public class bug6514582 { + private static JPopupMenu popup; + + public static void main(String ...args) throws Exception { + Robot robot = new Robot(); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + popup = new JPopupMenu(); + popup.add(new JMenuItem("item")); + popup.setVisible(true); + + } + }); + + robot.waitForIdle(); + + if (!popup.isShowing()) { + throw new RuntimeException("Where is my popup ?"); + } + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + popup.setVisible(false); + popup.removeAll(); + popup.setVisible(true); + } + }); + + robot.waitForIdle(); + + if (popup.isShowing()) { + throw new RuntimeException("Empty popup is shown"); + } + + popup.setVisible(false); + } +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/RepaintManager/IconifyTest/IconifyTest.java --- a/jdk/test/javax/swing/RepaintManager/IconifyTest/IconifyTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/RepaintManager/IconifyTest/IconifyTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -31,7 +31,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import sun.awt.*; public class IconifyTest { private static volatile boolean windowIconifiedIsCalled = false; @@ -40,7 +39,7 @@ static JButton button; public static void main(String[] args) throws Throwable { - SunToolkit toolkit = (SunToolkit) SunToolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { frame = new JFrame(); @@ -61,14 +60,14 @@ frame.setVisible(true); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { frame.setExtendedState(Frame.ICONIFIED); } }); - toolkit.realSync(); + robot.waitForIdle(); if (!windowIconifiedIsCalled) { throw new Exception("Test failed: window was not iconified."); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/Security/6657138/ComponentTest.java --- a/jdk/test/javax/swing/Security/6657138/ComponentTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/Security/6657138/ComponentTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,8 +28,6 @@ * @author Alexander Potochkin */ -import sun.awt.SunToolkit; - import javax.swing.*; import java.awt.*; @@ -50,14 +48,14 @@ public static void main(String[] args) throws Exception { - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { frame = new ComponentTest(); frame.setVisible(true); } }); - toolkit.realSync(); + robot.waitForIdle(); UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); for (final UIManager.LookAndFeelInfo laf : lafs) { SwingUtilities.invokeAndWait(new Runnable() { @@ -70,7 +68,7 @@ SwingUtilities.updateComponentTreeUI(frame); } }); - toolkit.realSync(); + robot.waitForIdle(); } } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/SwingTest.java --- a/jdk/test/javax/swing/SwingTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/SwingTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -21,7 +21,6 @@ * questions. */ -import sun.awt.SunToolkit; import java.awt.Toolkit; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -134,11 +133,8 @@ else { SwingUtilities.invokeLater(this); // invoke on the event dispatch thread } - Toolkit tk = Toolkit.getDefaultToolkit(); - if (tk instanceof SunToolkit) { - SunToolkit stk = (SunToolkit) tk; - stk.realSync(); // wait until done - } + java.awt.Robot robot = new java.awt.Robot(); + robot.waitForIdle(); } while (this.frame != null); if (this.error != null) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/SwingUtilities/7088744/bug7088744.java --- a/jdk/test/javax/swing/SwingUtilities/7088744/bug7088744.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/SwingUtilities/7088744/bug7088744.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,18 +27,24 @@ @author Pavel Porvatov */ -import sun.awt.SunToolkit; - -import javax.swing.*; -import java.awt.*; +import java.awt.Component; +import java.awt.Event; +import java.awt.Point; +import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; + public class bug7088744 { + private static volatile JLabel label; + private static volatile JFrame frame; - private static volatile Point point; + private static volatile Point point = new Point(); private static final int MOUSE_CLICKED = 1; private static final int MOUSE_PRESSED = 2; @@ -117,7 +123,7 @@ SwingUtilities.invokeAndWait(new Runnable() { public void run() { - JFrame frame = new JFrame(); + frame = new JFrame(); label = new JLabel("A label"); @@ -137,26 +143,24 @@ frame.add(label); frame.setSize(200, 100); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocationRelativeTo(null); frame.setVisible(true); } }); - SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); - - toolkit.realSync(); - - // On Linux platforms realSync doesn't guaranties setSize completion - Thread.sleep(1000); + Robot robot = new Robot(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { - point = label.getLocationOnScreen(); + Point pt = label.getLocationOnScreen(); + point.x = pt.x + label.getWidth() / 2; + point.y = pt.y + label.getHeight() / 2; } }); - Robot robot = new Robot(); - robot.setAutoDelay(100); + robot.setAutoWaitForIdle(true); robot.mouseMove(point.x, point.y); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mousePress(InputEvent.BUTTON2_MASK); @@ -165,10 +169,9 @@ robot.mouseRelease(InputEvent.BUTTON2_MASK); robot.mouseRelease(InputEvent.BUTTON3_MASK); - toolkit.realSync(); - SwingUtilities.invokeAndWait(new Runnable() { public void run() { + frame.dispose(); if (eventCount != BUTTON_EVENTS_SEQUENCE.length) { throw new RuntimeException("Not all events received"); } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/text/Utilities/bug7045593.java --- a/jdk/test/javax/swing/text/Utilities/bug7045593.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/text/Utilities/bug7045593.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,8 +28,6 @@ * @author Pavel Porvatov */ -import sun.awt.SunToolkit; - import javax.swing.*; import javax.swing.text.BadLocationException; import java.awt.*; @@ -49,7 +47,8 @@ } }); - ((SunToolkit) SunToolkit.getDefaultToolkit()).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/text/View/8048110/bug8048110.java --- a/jdk/test/javax/swing/text/View/8048110/bug8048110.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/text/View/8048110/bug8048110.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,8 +28,6 @@ * @run main bug8048110 */ -import sun.awt.SunToolkit; - import javax.swing.*; import javax.swing.text.Element; import javax.swing.text.html.HTMLDocument; @@ -37,7 +35,7 @@ import java.awt.*; public class bug8048110 { - private static SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit(); + private static Robot robot; private static Object lock = new Object(); private static boolean isRealSyncPerformed = false; private static final String htmlText = "" + @@ -45,6 +43,7 @@ "
    PCOk
    "; public static void main(String[] args) throws Exception { + robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { @@ -55,7 +54,7 @@ Thread thread = new Thread() { @Override public void run() { - toolkit.realSync(); + robot.waitForIdle(); synchronized (lock) { isRealSyncPerformed = true; lock.notifyAll(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/text/html/7189299/bug7189299.java --- a/jdk/test/javax/swing/text/html/7189299/bug7189299.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/text/html/7189299/bug7189299.java Wed Dec 03 19:28:35 2014 +0000 @@ -25,7 +25,7 @@ * Portions Copyright (c) 2013 IBM Corporation */ import java.awt.BorderLayout; -import java.awt.Toolkit; +import java.awt.Robot; import java.awt.event.ActionListener; import javax.swing.DefaultButtonModel; @@ -35,7 +35,6 @@ import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.html.HTMLEditorKit; -import sun.awt.SunToolkit; /* @@ -111,7 +110,7 @@ } public static void main(String[] args) throws Exception { - final SunToolkit toolkit = ((SunToolkit) Toolkit.getDefaultToolkit()); + final Robot robot = new Robot(); SwingUtilities.invokeAndWait(new Runnable() { @@ -120,7 +119,7 @@ setup(); } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/text/html/HTMLDocument/8058120/bug8058120.java --- a/jdk/test/javax/swing/text/html/HTMLDocument/8058120/bug8058120.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/text/html/HTMLDocument/8058120/bug8058120.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,8 +28,6 @@ * @run main bug8058120 */ -import sun.awt.SunToolkit; - import javax.swing.*; import javax.swing.text.Element; import javax.swing.text.html.HTML; @@ -38,12 +36,18 @@ import java.awt.*; public class bug8058120 { - private static SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); private static HTMLDocument document = null; private static final String text = "

    ab

    "; private static final String textToInsert = "c"; public static void main(String[] args) { + Robot robot; + try { + robot = new Robot(); + }catch(Exception ex) { + ex.printStackTrace(); + throw new RuntimeException("Unexpected failure"); + } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -51,7 +55,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -64,7 +68,7 @@ } }); - toolkit.realSync(); + robot.waitForIdle(); SwingUtilities.invokeLater(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/text/html/HTMLEditorKit/4242228/bug4242228.java --- a/jdk/test/javax/swing/text/html/HTMLEditorKit/4242228/bug4242228.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/text/html/HTMLEditorKit/4242228/bug4242228.java Wed Dec 03 19:28:35 2014 +0000 @@ -27,8 +27,6 @@ @author Peter Zhelezniakov */ -import sun.awt.SunToolkit; - import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -85,7 +83,8 @@ } }); - ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/swing/text/html/parser/Parser/7165725/bug7165725.java --- a/jdk/test/javax/swing/text/html/parser/Parser/7165725/bug7165725.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/swing/text/html/parser/Parser/7165725/bug7165725.java Wed Dec 03 19:28:35 2014 +0000 @@ -28,9 +28,8 @@ @run main bug7165725 */ -import sun.awt.SunToolkit; - import java.awt.BorderLayout; +import java.awt.Robot; import java.io.File; import java.io.FileReader; import java.io.IOException; @@ -127,7 +126,8 @@ } }); - ((SunToolkit) SunToolkit.getDefaultToolkit()).realSync(); + Robot robot = new Robot(); + robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { public void run() { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/xml/crypto/dsig/GenerationTests.java --- a/jdk/test/javax/xml/crypto/dsig/GenerationTests.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/xml/crypto/dsig/GenerationTests.java Wed Dec 03 19:28:35 2014 +0000 @@ -23,7 +23,7 @@ /** * @test - * @bug 4635230 6283345 6303830 6824440 6867348 7094155 8038184 8038349 + * @bug 4635230 6283345 6303830 6824440 6867348 7094155 8038184 8038349 8046949 * @summary Basic unit tests for generating XML Signatures with JSR 105 * @compile -XDignore.symbol.file KeySelectors.java SignatureValidator.java * X509KeySelector.java GenerationTests.java @@ -377,7 +377,7 @@ static void test_create_signature_x509_crt_crl() throws Exception { System.out.println("* Generating signature-x509-crt-crl.xml"); - List xds = new ArrayList(); + List xds = new ArrayList<>(); CertificateFactory cf = CertificateFactory.getInstance("X.509"); xds.add(signingCert); FileInputStream fis = new FileInputStream(CRL); @@ -444,7 +444,7 @@ SignedInfo si = fac.newSignedInfo(withoutComments, rsaSha1, refs); // create objects - List objs = new ArrayList(); + List objs = new ArrayList<>(); // Object 1 List manRefs = Collections.singletonList @@ -559,7 +559,7 @@ System.out.println("* Generating signature.xml"); // create references - List refs = new ArrayList(); + List refs = new ArrayList<>(); // Reference 1 refs.add(fac.newReference(STYLESHEET, sha1)); @@ -610,7 +610,7 @@ SignatureProperties.TYPE, null)); // Reference 8 - List transforms = new ArrayList(); + List transforms = new ArrayList<>(); transforms.add(fac.newTransform (Transform.ENVELOPED, (TransformParameterSpec) null)); refs.add(fac.newReference("", sha1, transforms, null, null)); @@ -685,7 +685,7 @@ Document doc = db.newDocument(); // create objects - List objs = new ArrayList(); + List objs = new ArrayList<>(); // Object 1 objs.add(fac.newXMLObject(Collections.singletonList @@ -705,7 +705,7 @@ (new DOMStructure(nc)), "object-3", null, null)); // Manifest - List manRefs = new ArrayList(); + List manRefs = new ArrayList<>(); // Manifest Reference 1 manRefs.add(fac.newReference(STYLESHEET, @@ -715,7 +715,7 @@ manRefs.add(fac.newReference("#reference-1", sha1)); // Manifest Reference 3 - List manTrans = new ArrayList(); + List manTrans = new ArrayList<>(); String xslt = "" + " xds = new ArrayList(); + List xds = new ArrayList<>(); xds.add("CN=User"); xds.add(kifac.newX509IssuerSerial ("CN=User", new BigInteger("45ef2729", 16))); @@ -930,7 +930,7 @@ static void test_create_exc_signature() throws Exception { System.out.println("* Generating exc_signature.xml"); - List refs = new ArrayList(4); + List refs = new ArrayList<>(4); // create reference 1 refs.add(fac.newReference @@ -942,7 +942,7 @@ null, null)); // create reference 2 - List prefixList = new ArrayList(2); + List prefixList = new ArrayList<>(2); prefixList.add("bar"); prefixList.add("#default"); ExcC14NParameterSpec params = new ExcC14NParameterSpec(prefixList); @@ -963,7 +963,7 @@ null, null)); // create reference 4 - prefixList = new ArrayList(2); + prefixList = new ArrayList<>(2); prefixList.add("bar"); prefixList.add("#default"); params = new ExcC14NParameterSpec(prefixList); @@ -982,7 +982,7 @@ fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null), refs); // create KeyInfo - List kits = new ArrayList(2); + List kits = new ArrayList<>(2); kits.add(kifac.newKeyValue(validatingKey)); KeyInfo ki = kifac.newKeyInfo(kits); @@ -1027,10 +1027,10 @@ static void test_create_sign_spec() throws Exception { System.out.println("* Generating sign-spec.xml"); - List refs = new ArrayList(2); + List refs = new ArrayList<>(2); // create reference 1 - List types = new ArrayList(3); + List types = new ArrayList<>(3); types.add(new XPathType(" //ToBeSigned ", XPathType.Filter.INTERSECT)); types.add(new XPathType(" //NotToBeSigned ", XPathType.Filter.SUBTRACT)); @@ -1043,7 +1043,7 @@ null, null)); // create reference 2 - List trans2 = new ArrayList(2); + List trans2 = new ArrayList<>(2); trans2.add(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)); XPathFilter2ParameterSpec xp2 = new XPathFilter2ParameterSpec @@ -1061,9 +1061,9 @@ fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null), refs); // create KeyInfo - List kits = new ArrayList(2); + List kits = new ArrayList<>(2); kits.add(kifac.newKeyValue(validatingKey)); - List xds = new ArrayList(2); + List xds = new ArrayList<>(2); xds.add("CN=User"); xds.add(signingCert); kits.add(kifac.newX509Data(xds)); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/xml/crypto/dsig/KeySelectors.java --- a/jdk/test/javax/xml/crypto/dsig/KeySelectors.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/xml/crypto/dsig/KeySelectors.java Wed Dec 03 19:28:35 2014 +0000 @@ -101,9 +101,7 @@ throw new KeySelectorException("Null KeyInfo object!"); } // search for X509Data in keyinfo - Iterator iter = keyInfo.getContent().iterator(); - while (iter.hasNext()) { - XMLStructure kiType = (XMLStructure) iter.next(); + for (XMLStructure kiType : keyInfo.getContent()) { if (kiType instanceof X509Data) { X509Data xd = (X509Data) kiType; Object[] entries = xd.getContent().toArray(); @@ -114,10 +112,8 @@ crl = (X509CRL) entries[i]; } } - Iterator xi = xd.getContent().iterator(); boolean hasCRL = false; - while (xi.hasNext()) { - Object o = xi.next(); + for (Object o : xd.getContent()) { // skip non-X509Certificate entries if (o instanceof X509Certificate) { if ((purpose != KeySelector.Purpose.VERIFY) && @@ -152,10 +148,8 @@ throw new KeySelectorException("Null KeyInfo object!"); } SignatureMethod sm = (SignatureMethod) method; - List list = keyInfo.getContent(); - for (int i = 0; i < list.size(); i++) { - XMLStructure xmlStructure = (XMLStructure) list.get(i); + for (XMLStructure xmlStructure : keyInfo.getContent()) { if (xmlStructure instanceof KeyValue) { PublicKey pk = null; try { @@ -282,9 +276,7 @@ if (keyInfo == null) { throw new KeySelectorException("Null KeyInfo object!"); } - Iterator iter = keyInfo.getContent().iterator(); - while (iter.hasNext()) { - XMLStructure xmlStructure = (XMLStructure) iter.next(); + for (XMLStructure xmlStructure : keyInfo.getContent()) { try { if (xmlStructure instanceof KeyName) { String name = ((KeyName)xmlStructure).getName(); @@ -330,14 +322,12 @@ } } else if (xmlStructure instanceof X509Data) { List content = ((X509Data)xmlStructure).getContent(); - int size = content.size(); Vector result = null; // Lookup the public key using the information // specified in X509Data element, i.e. searching // over the collection of certificate files under // "certs" subdirectory and return those match. - for (int k = 0; k i = + signature.getSignedInfo().getReferences().iterator(); + for (int j = 0; i.hasNext(); j++) { + Reference ref = i.next(); if (!digestInputEqual(ref)) { throw new Exception ("cached data for Reference[" + j + "] is not correct"); @@ -88,10 +89,10 @@ // check that dereferenced data does not contain comment nodes if (ref.getURI() == "") { System.out.println("checking deref data"); - NodeSetData data = (NodeSetData) ref.getDereferencedData(); - Iterator ni = data.iterator(); - while (ni.hasNext()) { - Node n = (Node) ni.next(); + @SuppressWarnings("unchecked") + NodeSetData data = + (NodeSetData)ref.getDereferencedData(); + for (Node n : data) { if (n.getNodeType() == Node.COMMENT_NODE) { throw new Exception("dereferenced data for " + " Reference[" + j + " contains comment node"); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/xml/crypto/dsig/X509KeySelector.java --- a/jdk/test/javax/xml/crypto/dsig/X509KeySelector.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/xml/crypto/dsig/X509KeySelector.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,9 +139,7 @@ } // Iterate through KeyInfo types - Iterator i = keyInfo.getContent().iterator(); - while (i.hasNext()) { - XMLStructure kiType = (XMLStructure) i.next(); + for (XMLStructure kiType : keyInfo.getContent()) { // check X509Data if (kiType instanceof X509Data) { X509Data xd = (X509Data) kiType; @@ -303,9 +301,7 @@ } Collection certs = new ArrayList<>(); - Iterator xi = xd.getContent().iterator(); - while (xi.hasNext()) { - Object o = xi.next(); + for (Object o : xd.getContent()) { // check X509IssuerSerial if (o instanceof X509IssuerSerial) { X509IssuerSerial xis = (X509IssuerSerial) o; diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/javax/xml/jaxp/Encodings/CheckEncodingPropertiesFile.java --- a/jdk/test/javax/xml/jaxp/Encodings/CheckEncodingPropertiesFile.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/javax/xml/jaxp/Encodings/CheckEncodingPropertiesFile.java Wed Dec 03 19:28:35 2014 +0000 @@ -23,7 +23,7 @@ /** * @test - * @bug 8008738 + * @bug 8008738 8065138 * @summary checks that the mapping implemented by * com.sun.org.apache.xml.internal.serializer.Encodings * correctly identifies valid Charset names and @@ -64,6 +64,15 @@ props.load(is); } + if (!props.containsKey("UTF8")) { + // If the test fails here - it may indicate that you stumbled on an + // issue similar to that fixed by JDK-8065138. + // Check that the content of the Encodings.properties included in + // the tested build image matches the content of the file in the source + // jaxp tree of the jdk forest. + throw new RuntimeException("UTF8 key missing in " + ClassLoader.getSystemResource(ENCODINGS_FILE)); + } + //printAllCharsets(); test(props); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/lib/testlibrary/jdk/testlibrary/TimeLimitedRunner.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/lib/testlibrary/jdk/testlibrary/TimeLimitedRunner.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.testlibrary; + +import java.util.Objects; +import java.util.concurrent.Callable; + +/** + * Auxiliary class to run target w/ given timeout. + */ +public class TimeLimitedRunner implements Callable { + private final long stoptime; + private final long timeout; + private final double factor; + private final Callable target; + + /** + * @param timeout a timeout. zero means no time limitation + * @param factor a multiplier used to estimate next iteration time + * @param target a target to run + * @throws NullPointerException if target is null + * @throws IllegalArgumentException if timeout is negative or + factor isn't positive + */ + public TimeLimitedRunner(long timeout, double factor, + Callable target) { + Objects.requireNonNull(target, "target must not be null"); + if (timeout < 0) { + throw new IllegalArgumentException("timeout[" + timeout + "] < 0"); + } + if (factor <= 0d) { + throw new IllegalArgumentException("factor[" + factor + "] <= 0"); + } + this.stoptime = System.currentTimeMillis() + timeout; + this.timeout = timeout; + this.factor = factor; + this.target = target; + } + + /** + * Runs @{linkplan target} while it returns true and timeout isn't exceeded + */ + @Override + public Void call() throws Exception { + long maxDuration = 0L; + long iterStart = System.currentTimeMillis(); + if (timeout != 0 && iterStart > stoptime) { + return null; + } + while (target.call()) { + if (timeout != 0) { + long iterDuration = System.currentTimeMillis() - iterStart; + maxDuration = Math.max(maxDuration, iterDuration); + iterStart = System.currentTimeMillis(); + if (iterStart + (maxDuration * factor) > stoptime) { + System.out.println("Not enough time to continue execution. " + + "Interrupted."); + break; + } + } + } + return null; + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java Wed Dec 03 19:28:35 2014 +0000 @@ -38,6 +38,7 @@ import java.util.Collections; import java.util.regex.Pattern; import java.util.regex.Matcher; +import java.util.concurrent.TimeUnit; /** * Common library for various test helper functions. @@ -69,6 +70,12 @@ TIMEOUT_FACTOR = Double.parseDouble(toFactor); } + /** + * Returns the value of JTREG default test timeout in milliseconds + * converted to {@code long}. + */ + public static final long DEFAULT_TEST_TIMEOUT = TimeUnit.SECONDS.toMillis(120); + private Utils() { // Private constructor to prevent class instantiation } @@ -128,8 +135,7 @@ */ private static final Pattern useGcPattern = Pattern.compile( "(?:\\-XX\\:[\\+\\-]Use.+GC)" - + "|(?:\\-Xconcgc)" - + "|(?:\\-Xincgc)"); + + "|(?:\\-Xconcgc)"); public static List removeGcOpts(List opts) { List optsWithoutGC = new ArrayList(); for (String opt : opts) { diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java --- a/jdk/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -23,7 +23,7 @@ /** * @test - * @bug 6476665 7033534 6830714 + * @bug 6476665 7033534 6830714 8052162 * @summary Verifies color conversion of Component Color Model based images * @run main ColConvCCMTest */ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/net/www/http/HttpClient/StreamingRetry.java --- a/jdk/test/sun/net/www/http/HttpClient/StreamingRetry.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/net/www/http/HttpClient/StreamingRetry.java Wed Dec 03 19:28:35 2014 +0000 @@ -23,8 +23,8 @@ /* * @test - * @bug 6672144 - * @summary HttpURLConnection.getInputStream sends POST request after failed chunked send + * @bug 6672144 8050983 + * @summary Do not retry failed request with a streaming body. */ import java.net.HttpURLConnection; @@ -33,31 +33,41 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import static java.lang.System.out; public class StreamingRetry implements Runnable { static final int ACCEPT_TIMEOUT = 20 * 1000; // 20 seconds - ServerSocket ss; + volatile ServerSocket ss; - public static void main(String[] args) throws IOException { + public static void main(String[] args) throws Exception { (new StreamingRetry()).instanceMain(); } - void instanceMain() throws IOException { - test(); + void instanceMain() throws Exception { + out.println("Test with default method"); + test(null); + out.println("Test with POST method"); + test("POST"); + out.println("Test with PUT method"); + test("PUT"); + if (failed > 0) throw new RuntimeException("Some tests failed"); } - void test() throws IOException { + void test(String method) throws Exception { ss = new ServerSocket(0); ss.setSoTimeout(ACCEPT_TIMEOUT); int port = ss.getLocalPort(); - (new Thread(this)).start(); + Thread otherThread = new Thread(this); + otherThread.start(); try { URL url = new URL("http://localhost:" + port + "/"); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); uc.setDoOutput(true); + if (method != null) + uc.setRequestMethod(method); uc.setChunkedStreamingMode(4096); OutputStream os = uc.getOutputStream(); os.write("Hello there".getBytes()); @@ -68,6 +78,7 @@ //expected.printStackTrace(); } finally { ss.close(); + otherThread.join(); } } @@ -79,7 +90,7 @@ ss.close(); fail("The server shouldn't accept a second connection"); } catch (IOException e) { - //OK, the clien will close the server socket if successfull + //OK, the client will close the server socket if successful } } diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/net/www/protocol/http/B6369510.java --- a/jdk/test/sun/net/www/protocol/http/B6369510.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/net/www/protocol/http/B6369510.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ com.sun.net.httpserver.HttpServer httpServer; ExecutorService executorService; - public static void main(String[] args) + public static void main(String[] args) throws Exception { new B6369510(); } @@ -58,13 +58,15 @@ void doClient() { try { InetSocketAddress address = httpServer.getAddress(); + String urlString = "http://" + InetAddress.getLocalHost().getHostName() + ":" + address.getPort() + "/test/"; + System.out.println("URL == " + urlString); // GET Request - URL url = new URL("http://" + address.getHostName() + ":" + address.getPort() + "/test/"); + URL url = new URL("http://" + InetAddress.getLocalHost().getHostName() + ":" + address.getPort() + "/test/"); HttpURLConnection uc = (HttpURLConnection)url.openConnection(); int resp = uc.getResponseCode(); if (resp != 200) - throw new RuntimeException("Failed: Response code from GET is not 200"); + throw new RuntimeException("Failed: Response code from GET is not 200 RSP == " + resp); System.out.println("Response code from GET = 200 OK"); @@ -75,12 +77,13 @@ OutputStream os = uc.getOutputStream(); resp = uc.getResponseCode(); if (resp != 200) - throw new RuntimeException("Failed: Response code form POST is not 200"); + throw new RuntimeException("Failed: Response code form POST is not 200 RSP == " + resp); System.out.println("Response code from POST = 200 OK"); } catch (IOException e) { e.printStackTrace(); + throw new RuntimeException("Failed with IOException"); } finally { httpServer.stop(1); executorService.shutdown(); diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/tools/jinfo/Basic.sh --- a/jdk/test/sun/tools/jinfo/Basic.sh Wed Jul 05 20:08:43 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# @test -# @bug 6402766 -# @summary Unit test for jinfo utility -# -# @library ../common -# @build SimpleApplication ShutdownSimpleApplication -# @run shell Basic.sh - -. ${TESTSRC}/../common/CommonSetup.sh -. ${TESTSRC}/../common/ApplicationSetup.sh - -# Start application and use PORTFILE for coordination -PORTFILE="${TESTCLASSES}"/shutdown.port -startApplication SimpleApplication "${PORTFILE}" - -# all return statuses are checked in this test -set +e -set -x - -failed=0 - -runSA=true - -if [ $isMacos = true -o $isAIX = true -o `uname -m` = ppc64 ]; then - runSA=false -fi - -if [ $isLinux = true ]; then - # Some Linux systems disable non-child ptrace (see 7050524) - ptrace_scope=`/sbin/sysctl -n kernel.yama.ptrace_scope` - if [ $? = 0 ]; then - if [ $ptrace_scope = 1 ]; then - runSA=false - fi - fi -fi - -if [ $runSA = true ]; then - # -sysprops option - ${JINFO} -J-XX:+UsePerfData -F -sysprops $appJavaPid - if [ $? != 0 ]; then failed=1; fi - - # -flags option - ${JINFO} -J-XX:+UsePerfData -F -flags $appJavaPid - if [ $? != 0 ]; then failed=1; fi - - # no option - ${JINFO} -J-XX:+UsePerfData -F $appJavaPid - if [ $? != 0 ]; then failed=1; fi -fi - -# -sysprops option -${JINFO} -J-XX:+UsePerfData -sysprops $appJavaPid -if [ $? != 0 ]; then failed=1; fi - -# -flags option -${JINFO} -J-XX:+UsePerfData -flags $appJavaPid -if [ $? != 0 ]; then failed=1; fi - -# no option -${JINFO} -J-XX:+UsePerfData $appJavaPid -if [ $? != 0 ]; then failed=1; fi - -# -flag option -${JINFO} -J-XX:+UsePerfData -flag +PrintGC $appJavaPid -if [ $? != 0 ]; then failed=1; fi - -${JINFO} -J-XX:+UsePerfData -flag -PrintGC $appJavaPid -if [ $? != 0 ]; then failed=1; fi - -${JINFO} -J-XX:+UsePerfData -flag PrintGC $appJavaPid -if [ $? != 0 ]; then failed=1; fi - -if $isSolaris; then - - ${JINFO} -J-XX:+UsePerfData -flag +ExtendedDTraceProbes $appJavaPid - if [ $? != 0 ]; then failed=1; fi - - ${JINFO} -J-XX:+UsePerfData -flag -ExtendedDTraceProbes $appJavaPid - if [ $? != 0 ]; then failed=1; fi - - ${JINFO} -J-XX:+UsePerfData -flag ExtendedDTraceProbes $appJavaPid - if [ $? != 0 ]; then failed=1; fi - -fi - -set -e - -stopApplication "${PORTFILE}" -waitForApplication - -exit $failed diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/tools/jinfo/JInfoHelper.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/tools/jinfo/JInfoHelper.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.Arrays; + +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.ProcessTools; + +/** + * The helper class for running jinfo utility. + */ +public final class JInfoHelper { + + /** + * Print configuration information for the current process + * + * @param toolArgs List of jinfo options + */ + public static OutputAnalyzer jinfo(String... toolArgs) throws Exception { + return jinfo(true, toolArgs); + } + + /** + * Print usage information + * + * @param toolArgs List of jinfo options + */ + public static OutputAnalyzer jinfoNoPid(String... toolArgs) throws Exception { + return jinfo(false, toolArgs); + } + + private static OutputAnalyzer jinfo(boolean toPid, String... toolArgs) throws Exception { + JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jinfo"); + if (toolArgs != null) { + for (String toolArg : toolArgs) { + launcher.addToolArg(toolArg); + } + } + if (toPid) { + launcher.addToolArg(Integer.toString(ProcessTools.getProcessId())); + } + + ProcessBuilder processBuilder = new ProcessBuilder(launcher.getCommand()); + System.out.println(Arrays.toString(processBuilder.command().toArray()).replace(",", "")); + OutputAnalyzer output = ProcessTools.executeProcess(processBuilder); + System.out.println(output.getOutput()); + + return output; + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/tools/jinfo/JInfoRunningProcessFlagTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/tools/jinfo/JInfoRunningProcessFlagTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.management.ManagementFactoryHelper; + +import com.sun.management.HotSpotDiagnosticMXBean; + +import jdk.testlibrary.OutputAnalyzer; +import static jdk.testlibrary.Platform.isSolaris; +import static jdk.testlibrary.Asserts.assertEquals; +import static jdk.testlibrary.Asserts.assertNotEquals; +import static jdk.testlibrary.Asserts.assertTrue; + +/** + * @test + * @summary The test sanity checks 'jinfo -flag' option. + * @library /lib/testlibrary + * @build jdk.testlibrary.* JInfoHelper + * @run main/othervm -XX:+HeapDumpOnOutOfMemoryError JInfoRunningProcessFlagTest + */ +public class JInfoRunningProcessFlagTest { + + public static void main(String[] args) throws Exception { + testFlag(); + testFlagPlus(); + testFlagMinus(); + testFlagEqual(); + + testInvalidFlag(); + + testSolarisSpecificFlag(); + } + + private static void testFlag() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-flag", "HeapDumpOnOutOfMemoryError"); + output.shouldHaveExitValue(0); + assertTrue(output.getStderr().isEmpty(), "'jinfo -flag HeapDumpOnOutOfMemoryError' stderr should be empty"); + output.shouldContain("+HeapDumpOnOutOfMemoryError"); + } + + private static void testFlagPlus() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-flag", "+PrintGC"); + output.shouldHaveExitValue(0); + output = JInfoHelper.jinfo("-flag", "PrintGC"); + output.shouldHaveExitValue(0); + output.shouldContain("+PrintGC"); + verifyIsEnabled("PrintGC"); + } + + private static void testFlagMinus() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-flag", "-PrintGC"); + output.shouldHaveExitValue(0); + output = JInfoHelper.jinfo("-flag", "PrintGC"); + output.shouldHaveExitValue(0); + output.shouldContain("-PrintGC"); + verifyIsDisabled("PrintGC"); + } + + private static void testFlagEqual() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-flag", "PrintGC=1"); + output.shouldHaveExitValue(0); + output = JInfoHelper.jinfo("-flag", "PrintGC"); + output.shouldHaveExitValue(0); + output.shouldContain("+PrintGC"); + verifyIsEnabled("PrintGC"); + } + + private static void testInvalidFlag() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-flag", "monkey"); + assertNotEquals(output.getExitValue(), 0, "A non-zero exit code should be returned for invalid flag"); + } + + private static void testSolarisSpecificFlag() throws Exception { + if (!isSolaris()) + return; + + OutputAnalyzer output = JInfoHelper.jinfo("-flag", "+ExtendedDTraceProbes"); + output.shouldHaveExitValue(0); + output = JInfoHelper.jinfo(); + output.shouldContain("+ExtendedDTraceProbes"); + verifyIsEnabled("ExtendedDTraceProbes"); + + output = JInfoHelper.jinfo("-flag", "-ExtendedDTraceProbes"); + output.shouldHaveExitValue(0); + output = JInfoHelper.jinfo(); + output.shouldContain("-ExtendedDTraceProbes"); + verifyIsDisabled("ExtendedDTraceProbes"); + + output = JInfoHelper.jinfo("-flag", "ExtendedDTraceProbes"); + output.shouldContain("-ExtendedDTraceProbes"); + output.shouldHaveExitValue(0); + } + + private static void verifyIsEnabled(String flag) { + HotSpotDiagnosticMXBean hotspotDiagnostic = ManagementFactoryHelper.getDiagnosticMXBean(); + String flagValue = hotspotDiagnostic.getVMOption(flag).getValue(); + assertEquals(flagValue, "true", "Expected '" + flag + "' flag be enabled"); + } + + private static void verifyIsDisabled(String flag) { + HotSpotDiagnosticMXBean hotspotDiagnostic = ManagementFactoryHelper.getDiagnosticMXBean(); + String flagValue = hotspotDiagnostic.getVMOption(flag).getValue(); + assertEquals(flagValue, "false", "Expected '" + flag + "' flag be disabled"); + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/tools/jinfo/JInfoRunningProcessTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/tools/jinfo/JInfoRunningProcessTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.testlibrary.OutputAnalyzer; +import static jdk.testlibrary.Asserts.assertTrue; + +/** + * @test + * @summary The test sanity checks functionality of 'jinfo', 'jinfo -sysprops' and 'jinfo -flags' + * @library /lib/testlibrary + * @build jdk.testlibrary.* JInfoHelper + * @run main/othervm -XX:+HeapDumpOnOutOfMemoryError JInfoRunningProcessTest + */ +public class JInfoRunningProcessTest { + + public static void main(String[] args) throws Exception { + testNoOptions(); + testSysprops(); + testFlags(); + } + + private static void testNoOptions() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo(); + output.shouldHaveExitValue(0); + assertTrue(output.getStderr().isEmpty(), "'jinfo' stderr should be empty"); + output.shouldContain("+HeapDumpOnOutOfMemoryError"); + } + + private static void testSysprops() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-sysprops"); + output.shouldHaveExitValue(0); + assertTrue(output.getStderr().isEmpty(), "'jinfo -sysprops' stderr should be empty"); + } + + private static void testFlags() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfo("-flags"); + output.shouldHaveExitValue(0); + assertTrue(output.getStderr().isEmpty(), "'jinfo -flags' stderr should be empty"); + output.shouldContain("+HeapDumpOnOutOfMemoryError"); + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/tools/jinfo/JInfoSanityTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/tools/jinfo/JInfoSanityTest.java Wed Dec 03 19:28:35 2014 +0000 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import static jdk.testlibrary.Asserts.assertNotEquals; +import static jdk.testlibrary.Asserts.assertTrue; +import static jdk.testlibrary.Asserts.assertFalse; +import jdk.testlibrary.OutputAnalyzer; + +/** + * @test + * @summary The test sanity checks functionality of 'jinfo -h', 'jinfo -help', + * and verifies jinfo exits abnormally if started with invalid options. + * @library /lib/testlibrary + * @build jdk.testlibrary.* JInfoHelper + * @run main JInfoSanityTest + */ +public class JInfoSanityTest { + + public static void main(String[] args) throws Exception { + test_h(); + test_help(); + testVersion(); + testUnknownHost(); + } + + private static void test_h() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfoNoPid("-h"); + output.shouldHaveExitValue(0); + assertFalse(output.getStderr().isEmpty(), "'jinfo -h' stderr should not be empty"); + assertTrue(output.getStdout().isEmpty(), "'jinfo -h' stdout should be empty"); + } + + private static void test_help() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfoNoPid("-help"); + output.shouldHaveExitValue(0); + assertFalse(output.getStderr().isEmpty(), "'jinfo -help' stderr should not be empty"); + assertTrue(output.getStdout().isEmpty(), "'jinfo -help' stdout should be empty"); + } + + private static void testVersion() throws Exception { + OutputAnalyzer output = JInfoHelper.jinfoNoPid("-version"); + output.shouldHaveExitValue(1); + assertFalse(output.getStderr().isEmpty(), "'jinfo -version' stderr should not be empty"); + assertTrue(output.getStdout().isEmpty(), "'jinfo -version' stdout should be empty"); + } + + private static void testUnknownHost() throws Exception { + String unknownHost = "Oja781nh2ev7vcvbajdg-Sda1-C"; + OutputAnalyzer output = JInfoHelper.jinfoNoPid("med@" + unknownHost); + assertNotEquals(output.getExitValue(), 0, "A non-zero exit code should be returned for invalid operation"); + output.shouldContain("UnknownHostException: " + unknownHost); + } + +} diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/tools/jps/JpsHelper.java --- a/jdk/test/sun/tools/jps/JpsHelper.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/tools/jps/JpsHelper.java Wed Dec 03 19:28:35 2014 +0000 @@ -93,7 +93,7 @@ /** * VM arguments to start test application with */ - public static final String[] VM_ARGS = {"-Xmx512m", "-XX:+UseParallelGC"}; + public static final String[] VM_ARGS = {"-Xmx512m", "-XX:+PrintGCDetails"}; /** * VM flag to start test application with */ diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/VERSION --- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION Wed Dec 03 19:28:35 2014 +0000 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2014g +tzdata2014j diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/africa --- a/jdk/test/sun/util/calendar/zi/tzdata/africa Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/africa Wed Dec 03 19:28:35 2014 +0000 @@ -29,20 +29,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2013-02-21): +# From Paul Eggert (2014-10-31): # -# A good source for time zone historical data outside the U.S. is +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Another source occasionally used is Edward W. Whitman, World Time Differences, # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which @@ -88,7 +87,6 @@ # 3:00 CAST Central Africa Summer Time (no longer used) # 3:00 SAST South Africa Summer Time (no longer used) # 3:00 EAT East Africa Time -# 4:00 EAST East Africa Summer Time (no longer used) # Algeria # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -133,23 +131,13 @@ # See Africa/Lagos. # Botswana -# From Paul Eggert (2013-02-21): -# Milne says they were regulated by the Cape Town Signal in 1899; -# assume they switched to 2:00 when Cape Town did. -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Gaborone 1:43:40 - LMT 1885 - 1:30 - SAST 1903 Mar - 2:00 - CAT 1943 Sep 19 2:00 - 2:00 1:00 CAST 1944 Mar 19 2:00 - 2:00 - CAT +# See Africa/Maputo. # Burkina Faso # See Africa/Abidjan. # Burundi -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Bujumbura 1:57:28 - LMT 1890 - 2:00 - CAT +# See Africa/Maputo. # Cameroon # See Africa/Lagos. @@ -179,15 +167,10 @@ 1:00 - WAT # Comoros -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro - 3:00 - EAT +# See Africa/Nairobi. # Democratic Republic of the Congo -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9 - 2:00 - CAT -# The above is for the eastern part; see Africa/Lagos for the western part. +# See Africa/Lagos for the western part and Africa/Maputo for the eastern. # Republic of the Congo # See Africa/Lagos. @@ -208,9 +191,7 @@ Link Africa/Abidjan Atlantic/St_Helena # St Helena # Djibouti -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul - 3:00 - EAT +# See Africa/Nairobi. ############################################################################### @@ -339,7 +320,7 @@ # Egypt is to change back to Daylight system on May 15 # http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx -# From Gunther Vermier (2015-05-13): +# From Gunther Vermier (2014-05-13): # our Egypt office confirms that the change will be at 15 May "midnight" (24:00) # From Imed Chihi (2014-06-04): @@ -423,27 +404,8 @@ # See Africa/Lagos. # Eritrea -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Asmara 2:35:32 - LMT 1870 - 2:35:32 - AMT 1890 # Asmara Mean Time - 2:35:20 - ADMT 1936 May 5 # Adis Dera MT - 3:00 - EAT - # Ethiopia -# From Paul Eggert (2014-07-31): -# Like the Swahili of Kenya and Tanzania, many Ethiopians keep a -# 12-hour clock starting at our 06:00, so their "8 o'clock" is our -# 02:00 or 14:00. Keep this in mind when you ask the time in Amharic. -# -# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time -# zones between 1870 and 1890, that they merged to 38E50 (2:35:20) in -# 1890, and that they switched to 3:00 on 1936-05-05. Perhaps 38E50 -# was for Adis Dera. Quite likely the Shanks data entries are wrong -# anyway. -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Addis_Ababa 2:34:48 - LMT 1870 - 2:35:20 - ADMT 1936 May 5 # Adis Dera MT - 3:00 - EAT +# See Africa/Nairobi. # Gabon # See Africa/Lagos. @@ -487,13 +449,18 @@ 2:30 - BEAT 1940 2:45 - BEAUT 1960 3:00 - EAT +Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia +Link Africa/Nairobi Africa/Asmara # Eritrea +Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania +Link Africa/Nairobi Africa/Djibouti +Link Africa/Nairobi Africa/Kampala # Uganda +Link Africa/Nairobi Africa/Mogadishu # Somalia +Link Africa/Nairobi Indian/Antananarivo # Madagascar +Link Africa/Nairobi Indian/Comoro +Link Africa/Nairobi Indian/Mayotte # Lesotho -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Maseru 1:50:00 - LMT 1903 Mar - 2:00 - SAST 1943 Sep 19 2:00 - 2:00 1:00 SAST 1944 Mar 19 2:00 - 2:00 - SAST +# See Africa/Johannesburg. # Liberia # From Paul Eggert (2006-03-22): @@ -568,16 +535,10 @@ 2:00 - EET # Madagascar -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul - 3:00 - EAT 1954 Feb 27 23:00s - 3:00 1:00 EAST 1954 May 29 23:00s - 3:00 - EAT +# See Africa/Nairobi. # Malawi -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar - 2:00 - CAT +# See Africa/Maputo. # Mali # Mauritania @@ -677,9 +638,7 @@ # no information; probably like Indian/Mauritius # Mayotte -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou - 3:00 - EAT +# See Africa/Nairobi. # Morocco # See the 'europe' file for Spanish Morocco (Africa/Ceuta). @@ -987,6 +946,13 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Maputo 2:10:20 - LMT 1903 Mar 2:00 - CAT +Link Africa/Maputo Africa/Blantyre # Malawi +Link Africa/Maputo Africa/Bujumbura # Burundi +Link Africa/Maputo Africa/Gaborone # Botswana +Link Africa/Maputo Africa/Harare # Zimbabwe +Link Africa/Maputo Africa/Kigali # Rwanda +Link Africa/Maputo Africa/Lubumbashi # E Dem. Rep. of Congo +Link Africa/Maputo Africa/Lusaka # Zambia # Namibia # The 1994-04-03 transition is from Shanks & Pottenger. @@ -1054,9 +1020,7 @@ # Tromelin - inhabited until at least 1958 # Rwanda -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Kigali 2:00:16 - LMT 1935 Jun - 2:00 - CAT +# See Africa/Maputo. # St Helena # See Africa/Abidjan. @@ -1086,11 +1050,7 @@ # See Africa/Abidjan. # Somalia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov - 3:00 - EAT 1931 - 2:30 - BEAT 1957 - 3:00 - EAT +# See Africa/Nairobi. # South Africa # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -1100,6 +1060,9 @@ Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8 1:30 - SAST 1903 Mar 2:00 SA SAST +Link Africa/Johannesburg Africa/Maseru # Lesotho +Link Africa/Johannesburg Africa/Mbabane # Swaziland +# # Marion and Prince Edward Is # scientific station since 1947 # no information @@ -1127,16 +1090,10 @@ Link Africa/Khartoum Africa/Juba # Swaziland -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar - 2:00 - SAST +# See Africa/Johannesburg. # Tanzania -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 - 3:00 - EAT 1948 - 2:45 - BEAUT 1961 - 3:00 - EAT +# See Africa/Nairobi. # Togo # See Africa/Abidjan. @@ -1242,19 +1199,8 @@ 1:00 Tunisia CE%sT # Uganda -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Kampala 2:09:40 - LMT 1928 Jul - 3:00 - EAT 1930 - 2:30 - BEAT 1948 - 2:45 - BEAUT 1957 - 3:00 - EAT +# See Africa/Nairobi. # Zambia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar - 2:00 - CAT - # Zimbabwe -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Africa/Harare 2:04:12 - LMT 1903 Mar - 2:00 - CAT +# See Africa/Maputo. diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/asia --- a/jdk/test/sun/util/calendar/zi/tzdata/asia Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/asia Wed Dec 03 19:28:35 2014 +0000 @@ -29,20 +29,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2013-08-11): +# From Paul Eggert (2014-10-31): # -# A good source for time zone historical data outside the U.S. is +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Another source occasionally used is Edward W. Whitman, World Time Differences, # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which @@ -70,10 +69,11 @@ # 3:30 IRST IRDT Iran # 4:00 GST Gulf* # 5:30 IST India -# 7:00 ICT Indochina* +# 7:00 ICT Indochina, most times and locations* # 7:00 WIB west Indonesia (Waktu Indonesia Barat) # 8:00 WITA central Indonesia (Waktu Indonesia Tengah) # 8:00 CST China +# 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)* # 8:00 JWST Western Standard Time (Japan, 1896/1937)* # 9:00 JCST Central Standard Time (Japan, 1896/1937) # 9:00 WIT east Indonesia (Waktu Indonesia Timur) @@ -294,12 +294,8 @@ 6:30 - MMT # Myanmar Time # Cambodia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9 - 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? - 7:00 - ICT 1912 May - 8:00 - ICT 1931 May - 7:00 - ICT +# See Asia/Bangkok. + # China @@ -916,6 +912,10 @@ # Indonesia # +# From Paul Eggert (2014-09-06): +# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia +# civil time was 7:07:12.5; round to even for Jakarta. +# # From Gwillim Law (2001-05-28), overriding Shanks & Pottenger: # http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime # says that Indonesia's time zones changed on 1988-01-01. Looking at some @@ -1685,44 +1685,70 @@ # Korea (North and South) # From Annie I. Bang (2006-07-10): -# http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp -# The Ministry of Commerce, Industry and Energy has already -# commissioned a research project [to reintroduce DST] and has said -# the system may begin as early as 2008.... Korea ran a daylight -# saving program from 1949-61 but stopped it during the 1950-53 Korean War. +# http://www.koreaherald.com/view.php?ud=200607100012 +# Korea ran a daylight saving program from 1949-61 but stopped it +# during the 1950-53 Korean War. The system was temporarily enforced +# between 1987 and 1988 ... -# From Shanks & Pottenger: +# From Sanghyuk Jung (2014-10-29): +# http://mm.icann.org/pipermail/tz/2014-October/021830.html +# According to the Korean Wikipedia +# http://ko.wikipedia.org/wiki/한국_표준시 +# [oldid=12896437 2014-09-04 08:03 UTC] +# DST in Republic of Korea was as follows.... And I checked old +# newspapers in Korean, all articles correspond with data in Wikipedia. +# For example, the article in 1948 (Korean Language) proved that DST +# started at June 1 in that year. For another example, the article in +# 1988 said that DST started at 2:00 AM in that year. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule ROK 1960 only - May 15 0:00 1:00 D -Rule ROK 1960 only - Sep 13 0:00 0 S -Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D -Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S +Rule ROK 1948 only - Jun 1 0:00 1:00 D +Rule ROK 1948 only - Sep 13 0:00 0 S +Rule ROK 1949 only - Apr 3 0:00 1:00 D +Rule ROK 1949 1951 - Sep Sun>=8 0:00 0 S +Rule ROK 1950 only - Apr 1 0:00 1:00 D +Rule ROK 1951 only - May 6 0:00 1:00 D +Rule ROK 1955 only - May 5 0:00 1:00 D +Rule ROK 1955 only - Sep 9 0:00 0 S +Rule ROK 1956 only - May 20 0:00 1:00 D +Rule ROK 1956 only - Sep 30 0:00 0 S +Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D +Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S +Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D +Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S -# From Paul Eggert (2014-07-01): -# The following entries are from Shanks & Pottenger, except that I -# guessed that time zone abbreviations through 1945 followed the same +# From Paul Eggert (2014-10-30): +# The Korean Wikipedia entry gives the following sources for UT offsets: +# +# 1908: Official Journal Article No. 3994 (Edict No. 5) +# 1912: Governor-General of Korea Official Gazette Issue No. 367 +# (Announcement No. 338) +# 1954: Presidential Decree No. 876 (1954-03-17) +# 1961: Law No. 676 (1961-08-07) +# 1987: Law No. 3919 (1986-12-31) +# +# The Wikipedia entry also has confusing information about a change +# to UT+9 in April 1910, but then what would be the point of the later change +# to UT+9 on 1912-01-01? Omit the 1910 change for now. +# +# I guessed that time zone abbreviations through 1945 followed the same # rules as discussed under Taiwan, with nominal switches from JST to KST # when the respective cities were taken over by the Allies after WWII. +# +# For Pyongyang we have no information; guess no changes since World War II. # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Seoul 8:27:52 - LMT 1890 - 8:30 - KST 1904 Dec - 9:00 - JCST 1928 - 8:30 - KST 1932 +Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 + 8:30 - KST 1912 Jan 1 9:00 - JCST 1937 Oct 1 9:00 - JST 1945 Sep 8 9:00 - KST 1954 Mar 21 - 8:00 ROK K%sT 1961 Aug 10 - 8:30 - KST 1968 Oct + 8:30 ROK K%sT 1961 Aug 10 9:00 ROK K%sT -Zone Asia/Pyongyang 8:23:00 - LMT 1890 - 8:30 - KST 1904 Dec - 9:00 - JCST 1928 - 8:30 - KST 1932 +Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1 + 8:30 - KST 1912 Jan 1 9:00 - JCST 1937 Oct 1 9:00 - JST 1945 Aug 24 - 9:00 - KST 1954 Mar 21 - 8:00 - KST 1961 Aug 10 9:00 - KST ############################################################################### @@ -1733,12 +1759,8 @@ 3:00 - AST # Laos -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan - 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? - 7:00 - ICT 1912 May - 8:00 - ICT 1931 May - 7:00 - ICT +# See Asia/Bangkok. + # Lebanon # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -2751,6 +2773,8 @@ Zone Asia/Bangkok 6:42:04 - LMT 1880 6:42:04 - BMT 1920 Apr # Bangkok Mean Time 7:00 - ICT +Link Asia/Bangkok Asia/Phnom_Penh # Cambodia +Link Asia/Bangkok Asia/Vientiane # Laos # Turkmenistan # From Shanks & Pottenger. @@ -2788,22 +2812,65 @@ # Vietnam -# From Paul Eggert (2013-02-21): +# From Paul Eggert (2014-10-04): # Milne gives 7:16:56 for the meridian of Saigon in 1899, as being # used in Lower Laos, Cambodia, and Annam. But this is quite a ways # from Saigon's location. For now, ignore this and stick with Shanks -# and Pottenger. +# and Pottenger for LMT before 1906. # From Arthur David Olson (2008-03-18): # The English-language name of Vietnam's most populous city is "Ho Chi Minh # City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters. -# From Shanks & Pottenger: +# From Paul Eggert (2014-10-21) after a heads-up from Trần Ngọc Quân: +# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)" +# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50, +# is quoted verbatim in: +# http://www.thoigian.com.vn/?mPage=P80D01 +# is translated by Brian Inglis in: +# http://mm.icann.org/pipermail/tz/2014-October/021654.html +# and is the basis for the information below. +# +# The 1906 transition was effective July 1 and standardized Indochina to +# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris. +# It's unclear whether this meant legal Paris Mean Time (00:09:21) or +# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333... +# and the latter 07:06:29.333... so either way it rounds to 07:06:30, +# which is used below even though the modern-day Phù Liễn Observatory +# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT. +# +# The following transitions occurred in Indochina in general (before 1954) +# and in South Vietnam in particular (after 1954): +# To 07:00 on 1911-05-01. +# To 08:00 on 1942-12-31 at 23:00. +# To 09:00 in 1945-03-14 at 23:00. +# To 07:00 on 1945-09-02 in Vietnam. +# To 08:00 on 1947-04-01 in French-controlled Indochina. +# To 07:00 on 1955-07-01 in South Vietnam. +# To 08:00 on 1959-12-31 at 23:00 in South Vietnam. +# To 07:00 on 1975-06-13 in South Vietnam. +# +# Trần cites the following sources; it's unclear which supplied the info above. +# +# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội, +# No. 9, Paris, February 1982. +# +# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)", +# NXB Thống kê, Hanoi, 2000. +# +# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu", +# NXB Thuận Hoá, Huế, 1995. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9 - 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? - 7:00 - ICT 1912 May - 8:00 - ICT 1931 May +Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1 + 7:06:30 - PLMT 1911 May 1 + 7:00 - ICT 1942 Dec 31 23:00 + 8:00 - IDT 1945 Mar 14 23:00 + 9:00 - JST 1945 Sep 2 + 7:00 - ICT 1947 Apr 1 + 8:00 - IDT 1955 Jul 1 + 7:00 - ICT 1959 Dec 31 23:00 + 8:00 - IDT 1975 Jun 13 7:00 - ICT # Yemen diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/australasia --- a/jdk/test/sun/util/calendar/zi/tzdata/australasia Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/australasia Wed Dec 03 19:28:35 2014 +0000 @@ -354,20 +354,27 @@ # Fiji will end DST on 2014-01-19 02:00: # http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx -# From Paul Eggert (2014-01-10): -# For now, guess that Fiji springs forward the Sunday before the fourth -# Monday in October, and springs back the penultimate Sunday in January. -# This is ad hoc, but matches recent practice. +# From Ken Rylander (2014-10-20): +# DST will start Nov. 2 this year. +# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx + +# From Paul Eggert (2014-10-20): +# For now, guess DST from 02:00 the first Sunday in November to +# 03:00 the first Sunday on or after January 18. Although ad hoc, it +# matches this year's plan and seems more likely to match future +# practice than guessing no DST. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - Rule Fiji 2009 only - Nov 29 2:00 1:00 S Rule Fiji 2010 only - Mar lastSun 3:00 0 - -Rule Fiji 2010 max - Oct Sun>=21 2:00 1:00 S +Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 - -Rule Fiji 2014 max - Jan Sun>=18 2:00 0 - +Rule Fiji 2014 only - Jan Sun>=18 2:00 0 - +Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S +Rule Fiji 2015 max - Jan Sun>=18 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva 12:00 Fiji FJ%sT # Fiji Time @@ -542,6 +549,30 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880 9:48:32 - PMMT 1895 # Port Moresby Mean Time 10:00 - PGT # Papua New Guinea Time +# +# From Paul Eggert (2014-10-13): +# Base the Bougainville entry on the Arawa-Kieta region, which appears to have +# the most people even though it was devastated in the Bougainville Civil War. +# +# Although Shanks gives 1942-03-15 / 1943-11-01 for JST, these dates +# are apparently rough guesswork from the starts of military campaigns. +# The World War II entries below are instead based on Arawa-Kieta. +# The Japanese occupied Kieta in July 1942, +# according to the Pacific War Online Encyclopedia +# http://pwencycl.kgbudge.com/B/o/Bougainville.htm +# and seem to have controlled it until their 1945-08-21 surrender. +# +# The Autonomous Region of Bougainville plans to switch from UTC+10 to UTC+11 +# on 2014-12-28 at 02:00. They call UTC+11 "Bougainville Standard Time"; +# abbreviate this as BST. See: +# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/ +# +Zone Pacific/Bougainville 10:22:16 - LMT 1880 + 9:48:32 - PMMT 1895 + 10:00 - PGT 1942 Jul + 9:00 - JST 1945 Aug 21 + 10:00 - PGT 2014 Dec 28 2:00 + 11:00 - BST # Pitcairn # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -789,19 +820,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2013-02-21): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Another source occasionally used is Edward W. Whitman, World Time Differences, # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which @@ -826,6 +857,7 @@ # 10:00 AEST AEDT Eastern Australia # 10:00 ChST Chamorro # 10:30 LHST LHDT Lord Howe* +# 11:00 BST Bougainville* # 11:30 NZMT NZST New Zealand through 1945 # 12:00 NZST NZDT New Zealand 1946-present # 12:15 CHAST Chatham through 1945* diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/europe --- a/jdk/test/sun/util/calendar/zi/tzdata/europe Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/europe Wed Dec 03 19:28:35 2014 +0000 @@ -29,16 +29,19 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2014-05-31): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # A reliable and entertaining source about time zones is # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). @@ -91,10 +94,11 @@ # 0:00 WET WEST WEMT Western Europe # 0:19:32.13 AMT NST Amsterdam, Netherlands Summer (1835-1937)* # 0:20 NET NEST Netherlands (1937-1940)* +# 1:00 BST British Standard (1968-1971) # 1:00 CET CEST CEMT Central Europe # 1:00:14 SET Swedish (1879-1899)* # 2:00 EET EEST Eastern Europe -# 3:00 FET Further-eastern Europe* +# 3:00 FET Further-eastern Europe (2011-2014)* # 3:00 MSK MSD MSM* Moscow # From Peter Ilieve (1994-12-04), @@ -309,6 +313,14 @@ # "Timeball on the ballast office is down. Dunsink time." # -- James Joyce, Ulysses +# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time +# was among various actions undertaken by the 'English' government that +# would 'put the whole country into the SF (Sinn Féin) camp'. She claimed +# Irish 'public feeling (was) outraged by forcing of English time on us'." +# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising. +# Irish Times 2014-10-27. +# http://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411 + # From Joseph S. Myers (2005-01-26): # Irish laws are available online at . # These include various relating to legal time, for example: @@ -616,6 +628,7 @@ Rule Russia 1993 2010 - Mar lastSun 2:00s 1:00 S Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - Rule Russia 1996 2010 - Oct lastSun 2:00s 0 - +# As described below, Russia's 2014 change affects Zone data, not Rule data. # From Alexander Krivenyshev (2011-06-14): # According to Kremlin press service, Russian President Dmitry Medvedev @@ -746,6 +759,13 @@ # http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html # http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/ # http://news.tut.by/society/250578.html +# +# From Alexander Bokovoy (2014-10-09): +# Belarussian government decided against changing to winter time.... +# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html +# From Paul Eggert (2014-10-08): +# Hence Belarus can share time zone abbreviations with Moscow again. +# # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Minsk 1:50:16 - LMT 1880 1:50 - MMT 1924 May 2 # Minsk Mean Time @@ -758,7 +778,8 @@ 2:00 - EET 1992 Mar 29 0:00s 2:00 1:00 EEST 1992 Sep 27 0:00s 2:00 Russia EE%sT 2011 Mar 27 2:00s - 3:00 - FET + 3:00 - FET 2014 Oct 26 1:00s + 3:00 - MSK # Belgium # @@ -2524,7 +2545,7 @@ # The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus # realigning itself with KRAT. -Zone Asia/Novokuznetsk 5:48:48 - NMT 1920 Jan 6 +Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time 7:00 Russia KRA%sT 1991 Mar 31 2:00s 6:00 Russia KRA%sT 1992 Jan 19 2:00s diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/leapseconds --- a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds Wed Dec 03 19:28:35 2014 +0000 @@ -33,8 +33,8 @@ # The NTP Timescale and Leap Seconds # http://www.eecis.udel.edu/~mills/leap.html -# The International Earth Rotation Service periodically uses leap seconds -# to keep UTC to within 0.9 s of UT1 +# The International Earth Rotation and Reference Systems Service +# periodically uses leap seconds to keep UTC to within 0.9 s of UT1 # (which measures the true angular orientation of the earth in space); see # Terry J Quinn, The BIPM and the accurate measure of time, # Proc IEEE 79, 7 (July 1991), 894-905 . diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/northamerica --- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica Wed Dec 03 19:28:35 2014 +0000 @@ -300,6 +300,12 @@ # time zone, but we do go by the Eastern time zone because so many people work # in Columbus." +# From Paul Eggert (2014-09-06): +# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208 +# says that New York City Hall time was 3 minutes 58.4 seconds fast of +# Eastern time (i.e., -4:56:01.6) just before the 1883 switch. Round to the +# nearest second. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER Rule NYC 1920 only - Mar lastSun 2:00 1:00 D Rule NYC 1920 only - Oct lastSun 2:00 0 S @@ -1008,19 +1014,19 @@ ################################################################################ -# From Paul Eggert (2006-03-22): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. -# -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # # Other sources occasionally used include: # @@ -1118,17 +1124,16 @@ # An amendment to the Interpretation Act was registered on February 19/2007.... # http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf -# From Paul Eggert (2006-04-25): +# From Paul Eggert (2014-10-18): # H. David Matthews and Mary Vincent's map # "It's about TIME", _Canadian Geographic_ (September-October 1998) -# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp +# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp # contains detailed boundaries for regions observing nonstandard # time and daylight saving time arrangements in Canada circa 1998. # -# INMS, the Institute for National Measurement Standards in Ottawa, has -# information about standard and daylight saving time zones in Canada. -# http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php -# (updated periodically). +# National Research Council Canada maintains info about time zones and DST. +# http://www.nrc-cnrc.gc.ca/eng/services/time/time_zones.html +# http://www.nrc-cnrc.gc.ca/eng/services/time/faq/index.html#Q5 # Its unofficial information is often taken from Matthews and Vincent. # From Paul Eggert (2006-06-27): @@ -1993,10 +1998,7 @@ # [Also see (2001-03-09).] # From Gwillim Law (2005-05-21): -# According to maps at -# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg -# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg -# (both dated 2003), and +# According to ... # http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp # (from a 1998 Canadian Geographic article), the de facto and de jure time # for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year @@ -2005,9 +2007,11 @@ # predates the creation of Nunavut, it probably goes back many years.... # The Inuktitut name of Coral Harbour is Sallit, but it's rarely used. # -# From Paul Eggert (2005-07-26): +# From Paul Eggert (2014-10-17): # For lack of better information, assume that Southampton Island observed -# daylight saving only during wartime. +# daylight saving only during wartime. Gwillim Law's email also +# mentioned maps now maintained by National Research Council Canada; +# see above for an up-to-date link. # From Chris Walton (2007-03-01): # ... the community of Resolute (located on Cornwallis Island in @@ -3008,10 +3012,21 @@ # Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an # unspecified official document, and says "This time is used throughout the # island". Go with Milne. Round to the nearest second as required by zic. +# +# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but +# Lance Neita writes that Prime Minister Michael Manley decreed it January 5. +# Assume Neita meant Jan 6 02:00, the same as the US. Neita also writes that +# Manley's supporters associated this act with Manley's nickname "Joshua" +# (recall that in the Bible the sun stood still at Joshua's request), +# and with the Rod of Correction which Manley said he had received from +# Haile Selassie, Emperor of Ethiopia. See: +# Neita L. The politician in all of us. Jamaica Observer 2014-09-20 +# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647 +# # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston -5:07:11 - KMT 1912 Feb # Kingston Mean Time - -5:00 - EST 1974 Apr 28 2:00 + -5:00 - EST 1974 -5:00 US E%sT 1984 -5:00 - EST @@ -3139,13 +3154,17 @@ # From Paul Eggert (2014-08-19): # The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See: # http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm -# Model this as a switch from EST/EDT to AST on 2014-11-02 at 02:00. +# Model this as a switch from EST/EDT to AST ... +# From Chris Walton (2014-11-04): +# ... the TCI government appears to have delayed the switch to +# "permanent daylight saving time" by one year.... +# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm # # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Grand_Turk -4:44:32 - LMT 1890 -5:07:11 - KMT 1912 Feb # Kingston Mean Time -5:00 - EST 1979 - -5:00 US E%sT 2014 Nov 2 2:00 + -5:00 US E%sT 2015 Nov Sun>=1 2:00 -4:00 - AST # British Virgin Is diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/southamerica --- a/jdk/test/sun/util/calendar/zi/tzdata/southamerica Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/southamerica Wed Dec 03 19:28:35 2014 +0000 @@ -29,23 +29,23 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2006-03-22): -# A good source for time zone historical data outside the U.S. is +# From Paul Eggert (2014-10-31): +# +# Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), # San Diego: ACS Publications, Inc. (2003). -# -# For data circa 1899, a common source is: -# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. -# http://www.jstor.org/stable/1774359 +# Unfortunately this book contains many errors and cites no sources. # # Gwillim Law writes that a good source # for recent time zone data is the International Air Transport # Association's Standard Schedules Information Manual (IATA SSIM), # published semiannually. Law sent in several helpful summaries -# of the IATA's data after 1990. +# of the IATA's data after 1990. Except where otherwise noted, +# IATA SSIM is the source for entries after 1990. # -# Except where otherwise noted, Shanks & Pottenger is the source for -# entries through 1990, and IATA SSIM is the source for entries afterwards. +# For data circa 1899, a common source is: +# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. +# http://www.jstor.org/stable/1774359 # # Earlier editions of these tables used the North American style (e.g. ARST and # ARDT for Argentine Standard and Daylight Time), but the following quote diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/sun/util/calendar/zi/tzdata/zone.tab --- a/jdk/test/sun/util/calendar/zi/tzdata/zone.tab Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab Wed Dec 03 19:28:35 2014 +0000 @@ -330,7 +330,8 @@ PF -1732-14934 Pacific/Tahiti Society Islands PF -0900-13930 Pacific/Marquesas Marquesas Islands PF -2308-13457 Pacific/Gambier Gambier Islands -PG -0930+14710 Pacific/Port_Moresby +PG -0930+14710 Pacific/Port_Moresby most locations +PG -0613+15534 Pacific/Bougainville Bougainville PH +1435+12100 Asia/Manila PK +2452+06703 Asia/Karachi PL +5215+02100 Europe/Warsaw diff -r 9fffb959eb41 -r 097b1d6f6894 jdk/test/tools/launcher/TestHelper.java --- a/jdk/test/tools/launcher/TestHelper.java Wed Jul 05 20:08:43 2017 +0200 +++ b/jdk/test/tools/launcher/TestHelper.java Wed Dec 03 19:28:35 2014 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,6 +50,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Arrays; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; @@ -333,15 +334,10 @@ } static void createJar(String... args) { - sun.tools.jar.Main jarTool = - new sun.tools.jar.Main(System.out, System.err, "JarCreator"); - if (!jarTool.run(args)) { - String message = "jar creation failed with command:"; - for (String x : args) { - message = message.concat(" " + x); - } - throw new RuntimeException(message); - } + List cmdList = new ArrayList<>(); + cmdList.add(jarCmd); + cmdList.addAll(Arrays.asList(args)); + doExec(cmdList.toArray(new String[cmdList.size()])); } static void copyStream(InputStream in, OutputStream out) throws IOException {