changeset 1318:47179339f3eb

Merge
author lana
date Wed, 24 Sep 2008 08:14:37 -0700
parents d718a4419361 0ba1e3d36c19
children 78f5e33f23af
files jdk/make/java/java/FILES_java.gmk jdk/make/tools/auto_multi/Makefile jdk/make/tools/src/build/tools/automulti/AutoMulti.java jdk/make/tools/src/build/tools/automulti/README.txt jdk/make/tools/src/build/tools/automulti/TestALFGenerator.java jdk/make/tools/src/build/tools/automulti/TestALFLookAndFeel.java jdk/src/share/classes/javax/swing/colorchooser/DefaultHSBChooserPanel.java jdk/src/share/classes/javax/swing/colorchooser/DefaultRGBChooserPanel.java jdk/src/share/classes/javax/swing/colorchooser/SyntheticImage.java jdk/test/javax/swing/JFileChooser/4252173/bug4252173.java jdk/test/javax/swing/JFileChooser/6524424/bug6524424.html jdk/test/javax/swing/JFileChooser/6524424/bug6524424.java
diffstat 320 files changed, 11719 insertions(+), 7049 deletions(-) [+]
line wrap: on
line diff
--- a/jdk/make/java/java/FILES_java.gmk	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/java/java/FILES_java.gmk	Wed Sep 24 08:14:37 2008 -0700
@@ -209,6 +209,7 @@
         sun/util/TimeZoneNameUtility.java \
         sun/util/calendar/ZoneInfo.java \
         sun/util/calendar/ZoneInfoFile.java \
+        sun/util/calendar/TzIDOldMapping.java \
     java/util/TooManyListenersException.java \
     java/util/Comparator.java \
     java/util/Collections.java \
--- a/jdk/make/javax/swing/Makefile	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/javax/swing/Makefile	Wed Sep 24 08:14:37 2008 -0700
@@ -33,7 +33,7 @@
 # Files
 #
 include FILES.gmk
-AUTO_FILES_JAVA_DIRS = javax/swing sun/swing
+AUTO_FILES_JAVA_DIRS = javax/swing sun/swing com/sun/java/swing
 AUTO_JAVA_PRUNE = plaf
 
 SUBDIRS = html32dtd plaf
--- a/jdk/make/sun/javazic/tzdata/VERSION	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/VERSION	Wed Sep 24 08:14:37 2008 -0700
@@ -21,4 +21,4 @@
 # CA 95054 USA or visit www.sun.com if you need additional information or
 # have any questions.
 #
-tzdata2007h
+tzdata2008e
--- a/jdk/make/sun/javazic/tzdata/africa	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/africa	Wed Sep 24 08:14:37 2008 -0700
@@ -409,9 +409,63 @@
 			 0:00	-	GMT
 
 # Mauritius
+
+# From Steffen Thorsen (2008-06-25):
+# Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
+# basis....
+# It seems that Mauritius observed daylight saving time from 1982-10-10 to 
+# 1983-03-20 as well, but that was not successful....
+# http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html
+
+# From Alex Krivenyshev (2008-06-25):
+# http://economicdevelopment.gov.mu/portal/site/Mainhomepage/menuitem.a42b24128104d9845dabddd154508a0c/?content_id=0a7cee8b5d69a110VgnVCM1000000a04a8c0RCRD
+
+# From Arthur David Olson (2008-06-30):
+# The www.timeanddate.com article cited by Steffen Thorsen notes that "A
+# final decision has yet to be made on the times that daylight saving
+# would begin and end on these dates." As a place holder, use midnight.
+
+# From Paul Eggert (2008-06-30):
+# Follow Thorsen on DST in 1982/1983, instead of Shanks & Pottenger.
+
+# From Steffen Thorsen (2008-07-10):
+# According to
+# <a href="http://www.lexpress.mu/display_article.php?news_id=111216">
+# http://www.lexpress.mu/display_article.php?news_id=111216
+# </a>
+# (in French), Mauritius will start and end their DST a few days earlier
+# than previously announced (2008-11-01 to 2009-03-31).  The new start
+# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
+# given, but it is probably at either 2 or 3 wall clock time).
+# 
+# A little strange though, since the article says that they moved the date 
+# to align itself with Europe and USA which also change time on that date, 
+# but that means they have not paid attention to what happened in 
+# USA/Canada last year (DST ends first Sunday in November). I also wonder 
+# why that they end on a Friday, instead of aligning with Europe which 
+# changes two days later.
+
+# From Alex Krivenyshev (2008-07-11):
+# Seems that English language article "The revival of daylight saving
+# time:  Energy conservation?"-# No. 16578 (07/11/2008) was originally
+# published on Monday, June 30, 2008...
+#
+# I guess that article in French "Le gouvernement avance l'introduction
+# de l'heure d'ete" stating that DST in Mauritius starting on October 26
+# and ending on March 27, 2009 is the most recent one.
+# ...
+# <a href="http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html">
+# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
+# </a>
+
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule Mauritius	1982	only	-	Oct	10	0:00	1:00	S
+Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
+Rule Mauritius	2008	only	-	Oct	26	2:00s	1:00	S
+Rule Mauritius	2009	only	-	Mar	27	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
-			4:00	-	MUT	# Mauritius Time
+			4:00 Mauritius	MU%sT	# Mauritius Time
 # Agalega Is, Rodriguez
 # no information; probably like Indian/Mauritius
 
@@ -422,6 +476,77 @@
 
 # Morocco
 # See the `europe' file for Spanish Morocco (Africa/Ceuta).
+
+# From Alex Krivenyshev (2008-05-09):
+# Here is an article that Morocco plan to introduce Daylight Saving Time between
+# 1 June, 2008 and 27 September, 2008.
+#
+# "... Morocco is to save energy by adjusting its clock during summer so it will
+# be one hour ahead of GMT between 1 June and 27 September, according to
+# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
+#
+# <a href="http://www.worldtimezone.net/dst_news/dst_news_morocco01.html">
+# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
+# </a>
+# OR
+# <a href="http://en.afrik.com/news11892.html">
+# http://en.afrik.com/news11892.html
+# </a>
+
+# From Alex Krivenyshev (2008-05-09):
+# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
+# <a href="http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view">
+# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
+# </a>
+#
+# Morocco shifts to daylight time on June 1st through September 27, Govt.
+# spokesman.
+
+# From Patrice Scattolin (2008-05-09):
+# According to this article:
+# <a href="http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html">
+# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
+# </a>
+# (and republished here:
+# <a href="http://www.actu.ma/heure-dete-comment_i127896_0.html">
+# http://www.actu.ma/heure-dete-comment_i127896_0.html
+# </a>
+# )
+# the changes occurs at midnight:
+#
+# saturday night may 31st at midnight (which in french is to be
+# intrepreted as the night between saturday and sunday)
+# sunday night the 28th  at midnight
+#
+# Seeing that the 28th is monday, I am guessing that she intends to say
+# the midnight of the 28th which is the midnight between sunday and
+# monday, which jives with other sources that say that it's inclusive
+# june1st to sept 27th.
+#
+# The decision was taken by decree *2-08-224 *but I can't find the decree
+# published on the web.
+#
+# It's also confirmed here:
+# <a href="http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm">
+# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
+# </a>
+# on a government portal as being  between june 1st and sept 27th (not yet
+# posted in english).
+#
+# The following google query will generate many relevant hits:
+# <a href="http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search">
+# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
+# </a>
+
+# From Alex Krivenyshev (2008-05-09):
+# Is Western Sahara (part which administrated by Morocco) going to follow
+# Morocco DST changes?  Any information?  What about other part of
+# Western Sahara - under administration of POLISARIO Front (also named
+# SADR Saharawi Arab Democratic Republic)?
+
+# From Arthur David Olson (2008-05-09):
+# XXX--guess that it is only Morocco for now; guess only 2008 for now.
+
 # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
 Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
@@ -438,11 +563,13 @@
 Rule	Morocco	1977	only	-	Sep	28	 0:00	0	-
 Rule	Morocco	1978	only	-	Jun	 1	 0:00	1:00	S
 Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
+Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	S
+Rule	Morocco	2008	only	-	Sep	28	 0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
 			 0:00	Morocco	WE%sT	1984 Mar 16
 			 1:00	-	CET	1986
-			 0:00	-	WET
+			 0:00	Morocco	WE%sT
 # Western Sahara
 Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
 			-1:00	-	WAT	1976 Apr 14
--- a/jdk/make/sun/javazic/tzdata/asia	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/asia	Wed Sep 24 08:14:37 2008 -0700
@@ -251,6 +251,28 @@
 # (could be true), for the moment I am assuming that those two
 # counties are mistakes in the astro.com data.
 
+# From Paul Eggert (2008-02-11):
+# I just now checked Google News for western news sources that talk
+# about China's single time zone, and couldn't find anything before 1986
+# talking about China being in one time zone.  (That article was: Jim
+# Mann, "A clumsy embrace for another western custom: China on daylight
+# time--sort of", Los Angeles Times, 1986-05-05.  By the way, this
+# article confirms the tz database's data claiming that China began
+# observing daylight saving time in 1986.
+#
+# From Thomas S. Mullaney (2008-02-11):
+# I think you're combining two subjects that need to treated 
+# separately: daylight savings (which, you're correct, wasn't 
+# implemented until the 1980s) and the unified time zone centered near 
+# Beijing (which was implemented in 1949). Briefly, there was also a 
+# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was 
+# ceased, and the second eventually recognized (again, in the 1980s).
+#
+# From Paul Eggert (2008-06-30):
+# There seems to be a good chance China switched to a single time zone in 1949
+# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
+# reliable documentary source saying so yet, so for now we still go with
+# Shanks & Pottenger.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
@@ -468,13 +490,13 @@
 
 # India
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Calcutta	5:53:28 -	LMT	1880	# Kolkata
+Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
 			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
 			6:30	-	BURT	1942 May 15 # Burma Time
 			5:30	-	IST	1942 Sep
 			5:30	1:00	IST	1945 Oct 15
 			5:30	-	IST
-# The following are like Asia/Calcutta:
+# The following are like Asia/Kolkata:
 #	Andaman Is
 #	Lakshadweep (Laccadive, Minicoy and Amindivi Is)
 #	Nicobar Is
@@ -599,6 +621,15 @@
 # daylight saving time ...
 # http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
 #
+# From Roozbeh Pournader (2007-11-05):
+# This is quoted from Official Gazette of the Islamic Republic of
+# Iran, Volume 63, Number 18242, dated Tuesday 1386/6/24
+# [2007-10-16]. I am doing the best translation I can:...
+# The official time of the country will be moved forward for one hour
+# on the 24 hours of the first day of the month of Farvardin and will
+# be changed back to its previous state on the 24 hours of the
+# thirtieth day of Shahrivar.
+#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Iran	1978	1980	-	Mar	21	0:00	1:00	D
 Rule	Iran	1978	only	-	Oct	21	0:00	0	S
@@ -673,6 +704,21 @@
 #
 # So we'll ignore the Economist's claim.
 
+# From Steffen Thorsen (2008-03-10):
+# The cabinet in Iraq abolished DST last week, according to the following
+# news sources (in Arabic):
+# <a href="http://www.aljeeran.net/wesima_articles/news-20080305-98602.html">
+# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
+# </a>
+# <a href="http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10">
+# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
+# </a>
+#
+# We have published a short article in English about the change:
+# <a href="http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html">
+# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
+# </a>
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Iraq	1982	only	-	May	1	0:00	1:00	D
 Rule	Iraq	1982	1984	-	Oct	1	0:00	0	S
@@ -683,8 +729,8 @@
 # IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
 # Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
 #
-Rule	Iraq	1991	max	-	Apr	 1	3:00s	1:00	D
-Rule	Iraq	1991	max	-	Oct	 1	3:00s	0	S
+Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	D
+Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baghdad	2:57:40	-	LMT	1890
 			2:57:36	-	BMT	1918	    # Baghdad Mean Time?
@@ -1374,6 +1420,42 @@
 # They decided not to adopt daylight-saving time....
 # http://www.mongolnews.mn/index.php?module=unuudur&sec=view&id=15742
 
+# From Deborah Goldsmith (2008-03-30):
+# We received a bug report claiming that the tz database UTC offset for
+# Asia/Choibalsan (GMT+09:00) is incorrect, and that it should be GMT
+# +08:00 instead. Different sources appear to disagree with the tz
+# database on this, e.g.:
+#
+# <a href="http://www.timeanddate.com/worldclock/city.html?n=1026">
+# http://www.timeanddate.com/worldclock/city.html?n=1026
+# </a>
+# <a href="http://www.worldtimeserver.com/current_time_in_MN.aspx">
+# http://www.worldtimeserver.com/current_time_in_MN.aspx
+# </a>
+#
+# both say GMT+08:00.
+
+# From Steffen Thorsen (2008-03-31):
+# eznis airways, which operates several domestic flights, has a flight
+# schedule here:
+# <a href="http://www.eznis.com/Container.jsp?id=112">
+# http://www.eznis.com/Container.jsp?id=112
+# </a>
+# (click the English flag for English)
+#
+# There it appears that flights between Choibalsan and Ulaanbatar arrive
+# about 1:35 - 1:50 hours later in local clock time, no matter the
+# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
+# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
+# in different time zones (like we know about), while Choibalsan and
+# Ulaanbatar are in the same time zone (correction needed).
+
+# From Arthur David Olson (2008-05-19):
+# Assume that Choibalsan is indeed offset by 8:00.
+# XXX--in the absence of better information, assume that transition
+# was at the start of 2008-03-31 (the day of Steffen Thorsen's report);
+# this is almost surely wrong.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Mongol	1983	1984	-	Apr	1	0:00	1:00	S
 Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
@@ -1409,7 +1491,8 @@
 Zone	Asia/Choibalsan	7:38:00 -	LMT	1905 Aug
 			7:00	-	ULAT	1978
 			8:00	-	ULAT	1983 Apr
-			9:00	Mongol	CHO%sT	# Choibalsan Time
+			9:00	Mongol	CHO%sT	2008 Mar 31 # Choibalsan Time
+			8:00	Mongol	CHO%sT
 
 # Nepal
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1459,10 +1542,32 @@
 # The minister told a news conference that the experiment had rather
 # shown 8 per cent higher consumption of electricity.
 
+# From Alex Krivenyshev (2008-05-15):
+# 
+# Here is an article that Pakistan plan to introduce Daylight Saving Time 
+# on June 1, 2008 for 3 months.
+# 
+# "... The federal cabinet on Wednesday announced a new conservation plan to help 
+# reduce load shedding by approving the closure of commercial centres at 9pm and 
+# moving clocks forward by one hour for the next three months. 
+# ...."
+# 
+# <a href="http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html">
+# http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
+# </a>
+# OR
+# <a href="http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4">
+# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
+# </a>
+
+# From Arthur David Olson (2008-05-19):
+# XXX--midnight transitions is a guess; 2008 only is a guess.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule Pakistan	2002	only	-	Apr	Sun>=2	0:01	1:00	S
 Rule Pakistan	2002	only	-	Oct	Sun>=2	0:01	0	-
+Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
+Rule Pakistan	2008	only	-	Sep	1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Karachi	4:28:12 -	LMT	1907
 			5:30	-	IST	1942 Sep
@@ -1700,7 +1805,7 @@
 # kept their clocks set five and a half hours ahead of Greenwich Mean
 # Time (GMT), in line with neighbor India.
 # From Paul Eggert (2006-04-18):
-# People who live in regions under Tamil control can use TZ='Asia/Calcutta',
+# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'],
 # as that zone has agreed with the Tamil areas since our cutoff date of 1970.
 
 # From K Sethu (2006-04-25):
@@ -1790,10 +1895,62 @@
 # From Paul Eggert (2007-03-29):
 # Today the AP reported "Syria will switch to summertime at midnight Thursday."
 # http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
-# For lack of better info, assume the rule changed to "last Friday in March"
-# this year.
-Rule	Syria	2007	max	-	Mar	lastFri	0:00	1:00	S
-Rule	Syria	2007	max	-	Oct	 1	0:00	0	-
+Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
+# From Jesper Norgard (2007-10-27):
+# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
+# not take place 1.st November at 0:00 o'clock but 1.st November at 24:00 or
+# rather Midnight between Thursday and Friday. This does make more sence than
+# having it between Wednesday and Thursday (two workdays in Syria) since the
+# weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
+# it is implemented at midnight of the last workday before weekend...
+# 
+# From Steffen Thorsen (2007-10-27):
+# Jesper Norgaard Welen wrote:
+# 
+# > "Winter local time in Syria will be observed at midnight of Thursday 1
+# > November 2007, and the clock will be put back 1 hour."
+# 
+# I found confirmation on this in this gov.sy-article (Arabic):
+# http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247
+# 
+# which using Google's translate tools says:
+# Council of Ministers also approved the commencement of work on 
+# identifying the winter time as of Friday, 2/11/2007 where the 60th 
+# minute delay at midnight Thursday 1/11/2007.
+Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
+
+# From Stephen Colebourne (2008-03-17):
+# For everyone's info, I saw an IATA time zone change for [Syria] for
+# this month (March 2008) in the last day or so...This is the data IATA
+# are now using:
+# Country     Time Standard   --- DST Start ---   --- DST End ---  DST
+# Name        Zone Variation   Time    Date        Time    Date
+# Variation
+# Syrian Arab
+# Republic    SY    +0200      2200  03APR08       2100  30SEP08   +0300
+#                              2200  02APR09       2100  30SEP09   +0300
+#                              2200  01APR10       2100  30SEP10   +0300
+
+# From Arthur David Olson (2008-03-17):
+# Here's a link to English-language coverage by the Syrian Arab News
+# Agency (SANA)...
+# <a href="http://www.sana.sy/eng/21/2008/03/11/165173.htm">
+# http://www.sana.sy/eng/21/2008/03/11/165173.htm
+# </a>...which reads (in part) "The Cabinet approved the suggestion of the
+# Ministry of Electricity to begin daylight savings time on Friday April
+# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
+# Since Syria is two hours east of UTC, the 2200 and 2100 transition times
+# shown above match up with midnight in Syria.
+
+# From Arthur David Olson (2008-03-18):
+# My buest guess at a Syrian rule is "the Friday nearest April 1";
+# coding that involves either using a "Mar Fri>=29" construct that old time zone
+# compilers can't handle  or having multiple Rules (a la Israel).
+# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
+
+Rule	Syria	2008	max	-	Apr	Fri>=1	0:00	1:00	S
+Rule	Syria	2008	max	-	Oct	1	0:00	0	-
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
 			2:00	Syria	EE%sT
@@ -1847,13 +2004,13 @@
 
 # Vietnam
 
-# From Paul Eggert (1993-11-18):
-# Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
-# We'll stick with the traditional name for now.
+# From Arthur David Olson (2008-03-18):
+# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
+# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
 
 # From Shanks & Pottenger:
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Saigon	7:06:40 -	LMT	1906 Jun  9
+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
--- a/jdk/make/sun/javazic/tzdata/australasia	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/australasia	Wed Sep 24 08:14:37 2008 -0700
@@ -1368,7 +1368,7 @@
 # * Tonga will introduce DST in November
 #
 # I was given this link by John Letts:
-# <a hef="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
+# <a href="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
 # http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
 # </a>
 #
@@ -1378,7 +1378,7 @@
 # (12 + 1 hour DST).
 
 # From Arthur David Olson (1999-09-20):
-# According to <a href="http://www.tongaonline.com/news/sept1799.html>
+# According to <a href="http://www.tongaonline.com/news/sept1799.html">
 # http://www.tongaonline.com/news/sept1799.html
 # </a>:
 # "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
--- a/jdk/make/sun/javazic/tzdata/backward	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/backward	Wed Sep 24 08:14:37 2008 -0700
@@ -46,12 +46,15 @@
 Link	Asia/Ashgabat		Asia/Ashkhabad
 Link	Asia/Chongqing		Asia/Chungking
 Link	Asia/Dhaka		Asia/Dacca
+Link	Asia/Kolkata		Asia/Calcutta
 Link	Asia/Macau		Asia/Macao
 Link	Asia/Jerusalem		Asia/Tel_Aviv
+Link	Asia/Ho_Chi_Minh	Asia/Saigon
 Link	Asia/Thimphu		Asia/Thimbu
 Link	Asia/Makassar		Asia/Ujung_Pandang
 Link	Asia/Ulaanbaatar	Asia/Ulan_Bator
 Link	Atlantic/Faroe		Atlantic/Faeroe
+Link	Europe/Oslo		Atlantic/Jan_Mayen
 Link	Australia/Sydney	Australia/ACT
 Link	Australia/Sydney	Australia/Canberra
 Link	Australia/Lord_Howe	Australia/LHI
--- a/jdk/make/sun/javazic/tzdata/europe	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/europe	Wed Sep 24 08:14:37 2008 -0700
@@ -479,7 +479,7 @@
 Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
 # The most recent directive covers the years starting in 2002.  See:
-# <a href="http://europa.eu.int/eur-lex/en/lif/dat/2000/en_300L0084.html"
+# <a href="http://europa.eu.int/eur-lex/en/lif/dat/2000/en_300L0084.html">
 # Directive 2000/84/EC of the European Parliament and of the Council
 # of 19 January 2001 on summer-time arrangements.
 # </a>
@@ -502,9 +502,48 @@
 Rule	C-Eur	1942	only	-	Nov	 2	 2:00s	0	-
 Rule	C-Eur	1943	only	-	Mar	29	 2:00s	1:00	S
 Rule	C-Eur	1943	only	-	Oct	 4	 2:00s	0	-
-Rule	C-Eur	1944	only	-	Apr	 3	 2:00s	1:00	S
+Rule	C-Eur	1944	1945	-	Apr	Mon>=1	 2:00s	1:00	S
 # Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
 Rule	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
+# From Jesper Norgaard Welen (2008-07-13):
+#
+# I found what is probably a typo of 2:00 which should perhaps be 2:00s
+# in the C-Eur rule from tz database version 2008d (this part was
+# corrected in version 2008d). The circumstancial evidence is simply the
+# tz database itself, as seen below:
+#
+# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01
+#    0:00 France WE%sT 1945 Sep 16  3:00
+#
+# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
+#    0:00 France WE%sT 1945 Sep 16 3:00
+#
+# Zone Europe/Belgrade 1:22:00 - LMT 1884
+#    1:00 1:00 CEST 1945 Sep 16  2:00s
+#
+# Rule France 1945 only - Sep 16  3:00 0 -
+# Rule Belgium 1945 only - Sep 16  2:00s 0 -
+# Rule Neth 1945 only - Sep 16 2:00s 0 -
+#
+# The rule line to be changed is:
+#
+# Rule C-Eur 1945 only - Sep 16  2:00 0 -
+#
+# It seems that Paris, Monaco, Rule France, Rule Belgium all agree on
+# 2:00 standard time, e.g. 3:00 local time.  However there are no
+# countries that use C-Eur rules in September 1945, so the only items
+# affected are apparently these ficticious zones that translates acronyms
+# CET and MET:
+#
+# Zone CET  1:00 C-Eur CE%sT
+# Zone MET  1:00 C-Eur ME%sT
+#
+# It this is right then the corrected version would look like:
+#
+# Rule C-Eur 1945 only - Sep 16  2:00s 0 -
+#
+# A small step for mankind though 8-)
+Rule	C-Eur	1945	only	-	Sep	16	 2:00s	0	-
 Rule	C-Eur	1977	1980	-	Apr	Sun>=1	 2:00s	1:00	S
 Rule	C-Eur	1977	only	-	Sep	lastSun	 2:00s	0	-
 Rule	C-Eur	1978	only	-	Oct	 1	 2:00s	0	-
@@ -747,7 +786,8 @@
 Zone	Europe/Sofia	1:33:16 -	LMT	1880
 			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
 			2:00	-	EET	1942 Nov  2  3:00
-			1:00	C-Eur	CE%sT	1945 Apr  2  3:00
+			1:00	C-Eur	CE%sT	1945
+			1:00	-	CET	1945 Apr 2 3:00
 			2:00	-	EET	1979 Mar 31 23:00
 			2:00	Bulg	EE%sT	1982 Sep 26  2:00
 			2:00	C-Eur	EE%sT	1991
@@ -1115,33 +1155,40 @@
 # [See tz-link.htm for the URL.]
 
 # From Joerg Schilling (2002-10-23):
-# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by <a
-# href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/">
+# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
+# <a href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/">
 # General [Nikolai] Bersarin</a>.
 
 # From Paul Eggert (2003-03-08):
 # <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf">
+# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
+# </a>
 # says that Bersarin issued an order to use Moscow time on May 20.
 # However, Moscow did not observe daylight saving in 1945, so
 # this was equivalent to CEMT (GMT+3), not GMT+4.
 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Germany	1945	only	-	Apr	 2	2:00s	1:00	S
-Rule	Germany	1945	only	-	May	24	2:00	2:00	M # Midsummer
-Rule	Germany	1945	only	-	Sep	24	3:00	1:00	S
-Rule	Germany	1945	only	-	Nov	18	2:00s	0	-
 Rule	Germany	1946	only	-	Apr	14	2:00s	1:00	S
 Rule	Germany	1946	only	-	Oct	 7	2:00s	0	-
 Rule	Germany	1947	1949	-	Oct	Sun>=1	2:00s	0	-
-Rule	Germany	1947	only	-	Apr	 6	2:00s	1:00	S
+# http://www.ptb.de/de/org/4/44/441/salt.htm says the following transition
+# occurred at 3:00 MEZ, not the 2:00 MEZ given in Shanks & Pottenger.
+# Go with the PTB.
+Rule	Germany	1947	only	-	Apr	 6	3:00s	1:00	S
 Rule	Germany	1947	only	-	May	11	2:00s	2:00	M
 Rule	Germany	1947	only	-	Jun	29	3:00	1:00	S
 Rule	Germany	1948	only	-	Apr	18	2:00s	1:00	S
 Rule	Germany	1949	only	-	Apr	10	2:00s	1:00	S
+
+Rule SovietZone	1945	only	-	May	24	2:00	2:00	M # Midsummer
+Rule SovietZone	1945	only	-	Sep	24	3:00	1:00	S
+Rule SovietZone	1945	only	-	Nov	18	2:00s	0	-
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
-			1:00	C-Eur	CE%sT	1945 Apr 2 2:00
+			1:00	C-Eur	CE%sT	1945 May 24 2:00
+			1:00 SovietZone	CE%sT	1946
 			1:00	Germany	CE%sT	1980
 			1:00	EU	CE%sT
 
@@ -1218,7 +1265,7 @@
 Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 			1:00	C-Eur	CE%sT	1918
 			1:00	Hungary	CE%sT	1941 Apr  6  2:00
-			1:00	C-Eur	CE%sT	1945 May  1 23:00
+			1:00	C-Eur	CE%sT	1945
 			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
 			1:00	EU	CE%sT
 
@@ -1736,7 +1783,6 @@
 # come up with more definitive info about the timekeeping during the
 # war years it's probably best just do do the following for now:
 Link	Europe/Oslo	Arctic/Longyearbyen
-Link	Europe/Oslo	Atlantic/Jan_Mayen
 
 # Poland
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -2136,7 +2182,8 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 			1:00	-	CET	1941 Apr 18 23:00
-			1:00	C-Eur	CE%sT	1945 May  8  2:00s
+			1:00	C-Eur	CE%sT	1945
+			1:00	-	CET	1945 May 8 2:00s
 			1:00	1:00	CEST	1945 Sep 16  2:00s
 # Metod Kozelj reports that the legal date of
 # transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
--- a/jdk/make/sun/javazic/tzdata/iso3166.tab	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/iso3166.tab	Wed Sep 24 08:14:37 2008 -0700
@@ -28,7 +28,7 @@
 #
 # This file contains a table with the following columns:
 # 1.  ISO 3166-1 alpha-2 country code, current as of
-#     ISO 3166-1 Newsletter No. V-12 (2006-09-26).  See:
+#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:
 #     <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
 #     ISO 3166 Maintenance agency (ISO 3166/MA)
 #     </a>.
@@ -69,6 +69,7 @@
 BH	Bahrain
 BI	Burundi
 BJ	Benin
+BL	St Barthelemy
 BM	Bermuda
 BN	Brunei
 BO	Bolivia
@@ -181,6 +182,7 @@
 MC	Monaco
 MD	Moldova
 ME	Montenegro
+MF	St Martin (French part)
 MG	Madagascar
 MH	Marshall Islands
 MK	Macedonia
--- a/jdk/make/sun/javazic/tzdata/leapseconds	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/leapseconds	Wed Sep 24 08:14:37 2008 -0700
@@ -66,8 +66,10 @@
 Leap	1997	Jun	30	23:59:60	+	S
 Leap	1998	Dec	31	23:59:60	+	S
 Leap	2005	Dec	31	23:59:60	+	S
+Leap	2008	Dec	31	23:59:60	+	S
 
 # INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
+#
 # SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
 #
 # SERVICE DE LA ROTATION TERRESTRE
@@ -75,30 +77,38 @@
 # 61, Av. de l'Observatoire 75014 PARIS (France)
 # Tel.      : 33 (0) 1 40 51 22 26
 # FAX       : 33 (0) 1 40 51 22 91
-# Internet  : services.iers@obspm.fr
+# e-mail    : services.iers@obspm.fr
+# http://hpiers.obspm.fr/eop-pc
 #
-# Paris, 28 June 2007
+# Paris, 4 July 2008
 #
-# Bulletin C 34
+# Bulletin C 36
 #
 # To authorities responsible
 # for the measurement and
 # distribution of time
 #
-# INFORMATION ON UTC - TAI
+# UTC TIME STEP
+# on the 1st of January 2009
 #
-# NO positive leap second will be introduced at the end of December 2007.
-# The difference between Coordinated Universal Time UTC and the
-# International Atomic Time TAI is :		
+# A positive leap second will be introduced at the end of December 2008.
+# The sequence of dates of the UTC second markers will be:		
 #
-# from 2006 January 1, 0h UTC, until further notice : UTC-TAI = -33 s
+# 2008 December 31,     23h 59m 59s
+# 2008 December 31,     23h 59m 60s
+# 2009 January   1,      0h  0m  0s
+#
+# The difference between UTC and the International Atomic Time TAI is:
+#
+# from 2006 January 1, 0h UTC, to 2009 January 1  0h UTC  : UTC-TAI = - 33s
+# from 2009 January 1, 0h UTC, until further notice       : UTC-TAI = - 34s
 #
 # Leap seconds can be introduced in UTC at the end of the months of December
-# or June,  depending on the evolution of UT1-TAI. Bulletin C is mailed every
-# six months, either to announce a time step in UTC, or to confirm that there
+# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
+# six months, either to announce a time step in UTC or to confirm that there
 # will be no time step at the next possible date.
 #
 # Daniel GAMBIS
-# Director			
+# Head		
 # Earth Orientation Center of IERS
 # Observatoire de Paris, France
--- a/jdk/make/sun/javazic/tzdata/northamerica	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/northamerica	Wed Sep 24 08:14:37 2008 -0700
@@ -2098,8 +2098,8 @@
 # http://www.jonesbahamas.com/?c=45&a=10412
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Bahamas	1964	2006	-	Oct	lastSun	2:00	0	S
-Rule	Bahamas	1964	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
+Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Nassau	-5:09:24 -	LMT	1912 Mar 2
 			-5:00	Bahamas	E%sT	1976
@@ -2209,6 +2209,69 @@
 # says Cuban clocks will advance at midnight on March 10.
 # For lack of better information, assume Cuba will use US rules,
 # except that it switches at midnight standard time as usual.
+#
+# From Steffen Thorsen (2007-10-25):
+# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week 
+# earlier - on the last Sunday of October, just like in 2006.
+# 
+# He supplied these references:
+# 
+# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
+# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
+# 
+# From Alex Kryvenishev (2007-10-25):
+# Here is also article from Granma (Cuba):
+# 
+# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
+# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
+# 
+# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
+
+# From Arthur David Olson (2008-03-09):
+# I'm in Maryland which is now observing United States Eastern Daylight
+# Time. At 9:44 local time I used RealPlayer to listen to
+# <a href="http://media.enet.cu/radioreloj">
+# http://media.enet.cu/radioreloj
+# </a>, a Cuban information station, and heard
+# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
+# indicating that Cuba is still on standard time.
+
+# From Steffen Thorsen (2008-03-12):
+# It seems that Cuba will start DST on Sunday, 2007-03-16...
+# It was announced yesterday, according to this source (in Spanish):
+# <a href="http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm">
+# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
+# </a>
+#
+# Some more background information is posted here:
+# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html">
+# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
+# </a>
+#
+# The article also says that Cuba has been observing DST since 1963,
+# while Shanks (and tzdata) has 1965 as the first date (except in the
+# 1940's). Many other web pages in Cuba also claim that it has been
+# observed since 1963, but with the exception of 1970 - an exception
+# which is not present in tzdata/Shanks. So there is a chance we need to
+# change some historic records as well.
+#
+# One example:
+# <a href="http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm">
+# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
+# </a>
+
+# From Jesper Norgaard Welen (2008-03-13):
+# The Cuban time change has just been confirmed on the most authoritative
+# web site, the Granma.  Please check out
+# <a href="http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html">
+# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
+# </a>
+#
+# Basically as expected after Steffen Thorsens information, the change
+# will take place midnight between Saturday and Sunday.
+
+# From Arthur David Olson (2008-03-12):
+# Assume Sun>=15 (third Sunday) going forward.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
@@ -2240,9 +2303,9 @@
 Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
 Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
 Rule	Cuba	2000	2006	-	Apr	Sun>=1	0:00s	1:00	D
-Rule	Cuba	2006	only	-	Oct	lastSun	0:00s	0	S
-Rule	Cuba	2007	max	-	Mar	Sun>=8	0:00s	1:00	D
-Rule	Cuba	2007	max	-	Nov	Sun>=1	0:00s	0	S
+Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
+Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
+Rule	Cuba	2008	max	-	Mar	Sun>=15	0:00s	1:00	D
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Havana	-5:29:28 -	LMT	1890
@@ -2309,6 +2372,10 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Guadeloupe	-4:06:08 -	LMT	1911 Jun 8	# Pointe a Pitre
 			-4:00	-	AST
+# St Barthelemy
+Link America/Guadeloupe	America/St_Barthelemy
+# St Martin (French part)
+Link America/Guadeloupe	America/Marigot
 
 # Guatemala
 #
--- a/jdk/make/sun/javazic/tzdata/southamerica	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/southamerica	Wed Sep 24 08:14:37 2008 -0700
@@ -127,7 +127,11 @@
 # which did not result in the switch of a time zone, as they stayed 9 hours
 # from the International Date Line.
 Rule	Arg	1999	only	-	Oct	Sun>=1	0:00	1:00	S
-Rule	Arg	2000	only	-	Mar	Sun>=1	0:00	0	-
+# From Paul Eggert (2007-12-28):
+# DST was set to expire on March 5, not March 3, but since it was converted
+# to standard time on March 3 it's more convenient for us to pretend that
+# it ended on March 3.
+Rule	Arg	2000	only	-	Mar	3	0:00	0	-
 #
 # From Peter Gradelski via Steffen Thorsen (2000-03-01):
 # We just checked with our Sao Paulo office and they say the government of
@@ -162,6 +166,30 @@
 # This kind of things had always been done this way in Argentina.
 # We are still -03:00 all year round in all of the country.
 #
+# From Steffen Thorsen (2007-12-21):
+# A user (Leonardo Chaim) reported that Argentina will adopt DST....
+# all of the country (all Zone-entries) are affected.  News reports like
+# http://www.lanacion.com.ar/opinion/nota.asp?nota_id=973037 indicate
+# that Argentina will use DST next year as well, from October to
+# March, although exact rules are not given.
+#
+# From Jesper Norgaard Welen (2007-12-26)
+# The last hurdle of Argentina DST is over, the proposal was approved in
+# the lower chamber too (Deputados) with a vote 192 for and 2 against.
+# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
+# the original scanned proposal, where the dates and the zero hours are
+# clear and unambiguous...This is the article about final approval:
+# <a href="http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996">
+# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
+# </a>
+#
+# From Paul Eggert (2007-12-22):
+# For dates after mid-2008, the following rules are my guesses and
+# are quite possibly wrong, but are more likely than no DST at all.
+Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
+Rule	Arg	2008	max	-	Mar	Sun>=15	0:00	0	-
+Rule	Arg	2008	max	-	Oct	Sun>=1	0:00	1:00	S
+ 
 # From Mariano Absatz (2004-05-21):
 # Today it was officially published that the Province of Mendoza is changing
 # its timezone this winter... starting tomorrow night....
@@ -222,10 +250,80 @@
 # http://www.sanjuan.gov.ar/prensa/archivo/000426.html
 # http://www.sanjuan.gov.ar/prensa/archivo/000441.html
 
+# From Alex Krivenyshev (2008-01-17):
+# Here are articles that Argentina Province San Luis is planning to end DST
+# as earlier as upcoming Monday January 21, 2008 or February 2008:
+#
+# Provincia argentina retrasa reloj y marca diferencia con resto del pais
+# (Argentine Province delayed clock and mark difference with the rest of the
+# country)
+# <a href="http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel">
+# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
+# </a>
+#
+# Es inminente que en San Luis atrasen una hora los relojes
+# (It is imminent in San Luis clocks one hour delay)
+# <a href="http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414">
+# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
+# </a>
+#
+# <a href="http://www.worldtimezone.net/dst_news/dst_news_argentina02.html">
+# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
+# </a>
+
+# From Jesper Norgaard Welen (2008-01-18):
+# The page of the San Luis provincial government
+# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812">
+# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
+# </a>
+# confirms what Alex Krivenyshev has earlier sent to the tz
+# emailing list about that San Luis plans to return to standard
+# time much earlier than the rest of the country. It also
+# confirms that upon request the provinces San Juan and Mendoza 
+# refused to follow San Luis in this change. 
+# 
+# The change is supposed to take place Monday the 21.st at 0:00
+# hours. As far as I understand it if this goes ahead, we need
+# a new timezone for San Luis (although there are also documented
+# independent changes in the southamerica file of San Luis in
+# 1990 and 1991 which has not been confirmed).
+
+# From Jesper Norgaard Welen (2008-01-25):
+# Unfortunately the below page has become defunct, about the San Luis
+# time change. Perhaps because it now is part of a group of pages "Most
+# important pages of 2008."
+#
+# You can use
+# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834">
+# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
+# </a>
+# instead it seems. Or use "Buscador" from the main page of the San Luis
+# government, and fill in "huso" and click OK, and you will get 3 pages
+# from which the first one is identical to the above.
+
+# From Mariano Absatz (2008-01-28):
+# I can confirm that the Province of San Luis (and so far only that
+# province) decided to go back to UTC-3 effective midnight Jan 20th 2008
+# (that is, Monday 21st at 0:00 is the time the clocks were delayed back
+# 1 hour), and they intend to keep UTC-3 as their timezone all year round
+# (that is, unless they change their mind any minute now).
+#
+# So we'll have to add yet another city to 'southamerica' (I think San
+# Luis city is the mos populated city in the Province, so it'd be
+# America/Argentina/San_Luis... of course I can't remember if San Luis's
+# history of particular changes goes along with Mendoza or San Juan :-(
+# (I only remember not being able to collect hard facts about San Luis
+# back in 2004, when these provinces changed to UTC-4 for a few days, I
+# mailed them personally and never got an answer).
+
+# From Paul Eggert (2008-06-30):
 # Unless otherwise specified, data are from Shanks & Pottenger through 1992,
 # from the IATA otherwise.  As noted below, Shanks & Pottenger say that
-# America/Cordoba split into 6 subregions during 1991/1992, but we
-# haven't verified this yet so for now we'll keep it a single region.
+# America/Cordoba split into 6 subregions during 1991/1992, one of which
+# was America/San_Luis, but we haven't verified this yet so for now we'll
+# keep America/Cordoba a single region rather than splitting it into the
+# other 5 subregions.
+
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 #
@@ -236,18 +334,16 @@
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
 			-4:00	Arg	AR%sT	2000 Mar  3
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN), Chaco (CC),
 # Formosa (FM), Salta (SA), Santiago del Estero (SE), Cordoba (CB),
-# San Luis (SL), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
+# La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
 #
 # Shanks & Pottenger also make the following claims, which we haven't verified:
 # - Formosa switched to -3:00 on 1991-01-07.
 # - Misiones switched to -3:00 on 1990-12-29.
 # - Chaco switched to -3:00 on 1991-01-04.
-# - San Luis switched to -4:00 on 1990-03-14, then to -3:00 on 1990-10-15,
-#   then to -4:00 on 1991-03-01, then to -3:00 on 1991-06-01.
 # - Santiago del Estero switched to -4:00 on 1991-04-01,
 #   then to -3:00 on 1991-04-26.
 #
@@ -259,7 +355,7 @@
 			-4:00	-	WART	1991 Oct 20
 			-3:00	Arg	AR%sT	1999 Oct  3
 			-4:00	Arg	AR%sT	2000 Mar  3
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # Tucuman (TM)
 Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
@@ -272,7 +368,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 Jun  1
 			-4:00	-	WART	2004 Jun 13
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # La Rioja (LR)
 Zone America/Argentina/La_Rioja -4:27:24 - LMT	1894 Oct 31
@@ -285,7 +381,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 Jun  1
 			-4:00	-	WART	2004 Jun 20
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # San Juan (SJ)
 Zone America/Argentina/San_Juan -4:34:04 - LMT	1894 Oct 31
@@ -298,7 +394,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 May 31
 			-4:00	-	WART	2004 Jul 25
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # Jujuy (JY)
 Zone America/Argentina/Jujuy -4:21:12 -	LMT	1894 Oct 31
@@ -312,7 +408,7 @@
 			-3:00	1:00	ARST	1992
 			-3:00	Arg	AR%sT	1999 Oct  3
 			-4:00	Arg	AR%sT	2000 Mar  3
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # Catamarca (CT), Chubut (CH)
 Zone America/Argentina/Catamarca -4:23:08 - LMT	1894 Oct 31
@@ -325,7 +421,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 Jun  1
 			-4:00	-	WART	2004 Jun 20
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # Mendoza (MZ)
 Zone America/Argentina/Mendoza -4:35:16 - LMT	1894 Oct 31
@@ -342,6 +438,23 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 May 23
 			-4:00	-	WART	2004 Sep 26
+			-3:00	Arg	AR%sT
+#
+# San Luis (SL)
+Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1990
+			-3:00	1:00	ARST	1990 Mar 14
+			-4:00	-	WART	1990 Oct 15
+			-4:00	1:00	WARST	1991 Mar  1
+			-4:00	-	WART	1991 Jun  1
+			-3:00	-	ART	1999 Oct  3
+			-4:00	1:00	WARST	2000 Mar  3
+			-3:00	-	ART	2004 May 31
+			-4:00	-	WART	2004 Jul 25
+			-3:00	Arg	AR%sT	2008 Jan 21
 			-3:00	-	ART
 #
 # Santa Cruz (SC)
@@ -353,7 +466,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 Jun  1
 			-4:00	-	WART	2004 Jun 20
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 #
 # Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
 Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
@@ -364,7 +477,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART	2004 May 30
 			-4:00	-	WART	2004 Jun 20
-			-3:00	-	ART
+			-3:00	Arg	AR%sT
 
 # Aruba
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -450,6 +563,50 @@
 # Brazil will start DST on 2007-10-14 00:00 and end on 2008-02-17 00:00:
 # http://www.mme.gov.br/site/news/detail.do;jsessionid=BBA06811AFCAAC28F0285210913513DA?newsId=13975
 
+# From Paul Schulze (2008-06-24):
+# ...by law number 11.662 of April 24, 2008 (published in the "Diario
+# Oficial da Uniao"...) in Brazil there are changes in the timezones,
+# effective today (00:00am at June 24, 2008) as follows:
+#
+# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
+# part of the Amazonas state that had this timezone now being put to the
+# timezone UTC+4
+# b) The whole Para state now is put at timezone UTC+3, instead of just
+# part of it, as was before.
+#
+# This change follows a proposal of senator Tiao Viana of Acre state, that
+# proposed it due to concerns about open television channels displaying
+# programs inappropriate to youths in the states that had the timezone
+# UTC+5 too early in the night. In the occasion, some more corrections
+# were proposed, trying to unify the timezones of any given state. This
+# change modifies timezone rules defined in decree 2.784 of 18 June,
+# 1913.
+
+# From Rodrigo Severo (2008-06-24):
+# Just correcting the URL:
+# <a href="https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=3Ddo&secao=3D1&pagina=3D1&data=3D25/04/2008">
+# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=3Ddo&secao=3D1&pagina=3D1&data=3D25/04/2008
+# </a>
+#
+# As a result of the above Decree I believe the America/Rio_Branco
+# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
+# be created to represent the the west side of the Para State. I
+# suggest this new timezone be called Santarem as the most
+# important/populated city in the affected area.
+#
+# This new timezone would be the same as the Rio_Branco timezone up to
+# the 2008/06/24 change which would be to UTC-3 instead of UTC-4.
+
+# From Alex Krivenyshev (2008-06-24):
+# This is a quick reference page for New and Old Brazil Time Zones map.
+# <a href="http://www.worldtimezone.com/brazil-time-new-old.php">
+# http://www.worldtimezone.com/brazil-time-new-old.php
+# </a>
+#
+# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
+# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
+# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
+
 # From Paul Eggert (2002-10-10):
 # The official decrees referenced below are mostly taken from
 # <a href="http://pcdsh01.on.br/DecHV.html">
@@ -572,13 +729,13 @@
 Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	S
 Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
 # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm"></a>
+# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm">4,399</a>
 Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	S
 # Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm"></a>
+# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm">4,844</a>
 Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
 # Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm"></a>
+# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm">5,223</a>
 Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
 # Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
 # adopted by the same states as before.
@@ -587,9 +744,8 @@
 # adopted by the same states as before.
 Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	S
 Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
-# (Decree number not yet known)
-# http://www.brasil.gov.br/noticias/ultimas_noticias/horario_verao070920/
-# (2007-09-20) after a heads-up from Steffen Thorsen:
+# Decree <a href="http://pcdsh01.on.br/DecHV6212.gif">6,212</a> (2007-09-26),
+# adopted by the same states as before.
 Rule	Brazil	2007	max	-	Oct	Sun>=8	 0:00	1:00	S
 Rule	Brazil	2008	max	-	Feb	Sun>=15	 0:00	0	-
 # The latest ruleset listed above says that the following states observe DST:
@@ -597,7 +753,6 @@
 # For dates after mid-2008, the above rules with TO="max" are guesses
 # and are quite possibly wrong, but are more likely than no DST at all.
 
-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 #
 # Fernando de Noronha (administratively part of PE)
@@ -623,6 +778,13 @@
 			-3:00	Brazil	BR%sT	1988 Sep 12
 			-3:00	-	BRT
 #
+# west Para (PA)
+# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
+Zone America/Santarem	-3:38:48 -	LMT	1914
+			-4:00	Brazil	AM%sT	1988 Sep 12
+			-4:00	-	AMT	2008 Jun 24 00:00
+			-3:00	-	BRT
+#
 # Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
 # Paraiba (PB)
 Zone America/Fortaleza	-2:34:00 -	LMT	1914
@@ -685,8 +847,7 @@
 			-4:00	-	AMT	2004 Oct  1
 			-4:00	Brazil	AM%sT
 #
-# west Para (PA), Rondonia (RO)
-# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
+# Rondonia (RO)
 Zone America/Porto_Velho -4:15:36 -	LMT	1914
 			-4:00	Brazil	AM%sT	1988 Sep 12
 			-4:00	-	AMT
@@ -713,13 +874,14 @@
 			-5:00	Brazil	AC%sT	1988 Sep 12
 			-5:00	-	ACT	1993 Sep 28
 			-5:00	Brazil	AC%sT	1994 Sep 22
-			-5:00	-	ACT
+			-5:00	-	ACT	2008 Jun 24 00:00
+			-4:00	-	AMT
 #
 # Acre (AC)
 Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 			-5:00	Brazil	AC%sT	1988 Sep 12
-			-5:00	-	ACT
-
+			-5:00	-	ACT	2008 Jun 24 00:00
+			-4:00	-	AMT
 
 # Chile
 
@@ -753,6 +915,26 @@
 # America/Santiago.  The pre-1980 Pacific/Easter data are dubious,
 # but we have no other source.
 
+# From German Poo-Caaman~o (2008-03-03):
+# Due to drought, Chile extends Daylight Time in three weeks.  This
+# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
+# and Saturday 3/29 at 22:00 for Pacific/Easter)
+# The Supreme Decree is located at 
+# <a href="http://www.shoa.cl/servicios/supremo316.pdf">
+# http://www.shoa.cl/servicios/supremo316.pdf
+# </a>
+# and the instructions for 2008 are located in:
+# <a href="http://www.horaoficial.cl/cambio.htm">
+# http://www.horaoficial.cl/cambio.htm
+# </a>.
+
+# From Jose Miguel Garrido (2008-03-05):
+# ...
+# You could see the announces of the change on 
+# <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm">
+# http://www.shoa.cl/noticias/2008/04hora/hora.htm
+# </a>.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
 Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
@@ -783,7 +965,11 @@
 Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	S
 Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
 Rule	Chile	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
-Rule	Chile	2000	max	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
+# N.B.: the end of March 29 in Chile is March 30 in Universal time,
+# which is used below in specifying the transition.
+Rule	Chile	2008	only	-	Mar	30	3:00u	0	-
+Rule	Chile	2009	max	-	Mar	Sun>=9	3:00u	0	-
 # IATA SSIM anomalies: (1992-02) says 1992-03-14;
 # (1996-09) says 1998-03-08.  Ignore these.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1129,19 +1315,17 @@
 
 # Venezuela
 #
-# From Kiraz Janicke (2007-09-25), in
-# http://www.venezuelanalysis.com/analysis/2645:
-# The proposal ... involves turning the clock back half an hour from
-# +4.00 Greenwich Mean Time (GMT), to +4.30GMT, the time zone
-# Venezuela had until December 31, 1964, when the current time zone
-# was adopted. The change was due to take place on September 17 and
-# then on September 24, but has since been postponed until December
-# 31, to allow for compliance with international organizations, such
-# as the International Office of Weights and Measures.
+# From John Stainforth (2007-11-28):
+# ... the change for Venezuela originally expected for 2007-12-31 has
+# been brought forward to 2007-12-09.  The official announcement was
+# published today in the "Gaceta Oficial de la Republica Bolivariana
+# de Venezuela, numero 38.819" (official document for all laws or
+# resolution publication)
+# http://www.globovision.com/news.php?nid=72208
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Caracas	-4:27:44 -	LMT	1890
 			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
 			-4:30	-	VET	1965	     # Venezuela Time
-			-4:00	-	VET	2008
+			-4:00	-	VET	2007 Dec  9 03:00
 			-4:30	-	VET
--- a/jdk/make/sun/javazic/tzdata/zone.tab	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/sun/javazic/tzdata/zone.tab	Wed Sep 24 08:14:37 2008 -0700
@@ -64,7 +64,8 @@
 AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
 AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
 AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
-AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL)
+AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF)
+AR	-3319-06621	America/Argentina/San_Luis	San Luis (SL)
 AR	-2411-06518	America/Argentina/Jujuy	Jujuy (JY)
 AR	-2649-06513	America/Argentina/Tucuman	Tucuman (TM)
 AR	-2828-06547	America/Argentina/Catamarca	Catamarca (CT), Chubut (CH)
@@ -99,6 +100,7 @@
 BH	+2623+05035	Asia/Bahrain
 BI	-0323+02922	Africa/Bujumbura
 BJ	+0629+00237	Africa/Porto-Novo
+BL	+1753-06251	America/St_Barthelemy
 BM	+3217-06446	Atlantic/Bermuda
 BN	+0456+11455	Asia/Brunei
 BO	-1630-06809	America/La_Paz
@@ -112,7 +114,8 @@
 BR	-2332-04637	America/Sao_Paulo	S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
 BR	-2027-05437	America/Campo_Grande	Mato Grosso do Sul
 BR	-1535-05605	America/Cuiaba	Mato Grosso
-BR	-0846-06354	America/Porto_Velho	W Para, Rondonia
+BR	-0226-05452	America/Santarem	W Para
+BR	-0846-06354	America/Porto_Velho	Rondonia
 BR	+0249-06040	America/Boa_Vista	Roraima
 BR	-0308-06001	America/Manaus	E Amazonas
 BR	-0640-06952	America/Eirunepe	W Amazonas
@@ -230,7 +233,7 @@
 IE	+5320-00615	Europe/Dublin
 IL	+3146+03514	Asia/Jerusalem
 IM	+5409-00428	Europe/Isle_of_Man
-IN	+2232+08822	Asia/Calcutta
+IN	+2232+08822	Asia/Kolkata
 IO	-0720+07225	Indian/Chagos
 IQ	+3321+04425	Asia/Baghdad
 IR	+3540+05126	Asia/Tehran
@@ -272,6 +275,7 @@
 MC	+4342+00723	Europe/Monaco
 MD	+4700+02850	Europe/Chisinau
 ME	+4226+01916	Europe/Podgorica
+MF	+1804-06305	America/Marigot
 MG	-1855+04731	Indian/Antananarivo
 MH	+0709+17112	Pacific/Majuro	most locations
 MH	+0905+16720	Pacific/Kwajalein	Kwajalein
@@ -361,8 +365,7 @@
 SG	+0117+10351	Asia/Singapore
 SH	-1555-00542	Atlantic/St_Helena
 SI	+4603+01431	Europe/Ljubljana
-SJ	+7800+01600	Arctic/Longyearbyen	Svalbard
-SJ	+7059-00805	Atlantic/Jan_Mayen	Jan Mayen
+SJ	+7800+01600	Arctic/Longyearbyen
 SK	+4809+01707	Europe/Bratislava
 SL	+0830-01315	Africa/Freetown
 SM	+4355+01228	Europe/San_Marino
@@ -432,7 +435,7 @@
 VE	+1030-06656	America/Caracas
 VG	+1827-06437	America/Tortola
 VI	+1821-06456	America/St_Thomas
-VN	+1045+10640	Asia/Saigon
+VN	+1045+10640	Asia/Ho_Chi_Minh
 VU	-1740+16825	Pacific/Efate
 WF	-1318-17610	Pacific/Wallis
 WS	-1350-17144	Pacific/Apia
--- a/jdk/make/tools/Makefile	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/make/tools/Makefile	Wed Sep 24 08:14:37 2008 -0700
@@ -32,7 +32,6 @@
 
 SUBDIRS =                   \
   addjsum                   \
-  auto_multi                \
   buildmetaindex            \
   commentchecker            \
   compile_font_config       \
--- a/jdk/make/tools/auto_multi/Makefile	Wed Jul 05 16:41:36 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# Copyright 1998-2005 Sun Microsystems, 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.  Sun designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-#
-# Makefile for building the automulti tool
-#
-
-BUILDDIR = ../..
-PACKAGE = build.tools.automulti
-PRODUCT = tools
-PROGRAM = automulti
-include $(BUILDDIR)/common/Defs.gmk
-
-BUILDTOOL_SOURCE_ROOT = $(BUILDDIR)/tools/src
-BUILDTOOL_MAIN        = $(PKGDIR)/AutoMulti.java
-
-#
-# Build tool jar rules.
-#
-include $(BUILDDIR)/common/BuildToolJar.gmk
-
--- a/jdk/make/tools/src/build/tools/automulti/AutoMulti.java	Wed Jul 05 16:41:36 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,458 +0,0 @@
-/*
- * Copyright 1998-2001 Sun Microsystems, 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.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-
-package build.tools.automulti;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.io.*;
-
-/**
- * Automatically generates the Multiplexing UI classes
- * for Swing.
- * <p>
- * To use, type 'java AutoMulti <plafdir> <prefix>' where <plafdir>
- * is the directory containing the source for Swing's UI classes and
- * <prefix> is the package prefix to use before ".swing.plaf.multi".
- * For example:
- *
- * <pre>
- * cd TEST
- * ../../../../build/solaris-sparc/bin/java AutoMulti ../../../../src/share/classes/javax/swing/plaf javax
- * </pre>
- *
- * AutoMulti will scour the plaf directory for *UI.java files and
- * generate Multi*UI.java files that do the multiplexing thing.
- * <p>
- * NOTE:  This tool depends upon the existence of <plafdir> and on the
- * compiled classes from <plafdir> being somewhere in the class path.
- *
- * @author Willie Walker
- */
-public class AutoMulti {
-    static String importLines;
-
-    /**
-     * A silly list of parameter names to use.  Skips "i" because we use
-     * it as a 'for' loop counter.  If you want to get fancy, please feel
-     * to change how parameter names are obtained.  This will break if
-     * someone decides to create a UI method that takes more than 8
-     * parameters.  Which one is a bug (this breaking or having a method
-     * with more than eight parameters) is a subjective thing.
-     */
-    public static String[] paramNames = {"a","b","c","d","e","f","g","h"};
-
-    /**
-     * Removes the package names (e.g., javax.swing) from the name.
-     */
-    public static String unqualifyName(String name) {
-        StringTokenizer parser = new StringTokenizer(name,".");
-        String unqualifiedName = null;
-        while (parser.hasMoreTokens()) {
-            unqualifiedName = parser.nextToken();
-        }
-        return removeDollars(unqualifiedName);
-    }
-
-    /**
-     * Strips the extension from the filename.
-     */
-    public static String stripExtension(String name) {
-        StringTokenizer parser = new StringTokenizer(name,".");
-        return parser.nextToken();
-    }
-
-    /**
-     * Adds some spaces.
-     */
-    public static void indent(StringBuffer s, int i) {
-        while (i > 0) {
-            s.append(" ");
-            i--;
-        }
-    }
-
-    /**
-     * Spits out all the beginning stuff.
-     */
-    public static StringBuffer createPreamble(String prefixName) {
-        StringBuffer s = new StringBuffer();
-        s.append("/*\n");
-        s.append(" *\n");
-        s.append(" * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.\n");
-        s.append(" * \n");
-        s.append(" * This software is the proprietary information of Sun Microsystems, Inc.  \n");
-        s.append(" * Use is subject to license terms.\n");
-        s.append(" * \n");
-        s.append(" */\n");
-        s.append("package " + prefixName + ".swing.plaf.multi;\n");
-        s.append("\n");
-        return s;
-    }
-
-    /**
-     * Replaces 'Xxx$Yyy' with "Xxx'.  Used by addImport because you
-     * can't import nested classes directly.
-     */
-    public static String removeNestedClassName(String s) {
-        int dollarPosition = s.indexOf('$');
-
-        if (dollarPosition >= 0) {    // s contains '$'
-            StringBuffer sb = new StringBuffer(s);
-            sb.setLength(dollarPosition);
-            return sb.toString();
-        } else {                      // no '$'
-            return s;
-        }
-    }
-
-    /**
-     * Replaces '$' with ".'.  Needed for printing inner class names
-     * for argument and return types.
-     */
-    public static String removeDollars(String s) {
-        int dollarPosition = s.indexOf('$');
-
-        if (dollarPosition >= 0) {    // s contains '$'
-            StringBuffer sb = new StringBuffer(s);
-            while (dollarPosition >= 0) {
-                //XXX: will there ever be more than one '$'?
-                sb.replace(dollarPosition, dollarPosition+1, ".");
-                dollarPosition = sb.indexOf("$", dollarPosition);
-            }
-            return sb.toString();
-        } else {                     // no $
-            return s;
-        }
-    }
-
-    /**
-     * Adds an import line to the String.
-     */
-    public static void addImport(String s, Class theClass) {
-        if (!theClass.isPrimitive() && (theClass != Object.class)) {
-            String className = removeNestedClassName(theClass.getName());
-            String importLine = new String("import " + className + ";\n");
-            if (importLines.indexOf(importLine) == -1) {
-                importLines += importLine;
-            }
-        }
-    }
-
-    /**
-     * Spits out the class header information.
-     */
-    public static void addHeader(StringBuffer s, String className) {
-        s.append("/**\n");
-        s.append(" * A multiplexing UI used to combine <code>" + className + "</code>s.\n");
-        s.append(" * \n");
-        s.append(" * <p>This file was automatically generated by AutoMulti.\n");
-        s.append(" *\n");
-        s.append(" * @author  Otto Multey\n");                  // Get it?  I crack myself up.
-        s.append(" */\n");
-        s.append("public class Multi" + className + " extends " + className + " {\n");
-        s.append("\n");
-        s.append("    /**\n");
-        s.append("     * The vector containing the real UIs.  This is populated \n");
-        s.append("     * in the call to <code>createUI</code>, and can be obtained by calling\n");
-        s.append("     * the <code>getUIs</code> method.  The first element is guaranteed to be the real UI \n");
-        s.append("     * obtained from the default look and feel.\n");
-        s.append("     */\n");
-        s.append("    protected Vector uis = new Vector();\n");
-        s.append("\n");
-        s.append("////////////////////\n");
-        s.append("// Common UI methods\n");
-        s.append("////////////////////\n");
-        s.append("\n");
-        s.append("    /**\n");
-        s.append("     * Returns the list of UIs associated with this multiplexing UI.  This \n");
-        s.append("     * allows processing of the UIs by an application aware of multiplexing \n");
-        s.append("     * UIs on components.\n");
-        s.append("     */\n");
-        s.append("    public ComponentUI[] getUIs() {\n");
-        s.append("        return MultiLookAndFeel.uisToArray(uis);\n");
-        s.append("    }\n");
-    }
-
-    /**
-     * Prints out the code for a method.  This is pretty specific to the
-     * Multiplexing UI code, so don't get any fancy ideas.
-     */
-    public static void addMethod(StringBuffer s, Method m, String origName, String className) {
-
-        // Get the method name and the return type.  Be a little careful about arrays.
-        //
-        String methodName = unqualifyName(m.getName());
-        String returnType;
-        if (!m.getReturnType().isArray()) {
-            returnType = unqualifyName(m.getReturnType().toString());
-            addImport(importLines,m.getReturnType());
-        } else {
-            returnType = unqualifyName(m.getReturnType().getComponentType().toString())
-                         + "[]";
-            addImport(importLines,m.getReturnType().getComponentType());
-        }
-
-        // Print the javadoc
-        //
-        s.append("\n");
-        if (methodName.equals("createUI")) {
-            s.append("    /**\n");
-            s.append("     * Returns a multiplexing UI instance if any of the auxiliary\n");
-            s.append("     * <code>LookAndFeel</code>s supports this UI.  Otherwise, just returns the \n");
-            s.append("     * UI object obtained from the default <code>LookAndFeel</code>.\n");
-            s.append("     */\n");
-        } else if (!returnType.equals("void")) {
-            s.append("    /**\n");
-            s.append("     * Invokes the <code>" + methodName + "</code> method on each UI handled by this object.\n");
-            s.append("     * \n");
-            s.append("     * @return the value obtained from the first UI, which is\n");
-            s.append("     * the UI obtained from the default <code>LookAndFeel</code>\n");
-            s.append("     */\n");
-        } else {
-            s.append("    /**\n");
-            s.append("     * Invokes the <code>" + methodName
-                     + "</code> method on each UI handled by this object.\n");
-            s.append("     */\n");
-        }
-
-        // Print the method signature
-        //
-        s.append("    public");
-        if (Modifier.isStatic(m.getModifiers())) {
-            s.append(" static");
-        }
-        s.append(" " + returnType);
-        s.append(" " + methodName);
-        s.append("(");
-
-        Class[] params = m.getParameterTypes();
-        Class temp;
-        String braces;
-        for (int i = 0; i < params.length; i++) {
-            if (i > 0) {
-                s.append(", ");
-            }
-            temp = params[i];
-            braces = new String("");
-            while (temp.isArray()) {
-                braces += "[]";
-                temp = temp.getComponentType();
-            }
-            s.append(unqualifyName(temp.getName()) + braces + " " + paramNames[i]);
-            addImport(importLines,temp);
-        }
-        s.append(")");
-
-        // Don't forget about exceptions
-        //
-        Class exceptions[] = m.getExceptionTypes();
-        String throwsString = new String("");
-
-        if (exceptions.length > 0) {
-            s.append("\n");
-            indent(s,12);
-            s.append("throws ");
-            for (int i = 0; i < exceptions.length; i++) {
-                if (i > 0) {
-                    s.append(", ");
-                }
-                s.append(unqualifyName(exceptions[i].getName()));
-                addImport(importLines,exceptions[i]);
-            }
-        }
-        s.append(throwsString + " {\n");
-
-        // Now print out the contents of the method.  We do a special thing
-        // for the createUI method, another thing if the method returns 'void'
-        // and a third thing if we don't do either of the first two.  If
-        // you want to squash this down, feel free.
-        //
-        if (methodName.equals("createUI")) {
-            indent(s,8);
-            s.append("ComponentUI mui = new Multi" + origName + "();\n");
-            indent(s,8);
-            s.append("return MultiLookAndFeel.createUIs(mui,\n");
-            indent(s,42);
-            s.append("((Multi" + origName +") mui).uis,\n");
-            indent(s,42);
-            for (int i = 0; i < params.length; i++) {
-                if (i > 0) {
-                    s.append(",");
-                }
-                s.append(paramNames[i]);
-            }
-            s.append(");\n");
-        } else if (!returnType.equals("void")) {
-            indent(s,8);
-            s.append(returnType + " returnValue = \n");
-            indent(s,12);
-            s.append("((" + className + ") (uis.elementAt(0)))."
-                     + methodName + "(");
-            for (int i = 0; i < params.length; i++) {
-                if (i > 0) {
-                    s.append(",");
-                }
-                s.append(paramNames[i]);
-            }
-            s.append(");\n");
-            indent(s,8);
-            s.append("for (int i = 1; i < uis.size(); i++) {\n");
-            indent(s,12);
-            s.append("((" + className + ") (uis.elementAt(i)))."
-                     + methodName + "(");
-            for (int i = 0; i < params.length; i++) {
-                if (i > 0) {
-                    s.append(",");
-                }
-                s.append(paramNames[i]);
-            }
-            s.append(");\n");
-            indent(s,8);
-            s.append("}\n");
-            indent(s,8);
-            s.append("return returnValue;\n");
-        } else {
-            indent(s,8);
-            s.append("for (int i = 0; i < uis.size(); i++) {\n");
-            indent(s,12);
-            s.append("((" + className + ") (uis.elementAt(i)))."
-                     + methodName + "(");
-            for (int i = 0; i < params.length; i++) {
-                if (i > 0) {
-                    s.append(",");
-                }
-                s.append(paramNames[i]);
-            }
-            s.append(");\n");
-            indent(s,8);
-            s.append("}\n");
-        }
-        indent(s,4);
-        s.append("}\n");
-    }
-
-    /**
-     * Takes a plaf class name (e.g., "MenuUI") and generates the corresponding
-     * Multiplexing UI Java source code (e.g., "MultiMenuUI.java").
-     */
-    public static void generateFile(String prefixName, String className) {
-        try {
-            FileOutputStream fos;
-            PrintWriter outFile;
-
-            importLines = new String();
-            importLines += new String("import java.util.Vector;\n");
-
-            StringBuffer body = new StringBuffer();
-            Class wee = Class.forName(prefixName + ".swing.plaf." + className);
-            String weeName = unqualifyName(wee.getName());
-            addImport(importLines,wee);
-            while (!weeName.equals("Object")) {
-                body.append("\n");
-                body.append("////////////////////\n");
-                body.append("// " + weeName + " methods\n");
-                body.append("////////////////////\n");
-                Method[] methods = wee.getDeclaredMethods();
-                for (int i=0; i < methods.length; i++) {
-                    if (Modifier.isPublic(methods[i].getModifiers())) {
-                        addMethod(body,methods[i],className,weeName);
-                    }
-                }
-                wee = wee.getSuperclass();
-                weeName = unqualifyName(wee.getName());
-                addImport(importLines,wee);
-            }
-
-            fos = new FileOutputStream("Multi" + className + ".java");
-            outFile = new PrintWriter(fos);
-            StringBuffer outText = createPreamble(prefixName);
-            outText.append(importLines.toString() + "\n");
-            addHeader(outText,className);
-            outText.append(body.toString());
-            outText.append("}\n");
-            outFile.write(outText.toString());
-            outFile.flush();
-            outFile.close();
-        } catch (Exception e) {
-            System.err.println(e);
-        }
-    }
-
-    /**
-     * D'Oh!  Something bad happened.
-     */
-    public static void usage(String s) throws IOException {
-        System.err.println("Usage:  AutoMulti <plafdir> [com.sun]");
-        throw new IllegalArgumentException(s);
-    }
-
-    /**
-     * Takes the plaf directory name and generates the multiplexing UI
-     * source code.
-     */
-    public static void main(String[] args) throws IOException {
-
-        if (args.length < 1) {
-            usage("");
-        }
-
-        String dirName = args[0];
-        File dir = new File(dirName);
-        if (!dir.isDirectory()) {
-            System.err.println("No such directory:  " + dirName);
-            usage("");
-        }
-
-        String prefixName;
-        if (args.length > 1) {
-            prefixName = args[1];
-        } else {
-            prefixName = "com.sun.java";
-        }
-
-        String plafUIs[] = dir.list(new UIJavaFilter());
-        for (int i = 0; i < plafUIs.length; i++) {
-            generateFile(prefixName,stripExtension(plafUIs[i]));
-        }
-    }
-}
-
-/**
- * Only accepts file names of the form *UI.java.  The one exception
- * is not accepting ComponentUI.java because we don't need to generate
- * a multiplexing class for it.
- */
-class UIJavaFilter implements FilenameFilter {
-    public boolean accept(File dir, String name) {
-        if (name.equals("ComponentUI.java")) {
-            return false;
-        } else if (name.endsWith("UI.java")) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-}
--- a/jdk/make/tools/src/build/tools/automulti/README.txt	Wed Jul 05 16:41:36 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-AutoMulti is the tool that automatically generates the
-Multi*UI classes for the Multiplexing look and feel. 
-Instructions for using it are in AutoMulti.java.
-
-TestALFGenerator is a tool (a variation of AutoMulti)
-that automatically generates an auxiliary look and
-feel that you can use to test the Multiplexing look
-and feel.  The TestALF look and feel implements every
-method by printing the message "In the xxx method of
-the TextALFYyyUI class." and, except in the case of
-createUI, returning something meaningless (since,
-except in the case of createUI, the return value is
-ignored).  
-
-TestALFLookAndFeel.java is the only non-auto-generated
-file for the TestALF L&F.  If you specify a package
-argument to TestALFGenerator, you'll have to change
-the code in TestALFLookAndFeel.java to reflect the
-package name.
-
-To test any application with the TestALF, make sure the
-compiled TestALF classes are in the class path.  Then add
-this to the <JDK_HOME>/lib/swing.properties file (which
-you'll probably have to create):
-
-swing.auxiliarylaf=TestALFLookAndFeel
-
-E.g., if you're running SwingSet2 against your solaris
-build, then you'd create/edit the swing.properties file
-in <wsdir>/build/solaris-sparc/lib.
-
-Then run any app.  You'll see lots of thrilling "In the
-Xxxx method of the Yyy class" messages.  If you get anything
-else (especially an exception), then you've found a bug.
-Probably in the default look and feel.
-
--- a/jdk/make/tools/src/build/tools/automulti/TestALFGenerator.java	Wed Jul 05 16:41:36 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,401 +0,0 @@
-/*
- * Copyright 2001 Sun Microsystems, 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.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-
-package build.tools.automulti;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.io.*;
-
-/**
- * Automatically generates an auxiliary look and feel to be
- * used for testing the Multiplexing look and feel.
- * <p>
- * To use, type 'java TestALFGenerator <plafdir> [<package>]' where <plafdir>
- * is the directory containing the source for Swing's UI classes.
- * <package> is an optional argument that specifies the package
- * of the TestALF classes.  If it's omitted, the classes are in
- * the default package.
- * For example:
- *
- * <pre>
- * ../../../../build/solaris-sparc/bin/java TestALFGenerator ../../../../src/share/classes/javax/swing/plaf com.myco.myalaf
- * </pre>
- *
- * TestALFGenerator will scour the plaf directory for *UI.java files and
- * generate TestALF*UI.java files.
- * <p>
- * NOTE:  This tool depends upon the existence of <plafdir> and on the
- * compiled classes from <plafdir> being somewhere in the class path.
- *
- * @author Willie Walker
- */
-public class TestALFGenerator {
-    static String importLines;
-    static String packageName;
-    static String classPrefix = "TestALF";
-
-    /**
-     * A silly list of parameter names to use.  Skips "i" because we use
-     * it as a 'for' loop counter.  If you want to get fancy, please feel
-     * to change how parameter names are obtained.  This will break if
-     * someone decides to create a UI method that takes more than 8
-     * parameters.  Which one is a bug (this breaking or having a method
-     * with more than eight parameters) is a subjective thing.
-     */
-    public static String[] paramNames = {"a","b","c","d","e","f","g","h"};
-
-    /**
-     * Removes the package names (e.g., javax.swing) from the name.
-     */
-    public static String unqualifyName(String name) {
-        StringTokenizer parser = new StringTokenizer(name,".");
-        String unqualifiedName = null;
-        while (parser.hasMoreTokens()) {
-            unqualifiedName = parser.nextToken();
-        }
-        return removeDollars(unqualifiedName);
-    }
-
-    /**
-     * Strips the extension from the filename.
-     */
-    public static String stripExtension(String name) {
-        StringTokenizer parser = new StringTokenizer(name,".");
-        return parser.nextToken();
-    }
-
-    /**
-     * Adds some spaces.
-     */
-    public static void indent(StringBuffer s, int i) {
-        while (i > 0) {
-            s.append(" ");
-            i--;
-        }
-    }
-
-    /**
-     * Spits out all the beginning stuff.
-     */
-    public static StringBuffer createPreamble(String prefixName) {
-        StringBuffer s = new StringBuffer();
-        s.append("/*\n");
-        s.append(" *\n");
-        s.append(" * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.\n");
-        s.append(" * \n");
-        s.append(" * This software is the proprietary information of Sun Microsystems, Inc.  \n");
-        s.append(" * Use is subject to license terms.\n");
-        s.append(" * \n");
-        s.append(" */\n");
-        if (packageName != null) {
-            s.append("package " + packageName + ";\n");
-            s.append("\n");
-        }
-        return s;
-    }
-
-    /**
-     * Replaces 'Xxx$Yyy' with "Xxx'.  Used by addImport because you
-     * can't import nested classes directly.
-     */
-    public static String removeNestedClassName(String s) {
-        int dollarPosition = s.indexOf('$');
-
-        if (dollarPosition >= 0) {    // s contains '$'
-            StringBuffer sb = new StringBuffer(s);
-            sb.setLength(dollarPosition);
-            return sb.toString();
-        } else {                      // no '$'
-            return s;
-        }
-    }
-
-    /**
-     * Replaces '$' with ".'.  Needed for printing inner class names
-     * for argument and return types.
-     */
-    public static String removeDollars(String s) {
-        int dollarPosition = s.indexOf('$');
-
-        if (dollarPosition >= 0) {    // s contains '$'
-            StringBuffer sb = new StringBuffer(s);
-            while (dollarPosition >= 0) {
-                //XXX: will there ever be more than one '$'?
-                sb.replace(dollarPosition, dollarPosition+1, ".");
-                dollarPosition = sb.indexOf("$", dollarPosition);
-            }
-            return sb.toString();
-        } else {                     // no $
-            return s;
-        }
-    }
-
-    /**
-     * Adds an import line to the String.
-     */
-    public static void addImport(String s, Class theClass) {
-        if (!theClass.isPrimitive() && (theClass != Object.class)) {
-            String className = removeNestedClassName(theClass.getName());
-            String importLine = new String("import " + className + ";\n");
-            if (importLines.indexOf(importLine) == -1) {
-                importLines += importLine;
-            }
-        }
-    }
-
-    /**
-     * Spits out the class header information.
-     */
-    public static void addHeader(StringBuffer s, String className) {
-        s.append("/**\n");
-        s.append(" * An auxiliary UI for <code>" + className + "</code>s.\n");
-        s.append(" * \n");
-        s.append(" * <p>This file was automatically generated by TestALFGenerator.\n");
-        s.append(" *\n");
-        s.append(" * @author  Otto Multey\n");                  // Get it?  I crack myself up.
-        s.append(" */\n");
-        s.append("public class " + classPrefix + className + " extends " + className + " {\n");
-        s.append("\n");
-    }
-
-    /**
-     * Prints out the code for a method.
-     */
-    public static void addMethod(StringBuffer s, Method m, String origName, String className) {
-
-        // Get the method name and the return type.  Be a little careful about arrays.
-        //
-        String methodName = unqualifyName(m.getName());
-        String returnType;
-
-        if (!m.getReturnType().isArray()) {
-            returnType = unqualifyName(m.getReturnType().toString());
-            addImport(importLines,m.getReturnType());
-        } else {
-            returnType = unqualifyName(m.getReturnType().getComponentType().toString())
-                         + "[]";
-            addImport(importLines,m.getReturnType().getComponentType());
-        }
-
-        // Print the javadoc
-        //
-        s.append("\n");
-
-        if (methodName.equals("createUI")) {
-            s.append("    /**\n");
-            s.append("     * Returns a UI object for this component.\n");
-            s.append("     */\n");
-        } else {
-            s.append("    /**\n");
-            s.append("     * Prints a message saying this method has been invoked.\n");
-            s.append("     */\n");
-        }
-
-        // Print the method signature
-        //
-        s.append("    public");
-        if (Modifier.isStatic(m.getModifiers())) {
-            s.append(" static");
-        }
-        s.append(" " + returnType);
-        s.append(" " + methodName);
-        s.append("(");
-
-        Class[] params = m.getParameterTypes();
-        Class temp;
-        String braces;
-        for (int i = 0; i < params.length; i++) {
-            if (i > 0) {
-                s.append(", ");
-            }
-            temp = params[i];
-            braces = new String("");
-            while (temp.isArray()) {
-                braces += "[]";
-                temp = temp.getComponentType();
-            }
-            s.append(unqualifyName(temp.getName()) + braces + " " + paramNames[i]);
-            addImport(importLines,temp);
-        }
-        s.append(")");
-
-        // Don't forget about exceptions
-        //
-        Class exceptions[] = m.getExceptionTypes();
-        String throwsString = new String("");
-
-        if (exceptions.length > 0) {
-            s.append("\n");
-            indent(s,12);
-            s.append("throws ");
-            for (int i = 0; i < exceptions.length; i++) {
-                if (i > 0) {
-                    s.append(", ");
-                }
-                s.append(unqualifyName(exceptions[i].getName()));
-                addImport(importLines,exceptions[i]);
-            }
-        }
-        s.append(throwsString + " {\n");
-
-        // Now print out the contents of the method.
-        indent(s,8);
-        s.append("System.out.println(\"In the " + methodName
-                                    + " method of the "
-                                    + classPrefix + origName + " class.\");\n");
-        if (methodName.equals("createUI")) {
-            indent(s,8);
-            s.append("return ui;\n");
-        } else {
-            // If we have to return something, do so.
-            if (!returnType.equals("void")) {
-                Class rType = m.getReturnType();
-                indent(s,8);
-                if (!rType.isPrimitive()) {
-                    s.append("return null;\n");
-                } else if (rType == Boolean.TYPE) {
-                    s.append("return false;\n");
-                } else if (rType == Character.TYPE) {
-                    s.append("return '0';\n");
-                } else {  // byte, short, int, long, float, or double
-                    s.append("return 0;\n");
-                }
-            }
-        }
-
-        indent(s,4);
-        s.append("}\n");
-    }
-
-    /**
-     * Takes a plaf class name (e.g., "MenuUI") and generates the corresponding
-     * TestALF UI Java source code (e.g., "TestALFMenuUI.java").
-     */
-    public static void generateFile(String prefixName, String className) {
-        try {
-            FileOutputStream fos;
-            PrintWriter outFile;
-
-            importLines = new String();
-            importLines += new String("import java.util.Vector;\n");
-
-            StringBuffer body = new StringBuffer();
-            Class wee = Class.forName(prefixName + ".swing.plaf." + className);
-            String weeName = unqualifyName(wee.getName());
-            String thisClassName = classPrefix + className;
-            addImport(importLines,wee);
-
-            // Declare and initialize the shared UI object.
-            body.append("\n");
-            body.append("////////////////////\n");
-            body.append("// Shared UI object\n");
-            body.append("////////////////////\n");
-            body.append("private final static " + thisClassName
-                        + " ui = new " + thisClassName + "();\n");
-
-            while (!weeName.equals("Object")) {
-                body.append("\n");
-                body.append("////////////////////\n");
-                body.append("// " + weeName + " methods\n");
-                body.append("////////////////////\n");
-                Method[] methods = wee.getDeclaredMethods();
-                for (int i=0; i < methods.length; i++) {
-                    if (Modifier.isPublic(methods[i].getModifiers())) {
-                        addMethod(body,methods[i],className,weeName);
-                    }
-                }
-                wee = wee.getSuperclass();
-                weeName = unqualifyName(wee.getName());
-                addImport(importLines,wee);
-            }
-
-            fos = new FileOutputStream(classPrefix + className + ".java");
-            outFile = new PrintWriter(fos);
-            StringBuffer outText = createPreamble(prefixName);
-            outText.append(importLines.toString() + "\n");
-            addHeader(outText,className);
-            outText.append(body.toString());
-            outText.append("}\n");
-            outFile.write(outText.toString());
-            outFile.flush();
-            outFile.close();
-        } catch (Exception e) {
-            System.err.println(e);
-        }
-    }
-
-    /**
-     * D'Oh!  Something bad happened.
-     */
-    public static void usage(String s) throws IOException {
-        System.err.println("Usage:  java TestALFGenerator <plafdir> [<packageName>]");
-        throw new IllegalArgumentException(s);
-    }
-
-    /**
-     * Takes the plaf directory name and generates the TestALF UI
-     * source code.
-     */
-    public static void main(String[] args) throws IOException {
-
-        if (args.length < 1) {
-            usage("");
-        }
-
-        String dirName = args[0];
-        File dir = new File(dirName);
-        if (!dir.isDirectory()) {
-            System.err.println("No such directory:  " + dirName);
-            usage("");
-        }
-
-        if (args.length > 1) {
-            packageName = args[1];
-        }
-
-        String plafUIs[] = dir.list(new UIJavaFilter());
-        for (int i = 0; i < plafUIs.length; i++) {
-            generateFile("javax",stripExtension(plafUIs[i]));
-        }
-    }
-}
-
-/**
- * Only accepts file names of the form *UI.java.  The one exception
- * is not accepting ComponentUI.java because we don't need to generate
- * a TestALF class for it.
- */
-class UIJavaFilter implements FilenameFilter {
-    public boolean accept(File dir, String name) {
-        if (name.equals("ComponentUI.java")) {
-            return false;
-        } else if (name.endsWith("UI.java")) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-}
--- a/jdk/make/tools/src/build/tools/automulti/TestALFLookAndFeel.java	Wed Jul 05 16:41:36 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-/*
- * Copyright 2001 Sun Microsystems, 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.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-//package com.myco.myalaf;  //search for myalaf for other refs to package name
-
-
-package build.tools.automulti;
-
-import java.util.Vector;
-import java.lang.reflect.Method;
-import javax.swing.*;
-import javax.swing.plaf.*;
-
-/**
- * <p>An auxiliary look and feel used for testing the Multiplexing
- * look and feel.
- * <p>
- *
- * @see UIManager#addAuxiliaryLookAndFeel
- * @see javax.swing.plaf.multi
- *
- * @author Kathy Walrath
- * @author Will Walker
- */
-public class TestALFLookAndFeel extends LookAndFeel {
-
-//////////////////////////////
-// LookAndFeel methods
-//////////////////////////////
-
-    /**
-     * Returns a string, suitable for use in menus,
-     * that identifies this look and feel.
-     *
-     * @return a string such as "Test Auxiliary Look and Feel"
-     */
-    public String getName() {
-        return "Test Auxiliary Look and Feel";
-    }
-
-    /**
-     * Returns a string, suitable for use by applications/services,
-     * that identifies this look and feel.
-     *
-     * @return "TestALF"
-     */
-    public String getID() {
-        return "TestALF";
-    }
-
-    /**
-     * Returns a one-line description of this look and feel.
-     *
-     * @return a descriptive string such as "Allows multiple UI instances per component instance"
-     */
-    public String getDescription() {
-        return "Allows multiple UI instances per component instance";
-    }
-
-    /**
-     * Returns <code>false</code>;
-     * this look and feel is not native to any platform.
-     *
-     * @return <code>false</code>
-     */
-    public boolean isNativeLookAndFeel() {
-        return false;
-    }
-
-    /**
-     * Returns <code>true</code>;
-     * every platform permits this look and feel.
-     *
-     * @return <code>true</code>
-     */
-    public boolean isSupportedLookAndFeel() {
-        return true;
-    }
-
-    /**
-     * Creates, initializes, and returns
-     * the look and feel specific defaults.
-     * For this look and feel,
-     * the defaults consist solely of
-     * mappings of UI class IDs
-     * (such as "ButtonUI")
-     * to <code>ComponentUI</code> class names
-     * (such as "com.myco.myalaf.MultiButtonUI").
-     *
-     * @return an initialized <code>UIDefaults</code> object
-     * @see javax.swing.JComponent#getUIClassID
-     */
-    public UIDefaults getDefaults() {
-        System.out.println("In the TestALFLookAndFeel getDefaults method.");
-        UIDefaults table = new TestALFUIDefaults();
-        //String prefix = "com.myco.myalaf.TestALF";
-        String prefix = "TestALF";
-        Object[] uiDefaults = {
-                   "ButtonUI", prefix + "ButtonUI",
-         "CheckBoxMenuItemUI", prefix + "MenuItemUI",
-                 "CheckBoxUI", prefix + "ButtonUI",
-             "ColorChooserUI", prefix + "ColorChooserUI",
-                 "ComboBoxUI", prefix + "ComboBoxUI",
-              "DesktopIconUI", prefix + "DesktopIconUI",
-              "DesktopPaneUI", prefix + "DesktopPaneUI",
-               "EditorPaneUI", prefix + "TextUI",
-              "FileChooserUI", prefix + "FileChooserUI",
-       "FormattedTextFieldUI", prefix + "TextUI",
-            "InternalFrameUI", prefix + "InternalFrameUI",
-                    "LabelUI", prefix + "LabelUI",
-                     "ListUI", prefix + "ListUI",
-                  "MenuBarUI", prefix + "MenuBarUI",
-                 "MenuItemUI", prefix + "MenuItemUI",
-                     "MenuUI", prefix + "MenuItemUI",
-               "OptionPaneUI", prefix + "OptionPaneUI",
-                    "PanelUI", prefix + "PanelUI",
-            "PasswordFieldUI", prefix + "TextUI",
-       "PopupMenuSeparatorUI", prefix + "SeparatorUI",
-                "PopupMenuUI", prefix + "PopupMenuUI",
-              "ProgressBarUI", prefix + "ProgressBarUI",
-      "RadioButtonMenuItemUI", prefix + "MenuItemUI",
-              "RadioButtonUI", prefix + "ButtonUI",
-                 "RootPaneUI", prefix + "RootPaneUI",
-                "ScrollBarUI", prefix + "ScrollBarUI",
-               "ScrollPaneUI", prefix + "ScrollPaneUI",
-                "SeparatorUI", prefix + "SeparatorUI",
-                   "SliderUI", prefix + "SliderUI",
-                  "SpinnerUI", prefix + "SpinnerUI",
-                "SplitPaneUI", prefix + "SplitPaneUI",
-               "TabbedPaneUI", prefix + "TabbedPaneUI",
-              "TableHeaderUI", prefix + "TableHeaderUI",
-                    "TableUI", prefix + "TableUI",
-                 "TextAreaUI", prefix + "TextUI",
-                "TextFieldUI", prefix + "TextUI",
-                 "TextPaneUI", prefix + "TextUI",
-             "ToggleButtonUI", prefix + "ButtonUI",
-         "ToolBarSeparatorUI", prefix + "SeparatorUI",
-                  "ToolBarUI", prefix + "ToolBarUI",
-                  "ToolTipUI", prefix + "ToolTipUI",
-                     "TreeUI", prefix + "TreeUI",
-                 "ViewportUI", prefix + "ViewportUI",
-        };
-
-        table.putDefaults(uiDefaults);
-        return table;
-    }
-
-}
-
-/**
- * We want the Test auxiliary look and feel to be quiet and fallback
- * gracefully if it cannot find a UI.  This class overrides the
- * getUIError method of UIDefaults, which is the method that
- * emits error messages when it cannot find a UI class in the
- * LAF.
- */
-class TestALFUIDefaults extends UIDefaults {
-    protected void getUIError(String msg) {
-        System.err.println("Test auxiliary L&F:  " + msg);
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/beans/WeakCache.java	Wed Sep 24 08:14:37 2008 -0700
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2008 Sun Microsystems, 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+package com.sun.beans;
+
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+/**
+ * A hashtable-based cache with weak keys and weak values.
+ * An entry in the map will be automatically removed
+ * when its key is no longer in the ordinary use.
+ * A value will be automatically removed as well
+ * when it is no longer in the ordinary use.
+ *
+ * @since 1.7
+ *
+ * @author Sergey A. Malenkov
+ */
+public final class WeakCache<K, V> {
+    private final Map<K, Reference<V>> map = new WeakHashMap<K, Reference<V>>();
+
+    /**
+     * Returns a value to which the specified {@code key} is mapped,
+     * or {@code null} if this map contains no mapping for the {@code key}.
+     *
+     * @param key  the key whose associated value is returned
+     * @return a value to which the specified {@code key} is mapped
+     */
+    public V get(K key) {
+        Reference<V> reference = this.map.get(key);
+        if (reference == null) {
+            return null;
+        }
+        V value = reference.get();
+        if (value == null) {
+            this.map.remove(key);
+        }
+        return value;
+    }
+
+    /**
+     * Associates the specified {@code value} with the specified {@code key}.
+     * Removes the mapping for the specified {@code key} from this cache
+     * if it is present and the specified {@code value} is {@code null}.
+     * If the cache previously contained a mapping for the {@code key},
+     * the old value is replaced by the specified {@code value}.
+     *
+     * @param key    the key with which the specified value is associated
+     * @param value  the value to be associated with the specified key
+     */
+    public void put(K key, V value) {
+        if (value != null) {
+            this.map.put(key, new WeakReference<V>(value));
+        }
+        else {
+            this.map.remove(key);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java	Wed Sep 24 08:14:37 2008 -0700
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2002-2007 Sun Microsystems, 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.java.swing;
+
+import sun.awt.EventQueueDelegate;
+import sun.awt.AppContext;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.awt.AWTEvent;
+import java.awt.EventQueue;
+import java.awt.Component;
+import javax.swing.JComponent;
+import javax.swing.RepaintManager;
+
+/**
+ * A collection of utility methods for Swing.
+ * <p>
+ * <b>WARNING:</b> While this class is public, it should not be treated as
+ * public API and its API may change in incompatable ways between dot dot
+ * releases and even patch releases. You should not rely on this class even
+ * existing.
+ *
+ * This is a second part of sun.swing.SwingUtilities2. It is required
+ * to provide services for JavaFX applets.
+ *
+ */
+public class SwingUtilities3 {
+    /**
+     * The {@code clientProperty} key for delegate {@code RepaintManager}
+     */
+    private static final Object DELEGATE_REPAINT_MANAGER_KEY =
+        new StringBuilder("DelegateRepaintManagerKey");
+
+    /**
+      * Registers delegate RepaintManager for {@code JComponent}.
+      */
+    public static void setDelegateRepaintManager(JComponent component,
+                                                RepaintManager repaintManager) {
+        /* setting up flag in AppContext to speed up lookups in case
+         * there are no delegate RepaintManagers used.
+         */
+        AppContext.getAppContext().put(DELEGATE_REPAINT_MANAGER_KEY,
+                                       Boolean.TRUE);
+
+        component.putClientProperty(DELEGATE_REPAINT_MANAGER_KEY,
+                                    repaintManager);
+    }
+
+    /**
+     * Returns delegate {@code RepaintManager} for {@code component} hierarchy.
+     */
+    public static RepaintManager getDelegateRepaintManager(Component
+                                                            component) {
+        RepaintManager delegate = null;
+        if (Boolean.TRUE == AppContext.getAppContext().get(
+                                               DELEGATE_REPAINT_MANAGER_KEY)) {
+            while (delegate == null && component != null) {
+                while (component != null
+                         && ! (component instanceof JComponent)) {
+                    component = component.getParent();
+                }
+                if (component != null) {
+                    delegate = (RepaintManager)
+                        ((JComponent) component)
+                          .getClientProperty(DELEGATE_REPAINT_MANAGER_KEY);
+                    component = component.getParent();
+                }
+
+            }
+        }
+        return delegate;
+    }
+
+    /*
+     * We use maps to avoid reflection. Hopefully it should perform better
+     * this way.
+     */
+    public static void setEventQueueDelegate(
+            Map<String, Map<String, Object>> map) {
+        EventQueueDelegate.setDelegate(new EventQueueDelegateFromMap(map));
+    }
+
+    private static class EventQueueDelegateFromMap
+    implements EventQueueDelegate.Delegate {
+        private final AWTEvent[] afterDispatchEventArgument;
+        private final Object[] afterDispatchHandleArgument;
+        private final Callable<Void> afterDispatchCallable;
+
+        private final AWTEvent[] beforeDispatchEventArgument;
+        private final Callable<Object> beforeDispatchCallable;
+
+        private final EventQueue[] getNextEventEventQueueArgument;
+        private final Callable<AWTEvent> getNextEventCallable;
+
+        @SuppressWarnings("unchecked")
+        public EventQueueDelegateFromMap(Map<String, Map<String, Object>> objectMap) {
+            Map<String, Object> methodMap = objectMap.get("afterDispatch");
+            afterDispatchEventArgument = (AWTEvent[]) methodMap.get("event");
+            afterDispatchHandleArgument = (Object[]) methodMap.get("handle");
+            afterDispatchCallable = (Callable<Void>) methodMap.get("method");
+
+            methodMap = objectMap.get("beforeDispatch");
+            beforeDispatchEventArgument = (AWTEvent[]) methodMap.get("event");
+            beforeDispatchCallable = (Callable<Object>) methodMap.get("method");
+
+            methodMap = objectMap.get("getNextEvent");
+            getNextEventEventQueueArgument =
+                (EventQueue[]) methodMap.get("eventQueue");
+            getNextEventCallable = (Callable<AWTEvent>) methodMap.get("method");
+        }
+
+        @Override
+        public void afterDispatch(AWTEvent event, Object handle) throws InterruptedException {
+            afterDispatchEventArgument[0] = event;
+            afterDispatchHandleArgument[0] = handle;
+            try {
+                afterDispatchCallable.call();
+            } catch (InterruptedException e) {
+                throw e;
+            } catch (RuntimeException e) {
+                throw e;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Object beforeDispatch(AWTEvent event) throws InterruptedException {
+            beforeDispatchEventArgument[0] = event;
+            try {
+                return beforeDispatchCallable.call();
+            } catch (InterruptedException e) {
+                throw e;
+            } catch (RuntimeException e) {
+                throw e;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public AWTEvent getNextEvent(EventQueue eventQueue) throws InterruptedException {
+            getNextEventEventQueueArgument[0] = eventQueue;
+            try {
+                return getNextEventCallable.call();
+            } catch (InterruptedException e) {
+                throw e;
+            } catch (RuntimeException e) {
+                throw e;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+}
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -442,7 +442,10 @@
         }
 
         if (updateModel) {
-            getColorSelectionModel().setSelectedColor(color);
+            ColorSelectionModel model = getColorSelectionModel();
+            if (model != null) {
+                model.setSelectedColor(color);
+            }
         }
 
         triangle.setColor(hue, saturation, brightness);
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java	Wed Sep 24 08:14:37 2008 -0700
@@ -770,33 +770,56 @@
             JComponent maximizeButton = findChild(titlePane, "InternalFrameTitlePane.maximizeButton");
             JComponent closeButton    = findChild(titlePane, "InternalFrameTitlePane.closeButton");
 
-            int buttonGap = 0;
-
             Insets button_border = (Insets)gm.get("button_border");
             Dimension buttonDim = calculateButtonSize(titlePane);
 
-            int x = getInt("left_titlebar_edge");
             int y = (button_border != null) ? button_border.top : 0;
+            if (titlePaneParent.getComponentOrientation().isLeftToRight()) {
+                int x = getInt("left_titlebar_edge");
 
-            menuButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                menuButton.setBounds(x, y, buttonDim.width, buttonDim.height);
 
-            x = w - buttonDim.width - getInt("right_titlebar_edge");
-            if (button_border != null) {
-                x -= button_border.right;
-            }
+                x = w - buttonDim.width - getInt("right_titlebar_edge");
+                if (button_border != null) {
+                    x -= button_border.right;
+                }
 
-            if (frame.isClosable()) {
-                closeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                x -= (buttonDim.width + buttonGap);
-            }
+                if (frame.isClosable()) {
+                    closeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                    x -= buttonDim.width;
+                }
 
-            if (frame.isMaximizable()) {
-                maximizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                x -= (buttonDim.width + buttonGap);
-            }
+                if (frame.isMaximizable()) {
+                    maximizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                    x -= buttonDim.width;
+                }
 
-            if (frame.isIconifiable()) {
-                minimizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                if (frame.isIconifiable()) {
+                    minimizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                }
+            } else {
+                int x = w - buttonDim.width - getInt("right_titlebar_edge");
+
+                menuButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+
+                x = getInt("left_titlebar_edge");
+                if (button_border != null) {
+                    x += button_border.left;
+                }
+
+                if (frame.isClosable()) {
+                    closeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                    x += buttonDim.width;
+                }
+
+                if (frame.isMaximizable()) {
+                    maximizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                    x += buttonDim.width;
+                }
+
+                if (frame.isIconifiable()) {
+                    minimizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
+                }
             }
         }
     } // end TitlePaneLayout
@@ -973,10 +996,8 @@
         String title = jif.getTitle();
         if (title != null) {
             FontMetrics fm = SwingUtilities2.getFontMetrics(jif, g);
-            if (jif.getComponentOrientation().isLeftToRight()) {
-                title = SwingUtilities2.clipStringIfNecessary(jif, fm, title,
-                             calculateTitleTextWidth(g, jif));
-            }
+            title = SwingUtilities2.clipStringIfNecessary(jif, fm, title,
+                         calculateTitleArea(jif).width);
             g.setColor(color);
             SwingUtilities2.drawString(jif, g, title, x, y + fm.getAscent());
         }
@@ -1010,9 +1031,10 @@
         JComponent titlePane = findChild(jif, "InternalFrame.northPane");
         Dimension buttonDim = calculateButtonSize(titlePane);
         Insets title_border = (Insets)frameGeometry.get("title_border");
+        Insets button_border = (Insets)getFrameGeometry().get("button_border");
+
         Rectangle r = new Rectangle();
-
-        r.x = getInt("left_titlebar_edge") + buttonDim.width;
+        r.x = getInt("left_titlebar_edge");
         r.y = 0;
         r.height = titlePane.getHeight();
         if (title_border != null) {
@@ -1021,15 +1043,36 @@
             r.height -= (title_border.top + title_border.bottom);
         }
 
-        r.width = titlePane.getWidth() - r.x - getInt("right_titlebar_edge");
-        if (jif.isClosable()) {
-            r.width -= buttonDim.width;
-        }
-        if (jif.isMaximizable()) {
-            r.width -= buttonDim.width;
-        }
-        if (jif.isIconifiable()) {
-            r.width -= buttonDim.width;
+        if (titlePane.getParent().getComponentOrientation().isLeftToRight()) {
+            r.x += buttonDim.width;
+            if (button_border != null) {
+                r.x += button_border.left;
+            }
+            r.width = titlePane.getWidth() - r.x - getInt("right_titlebar_edge");
+            if (jif.isClosable()) {
+                r.width -= buttonDim.width;
+            }
+            if (jif.isMaximizable()) {
+                r.width -= buttonDim.width;
+            }
+            if (jif.isIconifiable()) {
+                r.width -= buttonDim.width;
+            }
+        } else {
+            if (jif.isClosable()) {
+                r.x += buttonDim.width;
+            }
+            if (jif.isMaximizable()) {
+                r.x += buttonDim.width;
+            }
+            if (jif.isIconifiable()) {
+                r.x += buttonDim.width;
+            }
+            r.width = titlePane.getWidth() - r.x - getInt("right_titlebar_edge")
+                    - buttonDim.width;
+            if (button_border != null) {
+                r.x -= button_border.right;
+            }
         }
         if (title_border != null) {
             r.width -= title_border.right;
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/DesktopProperty.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/DesktopProperty.java	Wed Sep 24 08:14:37 2008 -0700
@@ -49,8 +49,7 @@
     /**
      * ReferenceQueue of unreferenced WeakPCLs.
      */
-    private static ReferenceQueue queue;
-
+    private static ReferenceQueue<DesktopProperty> queue;
 
     /**
      * PropertyChangeListener attached to the Toolkit.
@@ -76,7 +75,7 @@
 
 
     static {
-        queue = new ReferenceQueue();
+        queue = new ReferenceQueue<DesktopProperty>();
     }
 
     /**
@@ -117,8 +116,8 @@
             XPStyle.invalidateStyle();
         }
         Frame appFrames[] = Frame.getFrames();
-        for (int j=0; j < appFrames.length; j++) {
-            updateWindowUI(appFrames[j]);
+        for (Frame appFrame : appFrames) {
+            updateWindowUI(appFrame);
         }
     }
 
@@ -128,8 +127,8 @@
     private static void updateWindowUI(Window window) {
         SwingUtilities.updateComponentTreeUI(window);
         Window ownedWins[] = window.getOwnedWindows();
-        for (int i=0; i < ownedWins.length; i++) {
-            updateWindowUI(ownedWins[i]);
+        for (Window ownedWin : ownedWins) {
+            updateWindowUI(ownedWin);
         }
     }
 
@@ -270,13 +269,13 @@
      * is handled via a WeakReference so as not to pin down the
      * DesktopProperty.
      */
-    private static class WeakPCL extends WeakReference
+    private static class WeakPCL extends WeakReference<DesktopProperty>
                                implements PropertyChangeListener {
         private Toolkit kit;
         private String key;
         private LookAndFeel laf;
 
-        WeakPCL(Object target, Toolkit kit, String key, LookAndFeel laf) {
+        WeakPCL(DesktopProperty target, Toolkit kit, String key, LookAndFeel laf) {
             super(target, queue);
             this.kit = kit;
             this.key = key;
@@ -284,7 +283,7 @@
         }
 
         public void propertyChange(PropertyChangeEvent pce) {
-            DesktopProperty property = (DesktopProperty)get();
+            DesktopProperty property = get();
 
             if (property == null || laf != UIManager.getLookAndFeel()) {
                 // The property was GC'ed, we're no longer interested in
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -96,7 +96,7 @@
             }
         } catch (PropertyVetoException e) {}
         if (f != currentFrame) {
-            currentFrameRef = new WeakReference(f);
+            currentFrameRef = new WeakReference<JInternalFrame>(f);
         }
     }
 
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java	Wed Sep 24 08:14:37 2008 -0700
@@ -983,7 +983,7 @@
                 } else if (s.equals("componentOrientation")) {
                     ComponentOrientation o = (ComponentOrientation)e.getNewValue();
                     JFileChooser cc = (JFileChooser)e.getSource();
-                    if (o != (ComponentOrientation)e.getOldValue()) {
+                    if (o != e.getOldValue()) {
                         cc.applyComponentOrientation(o);
                     }
                 } else if (s.equals("ancestor")) {
@@ -1123,7 +1123,7 @@
      * Data model for a type-face selection combo-box.
      */
     protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel {
-        Vector directories = new Vector();
+        Vector<File> directories = new Vector<File>();
         int[] depths = null;
         File selectedDirectory = null;
         JFileChooser chooser = getFileChooser();
@@ -1162,7 +1162,7 @@
             // Get the canonical (full) path. This has the side
             // benefit of removing extraneous chars from the path,
             // for example /foo/bar/ becomes /foo/bar
-            File canonical = null;
+            File canonical;
             try {
                 canonical = directory.getCanonicalFile();
             } catch (IOException e) {
@@ -1175,7 +1175,7 @@
                 File sf = useShellFolder ? ShellFolder.getShellFolder(canonical)
                                          : canonical;
                 File f = sf;
-                Vector path = new Vector(10);
+                Vector<File> path = new Vector<File>(10);
                 do {
                     path.addElement(f);
                 } while ((f = f.getParentFile()) != null);
@@ -1183,7 +1183,7 @@
                 int pathCount = path.size();
                 // Insert chain at appropriate place in vector
                 for (int i = 0; i < pathCount; i++) {
-                    f = (File)path.get(i);
+                    f = path.get(i);
                     if (directories.contains(f)) {
                         int topIndex = directories.indexOf(f);
                         for (int j = i-1; j >= 0; j--) {
@@ -1202,12 +1202,12 @@
         private void calculateDepths() {
             depths = new int[directories.size()];
             for (int i = 0; i < depths.length; i++) {
-                File dir = (File)directories.get(i);
+                File dir = directories.get(i);
                 File parent = dir.getParentFile();
                 depths[i] = 0;
                 if (parent != null) {
                     for (int j = i-1; j >= 0; j--) {
-                        if (parent.equals((File)directories.get(j))) {
+                        if (parent.equals(directories.get(j))) {
                             depths[i] = depths[j] + 1;
                             break;
                         }
@@ -1306,8 +1306,8 @@
             FileFilter currentFilter = getFileChooser().getFileFilter();
             boolean found = false;
             if(currentFilter != null) {
-                for(int i=0; i < filters.length; i++) {
-                    if(filters[i] == currentFilter) {
+                for (FileFilter filter : filters) {
+                    if (filter == currentFilter) {
                         found = true;
                     }
                 }
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java	Wed Sep 24 08:14:37 2008 -0700
@@ -137,25 +137,46 @@
             int baseline = (getHeight() + fm.getAscent() - fm.getLeading() -
                     fm.getDescent()) / 2;
 
+            Rectangle lastIconBounds = new Rectangle(0, 0, 0, 0);
+            if (frame.isIconifiable()) {
+                lastIconBounds = iconButton.getBounds();
+            } else if (frame.isMaximizable()) {
+                lastIconBounds = maxButton.getBounds();
+            } else if (frame.isClosable()) {
+                lastIconBounds = closeButton.getBounds();
+            }
+
             int titleX;
-            Rectangle r = new Rectangle(0, 0, 0, 0);
-            if (frame.isIconifiable())  r = iconButton.getBounds();
-            else if (frame.isMaximizable())  r = maxButton.getBounds();
-            else if (frame.isClosable())  r = closeButton.getBounds();
             int titleW;
+            int gap = 2;
+            if (WindowsGraphicsUtils.isLeftToRight(frame)) {
+                if (lastIconBounds.x == 0) { // There are no icons
+                    lastIconBounds.x = frame.getWidth() - frame.getInsets().right;
+                }
+                titleX = systemLabel.getX() + systemLabel.getWidth() + gap;
+                if (xp != null) {
+                    titleX += 2;
+                }
+                titleW = lastIconBounds.x - titleX - gap;
+            } else {
+                if (lastIconBounds.x == 0) { // There are no icons
+                    lastIconBounds.x = frame.getInsets().left;
+                }
+                titleW = SwingUtilities2.stringWidth(frame, fm, title);
+                int minTitleX = lastIconBounds.x + lastIconBounds.width + gap;
+                if (xp != null) {
+                    minTitleX += 2;
+                }
+                int availableWidth = systemLabel.getX() - gap - minTitleX;
+                if (availableWidth > titleW) {
+                    titleX = systemLabel.getX() - gap - titleW;
+                } else {
+                    titleX = minTitleX;
+                    titleW = availableWidth;
+                }
+            }
+            title = getTitle(frame.getTitle(), fm, titleW);
 
-            if(WindowsGraphicsUtils.isLeftToRight(frame) ) {
-                if (r.x == 0)  r.x = frame.getWidth()-frame.getInsets().right;
-                    titleX = systemLabel.getX() + systemLabel.getWidth() + 2;
-                    if (xp != null) {
-                        titleX += 2;
-                    }
-                    titleW = r.x - titleX - 3;
-                    title = getTitle(frame.getTitle(), fm, titleW);
-            } else {
-                titleX = systemLabel.getX() - 2
-                         - SwingUtilities2.stringWidth(frame,fm,title);
-            }
             if (xp != null) {
                 String shadowType = null;
                 if (isSelected) {
@@ -258,8 +279,8 @@
                     g.fillRect(0, 0, w, h);
                 }
                 Icon icon = getIcon();
-                int iconWidth = 0;
-                int iconHeight = 0;
+                int iconWidth;
+                int iconHeight;
                 if (icon != null &&
                     (iconWidth = icon.getIconWidth()) > 0 &&
                     (iconHeight = icon.getIconHeight()) > 0) {
@@ -304,18 +325,18 @@
     }
 
     protected void addSystemMenuItems(JPopupMenu menu) {
-        JMenuItem mi = (JMenuItem)menu.add(restoreAction);
+        JMenuItem mi = menu.add(restoreAction);
         mi.setMnemonic('R');
-        mi = (JMenuItem)menu.add(moveAction);
+        mi = menu.add(moveAction);
         mi.setMnemonic('M');
-        mi = (JMenuItem)menu.add(sizeAction);
+        mi = menu.add(sizeAction);
         mi.setMnemonic('S');
-        mi = (JMenuItem)menu.add(iconifyAction);
+        mi = menu.add(iconifyAction);
         mi.setMnemonic('n');
-        mi = (JMenuItem)menu.add(maximizeAction);
+        mi = menu.add(maximizeAction);
         mi.setMnemonic('x');
         systemPopupMenu.add(new JSeparator());
-        mi = (JMenuItem)menu.add(closeAction);
+        mi = menu.add(closeAction);
         mi.setMnemonic('C');
     }
 
@@ -441,7 +462,7 @@
 
     public class WindowsPropertyChangeHandler extends PropertyChangeHandler {
         public void propertyChange(PropertyChangeEvent evt) {
-            String prop = (String)evt.getPropertyName();
+            String prop = evt.getPropertyName();
 
             // Update the internal frame icon for the system menu.
             if (JInternalFrame.FRAME_ICON_PROPERTY.equals(prop) &&
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java	Wed Sep 24 08:14:37 2008 -0700
@@ -369,21 +369,21 @@
      */
     private static class Grid {
         private static final int BUFFER_SIZE = 64;
-        private static HashMap map;
+        private static HashMap<String, WeakReference<Grid>> map;
 
         private BufferedImage image;
 
         static {
-            map = new HashMap();
+            map = new HashMap<String, WeakReference<Grid>>();
         }
 
         public static Grid getGrid(Color fg, Color bg) {
             String key = fg.getRGB() + " " + bg.getRGB();
-            WeakReference ref = (WeakReference)map.get(key);
-            Grid grid = (ref == null) ? null : (Grid)ref.get();
+            WeakReference<Grid> ref = map.get(key);
+            Grid grid = (ref == null) ? null : ref.get();
             if (grid == null) {
                 grid = new Grid(fg, bg);
-                map.put(key, new WeakReference(grid));
+                map.put(key, new WeakReference<Grid>(grid));
             }
             return grid;
         }
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java	Wed Sep 24 08:14:37 2008 -0700
@@ -53,13 +53,13 @@
      * Keys to use for forward focus traversal when the JComponent is
      * managing focus.
      */
-    private static Set managingFocusForwardTraversalKeys;
+    private static Set<KeyStroke> managingFocusForwardTraversalKeys;
 
     /**
      * Keys to use for backward focus traversal when the JComponent is
      * managing focus.
      */
-    private static Set managingFocusBackwardTraversalKeys;
+    private static Set<KeyStroke> managingFocusBackwardTraversalKeys;
 
     private boolean contentOpaque = true;
 
@@ -69,13 +69,13 @@
 
         // focus forward traversal key
         if (managingFocusForwardTraversalKeys==null) {
-            managingFocusForwardTraversalKeys = new HashSet();
+            managingFocusForwardTraversalKeys = new HashSet<KeyStroke>();
             managingFocusForwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
         }
         tabPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, managingFocusForwardTraversalKeys);
         // focus backward traversal key
         if (managingFocusBackwardTraversalKeys==null) {
-            managingFocusBackwardTraversalKeys = new HashSet();
+            managingFocusBackwardTraversalKeys = new HashSet<KeyStroke>();
             managingFocusBackwardTraversalKeys.add( KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK));
         }
         tabPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, managingFocusBackwardTraversalKeys);
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java	Wed Sep 24 08:14:37 2008 -0700
@@ -124,7 +124,7 @@
                 setIcon(null);
                 sortIcon = null;
                 SortOrder sortOrder =
-                    getColumnSortOrder(header.getTable(), column);
+                    getColumnSortOrder(table, column);
                 if (sortOrder != null) {
                     switch (sortOrder) {
                     case ASCENDING:
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=Sample Text  Sample Text
 ColorChooser.swatchesNameText=Swatches
 ColorChooser.swatchesMnemonic=83
-ColorChooser.swatchesDisplayedMnemonicIndex=0
 ColorChooser.swatchesRecentText=Recent:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=Red
 ColorChooser.rgbRedMnemonic=68
 ColorChooser.rgbGreenText=Green
 ColorChooser.rgbGreenMnemonic=78
 ColorChooser.rgbBlueText=Blue
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_de.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_de.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=Beispieltext  Beispieltext
 ColorChooser.swatchesNameText=Muster
 ColorChooser.swatchesMnemonic=77
-ColorChooser.swatchesDisplayedMnemonicIndex=0
 ColorChooser.swatchesRecentText=Aktuell:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=Rot
 ColorChooser.rgbRedMnemonic=82
 ColorChooser.rgbGreenText=Gr\u00fcn
 ColorChooser.rgbGreenMnemonic=78
 ColorChooser.rgbBlueText=Blau
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_es.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_es.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=Texto de ejemplo  Texto de ejemplo
 ColorChooser.swatchesNameText=Muestras
 ColorChooser.swatchesMnemonic=77
-ColorChooser.swatchesDisplayedMnemonicIndex=0
 ColorChooser.swatchesRecentText=Reciente:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=V
-ColorChooser.hsbBlueText=A
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=Rojo
 ColorChooser.rgbRedMnemonic=74
 ColorChooser.rgbGreenText=Verde
 ColorChooser.rgbGreenMnemonic=86
 ColorChooser.rgbBlueText=Azul
 ColorChooser.rgbBlueMnemonic=76
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=Echantillon de texte  Echantillon de texte
 ColorChooser.swatchesNameText=Echantillons
 ColorChooser.swatchesMnemonic=69
-ColorChooser.swatchesDisplayedMnemonicIndex=0
 ColorChooser.swatchesRecentText=Dernier :
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=V
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RVB
 ColorChooser.rgbMnemonic=86
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=Rouge
 ColorChooser.rgbRedMnemonic=71
 ColorChooser.rgbGreenText=Vert
 ColorChooser.rgbGreenMnemonic=84
 ColorChooser.rgbBlueText=Bleu
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_it.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_it.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=Testo di prova          Testo di prova
 ColorChooser.swatchesNameText=Colori campione
 ColorChooser.swatchesMnemonic=67
-ColorChooser.swatchesDisplayedMnemonicIndex=0
 ColorChooser.swatchesRecentText=Recenti:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=Rosso
 ColorChooser.rgbRedMnemonic=79
 ColorChooser.rgbGreenText=Verde
 ColorChooser.rgbGreenMnemonic=69
 ColorChooser.rgbBlueText=Blu
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=\u30b5\u30f3\u30d7\u30eb\u30c6\u30ad\u30b9\u30c8 \u30b5\u30f3\u30d7\u30eb\u30c6\u30ad\u30b9\u30c8
 ColorChooser.swatchesNameText=\u30b5\u30f3\u30d7\u30eb(S)
 ColorChooser.swatchesMnemonic=83
-ColorChooser.swatchesDisplayedMnemonicIndex=5
 ColorChooser.swatchesRecentText=\u6700\u65b0:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=\u8d64(D)
 ColorChooser.rgbRedMnemonic=68
 ColorChooser.rgbGreenText=\u7dd1(N)
 ColorChooser.rgbGreenMnemonic=78
 ColorChooser.rgbBlueText=\u9752(B)
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=\uc0d8\ud50c \ud14d\uc2a4\ud2b8  \uc0d8\ud50c \ud14d\uc2a4\ud2b8
 ColorChooser.swatchesNameText=\uacac\ubcf8(S)
 ColorChooser.swatchesMnemonic=83
-ColorChooser.swatchesDisplayedMnemonicIndex=3
 ColorChooser.swatchesRecentText=\ucd5c\uadfc \ubaa9\ub85d:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=\ube68\uac04\uc0c9(D)
 ColorChooser.rgbRedMnemonic=68
 ColorChooser.rgbGreenText=\ub179\uc0c9(N)
 ColorChooser.rgbGreenMnemonic=78
 ColorChooser.rgbBlueText=\ud30c\ub780\uc0c9(B)
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=Exempeltext  Exempeltext
 ColorChooser.swatchesNameText=Prov
 ColorChooser.swatchesMnemonic=80
-ColorChooser.swatchesDisplayedMnemonicIndex=0
 ColorChooser.swatchesRecentText=Tidigare:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=R\u00f6d
 ColorChooser.rgbRedMnemonic=82
 ColorChooser.rgbGreenText=Gr\u00f6n
 ColorChooser.rgbGreenMnemonic=71
 ColorChooser.rgbBlueText=Bl\u00e5
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=\u6837\u54c1\u6587\u672c  \u6837\u54c1\u6587\u672c
 ColorChooser.swatchesNameText=\u6837\u54c1(S)
 ColorChooser.swatchesMnemonic=83
-ColorChooser.swatchesDisplayedMnemonicIndex=3
 ColorChooser.swatchesRecentText=\u6700\u8fd1:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=\u7ea2
 ColorChooser.rgbRedMnemonic=68
 ColorChooser.rgbGreenText=\u7eff
 ColorChooser.rgbGreenMnemonic=78
 ColorChooser.rgbBlueText=\u84dd
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties	Wed Sep 24 08:14:37 2008 -0700
@@ -101,30 +101,41 @@
 ColorChooser.sampleText=\u7bc4\u4f8b\u6587\u5b57  \u7bc4\u4f8b\u6587\u5b57
 ColorChooser.swatchesNameText=\u8abf\u8272\u677f(S)
 ColorChooser.swatchesMnemonic=83
-ColorChooser.swatchesDisplayedMnemonicIndex=4
 ColorChooser.swatchesRecentText=\u6700\u65b0\u9078\u64c7:
-ColorChooser.hsbNameText=HSB
 # Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
 # constant, and an index into the text to render the mnemonic as. The
 # mnemonic is xxxMnemonic and the index of the character to underline is
 # xxxDisplayedMnemonicIndex.
-ColorChooser.hsbMnemonic=72
-ColorChooser.hsbDisplayedMnemonicIndex=0
-ColorChooser.hsbHueText=H
-ColorChooser.hsbSaturationText=S
-ColorChooser.hsbBrightnessText=B
-ColorChooser.hsbRedText=R
-ColorChooser.hsbGreenText=G
-ColorChooser.hsbBlueText=B
+ColorChooser.hsvNameText=HSV
+ColorChooser.hsvMnemonic=72
+ColorChooser.hsvHueText=Hue
+ColorChooser.hsvSaturationText=Saturation
+ColorChooser.hsvValueText=Value
+ColorChooser.hsvTransparencyText=Transparency
+ColorChooser.hslNameText=HSL
+ColorChooser.hslMnemonic=76
+ColorChooser.hslHueText=Hue
+ColorChooser.hslSaturationText=Saturation
+ColorChooser.hslLightnessText=Lightness
+ColorChooser.hslTransparencyText=Transparency
 ColorChooser.rgbNameText=RGB
 ColorChooser.rgbMnemonic=71
-ColorChooser.rgbDisplayedMnemonicIndex=1
 ColorChooser.rgbRedText=\u7d05\u8272(D)
 ColorChooser.rgbRedMnemonic=68
 ColorChooser.rgbGreenText=\u7da0\u8272(N)
 ColorChooser.rgbGreenMnemonic=78
 ColorChooser.rgbBlueText=\u85cd\u8272(B)
 ColorChooser.rgbBlueMnemonic=66
+ColorChooser.rgbAlphaText=Alpha
+ColorChooser.rgbHexCodeText=Color Code
+ColorChooser.rgbHexCodeMnemonic=67
+ColorChooser.cmykNameText=CMYK
+ColorChooser.cmykMnemonic=77
+ColorChooser.cmykCyanText=Cyan
+ColorChooser.cmykMagentaText=Magenta
+ColorChooser.cmykYellowText=Yellow
+ColorChooser.cmykBlackText=Black
+ColorChooser.cmykAlphaText=Alpha
 
 ############ OPTION PANE STRINGS #############
 # Mnemonic keys correspond to KeyEvent.VK_XXX constant
--- a/jdk/src/share/classes/java/awt/EventDispatchThread.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/awt/EventDispatchThread.java	Wed Sep 24 08:14:37 2008 -0700
@@ -39,6 +39,7 @@
 import java.util.logging.*;
 
 import sun.awt.dnd.SunDragSourceContextPeer;
+import sun.awt.EventQueueDelegate;
 
 /**
  * EventDispatchThread is a package-private AWT class which takes
@@ -243,10 +244,16 @@
         try {
             AWTEvent event;
             boolean eventOK;
+            EventQueueDelegate.Delegate delegate =
+                EventQueueDelegate.getDelegate();
             do {
-                event = (id == ANY_EVENT)
-                    ? theQueue.getNextEvent()
-                    : theQueue.getNextEvent(id);
+                if (delegate != null && id == ANY_EVENT) {
+                    event = delegate.getNextEvent(theQueue);
+                } else {
+                    event = (id == ANY_EVENT)
+                        ? theQueue.getNextEvent()
+                        : theQueue.getNextEvent(id);
+                }
 
                 eventOK = true;
                 synchronized (eventFilters) {
@@ -272,7 +279,14 @@
                 eventLog.log(Level.FINEST, "Dispatching: " + event);
             }
 
+            Object handle = null;
+            if (delegate != null) {
+                handle = delegate.beforeDispatch(event);
+            }
             theQueue.dispatchEvent(event);
+            if (delegate != null) {
+                delegate.afterDispatch(event, handle);
+            }
             return true;
         }
         catch (ThreadDeath death) {
--- a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Wed Sep 24 08:14:37 2008 -0700
@@ -298,7 +298,7 @@
                 oldL = (EventListener[])MethodUtil.invoke(m, oldInstance, new Object[]{});
                 newL = (EventListener[])MethodUtil.invoke(m, newInstance, new Object[]{});
             }
-            catch (Throwable e2) {
+            catch (Exception e2) {
                 try {
                     Method m = type.getMethod("getListeners", new Class[]{Class.class});
                     oldL = (EventListener[])MethodUtil.invoke(m, oldInstance, new Object[]{listenerType});
--- a/jdk/src/share/classes/java/beans/EventHandler.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/EventHandler.java	Wed Sep 24 08:14:37 2008 -0700
@@ -404,7 +404,7 @@
             Object newTarget = MethodUtil.invoke(getter, target, new Object[]{});
             return applyGetters(newTarget, rest);
         }
-        catch (Throwable e) {
+        catch (Exception e) {
             throw new RuntimeException("Failed to call method: " + first +
                                        " on " + target, e);
         }
--- a/jdk/src/share/classes/java/beans/MetaData.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/MetaData.java	Wed Sep 24 08:14:37 2008 -0700
@@ -650,7 +650,7 @@
         // Remove the new elements.
         // Do this first otherwise we undo the adding work.
         if (newMap != null) {
-            for ( Object newKey : newMap.keySet() ) {
+            for (Object newKey : newMap.keySet().toArray()) {
                // PENDING: This "key" is not in the right environment.
                 if (!oldMap.containsKey(newKey)) {
                     invokeStatement(oldInstance, "remove", new Object[]{newKey}, out);
@@ -986,14 +986,20 @@
         // null to defined values after the Windows are made visible -
         // special case them for now.
         if (!(oldInstance instanceof java.awt.Window)) {
-            String[] fieldNames = new String[]{"background", "foreground", "font"};
-            for(int i = 0; i < fieldNames.length; i++) {
-                String name = fieldNames[i];
-                Object oldValue = ReflectionUtils.getPrivateField(oldInstance, java.awt.Component.class, name, out.getExceptionListener());
-                Object newValue = (newInstance == null) ? null : ReflectionUtils.getPrivateField(newInstance, java.awt.Component.class, name, out.getExceptionListener());
-                if (oldValue != null && !oldValue.equals(newValue)) {
-                    invokeStatement(oldInstance, "set" + NameGenerator.capitalize(name), new Object[]{oldValue}, out);
-                }
+            Object oldBackground = c.isBackgroundSet() ? c.getBackground() : null;
+            Object newBackground = c2.isBackgroundSet() ? c2.getBackground() : null;
+            if (!MetaData.equals(oldBackground, newBackground)) {
+                invokeStatement(oldInstance, "setBackground", new Object[] { oldBackground }, out);
+            }
+            Object oldForeground = c.isForegroundSet() ? c.getForeground() : null;
+            Object newForeground = c2.isForegroundSet() ? c2.getForeground() : null;
+            if (!MetaData.equals(oldForeground, newForeground)) {
+                invokeStatement(oldInstance, "setForeground", new Object[] { oldForeground }, out);
+            }
+            Object oldFont = c.isFontSet() ? c.getFont() : null;
+            Object newFont = c2.isFontSet() ? c2.getFont() : null;
+            if (!MetaData.equals(oldFont, newFont)) {
+                invokeStatement(oldInstance, "setFont", new Object[] { oldFont }, out);
             }
         }
 
@@ -1104,26 +1110,30 @@
 
 // BorderLayout
 class java_awt_BorderLayout_PersistenceDelegate extends DefaultPersistenceDelegate {
+    private static final String[] CONSTRAINTS = {
+            BorderLayout.NORTH,
+            BorderLayout.SOUTH,
+            BorderLayout.EAST,
+            BorderLayout.WEST,
+            BorderLayout.CENTER,
+            BorderLayout.PAGE_START,
+            BorderLayout.PAGE_END,
+            BorderLayout.LINE_START,
+            BorderLayout.LINE_END,
+    };
+    @Override
     protected void initialize(Class<?> type, Object oldInstance,
                               Object newInstance, Encoder out) {
         super.initialize(type, oldInstance, newInstance, out);
-        String[] locations = {"north", "south", "east", "west", "center"};
-        String[] names = {java.awt.BorderLayout.NORTH, java.awt.BorderLayout.SOUTH,
-                          java.awt.BorderLayout.EAST, java.awt.BorderLayout.WEST,
-                          java.awt.BorderLayout.CENTER};
-        for(int i = 0; i < locations.length; i++) {
-            Object oldC = ReflectionUtils.getPrivateField(oldInstance,
-                                                          java.awt.BorderLayout.class,
-                                                          locations[i],
-                                                          out.getExceptionListener());
-            Object newC = ReflectionUtils.getPrivateField(newInstance,
-                                                          java.awt.BorderLayout.class,
-                                                          locations[i],
-                                                          out.getExceptionListener());
+        BorderLayout oldLayout = (BorderLayout) oldInstance;
+        BorderLayout newLayout = (BorderLayout) newInstance;
+        for (String constraints : CONSTRAINTS) {
+            Object oldC = oldLayout.getLayoutComponent(constraints);
+            Object newC = newLayout.getLayoutComponent(constraints);
             // Pending, assume any existing elements are OK.
             if (oldC != null && newC == null) {
                 invokeStatement(oldInstance, "addLayoutComponent",
-                                new Object[]{oldC, names[i]}, out);
+                                new Object[] { oldC, constraints }, out);
             }
         }
     }
--- a/jdk/src/share/classes/java/beans/PropertyChangeSupport.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/PropertyChangeSupport.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1996-2008 Sun Microsystems, 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
@@ -34,12 +34,49 @@
 
 /**
  * This is a utility class that can be used by beans that support bound
- * properties.  You can use an instance of this class as a member field
- * of your bean and delegate various work to it.
+ * properties.  It manages a list of listeners and dispatches
+ * {@link PropertyChangeEvent}s to them.  You can use an instance of this class
+ * as a member field of your bean and delegate these types of work to it.
+ * The {@link PropertyChangeListener} can be registered for all properties
+ * or for a property specified by name.
+ * <p>
+ * Here is an example of {@code PropertyChangeSupport} usage that follows
+ * the rules and recommendations laid out in the JavaBeans&trade; specification:
+ * <pre>
+ * public class MyBean {
+ *     private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
  *
+ *     public void addPropertyChangeListener(PropertyChangeListener listener) {
+ *         this.pcs.addPropertyChangeListener(listener);
+ *     }
+ *
+ *     public void removePropertyChangeListener(PropertyChangeListener listener) {
+ *         this.pcs.removePropertyChangeListener(listener);
+ *     }
+ *
+ *     private String value;
+ *
+ *     public String getValue() {
+ *         return this.value;
+ *     }
+ *
+ *     public void setValue(String newValue) {
+ *         String oldValue = this.value;
+ *         this.value = newValue;
+ *         this.pcs.firePropertyChange("value", oldValue, newValue);
+ *     }
+ *
+ *     [...]
+ * }
+ * </pre>
+ * <p>
+ * A {@code PropertyChangeSupport} instance is thread-safe.
+ * <p>
  * This class is serializable.  When it is serialized it will save
  * (and restore) any listeners that are themselves serializable.  Any
  * non-serializable listeners will be skipped during serialization.
+ *
+ * @see VetoableChangeSupport
  */
 public class PropertyChangeSupport implements Serializable {
     private PropertyChangeListenerMap map = new PropertyChangeListenerMap();
@@ -208,91 +245,91 @@
     }
 
     /**
-     * Report a bound property update to any registered listeners.
-     * No event is fired if old and new are equal and non-null.
-     *
+     * Reports a bound property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
+     * <p>
+     * No event is fired if old and new values are equal and non-null.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * firePropertyChange method that takes {@code
-     * PropertyChangeEvent} value.
+     * {@link #firePropertyChange(PropertyChangeEvent)} method.
      *
-     * @param propertyName  The programmatic name of the property
-     *          that was changed.
-     * @param oldValue  The old value of the property.
-     * @param newValue  The new value of the property.
+     * @param propertyName  the programmatic name of the property that was changed
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
      */
-    public void firePropertyChange(String propertyName,
-                                        Object oldValue, Object newValue) {
-        if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
-            return;
+    public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
+            firePropertyChange(new PropertyChangeEvent(this.source, propertyName, oldValue, newValue));
         }
-        firePropertyChange(new PropertyChangeEvent(source, propertyName,
-                                                   oldValue, newValue));
     }
 
     /**
-     * Report an int bound property update to any registered listeners.
-     * No event is fired if old and new are equal.
+     * Reports an integer bound property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
+     * <p>
+     * No event is fired if old and new values are equal.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * firePropertyChange method that takes Object values.
+     * {@link #firePropertyChange(String, Object, Object)}  method.
      *
-     * @param propertyName  The programmatic name of the property
-     *          that was changed.
-     * @param oldValue  The old value of the property.
-     * @param newValue  The new value of the property.
+     * @param propertyName  the programmatic name of the property that was changed
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
      */
-    public void firePropertyChange(String propertyName,
-                                        int oldValue, int newValue) {
-        if (oldValue == newValue) {
-            return;
+    public void firePropertyChange(String propertyName, int oldValue, int newValue) {
+        if (oldValue != newValue) {
+            firePropertyChange(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
         }
-        firePropertyChange(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
     }
 
     /**
-     * Report a boolean bound property update to any registered listeners.
-     * No event is fired if old and new are equal.
+     * Reports a boolean bound property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
+     * <p>
+     * No event is fired if old and new values are equal.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * firePropertyChange method that takes Object values.
+     * {@link #firePropertyChange(String, Object, Object)}  method.
      *
-     * @param propertyName  The programmatic name of the property
-     *          that was changed.
-     * @param oldValue  The old value of the property.
-     * @param newValue  The new value of the property.
+     * @param propertyName  the programmatic name of the property that was changed
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
      */
-    public void firePropertyChange(String propertyName,
-                                        boolean oldValue, boolean newValue) {
-        if (oldValue == newValue) {
-            return;
+    public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
+        if (oldValue != newValue) {
+            firePropertyChange(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
         }
-        firePropertyChange(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
     }
 
     /**
-     * Fire an existing PropertyChangeEvent to any registered listeners.
-     * No event is fired if the given event's old and new values are
-     * equal and non-null.
-     * @param evt  The PropertyChangeEvent object.
+     * Fires a property change event to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
+     * <p>
+     * No event is fired if the given event's old and new values are equal and non-null.
+     *
+     * @param event  the {@code PropertyChangeEvent} to be fired
      */
-    public void firePropertyChange(PropertyChangeEvent evt) {
-        Object oldValue = evt.getOldValue();
-        Object newValue = evt.getNewValue();
-        String propertyName = evt.getPropertyName();
-        if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
-            return;
+    public void firePropertyChange(PropertyChangeEvent event) {
+        Object oldValue = event.getOldValue();
+        Object newValue = event.getNewValue();
+        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
+            String name = event.getPropertyName();
+
+            PropertyChangeListener[] common = this.map.get(null);
+            PropertyChangeListener[] named = (name != null)
+                        ? this.map.get(name)
+                        : null;
+
+            fire(common, event);
+            fire(named, event);
         }
-        PropertyChangeListener[] common = this.map.get(null);
-        PropertyChangeListener[] named = (propertyName != null)
-                    ? this.map.get(propertyName)
-                    : null;
-
-        fire(common, evt);
-        fire(named, evt);
     }
 
-    private void fire(PropertyChangeListener[] listeners, PropertyChangeEvent event) {
+    private static void fire(PropertyChangeListener[] listeners, PropertyChangeEvent event) {
         if (listeners != null) {
             for (PropertyChangeListener listener : listeners) {
                 listener.propertyChange(event);
@@ -301,78 +338,69 @@
     }
 
     /**
-     * Report a bound indexed property update to any registered
-     * listeners.
+     * Reports a bound indexed property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
      * <p>
-     * No event is fired if old and new values are equal
-     * and non-null.
-     *
+     * No event is fired if old and new values are equal and non-null.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * firePropertyChange method that takes {@code PropertyChangeEvent} value.
+     * {@link #firePropertyChange(PropertyChangeEvent)} method.
      *
-     * @param propertyName The programmatic name of the property that
-     *                     was changed.
-     * @param index        index of the property element that was changed.
-     * @param oldValue     The old value of the property.
-     * @param newValue     The new value of the property.
+     * @param propertyName  the programmatic name of the property that was changed
+     * @param index         the index of the property element that was changed
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
      * @since 1.5
      */
-    public void fireIndexedPropertyChange(String propertyName, int index,
-                                          Object oldValue, Object newValue) {
-        firePropertyChange(new IndexedPropertyChangeEvent
-            (source, propertyName, oldValue, newValue, index));
+    public void fireIndexedPropertyChange(String propertyName, int index, Object oldValue, Object newValue) {
+        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
+            firePropertyChange(new IndexedPropertyChangeEvent(source, propertyName, oldValue, newValue, index));
+        }
     }
 
     /**
-     * Report an <code>int</code> bound indexed property update to any registered
-     * listeners.
+     * Reports an integer bound indexed property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
      * <p>
      * No event is fired if old and new values are equal.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * fireIndexedPropertyChange method which takes Object values.
+     * {@link #fireIndexedPropertyChange(String, int, Object, Object)} method.
      *
-     * @param propertyName The programmatic name of the property that
-     *                     was changed.
-     * @param index        index of the property element that was changed.
-     * @param oldValue     The old value of the property.
-     * @param newValue     The new value of the property.
+     * @param propertyName  the programmatic name of the property that was changed
+     * @param index         the index of the property element that was changed
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
      * @since 1.5
      */
-    public void fireIndexedPropertyChange(String propertyName, int index,
-                                          int oldValue, int newValue) {
-        if (oldValue == newValue) {
-            return;
+    public void fireIndexedPropertyChange(String propertyName, int index, int oldValue, int newValue) {
+        if (oldValue != newValue) {
+            fireIndexedPropertyChange(propertyName, index, Integer.valueOf(oldValue), Integer.valueOf(newValue));
         }
-        fireIndexedPropertyChange(propertyName, index,
-                                  Integer.valueOf(oldValue),
-                                  Integer.valueOf(newValue));
     }
 
     /**
-     * Report a <code>boolean</code> bound indexed property update to any
-     * registered listeners.
+     * Reports a boolean bound indexed property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
      * <p>
      * No event is fired if old and new values are equal.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * fireIndexedPropertyChange method which takes Object values.
+     * {@link #fireIndexedPropertyChange(String, int, Object, Object)} method.
      *
-     * @param propertyName The programmatic name of the property that
-     *                     was changed.
-     * @param index        index of the property element that was changed.
-     * @param oldValue     The old value of the property.
-     * @param newValue     The new value of the property.
+     * @param propertyName  the programmatic name of the property that was changed
+     * @param index         the index of the property element that was changed
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
      * @since 1.5
      */
-    public void fireIndexedPropertyChange(String propertyName, int index,
-                                          boolean oldValue, boolean newValue) {
-        if (oldValue == newValue) {
-            return;
+    public void fireIndexedPropertyChange(String propertyName, int index, boolean oldValue, boolean newValue) {
+        if (oldValue != newValue) {
+            fireIndexedPropertyChange(propertyName, index, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
         }
-        fireIndexedPropertyChange(propertyName, index, Boolean.valueOf(oldValue),
-                                  Boolean.valueOf(newValue));
     }
 
     /**
--- a/jdk/src/share/classes/java/beans/PropertyEditor.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/PropertyEditor.java	Wed Sep 24 08:14:37 2008 -0700
@@ -204,20 +204,21 @@
     //----------------------------------------------------------------------
 
     /**
-     * Register a listener for the PropertyChange event.  When a
-     * PropertyEditor changes its value it should fire a PropertyChange
-     * event on all registered PropertyChangeListeners, specifying the
-     * null value for the property name and itself as the source.
+     * Adds a listener for the value change.
+     * When the property editor changes its value
+     * it should fire a {@link PropertyChangeEvent}
+     * on all registered {@link PropertyChangeListener}s,
+     * specifying the {@code null} value for the property name
+     * and itself as the source.
      *
-     * @param listener  An object to be invoked when a PropertyChange
-     *          event is fired.
+     * @param listener  the {@link PropertyChangeListener} to add
      */
     void addPropertyChangeListener(PropertyChangeListener listener);
 
     /**
-     * Remove a listener for the PropertyChange event.
+     * Removes a listener for the value change.
      *
-     * @param listener  The PropertyChange listener to be removed.
+     * @param listener  the {@link PropertyChangeListener} to remove
      */
     void removePropertyChangeListener(PropertyChangeListener listener);
 
--- a/jdk/src/share/classes/java/beans/PropertyEditorManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/PropertyEditorManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1996-2008 Sun Microsystems, 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
@@ -25,6 +25,7 @@
 
 package java.beans;
 
+import com.sun.beans.WeakCache;
 import sun.beans.editors.*;
 
 /**
@@ -55,32 +56,30 @@
 public class PropertyEditorManager {
 
     /**
-     * Register an editor class to be used to edit values of
-     * a given target class.
+     * Registers an editor class to edit values of the given target class.
+     * If the editor class is {@code null},
+     * then any existing definition will be removed.
+     * Thus this method can be used to cancel the registration.
+     * The registration is canceled automatically
+     * if either the target or editor class is unloaded.
+     * <p>
+     * If there is a security manager, its {@code checkPropertiesAccess}
+     * method is called. This could result in a {@linkplain SecurityException}.
      *
-     * <p>First, if there is a security manager, its <code>checkPropertiesAccess</code>
-     * method is called. This could result in a SecurityException.
+     * @param targetType   the class object of the type to be edited
+     * @param editorClass  the class object of the editor class
+     * @throws SecurityException  if a security manager exists and
+     *                            its {@code checkPropertiesAccess} method
+     *                            doesn't allow setting of system properties
      *
-     * @param targetType the Class object of the type to be edited
-     * @param editorClass the Class object of the editor class.  If
-     *     this is null, then any existing definition will be removed.
-     * @exception  SecurityException  if a security manager exists and its
-     *             <code>checkPropertiesAccess</code> method doesn't allow setting
-     *              of system properties.
      * @see SecurityManager#checkPropertiesAccess
      */
-
-    public static void registerEditor(Class<?> targetType, Class<?> editorClass) {
+    public static synchronized void registerEditor(Class<?> targetType, Class<?> editorClass) {
         SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
             sm.checkPropertiesAccess();
         }
-        initialize();
-        if (editorClass == null) {
-            registry.remove(targetType);
-        } else {
-            registry.put(targetType, editorClass);
-        }
+        registry.put(targetType, editorClass);
     }
 
     /**
@@ -90,10 +89,8 @@
      * @return An editor object for the given target class.
      * The result is null if no suitable editor can be found.
      */
-
     public static synchronized PropertyEditor findEditor(Class<?> targetType) {
-        initialize();
-        Class editorClass = (Class)registry.get(targetType);
+        Class editorClass = registry.get(targetType);
         if (editorClass != null) {
             try {
                 Object o = editorClass.newInstance();
@@ -143,10 +140,7 @@
      *         e.g. Sun implementation initially sets to  {"sun.beans.editors"}.
      */
     public static synchronized String[] getEditorSearchPath() {
-        // Return a copy of the searchPath.
-        String result[] = new String[searchPath.length];
-        System.arraycopy(searchPath, 0, result, 0, searchPath.length);
-        return result;
+        return searchPath.clone();
     }
 
     /**
@@ -162,23 +156,22 @@
      *              of system properties.
      * @see SecurityManager#checkPropertiesAccess
      */
-
-    public static synchronized void setEditorSearchPath(String path[]) {
+    public static synchronized void setEditorSearchPath(String[] path) {
         SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
             sm.checkPropertiesAccess();
         }
-        if (path == null) {
-            path = new String[0];
-        }
-        searchPath = path;
+        searchPath = (path != null)
+                ? path.clone()
+                : EMPTY;
     }
 
-    private static synchronized void initialize() {
-        if (registry != null) {
-            return;
-        }
-        registry = new java.util.Hashtable();
+    private static String[] searchPath = { "sun.beans.editors" };
+    private static final String[] EMPTY = {};
+    private static final WeakCache<Class<?>, Class<?>> registry;
+
+    static {
+        registry = new WeakCache<Class<?>, Class<?>>();
         registry.put(Byte.TYPE, ByteEditor.class);
         registry.put(Short.TYPE, ShortEditor.class);
         registry.put(Integer.TYPE, IntegerEditor.class);
@@ -187,7 +180,4 @@
         registry.put(Float.TYPE, FloatEditor.class);
         registry.put(Double.TYPE, DoubleEditor.class);
     }
-
-    private static String[] searchPath = { "sun.beans.editors" };
-    private static java.util.Hashtable registry;
 }
--- a/jdk/src/share/classes/java/beans/PropertyEditorSupport.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/PropertyEditorSupport.java	Wed Sep 24 08:14:37 2008 -0700
@@ -233,11 +233,20 @@
     //----------------------------------------------------------------------
 
     /**
-     * Register a listener for the PropertyChange event.  The class will
-     * fire a PropertyChange value whenever the value is updated.
+     * Adds a listener for the value change.
+     * When the property editor changes its value
+     * it should fire a {@link PropertyChangeEvent}
+     * on all registered {@link PropertyChangeListener}s,
+     * specifying the {@code null} value for the property name.
+     * If the source property is set,
+     * it should be used as the source of the event.
+     * <p>
+     * The same listener object may be added more than once,
+     * and will be called as many times as it is added.
+     * If {@code listener} is {@code null},
+     * no exception is thrown and no action is taken.
      *
-     * @param listener  An object to be invoked when a PropertyChange
-     *          event is fired.
+     * @param listener  the {@link PropertyChangeListener} to add
      */
     public synchronized void addPropertyChangeListener(
                                 PropertyChangeListener listener) {
@@ -248,9 +257,14 @@
     }
 
     /**
-     * Remove a listener for the PropertyChange event.
+     * Removes a listener for the value change.
+     * <p>
+     * If the same listener was added more than once,
+     * it will be notified one less time after being removed.
+     * If {@code listener} is {@code null}, or was never added,
+     * no exception is thrown and no action is taken.
      *
-     * @param listener  The PropertyChange listener to be removed.
+     * @param listener  the {@link PropertyChangeListener} to remove
      */
     public synchronized void removePropertyChangeListener(
                                 PropertyChangeListener listener) {
--- a/jdk/src/share/classes/java/beans/VetoableChangeSupport.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/beans/VetoableChangeSupport.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1996-2008 Sun Microsystems, 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
@@ -34,12 +34,49 @@
 
 /**
  * This is a utility class that can be used by beans that support constrained
- * properties.  You can use an instance of this class as a member field
- * of your bean and delegate various work to it.
+ * properties.  It manages a list of listeners and dispatches
+ * {@link PropertyChangeEvent}s to them.  You can use an instance of this class
+ * as a member field of your bean and delegate these types of work to it.
+ * The {@link VetoableChangeListener} can be registered for all properties
+ * or for a property specified by name.
+ * <p>
+ * Here is an example of {@code VetoableChangeSupport} usage that follows
+ * the rules and recommendations laid out in the JavaBeans&trade; specification:
+ * <pre>
+ * public class MyBean {
+ *     private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);
  *
+ *     public void addVetoableChangeListener(VetoableChangeListener listener) {
+ *         this.vcs.addVetoableChangeListener(listener);
+ *     }
+ *
+ *     public void removeVetoableChangeListener(VetoableChangeListener listener) {
+ *         this.vcs.removeVetoableChangeListener(listener);
+ *     }
+ *
+ *     private String value;
+ *
+ *     public String getValue() {
+ *         return this.value;
+ *     }
+ *
+ *     public void setValue(String newValue) throws PropertyVetoException {
+ *         String oldValue = this.value;
+ *         this.vcs.fireVetoableChange("value", oldValue, newValue);
+ *         this.value = newValue;
+ *     }
+ *
+ *     [...]
+ * }
+ * </pre>
+ * <p>
+ * A {@code VetoableChangeSupport} instance is thread-safe.
+ * <p>
  * This class is serializable.  When it is serialized it will save
  * (and restore) any listeners that are themselves serializable.  Any
  * non-serializable listeners will be skipped during serialization.
+ *
+ * @see PropertyChangeSupport
  */
 public class VetoableChangeSupport implements Serializable {
     private VetoableChangeListenerMap map = new VetoableChangeListenerMap();
@@ -208,126 +245,149 @@
     }
 
     /**
-     * Report a vetoable property update to any registered listeners.  If
-     * anyone vetos the change, then fire a new event reverting everyone to
-     * the old value and then rethrow the PropertyVetoException.
+     * Reports a constrained property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
      * <p>
-     * No event is fired if old and new are equal and non-null.
+     * Any listener can throw a {@code PropertyVetoException} to veto the update.
+     * If one of the listeners vetoes the update, this method passes
+     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
+     * to all listeners that already confirmed this update
+     * and throws the {@code PropertyVetoException} again.
+     * <p>
+     * No event is fired if old and new values are equal and non-null.
+     * <p>
+     * This is merely a convenience wrapper around the more general
+     * {@link #fireVetoableChange(PropertyChangeEvent)} method.
      *
-     * @param propertyName  The programmatic name of the property
-     *          that is about to change..
-     * @param oldValue  The old value of the property.
-     * @param newValue  The new value of the property.
-     * @exception PropertyVetoException if the recipient wishes the property
-     *              change to be rolled back.
+     * @param propertyName  the programmatic name of the property that is about to change
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
+     * @throws PropertyVetoException if one of listeners vetoes the property update
      */
-    public void fireVetoableChange(String propertyName,
-                                        Object oldValue, Object newValue)
-                                        throws PropertyVetoException {
-        if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
-            return;
+    public void fireVetoableChange(String propertyName, Object oldValue, Object newValue)
+            throws PropertyVetoException {
+        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
+            fireVetoableChange(new PropertyChangeEvent(this.source, propertyName, oldValue, newValue));
         }
-        PropertyChangeEvent evt = new PropertyChangeEvent(source, propertyName,
-                                                            oldValue, newValue);
-        fireVetoableChange(evt);
     }
 
     /**
-     * Report a int vetoable property update to any registered listeners.
-     * No event is fired if old and new are equal.
+     * Reports an integer constrained property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
+     * <p>
+     * Any listener can throw a {@code PropertyVetoException} to veto the update.
+     * If one of the listeners vetoes the update, this method passes
+     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
+     * to all listeners that already confirmed this update
+     * and throws the {@code PropertyVetoException} again.
+     * <p>
+     * No event is fired if old and new values are equal.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * fireVetoableChange method that takes Object values.
+     * {@link #fireVetoableChange(String, Object, Object)} method.
      *
-     * @param propertyName  The programmatic name of the property
-     *          that is about to change.
-     * @param oldValue  The old value of the property.
-     * @param newValue  The new value of the property.
+     * @param propertyName  the programmatic name of the property that is about to change
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
+     * @throws PropertyVetoException if one of listeners vetoes the property update
      */
-    public void fireVetoableChange(String propertyName,
-                                        int oldValue, int newValue)
-                                        throws PropertyVetoException {
-        if (oldValue == newValue) {
-            return;
+    public void fireVetoableChange(String propertyName, int oldValue, int newValue)
+            throws PropertyVetoException {
+        if (oldValue != newValue) {
+            fireVetoableChange(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
         }
-        fireVetoableChange(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
     }
 
     /**
-     * Report a boolean vetoable property update to any registered listeners.
-     * No event is fired if old and new are equal.
+     * Reports a boolean constrained property update to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
+     * <p>
+     * Any listener can throw a {@code PropertyVetoException} to veto the update.
+     * If one of the listeners vetoes the update, this method passes
+     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
+     * to all listeners that already confirmed this update
+     * and throws the {@code PropertyVetoException} again.
+     * <p>
+     * No event is fired if old and new values are equal.
      * <p>
      * This is merely a convenience wrapper around the more general
-     * fireVetoableChange method that takes Object values.
+     * {@link #fireVetoableChange(String, Object, Object)} method.
      *
-     * @param propertyName  The programmatic name of the property
-     *          that is about to change.
-     * @param oldValue  The old value of the property.
-     * @param newValue  The new value of the property.
+     * @param propertyName  the programmatic name of the property that is about to change
+     * @param oldValue      the old value of the property
+     * @param newValue      the new value of the property
+     * @throws PropertyVetoException if one of listeners vetoes the property update
      */
-    public void fireVetoableChange(String propertyName,
-                                        boolean oldValue, boolean newValue)
-                                        throws PropertyVetoException {
-        if (oldValue == newValue) {
-            return;
+    public void fireVetoableChange(String propertyName, boolean oldValue, boolean newValue)
+            throws PropertyVetoException {
+        if (oldValue != newValue) {
+            fireVetoableChange(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
         }
-        fireVetoableChange(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
     }
 
     /**
-     * Fire a vetoable property update to any registered listeners.  If
-     * anyone vetos the change, then fire a new event reverting everyone to
-     * the old value and then rethrow the PropertyVetoException.
+     * Fires a property change event to listeners
+     * that have been registered to track updates of
+     * all properties or a property with the specified name.
      * <p>
-     * No event is fired if old and new are equal and non-null.
+     * Any listener can throw a {@code PropertyVetoException} to veto the update.
+     * If one of the listeners vetoes the update, this method passes
+     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
+     * to all listeners that already confirmed this update
+     * and throws the {@code PropertyVetoException} again.
+     * <p>
+     * No event is fired if the given event's old and new values are equal and non-null.
      *
-     * @param evt  The PropertyChangeEvent to be fired.
-     * @exception PropertyVetoException if the recipient wishes the property
-     *              change to be rolled back.
+     * @param event  the {@code PropertyChangeEvent} to be fired
+     * @throws PropertyVetoException if one of listeners vetoes the property update
      */
-    public void fireVetoableChange(PropertyChangeEvent evt)
-                                        throws PropertyVetoException {
+    public void fireVetoableChange(PropertyChangeEvent event)
+            throws PropertyVetoException {
+        Object oldValue = event.getOldValue();
+        Object newValue = event.getNewValue();
+        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
+            String name = event.getPropertyName();
 
-        Object oldValue = evt.getOldValue();
-        Object newValue = evt.getNewValue();
-        String propertyName = evt.getPropertyName();
-        if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
-            return;
-        }
-        VetoableChangeListener[] common = this.map.get(null);
-        VetoableChangeListener[] named = (propertyName != null)
-                    ? this.map.get(propertyName)
-                    : null;
-        fire(common, evt);
-        fire(named, evt);
-    }
+            VetoableChangeListener[] common = this.map.get(null);
+            VetoableChangeListener[] named = (name != null)
+                        ? this.map.get(name)
+                        : null;
 
-    private void fire(VetoableChangeListener[] listeners, PropertyChangeEvent event) throws PropertyVetoException {
-        if (listeners != null) {
-            VetoableChangeListener current = null;
-            try {
-                for (VetoableChangeListener listener : listeners) {
-                    current = listener;
-                    listener.vetoableChange(event);
-                }
-            } catch (PropertyVetoException veto) {
-                // Create an event to revert everyone to the old value.
-                event = new PropertyChangeEvent( this.source,
-                                                 event.getPropertyName(),
-                                                 event.getNewValue(),
-                                                 event.getOldValue() );
-                for (VetoableChangeListener listener : listeners) {
-                    if (current == listener) {
-                        break;
-                    }
-                    try {
-                        listener.vetoableChange(event);
-                    } catch (PropertyVetoException ex) {
-                         // We just ignore exceptions that occur during reversions.
+            VetoableChangeListener[] listeners;
+            if (common == null) {
+                listeners = named;
+            }
+            else if (named == null) {
+                listeners = common;
+            }
+            else {
+                listeners = new VetoableChangeListener[common.length + named.length];
+                System.arraycopy(common, 0, listeners, 0, common.length);
+                System.arraycopy(named, 0, listeners, common.length, named.length);
+            }
+            if (listeners != null) {
+                int current = 0;
+                try {
+                    while (current < listeners.length) {
+                        listeners[current].vetoableChange(event);
+                        current++;
                     }
                 }
-                // And now rethrow the PropertyVetoException.
-                throw veto;
+                catch (PropertyVetoException veto) {
+                    event = new PropertyChangeEvent(this.source, name, newValue, oldValue);
+                    for (int i = 0; i < current; i++) {
+                        try {
+                            listeners[i].vetoableChange(event);
+                        }
+                        catch (PropertyVetoException exception) {
+                            // ignore exceptions that occur during rolling back
+                        }
+                    }
+                    throw veto; // rethrow the veto exception
+                }
             }
         }
     }
--- a/jdk/src/share/classes/java/text/SimpleDateFormat.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/java/text/SimpleDateFormat.java	Wed Sep 24 08:14:37 2008 -0700
@@ -374,6 +374,24 @@
     private String pattern;
 
     /**
+     * Saved numberFormat and pattern.
+     * @see SimpleDateFormat#checkNegativeNumberExpression
+     */
+    transient private NumberFormat originalNumberFormat;
+    transient private String originalNumberPattern;
+
+    /**
+     * The minus sign to be used with format and parse.
+     */
+    transient private char minusSign = '-';
+
+    /**
+     * True when a negative sign follows a number.
+     * (True as default in Arabic.)
+     */
+    transient private boolean hasFollowingMinusSign = false;
+
+    /**
      * The compiled pattern.
      */
     transient private char[] compiledPattern;
@@ -1226,6 +1244,8 @@
      */
     public Date parse(String text, ParsePosition pos)
     {
+        checkNegativeNumberExpression();
+
         int start = pos.index;
         int oldStart = start;
         int textLength = text.length();
@@ -1271,14 +1291,42 @@
                 // digit text (e.g., "20010704") with a pattern which
                 // has no delimiters between fields, like "yyyyMMdd".
                 boolean obeyCount = false;
+
+                // In Arabic, a minus sign for a negative number is put after
+                // the number. Even in another locale, a minus sign can be
+                // put after a number using DateFormat.setNumberFormat().
+                // If both the minus sign and the field-delimiter are '-',
+                // subParse() needs to determine whether a '-' after a number
+                // in the given text is a delimiter or is a minus sign for the
+                // preceding number. We give subParse() a clue based on the
+                // information in compiledPattern.
+                boolean useFollowingMinusSignAsDelimiter = false;
+
                 if (i < compiledPattern.length) {
                     int nextTag = compiledPattern[i] >>> 8;
-                    if (!(nextTag == TAG_QUOTE_ASCII_CHAR || nextTag == TAG_QUOTE_CHARS)) {
+                    if (!(nextTag == TAG_QUOTE_ASCII_CHAR ||
+                          nextTag == TAG_QUOTE_CHARS)) {
                         obeyCount = true;
                     }
+
+                    if (hasFollowingMinusSign &&
+                        (nextTag == TAG_QUOTE_ASCII_CHAR ||
+                         nextTag == TAG_QUOTE_CHARS)) {
+                        int c;
+                        if (nextTag == TAG_QUOTE_ASCII_CHAR) {
+                            c = compiledPattern[i] & 0xff;
+                        } else {
+                            c = compiledPattern[i+1];
+                        }
+
+                        if (c == minusSign) {
+                            useFollowingMinusSignAsDelimiter = true;
+                        }
+                    }
                 }
                 start = subParse(text, start, tag, count, obeyCount,
-                                 ambiguousYear, pos);
+                                 ambiguousYear, pos,
+                                 useFollowingMinusSignAsDelimiter);
                 if (start < 0) {
                     pos.index = oldStart;
                     return null;
@@ -1482,10 +1530,13 @@
             // If the time zone matched uses the same name
             // (abbreviation) for both standard and daylight time,
             // let the time zone in the Calendar decide which one.
-            if (!useSameName) {
+            //
+            // Also if tz.getDSTSaving() returns 0 for DST, use tz to
+            // determine the local time. (6645292)
+            int dstAmount = (nameIndex >= 3) ? tz.getDSTSavings() : 0;
+            if (!(useSameName || (nameIndex >= 3 && dstAmount == 0))) {
                 calendar.set(Calendar.ZONE_OFFSET, tz.getRawOffset());
-                calendar.set(Calendar.DST_OFFSET,
-                             nameIndex >= 3 ? tz.getDSTSavings() : 0);
+                calendar.set(Calendar.DST_OFFSET, dstAmount);
             }
             return (start + zoneNames[nameIndex].length());
         }
@@ -1511,8 +1562,8 @@
      */
     private int subParse(String text, int start, int patternCharIndex, int count,
                          boolean obeyCount, boolean[] ambiguousYear,
-                         ParsePosition origPos)
-    {
+                         ParsePosition origPos,
+                         boolean useFollowingMinusSignAsDelimiter) {
         Number number = null;
         int value = 0;
         ParsePosition pos = new ParsePosition(0);
@@ -1537,10 +1588,10 @@
             // a number value.  We handle further, more generic cases below.  We need
             // to handle some of them here because some fields require extra processing on
             // the parsed value.
-            if (patternCharIndex == 4 /*HOUR_OF_DAY1_FIELD*/ ||
-                patternCharIndex == 15 /*HOUR1_FIELD*/ ||
-                (patternCharIndex == 2 /*MONTH_FIELD*/ && count <= 2) ||
-                patternCharIndex == 1) {
+            if (patternCharIndex == 4 /* HOUR_OF_DAY1_FIELD */ ||
+                patternCharIndex == 15 /* HOUR1_FIELD */ ||
+                (patternCharIndex == 2 /* MONTH_FIELD */ && count <= 2) ||
+                patternCharIndex == 1 /* YEAR_FIELD */) {
                 // It would be good to unify this with the obeyCount logic below,
                 // but that's going to be difficult.
                 if (obeyCount) {
@@ -1557,6 +1608,15 @@
                     }
                 } else {
                     value = number.intValue();
+
+                    if (useFollowingMinusSignAsDelimiter && (value < 0) &&
+                        (((pos.index < text.length()) &&
+                         (text.charAt(pos.index) != minusSign)) ||
+                         ((pos.index == text.length()) &&
+                          (text.charAt(pos.index-1) == minusSign)))) {
+                        value = -value;
+                        pos.index--;
+                    }
                 }
             }
 
@@ -1888,7 +1948,18 @@
                     number = numberFormat.parse(text, pos);
                 }
                 if (number != null) {
-                    calendar.set(field, number.intValue());
+                    value = number.intValue();
+
+                    if (useFollowingMinusSignAsDelimiter && (value < 0) &&
+                        (((pos.index < text.length()) &&
+                         (text.charAt(pos.index) != minusSign)) ||
+                         ((pos.index == text.length()) &&
+                          (text.charAt(pos.index-1) == minusSign)))) {
+                        value = -value;
+                        pos.index--;
+                    }
+
+                    calendar.set(field, value);
                     return pos.index;
                 }
                 break parsing;
@@ -2099,4 +2170,33 @@
             }
         }
     }
+
+    /**
+     * Analyze the negative subpattern of DecimalFormat and set/update values
+     * as necessary.
+     */
+    private void checkNegativeNumberExpression() {
+        if ((numberFormat instanceof DecimalFormat) &&
+            !numberFormat.equals(originalNumberFormat)) {
+            String numberPattern = ((DecimalFormat)numberFormat).toPattern();
+            if (!numberPattern.equals(originalNumberPattern)) {
+                hasFollowingMinusSign = false;
+
+                int separatorIndex = numberPattern.indexOf(';');
+                // If the negative subpattern is not absent, we have to analayze
+                // it in order to check if it has a following minus sign.
+                if (separatorIndex > -1) {
+                    int minusIndex = numberPattern.indexOf('-', separatorIndex);
+                    if ((minusIndex > numberPattern.lastIndexOf('0')) &&
+                        (minusIndex > numberPattern.lastIndexOf('#'))) {
+                        hasFollowingMinusSign = true;
+                        minusSign = ((DecimalFormat)numberFormat).getDecimalFormatSymbols().getMinusSign();
+                    }
+                }
+                originalNumberPattern = numberPattern;
+            }
+            originalNumberFormat = numberFormat;
+        }
+    }
+
 }
--- a/jdk/src/share/classes/javax/swing/AbstractButton.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/AbstractButton.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1315,8 +1315,7 @@
             // Make sure the change actually took effect
             if (!selected && isSelected()) {
                 if (getModel() instanceof DefaultButtonModel) {
-                    ButtonGroup group = (ButtonGroup)
-                            ((DefaultButtonModel)getModel()).getGroup();
+                    ButtonGroup group = ((DefaultButtonModel)getModel()).getGroup();
                     if (group != null) {
                         group.clearSelection();
                     }
@@ -1886,8 +1885,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])(listenerList.getListeners(
-            ChangeListener.class));
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
@@ -1944,8 +1942,7 @@
      * @since 1.4
      */
     public ActionListener[] getActionListeners() {
-        return (ActionListener[])(listenerList.getListeners(
-            ActionListener.class));
+        return listenerList.getListeners(ActionListener.class);
     }
 
     /**
@@ -2137,7 +2134,7 @@
      * @since 1.4
      */
     public ItemListener[] getItemListeners() {
-        return (ItemListener[])listenerList.getListeners(ItemListener.class);
+        return listenerList.getListeners(ItemListener.class);
     }
 
    /**
@@ -2981,7 +2978,7 @@
             paintViewR.height = AbstractButton.this.getHeight() - (paintViewInsets.top + paintViewInsets.bottom);
 
             String clippedText = SwingUtilities.layoutCompoundLabel(
-                (JComponent)AbstractButton.this,
+                AbstractButton.this,
                 getFontMetrics(getFont()),
                 text,
                 icon,
--- a/jdk/src/share/classes/javax/swing/AbstractCellEditor.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/AbstractCellEditor.java	Wed Sep 24 08:14:37 2008 -0700
@@ -118,8 +118,7 @@
      * @since 1.4
      */
     public CellEditorListener[] getCellEditorListeners() {
-        return (CellEditorListener[])listenerList.getListeners(
-                CellEditorListener.class);
+        return listenerList.getListeners(CellEditorListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/AbstractListModel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/AbstractListModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -85,8 +85,7 @@
      * @since 1.4
      */
     public ListDataListener[] getListDataListeners() {
-        return (ListDataListener[])listenerList.getListeners(
-                ListDataListener.class);
+        return listenerList.getListeners(ListDataListener.class);
     }
 
 
--- a/jdk/src/share/classes/javax/swing/AbstractSpinnerModel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/AbstractSpinnerModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -98,8 +98,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
 
--- a/jdk/src/share/classes/javax/swing/ActionMap.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/ActionMap.java	Wed Sep 24 08:14:37 2008 -0700
@@ -197,7 +197,7 @@
             return pKeys;
         }
 
-        HashMap        keyMap = new HashMap();
+        HashMap<Object, Object> keyMap = new HashMap<Object, Object>();
         int            counter;
 
         for (counter = keys.length - 1; counter >= 0; counter--) {
--- a/jdk/src/share/classes/javax/swing/AncestorNotifier.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/AncestorNotifier.java	Wed Sep 24 08:14:37 2008 -0700
@@ -62,7 +62,7 @@
     }
 
     AncestorListener[] getAncestorListeners() {
-        return (AncestorListener[])listenerList.getListeners(AncestorListener.class);
+        return listenerList.getListeners(AncestorListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/ArrayTable.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/ArrayTable.java	Wed Sep 24 08:14:37 2008 -0700
@@ -88,10 +88,10 @@
             // Write ou the Serializable key/value pairs.
             s.writeInt(validCount);
             if (validCount > 0) {
-                for (int counter = 0; counter < keys.length; counter++) {
-                    if (keys[counter] != null) {
-                        s.writeObject(keys[counter]);
-                        s.writeObject(table.get(keys[counter]));
+                for (Object key : keys) {
+                    if (key != null) {
+                        s.writeObject(key);
+                        s.writeObject(table.get(key));
                         if (--validCount == 0) {
                             break;
                         }
@@ -315,7 +315,7 @@
      */
     private void grow() {
         Object[] array = (Object[])table;
-        Hashtable tmp = new Hashtable(array.length/2);
+        Hashtable<Object, Object> tmp = new Hashtable<Object, Object>(array.length/2);
         for (int i = 0; i<array.length; i+=2) {
             tmp.put(array[i], array[i+1]);
         }
--- a/jdk/src/share/classes/javax/swing/ButtonGroup.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/ButtonGroup.java	Wed Sep 24 08:14:37 2008 -0700
@@ -68,7 +68,7 @@
 public class ButtonGroup implements Serializable {
 
     // the list of buttons participating in this group
-    protected Vector<AbstractButton> buttons = new Vector();
+    protected Vector<AbstractButton> buttons = new Vector<AbstractButton>();
 
     /**
      * The current selection.
--- a/jdk/src/share/classes/javax/swing/DebugGraphicsInfo.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/DebugGraphicsInfo.java	Wed Sep 24 08:14:37 2008 -0700
@@ -37,7 +37,7 @@
     Color                flashColor = Color.red;
     int                  flashTime = 100;
     int                  flashCount = 2;
-    Hashtable            componentToDebug;
+    Hashtable<JComponent, Integer> componentToDebug;
     JFrame               debugFrame = null;
     java.io.PrintStream  stream = System.out;
 
@@ -46,7 +46,7 @@
             return;
         }
         if (componentToDebug == null) {
-            componentToDebug = new Hashtable();
+            componentToDebug = new Hashtable<JComponent, Integer>();
         }
         if (debug > 0) {
             componentToDebug.put(component, Integer.valueOf(debug));
@@ -59,7 +59,7 @@
         if (componentToDebug == null) {
             return 0;
         } else {
-            Integer integer = (Integer)componentToDebug.get(component);
+            Integer integer = componentToDebug.get(component);
 
             return integer == null ? 0 : integer.intValue();
         }
--- a/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -343,8 +343,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
 
--- a/jdk/src/share/classes/javax/swing/DefaultButtonModel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/DefaultButtonModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -326,8 +326,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
@@ -380,8 +379,7 @@
      * @since 1.4
      */
     public ActionListener[] getActionListeners() {
-        return (ActionListener[])listenerList.getListeners(
-                ActionListener.class);
+        return listenerList.getListeners(ActionListener.class);
     }
 
     /**
@@ -434,7 +432,7 @@
      * @since 1.4
      */
     public ItemListener[] getItemListeners() {
-        return (ItemListener[])listenerList.getListeners(ItemListener.class);
+        return listenerList.getListeners(ItemListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/DefaultFocusManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/DefaultFocusManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -156,18 +156,17 @@
     }
 }
 
-final class CompareTabOrderComparator implements Comparator {
+final class CompareTabOrderComparator implements Comparator<Component> {
     private final DefaultFocusManager defaultFocusManager;
 
     CompareTabOrderComparator(DefaultFocusManager defaultFocusManager) {
         this.defaultFocusManager = defaultFocusManager;
     }
 
-    public int compare(Object o1, Object o2) {
+    public int compare(Component o1, Component o2) {
         if (o1 == o2) {
             return 0;
         }
-        return (defaultFocusManager.compareTabOrder((Component)o1,
-                                                    (Component)o2)) ? -1 : 1;
+        return (defaultFocusManager.compareTabOrder(o1, o2)) ? -1 : 1;
     }
 }
--- a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -133,8 +133,7 @@
      * @since 1.4
      */
     public ListSelectionListener[] getListSelectionListeners() {
-        return (ListSelectionListener[])listenerList.getListeners(
-                ListSelectionListener.class);
+        return listenerList.getListeners(ListSelectionListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -110,8 +110,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/GroupLayout.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/GroupLayout.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1119,7 +1119,7 @@
      * creating one if necessary.
      */
     private ComponentInfo getComponentInfo(Component component) {
-        ComponentInfo info = (ComponentInfo)componentInfos.get(component);
+        ComponentInfo info = componentInfos.get(component);
         if (info == null) {
             info = new ComponentInfo(component);
             componentInfos.put(component, info);
@@ -1698,7 +1698,7 @@
             for (int counter = springs.size() - 1; counter >= 0; counter--) {
                 Spring spring = springs.get(counter);
                 if (spring instanceof AutoPreferredGapSpring) {
-                    ((AutoPreferredGapSpring)spring).unset();
+                    spring.unset();
                 } else if (spring instanceof Group) {
                     ((Group)spring).unsetAutopadding();
                 }
--- a/jdk/src/share/classes/javax/swing/InputMap.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/InputMap.java	Wed Sep 24 08:14:37 2008 -0700
@@ -200,7 +200,7 @@
             return pKeys;
         }
 
-        HashMap        keyMap = new HashMap();
+        HashMap<KeyStroke, KeyStroke> keyMap = new HashMap<KeyStroke, KeyStroke>();
         int            counter;
 
         for (counter = keys.length - 1; counter >= 0; counter--) {
@@ -212,7 +212,7 @@
 
         KeyStroke[]    allKeys = new KeyStroke[keyMap.size()];
 
-        return (KeyStroke[])keyMap.keySet().toArray(allKeys);
+        return keyMap.keySet().toArray(allKeys);
     }
 
     private void writeObject(ObjectOutputStream s) throws IOException {
--- a/jdk/src/share/classes/javax/swing/JApplet.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JApplet.java	Wed Sep 24 08:14:37 2008 -0700
@@ -131,10 +131,7 @@
         // Check the timerQ and restart if necessary.
         TimerQueue q = TimerQueue.sharedInstance();
         if(q != null) {
-            synchronized(q) {
-                if(!q.running)
-                    q.start();
-            }
+            q.startIfNeeded();
         }
 
         /* Workaround for bug 4155072.  The shared double buffer image
--- a/jdk/src/share/classes/javax/swing/JComboBox.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JComboBox.java	Wed Sep 24 08:14:37 2008 -0700
@@ -859,7 +859,7 @@
      * @since 1.4
      */
     public ItemListener[] getItemListeners() {
-        return (ItemListener[])listenerList.getListeners(ItemListener.class);
+        return listenerList.getListeners(ItemListener.class);
     }
 
     /**
@@ -897,8 +897,7 @@
      * @since 1.4
      */
     public ActionListener[] getActionListeners() {
-        return (ActionListener[])listenerList.getListeners(
-                ActionListener.class);
+        return listenerList.getListeners(ActionListener.class);
     }
 
     /**
@@ -937,8 +936,7 @@
      * @since 1.4
      */
     public PopupMenuListener[] getPopupMenuListeners() {
-        return (PopupMenuListener[])listenerList.getListeners(
-                PopupMenuListener.class);
+        return listenerList.getListeners(PopupMenuListener.class);
     }
 
     /**
@@ -1668,7 +1666,7 @@
             if (editor != null) {
                 Component comp = editor.getEditorComponent();
                 if (comp instanceof Accessible) {
-                    AccessibleContext ac = ((Accessible)comp).getAccessibleContext();
+                    AccessibleContext ac = comp.getAccessibleContext();
                     if (ac != null) { // may be null
                         ac.setAccessibleName(getAccessibleName());
                         ac.setAccessibleDescription(getAccessibleDescription());
@@ -1741,7 +1739,7 @@
 
                 // Fire a FOCUSED lost PropertyChangeEvent for the
                 // previously selected list item.
-                PropertyChangeEvent pce = null;
+                PropertyChangeEvent pce;
 
                 if (previousSelectedAccessible != null) {
                     pce = new PropertyChangeEvent(previousSelectedAccessible,
--- a/jdk/src/share/classes/javax/swing/JComponent.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JComponent.java	Wed Sep 24 08:14:37 2008 -0700
@@ -192,7 +192,8 @@
     /**
      * @see #readObject
      */
-    private static final Hashtable readObjectCallbacks = new Hashtable(1);
+    private static final Hashtable<ObjectInputStream, ReadObjectCallback> readObjectCallbacks =
+            new Hashtable<ObjectInputStream, ReadObjectCallback>(1);
 
     /**
      * Keys to use for forward focus traversal when the JComponent is
@@ -356,7 +357,7 @@
     /**
      * Temporary rectangles.
      */
-    private static java.util.List tempRectangles = new java.util.ArrayList(11);
+    private static java.util.List<Rectangle> tempRectangles = new java.util.ArrayList<Rectangle>(11);
 
     /** Used for <code>WHEN_FOCUSED</code> bindings. */
     private InputMap focusInputMap;
@@ -451,7 +452,7 @@
             Rectangle rect;
             int size = tempRectangles.size();
             if (size > 0) {
-                rect = (Rectangle)tempRectangles.remove(size - 1);
+                rect = tempRectangles.remove(size - 1);
             }
             else {
                 rect = new Rectangle(0, 0, 0, 0);
@@ -806,7 +807,7 @@
             // its index.
             if (paintingChild != null &&
                 (paintingChild instanceof JComponent) &&
-                ((JComponent)paintingChild).isOpaque()) {
+                paintingChild.isOpaque()) {
                 for (; i >= 0; i--) {
                     if (getComponent(i) == paintingChild){
                         break;
@@ -875,7 +876,7 @@
                                     shouldSetFlagBack = true;
                                 }
                                 if(!printing) {
-                                    ((JComponent)comp).paint(cg);
+                                    comp.paint(cg);
                                 }
                                 else {
                                     if (!getFlag(IS_PRINTING_ALL)) {
@@ -1098,7 +1099,7 @@
     }
 
     private void adjustPaintFlags() {
-        JComponent jparent = null;
+        JComponent jparent;
         Container parent;
         for(parent = getParent() ; parent != null ; parent =
             parent.getParent()) {
@@ -2096,7 +2097,7 @@
     private void registerWithKeyboardManager(boolean onlyIfNew) {
         InputMap inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW, false);
         KeyStroke[] strokes;
-        Hashtable registered = (Hashtable)getClientProperty
+        Hashtable<KeyStroke, KeyStroke> registered = (Hashtable)getClientProperty
                                 (WHEN_IN_FOCUSED_WINDOW_BINDINGS);
 
         if (inputMap != null) {
@@ -2120,10 +2121,10 @@
         }
         // Remove any old ones.
         if (registered != null && registered.size() > 0) {
-            Enumeration keys = registered.keys();
+            Enumeration<KeyStroke> keys = registered.keys();
 
             while (keys.hasMoreElements()) {
-                KeyStroke ks = (KeyStroke)keys.nextElement();
+                KeyStroke ks = keys.nextElement();
                 unregisterWithKeyboardManager(ks);
             }
             registered.clear();
@@ -2131,7 +2132,7 @@
         // Updated the registered Hashtable.
         if (strokes != null && strokes.length > 0) {
             if (registered == null) {
-                registered = new Hashtable(strokes.length);
+                registered = new Hashtable<KeyStroke, KeyStroke>(strokes.length);
                 putClientProperty(WHEN_IN_FOCUSED_WINDOW_BINDINGS, registered);
             }
             for (int counter = strokes.length - 1; counter >= 0; counter--) {
@@ -2174,7 +2175,7 @@
         InputMap km = getInputMap(WHEN_IN_FOCUSED_WINDOW, false);
 
         while (km != inputMap && km != null) {
-            km = (ComponentInputMap)km.getParent();
+            km = km.getParent();
         }
         if (km != null) {
             registerWithKeyboardManager(false);
@@ -3673,7 +3674,7 @@
                 if (c != null && c instanceof Accessible) {
                     AccessibleJComponent.this.firePropertyChange(
                         AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
-                        null, ((Accessible) c).getAccessibleContext());
+                        null, c.getAccessibleContext());
                 }
             }
             public void componentRemoved(ContainerEvent e) {
@@ -3681,7 +3682,7 @@
                 if (c != null && c instanceof Accessible) {
                     AccessibleJComponent.this.firePropertyChange(
                         AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
-                        ((Accessible) c).getAccessibleContext(), null);
+                        c.getAccessibleContext(), null);
                 }
             }
         }
@@ -4377,7 +4378,7 @@
 //                  System.out.println("A) checking opaque: " + ((JComponent)child).isOpaque() + "  " + child);
 //                  System.out.print("B) ");
 //                  Thread.dumpStack();
-                    return ((JComponent)child).isOpaque();
+                    return child.isOpaque();
                 } else {
                     /** Sometimes a heavy weight can have a bound larger than its peer size
                      *  so we should always draw under heavy weights
@@ -4693,7 +4694,7 @@
             result = (T[])getPropertyChangeListeners();
         }
         else {
-            result = (T[])listenerList.getListeners(listenerType);
+            result = listenerList.getListeners(listenerType);
         }
 
         if (result.length == 0) {
@@ -4904,7 +4905,7 @@
         if(!isShowing()) {
             return;
         }
-        while(!((JComponent)c).isOpaque()) {
+        while(!c.isOpaque()) {
             parent = c.getParent();
             if(parent != null) {
                 x += c.getX();
@@ -5198,7 +5199,7 @@
             Rectangle siblingRect;
             boolean opaque;
             if (sibling instanceof JComponent) {
-                opaque = ((JComponent)sibling).isOpaque();
+                opaque = sibling.isOpaque();
                 if (!opaque) {
                     if (retValue == PARTIALLY_OBSCURED) {
                         continue;
@@ -5345,7 +5346,7 @@
      */
     private class ReadObjectCallback implements ObjectInputValidation
     {
-        private final Vector roots = new Vector(1);
+        private final Vector<JComponent> roots = new Vector<JComponent>(1);
         private final ObjectInputStream inputStream;
 
         ReadObjectCallback(ObjectInputStream s) throws Exception {
@@ -5361,8 +5362,7 @@
          */
         public void validateObject() throws InvalidObjectException {
             try {
-                for(int i = 0; i < roots.size(); i++) {
-                    JComponent root = (JComponent)(roots.elementAt(i));
+                for (JComponent root : roots) {
                     SwingUtilities.updateComponentTreeUI(root);
                 }
             }
@@ -5382,8 +5382,7 @@
             /* If the Component c is a descendant of one of the
              * existing roots (or it IS an existing root), we're done.
              */
-            for(int i = 0; i < roots.size(); i++) {
-                JComponent root = (JComponent)roots.elementAt(i);
+            for (JComponent root : roots) {
                 for(Component p = c; p != null; p = p.getParent()) {
                     if (p == root) {
                         return;
@@ -5396,7 +5395,7 @@
              * to the roots vector.
              */
             for(int i = 0; i < roots.size(); i++) {
-                JComponent root = (JComponent)roots.elementAt(i);
+                JComponent root = roots.elementAt(i);
                 for(Component p = root.getParent(); p != null; p = p.getParent()) {
                     if (p == c) {
                         roots.removeElementAt(i--); // !!
@@ -5428,7 +5427,7 @@
          * in the readObjectCallbacks table.  Note that the ReadObjectCallback
          * constructor takes care of calling s.registerValidation().
          */
-        ReadObjectCallback cb = (ReadObjectCallback)(readObjectCallbacks.get(s));
+        ReadObjectCallback cb = readObjectCallbacks.get(s);
         if (cb == null) {
             try {
                 readObjectCallbacks.put(s, cb = new ReadObjectCallback(s));
--- a/jdk/src/share/classes/javax/swing/JDesktopPane.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JDesktopPane.java	Wed Sep 24 08:14:37 2008 -0700
@@ -133,8 +133,8 @@
             public Component getDefaultComponent(Container c) {
                 JInternalFrame jifArray[] = getAllFrames();
                 Component comp = null;
-                for (int i = 0; i < jifArray.length; i++) {
-                    comp = jifArray[i].getFocusTraversalPolicy().getDefaultComponent(jifArray[i]);
+                for (JInternalFrame jif : jifArray) {
+                    comp = jif.getFocusTraversalPolicy().getDefaultComponent(jif);
                     if (comp != null) {
                         break;
                     }
@@ -262,16 +262,15 @@
     public JInternalFrame[] getAllFrames() {
         int i, count;
         JInternalFrame[] results;
-        Vector vResults = new Vector(10);
-        Object next, tmp;
+        Vector<JInternalFrame> vResults = new Vector<JInternalFrame>(10);
 
         count = getComponentCount();
         for(i = 0; i < count; i++) {
-            next = getComponent(i);
+            Component next = getComponent(i);
             if(next instanceof JInternalFrame)
-                vResults.addElement(next);
+                vResults.addElement((JInternalFrame) next);
             else if(next instanceof JInternalFrame.JDesktopIcon)  {
-                tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame();
+                JInternalFrame tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame();
                 if(tmp != null)
                     vResults.addElement(tmp);
             }
@@ -324,18 +323,17 @@
     public JInternalFrame[] getAllFramesInLayer(int layer) {
         int i, count;
         JInternalFrame[] results;
-        Vector vResults = new Vector(10);
-        Object next, tmp;
+        Vector<JInternalFrame> vResults = new Vector<JInternalFrame>(10);
 
         count = getComponentCount();
         for(i = 0; i < count; i++) {
-            next = getComponent(i);
+            Component next = getComponent(i);
             if(next instanceof JInternalFrame) {
                 if(((JInternalFrame)next).getLayer() == layer)
-                    vResults.addElement(next);
+                    vResults.addElement((JInternalFrame) next);
             } else if(next instanceof JInternalFrame.JDesktopIcon)  {
-                tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame();
-                if(tmp != null && ((JInternalFrame)tmp).getLayer() == layer)
+                JInternalFrame tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame();
+                if(tmp != null && tmp.getLayer() == layer)
                     vResults.addElement(tmp);
             }
         }
--- a/jdk/src/share/classes/javax/swing/JDialog.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JDialog.java	Wed Sep 24 08:14:37 2008 -0700
@@ -277,7 +277,7 @@
               title, modal);
         if (owner == null) {
             WindowListener ownerShutdownListener =
-                (WindowListener)SwingUtilities.getSharedOwnerFrameShutdownListener();
+                    SwingUtilities.getSharedOwnerFrameShutdownListener();
             addWindowListener(ownerShutdownListener);
         }
         dialogInit();
@@ -329,7 +329,7 @@
               title, modal, gc);
         if (owner == null) {
             WindowListener ownerShutdownListener =
-                (WindowListener)SwingUtilities.getSharedOwnerFrameShutdownListener();
+                    SwingUtilities.getSharedOwnerFrameShutdownListener();
             addWindowListener(ownerShutdownListener);
         }
         dialogInit();
--- a/jdk/src/share/classes/javax/swing/JEditorPane.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JEditorPane.java	Wed Sep 24 08:14:37 2008 -0700
@@ -319,8 +319,7 @@
      * @since 1.4
      */
     public synchronized HyperlinkListener[] getHyperlinkListeners() {
-        return (HyperlinkListener[])listenerList.getListeners(
-                HyperlinkListener.class);
+        return listenerList.getListeners(javax.swing.event.HyperlinkListener.class);
     }
 
     /**
@@ -492,8 +491,8 @@
         if (pageProperties != null) {
             // transfer properties discovered in stream to the
             // document property collection.
-            for (Enumeration e = pageProperties.keys(); e.hasMoreElements() ;) {
-                Object key = e.nextElement();
+            for (Enumeration<String> e = pageProperties.keys(); e.hasMoreElements() ;) {
+                String key = e.nextElement();
                 doc.putProperty(key, pageProperties.get(key));
             }
             pageProperties.clear();
@@ -775,7 +774,7 @@
      */
     private void handleConnectionProperties(URLConnection conn) {
         if (pageProperties == null) {
-            pageProperties = new Hashtable();
+            pageProperties = new Hashtable<String, Object>();
         }
         String type = conn.getContentType();
         if (type != null) {
@@ -989,7 +988,7 @@
      * of the content type in the http header information.
      */
     private void setCharsetFromContentTypeParameters(String paramlist) {
-        String charset = null;
+        String charset;
         try {
             // paramlist is handed to us with a leading ';', strip it.
             int semi = paramlist.indexOf(';');
@@ -1080,9 +1079,9 @@
      */
     public EditorKit getEditorKitForContentType(String type) {
         if (typeHandlers == null) {
-            typeHandlers = new Hashtable(3);
+            typeHandlers = new Hashtable<String, EditorKit>(3);
         }
-        EditorKit k = (EditorKit) typeHandlers.get(type);
+        EditorKit k = typeHandlers.get(type);
         if (k == null) {
             k = createEditorKitForContentType(type);
             if (k != null) {
@@ -1106,7 +1105,7 @@
      */
     public void setEditorKitForContentType(String type, EditorKit k) {
         if (typeHandlers == null) {
-            typeHandlers = new Hashtable(3);
+            typeHandlers = new Hashtable<String, EditorKit>(3);
         }
         typeHandlers.put(type, k);
     }
@@ -1176,13 +1175,12 @@
      *   registered for the given type
      */
     public static EditorKit createEditorKitForContentType(String type) {
-        EditorKit k = null;
-        Hashtable kitRegistry = getKitRegisty();
-        k = (EditorKit) kitRegistry.get(type);
+        Hashtable<String, EditorKit> kitRegistry = getKitRegisty();
+        EditorKit k = kitRegistry.get(type);
         if (k == null) {
             // try to dynamically load the support
-            String classname = (String) getKitTypeRegistry().get(type);
-            ClassLoader loader = (ClassLoader) getKitLoaderRegistry().get(type);
+            String classname = getKitTypeRegistry().get(type);
+            ClassLoader loader = getKitLoaderRegistry().get(type);
             try {
                 Class c;
                 if (loader != null) {
@@ -1252,20 +1250,20 @@
      * @since 1.3
      */
     public static String getEditorKitClassNameForContentType(String type) {
-        return (String)getKitTypeRegistry().get(type);
+        return getKitTypeRegistry().get(type);
     }
 
-    private static Hashtable getKitTypeRegistry() {
+    private static Hashtable<String, String> getKitTypeRegistry() {
         loadDefaultKitsIfNecessary();
         return (Hashtable)SwingUtilities.appContextGet(kitTypeRegistryKey);
     }
 
-    private static Hashtable getKitLoaderRegistry() {
+    private static Hashtable<String, ClassLoader> getKitLoaderRegistry() {
         loadDefaultKitsIfNecessary();
         return (Hashtable)SwingUtilities.appContextGet(kitLoaderRegistryKey);
     }
 
-    private static Hashtable getKitRegisty() {
+    private static Hashtable<String, EditorKit> getKitRegisty() {
         Hashtable ht = (Hashtable)SwingUtilities.appContextGet(kitRegistryKey);
         if (ht == null) {
             ht = new Hashtable(3);
@@ -1512,7 +1510,7 @@
     private EditorKit kit;
     private boolean isUserSetEditorKit;
 
-    private Hashtable pageProperties;
+    private Hashtable<String, Object> pageProperties;
 
     /** Should be kept in sync with javax.swing.text.html.FormView counterpart. */
     final static String PostDataProperty = "javax.swing.JEditorPane.postdata";
@@ -1520,7 +1518,7 @@
     /**
      * Table of registered type handlers for this editor.
      */
-    private Hashtable typeHandlers;
+    private Hashtable<String, EditorKit> typeHandlers;
 
     /*
      * Private AppContext keys for this class's static variables.
@@ -1913,11 +1911,11 @@
             }
         }
 
-        private class LinkVector extends Vector {
+        private class LinkVector extends Vector<HTMLLink> {
             public int baseElementIndex(Element e) {
                 HTMLLink l;
                 for (int i = 0; i < elementCount; i++) {
-                    l = (HTMLLink) elementAt(i);
+                    l = elementAt(i);
                     if (l.element == e) {
                         return i;
                     }
@@ -2029,7 +2027,7 @@
                 buildLinkTable();
             }
             if (linkIndex >= 0 && linkIndex < hyperlinks.size()) {
-                return (AccessibleHyperlink) hyperlinks.elementAt(linkIndex);
+                return hyperlinks.elementAt(linkIndex);
             } else {
                 return null;
             }
--- a/jdk/src/share/classes/javax/swing/JFileChooser.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JFileChooser.java	Wed Sep 24 08:14:37 2008 -0700
@@ -248,7 +248,7 @@
     private String approveButtonToolTipText = null;
     private int approveButtonMnemonic = 0;
 
-    private Vector filters = new Vector(5);
+    private Vector<FileFilter> filters = new Vector<FileFilter>(5);
     private JDialog dialog = null;
     private int dialogType = OPEN_DIALOG;
     private int returnValue = ERROR_OPTION;
@@ -503,7 +503,7 @@
         if(selectedFiles == null) {
             return new File[0];
         } else {
-            return (File[]) selectedFiles.clone();
+            return selectedFiles.clone();
         }
     }
 
@@ -1415,17 +1415,17 @@
         fileFilter = filter;
         if (filter != null) {
             if (isMultiSelectionEnabled() && selectedFiles != null && selectedFiles.length > 0) {
-                Vector fList = new Vector();
+                Vector<File> fList = new Vector<File>();
                 boolean failed = false;
-                for (int i = 0; i < selectedFiles.length; i++) {
-                    if (filter.accept(selectedFiles[i])) {
-                        fList.add(selectedFiles[i]);
+                for (File file : selectedFiles) {
+                    if (filter.accept(file)) {
+                        fList.add(file);
                     } else {
                         failed = true;
                     }
                 }
                 if (failed) {
-                    setSelectedFiles((fList.size() == 0) ? null : (File[])fList.toArray(new File[fList.size()]));
+                    setSelectedFiles((fList.size() == 0) ? null : fList.toArray(new File[fList.size()]));
                 }
             } else if (selectedFile != null && !filter.accept(selectedFile)) {
                 setSelectedFile(null);
@@ -1702,8 +1702,7 @@
      * @since 1.4
      */
     public ActionListener[] getActionListeners() {
-        return (ActionListener[])listenerList.getListeners(
-                ActionListener.class);
+        return listenerList.getListeners(ActionListener.class);
     }
 
     /**
@@ -1744,7 +1743,7 @@
         WeakReference<JFileChooser> jfcRef;
 
         public WeakPCL(JFileChooser jfc) {
-            jfcRef = new WeakReference(jfc);
+            jfcRef = new WeakReference<JFileChooser>(jfc);
         }
         public void propertyChange(PropertyChangeEvent ev) {
             assert ev.getPropertyName().equals(SHOW_HIDDEN_PROP);
--- a/jdk/src/share/classes/javax/swing/JInternalFrame.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JInternalFrame.java	Wed Sep 24 08:14:37 2008 -0700
@@ -421,8 +421,8 @@
         invalidate();
         Component[] children = getComponents();
         if (children != null) {
-            for(int i = 0; i < children.length; i++) {
-                SwingUtilities.updateComponentTreeUI(children[i]);
+            for (Component child : children) {
+                SwingUtilities.updateComponentTreeUI(child);
             }
         }
     }
@@ -1535,8 +1535,7 @@
      * @see #addInternalFrameListener
      */
     public InternalFrameListener[] getInternalFrameListeners() {
-        return (InternalFrameListener[])listenerList.getListeners(
-                InternalFrameListener.class);
+        return listenerList.getListeners(InternalFrameListener.class);
     }
 
     // remind: name ok? all one method ok? need to be synchronized?
@@ -2258,8 +2257,8 @@
             invalidate();
             Component[] children = getComponents();
             if (children != null) {
-                for(int i = 0; i < children.length; i++) {
-                    SwingUtilities.updateComponentTreeUI(children[i]);
+                for (Component child : children) {
+                    SwingUtilities.updateComponentTreeUI(child);
                 }
             }
         }
--- a/jdk/src/share/classes/javax/swing/JLayeredPane.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JLayeredPane.java	Wed Sep 24 08:14:37 2008 -0700
@@ -191,7 +191,7 @@
     private void validateOptimizedDrawing() {
         boolean layeredComponentFound = false;
         synchronized(getTreeLock()) {
-            Integer layer = null;
+            Integer layer;
 
             for (Component c : getComponents()) {
                 layer = null;
@@ -213,7 +213,7 @@
     }
 
     protected void addImpl(Component comp, Object constraints, int index) {
-        int layer = DEFAULT_LAYER.intValue();
+        int layer;
         int pos;
 
         if(constraints instanceof Integer) {
@@ -364,7 +364,7 @@
         if(c instanceof JComponent)
             ((JComponent)c).putClientProperty(LAYER_PROPERTY, layerObj);
         else
-            getComponentToLayer().put((Component)c, layerObj);
+            getComponentToLayer().put(c, layerObj);
 
         if(c.getParent() == null || c.getParent() != this) {
             repaint(c.getBounds());
@@ -388,7 +388,7 @@
         if(c instanceof JComponent)
             i = (Integer)((JComponent)c).getClientProperty(LAYER_PROPERTY);
         else
-            i = (Integer)getComponentToLayer().get((Component)c);
+            i = getComponentToLayer().get(c);
 
         if(i == null)
             return DEFAULT_LAYER.intValue();
@@ -465,9 +465,9 @@
      * @see #getComponentCountInLayer
      */
     public int getPosition(Component c) {
-        int i, count, startLayer, curLayer, startLocation, pos = 0;
+        int i, startLayer, curLayer, startLocation, pos = 0;
 
-        count = getComponentCount();
+        getComponentCount();
         startLocation = getIndexOf(c);
 
         if(startLocation == -1)
--- a/jdk/src/share/classes/javax/swing/JList.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JList.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1848,8 +1848,7 @@
      * @since 1.4
      */
     public ListSelectionListener[] getListSelectionListeners() {
-        return (ListSelectionListener[])listenerList.getListeners(
-                ListSelectionListener.class);
+        return listenerList.getListeners(ListSelectionListener.class);
     }
 
 
@@ -2220,9 +2219,9 @@
         ListSelectionModel sm = getSelectionModel();
         sm.clearSelection();
         int size = getModel().getSize();
-        for(int i = 0; i < indices.length; i++) {
-            if (indices[i] < size) {
-                sm.addSelectionInterval(indices[i], indices[i]);
+        for (int i : indices) {
+            if (i < size) {
+                sm.addSelectionInterval(i, i);
             }
         }
     }
@@ -2724,7 +2723,7 @@
             return true;
         }
         if (getParent() instanceof JViewport) {
-            return (((JViewport)getParent()).getWidth() > getPreferredSize().width);
+            return (getParent().getWidth() > getPreferredSize().width);
         }
         return false;
     }
@@ -2749,7 +2748,7 @@
             return true;
         }
         if (getParent() instanceof JViewport) {
-            return (((JViewport)getParent()).getHeight() > getPreferredSize().height);
+            return (getParent().getHeight() > getPreferredSize().height);
         }
         return false;
     }
@@ -3161,7 +3160,7 @@
             private AccessibleContext getCurrentAccessibleContext() {
                 Component c = getComponentAtIndex(indexInParent);
                 if (c instanceof Accessible) {
-                    return ((Accessible) c).getAccessibleContext();
+                    return c.getAccessibleContext();
                 } else {
                     return null;
                 }
--- a/jdk/src/share/classes/javax/swing/JMenu.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JMenu.java	Wed Sep 24 08:14:37 2008 -0700
@@ -371,8 +371,8 @@
      * @since 1.3
      */
     protected Point getPopupMenuOrigin() {
-        int x = 0;
-        int y = 0;
+        int x;
+        int y;
         JPopupMenu pm = getPopupMenu();
         // Figure out the sizes needed to caclulate the menu position
         Dimension s = getSize();
@@ -900,10 +900,8 @@
      *         on another menu
      */
     public boolean isTopLevelMenu() {
-        if (getParent() instanceof JMenuBar)
-            return true;
+        return getParent() instanceof JMenuBar;
 
-        return false;
     }
 
     /**
@@ -1015,7 +1013,7 @@
      * @since 1.4
      */
     public MenuListener[] getMenuListeners() {
-        return (MenuListener[])listenerList.getListeners(MenuListener.class);
+        return listenerList.getListeners(MenuListener.class);
     }
 
     /**
@@ -1305,7 +1303,7 @@
      * @return the array of menu items
      */
     private MenuElement[] buildMenuElementArray(JMenu leaf) {
-        Vector elements = new Vector();
+        Vector<MenuElement> elements = new Vector<MenuElement>();
         Component current = leaf.getPopupMenu();
         JPopupMenu pop;
         JMenu menu;
@@ -1409,8 +1407,8 @@
         public int getAccessibleChildrenCount() {
             Component[] children = getMenuComponents();
             int count = 0;
-            for (int j = 0; j < children.length; j++) {
-                if (children[j] instanceof Accessible) {
+            for (Component child : children) {
+                if (child instanceof Accessible) {
                     count++;
                 }
             }
@@ -1426,18 +1424,18 @@
         public Accessible getAccessibleChild(int i) {
             Component[] children = getMenuComponents();
             int count = 0;
-            for (int j = 0; j < children.length; j++) {
-                if (children[j] instanceof Accessible) {
+            for (Component child : children) {
+                if (child instanceof Accessible) {
                     if (count == i) {
-                        if (children[j] instanceof JComponent) {
+                        if (child instanceof JComponent) {
                             // FIXME:  [[[WDW - probably should set this when
                             // the component is added to the menu.  I tried
                             // to do this in most cases, but the separators
                             // added by addSeparator are hard to get to.]]]
-                            AccessibleContext ac = ((Accessible) children[j]).getAccessibleContext();
+                            AccessibleContext ac = child.getAccessibleContext();
                             ac.setAccessibleParent(JMenu.this);
                         }
-                        return (Accessible) children[j];
+                        return (Accessible) child;
                     } else {
                         count++;
                     }
@@ -1581,7 +1579,7 @@
             }
             JMenuItem mi = getItem(i);
             if (mi != null && mi instanceof JMenu) {
-                if (((JMenu) mi).isSelected()) {
+                if (mi.isSelected()) {
                     MenuElement old[] =
                         MenuSelectionManager.defaultManager().getSelectedPath();
                     MenuElement me[] = new MenuElement[old.length-2];
--- a/jdk/src/share/classes/javax/swing/JMenuBar.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JMenuBar.java	Wed Sep 24 08:14:37 2008 -0700
@@ -414,7 +414,7 @@
      */
     public MenuElement[] getSubElements() {
         MenuElement result[];
-        Vector tmp = new Vector();
+        Vector<MenuElement> tmp = new Vector<MenuElement>();
         int c = getComponentCount();
         int i;
         Component m;
@@ -422,12 +422,12 @@
         for(i=0 ; i < c ; i++) {
             m = getComponent(i);
             if(m instanceof MenuElement)
-                tmp.addElement(m);
+                tmp.addElement((MenuElement) m);
         }
 
         result = new MenuElement[tmp.size()];
         for(i=0,c=tmp.size() ; i < c ; i++)
-            result[i] = (MenuElement) tmp.elementAt(i);
+            result[i] = tmp.elementAt(i);
         return result;
     }
 
@@ -664,9 +664,9 @@
         boolean retValue = super.processKeyBinding(ks, e, condition, pressed);
         if (!retValue) {
             MenuElement[] subElements = getSubElements();
-            for (int i=0; i<subElements.length; i++) {
+            for (MenuElement subElement : subElements) {
                 if (processBindingForKeyStrokeRecursive(
-                                                        subElements[i], ks, e, condition, pressed)) {
+                        subElement, ks, e, condition, pressed)) {
                     return true;
                 }
             }
@@ -693,9 +693,8 @@
         }
 
         MenuElement[] subElements = elem.getSubElements();
-        for(int i=0; i<subElements.length; i++) {
-            if (processBindingForKeyStrokeRecursive(subElements[i], ks, e,
-                                                    condition, pressed)) {
+        for (MenuElement subElement : subElements) {
+            if (processBindingForKeyStrokeRecursive(subElement, ks, e, condition, pressed)) {
                 return true;
                 // We don't, pass along to children JMenu's
             }
--- a/jdk/src/share/classes/javax/swing/JMenuItem.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JMenuItem.java	Wed Sep 24 08:14:37 2008 -0700
@@ -275,7 +275,7 @@
      *         hidden: true
      */
     public void setArmed(boolean b) {
-        ButtonModel model = (ButtonModel) getModel();
+        ButtonModel model = getModel();
 
         boolean oldValue = model.isArmed();
         if(model.isArmed() != b) {
@@ -290,7 +290,7 @@
      * @see #setArmed
      */
     public boolean isArmed() {
-        ButtonModel model = (ButtonModel) getModel();
+        ButtonModel model = getModel();
         return model.isArmed();
     }
 
@@ -721,8 +721,7 @@
      * @since 1.4
      */
     public MenuDragMouseListener[] getMenuDragMouseListeners() {
-        return (MenuDragMouseListener[])listenerList.getListeners(
-                MenuDragMouseListener.class);
+        return listenerList.getListeners(MenuDragMouseListener.class);
     }
 
     /**
@@ -752,8 +751,7 @@
      * @since 1.4
      */
     public MenuKeyListener[] getMenuKeyListeners() {
-        return (MenuKeyListener[])listenerList.getListeners(
-                MenuKeyListener.class);
+        return listenerList.getListeners(MenuKeyListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/JOptionPane.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JOptionPane.java	Wed Sep 24 08:14:37 2008 -0700
@@ -963,7 +963,7 @@
         }
         if (window instanceof SwingUtilities.SharedOwnerFrame) {
             WindowListener ownerShutdownListener =
-                (WindowListener)SwingUtilities.getSharedOwnerFrameShutdownListener();
+                    SwingUtilities.getSharedOwnerFrameShutdownListener();
             dialog.addWindowListener(ownerShutdownListener);
         }
         initDialog(dialog, style, parentComponent);
@@ -1300,11 +1300,10 @@
 
         // Use reflection to get Container.startLWModal.
         try {
-            Object obj;
-            obj = AccessController.doPrivileged(new ModalPrivilegedAction(
+            Method method = AccessController.doPrivileged(new ModalPrivilegedAction(
                     Container.class, "startLWModal"));
-            if (obj != null) {
-                ((Method)obj).invoke(dialog, (Object[])null);
+            if (method != null) {
+                method.invoke(dialog, (Object[])null);
             }
         } catch (IllegalAccessException ex) {
         } catch (IllegalArgumentException ex) {
@@ -1446,11 +1445,10 @@
 
         // Use reflection to get Container.startLWModal.
         try {
-            Object obj;
-            obj = AccessController.doPrivileged(new ModalPrivilegedAction(
+            Method method = AccessController.doPrivileged(new ModalPrivilegedAction(
                     Container.class, "startLWModal"));
-            if (obj != null) {
-                ((Method)obj).invoke(dialog, (Object[])null);
+            if (method != null) {
+                method.invoke(dialog, (Object[])null);
             }
         } catch (IllegalAccessException ex) {
         } catch (IllegalArgumentException ex) {
@@ -1531,12 +1529,11 @@
                         event.getPropertyName().equals(VALUE_PROPERTY)) {
                 // Use reflection to get Container.stopLWModal().
                 try {
-                    Object obj;
-                    obj = AccessController.doPrivileged(
+                    Method method = AccessController.doPrivileged(
                         new ModalPrivilegedAction(
                             Container.class, "stopLWModal"));
-                    if (obj != null) {
-                        ((Method)obj).invoke(iFrame, (Object[])null);
+                    if (method != null) {
+                        method.invoke(iFrame, (Object[])null);
                     }
                 } catch (IllegalAccessException ex) {
                 } catch (IllegalArgumentException ex) {
@@ -1852,7 +1849,7 @@
      * description: The UI object that implements the optionpane's LookAndFeel
      */
     public void setUI(OptionPaneUI ui) {
-        if ((OptionPaneUI)this.ui != ui) {
+        if (this.ui != ui) {
             super.setUI(ui);
             invalidate();
         }
@@ -2327,7 +2324,7 @@
 
     // Serialization support.
     private void writeObject(ObjectOutputStream s) throws IOException {
-        Vector      values = new Vector();
+        Vector<Object> values = new Vector<Object>();
 
         s.defaultWriteObject();
         // Save the icon, if its Serializable.
@@ -2342,7 +2339,7 @@
         }
         // Save the treeModel, if its Serializable.
         if(options != null) {
-            Vector           serOptions = new Vector();
+            Vector<Object> serOptions = new Vector<Object>();
 
             for(int counter = 0, maxCounter = options.length;
                 counter < maxCounter; counter++)
@@ -2510,16 +2507,16 @@
     /**
      * Retrieves a method from the provided class and makes it accessible.
      */
-    private static class ModalPrivilegedAction implements PrivilegedAction {
-        private Class clazz;
+    private static class ModalPrivilegedAction implements PrivilegedAction<Method> {
+        private Class<?> clazz;
         private String methodName;
 
-        public ModalPrivilegedAction(Class clazz, String methodName) {
+        public ModalPrivilegedAction(Class<?> clazz, String methodName) {
             this.clazz = clazz;
             this.methodName = methodName;
         }
 
-        public Object run() {
+        public Method run() {
             Method method = null;
             try {
                 method = clazz.getDeclaredMethod(methodName, (Class[])null);
--- a/jdk/src/share/classes/javax/swing/JPopupMenu.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JPopupMenu.java	Wed Sep 24 08:14:37 2008 -0700
@@ -584,7 +584,7 @@
 
         int nitems = getComponentCount();
         // PENDING(ges): Why not use an array?
-        Vector tempItems = new Vector();
+        Vector<Component> tempItems = new Vector<Component>();
 
         /* Remove the item at index, nitems-index times
            storing them in a temporary vector in the
@@ -600,8 +600,8 @@
         /* Add the removed items back to the menu, they are
            already in the correct order in the temp vector.
            */
-        for (int i = 0; i < tempItems.size()  ; i++) {
-            add((Component)tempItems.elementAt(i));
+        for (Component tempItem : tempItems) {
+            add(tempItem);
         }
     }
 
@@ -632,8 +632,7 @@
      * @since 1.4
      */
     public PopupMenuListener[] getPopupMenuListeners() {
-        return (PopupMenuListener[])listenerList.getListeners(
-                PopupMenuListener.class);
+        return listenerList.getListeners(PopupMenuListener.class);
     }
 
     /**
@@ -665,8 +664,7 @@
      * @since 1.5
      */
     public MenuKeyListener[] getMenuKeyListeners() {
-        return (MenuKeyListener[])listenerList.getListeners(
-                MenuKeyListener.class);
+        return listenerList.getListeners(MenuKeyListener.class);
     }
 
     /**
@@ -781,7 +779,7 @@
             // set selection path before popping up!
             if (isPopupMenu()) {
                 MenuElement me[] = new MenuElement[1];
-                me[0] = (MenuElement) this;
+                me[0] = this;
                 MenuSelectionManager.defaultManager().setSelectedPath(me);
             }
         }
@@ -848,10 +846,7 @@
      * being displayed).
      */
     public boolean isVisible() {
-        if(popup != null)
-            return true;
-        else
-            return false;
+        return popup != null;
     }
 
     /**
@@ -1311,7 +1306,7 @@
 // Serialization support.
 ////////////
     private void writeObject(ObjectOutputStream s) throws IOException {
-        Vector      values = new Vector();
+        Vector<Object> values = new Vector<Object>();
 
         s.defaultWriteObject();
         // Save the invoker, if its Serializable.
@@ -1494,7 +1489,7 @@
      */
     public MenuElement[] getSubElements() {
         MenuElement result[];
-        Vector tmp = new Vector();
+        Vector<MenuElement> tmp = new Vector<MenuElement>();
         int c = getComponentCount();
         int i;
         Component m;
@@ -1502,12 +1497,12 @@
         for(i=0 ; i < c ; i++) {
             m = getComponent(i);
             if(m instanceof MenuElement)
-                tmp.addElement(m);
+                tmp.addElement((MenuElement) m);
         }
 
         result = new MenuElement[tmp.size()];
         for(i=0,c=tmp.size() ; i < c ; i++)
-            result[i] = (MenuElement) tmp.elementAt(i);
+            result[i] = tmp.elementAt(i);
         return result;
     }
 
--- a/jdk/src/share/classes/javax/swing/JProgressBar.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JProgressBar.java	Wed Sep 24 08:14:37 2008 -0700
@@ -699,8 +699,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/JScrollBar.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JScrollBar.java	Wed Sep 24 08:14:37 2008 -0700
@@ -659,8 +659,7 @@
      * @since 1.4
      */
     public AdjustmentListener[] getAdjustmentListeners() {
-        return (AdjustmentListener[])listenerList.getListeners(
-                AdjustmentListener.class);
+        return listenerList.getListeners(AdjustmentListener.class);
     }
 
 
@@ -754,8 +753,8 @@
     public void setEnabled(boolean x)  {
         super.setEnabled(x);
         Component[] children = getComponents();
-        for(int i = 0; i < children.length; i++) {
-            children[i].setEnabled(x);
+        for (Component child : children) {
+            child.setEnabled(x);
         }
     }
 
--- a/jdk/src/share/classes/javax/swing/JSlider.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JSlider.java	Wed Sep 24 08:14:37 2008 -0700
@@ -270,8 +270,7 @@
     {
         checkOrientation(orientation);
         this.orientation = orientation;
-        sliderModel = new DefaultBoundedRangeModel(value, 0, min, max);
-        sliderModel.addChangeListener(changeListener);
+        setModel(new DefaultBoundedRangeModel(value, 0, min, max));
         updateUI();
     }
 
@@ -284,7 +283,6 @@
     {
         this.orientation = JSlider.HORIZONTAL;
         setModel(brm);
-        sliderModel.addChangeListener(changeListener);
         updateUI();
     }
 
@@ -476,15 +474,15 @@
 
         if (newModel != null) {
             newModel.addChangeListener(changeListener);
+        }
 
-            if (accessibleContext != null) {
-                accessibleContext.firePropertyChange(
-                                                    AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
-                                                    (oldModel == null
-                                                     ? null : Integer.valueOf(oldModel.getValue())),
-                                                    (newModel == null
-                                                     ? null : Integer.valueOf(newModel.getValue())));
-            }
+        if (accessibleContext != null) {
+            accessibleContext.firePropertyChange(
+                                                AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
+                                                (oldModel == null
+                                                 ? null : Integer.valueOf(oldModel.getValue())),
+                                                (newModel == null
+                                                 ? null : Integer.valueOf(newModel.getValue())));
         }
 
         firePropertyChange("model", oldModel, sliderModel);
@@ -930,7 +928,7 @@
             throw new IllegalArgumentException( "Label incremement must be > 0" );
         }
 
-        class SmartHashtable extends Hashtable implements PropertyChangeListener {
+        class SmartHashtable extends Hashtable<Object, Object> implements PropertyChangeListener {
             int increment = 0;
             int start = 0;
             boolean startAtMin = false;
@@ -977,9 +975,8 @@
                 if ( e.getPropertyName().equals( "minimum" ) ||
                      e.getPropertyName().equals( "maximum" ) ) {
 
-                    Dictionary labelTable = getLabelTable();
-                    Enumeration keys = labelTable.keys();
-                    Hashtable hashtable = new Hashtable();
+                    Enumeration keys = getLabelTable().keys();
+                    Hashtable<Object, Object> hashtable = new Hashtable<Object, Object>();
 
                     // Save the labels that were added by the developer
                     while ( keys.hasMoreElements() ) {
--- a/jdk/src/share/classes/javax/swing/JSpinner.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JSpinner.java	Wed Sep 24 08:14:37 2008 -0700
@@ -433,8 +433,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
 
@@ -1536,7 +1535,7 @@
                     return textField.getAccessibleContext();
                 }
             } else if (editor instanceof Accessible) {
-                return ((Accessible)editor).getAccessibleContext();
+                return editor.getAccessibleContext();
             }
             return null;
         }
@@ -1693,7 +1692,7 @@
             if (i < 0 || i > 1) {
                 return false;
             }
-            Object o = null;
+            Object o;
             if (i == 0) {
                 o = getNextValue(); // AccessibleAction.INCREMENT
             } else {
--- a/jdk/src/share/classes/javax/swing/JTabbedPane.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java	Wed Sep 24 08:14:37 2008 -0700
@@ -313,8 +313,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
@@ -2062,7 +2061,7 @@
                  * Accessibility classes unnecessarily.
                  */
                 AccessibleContext ac;
-                ac = ((Accessible) component).getAccessibleContext();
+                ac = component.getAccessibleContext();
                 if (ac != null) {
                     ac.setAccessibleParent(this);
                 }
--- a/jdk/src/share/classes/javax/swing/JTable.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JTable.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1677,16 +1677,16 @@
                 if (!forDrop && state != null) {
                     clearSelection();
 
-                    int[] rows = (int[])((int[][])state)[0];
-                    int[] cols = (int[])((int[][])state)[1];
-                    int[] anchleads = (int[])((int[][])state)[2];
-
-                    for (int i = 0; i < rows.length; i++) {
-                        addRowSelectionInterval(rows[i], rows[i]);
+                    int[] rows = ((int[][])state)[0];
+                    int[] cols = ((int[][])state)[1];
+                    int[] anchleads = ((int[][])state)[2];
+
+                    for (int row : rows) {
+                        addRowSelectionInterval(row, row);
                     }
 
-                    for (int i = 0; i < cols.length; i++) {
-                        addColumnSelectionInterval(cols[i], cols[i]);
+                    for (int col : cols) {
+                        addColumnSelectionInterval(col, col);
                     }
 
                     SwingUtilities2.setLeadAnchorWithoutSelection(
@@ -1776,7 +1776,7 @@
         boolean oldValue = this.autoCreateRowSorter;
         this.autoCreateRowSorter = autoCreateRowSorter;
         if (autoCreateRowSorter) {
-            setRowSorter(new TableRowSorter(getModel()));
+            setRowSorter(new TableRowSorter<TableModel>(getModel()));
         }
         firePropertyChange("autoCreateRowSorter", oldValue,
                            autoCreateRowSorter);
@@ -3198,7 +3198,7 @@
     private void accommodateDelta(int resizingColumnIndex, int delta) {
         int columnCount = getColumnCount();
         int from = resizingColumnIndex;
-        int to = columnCount;
+        int to;
 
         // Use the mode to determine how to absorb the changes.
         switch(autoResizeMode) {
@@ -3237,8 +3237,6 @@
         }
 
         adjustSizes(totalWidth + delta, r, false);
-
-        return;
     }
 
     private interface Resizable2 {
@@ -3492,7 +3490,7 @@
      * @see     #editingRow
      */
     public boolean isEditing() {
-        return (cellEditor == null)? false : true;
+        return cellEditor != null;
     }
 
     /**
@@ -3642,7 +3640,7 @@
             firePropertyChange("model", old, dataModel);
 
             if (getAutoCreateRowSorter()) {
-                setRowSorter(new TableRowSorter(dataModel));
+                setRowSorter(new TableRowSorter<TableModel>(dataModel));
             }
         }
     }
@@ -5160,7 +5158,7 @@
     public boolean getScrollableTracksViewportHeight() {
         return getFillsViewportHeight()
                && getParent() instanceof JViewport
-               && (((JViewport)getParent()).getHeight() > getPreferredSize().height);
+               && (getParent().getHeight() > getPreferredSize().height);
     }
 
     /**
@@ -5214,7 +5212,7 @@
         // by setting the client property JTable.autoStartsEdit to Boolean.FALSE.
         if (!retValue && condition == WHEN_ANCESTOR_OF_FOCUSED_COMPONENT &&
             isFocusOwner() &&
-            !Boolean.FALSE.equals((Boolean)getClientProperty("JTable.autoStartsEdit"))) {
+            !Boolean.FALSE.equals(getClientProperty("JTable.autoStartsEdit"))) {
             // We do not have a binding for the event.
             Component editorComponent = getEditorComponent();
             if (editorComponent == null) {
@@ -5436,7 +5434,7 @@
             this.value = null;
             ((JComponent)getComponent()).setBorder(new LineBorder(Color.black));
             try {
-                Class type = table.getColumnClass(column);
+                Class<?> type = table.getColumnClass(column);
                 // Since our obligation is to produce a value which is
                 // assignable for the required type it is OK to use the
                 // String constructor for columns which are declared
@@ -6627,10 +6625,10 @@
             } else if (name.compareTo("tableCellEditor") == 0) {
 
                 if (oldValue != null && oldValue instanceof TableCellEditor) {
-                    ((TableCellEditor) oldValue).removeCellEditorListener((CellEditorListener) this);
+                    ((TableCellEditor) oldValue).removeCellEditorListener(this);
                 }
                 if (newValue != null && newValue instanceof TableCellEditor) {
-                    ((TableCellEditor) newValue).addCellEditorListener((CellEditorListener) this);
+                    ((TableCellEditor) newValue).addCellEditorListener(this);
                 }
             }
         }
@@ -7045,7 +7043,7 @@
          */
         public Accessible getAccessibleSelection(int i) {
             if (i < 0 || i > getAccessibleSelectionCount()) {
-                return (Accessible) null;
+                return null;
             }
 
             int rowsSel = JTable.this.getSelectedRowCount();
@@ -7158,7 +7156,7 @@
                     return getAccessibleChild((r * ttlCols) + c);
                 }
             }
-            return (Accessible) null;
+            return null;
         }
 
         /**
@@ -7906,7 +7904,7 @@
                                   JTable.this, getValueAt(row, column),
                                   false, false, row, column);
                 if (component instanceof Accessible) {
-                    return ((Accessible) component).getAccessibleContext();
+                    return component.getAccessibleContext();
                 } else {
                     return null;
                 }
--- a/jdk/src/share/classes/javax/swing/JTextField.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JTextField.java	Wed Sep 24 08:14:37 2008 -0700
@@ -475,8 +475,7 @@
      * @since 1.4
      */
     public synchronized ActionListener[] getActionListeners() {
-        return (ActionListener[])listenerList.getListeners(
-                ActionListener.class);
+        return listenerList.getListeners(ActionListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/JTree.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JTree.java	Wed Sep 24 08:14:37 2008 -0700
@@ -187,7 +187,7 @@
      * information must be determined by visiting all the parent
      * paths and seeing if they are visible.
      */
-    transient private Hashtable           expandedState;
+    transient private Hashtable<TreePath, Boolean> expandedState;
 
 
     /**
@@ -281,7 +281,7 @@
      * Used when <code>setExpandedState</code> is invoked,
      * will be a <code>Stack</code> of <code>Stack</code>s.
      */
-    transient private Stack           expandedStack;
+    transient private Stack<Stack<TreePath>> expandedStack;
 
     /**
      * Lead selection path, may not be <code>null</code>.
@@ -652,9 +652,9 @@
     @ConstructorProperties({"model"})
     public JTree(TreeModel newModel) {
         super();
-        expandedStack = new Stack();
+        expandedStack = new Stack<Stack<TreePath>>();
         toggleClickCount = 2;
-        expandedState = new Hashtable();
+        expandedState = new Hashtable<TreePath, Boolean>();
         setLayout(null);
         rowHeight = 16;
         visibleRowCount = 20;
@@ -691,7 +691,7 @@
      *  description: The UI object that implements the Component's LookAndFeel.
      */
     public void setUI(TreeUI ui) {
-        if ((TreeUI)this.ui != ui) {
+        if (this.ui != ui) {
             settingUI = true;
             uiTreeExpansionListener = null;
             try {
@@ -1298,8 +1298,8 @@
         Object root = (model == null) ? null : model.getRoot();
         TreePath rootPath = (root == null) ? null : new TreePath(root);
 
-        TreePath child = null;
-        TreePath parent = null;
+        TreePath child;
+        TreePath parent;
         boolean outside = row == -1
                           || p.y < bounds.y
                           || p.y >= bounds.y + bounds.height;
@@ -1940,14 +1940,14 @@
         if(!isExpanded(parent))
             return null;
 
-        Enumeration       toggledPaths = expandedState.keys();
-        Vector            elements = null;
+        Enumeration<TreePath> toggledPaths = expandedState.keys();
+        Vector<TreePath> elements = null;
         TreePath          path;
         Object            value;
 
         if(toggledPaths != null) {
             while(toggledPaths.hasMoreElements()) {
-                path = (TreePath)toggledPaths.nextElement();
+                path = toggledPaths.nextElement();
                 value = expandedState.get(path);
                 // Add the path if it is expanded, a descendant of parent,
                 // and it is visible (all parents expanded). This is rather
@@ -1956,7 +1956,7 @@
                    ((Boolean)value).booleanValue() &&
                    parent.isDescendant(path) && isVisible(path)) {
                     if (elements == null) {
-                        elements = new Vector();
+                        elements = new Vector<TreePath>();
                     }
                     elements.addElement(path);
                 }
@@ -1990,9 +1990,9 @@
             return false;
 
         // Is this node expanded?
-        Object          value = expandedState.get(path);
-
-        if(value == null || !((Boolean)value).booleanValue())
+        Boolean value = expandedState.get(path);
+
+        if(value == null || !value.booleanValue())
             return false;
 
         // It is, make sure its parent is also expanded.
@@ -2018,7 +2018,7 @@
             TreePath         path = tree.getPathForRow(this, row);
 
             if(path != null) {
-                Boolean value = (Boolean)expandedState.get(path);
+                Boolean value = expandedState.get(path);
 
                 return (value != null && value.booleanValue());
             }
@@ -2704,8 +2704,7 @@
      * @since 1.4
      */
     public TreeExpansionListener[] getTreeExpansionListeners() {
-        return (TreeExpansionListener[])listenerList.getListeners(
-                TreeExpansionListener.class);
+        return listenerList.getListeners(TreeExpansionListener.class);
     }
 
     /**
@@ -2737,8 +2736,7 @@
      * @since 1.4
      */
     public TreeWillExpandListener[] getTreeWillExpandListeners() {
-        return (TreeWillExpandListener[])listenerList.getListeners(
-                TreeWillExpandListener.class);
+        return listenerList.getListeners(TreeWillExpandListener.class);
     }
 
     /**
@@ -2895,8 +2893,7 @@
      * @since 1.4
      */
     public TreeSelectionListener[] getTreeSelectionListeners() {
-        return (TreeSelectionListener[])listenerList.getListeners(
-                TreeSelectionListener.class);
+        return listenerList.getListeners(TreeSelectionListener.class);
     }
 
     /**
@@ -3030,7 +3027,7 @@
 
     // Serialization support.
     private void writeObject(ObjectOutputStream s) throws IOException {
-        Vector      values = new Vector();
+        Vector<Object> values = new Vector<Object>();
 
         s.defaultWriteObject();
         // Save the cellRenderer, if its Serializable.
@@ -3077,9 +3074,9 @@
 
         // Create an instance of expanded state.
 
-        expandedState = new Hashtable();
-
-        expandedStack = new Stack();
+        expandedState = new Hashtable<TreePath, Boolean>();
+
+        expandedStack = new Stack<Stack<TreePath>>();
 
         Vector          values = (Vector)s.readObject();
         int             indexCounter = 0;
@@ -3132,13 +3129,13 @@
         TreeModel       model = getModel();
 
         if(model != null) {
-            Enumeration        paths = expandedState.keys();
+            Enumeration<TreePath> paths = expandedState.keys();
 
             if(paths != null) {
-                Vector         state = new Vector();
+                Vector<Object> state = new Vector<Object>();
 
                 while(paths.hasMoreElements()) {
-                    TreePath   path = (TreePath)paths.nextElement();
+                    TreePath path = paths.nextElement();
                     Object     archivePath;
 
                     try {
@@ -3502,7 +3499,7 @@
      */
     public boolean getScrollableTracksViewportWidth() {
         if (getParent() instanceof JViewport) {
-            return (((JViewport)getParent()).getWidth() > getPreferredSize().width);
+            return getParent().getWidth() > getPreferredSize().width;
         }
         return false;
     }
@@ -3518,7 +3515,7 @@
      */
     public boolean getScrollableTracksViewportHeight() {
         if (getParent() instanceof JViewport) {
-            return (((JViewport)getParent()).getHeight() > getPreferredSize().height);
+            return getParent().getHeight() > getPreferredSize().height;
         }
         return false;
     }
@@ -3535,14 +3532,14 @@
     protected void setExpandedState(TreePath path, boolean state) {
         if(path != null) {
             // Make sure all parents of path are expanded.
-            Stack         stack;
-            TreePath      parentPath = path.getParentPath();
+            Stack<TreePath> stack;
+            TreePath parentPath = path.getParentPath();
 
             if (expandedStack.size() == 0) {
-                stack = new Stack();
+                stack = new Stack<TreePath>();
             }
             else {
-                stack = (Stack)expandedStack.pop();
+                stack = expandedStack.pop();
             }
 
             try {
@@ -3556,7 +3553,7 @@
                     }
                 }
                 for(int counter = stack.size() - 1; counter >= 0; counter--) {
-                    parentPath = (TreePath)stack.pop();
+                    parentPath = stack.pop();
                     if(!isExpanded(parentPath)) {
                         try {
                             fireTreeWillExpand(parentPath);
@@ -3636,12 +3633,11 @@
         if(parent == null)
             return null;
 
-        Vector            descendants = new Vector();
-        Enumeration       nodes = expandedState.keys();
-        TreePath          path;
+        Vector<TreePath> descendants = new Vector<TreePath>();
+        Enumeration<TreePath> nodes = expandedState.keys();
 
         while(nodes.hasMoreElements()) {
-            path = (TreePath)nodes.nextElement();
+            TreePath path = nodes.nextElement();
             if(parent.isDescendant(path))
                 descendants.addElement(path);
         }
@@ -3664,8 +3660,8 @@
     {
          if(toRemove != null) {
              while(toRemove.hasMoreElements()) {
-                 Enumeration         descendants = getDescendantToggledPaths
-                                         ((TreePath)toRemove.nextElement());
+                 Enumeration descendants = getDescendantToggledPaths
+                         (toRemove.nextElement());
 
                  if(descendants != null) {
                      while(descendants.hasMoreElements()) {
@@ -4250,7 +4246,7 @@
         private AccessibleContext getCurrentAccessibleContext() {
             Component c = getCurrentComponent();
             if (c instanceof Accessible) {
-                return (((Accessible) c).getAccessibleContext());
+                return c.getAccessibleContext();
             } else {
                 return null;
             }
@@ -4573,7 +4569,7 @@
             private AccessibleContext getCurrentAccessibleContext() {
                 Component c = getCurrentComponent();
                 if (c instanceof Accessible) {
-                    return (((Accessible) c).getAccessibleContext());
+                    return c.getAccessibleContext();
                 } else {
                     return null;
                 }
@@ -5117,12 +5113,8 @@
             public boolean isVisible() {
                 Rectangle pathBounds = tree.getPathBounds(path);
                 Rectangle parentBounds = tree.getVisibleRect();
-                if (pathBounds != null && parentBounds != null &&
-                    parentBounds.intersects(pathBounds)) {
-                    return true;
-                } else {
-                    return false;
-                }
+                return pathBounds != null && parentBounds != null &&
+                        parentBounds.intersects(pathBounds);
             }
 
             public void setVisible(boolean b) {
--- a/jdk/src/share/classes/javax/swing/JViewport.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JViewport.java	Wed Sep 24 08:14:37 2008 -0700
@@ -389,7 +389,7 @@
                 // could be bigger than invalid size.
                 validateView();
             }
-            int     dx = 0, dy = 0;
+            int dx, dy;
 
             dx = positionAdjustment(getWidth(), contentRect.width, contentRect.x);
             dy = positionAdjustment(getHeight(), contentRect.height, contentRect.y);
@@ -682,10 +682,7 @@
      * @see JComponent#isPaintingOrigin()
      */
     boolean isPaintingOrigin() {
-        if (scrollMode == BACKINGSTORE_SCROLL_MODE) {
-            return true;
-        }
-        return false;
+        return scrollMode == BACKINGSTORE_SCROLL_MODE;
     }
 
 
@@ -903,11 +900,7 @@
       */
     public void setScrollMode(int mode) {
         scrollMode = mode;
-        if (mode == BACKINGSTORE_SCROLL_MODE) {
-            backingStore = true;
-        } else {
-            backingStore = false;
-        }
+        backingStore = mode == BACKINGSTORE_SCROLL_MODE;
     }
 
     /**
@@ -958,10 +951,10 @@
         }
     }
 
-    private final boolean isBlitting() {
+    private boolean isBlitting() {
         Component view = getView();
         return (scrollMode == BLIT_SCROLL_MODE) &&
-               (view instanceof JComponent) && ((JComponent)view).isOpaque();
+               (view instanceof JComponent) && view.isOpaque();
     }
 
 
@@ -1380,8 +1373,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/JWindow.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/JWindow.java	Wed Sep 24 08:14:37 2008 -0700
@@ -185,7 +185,7 @@
         super(owner == null? SwingUtilities.getSharedOwnerFrame() : owner);
         if (owner == null) {
             WindowListener ownerShutdownListener =
-                (WindowListener)SwingUtilities.getSharedOwnerFrameShutdownListener();
+                    SwingUtilities.getSharedOwnerFrameShutdownListener();
             addWindowListener(ownerShutdownListener);
         }
         windowInit();
@@ -212,7 +212,7 @@
               owner);
         if (owner == null) {
             WindowListener ownerShutdownListener =
-                (WindowListener)SwingUtilities.getSharedOwnerFrameShutdownListener();
+                    SwingUtilities.getSharedOwnerFrameShutdownListener();
             addWindowListener(ownerShutdownListener);
         }
         windowInit();
@@ -250,7 +250,7 @@
               owner, gc);
         if (owner == null) {
             WindowListener ownerShutdownListener =
-                (WindowListener)SwingUtilities.getSharedOwnerFrameShutdownListener();
+                    SwingUtilities.getSharedOwnerFrameShutdownListener();
             addWindowListener(ownerShutdownListener);
         }
         windowInit();
--- a/jdk/src/share/classes/javax/swing/KeyboardManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/KeyboardManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -68,13 +68,13 @@
     /**
       * maps top-level containers to a sub-hashtable full of keystrokes
       */
-    Hashtable containerMap = new Hashtable();
+    Hashtable<Container, Hashtable> containerMap = new Hashtable<Container, Hashtable>();
 
     /**
       * Maps component/keystroke pairs to a topLevel container
       * This is mainly used for fast unregister operations
       */
-    Hashtable componentKeyStrokeMap = new Hashtable();
+    Hashtable<ComponentKeyStrokePair, Container> componentKeyStrokeMap = new Hashtable<ComponentKeyStrokePair, Container>();
 
     public static KeyboardManager getCurrentManager() {
         return currentManager;
@@ -95,7 +95,7 @@
          if (topContainer == null) {
              return;
          }
-         Hashtable keyMap = (Hashtable)containerMap.get(topContainer);
+         Hashtable keyMap = containerMap.get(topContainer);
 
          if (keyMap ==  null) {  // lazy evaluate one
              keyMap = registerNewTopContainer(topContainer);
@@ -114,8 +114,8 @@
            // Then add the old compoennt and the new compoent to the vector
            // then insert the vector in the table
            if (tmp != c) {  // this means this is already registered for this component, no need to dup
-               Vector v = new Vector();
-               v.addElement(tmp);
+               Vector<JComponent> v = new Vector<JComponent>();
+               v.addElement((JComponent) tmp);
                v.addElement(c);
                keyMap.put(k, v);
            }
@@ -154,13 +154,13 @@
 
          ComponentKeyStrokePair ckp = new ComponentKeyStrokePair(c,ks);
 
-         Object topContainer = componentKeyStrokeMap.get(ckp);
+         Container topContainer = componentKeyStrokeMap.get(ckp);
 
          if (topContainer == null) {  // never heard of this pairing, so bail
              return;
          }
 
-         Hashtable keyMap = (Hashtable)containerMap.get(topContainer);
+         Hashtable keyMap = containerMap.get(topContainer);
          if  (keyMap == null) { // this should never happen, but I'm being safe
              Thread.dumpStack();
              return;
@@ -221,7 +221,7 @@
                ks=KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers(), !pressed);
          }
 
-         Hashtable keyMap = (Hashtable)containerMap.get(topAncestor);
+         Hashtable keyMap = containerMap.get(topAncestor);
          if (keyMap != null) { // this container isn't registered, so bail
 
              Object tmp = keyMap.get(ks);
@@ -293,7 +293,7 @@
         if (top == null) {
             return;
         }
-        Hashtable keyMap = (Hashtable)containerMap.get(top);
+        Hashtable keyMap = containerMap.get(top);
 
         if (keyMap ==  null) {  // lazy evaluate one
              keyMap = registerNewTopContainer(top);
@@ -314,11 +314,11 @@
 
 
     public void unregisterMenuBar(JMenuBar mb) {
-        Object topContainer = getTopAncestor(mb);
+        Container topContainer = getTopAncestor(mb);
         if (topContainer == null) {
             return;
         }
-        Hashtable keyMap = (Hashtable)containerMap.get(topContainer);
+        Hashtable keyMap = containerMap.get(topContainer);
         if (keyMap!=null) {
             Vector v = (Vector)keyMap.get(JMenuBar.class);
             if (v != null) {
--- a/jdk/src/share/classes/javax/swing/LayoutComparator.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/LayoutComparator.java	Wed Sep 24 08:14:37 2008 -0700
@@ -39,7 +39,7 @@
  *
  * @author David Mendenhall
  */
-final class LayoutComparator implements Comparator, java.io.Serializable {
+final class LayoutComparator implements Comparator<Component>, java.io.Serializable {
 
     private static final int ROW_TOLERANCE = 10;
 
@@ -51,10 +51,7 @@
         leftToRight = orientation.isLeftToRight();
     }
 
-    public int compare(Object o1, Object o2) {
-        Component a = (Component)o1;
-        Component b = (Component)o2;
-
+    public int compare(Component a, Component b) {
         if (a == b) {
             return 0;
         }
@@ -65,9 +62,9 @@
         // each Component and then search from the Window down until the
         // hierarchy branches.
         if (a.getParent() != b.getParent()) {
-            LinkedList aAncestory, bAncestory;
+            LinkedList<Component> aAncestory = new LinkedList<Component>();
 
-            for(aAncestory = new LinkedList(); a != null; a = a.getParent()) {
+            for(; a != null; a = a.getParent()) {
                 aAncestory.add(a);
                 if (a instanceof Window) {
                     break;
@@ -78,7 +75,9 @@
                 throw new ClassCastException();
             }
 
-            for(bAncestory = new LinkedList(); b != null; b = b.getParent()) {
+            LinkedList<Component> bAncestory = new LinkedList<Component>();
+
+            for(; b != null; b = b.getParent()) {
                 bAncestory.add(b);
                 if (b instanceof Window) {
                     break;
@@ -89,18 +88,18 @@
                 throw new ClassCastException();
             }
 
-            for (ListIterator
+            for (ListIterator<Component>
                      aIter = aAncestory.listIterator(aAncestory.size()),
                      bIter = bAncestory.listIterator(bAncestory.size()); ;) {
                 if (aIter.hasPrevious()) {
-                    a = (Component)aIter.previous();
+                    a = aIter.previous();
                 } else {
                     // a is an ancestor of b
                     return -1;
                 }
 
                 if (bIter.hasPrevious()) {
-                    b = (Component)bIter.previous();
+                    b = bIter.previous();
                 } else {
                     // b is an ancestor of a
                     return 1;
--- a/jdk/src/share/classes/javax/swing/LayoutFocusTraversalPolicy.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/LayoutFocusTraversalPolicy.java	Wed Sep 24 08:14:37 2008 -0700
@@ -65,7 +65,7 @@
      * Constructs a LayoutFocusTraversalPolicy with the passed in
      * <code>Comparator</code>.
      */
-    LayoutFocusTraversalPolicy(Comparator c) {
+    LayoutFocusTraversalPolicy(Comparator<? super Component> c) {
         super(c);
     }
 
--- a/jdk/src/share/classes/javax/swing/LegacyGlueFocusTraversalPolicy.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/LegacyGlueFocusTraversalPolicy.java	Wed Sep 24 08:14:37 2008 -0700
@@ -48,8 +48,8 @@
     private transient FocusTraversalPolicy delegatePolicy;
     private transient DefaultFocusManager delegateManager;
 
-    private HashMap forwardMap = new HashMap(),
-        backwardMap = new HashMap();
+    private HashMap<Component, Component> forwardMap = new HashMap<Component, Component>(),
+        backwardMap = new HashMap<Component, Component>();
 
     LegacyGlueFocusTraversalPolicy(FocusTraversalPolicy delegatePolicy) {
         this.delegatePolicy = delegatePolicy;
@@ -70,11 +70,11 @@
     public Component getComponentAfter(Container focusCycleRoot,
                                        Component aComponent) {
         Component hardCoded = aComponent, prevHardCoded;
-        HashSet sanity = new HashSet();
+        HashSet<Component> sanity = new HashSet<Component>();
 
         do {
             prevHardCoded = hardCoded;
-            hardCoded = (Component)forwardMap.get(hardCoded);
+            hardCoded = forwardMap.get(hardCoded);
             if (hardCoded == null) {
                 if (delegatePolicy != null &&
                     prevHardCoded.isFocusCycleRoot(focusCycleRoot)) {
@@ -99,11 +99,11 @@
     public Component getComponentBefore(Container focusCycleRoot,
                                         Component aComponent) {
         Component hardCoded = aComponent, prevHardCoded;
-        HashSet sanity = new HashSet();
+        HashSet<Component> sanity = new HashSet<Component>();
 
         do {
             prevHardCoded = hardCoded;
-            hardCoded = (Component)backwardMap.get(hardCoded);
+            hardCoded = backwardMap.get(hardCoded);
             if (hardCoded == null) {
                 if (delegatePolicy != null &&
                     prevHardCoded.isFocusCycleRoot(focusCycleRoot)) {
--- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -37,7 +37,7 @@
  * @author Arnaud Weber
  */
 public class MenuSelectionManager {
-    private Vector selection = new Vector();
+    private Vector<MenuElement> selection = new Vector<MenuElement>();
 
     /* diagnostic aids -- should be false for production builds. */
     private static final boolean TRACE =   false; // trace creates and disposes
@@ -100,14 +100,14 @@
         }
 
         for(i=0,c=path.length;i<c;i++) {
-            if(i < currentSelectionCount && (MenuElement)selection.elementAt(i) == path[i])
+            if (i < currentSelectionCount && selection.elementAt(i) == path[i])
                 firstDifference++;
             else
                 break;
         }
 
         for(i=currentSelectionCount - 1 ; i >= firstDifference ; i--) {
-            MenuElement me = (MenuElement)selection.elementAt(i);
+            MenuElement me = selection.elementAt(i);
             selection.removeElementAt(i);
             me.menuSelectionChanged(false);
         }
@@ -131,7 +131,7 @@
         MenuElement res[] = new MenuElement[selection.size()];
         int i,c;
         for(i=0,c=selection.size();i<c;i++)
-            res[i] = (MenuElement) selection.elementAt(i);
+            res[i] = selection.elementAt(i);
         return res;
     }
 
@@ -172,8 +172,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
     /**
@@ -258,8 +257,8 @@
                 if(!mc.isShowing())
                     continue;
                 if(mc instanceof JComponent) {
-                    cWidth  = ((JComponent)mc).getWidth();
-                    cHeight = ((JComponent)mc).getHeight();
+                    cWidth  = mc.getWidth();
+                    cHeight = mc.getHeight();
                 } else {
                     r2 = mc.getBounds();
                     cWidth  = r2.width;
@@ -338,7 +337,7 @@
         for(i=0,j=path.length; i<j ;i++){
             for (int k=0; k<=i; k++)
                 System.out.print("  ");
-            MenuElement me = (MenuElement) path[i];
+            MenuElement me = path[i];
             if(me instanceof JMenuItem) {
                 System.out.println(((JMenuItem)me).getText() + ", ");
             } else if (me instanceof JMenuBar) {
@@ -399,8 +398,8 @@
                 if(!mc.isShowing())
                     continue;
                 if(mc instanceof JComponent) {
-                    cWidth  = ((JComponent)mc).getWidth();
-                    cHeight = ((JComponent)mc).getHeight();
+                    cWidth  = mc.getWidth();
+                    cHeight = mc.getHeight();
                 } else {
                     r2 = mc.getBounds();
                     cWidth  = r2.width;
@@ -429,7 +428,7 @@
      */
     public void processKeyEvent(KeyEvent e) {
         MenuElement[] sel2 = new MenuElement[0];
-        sel2 = (MenuElement[])selection.toArray(sel2);
+        sel2 = selection.toArray(sel2);
         int selSize = sel2.length;
         MenuElement[] path;
 
@@ -474,7 +473,7 @@
      */
     public boolean isComponentPartOfCurrentMenu(Component c) {
         if(selection.size() > 0) {
-            MenuElement me = (MenuElement)selection.elementAt(0);
+            MenuElement me = selection.elementAt(0);
             return isComponentPartOfCurrentMenu(me,c);
         } else
             return false;
--- a/jdk/src/share/classes/javax/swing/MultiUIDefaults.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/MultiUIDefaults.java	Wed Sep 24 08:14:37 2008 -0700
@@ -56,8 +56,7 @@
             return value;
         }
 
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
+        for (UIDefaults table : tables) {
             value = (table != null) ? table.get(key) : null;
             if (value != null) {
                 return value;
@@ -75,8 +74,7 @@
             return value;
         }
 
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
+        for (UIDefaults table : tables) {
             value = (table != null) ? table.get(key,l) : null;
             if (value != null) {
                 return value;
@@ -89,8 +87,7 @@
 
     public int size() {
         int n = super.size();
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
+        for (UIDefaults table : tables) {
             n += (table != null) ? table.size() : 0;
         }
         return n;
@@ -102,7 +99,7 @@
     }
 
 
-    public Enumeration keys()
+    public Enumeration<Object> keys()
     {
         Enumeration[] enums = new Enumeration[1 + tables.length];
         enums[0] = super.keys();
@@ -116,7 +113,7 @@
     }
 
 
-    public Enumeration elements()
+    public Enumeration<Object> elements()
     {
         Enumeration[] enums = new Enumeration[1 + tables.length];
         enums[0] = super.elements();
@@ -137,7 +134,7 @@
         }
     }
 
-    private static class MultiUIDefaultsEnumerator implements Enumeration
+    private static class MultiUIDefaultsEnumerator implements Enumeration<Object>
     {
         Enumeration[] enums;
         int n = 0;
@@ -175,8 +172,7 @@
             return value;
         }
 
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
+        for (UIDefaults table : tables) {
             value = (table != null) ? table.remove(key) : null;
             if (value != null) {
                 return value;
@@ -189,8 +185,7 @@
 
     public void clear() {
         super.clear();
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
+        for (UIDefaults table : tables) {
             if (table != null) {
                 table.clear();
             }
--- a/jdk/src/share/classes/javax/swing/PopupFactory.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/PopupFactory.java	Wed Sep 24 08:14:37 2008 -0700
@@ -313,9 +313,9 @@
                 if(contents instanceof JPopupMenu) {
                     JPopupMenu jpm = (JPopupMenu) contents;
                     Component popComps[] = jpm.getComponents();
-                    for(int i=0;i<popComps.length;i++) {
-                        if(!(popComps[i] instanceof MenuElement) &&
-                           !(popComps[i] instanceof JSeparator)) {
+                    for (Component popComp : popComps) {
+                        if (!(popComp instanceof MenuElement) &&
+                                !(popComp instanceof JSeparator)) {
                             focusPopup = true;
                             break;
                         }
@@ -357,17 +357,16 @@
          */
         private static HeavyWeightPopup getRecycledHeavyWeightPopup(Window w) {
             synchronized (HeavyWeightPopup.class) {
-                List cache;
-                Map heavyPopupCache = getHeavyWeightPopupCache();
+                List<HeavyWeightPopup> cache;
+                Map<Window, List<HeavyWeightPopup>> heavyPopupCache = getHeavyWeightPopupCache();
 
                 if (heavyPopupCache.containsKey(w)) {
-                    cache = (List)heavyPopupCache.get(w);
+                    cache = heavyPopupCache.get(w);
                 } else {
                     return null;
                 }
-                int c;
-                if ((c = cache.size()) > 0) {
-                    HeavyWeightPopup r = (HeavyWeightPopup)cache.get(0);
+                if (cache.size() > 0) {
+                    HeavyWeightPopup r = cache.get(0);
                     cache.remove(0);
                     return r;
                 }
@@ -380,13 +379,13 @@
          * <code>Window</code> to a <code>List</code> of
          * <code>HeavyWeightPopup</code>s.
          */
-        private static Map getHeavyWeightPopupCache() {
+        private static Map<Window, List<HeavyWeightPopup>> getHeavyWeightPopupCache() {
             synchronized (HeavyWeightPopup.class) {
-                Map cache = (Map)SwingUtilities.appContextGet(
+                Map<Window, List<HeavyWeightPopup>> cache = (Map<Window, List<HeavyWeightPopup>>)SwingUtilities.appContextGet(
                                   heavyWeightPopupCacheKey);
 
                 if (cache == null) {
-                    cache = new HashMap(2);
+                    cache = new HashMap<Window, List<HeavyWeightPopup>>(2);
                     SwingUtilities.appContextPut(heavyWeightPopupCacheKey,
                                                  cache);
                 }
@@ -399,13 +398,13 @@
          */
         private static void recycleHeavyWeightPopup(HeavyWeightPopup popup) {
             synchronized (HeavyWeightPopup.class) {
-                List cache;
-                Object window = SwingUtilities.getWindowAncestor(
+                List<HeavyWeightPopup> cache;
+                Window window = SwingUtilities.getWindowAncestor(
                                      popup.getComponent());
-                Map heavyPopupCache = getHeavyWeightPopupCache();
+                Map<Window, List<HeavyWeightPopup>> heavyPopupCache = getHeavyWeightPopupCache();
 
                 if (window instanceof Popup.DefaultFrame ||
-                                      !((Window)window).isVisible()) {
+                                      !window.isVisible()) {
                     // If the Window isn't visible, we don't cache it as we
                     // likely won't ever get a windowClosed event to clean up.
                     // We also don't cache DefaultFrames as this indicates
@@ -414,28 +413,27 @@
                     popup._dispose();
                     return;
                 } else if (heavyPopupCache.containsKey(window)) {
-                    cache = (List)heavyPopupCache.get(window);
+                    cache = heavyPopupCache.get(window);
                 } else {
-                    cache = new ArrayList();
+                    cache = new ArrayList<HeavyWeightPopup>();
                     heavyPopupCache.put(window, cache);
                     // Clean up if the Window is closed
-                    final Window w = (Window)window;
+                    final Window w = window;
 
                     w.addWindowListener(new WindowAdapter() {
                         public void windowClosed(WindowEvent e) {
-                            List popups;
+                            List<HeavyWeightPopup> popups;
 
                             synchronized(HeavyWeightPopup.class) {
-                                Map heavyPopupCache2 =
+                                Map<Window, List<HeavyWeightPopup>> heavyPopupCache2 =
                                               getHeavyWeightPopupCache();
 
-                                popups = (List)heavyPopupCache2.remove(w);
+                                popups = heavyPopupCache2.remove(w);
                             }
                             if (popups != null) {
                                 for (int counter = popups.size() - 1;
                                                    counter >= 0; counter--) {
-                                    ((HeavyWeightPopup)popups.get(counter)).
-                                                       _dispose();
+                                    popups.get(counter)._dispose();
                                 }
                             }
                         }
@@ -534,10 +532,9 @@
                 Window[] ownedWindows = w.getOwnedWindows();
                 if(ownedWindows != null) {
                     Rectangle bnd = component.getBounds();
-                    for(int i=0; i<ownedWindows.length;i++) {
-                        Window owned = ownedWindows[i];
-                        if (owned.isVisible() &&
-                            bnd.intersects(owned.getBounds())) {
+                    for (Window window : ownedWindows) {
+                        if (window.isVisible() &&
+                                bnd.intersects(window.getBounds())) {
 
                             return true;
                         }
@@ -667,11 +664,11 @@
         /**
          * Returns the cache to use for heavy weight popups.
          */
-        private static List getLightWeightPopupCache() {
-            List cache = (List)SwingUtilities.appContextGet(
+        private static List<LightWeightPopup> getLightWeightPopupCache() {
+            List<LightWeightPopup> cache = (List<LightWeightPopup>)SwingUtilities.appContextGet(
                                    lightWeightPopupCacheKey);
             if (cache == null) {
-                cache = new ArrayList();
+                cache = new ArrayList<LightWeightPopup>();
                 SwingUtilities.appContextPut(lightWeightPopupCacheKey, cache);
             }
             return cache;
@@ -682,7 +679,7 @@
          */
         private static void recycleLightWeightPopup(LightWeightPopup popup) {
             synchronized (LightWeightPopup.class) {
-                List lightPopupCache = getLightWeightPopupCache();
+                List<LightWeightPopup> lightPopupCache = getLightWeightPopupCache();
                 if (lightPopupCache.size() < MAX_CACHE_SIZE) {
                     lightPopupCache.add(popup);
                 }
@@ -695,11 +692,9 @@
          */
         private static LightWeightPopup getRecycledLightWeightPopup() {
             synchronized (LightWeightPopup.class) {
-                List lightPopupCache = getLightWeightPopupCache();
-                int c;
-                if((c = lightPopupCache.size()) > 0) {
-                    LightWeightPopup r = (LightWeightPopup)lightPopupCache.
-                                               get(0);
+                List<LightWeightPopup> lightPopupCache = getLightWeightPopupCache();
+                if (lightPopupCache.size() > 0) {
+                    LightWeightPopup r = lightPopupCache.get(0);
                     lightPopupCache.remove(0);
                     return r;
                 }
@@ -755,8 +750,7 @@
 
             component.setLocation(p.x, p.y);
             if (parent instanceof JLayeredPane) {
-                ((JLayeredPane)parent).add(component,
-                                           JLayeredPane.POPUP_LAYER, 0);
+                parent.add(component, JLayeredPane.POPUP_LAYER, 0);
             } else {
                 parent.add(component);
             }
@@ -826,12 +820,12 @@
         /**
          * Returns the cache to use for medium weight popups.
          */
-        private static List getMediumWeightPopupCache() {
-            List cache = (List)SwingUtilities.appContextGet(
+        private static List<MediumWeightPopup> getMediumWeightPopupCache() {
+            List<MediumWeightPopup> cache = (List<MediumWeightPopup>)SwingUtilities.appContextGet(
                                     mediumWeightPopupCacheKey);
 
             if (cache == null) {
-                cache = new ArrayList();
+                cache = new ArrayList<MediumWeightPopup>();
                 SwingUtilities.appContextPut(mediumWeightPopupCacheKey, cache);
             }
             return cache;
@@ -842,7 +836,7 @@
          */
         private static void recycleMediumWeightPopup(MediumWeightPopup popup) {
             synchronized (MediumWeightPopup.class) {
-                List mediumPopupCache = getMediumWeightPopupCache();
+                List<MediumWeightPopup> mediumPopupCache = getMediumWeightPopupCache();
                 if (mediumPopupCache.size() < MAX_CACHE_SIZE) {
                     mediumPopupCache.add(popup);
                 }
@@ -855,12 +849,9 @@
          */
         private static MediumWeightPopup getRecycledMediumWeightPopup() {
             synchronized (MediumWeightPopup.class) {
-                java.util.List mediumPopupCache =
-                                     getMediumWeightPopupCache();
-                int c;
-                if ((c=mediumPopupCache.size()) > 0) {
-                    MediumWeightPopup r = (MediumWeightPopup)mediumPopupCache.
-                                                 get(0);
+                List<MediumWeightPopup> mediumPopupCache = getMediumWeightPopupCache();
+                if (mediumPopupCache.size() > 0) {
+                    MediumWeightPopup r = mediumPopupCache.get(0);
                     mediumPopupCache.remove(0);
                     return r;
                 }
@@ -904,7 +895,7 @@
                                                                        x, y);
                 component.setVisible(false);
                 component.setLocation(p.x, p.y);
-                ((JLayeredPane)parent).add(component, JLayeredPane.POPUP_LAYER,
+                parent.add(component, JLayeredPane.POPUP_LAYER,
                                            0);
             } else {
                 Point p = SwingUtilities.convertScreenLocationToParent(parent,
--- a/jdk/src/share/classes/javax/swing/RepaintManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/RepaintManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -40,6 +40,8 @@
 import sun.java2d.SunGraphicsEnvironment;
 import sun.security.action.GetPropertyAction;
 
+import com.sun.java.swing.SwingUtilities3;
+
 
 /**
  * This class manages repaint requests, allowing the number
@@ -303,6 +305,11 @@
      */
     public synchronized void addInvalidComponent(JComponent invalidComponent)
     {
+        RepaintManager delegate = getDelegate(invalidComponent);
+        if (delegate != null) {
+            delegate.addInvalidComponent(invalidComponent);
+            return;
+        }
         Component validateRoot = null;
 
         /* Find the first JComponent ancestor of this component whose
@@ -373,6 +380,11 @@
      * @see #addInvalidComponent
      */
     public synchronized void removeInvalidComponent(JComponent component) {
+        RepaintManager delegate = getDelegate(component);
+        if (delegate != null) {
+            delegate.removeInvalidComponent(component);
+            return;
+        }
         if(invalidComponents != null) {
             int index = invalidComponents.indexOf(component);
             if(index != -1) {
@@ -464,6 +476,11 @@
      */
     public void addDirtyRegion(JComponent c, int x, int y, int w, int h)
     {
+        RepaintManager delegate = getDelegate(c);
+        if (delegate != null) {
+            delegate.addDirtyRegion(c, x, y, w, h);
+            return;
+        }
         addDirtyRegion0(c, x, y, w, h);
     }
 
@@ -572,7 +589,7 @@
      */
     private synchronized boolean extendDirtyRegion(
         Component c, int x, int y, int w, int h) {
-        Rectangle r = (Rectangle)dirtyComponents.get(c);
+        Rectangle r = dirtyComponents.get(c);
         if (r != null) {
             // A non-null r implies c is already marked as dirty,
             // and that the parent is valid. Therefore we can
@@ -588,9 +605,13 @@
      *  dirty.
      */
     public Rectangle getDirtyRegion(JComponent aComponent) {
-        Rectangle r = null;
+        RepaintManager delegate = getDelegate(aComponent);
+        if (delegate != null) {
+            return delegate.getDirtyRegion(aComponent);
+        }
+        Rectangle r;
         synchronized(this) {
-            r = (Rectangle)dirtyComponents.get(aComponent);
+            r = dirtyComponents.get(aComponent);
         }
         if(r == null)
             return new Rectangle(0,0,0,0);
@@ -603,6 +624,11 @@
      * completely painted during the next paintDirtyRegions() call.
      */
     public void markCompletelyDirty(JComponent aComponent) {
+        RepaintManager delegate = getDelegate(aComponent);
+        if (delegate != null) {
+            delegate.markCompletelyDirty(aComponent);
+            return;
+        }
         addDirtyRegion(aComponent,0,0,Integer.MAX_VALUE,Integer.MAX_VALUE);
     }
 
@@ -611,6 +637,11 @@
      * get painted during the next paintDirtyRegions() call.
      */
     public void markCompletelyClean(JComponent aComponent) {
+        RepaintManager delegate = getDelegate(aComponent);
+        if (delegate != null) {
+            delegate.markCompletelyClean(aComponent);
+            return;
+        }
         synchronized(this) {
                 dirtyComponents.remove(aComponent);
         }
@@ -623,6 +654,10 @@
      * if it return true.
      */
     public boolean isCompletelyDirty(JComponent aComponent) {
+        RepaintManager delegate = getDelegate(aComponent);
+        if (delegate != null) {
+            return delegate.isCompletelyDirty(aComponent);
+        }
         Rectangle r;
 
         r = getDirtyRegion(aComponent);
@@ -710,8 +745,8 @@
         Rectangle rect;
         int localBoundsX = 0;
         int localBoundsY = 0;
-        int localBoundsH = 0;
-        int localBoundsW = 0;
+        int localBoundsH;
+        int localBoundsW;
         Enumeration keys;
 
         roots = new ArrayList<Component>(count);
@@ -818,7 +853,7 @@
 
         dx = rootDx = 0;
         dy = rootDy = 0;
-        tmp.setBounds((Rectangle) dirtyComponents.get(dirtyComponent));
+        tmp.setBounds(dirtyComponents.get(dirtyComponent));
 
         // System.out.println("Collect dirty component for bound " + tmp +
         //                                   "component bounds is " + cBounds);;
@@ -865,7 +900,7 @@
             Rectangle r;
             tmp.setLocation(tmp.x + rootDx - dx,
                             tmp.y + rootDy - dy);
-            r = (Rectangle)dirtyComponents.get(rootDirtyComponent);
+            r = dirtyComponents.get(rootDirtyComponent);
             SwingUtilities.computeUnion(tmp.x,tmp.y,tmp.width,tmp.height,r);
         }
 
@@ -900,6 +935,10 @@
      * repaint manager.
      */
     public Image getOffscreenBuffer(Component c,int proposedWidth,int proposedHeight) {
+        RepaintManager delegate = getDelegate(c);
+        if (delegate != null) {
+            return delegate.getOffscreenBuffer(c, proposedWidth, proposedHeight);
+        }
         return _getOffscreenBuffer(c, proposedWidth, proposedHeight);
     }
 
@@ -917,6 +956,11 @@
    */
     public Image getVolatileOffscreenBuffer(Component c,
                                             int proposedWidth,int proposedHeight) {
+        RepaintManager delegate = getDelegate(c);
+        if (delegate != null) {
+            return delegate.getVolatileOffscreenBuffer(c, proposedWidth,
+                                                        proposedHeight);
+        }
         GraphicsConfiguration config = c.getGraphicsConfiguration();
         if (config == null) {
             config = GraphicsEnvironment.getLocalGraphicsEnvironment().
@@ -941,7 +985,7 @@
 
     private Image _getOffscreenBuffer(Component c, int proposedWidth, int proposedHeight) {
         Dimension maxSize = getDoubleBufferMaximumSize();
-        DoubleBufferInfo doubleBuffer = null;
+        DoubleBufferInfo doubleBuffer;
         int width, height;
 
         if (standardDoubleBuffer == null) {
@@ -1010,7 +1054,7 @@
         Iterator gcs = volatileMap.keySet().iterator();
         while (gcs.hasNext()) {
             GraphicsConfiguration gc = (GraphicsConfiguration)gcs.next();
-            VolatileImage image = (VolatileImage)volatileMap.get(gc);
+            VolatileImage image = volatileMap.get(gc);
             if (image.getWidth() > width || image.getHeight() > height) {
                 image.flush();
                 gcs.remove();
@@ -1178,7 +1222,7 @@
      */
     void beginPaint() {
         boolean multiThreadedPaint = false;
-        int paintDepth = 0;
+        int paintDepth;
         Thread currentThread = Thread.currentThread();
         synchronized(this) {
             paintDepth = this.paintDepth;
@@ -1550,4 +1594,11 @@
             prePaintDirtyRegions();
         }
     }
+    private RepaintManager getDelegate(Component c) {
+        RepaintManager delegate = SwingUtilities3.getDelegateRepaintManager(c);
+        if (this == delegate) {
+            delegate = null;
+        }
+        return delegate;
+    }
 }
--- a/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Wed Sep 24 08:14:37 2008 -0700
@@ -79,7 +79,7 @@
      * sorted list should be reused if possible.
      */
     transient private Container cachedRoot;
-    transient private List cachedCycle;
+    transient private List<Component> cachedCycle;
 
     // Delegate our fitness test to ContainerOrder so that we only have to
     // code the algorithm once.
@@ -111,7 +111,7 @@
         return cycle;
     }
     private int getComponentIndex(List<Component> cycle, Component aComponent) {
-        int index = 0;
+        int index;
         try {
             index = Collections.binarySearch(cycle, aComponent, comparator);
         } catch (ClassCastException e) {
@@ -130,14 +130,14 @@
         return index;
     }
 
-    private void enumerateAndSortCycle(Container focusCycleRoot, List cycle) {
+    private void enumerateAndSortCycle(Container focusCycleRoot, List<Component> cycle) {
         if (focusCycleRoot.isShowing()) {
             enumerateCycle(focusCycleRoot, cycle);
             Collections.sort(cycle, comparator);
         }
     }
 
-    private void enumerateCycle(Container container, List cycle) {
+    private void enumerateCycle(Container container, List<Component> cycle) {
         if (!(container.isVisible() && container.isDisplayable())) {
             return;
         }
@@ -145,8 +145,7 @@
         cycle.add(container);
 
         Component[] components = container.getComponents();
-        for (int i = 0; i < components.length; i++) {
-            Component comp = components[i];
+        for (Component comp : components) {
             if (comp instanceof Container) {
                 Container cont = (Container)comp;
 
@@ -385,8 +384,8 @@
             return getLastComponent(aContainer);
         }
 
-        Component comp = null;
-        Component tryComp = null;
+        Component comp;
+        Component tryComp;
 
         for (index--; index>=0; index--) {
             comp = cycle.get(index);
@@ -442,8 +441,7 @@
         }
         if (log.isLoggable(Level.FINE)) log.fine("### Cycle is " + cycle);
 
-        for (int i = 0; i < cycle.size(); i++) {
-            Component comp = cycle.get(i);
+        for (Component comp : cycle) {
             if (accept(comp)) {
                 return comp;
             } else if (comp instanceof Container && comp != aContainer) {
--- a/jdk/src/share/classes/javax/swing/SpringLayout.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/SpringLayout.java	Wed Sep 24 08:14:37 2008 -0700
@@ -185,11 +185,11 @@
  * @since       1.4
  */
 public class SpringLayout implements LayoutManager2 {
-    private Map componentConstraints = new HashMap();
+    private Map<Component, Constraints> componentConstraints = new HashMap<Component, Constraints>();
 
     private Spring cyclicReference = Spring.constant(Spring.UNSET);
-    private Set cyclicSprings;
-    private Set acyclicSprings;
+    private Set<Spring> cyclicSprings;
+    private Set<Spring> acyclicSprings;
 
 
     /**
@@ -415,8 +415,7 @@
             }
             if (!valid) {
                 String[] all = horizontal ? ALL_HORIZONTAL : ALL_VERTICAL;
-                for (int i = 0; i < all.length; i++) {
-                    String s = all[i];
+                for (String s : all) {
                     if (!history.contains(s)) {
                         setConstraint(s, null);
                     }
@@ -822,8 +821,7 @@
        /*pp*/ void reset() {
            Spring[] allSprings = {x, y, width, height, east, south,
                horizontalCenter, verticalCenter, baseline};
-           for (int i = 0; i < allSprings.length; i++) {
-               Spring s = allSprings[i];
+           for (Spring s : allSprings) {
                if (s != null) {
                    s.setValue(Spring.UNSET);
                }
@@ -881,8 +879,8 @@
     public SpringLayout() {}
 
     private void resetCyclicStatuses() {
-        cyclicSprings = new HashSet();
-        acyclicSprings = new HashSet();
+        cyclicSprings = new HashSet<Spring>();
+        acyclicSprings = new HashSet<Spring>();
     }
 
     private void setParent(Container p) {
@@ -1145,7 +1143,7 @@
      * @return      the constraints for the specified component
      */
     public Constraints getConstraints(Component c) {
-       Constraints result = (Constraints)componentConstraints.get(c);
+       Constraints result = componentConstraints.get(c);
        if (result == null) {
            if (c instanceof javax.swing.JComponent) {
                 Object cp = ((javax.swing.JComponent)c).getClientProperty(SpringLayout.class);
--- a/jdk/src/share/classes/javax/swing/SwingUtilities.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/SwingUtilities.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2008 Sun Microsystems, 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
@@ -108,11 +108,8 @@
      * Return true if <code>a</code> contains <code>b</code>
      */
     public static final boolean isRectangleContainingRectangle(Rectangle a,Rectangle b) {
-        if (b.x >= a.x && (b.x + b.width) <= (a.x + a.width) &&
-            b.y >= a.y && (b.y + b.height) <= (a.y + a.height)) {
-            return true;
-        }
-        return false;
+        return b.x >= a.x && (b.x + b.width) <= (a.x + a.width) &&
+                b.y >= a.y && (b.y + b.height) <= (a.y + a.height);
     }
 
     /**
@@ -272,8 +269,7 @@
         }
         if (parent instanceof Container) {
             Component components[] = ((Container)parent).getComponents();
-            for (int i = 0 ; i < components.length ; i++) {
-                Component comp = components[i];
+            for (Component comp : components) {
                 if (comp != null && comp.isVisible()) {
                     Point loc = comp.getLocation();
                     if (comp instanceof Container) {
@@ -376,8 +372,8 @@
 
             do {
                 if(c instanceof JComponent) {
-                    x = ((JComponent)c).getX();
-                    y = ((JComponent)c).getY();
+                    x = c.getX();
+                    y = c.getY();
                 } else if(c instanceof java.applet.Applet ||
                           c instanceof java.awt.Window) {
                     try {
@@ -415,8 +411,8 @@
 
         do {
             if(c instanceof JComponent) {
-                x = ((JComponent)c).getX();
-                y = ((JComponent)c).getY();
+                x = c.getX();
+                y = c.getY();
             }  else if(c instanceof java.applet.Applet ||
                        c instanceof java.awt.Window) {
                 try {
@@ -974,12 +970,13 @@
 
         boolean textIsEmpty = (text == null) || text.equals("");
         int lsb = 0;
+        int rsb = 0;
         /* Unless both text and icon are non-null, we effectively ignore
          * the value of textIconGap.
          */
         int gap;
 
-        View v = null;
+        View v;
         if (textIsEmpty) {
             textR.width = textR.height = 0;
             text = "";
@@ -1015,7 +1012,7 @@
                 if (lsb < 0) {
                     textR.width -= lsb;
                 }
-                int rsb = SwingUtilities2.getRightSideBearing(c, fm, text);
+                rsb = SwingUtilities2.getRightSideBearing(c, fm, text);
                 if (rsb > 0) {
                     textR.width += rsb;
                 }
@@ -1118,6 +1115,11 @@
             // lsb is negative. Shift the x location so that the text is
             // visually drawn at the right location.
             textR.x -= lsb;
+
+            textR.width += lsb;
+        }
+        if (rsb > 0) {
+            textR.width -= rsb;
         }
 
         return text;
@@ -1242,8 +1244,8 @@
             children = ((Container)c).getComponents();
         }
         if (children != null) {
-            for(int i = 0; i < children.length; i++) {
-                updateComponentTreeUI0(children[i]);
+            for (Component child : children) {
+                updateComponentTreeUI0(child);
             }
         }
     }
@@ -1696,7 +1698,7 @@
      */
     public static void replaceUIActionMap(JComponent component,
                                           ActionMap uiActionMap) {
-        ActionMap map = component.getActionMap((uiActionMap != null));;
+        ActionMap map = component.getActionMap((uiActionMap != null));
 
         while (map != null) {
             ActionMap parent = map.getParent();
@@ -1764,8 +1766,7 @@
          */
         void installListeners() {
             Window[] windows = getOwnedWindows();
-            for (int ind = 0; ind < windows.length; ind++){
-                Window window = windows[ind];
+            for (Window window : windows) {
                 if (window != null) {
                     window.removeWindowListener(this);
                     window.addWindowListener(this);
@@ -1780,8 +1781,7 @@
         public void windowClosed(WindowEvent e) {
             synchronized(getTreeLock()) {
                 Window[] windows = getOwnedWindows();
-                for (int ind = 0; ind < windows.length; ind++) {
-                    Window window = windows[ind];
+                for (Window window : windows) {
                     if (window != null) {
                         if (window.isDisplayable()) {
                             return;
@@ -1869,7 +1869,7 @@
     }
 
 
-    static Class loadSystemClass(String className) throws ClassNotFoundException {
+    static Class<?> loadSystemClass(String className) throws ClassNotFoundException {
         return Class.forName(className, true, Thread.currentThread().
                              getContextClassLoader());
     }
--- a/jdk/src/share/classes/javax/swing/Timer.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/Timer.java	Wed Sep 24 08:14:37 2008 -0700
@@ -270,8 +270,7 @@
      * @since 1.4
      */
     public ActionListener[] getActionListeners() {
-        return (ActionListener[])listenerList.getListeners(
-                ActionListener.class);
+        return listenerList.getListeners(ActionListener.class);
     }
 
 
--- a/jdk/src/share/classes/javax/swing/TimerQueue.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/TimerQueue.java	Wed Sep 24 08:14:37 2008 -0700
@@ -31,6 +31,7 @@
 
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.concurrent.locks.*;
 import java.util.concurrent.atomic.AtomicLong;
 import sun.awt.AppContext;
 
@@ -52,7 +53,8 @@
         new StringBuffer("TimerQueue.expiredTimersKey");
 
     private final DelayQueue<DelayedTimer> queue;
-    volatile boolean running;
+    private volatile boolean running;
+    private final Lock runningLock;
 
     /* Lock object used in place of class object for synchronization.
      * (4187686)
@@ -69,7 +71,8 @@
         super();
         queue = new DelayQueue<DelayedTimer>();
         // Now start the TimerQueue thread.
-        start();
+        runningLock = new ReentrantLock();
+        startIfNeeded();
     }
 
 
@@ -87,33 +90,30 @@
     }
 
 
-    synchronized void start() {
-        if (running) {
-            throw new RuntimeException("Can't start a TimerQueue " +
-                                       "that is already running");
-        }
-        else {
-            final ThreadGroup threadGroup =
-                AppContext.getAppContext().getThreadGroup();
-            java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction() {
-                public Object run() {
-                    Thread timerThread = new Thread(threadGroup, TimerQueue.this,
-                                                    "TimerQueue");
-                    timerThread.setDaemon(true);
-                    timerThread.setPriority(Thread.NORM_PRIORITY);
-                    timerThread.start();
-                    return null;
-                }
-            });
-            running = true;
+    void startIfNeeded() {
+        if (! running) {
+            runningLock.lock();
+            try {
+                final ThreadGroup threadGroup =
+                    AppContext.getAppContext().getThreadGroup();
+                java.security.AccessController.doPrivileged(
+                    new java.security.PrivilegedAction<Object>() {
+                    public Object run() {
+                        Thread timerThread = new Thread(threadGroup, TimerQueue.this,
+                                                        "TimerQueue");
+                        timerThread.setDaemon(true);
+                        timerThread.setPriority(Thread.NORM_PRIORITY);
+                        timerThread.start();
+                        return null;
+                    }
+                });
+                running = true;
+            } finally {
+                runningLock.unlock();
+            }
         }
     }
 
-     synchronized void stop() {
-         running = false;
-     }
-
     void addTimer(Timer timer, long delayMillis) {
         timer.getLock().lock();
         try {
@@ -164,6 +164,7 @@
 
 
     public void run() {
+        runningLock.lock();
         try {
             while (running) {
                 try {
@@ -195,14 +196,14 @@
             }
         }
         catch (ThreadDeath td) {
-            synchronized (this) {
-                running = false;
-                // Mark all the timers we contain as not being queued.
-                for (DelayedTimer delayedTimer : queue) {
-                    delayedTimer.getTimer().cancelEvent();
-                }
-                throw td;
+            // Mark all the timers we contain as not being queued.
+            for (DelayedTimer delayedTimer : queue) {
+                delayedTimer.getTimer().cancelEvent();
             }
+            throw td;
+        } finally {
+            running = false;
+            runningLock.unlock();
         }
     }
 
@@ -225,7 +226,7 @@
     /**
      * Returns nanosecond time offset by origin
      */
-    private final static long now() {
+    private static long now() {
         return System.nanoTime() - NANO_ORIGIN;
     }
 
--- a/jdk/src/share/classes/javax/swing/UIDefaults.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/UIDefaults.java	Wed Sep 24 08:14:37 2008 -0700
@@ -72,11 +72,11 @@
  */
 public class UIDefaults extends Hashtable<Object,Object>
 {
-    private static final Object PENDING = new String("Pending");
+    private static final Object PENDING = "Pending";
 
     private SwingPropertyChangeSupport changeSupport;
 
-    private Vector resourceBundles;
+    private Vector<String> resourceBundles;
 
     private Locale defaultLocale = Locale.getDefault();
 
@@ -86,7 +86,7 @@
      * Access to this should be done while holding a lock on the
      * UIDefaults, eg synchronized(this).
      */
-    private Map resourceCache;
+    private Map<Locale, Map<String, Object>> resourceCache;
 
     /**
      * Creates an empty defaults table.
@@ -106,7 +106,7 @@
      */
     public UIDefaults(int initialCapacity, float loadFactor) {
         super(initialCapacity, loadFactor);
-        resourceCache = new HashMap();
+        resourceCache = new HashMap<Locale, Map<String, Object>>();
     }
 
 
@@ -281,24 +281,24 @@
             if( defaultLocale == null )
                 return null;
             else
-                l = (Locale)defaultLocale;
+                l = defaultLocale;
         }
 
         synchronized(this) {
-            return getResourceCache(l).get((String)key);
+            return getResourceCache(l).get(key);
         }
     }
 
     /**
      * Returns a Map of the known resources for the given locale.
      */
-    private Map getResourceCache(Locale l) {
-        Map values = (Map)resourceCache.get(l);
+    private Map<String, Object> getResourceCache(Locale l) {
+        Map<String, Object> values = resourceCache.get(l);
 
         if (values == null) {
-            values = new HashMap();
+            values = new HashMap<String, Object>();
             for (int i=resourceBundles.size()-1; i >= 0; i--) {
-                String bundleName = (String)resourceBundles.get(i);
+                String bundleName = resourceBundles.get(i);
                 try {
                     Control c = CoreResourceBundleControl.getRBControlInstance(bundleName);
                     ResourceBundle b;
@@ -751,7 +751,7 @@
         Object cl = get("ClassLoader");
         ClassLoader uiClassLoader =
             (cl != null) ? (ClassLoader)cl : target.getClass().getClassLoader();
-        Class uiClass = getUIClass(target.getUIClassID(), uiClassLoader);
+        Class<? extends ComponentUI> uiClass = getUIClass(target.getUIClassID(), uiClassLoader);
         Object uiObject = null;
 
         if (uiClass == null) {
@@ -761,8 +761,7 @@
             try {
                 Method m = (Method)get(uiClass);
                 if (m == null) {
-                    Class acClass = javax.swing.JComponent.class;
-                    m = uiClass.getMethod("createUI", new Class[]{acClass});
+                    m = uiClass.getMethod("createUI", new Class[]{JComponent.class});
                     put(uiClass, m);
                 }
                 uiObject = MethodUtil.invoke(m, null, new Object[]{target});
@@ -862,7 +861,7 @@
             return;
         }
         if( resourceBundles == null ) {
-            resourceBundles = new Vector(5);
+            resourceBundles = new Vector<String>(5);
         }
         if (!resourceBundles.contains(bundleName)) {
             resourceBundles.add( bundleName );
@@ -1064,7 +1063,7 @@
             className = c;
             methodName = m;
             if (o != null) {
-                args = (Object[])o.clone();
+                args = o.clone();
             }
         }
 
@@ -1079,10 +1078,10 @@
             // In order to pick up the security policy in effect at the
             // time of creation we use a doPrivileged with the
             // AccessControlContext that was in place when this was created.
-            return AccessController.doPrivileged(new PrivilegedAction() {
+            return AccessController.doPrivileged(new PrivilegedAction<Object>() {
                 public Object run() {
                     try {
-                        Class c;
+                        Class<?> c;
                         Object cl;
                         // See if we should use a separate ClassLoader
                         if (table == null || !((cl = table.get("ClassLoader"))
--- a/jdk/src/share/classes/javax/swing/UIManager.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/UIManager.java	Wed Sep 24 08:14:37 2008 -0700
@@ -191,7 +191,7 @@
         MultiUIDefaults multiUIDefaults = new MultiUIDefaults(tables);
         LookAndFeel lookAndFeel;
         LookAndFeel multiLookAndFeel = null;
-        Vector auxLookAndFeels = null;
+        Vector<LookAndFeel> auxLookAndFeels = null;
         SwingPropertyChangeSupport changeSupport;
 
         UIDefaults getLookAndFeelDefaults() { return tables[0]; }
@@ -378,7 +378,7 @@
     private static LookAndFeelInfo[] installedLAFs;
 
     static {
-        ArrayList iLAFs = new ArrayList(4);
+        ArrayList<LookAndFeelInfo> iLAFs = new ArrayList<LookAndFeelInfo>(4);
         iLAFs.add(new LookAndFeelInfo(
                       "Metal", "javax.swing.plaf.metal.MetalLookAndFeel"));
         iLAFs.add(new LookAndFeelInfo("CDE/Motif",
@@ -400,8 +400,7 @@
             iLAFs.add(new LookAndFeelInfo("GTK+",
                   "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"));
         }
-        installedLAFs = (LookAndFeelInfo[])iLAFs.toArray(
-                        new LookAndFeelInfo[iLAFs.size()]);
+        installedLAFs = iLAFs.toArray(new LookAndFeelInfo[iLAFs.size()]);
     }
 
 
@@ -640,7 +639,7 @@
      * @see #getSystemLookAndFeelClassName
      */
     public static String getCrossPlatformLookAndFeelClassName() {
-        String laf = (String)AccessController.doPrivileged(
+        String laf = AccessController.doPrivileged(
                              new GetPropertyAction("swing.crossplatformlaf"));
         if (laf != null) {
             return laf;
@@ -1079,9 +1078,9 @@
             // for that.
             return;
         }
-        Vector v = getLAFState().auxLookAndFeels;
+        Vector<LookAndFeel> v = getLAFState().auxLookAndFeels;
         if (v == null) {
-            v = new Vector();
+            v = new Vector<LookAndFeel>();
         }
 
         if (!v.contains(laf)) {
@@ -1115,7 +1114,7 @@
 
         boolean result;
 
-        Vector v = getLAFState().auxLookAndFeels;
+        Vector<LookAndFeel> v = getLAFState().auxLookAndFeels;
         if ((v == null) || (v.size() == 0)) {
             return false;
         }
@@ -1151,14 +1150,14 @@
     static public LookAndFeel[] getAuxiliaryLookAndFeels() {
         maybeInitialize();
 
-        Vector v = getLAFState().auxLookAndFeels;
+        Vector<LookAndFeel> v = getLAFState().auxLookAndFeels;
         if ((v == null) || (v.size() == 0)) {
             return null;
         }
         else {
             LookAndFeel[] rv = new LookAndFeel[v.size()];
             for (int i = 0; i < rv.length; i++) {
-                rv[i] = (LookAndFeel)v.elementAt(i);
+                rv[i] = v.elementAt(i);
             }
             return rv;
         }
@@ -1225,7 +1224,7 @@
             final Properties props = new Properties();
 
             java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction() {
+                new java.security.PrivilegedAction<Object>() {
                 public Object run() {
                     try {
                         File file = new File(makeSwingPropertiesFilename());
@@ -1284,7 +1283,7 @@
          * property.  For example given "swing.installedlafs=motif,windows"
          * lafs = {"motif", "windows"}.
          */
-        Vector lafs = new Vector();
+        Vector<String> lafs = new Vector<String>();
         StringTokenizer st = new StringTokenizer(ilafsString, ",", false);
         while (st.hasMoreTokens()) {
             lafs.addElement(st.nextToken());
@@ -1294,9 +1293,8 @@
          * list.  If they both exist then add a LookAndFeelInfo to
          * the installedLafs array.
          */
-        Vector ilafs = new Vector(lafs.size());
-        for(int i = 0; i < lafs.size(); i++) {
-            String laf = (String)lafs.elementAt(i);
+        Vector<LookAndFeelInfo> ilafs = new Vector<LookAndFeelInfo>(lafs.size());
+        for (String laf : lafs) {
             String name = swingProps.getProperty(makeInstalledLAFKey(laf, "name"), laf);
             String cls = swingProps.getProperty(makeInstalledLAFKey(laf, "class"));
             if (cls != null) {
@@ -1306,7 +1304,7 @@
 
         installedLAFs = new LookAndFeelInfo[ilafs.size()];
         for(int i = 0; i < ilafs.size(); i++) {
-            installedLAFs[i] = (LookAndFeelInfo)(ilafs.elementAt(i));
+            installedLAFs[i] = ilafs.elementAt(i);
         }
     }
 
@@ -1350,7 +1348,7 @@
             return;
         }
 
-        Vector auxLookAndFeels = new Vector();
+        Vector<LookAndFeel> auxLookAndFeels = new Vector<LookAndFeel>();
 
         StringTokenizer p = new StringTokenizer(auxLookAndFeelNames,",");
         String factoryName;
@@ -1451,7 +1449,7 @@
                         Component c = e.getComponent();
 
                         if ((!(c instanceof JComponent) ||
-                             (c != null && !((JComponent)c).isEnabled())) &&
+                             (c != null && !c.isEnabled())) &&
                                 JComponent.KeyboardState.shouldProcess(e) &&
                                 SwingUtilities.processKeyBindings(e)) {
                             e.consume();
--- a/jdk/src/share/classes/javax/swing/border/CompoundBorder.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/border/CompoundBorder.java	Wed Sep 24 08:14:37 2008 -0700
@@ -79,10 +79,13 @@
     }
 
     /**
-     * Returns whether or not this compound border is opaque.
-     * Returns true if both the inside and outside borders are
-     * non-null and opaque; returns false otherwise.
+     * Returns whether or not the compound border is opaque.
+     *
+     * @return {@code true} if the inside and outside borders
+     *         are each either {@code null} or opaque;
+     *         or {@code false} otherwise
      */
+    @Override
     public boolean isBorderOpaque() {
         return (outsideBorder == null || outsideBorder.isBorderOpaque()) &&
                (insideBorder == null || insideBorder.isBorderOpaque());
--- a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -160,7 +160,9 @@
       *         is editing
       */
     public ColorSelectionModel getColorSelectionModel() {
-        return chooser.getSelectionModel();
+        return (this.chooser != null)
+                ? this.chooser.getSelectionModel()
+                : null;
     }
 
     /**
@@ -168,7 +170,17 @@
      * @return the <code>Color</code> that is selected
      */
     protected Color getColorFromModel() {
-        return getColorSelectionModel().getSelectedColor();
+        ColorSelectionModel model = getColorSelectionModel();
+        return (model != null)
+                ? model.getSelectedColor()
+                : null;
+    }
+
+    void setSelectedColor(Color color) {
+        ColorSelectionModel model = getColorSelectionModel();
+        if (model != null) {
+            model.setSelectedColor(color);
+        }
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java	Wed Jul 05 16:41:36 2017 +0200
+++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java	Wed Sep 24 08:14:37 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2001 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2008 Sun Microsystems, 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
@@ -25,9 +25,7 @@
 
 package javax.swing.colorchooser;
 
-import javax.swing.*;
-
-
+import javax.swing.JComponent;
 
 /**
  * A class designed to produce preconfigured "accessory" objects to
@@ -49,16 +47,17 @@
 
     private ColorChooserComponentFactory() { } // can't instantiate
 
-
     public static AbstractColorChooserPanel[] getDefaultChooserPanels() {
-        AbstractColorChooserPanel[] choosers = { new DefaultSwatchChooserPanel(),
-                                                 new DefaultHSBChooserPanel(),
-                                                 new DefaultRGBChooserPanel() };
-        return choosers;
+        return new AbstractColorChooserPanel[] {
+                new DefaultSwatchChooserPanel(),
+                new ColorChooserPanel(new ColorModelHSV()),
+                new ColorChooserPanel(new ColorModelHSL()),
+                new ColorChooserPanel(new ColorModel()),
+                new ColorChooserPanel(new ColorModelCMYK()),
+        };
     }
 
     public static JComponent getPreviewPanel() {
         return new DefaultPreviewPanel();
     }
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserPanel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2008 Sun Microsystems, 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package javax.swing.colorchooser;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+
+final class ColorChooserPanel extends AbstractColorChooserPanel implements PropertyChangeListener {
+
+    private static final int MASK = 0xFF000000;
+    private final ColorModel model;
+    private final ColorPanel panel;
+    private final DiagramComponent slider;
+    private final DiagramComponent diagram;
+    private final JFormattedTextField text;
+    private final JLabel label;
+
+    ColorChooserPanel(ColorModel model) {
+        this.model = model;
+        this.panel = new ColorPanel(this.model);
+        this.slider = new DiagramComponent(this.panel, false);
+        this.diagram = new DiagramComponent(this.panel, true);
+        this.text = new JFormattedTextField();
+        this.label = new JLabel(null, null, SwingConstants.RIGHT);
+        ValueFormatter.init(6, true, this.text);
+    }
+
+    @Override
+    public void updateChooser() {
+        Color color = getColorFromModel();
+        if (color != null) {
+            this.panel.setColor(color);
+            this.text.setValue(Integer.valueOf(color.getRGB()));
+            this.slider.repaint();
+            this.diagram.repaint();
+        }
+    }
+
+    @Override
+    protected void buildChooser() {
+        if (0 == getComponentCount()) {
+            setLayout(new GridBagLayout());
+
+            GridBagConstraints gbc = new GridBagConstraints();
+
+            gbc.gridx = 3;
+            gbc.gridwidth = 2;
+            gbc.weighty = 1.0;
+            gbc.anchor = GridBagConstraints.NORTH;
+            gbc.fill = GridBagConstraints.HORIZONTAL;
+            gbc.insets.top = 10;
+            gbc.insets.right = 10;
+            add(this.panel, gbc);
+
+            gbc.gridwidth = 1;
+            gbc.weightx = 1.0;
+            gbc.weighty = 0.0;
+            gbc.anchor = GridBagConstraints.CENTER;
+            gbc.insets.right = 5;
+            gbc.insets.bottom = 10;
+            add(this.label, gbc);
+
+            gbc.gridx = 4;
+            gbc.weightx = 0.0;
+            gbc.insets.right = 10;
+            add(this.text, gbc);
+
+            gbc.gridx = 2;
+            gbc.gridheight = 2;
+            gbc.anchor = GridBagConstraints.NORTH;
+            gbc.ipadx = this.text.getPreferredSize().height;
+            gbc.ipady = getPreferredSize().height;
+            add(this.slider, gbc);
+
+            gbc.gridx = 1;
+            gbc.insets.left = 10;
+            gbc.ipadx = gbc.ipady;
+            add(this.diagram, gbc);
+
+            this.label.setLabelFor(this.text);
+            this.text.addPropertyChangeListener("value", this); // NON-NLS: the property name
+            this.slider.setBorder(this.text.getBorder());
+            this.diagram.setBorder(this.text.getBorder());
+
+            setInheritsPopupMenu(this, true); // CR:4966112
+        }
+        String label = this.model.getText(this, "HexCode"); // NON-NLS: suffix
+        boolean visible = label != null;
+        this.text.setVisible(visible);
+        this.label.setVisible(visible);
+        if (visible) {
+            this.label.setText(label);
+            int mnemonic = this.model.getInteger(this, "HexCodeMnemonic"); // NON-NLS: suffix
+            if (mnemonic > 0) {
+                this.label.setDisplayedMnemonic(mnemonic);
+                mnemonic = this.model.getInteger(this, "HexCodeMnemonicIndex"); // NON-NLS: suffix
+                if (mnemonic >= 0) {
+                    this.label.setDisplayedMnemonicIndex(mnemonic);
+                }
+            }
+        }
+        this.panel.buildPanel();
+    }
+
+    @Override
+    public String getDisplayName() {
+        return this.model.getText(this, "Name"); // NON-NLS: suffix
+    }
+
+    @Override
+    public int getMnemonic() {
+        return this.model.getInteger(this, "Mnemonic"); // NON-NLS: suffix
+    }
+
+    @Override
+    public int getDisplayedMnemonicIndex() {
+        return this.model.getInteger(this, "DisplayedMnemonicIndex"); // NON-NLS: suffix
+    }
+
+    @Override
+    public Icon getSmallDisplayIcon() {
+        return null;
+    }
+
+    @Override
+    public Icon getLargeDisplayIcon() {
+        return null;
+    }
+
+    public void propertyChange(PropertyChangeEvent event) {
+        ColorSelectionModel model = getColorSelectionModel();
+        if (model != null) {
+            Object object = event.getNewValue();
+            if (object instanceof Integer) {
+                int value = MASK & model.getSelectedColor().getRGB() | (Integer) object;
+                model.setSelectedColor(new Color(value, true));
+            }
+        }
+        this.text.selectAll();
+    }
+
+    /**
+     * Allows to show context popup for all components recursively.
+     *
+     * @param component  the root component of the tree
+     * @param value      whether or not the popup menu is inherited
+     */
+    private static void setInheritsPopupMenu(JComponent component, boolean value) {
+        component.setInheritsPopupMenu(value);
+        for (Object object : component.getComponents()) {
+            if (object instanceof JComponent) {
+                setInheritsPopupMenu((JComponent) object, value);
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorModel.java	Wed Sep 24 08:14:37 2008 -0700
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2008 Sun Microsystems, 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package javax.swing.colorchooser;
+
+import java.awt.Component;
+import javax.swing.UIManager;
+
+class ColorModel {
+
+    private final String prefix;
+    private final String[] labels;
+
+    ColorModel(String name, String... labels) {
+        this.prefix = "ColorChooser." + name; // NON-NLS: default prefix
+        this.labels = labels;
+    }
+
+    ColorModel() {
+        this("rgb", "Red", "Green", "Blue", "Alpha"); // NON-NLS: components
+    }
+
+    void setColor(int color, float[] model) {
+        model[0] = normalize(color >> 16);
+        model[1] = normalize(color >> 8);
+        model[2] = normalize(color);
+        model[3] = normalize(color >> 24);
+    }
+
+    int getColor(float[] model) {
+        return to8bit(model[2]) | (to8bit(model[1]) << 8) | (to8bit(model[0]) << 16) | (to8bit(model[3]) << 24);
+    }
+
+    int getCount() {
+        return this.labels.length;
+    }
+
+    int getMinimum(int index) {
+        return 0;
+    }
+
+    int getMaximum(int index) {
+        return 255;
+    }
+
+    float getDefault(int index) {
+        return 0.0f;
+    }
+
+    final String getLabel(Component component, int index) {
+        return getText(component, this.labels[index]);
+    }
+
+    private static float normalize(int value) {
+        return (float) (value & 0xFF) / 255.0f;
+    }
+
+    private static int to8bit(float value) {
+        return (int) (255.0f * value);
+    }
+
+    final String getText(Component component, String suffix) {
+        return UIManager.getString(this.prefix + suffix + "Text", component.getLocale()); // NON-NLS: default postfix
+    }
+
+    final int getInteger(Component component, String suffix) {
+        Object value = UIManager.get(this.prefix + suffix, component.getLocale());
+        if (value instanceof Integer) {
+            return (Integer) value;
+        }
+        if (value instanceof String) {
+            try {
+                return Integer.parseInt((String) value);
+            }
+            catch (NumberFormatException exception) {
+            }
+        }
+        return -1;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorModelCMYK.java	Wed Sep 24 08:14:37 2008 -0700
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2008 Sun Microsystems, 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package javax.swing.colorchooser;
+
+final class ColorModelCMYK extends ColorModel {
+
+    ColorModelCMYK() {
+        super("cmyk", "Cyan", "Magenta", "Yellow", "Black", "Alpha"); // NON-NLS: components
+    }
+
+    @Override
+    void setColor(int color, float[] space) {
+        super.setColor(color, space);
+        space[4] = space[3];
+        RGBtoCMYK(space, space);
+    }
+
+    @Override
+    int getColor(float[] space) {
+        CMYKtoRGB(space, space);
+        space[3] = space[4];
+        return super.getColor(space);
+    }
+
+    /**
+     * Converts CMYK components of a color to a set of RGB components.
+     *
+     * @param cmyk  a float array with length equal to
+     *              the number of CMYK components
+     * @param rgb   a float array with length of at least 3
+     *              that contains RGB components of a color
+     * @return a float array that contains RGB components
+     */
+    private static float[] CMYKtoRGB(float[] cmyk, float[] rgb) {
+        if (rgb == null) {
+            rgb = new float[3];
+        }
+        rgb[0] = 1.0f + cmyk[0] * cmyk[3] - cmyk[3] - cmyk[0];
+        rgb[1] = 1.0f + cmyk[1] * cmyk[3] - cmyk[3] - cmyk[1];
+        rgb[2] = 1.0f + cmyk[2] * cmyk[3] - cmyk[3] - cmyk[2];
+        return rgb;
+    }
+
+    /**
+     * Converts RGB components of a color to a set of CMYK components.
+     *
+     * @param rgb   a float array with length of at least 3
+     *              that contains RGB components of a color
+     * @param cmyk  a float array with length equal to
+     *              the number of CMYK components
+     * @return a float array that contains CMYK components
+     */
+    private static float[] RGBtoCMYK(float[] rgb, float[] cmyk) {
+        if (cmyk == null) {
+            cmyk = new float[4];
+        }
+        float max = ColorModelHSL.max(rgb[0], rgb[1], rgb[2]);
+        if (max > 0.0f) {
+            cmyk[0] = 1.0f - rgb[0] / max;
+            cmyk[1] = 1.0f - rgb[1] / max;
+            cmyk[2] = 1.0f - rgb[2] / max;
+        }
+        else {
+            cmyk[0] = 0.0f;
+            cmyk[1] = 0.0f;
+            cmyk[2] = 0.0f;
+        }
+        cmyk[3] = 1.0f - max;
+        return cmyk;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorModelHSL.java	Wed Sep 24 08:14:37 2008 -0700
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2008 Sun Microsystems, 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package javax.swing.colorchooser;
+
+final class ColorModelHSL extends ColorModel {
+
+    ColorModelHSL() {
+        super("hsl", "Hue", "Saturation", "Lightness", "Transparency"); // NON-NLS: components
+    }
+
+    @Override
+    void setColor(int color, float[] space) {
+        super.setColor(color, space);
+        RGBtoHSL(space, space);
+        space[3] = 1.0f - space[3];
+    }
+
+    @Override
+    int getColor(float[] space) {
+        space[3] = 1.0f - space[3];
+        HSLtoRGB(space, space);
+        return super.getColor(space);
+    }
+
+    @Override
+    int getMaximum(int index) {
+        return (index == 0) ? 360 : 100;
+    }
+
+    @Override
+    float getDefault(int index) {
+        return (index == 0) ? -1.0f : (index == 2) ? 0.5f : 1.0f;
+    }
+
+    /**
+     * Converts HSL components of a color to a set of RGB components.
+     *
+     * @param hsl  a float array with length equal to
+     *             the number of HSL components
+     * @param rgb  a float array with length of at least 3
+     *             that contains RGB components of a color
+     * @return a float array that contains RGB components
+     */
+    private static float[] HSLtoRGB(float[] hsl, float[] rgb) {
+        if (rgb == null) {
+            rgb = new float[3];
+        }
+        float hue = hsl[0];
+        float saturation = hsl[1];
+        float lightness = hsl[2];
+
+        if (saturation > 0.0f) {
+            hue = (hue < 1.0f) ? hue * 6.0f : 0.0f;
+            float q = lightness + saturation * ((lightness > 0.5f) ? 1.0f - lightness : lightness);
+            float p = 2.0f * lightness - q;
+            rgb[0]= normalize(q, p, (hue < 4.0f) ? (hue + 2.0f) : (hue - 4.0f));
+            rgb[1]= normalize(q, p, hue);
+            rgb[2]= normalize(q, p, (hue < 2.0f) ? (hue + 4.0f) : (hue - 2.0f));
+        }
+        else {
+            rgb[0] = lightness;
+            rgb[1] = lightness;
+            rgb[2] = lightness;
+        }
+        return rgb;
+    }
+
+    /**
+     * Converts RGB components of a color to a set of HSL components.
+     *
+     * @param rgb  a float array with length of at least 3
+     *             that contains RGB components of a color
+     * @param hsl  a float array with length equal to
+     *             the number of HSL components
+     * @return a float array that contains HSL components
+     */
+    private static float[] RGBtoHSL(float[] rgb, float[] hsl) {
+        if (hsl == null) {
+            hsl = new float[3];
+        }
+        float max = max(rgb[0], rgb[1], rgb[2]);
+        float min = min(rgb[0], rgb[1], rgb[2]);
+
+        float summa = max + min;
+        float saturation = max - min;
+        if (saturation > 0.0f) {
+            saturation /= (summa > 1.0f)
+                    ? 2.0f - summa
+                    : summa;
+        }
+        hsl[0] = getHue(rgb[0], rgb[1], rgb[2], max, min);
+        hsl[1] = saturation;
+        hsl[2] = summa / 2.0f;
+        return hsl;
+    }
+
+    /**
+     * Returns the smaller of three color components.
+     *
+     * @param red    the red component of the color
+     * @param green  the green component of the color
+     * @param blue   the blue component of the color
+     * @return the smaller of {@code red}, {@code green} and {@code blue}
+     */
+    static float min(float red, float green, float blue) {
+        float min = (red < green) ? red : green;
+        return (min < blue) ? min : blue;
+    }
+
+    /**
+     * Returns the larger of three color components.
+     *
+     * @param red    the red component of the color
+     * @param green  the green component of the color
+     * @param blue   the blue component of the color
+     * @return the larger of {@code red}, {@code green} and {@code blue}
+     */
+    static float max(float red, float green, float blue) {
+        float max = (red > green) ? red : green;
+        return (max > blue) ? max : blue;
+    }
+
+    /**