diff --git a/.hgtags b/.hgtags index d028bdc8cd17474b9bf8a689f6a3b0fca0b3f738..e73ad87229fb5816f79d4a443023d91092fc430e 100644 --- a/.hgtags +++ b/.hgtags @@ -222,3 +222,4 @@ a2a2a91075ad85becbe10a39d7fd04ef9bea8df5 jdk8-b92 c4908732fef5235f1b98cafe0ce507771ef7892c jdk8-b98 6a099a36589bd933957272ba63e5263bede29971 jdk8-b99 5be9c5bfcfe9b2a40412b4fb364377d49de014eb jdk8-b100 +6901612328239fbd471d20823113c1cf3fdaebee jdk8-b101 diff --git a/make/sun/javazic/tzdata/VERSION b/make/sun/javazic/tzdata/VERSION index 8ad1064e0581993ba8e28c93183ba74629d72d86..e50b6f37dccfb56442cc4e985671d77d9841ede3 100644 --- a/make/sun/javazic/tzdata/VERSION +++ b/make/sun/javazic/tzdata/VERSION @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013c +tzdata2013d diff --git a/make/sun/javazic/tzdata/africa b/make/sun/javazic/tzdata/africa index 2f5d3c5e3fc95d449a193e43508ba8355d63e8ed..6b19b982c6bf31f71a86e12d3276e68ce3e026a4 100644 --- a/make/sun/javazic/tzdata/africa +++ b/make/sun/javazic/tzdata/africa @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -875,12 +875,18 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou # announced that year's Ramadan daylight-saving transitions would be # 2012-07-20 and 2012-08-20; see # . -# + +# From Andrew Paprocki (2013-07-02): +# Morocco announced that the year's Ramadan daylight-savings +# transitions would be 2013-07-07 and 2013-08-10; see: +# http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10 + +# From Paul Eggert (2013-07-03): # To estimate what the Moroccan government will do in future years, -# transition dates for 2013 through 2021 were determined by running +# transition dates for 2014 through 2021 were determined by running # the following program under GNU Emacs 24.3: # -# (let ((islamic-year 1434)) +# (let ((islamic-year 1435)) # (while (< islamic-year 1444) # (let ((a # (calendar-gregorian-from-absolute @@ -933,8 +939,8 @@ Rule Morocco 2012 2019 - Apr lastSun 2:00 1:00 S Rule Morocco 2012 max - Sep lastSun 3:00 0 - Rule Morocco 2012 only - Jul 20 3:00 0 - Rule Morocco 2012 only - Aug 20 2:00 1:00 S -Rule Morocco 2013 only - Jul 9 3:00 0 - -Rule Morocco 2013 only - Aug 8 2:00 1:00 S +Rule Morocco 2013 only - Jul 7 3:00 0 - +Rule Morocco 2013 only - Aug 10 2:00 1:00 S Rule Morocco 2014 only - Jun 29 3:00 0 - Rule Morocco 2014 only - Jul 29 2:00 1:00 S Rule Morocco 2015 only - Jun 18 3:00 0 - diff --git a/make/sun/javazic/tzdata/antarctica b/make/sun/javazic/tzdata/antarctica index daa03ea830c98ebb937e84e87311e003d9887ca6..434432611cac69dadc6ae174323e591acf674735 100644 --- a/make/sun/javazic/tzdata/antarctica +++ b/make/sun/javazic/tzdata/antarctica @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/make/sun/javazic/tzdata/asia b/make/sun/javazic/tzdata/asia index 7818c029a60b5db9bd54c3c4677fcae490c4e667..f0931b3264de31c0b47b6a9ef37dca19a3ffd49d 100644 --- a/make/sun/javazic/tzdata/asia +++ b/make/sun/javazic/tzdata/asia @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -1235,39 +1235,21 @@ Rule Zion 2011 only - Oct 2 2:00 0 S Rule Zion 2012 only - Mar Fri>=26 2:00 1:00 D Rule Zion 2012 only - Sep 23 2:00 0 S -# From Ephraim Silverberg (2012-10-18): -# Yesterday, the Interior Ministry Committee, after more than a year -# past, approved sending the proposed June 2011 changes to the Time -# Decree Law back to the Knesset for second and third (final) votes -# before the upcoming elections on Jan. 22, 2013. Hence, although the -# changes are not yet law, they are expected to be so before February 2013. +# From Ephraim Silverberg (2013-06-27): +# On June 23, 2013, the Israeli government approved changes to the +# Time Decree Law. The next day, the changes passed the First Reading +# in the Knesset. The law is expected to pass the Second and Third +# (final) Readings by the beginning of September 2013. # -# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March. -# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the -# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day -# later (i.e. at 02:00 the first Monday after October 2). -# [Rosh Hashana holidays are factored in until 2100.] - -# From Ephraim Silverberg (2012-11-05): -# The Knesset passed today (in second and final readings) the amendment to the -# Time Decree Law making the changes ... law. +# As of 2013, DST starts at 02:00 on the Friday before the last Sunday +# in March. DST ends at 02:00 on the last Sunday of October. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D -Rule Zion 2013 2026 - Oct Sun>=2 2:00 0 S -Rule Zion 2027 only - Oct Mon>=3 2:00 0 S -Rule Zion 2028 max - Oct Sun>=2 2:00 0 S -# The following rules are commented out for now, as they break older -# versions of zic that support only signed 32-bit timestamps, i.e., -# through 2038-01-19 03:14:07 UTC. -#Rule Zion 2028 2053 - Oct Sun>=2 2:00 0 S -#Rule Zion 2054 only - Oct Mon>=3 2:00 0 S -#Rule Zion 2055 2080 - Oct Sun>=2 2:00 0 S -#Rule Zion 2081 only - Oct Mon>=3 2:00 0 S -#Rule Zion 2082 max - Oct Sun>=2 2:00 0 S +Rule Zion 2013 max - Oct lastSun 2:00 0 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Jerusalem 2:20:56 - LMT 1880 +Zone Asia/Jerusalem 2:20:54 - LMT 1880 2:20:40 - JMT 1918 # Jerusalem Mean Time? 2:00 Zion I%sT @@ -2570,8 +2552,8 @@ Rule Syria 2006 only - Sep 22 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 +# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or +# rather Midnight between Thursday and Friday. This does make more sense 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... diff --git a/make/sun/javazic/tzdata/australasia b/make/sun/javazic/tzdata/australasia index db954a81dcd29fa5e9cb76304bbf345b6c57c458..11a3cb97fee8b61483ea9fb2f3ed54ba5682c933 100644 --- a/make/sun/javazic/tzdata/australasia +++ b/make/sun/javazic/tzdata/australasia @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -253,10 +253,16 @@ Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb # - Macquarie Island will stay on UTC+11 for winter and therefore not # switch back from daylight savings time when other parts of Australia do # on 4 April. +# +# From Arthur David Olson (2013-05-23): +# The 1919 transition is overspecified below so pre-2013 zics +# will produce a binary file with an EST-type as the first 32-bit type; +# this is required for correct handling of times before 1916 by +# pre-2013 versions of localtime. Zone Antarctica/Macquarie 0 - zzz 1899 Nov 10:00 - EST 1916 Oct 1 2:00 10:00 1:00 EST 1917 Feb - 10:00 Aus EST 1919 Apr + 10:00 Aus EST 1919 Apr 1 0:00s 0 - zzz 1948 Mar 25 10:00 Aus EST 1967 10:00 AT EST 2010 Apr 4 3:00 @@ -1498,12 +1504,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # From Paul Eggert (2000-01-08): # IATA SSIM (1999-09) says DST ends 0100 local time. Go with McDow. -# From the BBC World Service (1998-10-31 11:32 UTC): +# From the BBC World Service in +# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC): # The Fijiian government says the main reasons for the time change is to -# improve productivity and reduce road accidents. But correspondents say it -# also hopes the move will boost Fiji's ability to compete with other pacific -# islands in the effort to attract tourists to witness the dawning of the new -# millenium. +# improve productivity and reduce road accidents.... [T]he move is also +# intended to boost Fiji's ability to attract tourists to witness the dawning +# of the new millennium. # http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13) # reports that Fiji has discontinued DST. @@ -1648,7 +1654,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell. # From Eric Ulevik (1999-05-03): -# Tonga's director of tourism, who is also secretary of the National Millenium +# Tonga's director of tourism, who is also secretary of the National Millennium # Committee, has a plan to get Tonga back in front. # He has proposed a one-off move to tropical daylight saving for Tonga from # October to March, which has won approval in principle from the Tongan diff --git a/make/sun/javazic/tzdata/backward b/make/sun/javazic/tzdata/backward index 4ccea7c7dbe0500166e22193cf6cf34f409fa4b9..ca4c437a15012ba415c11a5f4cccab52eb85cc45 100644 --- a/make/sun/javazic/tzdata/backward +++ b/make/sun/javazic/tzdata/backward @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/make/sun/javazic/tzdata/etcetera b/make/sun/javazic/tzdata/etcetera index 609b305493cedfeeb70cbe241e05e2a9edbe7f6a..d557e3033fbc0f6ea648b69a624e4a8fc6734786 100644 --- a/make/sun/javazic/tzdata/etcetera +++ b/make/sun/javazic/tzdata/etcetera @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/make/sun/javazic/tzdata/europe b/make/sun/javazic/tzdata/europe index 268504d09839da7328da1739104ac9364e5af5b4..688136c80166c91ed680f4d48d9b665b36693d47 100644 --- a/make/sun/javazic/tzdata/europe +++ b/make/sun/javazic/tzdata/europe @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -546,7 +546,7 @@ Rule C-Eur 1944 only - Oct 2 2:00s 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 +# affected are apparently these fictitious zones that translate acronyms # CET and MET: # # Zone CET 1:00 C-Eur CE%sT @@ -2802,9 +2802,9 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. # Ukraine # -# From Igor Karpov, who works for the Ukranian Ministry of Justice, +# From Igor Karpov, who works for the Ukrainian Ministry of Justice, # via Garrett Wollman (2003-01-27): -# BTW, I've found the official document on this matter. It's goverment +# BTW, I've found the official document on this matter. It's government # regulations number 509, May 13, 1996. In my poor translation it says: # "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday # of March at 3am the time is changing to 4am and each last Sunday of @@ -2838,7 +2838,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. # time this year after all. # # From Udo Schwedt (2011-10-18): -# As far as I understand, the recent change to the Ukranian time zone +# As far as I understand, the recent change to the Ukrainian time zone # (Europe/Kiev) to introduce permanent daylight saving time (similar # to Russia) was reverted today: # diff --git a/make/sun/javazic/tzdata/factory b/make/sun/javazic/tzdata/factory index 53ca3aa5d312a2b6d7d374a89f634b60a5658920..813d99a1f1f95d0ff89095a2abd446b190872cb1 100644 --- a/make/sun/javazic/tzdata/factory +++ b/make/sun/javazic/tzdata/factory @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/make/sun/javazic/tzdata/iso3166.tab b/make/sun/javazic/tzdata/iso3166.tab index fee3f33911a85111e35dabb70797c56c6c3c6a39..c6b2d0af3f1fea5659b0c0dae6dd288462b600fa 100644 --- a/make/sun/javazic/tzdata/iso3166.tab +++ b/make/sun/javazic/tzdata/iso3166.tab @@ -1,39 +1,37 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # -#
+# ISO 3166 alpha-2 country codes
+#
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
-# ISO 3166 alpha-2 country codes
 #
-# From Paul Eggert (2006-09-27):
+# From Paul Eggert (2013-05-27):
 #
 # This file contains a table with the following columns:
 # 1.  ISO 3166-1 alpha-2 country code, current as of
-#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:
-#     
-#     ISO 3166 Maintenance agency (ISO 3166/MA)
-#     .
+#     ISO 3166-1 Newsletter VI-15 (2013-05-10).  See: Updates on ISO 3166
+#   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
 # 2.  The usual English name for the country,
 #     chosen so that alphabetic sorting of subsets produces helpful lists.
 #     This is not the same as the English name in the ISO 3166 tables.
@@ -43,8 +41,9 @@
 #
 # Lines beginning with `#' are comments.
 #
-# From Arthur David Olson (2011-08-17):
-# Resynchronized today with the ISO 3166 site (adding SS for South Sudan).
+# This table is intended as an aid for users, to help them select time
+# zone data appropriate for their practical needs.  It is not intended
+# to take or endorse any position on legal or territorial claims.
 #
 #country-
 #code	country name
@@ -77,7 +76,7 @@ BL	St Barthelemy
 BM	Bermuda
 BN	Brunei
 BO	Bolivia
-BQ	Bonaire Sint Eustatius & Saba
+BQ	Bonaire, St Eustatius & Saba
 BR	Brazil
 BS	Bahamas
 BT	Bhutan
@@ -258,7 +257,7 @@ SR	Suriname
 SS	South Sudan
 ST	Sao Tome & Principe
 SV	El Salvador
-SX	Sint Maarten
+SX	St Maarten (Dutch part)
 SY	Syria
 SZ	Swaziland
 TC	Turks & Caicos Is
diff --git a/make/sun/javazic/tzdata/leapseconds b/make/sun/javazic/tzdata/leapseconds
index ab6720ded58c9f2e86155bbc458e14830dbb4cf7..912801227a2334d8def9f04e6d4c094ad8a1d3f4 100644
--- a/make/sun/javazic/tzdata/leapseconds
+++ b/make/sun/javazic/tzdata/leapseconds
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/northamerica b/make/sun/javazic/tzdata/northamerica
index 858bf811ac9e08c1fa1a8824f860054115016706..43a0b22504bb4f312e284b9e765414565c337dac 100644
--- a/make/sun/javazic/tzdata/northamerica
+++ b/make/sun/javazic/tzdata/northamerica
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/pacificnew b/make/sun/javazic/tzdata/pacificnew
index 7738a48087be6586975d307d416763727c823663..09000c3457a9333a19a8207c57644cfc4d117621 100644
--- a/make/sun/javazic/tzdata/pacificnew
+++ b/make/sun/javazic/tzdata/pacificnew
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/solar87 b/make/sun/javazic/tzdata/solar87
index 46b1d56025f5858a1c155b1d8f7633ff0d9580e0..0512ca410c1079872bd24884ec54f2138120e4a7 100644
--- a/make/sun/javazic/tzdata/solar87
+++ b/make/sun/javazic/tzdata/solar87
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/solar88 b/make/sun/javazic/tzdata/solar88
index 71b60d5d74adb0d63c30f4c330a00a1f59bb79b2..3314cb1d64017729a34a3b56ada60c85106d9e85 100644
--- a/make/sun/javazic/tzdata/solar88
+++ b/make/sun/javazic/tzdata/solar88
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/solar89 b/make/sun/javazic/tzdata/solar89
index ae2bea8876acd1358fb90131f00f89733b51eb78..3aa88cf0893b86a83de1aadfaa9df70bb5568afc 100644
--- a/make/sun/javazic/tzdata/solar89
+++ b/make/sun/javazic/tzdata/solar89
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/southamerica b/make/sun/javazic/tzdata/southamerica
index d1865d3f19b07bb58aa6aff4924fc5c649daf7c4..e7df18ad2c31b64ffaa913ca26c364bec1219953 100644
--- a/make/sun/javazic/tzdata/southamerica
+++ b/make/sun/javazic/tzdata/southamerica
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
@@ -994,7 +994,7 @@ Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
 # adopted by the same states as before.
 Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
 # From Frederico A. C. Neves (2008-09-10):
-# Acording to this decree
+# According to this decree
 # 
 # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
 # 
@@ -1226,7 +1226,7 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 # http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
 # 
 #
-# This is not yet reflected in the offical "cambio de hora" site, but
+# This is not yet reflected in the official "cambio de hora" site, but
 # probably will be soon:
 # 
 # http://www.horaoficial.cl/cambio.htm
diff --git a/make/sun/javazic/tzdata/systemv b/make/sun/javazic/tzdata/systemv
index 0b0a2665654507daa6e5e991001485fefea5d4be..f909f9c76dbd4cfc8f9b8fa9ac1de182dfc61dcc 100644
--- a/make/sun/javazic/tzdata/systemv
+++ b/make/sun/javazic/tzdata/systemv
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff --git a/make/sun/javazic/tzdata/zone.tab b/make/sun/javazic/tzdata/zone.tab
index cbcdc075bf77a7950240542795b0caa90e3b0c00..aa247c26df84376ab6c38655deee596cce6252c1 100644
--- a/make/sun/javazic/tzdata/zone.tab
+++ b/make/sun/javazic/tzdata/zone.tab
@@ -1,41 +1,44 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
+# TZ zone descriptions
+#
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 #
-# TZ zone descriptions
-#
-# From Paul Eggert (1996-08-05):
+# From Paul Eggert (2013-05-27):
 #
 # This file contains a table with the following columns:
 # 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
+#     This identifies a country that overlaps the zone.  The country may
+#     overlap other zones and the zone may overlap other countries.
 # 2.  Latitude and longitude of the zone's principal location
 #     in ISO 6709 sign-degrees-minutes-seconds format,
 #     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
 #     first latitude (+ is north), then longitude (+ is east).
+#     This location need not lie within the column-1 country.
 # 3.  Zone name used in value of TZ environment variable.
+#     Please see the 'Theory' file for how zone names are chosen.
 # 4.  Comments; present if and only if the country has multiple rows.
 #
 # Columns are separated by a single tab.
@@ -45,6 +48,10 @@
 #
 # Lines beginning with `#' are comments.
 #
+# This table is intended as an aid for users, to help them select time
+# zone data appropriate for their practical needs.  It is not intended
+# to take or endorse any position on legal or territorial claims.
+#
 #country-
 #code	coordinates	TZ			comments
 AD	+4230+00131	Europe/Andorra
@@ -239,7 +246,7 @@ ID	-0002+10920	Asia/Pontianak	west & central Borneo
 ID	-0507+11924	Asia/Makassar	east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
 ID	-0232+14042	Asia/Jayapura	west New Guinea (Irian Jaya) & Malukus (Moluccas)
 IE	+5320-00615	Europe/Dublin
-IL	+3146+03514	Asia/Jerusalem
+IL	+314650+0351326	Asia/Jerusalem
 IM	+5409-00428	Europe/Isle_of_Man
 IN	+2232+08822	Asia/Kolkata
 IO	-0720+07225	Indian/Chagos
diff --git a/make/tools/CharsetMapping/IBM290.c2b b/make/tools/CharsetMapping/IBM290.c2b
new file mode 100644
index 0000000000000000000000000000000000000000..16cb4665efcc6831254a4e11c27f6fde53ca7ab1
--- /dev/null
+++ b/make/tools/CharsetMapping/IBM290.c2b
@@ -0,0 +1,100 @@
+# 
+# Diff of 
+# b2c: cdctables.zip/Package2.zip/IBM-290.zip/012234B0.TPMAP100
+# c2b: cdctables.zip/Package2.zip/IBM-290.zip/012234B0.UPMAP100
+#
+# fullwidth form
+0x4B    U+FF0E
+0x4C    U+FF1C
+0x4D    U+FF08
+0x4E    U+FF0B
+0x4F    U+FF5C
+0x50    U+FF06
+0x5A    U+FF01
+0x5C    U+FF0A
+0x5D    U+FF09
+0x5E    U+FF1B
+0x60    U+FF0D
+0x61    U+FF0F
+0x62    U+FF41
+0x63    U+FF42
+0x64    U+FF43
+0x65    U+FF44
+0x66    U+FF45
+0x67    U+FF46
+0x68    U+FF47
+0x69    U+FF48
+0x6B    U+FF0C
+0x6C    U+FF05
+0x6D    U+FF3F
+0x6E    U+FF1E
+0x6F    U+FF1F
+0x70    U+FF3B
+0x71    U+FF49
+0x72    U+FF4A
+0x73    U+FF4B
+0x74    U+FF4C
+0x75    U+FF4D
+0x76    U+FF4E
+0x77    U+FF4F
+0x78    U+FF50
+0x79    U+FF40
+0x7A    U+FF1A
+0x7B    U+FF03
+0x7C    U+FF20
+0x7D    U+FF07
+0x7E    U+FF1D
+0x7F    U+FF02
+0x80    U+FF3D
+0x8B    U+FF51
+0x9B    U+FF52
+0xA0    U+FF5E
+0xAB    U+FF53
+0xB0    U+FF3E
+0xB2    U+FF3C
+0xB3    U+FF54
+0xB4    U+FF55
+0xB5    U+FF56
+0xB6    U+FF57
+0xB7    U+FF58
+0xB8    U+FF59
+0xB9    U+FF5A
+0xC0    U+FF5B
+0xC1    U+FF21
+0xC2    U+FF22
+0xC3    U+FF23
+0xC4    U+FF24
+0xC5    U+FF25
+0xC6    U+FF26
+0xC7    U+FF27
+0xC8    U+FF28
+0xC9    U+FF29
+0xD0    U+FF5D
+0xD1    U+FF2A
+0xD2    U+FF2B
+0xD3    U+FF2C
+0xD4    U+FF2D
+0xD5    U+FF2E
+0xD6    U+FF2F
+0xD7    U+FF30
+0xD8    U+FF31
+0xD9    U+FF32
+0xE0    U+FF04
+0xE2    U+FF33
+0xE3    U+FF34
+0xE4    U+FF35
+0xE5    U+FF36
+0xE6    U+FF37
+0xE7    U+FF38
+0xE8    U+FF39
+0xE9    U+FF3A
+0xF0    U+FF10
+0xF1    U+FF11
+0xF2    U+FF12
+0xF3    U+FF13
+0xF4    U+FF14
+0xF5    U+FF15
+0xF6    U+FF16
+0xF7    U+FF17
+0xF8    U+FF18
+0xF9    U+FF19
diff --git a/make/tools/CharsetMapping/IBM290.map b/make/tools/CharsetMapping/IBM290.map
new file mode 100644
index 0000000000000000000000000000000000000000..4b46f581677d6a14d397c03c15530a2467676c6b
--- /dev/null
+++ b/make/tools/CharsetMapping/IBM290.map
@@ -0,0 +1,232 @@
+#
+# b2c mapping for IBM290, generated from
+# cdctables.zip/Package2.zip/IBM-290.zip/012234B0.TPMAP100
+#
+0x00    U+0000
+0x01    U+0001
+0x02    U+0002
+0x03    U+0003
+0x04    U+009C
+0x05    U+0009
+0x06    U+0086
+0x07    U+007F
+0x08    U+0097
+0x09    U+008D
+0x0A    U+008E
+0x0B    U+000B
+0x0C    U+000C
+0x0D    U+000D
+0x0E    U+000E
+0x0F    U+000F
+0x10    U+0010
+0x11    U+0011
+0x12    U+0012
+0x13    U+0013
+0x14    U+009D
+0x15    U+0085
+0x16    U+0008
+0x17    U+0087
+0x18    U+0018
+0x19    U+0019
+0x1A    U+0092
+0x1B    U+008F
+0x1C    U+001C
+0x1D    U+001D
+0x1E    U+001E
+0x1F    U+001F
+0x20    U+0080
+0x21    U+0081
+0x22    U+0082
+0x23    U+0083
+0x24    U+0084
+0x25    U+000A
+0x26    U+0017
+0x27    U+001B
+0x28    U+0088
+0x29    U+0089
+0x2A    U+008A
+0x2B    U+008B
+0x2C    U+008C
+0x2D    U+0005
+0x2E    U+0006
+0x2F    U+0007
+0x30    U+0090
+0x31    U+0091
+0x32    U+0016
+0x33    U+0093
+0x34    U+0094
+0x35    U+0095
+0x36    U+0096
+0x37    U+0004
+0x38    U+0098
+0x39    U+0099
+0x3A    U+009A
+0x3B    U+009B
+0x3C    U+0014
+0x3D    U+0015
+0x3E    U+009E
+0x3F    U+001A
+0x40    U+0020
+0x41    U+FF61
+0x42    U+FF62
+0x43    U+FF63
+0x44    U+FF64
+0x45    U+FF65
+0x46    U+FF66
+0x47    U+FF67
+0x48    U+FF68
+0x49    U+FF69
+0x4A    U+00A3
+0x4B    U+002E
+0x4C    U+003C
+0x4D    U+0028
+0x4E    U+002B
+0x4F    U+007C
+0x50    U+0026
+0x51    U+FF6A
+0x52    U+FF6B
+0x53    U+FF6C
+0x54    U+FF6D
+0x55    U+FF6E
+0x56    U+FF6F
+0x58    U+FF70
+0x5A    U+0021
+0x5B    U+00A5
+0x5C    U+002A
+0x5D    U+0029
+0x5E    U+003B
+0x5F    U+00AC
+0x60    U+002D
+0x61    U+002F
+0x62    U+0061
+0x63    U+0062
+0x64    U+0063
+0x65    U+0064
+0x66    U+0065
+0x67    U+0066
+0x68    U+0067
+0x69    U+0068
+0x6B    U+002C
+0x6C    U+0025
+0x6D    U+005F
+0x6E    U+003E
+0x6F    U+003F
+0x70    U+005B
+0x71    U+0069
+0x72    U+006A
+0x73    U+006B
+0x74    U+006C
+0x75    U+006D
+0x76    U+006E
+0x77    U+006F
+0x78    U+0070
+0x79    U+0060
+0x7A    U+003A
+0x7B    U+0023
+0x7C    U+0040
+0x7D    U+0027
+0x7E    U+003D
+0x7F    U+0022
+0x80    U+005D
+0x81    U+FF71
+0x82    U+FF72
+0x83    U+FF73
+0x84    U+FF74
+0x85    U+FF75
+0x86    U+FF76
+0x87    U+FF77
+0x88    U+FF78
+0x89    U+FF79
+0x8A    U+FF7A
+0x8B    U+0071
+0x8C    U+FF7B
+0x8D    U+FF7C
+0x8E    U+FF7D
+0x8F    U+FF7E
+0x90    U+FF7F
+0x91    U+FF80
+0x92    U+FF81
+0x93    U+FF82
+0x94    U+FF83
+0x95    U+FF84
+0x96    U+FF85
+0x97    U+FF86
+0x98    U+FF87
+0x99    U+FF88
+0x9A    U+FF89
+0x9B    U+0072
+0x9D    U+FF8A
+0x9E    U+FF8B
+0x9F    U+FF8C
+0xA0    U+007E
+0xA1    U+203E
+0xA2    U+FF8D
+0xA3    U+FF8E
+0xA4    U+FF8F
+0xA5    U+FF90
+0xA6    U+FF91
+0xA7    U+FF92
+0xA8    U+FF93
+0xA9    U+FF94
+0xAA    U+FF95
+0xAB    U+0073
+0xAC    U+FF96
+0xAD    U+FF97
+0xAE    U+FF98
+0xAF    U+FF99
+0xB0    U+005E
+0xB1    U+00A2
+0xB2    U+005C
+0xB3    U+0074
+0xB4    U+0075
+0xB5    U+0076
+0xB6    U+0077
+0xB7    U+0078
+0xB8    U+0079
+0xB9    U+007A
+0xBA    U+FF9A
+0xBB    U+FF9B
+0xBC    U+FF9C
+0xBD    U+FF9D
+0xBE    U+FF9E
+0xBF    U+FF9F
+0xC0    U+007B
+0xC1    U+0041
+0xC2    U+0042
+0xC3    U+0043
+0xC4    U+0044
+0xC5    U+0045
+0xC6    U+0046
+0xC7    U+0047
+0xC8    U+0048
+0xC9    U+0049
+0xD0    U+007D
+0xD1    U+004A
+0xD2    U+004B
+0xD3    U+004C
+0xD4    U+004D
+0xD5    U+004E
+0xD6    U+004F
+0xD7    U+0050
+0xD8    U+0051
+0xD9    U+0052
+0xE0    U+0024
+0xE2    U+0053
+0xE3    U+0054
+0xE4    U+0055
+0xE5    U+0056
+0xE6    U+0057
+0xE7    U+0058
+0xE8    U+0059
+0xE9    U+005A
+0xF0    U+0030
+0xF1    U+0031
+0xF2    U+0032
+0xF3    U+0033
+0xF4    U+0034
+0xF5    U+0035
+0xF6    U+0036
+0xF7    U+0037
+0xF8    U+0038
+0xF9    U+0039
+0xFF    U+009F
diff --git a/make/tools/CharsetMapping/IBM300.c2b b/make/tools/CharsetMapping/IBM300.c2b
new file mode 100644
index 0000000000000000000000000000000000000000..ee1989e6116d7ebdc2d9af46bf0d5abef5648a8b
--- /dev/null
+++ b/make/tools/CharsetMapping/IBM300.c2b
@@ -0,0 +1,50 @@
+# 
+# Diff of 
+# b2c: cdctables.zip/Package2.zip/IBM-300.zip/012C34B0.TPMAP120
+# c2b: cdctables.zip/Package2.zip/IBM-300.zip/012C34B0.UPMAP120
+#
+4260        2212
+426A        00A6
+43A1        301C
+444A        2014
+446E        F86F
+447C        2016
+4C7D        9E7C
+4EB3        9830
+4F5E        5861
+507F        91AC
+5190        56CA
+51F1        6805
+51FA        91B1
+5261        9EB4
+52A1        881F
+52C9        840A
+52DA        7E61
+52EC        4FE0
+5353        8EC0
+5373        7E6B
+53B3        8346
+53DA        9A52
+53E8        87EC
+53EE        7130
+53F8        8523
+5443        5C5B
+5464        9DD7
+547D        5699
+5481        525D
+54A3        6414
+54A4        7626
+54CA        7C1E
+54CD        6451
+54D4        555E
+54FA        6F51
+5550        7006
+5553        79B1
+555F        9EB5
+55C0        5C62
+55C1        985A
+5B72        6522
+5BFE        688E
+60F1        7E48
+61B0        8141
+66C8        9839
diff --git a/make/tools/CharsetMapping/IBM300.map b/make/tools/CharsetMapping/IBM300.map
new file mode 100644
index 0000000000000000000000000000000000000000..4c207cbab3c80682f6bbc2e1ec32edc876472d7e
--- /dev/null
+++ b/make/tools/CharsetMapping/IBM300.map
@@ -0,0 +1,11644 @@
+#
+# b2c mapping for IBM300, generated from
+# cdctables.zip/Package2.zip/IBM-300.zip/012C34B0.TPMAP120
+#
+#     FEFE
+# Note: subchar FEFE itself is not a defined character in
+#       300 character set, we use fullwidth question mark
+#       <0x426f U+FF1F> instead
+#
+4040        3000
+4141        03B1
+4142        03B2
+4143        03B3
+4144        03B4
+4145        03B5
+4146        03B6
+4147        03B7
+4148        03B8
+4149        03B9
+414A        03BA
+414B        03BB
+414C        03BC
+414D        03BD
+414E        03BE
+414F        03BF
+4150        03C0
+4151        03C1
+4152        03C3
+4153        03C4
+4154        03C5
+4155        03C6
+4156        03C7
+4157        03C8
+4158        03C9
+4161        0391
+4162        0392
+4163        0393
+4164        0394
+4165        0395
+4166        0396
+4167        0397
+4168        0398
+4169        0399
+416A        039A
+416B        039B
+416C        039C
+416D        039D
+416E        039E
+416F        039F
+4170        03A0
+4171        03A1
+4172        03A3
+4173        03A4
+4174        03A5
+4175        03A6
+4176        03A7
+4177        03A8
+4178        03A9
+4180        0430
+4181        0431
+4182        0432
+4183        0433
+4184        0434
+4185        0435
+4186        0451
+4187        0436
+4188        0437
+4189        0438
+418A        0439
+418B        043A
+418C        043B
+418D        043C
+418E        043D
+418F        043E
+4190        043F
+4191        0440
+4192        0441
+4193        0442
+4194        0443
+4195        0444
+4196        0445
+4197        0446
+4198        0447
+4199        0448
+419A        0449
+419B        044A
+419C        044B
+419D        044C
+419E        044D
+419F        044E
+41A0        044F
+41B1        2170
+41B2        2171
+41B3        2172
+41B4        2173
+41B5        2174
+41B6        2175
+41B7        2176
+41B8        2177
+41B9        2178
+41BA        2179
+41C0        0410
+41C1        0411
+41C2        0412
+41C3        0413
+41C4        0414
+41C5        0415
+41C6        0401
+41C7        0416
+41C8        0417
+41C9        0418
+41CA        0419
+41CB        041A
+41CC        041B
+41CD        041C
+41CE        041D
+41CF        041E
+41D0        041F
+41D1        0420
+41D2        0421
+41D3        0422
+41D4        0423
+41D5        0424
+41D6        0425
+41D7        0426
+41D8        0427
+41D9        0428
+41DA        0429
+41DB        042A
+41DC        042B
+41DD        042C
+41DE        042D
+41DF        042E
+41E0        042F
+41F1        2160
+41F2        2161
+41F3        2162
+41F4        2163
+41F5        2164
+41F6        2165
+41F7        2166
+41F8        2167
+41F9        2168
+41FA        2169
+424A        FFE1
+424B        FF0E
+424C        FF1C
+424D        FF08
+424E        FF0B
+424F        FF5C
+4250        FF06
+425A        FF01
+425B        FFE5
+425C        FF0A
+425D        FF09
+425E        FF1B
+425F        FFE2
+4260        FF0D
+4261        FF0F
+426A        FFE4
+426B        FF0C
+426C        FF05
+426D        FF3F
+426E        FF1E
+426F        FF1F
+4279        FF40
+427A        FF1A
+427B        FF03
+427C        FF20
+427D        FF07
+427E        FF1D
+427F        FF02
+4281        FF41
+4282        FF42
+4283        FF43
+4284        FF44
+4285        FF45
+4286        FF46
+4287        FF47
+4288        FF48
+4289        FF49
+4291        FF4A
+4292        FF4B
+4293        FF4C
+4294        FF4D
+4295        FF4E
+4296        FF4F
+4297        FF50
+4298        FF51
+4299        FF52
+42A1        FFE3
+42A2        FF53
+42A3        FF54
+42A4        FF55
+42A5        FF56
+42A6        FF57
+42A7        FF58
+42A8        FF59
+42A9        FF5A
+42C0        FF5B
+42C1        FF21
+42C2        FF22
+42C3        FF23
+42C4        FF24
+42C5        FF25
+42C6        FF26
+42C7        FF27
+42C8        FF28
+42C9        FF29
+42D0        FF5D
+42D1        FF2A
+42D2        FF2B
+42D3        FF2C
+42D4        FF2D
+42D5        FF2E
+42D6        FF2F
+42D7        FF30
+42D8        FF31
+42D9        FF32
+42E0        FF04
+42E2        FF33
+42E3        FF34
+42E4        FF35
+42E5        FF36
+42E6        FF37
+42E7        FF38
+42E8        FF39
+42E9        FF3A
+42F0        FF10
+42F1        FF11
+42F2        FF12
+42F3        FF13
+42F4        FF14
+42F5        FF15
+42F6        FF16
+42F7        FF17
+42F8        FF18
+42F9        FF19
+4341        3002
+4342        300C
+4343        300D
+4344        3001
+4345        30FB
+4346        30F2
+4347        30A1
+4348        30A3
+4349        30A5
+434A        FFE0
+434B        2220
+434C        22A5
+434D        2312
+434E        2202
+434F        2207
+4351        30A7
+4352        30A9
+4353        30E3
+4354        30E5
+4355        30E7
+4356        30C3
+4357        30EE
+4358        30FC
+4359        30F5
+435A        30F6
+435B        2261
+435C        2252
+435D        226A
+435E        226B
+435F        221A
+4360        223D
+4361        221D
+4362        222B
+4363        222C
+4364        2208
+4365        220B
+4366        2286
+4367        2287
+4368        2282
+4369        2283
+436A        222A
+436B        2229
+436C        2227
+436D        2228
+436E        21D2
+436F        21D4
+4370        2200
+4371        2203
+4372        212B
+4373        2030
+4374        266F
+4375        266D
+4376        266A
+4377        2020
+4378        2021
+4379        00B6
+437A        25EF
+437C        2500
+437D        2502
+437E        250C
+437F        2510
+4381        30A2
+4382        30A4
+4383        30A6
+4384        30A8
+4385        30AA
+4386        30AB
+4387        30AD
+4388        30AF
+4389        30B1
+438A        30B3
+438C        30B5
+438D        30B7
+438E        30B9
+438F        30BB
+4390        30BD
+4391        30BF
+4392        30C1
+4393        30C4
+4394        30C6
+4395        30C8
+4396        30CA
+4397        30CB
+4398        30CC
+4399        30CD
+439A        30CE
+439D        30CF
+439E        30D2
+439F        30D5
+43A1        FF5E
+43A2        30D8
+43A3        30DB
+43A4        30DE
+43A5        30DF
+43A6        30E0
+43A7        30E1
+43A8        30E2
+43A9        30E4
+43AA        30E6
+43AC        30E8
+43AD        30E9
+43AE        30EA
+43AF        30EB
+43B0        2518
+43B1        2514
+43B2        251C
+43B3        252C
+43B4        2524
+43B5        2534
+43B6        253C
+43B7        2501
+43B8        2503
+43B9        250F
+43BA        30EC
+43BB        30ED
+43BC        30EF
+43BD        30F3
+43BE        309B
+43BF        309C
+43C0        30AC
+43C1        30AE
+43C2        30B0
+43C3        30B2
+43C4        30B4
+43C5        30B6
+43C6        30B8
+43C7        30BA
+43C8        30BC
+43C9        30BE
+43CA        30C0
+43CB        30C2
+43CC        30C5
+43CD        30C7
+43CE        30C9
+43CF        30D0
+43D0        30D3
+43D1        30D6
+43D2        30D9
+43D3        30DC
+43D4        30F4
+43D5        30D1
+43D6        30D4
+43D7        30D7
+43D8        30DA
+43D9        30DD
+43DA        30F0
+43DB        30F1
+43DC        30FD
+43DD        30FE
+43E0        FF3C
+43E1        2513
+43E2        251B
+43E3        2517
+43E4        2523
+43E5        2533
+43E6        252B
+43E7        253B
+43E8        254B
+43E9        2520
+43EA        252F
+43EB        2528
+43EC        2537
+43ED        253F
+43EE        251D
+43EF        2530
+43F0        2525
+43F1        2538
+43F2        2542
+4442        300E
+4443        300F
+4444        FF3B
+4445        FF3D
+4446        3092
+4447        3041
+4448        3043
+4449        3045
+444A        2015
+444B        00B1
+444C        2260
+444D        221E
+444E        2103
+4450        00B4
+4451        3047
+4452        3049
+4453        3083
+4454        3085
+4455        3087
+4456        3063
+4457        308E
+445A        2010
+445B        3003
+445C        4EDD
+445D        3005
+445E        3006
+445F        3007
+4460        00A8
+4461        2018
+4462        201C
+4463        3014
+4464        3008
+4465        300A
+4466        3010
+4467        2266
+4468        2234
+4469        2642
+446A        00A7
+446B        203B
+446C        3012
+446D        3231
+446E        2116
+446F        2121
+4470        FF3E
+4471        2019
+4472        201D
+4473        3015
+4474        3009
+4475        300B
+4476        3011
+4477        2267
+4478        2235
+4479        2640
+447A        00D7
+447B        00F7
+447C        2225
+447D        3013
+447E        2025
+447F        2026
+4481        3042
+4482        3044
+4483        3046
+4484        3048
+4485        304A
+4486        304B
+4487        304D
+4488        304F
+4489        3051
+448A        3053
+448C        3055
+448D        3057
+448E        3059
+448F        305B
+4490        305D
+4491        305F
+4492        3061
+4493        3064
+4494        3066
+4495        3068
+4496        306A
+4497        306B
+4498        306C
+4499        306D
+449A        306E
+449D        306F
+449E        3072
+449F        3075
+44A2        3078
+44A3        307B
+44A4        307E
+44A5        307F
+44A6        3080
+44A7        3081
+44A8        3082
+44A9        3084
+44AA        3086
+44AC        3088
+44AD        3089
+44AE        308A
+44AF        308B
+44BA        308C
+44BB        308D
+44BC        308F
+44BD        3093
+44C0        304C
+44C1        304E
+44C2        3050
+44C3        3052
+44C4        3054
+44C5        3056
+44C6        3058
+44C7        305A
+44C8        305C
+44C9        305E
+44CA        3060
+44CB        3062
+44CC        3065
+44CD        3067
+44CE        3069
+44CF        3070
+44D0        3073
+44D1        3076
+44D2        3079
+44D3        307C
+44D5        3071
+44D6        3074
+44D7        3077
+44D8        307A
+44D9        307D
+44DA        3090
+44DB        3091
+44DC        309D
+44DD        309E
+44E0        25CB
+44E1        25CF
+44E2        25B3
+44E3        25B2
+44E4        25CE
+44E5        2606
+44E6        2605
+44E7        25C7
+44E8        25C6
+44E9        25A1
+44EA        25A0
+44EB        25BD
+44EC        25BC
+44ED        00B0
+44EE        2032
+44EF        2033
+44F0        2192
+44F1        2190
+44F2        2191
+44F3        2193
+4541        4E00
+4542        4E8C
+4543        4E09
+4544        56DB
+4545        4E94
+4546        516D
+4547        4E03
+4548        516B
+4549        4E5D
+454A        5341
+454B        767E
+454C        5343
+454D        4E07
+454E        5104
+454F        90FD
+4550        9053
+4551        5E9C
+4552        770C
+4553        5E02
+4554        533A
+4555        753A
+4556        6751
+4557        6771
+4558        897F
+4559        5357
+455A        5317
+455B        5927
+455C        4E2D
+455D        5C0F
+455E        4E0A
+455F        4E0B
+4560        5E74
+4561        6708
+4562        65E5
+4563        7530
+4564        5B50
+4565        5C71
+4566        672C
+4567        5DDD
+4568        85E4
+4569        91CE
+456A        5DE5
+456B        696D
+456C        6728
+456D        4E95
+456E        90CE
+456F        5CF6
+4570        96C4
+4571        9AD8
+4572        5CA1
+4573        592B
+4574        539F
+4575        4EAC
+4576        4F50
+4577        6B63
+4578        677E
+4579        6A5F
+457A        548C
+457B        88FD
+457C        7537
+457D        7F8E
+457E        5409
+457F        5D0E
+4580        77F3
+4581        8C37
+4582        96FB
+4583        9577
+4584        6CBB
+4585        6CA2
+4586        91D1
+4587        65B0
+4588        53E3
+4589        6A4B
+458A        4E45
+458B        798F
+458C        6240
+458D        5E73
+458E        5185
+458F        56FD
+4590        5316
+4591        962A
+4592        5BAE
+4593        4EBA
+4594        4F5C
+4595        90E8
+4596        6E05
+4597        6B21
+4598        7FA9
+4599        751F
+459A        4EE3
+459B        51FA
+459C        6C34
+459D        68EE
+459E        5149
+459F        52A0
+45A0        5408
+45A1        795E
+45A2        6797
+45A3        91CD
+45A4        884C
+45A5        4FE1
+45A6        660E
+45A7        6D77
+45A8        5B89
+45A9        5E78
+45AA        4FDD
+45AB        592A
+45AC        5BCC
+45AD        6C5F
+45AE        9234
+45AF        524D
+45B0        77E5
+45B1        6B66
+45B2        4F0A
+45B3        662D
+45B4        5206
+45B5        52DD
+45B6        7528
+45B7        5E83
+45B8        9020
+45B9        6C17
+45BA        6210
+45BB        898B
+45BC        5229
+45BD        4F1A
+45BE        5B66
+45BF        5CA9
+45C0        7523
+45C1        9593
+45C2        5730
+45C3        81EA
+45C4        826F
+45C5        95A2
+45C6        611B
+45C7        653F
+45C8        5C3E
+45C9        8A08
+45CA        6587
+45CB        624B
+45CC        7236
+45CD        65B9
+45CE        4E8B
+45CF        6238
+45D0        54C1
+45D1        559C
+45D2        6E21
+45D3        5F18
+45D4        53E4
+45D5        8FBA
+45D6        5009
+45D7        9244
+45D8        4E4B
+45D9        5834
+45DA        6D0B
+45DB        57CE
+45DC        6D25
+45DD        7ACB
+45DE        5EA6
+45DF        5348
+45E0        4ECA
+45E1        5F66
+45E2        8A2D
+45E3        901A
+45E4        52D5
+45E5        5F8C
+45E6        5948
+45E7        5B9A
+45E8        6C60
+45E9        5C4B
+45EA        6D5C
+45EB        7406
+45EC        5742
+45ED        5B9F
+45EE        82F1
+45EF        7684
+45F0        53F8
+45F1        79C0
+45F2        6A2A
+45F3        540D
+45F4        5B5D
+45F5        7AF9
+45F6        535A
+45F7        529B
+45F8        5EAB
+45F9        8449
+45FA        6804
+45FB        6C38
+45FC        5668
+45FD        7389
+45FE        591A
+4641        8CC0
+4642        771F
+4643        6075
+4644        9759
+4645        5186
+4646        8302
+4647        654F
+4648        8C4A
+4649        5175
+464A        6CD5
+464B        767A
+464C        9752
+464D        5897
+464E        6599
+464F        5FE0
+4650        8CC7
+4651        6642
+4652        7269
+4653        8ECA
+4654        5FB3
+4655        8981
+4656        5BFE
+4657        585A
+4658        79CB
+4659        767D
+465A        6CB3
+465B        702C
+465C        6CB9
+465D        9686
+465E        8535
+465F        5F53
+4660        4FCA
+4661        5FD7
+4662        6625
+4663        793E
+4664        99AC
+4665        5165
+4666        5EFA
+4667        6839
+4668        6749
+4669        9032
+466A        8208
+466B        6D66
+466C        7CBE
+466D        540C
+466E        6027
+466F        7C73
+4670        8005
+4671        52A9
+4672        679D
+4673        8FD1
+4674        76F4
+4675        76EE
+4676        6765
+4677        753B
+4678        76F8
+4679        9ED2
+467A        4E38
+467B        8239
+467C        7531
+467D        58EB
+467E        7B2C
+467F        718A
+4680        7D19
+4681        5065
+4682        68B0
+4683        82B3
+4684        571F
+4685        6709
+4686        5BB6
+4687        7DDA
+4688        7D4C
+4689        8ABF
+468A        5929
+468B        671F
+468C        7F6E
+468D        6D45
+468E        6589
+468F        5F0F
+4690        5F62
+4691        9762
+4692        7A2E
+4693        8F38
+4694        5916
+4695        5143
+4696        4F53
+4697        9E7F
+4698        5FA1
+4699        5973
+469A        5EB7
+469B        4E16
+469C        52C7
+469D        5800
+469E        597D
+469F        5150
+46A0        5BFA
+46A1        92FC
+46A2        7279
+46A3        57FC
+46A4        9054
+46A5        5411
+46A6        53D6
+46A7        7B49
+46A8        667A
+46A9        56DE
+46AA        9580
+46AB        904B
+46AC        5099
+46AD        601D
+46AE        963F
+46AF        4E0D
+46B0        9808
+46B1        5168
+46B2        5BFF
+46B3        5584
+46B4        677F
+46B5        98EF
+46B6        8C9E
+46B7        73FE
+46B8        98DF
+46B9        7D44
+46BA        985E
+46BB        516C
+46BC        6750
+46BD        9999
+46BE        5546
+46BF        7D50
+46C0        8868
+46C1        77E2
+46C2        6F5F
+46C3        79C1
+46C4        5236
+46C5        90A6
+46C6        6CBC
+46C7        7CF8
+46C8        5B8F
+46C9        7B56
+46CA        6CE2
+46CB        54E1
+46CC        6570
+46CD        958B
+46CE        6E96
+46CF        6A39
+46D0        8CBB
+46D1        660C
+46D2        5F37
+46D3        7814
+46D4        53CB
+46D5        5B87
+46D6        82E5
+46D7        83CA
+46D8        6301
+46D9        82B1
+46DA        5F15
+46DB        7D00
+46DC        8352
+46DD        5225
+46DE        4FEE
+46DF        8D8A
+46E0        4F4F
+46E1        85AC
+46E2        6BDB
+46E3        9060
+46E4        554F
+46E5        5965
+46E6        578B
+46E7        5FC3
+46E8        767B
+46E9        65E9
+46EA        67F3
+46EB        6D69
+46EC        8CEA
+46ED        52D9
+46EE        6CC9
+46EF        5E38
+46F0        5B88
+46F1        57FA
+46F2        7BA1
+46F3        6CF0
+46F4        4F38
+46F5        6700
+46F6        4EE5
+46F7        6B4C
+46F8        88D5
+46F9        8D64
+46FA        8DB3
+46FB        898F
+46FC        6D41
+46FD        8AA0
+46FE        6607
+4741        5DDE
+4742        7167
+4743        5869
+4744        9001
+4745        96C5
+4746        672B
+4747        54F2
+4748        5CB8
+4749        4E5F
+474A        5C90
+474B        521D
+474C        8328
+474D        5247
+474E        6BD4
+474F        80FD
+4750        8A71
+4751        6295
+4752        8EE2
+4753        83C5
+4754        9023
+4755        4ED6
+4756        6C11
+4757        7D66
+4758        9152
+4759        7E41
+475A        4FA1
+475B        6E80
+475C        671D
+475D        4ED8
+475E        6761
+475F        7121
+4760        8003
+4761        697D
+4762        4E3B
+4763        610F
+4764        6226
+4765        5207
+4766        5264
+4767        7247
+4768        7D30
+4769        6E08
+476A        7A32
+476B        5E03
+476C        91CC
+476D        5C5E
+476E        7AE0
+476F        5909
+4770        4F55
+4771        685C
+4772        5F7C
+4773        67FB
+4774        76CA
+4775        58F2
+4776        4EC1
+4777        6DF1
+4778        53F0
+4779        9CE5
+477A        9DB4
+477B        652F
+477C        6574
+477D        89D2
+477E        5609
+477F        5473
+4780        885B
+4781        8B70
+4782        5727
+4783        7387
+4784        8DEF
+4785        706B
+4786        961C
+4787        8F1D
+4788        70B9
+4789        4E0E
+478A        6E1B
+478B        7551
+478C        9280
+478D        7A7A
+478E        4EA4
+478F        7FBD
+4790        534A
+4791        53CE
+4792        592E
+4793        7DCF
+4794        8A18
+4795        6674
+4796        69CB
+4797        969B
+4798        6885
+4799        5370
+479A        8A00
+479B        6817
+479C        8EAB
+479D        66F8
+479E        514B
+479F        7D20
+47A0        96C6
+47A1        7BC0
+47A2        5148
+47A3        6EDD
+47A4        6C7A
+47A5        6559
+47A6        7D14
+47A7        67F4
+47A8        63A5
+47A9        661F
+47AA        7740
+47AB        7559
+47AC        6620
+47AD        5DF1
+47AE        754C
+47AF        5177
+47B0        656C
+47B1        7FA4
+47B2        9806
+47B3        5171
+47B4        6D3B
+47B5        91CF
+47B6        6307
+47B7        89E3
+47B8        5BA4
+47B9        679C
+47BA        5404
+47BB        671B
+47BC        9632
+47BD        7D04
+47BE        61B2
+47BF        967D
+47C0        4E80
+47C1        56F3
+47C2        4E88
+47C3        8272
+47C4        7A0E
+47C5        690D
+47C6        53EF
+47C7        6052
+47C8        4F4D
+47C9        5178
+47CA        5FC5
+47CB        7D9A
+47CC        6025
+47CD        5728
+47CE        57A3
+47CF        541B
+47D0        5EF6
+47D1        5D8B
+47D2        4F01
+47D3        6803
+47D4        670D
+47D5        71B1
+47D6        5272
+47D7        5354
+47D8        6B69
+47D9        53F2
+47DA        512A
+47DB        658E
+47DC        623F
+47DD        5B97
+47DE        683C
+47DF        8FB0
+47E0        7B20
+47E1        5712
+47E2        8AF8
+47E3        8107
+47E4        5553
+47E5        8CE2
+47E6        5F25
+47E7        98A8
+47E8        5F97
+47E9        6613
+47EA        6253
+47EB        982D
+47EC        65ED
+47ED        6BB5
+47EE        52E2
+47EF        7136
+47F0        56E3
+47F1        984D
+47F2        843D
+47F3        914D
+47F4        7A0B
+47F5        8FBB
+47F6        543E
+47F7        611F
+47F8        5BDB
+47F9        53CD
+47FA        7A14
+47FB        9700
+47FC        6E90
+47FD        6C96
+47FE        984C
+4841        8FBC
+4842        8349
+4843        7B97
+4844        76DB
+4845        8FB2
+4846        90A3
+4847        7701
+4848        69D8
+4849        6BBF
+484A        5C11
+484B        4ECB
+484C        53D7
+484D        97F3
+484E        7DE8
+484F        59D4
+4850        5E84
+4851        4FC2
+4852        72B6
+4853        793A
+4854        5E97
+4855        5A9B
+4856        682A
+4857        6ECB
+4858        68A8
+4859        7E04
+485A        53F3
+485B        5DE6
+485C        53CA
+485D        9078
+485E        5C45
+485F        60C5
+4860        7DF4
+4861        70AD
+4862        9928
+4863        9271
+4864        6A21
+4865        6B8A
+4866        7E3E
+4867        4E9C
+4868        7E4A
+4869        4EF2
+486A        5857
+486B        6D88
+486C        8853
+486D        691C
+486E        6717
+486F        5B85
+4870        529F
+4871        5C1A
+4872        8CBF
+4873        60A6
+4874        8102
+4875        7BE0
+4876        4F73
+4877        7D21
+4878        51A8
+4879        6851
+487A        78BA
+487B        7267
+487C        4E26
+487D        5024
+487E        89B3
+487F        8CB4
+4880        7DAD
+4881        7D71
+4882        5BBF
+4883        4E21
+4884        7CD6
+4885        89AA
+4886        9332
+4887        6F84
+4888        65BD
+4889        5BB9
+488A        98DB
+488B        5C40
+488C        7950
+488D        904E
+488E        6C0F
+488F        6539
+4890        76E4
+4891        7A4D
+4892        6E0B
+4893        5DFB
+4894        6DF3
+4895        5FDC
+4896        4E89
+4897        8ECD
+4898        88C5
+4899        9178
+489A        7E54
+489B        67D3
+489C        5E1D
+489D        7DBF
+489E        7C89
+489F        822A
+48A0        7532
+48A1        5468
+48A2        4ED9
+48A3        5F85
+48A4        4F4E
+48A5        7DD1
+48A6        8EFD
+48A7        9EBB
+48A8        6176
+48A9        52B4
+48AA        78EF
+48AB        4E39
+48AC        80B2
+48AD        9650
+48AE        5C0E
+48AF        653E
+48B0        6643
+48B1        5EA7
+48B2        4EF6
+48B3        60F3
+48B4        9A13
+48B5        4ED5
+48B6        4F7F
+48B7        8F2A
+48B8        9854
+48B9        756A
+48BA        5F35
+48BB        805E
+48BC        4F9B
+48BD        6E6F
+48BE        6EB6
+48BF        6821
+48C0        9285
+48C1        92F3
+48C2        878D
+48C3        9756
+48C4        5199
+48C5        5B8C
+48C6        6E2F
+48C7        935B
+48C8        591C
+48C9        5145
+48CA        9F8D
+48CB        7DB1
+48CC        83F1
+48CD        901F
+48CE        52C9
+48CF        5237
+48D0        8D77
+48D1        6469
+48D2        53C2
+48D3        55B6
+48D4        7A42
+48D5        63A8
+48D6        8FD4
+48D7        8077
+48D8        6B62
+48D9        4F1D
+48DA        5E79
+48DB        7403
+48DC        6A29
+48DD        5C55
+48DE        5E61
+48DF        845B
+48E0        5EAD
+48E1        975E
+48E2        53F7
+48E3        5358
+48E4        6B73
+48E5        62E1
+48E6        51E6
+48E7        8A9E
+48E8        6628
+48E9        57DF
+48EA        6DF5
+48EB        518D
+48EC        50CD
+48ED        79D1
+48EE        9B5A
+48EF        7AEF
+48F0        9014
+48F1        6848
+48F2        5B57
+48F3        8AD6
+48F4        517C
+48F5        53C8
+48F6        632F
+48F7        6280
+48F8        5FB9
+48F9        672D
+48FA        7CFB
+48FB        5F93
+48FC        51B7
+48FD        614B
+48FE        5CF0
+4941        5931
+4942        539A
+4943        5074
+4944        6CE8
+4945        6E2C
+4946        9803
+4947        4E57
+4948        8A66
+4949        576A
+494A        8429
+494B        515A
+494C        6C7D
+494D        5B9D
+494E        606D
+494F        6A0B
+4950        6E29
+4951        6577
+4952        8AAC
+4953        82B8
+4954        544A
+4955        6B74
+4956        822C
+4957        98FE
+4958        793C
+4959        5C06
+495A        96E3
+495B        7802
+495C        5224
+495D        5F79
+495E        5F71
+495F        66FD
+4960        5E2F
+4961        9678
+4962        938C
+4963        8AC7
+4964        5F70
+4965        60AA
+4966        6A19
+4967        7533
+4968        5BB3
+4969        6BCD
+496A        88DC
+496B        5E4C
+496C        58F0
+496D        9664
+496E        7B39
+496F        5A66
+4970        4E7E
+4971        7AF6
+4972        829D
+4973        725B
+4974        8CB7
+4975        79FB
+4976        785D
+4977        8336
+4978        52B9
+4979        990A
+497A        52F2
+497B        80A5
+497C        8B19
+497D        7089
+497E        590F
+497F        5802
+4980        67CF
+4981        6255
+4982        5E30
+4983        713C
+4984        786B
+4985        8001
+4986        7A76
+4987        5BE9
+4988        91DD
+4989        65AD
+498A        5C04
+498B        5DEE
+498C        5D50
+498D        6298
+498E        8010
+498F        5BA3
+4990        59CB
+4991        5F8B
+4992        6B8B
+4993        666F
+4994        8C61
+4995        90F7
+4996        5353
+4997        96E2
+4998        85AB
+4999        6B7B
+499A        8015
+499B        64CD
+499C        4EAE
+499D        4E91
+499E        90E1
+499F        52E4
+49A0        6C42
+49A1        8CAB
+49A2        5B98
+49A3        59BB
+49A4        88CF
+49A5        773C
+49A6        4F2F
+49A7        7AAF
+49A8        7BC9
+49A9        968E
+49AA        63DB
+49AB        6842
+49AC        99C5
+49AD        68B6
+49AE        5747
+49AF        8CA1
+49B0        547D
+49B1        738B
+49B2        84B2
+49B3        90C1
+49B4        78E8
+49B5        7B11
+49B6        66F2
+49B7        6975
+49B8        5831
+49B9        63D0
+49BA        8A3C
+49BB        96EA
+49BC        9055
+49BD        88C1
+49BE        9996
+49BF        75C5
+49C0        6850
+49C1        4F59
+49C2        74E6
+49C3        4EE4
+49C4        5439
+49C5        732A
+49C6        672A
+49C7        525B
+49C8        8CA0
+49C9        4F34
+49CA        5100
+49CB        542B
+49CC        9069
+49CD        8FC4
+49CE        5C3B
+49CF        5DCC
+49D0        7B54
+49D1        8FFD
+49D2        8A0E
+49D3        4E08
+49D4        925B
+49D5        71C3
+49D6        8AB2
+49D7        70BA
+49D8        9662
+49D9        679A
+49DA        76AE
+49DB        8B77
+49DC        7DBE
+49DD        96E8
+49DE        6211
+49DF        5BC4
+49E0        837B
+49E1        62BC
+49E2        7D0D
+49E3        76E3
+49E4        7E2B
+49E5        964D
+49E6        572D
+49E7        7ADC
+49E8        7BC4
+49E9        6BBA
+49EA        8C9D
+49EB        698E
+49EC        9047
+49ED        6F14
+49EE        5360
+49EF        8FEB
+49F0        5287
+49F1        624D
+49F2        6566
+49F3        7D1A
+49F4        7D42
+49F5        6BCE
+49F6        7D79
+49F7        7E2E
+49F8        666E
+49F9        7965
+49FA        500B
+49FB        5C02
+49FC        99D2
+49FD        8A55
+49FE        7560
+4A41        5B58
+4A42        8089
+4A43        50BE
+4A44        5E2B
+4A45        6DB2
+4A46        4F8B
+4A47        81E3
+4A48        81F3
+4A49        56E0
+4A4A        7D99
+4A4B        5DF2
+4A4C        899A
+4A4D        6E9D
+4A4E        6D17
+4A4F        8AAD
+4A50        8996
+4A51        731B
+4A52        5DE8
+4A53        7DB2
+4A54        888B
+4A55        4EFB
+4A56        5BC6
+4A57        8896
+4A58        6CC1
+4A59        8457
+4A5A        8F03
+4A5B        6BC5
+4A5C        97FF
+4A5D        8CA9
+4A5E        5E45
+4A5F        82E6
+4A60        63AA
+4A61        5F81
+4A62        78C1
+4A63        821E
+4A64        52AA
+4A65        7AAA
+4A66        5999
+4A67        6297
+4A68        8F14
+4A69        7FD2
+4A6A        4FC3
+4A6B        54C9
+4A6C        967A
+4A6D        66F4
+4A6E        8B1B
+4A6F        5E72
+4A70        5FA9
+4A71        8A2A
+4A72        6D3E
+4A73        7763
+4A74        6483
+4A75        8B58
+4A76        614E
+4A77        5A5A
+4A78        8D85
+4A79        71D0
+4A7A        983C
+4A7B        72E9
+4A7C        583A
+4A7D        5DFE
+4A7E        8A8D
+4A7F        67C4
+4A80        7DE0
+4A81        4F11
+4A82        77ED
+4A83        4F0F
+4A84        5BC5
+4A85        629C
+4A86        5C3C
+4A87        533B
+4A88        6DC0
+4A89        81FC
+4A8A        96D1
+4A8B        904A
+4A8C        6D6E
+4A8D        93E1
+4A8E        5C64
+4A8F        98FC
+4A90        524A
+4A91        6DFB
+4A92        8584
+4A93        968A
+4A94        56FA
+4A95        5883
+4A96        7766
+4A97        9805
+4A98        4E73
+4A99        8C46
+4A9A        8A31
+4A9B        7DD2
+4A9C        8FF0
+4A9D        6D6A
+4A9E        4F9D
+4A9F        6B6F
+4AA0        6B27
+4AA1        62C5
+4AA2        511F
+4AA3        9769
+4AA4        5374
+4AA5        9AA8
+4AA6        6775
+4AA7        887F
+4AA8        5305
+4AA9        7570
+4AAA        8D70
+4AAB        864E
+4AAC        5CEF
+4AAD        8CDE
+4AAE        5FF5
+4AAF        725F
+4AB0        7686
+4AB1        609F
+4AB2        80CC
+4AB3        59EB
+4AB4        8131
+4AB5        5E0C
+4AB6        8A17
+4AB7        9676
+4AB8        82D7
+4AB9        74B0
+4ABA        84B8
+4ABB        50D5
+4ABC        96F2
+4ABD        7248
+4ABE        7834
+4ABF        6DD1
+4AC0        6E09
+4AC1        67FF
+4AC2        6F54
+4AC3        5915
+4AC4        500D
+4AC5        72AC
+4AC6        9EC4
+4AC7        7B46
+4AC8        9B3C
+4AC9        6563
+4ACA        53BB
+4ACB        8A98
+4ACC        91DC
+4ACD        9818
+4ACE        6FC3
+4ACF        65C5
+4AD0        501F
+4AD1        7F8A
+4AD2        6F64
+4AD3        9031
+4AD4        5F3E
+4AD5        63F4
+4AD6        9038
+4AD7        8B66
+4AD8        7BE4
+4AD9        7206
+4ADA        6843
+4ADB        72EC
+4ADC        65CF
+4ADD        82A6
+4ADE        5BA2
+4ADF        6960
+4AE0        9EA6
+4AE1        52DF
+4AE2        6790
+4AE3        639B
+4AE4        7D75
+4AE5        9855
+4AE6        5DF3
+4AE7        5805
+4AE8        8ACB
+4AE9        95A3
+4AEA        8863
+4AEB        8CA8
+4AEC        5B63
+4AED        5E8A
+4AEE        5449
+4AEF        786C
+4AF0        7D2B
+4AF1        8CA2
+4AF2        5352
+4AF3        7D76
+4AF4        8CB8
+4AF5        7070
+4AF6        547C
+4AF7        6545
+4AF8        6676
+4AF9        73B2
+4AFA        56F2
+4AFB        7BB1
+4AFC        58A8
+4AFD        7A81
+4AFE        66AE
+4B41        8087
+4B42        59FF
+4B43        8840
+4B44        56F0
+4B45        7B51
+4B46        6DF7
+4B47        5F01
+4B48        934B
+4B49        9000
+4B4A        4FE3
+4B4B        675F
+4B4C        4FBF
+4B4D        8CC3
+4B4E        526F
+4B4F        63A1
+4B50        5442
+4B51        8907
+4B52        698A
+4B53        5E2D
+4B54        5A18
+4B55        7518
+4B56        514D
+4B57        5E7E
+4B58        50B5
+4B59        5BDD
+4B5A        68D2
+4B5B        745E
+4B5C        69FB
+4B5D        5FAE
+4B5E        55E3
+4B5F        8A70
+4B60        5BF8
+4B61        5824
+4B62        8358
+4B63        5F13
+4B64        5E95
+4B65        706F
+4B66        751A
+4B67        7D05
+4B68        60E3
+4B69        7E70
+4B6A        5012
+4B6B        5238
+4B6C        83EF
+4B6D        5373
+4B6E        5F31
+4B6F        6A2B
+4B70        9CF4
+4B71        53CC
+4B72        6D32
+4B73        4EAB
+4B74        4E92
+4B75        842C
+4B76        8A8C
+4B77        65E2
+4B78        6F01
+4B79        80A9
+4B7A        9DF9
+4B7B        8B72
+4B7C        7B52
+4B7D        9589
+4B7E        6D74
+4B7F        63A2
+4B80        6590
+4B81        5BD2
+4B82        6319
+4B83        8AB0
+4B84        76DF
+4B85        99A8
+4B86        7A74
+4B87        8236
+4B88        8846
+4B89        8061
+4B8A        6557
+4B8B        5922
+4B8C        9644
+4B8D        88AB
+4B8E        9326
+4B8F        7B4B
+4B90        62B5
+4B91        5371
+4B92        5E81
+4B93        5BDF
+4B94        4F75
+4B95        58C1
+4B96        7058
+4B97        7DCA
+4B98        5438
+4B99        73E0
+4B9A        52D8
+4B9B        5208
+4B9C        78D0
+4B9D        6B23
+4B9E        6838
+4B9F        4E43
+4BA0        690E
+4BA1        8377
+4BA2        6ED1
+4BA3        98F2
+4BA4        8170
+4BA5        8857
+4BA6        8EF8
+4BA7        798E
+4BA8        83DC
+4BA9        8FCE
+4BAA        7E01
+4BAB        5510
+4BAC        4EA8
+4BAD        8A33
+4BAE        9162
+4BAF        5EFB
+4BB0        606F
+4BB1        4E86
+4BB2        664B
+4BB3        6368
+4BB4        5217
+4BB5        8056
+4BB6        51FD
+4BB7        7642
+4BB8        821F
+4BB9        9685
+4BBA        50CF
+4BBB        662F
+4BBC        4F3C
+4BBD        4E59
+4BBE        6A3D
+4BBF        4E71
+4BC0        523A
+4BC1        8ACF
+4BC2        6A58
+4BC3        66FF
+4BC4        670B
+4BC5        653B
+4BC6        9732
+4BC7        5EC3
+4BC8        8A13
+4BC9        5782
+4BCA        604B
+4BCB        866B
+4BCC        95D8
+4BCD        60A9
+4BCE        4E01
+4BCF        63CF
+4BD0        6FC0
+4BD1        659C
+4BD2        8CAC
+4BD3        8305
+4BD4        7CA7
+4BD5        6050
+4BD6        96F7
+4BD7        5FCD
+4BD8        640D
+4BD9        5B54
+4BDA        900F
+4BDB        62D3
+4BDC        59B9
+4BDD        7159
+4BDE        51AC
+4BDF        79F0
+4BE0        552F
+4BE1        5275
+4BE2        6697
+4BE3        80F8
+4BE4        4E98
+4BE5        4ECF
+4BE6        51CD
+4BE7        9D5C
+4BE8        5144
+4BE9        7A93
+4BEA        67F1
+4BEB        5841
+4BEC        7C21
+4BED        8861
+4BEE        5C31
+4BEF        68DA
+4BF0        91E7
+4BF1        9DF2
+4BF2        63EE
+4BF3        6575
+4BF4        84EE
+4BF5        523B
+4BF6        6B32
+4BF7        7C98
+4BF8        5982
+4BF9        969C
+4BFA        8987
+4BFB        7C9F
+4BFC        9006
+4BFD        62DB
+4BFE        66DC
+4C41        6355
+4C42        6982
+4C43        50AC
+4C44        623B
+4C45        5FD8
+4C46        63DA
+4C47        75DB
+4C48        627F
+4C49        616E
+4C4A        8266
+4C4B        7C95
+4C4C        716E
+4C4D        96C7
+4C4E        7F6A
+4C4F        5426
+4C50        5200
+4C51        83D3
+4C52        5211
+4C53        594F
+4C54        9D28
+4C55        574A
+4C56        66C7
+4C57        9858
+4C58        820E
+4C59        6614
+4C5A        733F
+4C5B        50B7
+4C5C        6551
+4C5D        5EB8
+4C5E        5B6B
+4C5F        55AC
+4C60        5FEB
+4C61        6388
+4C62        8CAF
+4C63        676F
+4C64        5951
+4C65        5A01
+4C66        71E5
+4C67        5DE3
+4C68        8C6A
+4C69        6271
+4C6A        81F4
+4C6B        5C3A
+4C6C        5F92
+4C6D        9045
+4C6E        7384
+4C6F        7149
+4C70        79D8
+4C71        796D
+4C72        9003
+4C73        83CC
+4C74        5FB4
+4C75        5B8D
+4C76        6279
+4C77        64AE
+4C78        7D18
+4C79        723E
+4C7A        5BEE
+4C7B        65E7
+4C7C        8D08
+4C7D        9E78
+4C7E        52E7
+4C7F        5D07
+4C80        9F62
+4C81        6069
+4C82        536F
+4C83        6681
+4C84        9663
+4C85        5E3D
+4C86        62B1
+4C87        722A
+4C88        6E4A
+4C89        93AE
+4C8A        79E6
+4C8B        53E5
+4C8C        809D
+4C8D        88FE
+4C8E        53B3
+4C8F        6C88
+4C90        6E7F
+4C91        5141
+4C92        9091
+4C93        6F6E
+4C94        84C4
+4C95        85EA
+4C96        8129
+4C97        6BD2
+4C98        663C
+4C99        7F72
+4C9A        73C2
+4C9B        5F1F
+4C9C        790E
+4C9D        60B2
+4C9E        72ED
+4C9F        58EE
+4CA0        8179
+4CA1        8E8D
+4CA2        5C65
+4CA3        5DE7
+4CA4        6C37
+4CA5        6DE1
+4CA6        862D
+4CA7        72AF
+4CA8        8E0A
+4CA9        7C92
+4CAA        8218
+4CAB        8033
+4CAC        63A7
+4CAD        9291
+4CAE        5019
+4CAF        8155
+4CB0        8A69
+4CB1        8EDF
+4CB2        66B4
+4CB3        8133
+4CB4        7591
+4CB5        6B20
+4CB6        6669
+4CB7        90F5
+4CB8        4E32
+4CB9        73EA
+4CBA        693F
+4CBB        7687
+4CBC        707D
+4CBD        7D3A
+4CBE        6148
+4CBF        8607
+4CC0        99FF
+4CC1        59C9
+4CC2        7832
+4CC3        7815
+4CC4        907F
+4CC5        80A1
+4CC6        5C3F
+4CC7        66A2
+4CC8        9418
+4CC9        6D44
+4CCA        5E55
+4CCB        5854
+4CCC        7B95
+4CCD        8DE1
+4CCE        4EA1
+4CCF        8C5A
+4CD0        81E8
+4CD1        89E6
+4CD2        9670
+4CD3        5263
+4CD4        74F6
+4CD5        9A5A
+4CD6        6012
+4CD7        520A
+4CD8        7434
+4CD9        9801
+4CDA        907A
+4CDB        5504
+4CDC        7956
+4CDD        5230
+4CDE        54B2
+4CDF        8A34
+4CE0        96A3
+4CE1        4FF3
+4CE2        9283
+4CE3        91E3
+4CE4        7D39
+4CE5        9688
+4CE6        4F51
+4CE7        7D61
+4CE8        5DBA
+4CE9        9BAE
+4CEA        5F80
+4CEB        795D
+4CEC        8597
+4CED        8DA3
+4CEE        7C60
+4CEF        5C0A
+4CF0        7565
+4CF1        85A9
+4CF2        63D6
+4CF3        9E97
+4CF4        7D22
+4CF5        5375
+4CF6        9AEA
+4CF7        9042
+4CF8        6B3D
+4CF9        7D0B
+4CFA        6392
+4CFB        80AA
+4CFC        7DE9
+4CFD        9F3B
+4CFE        99C6
+4D41        6D78
+4D42        6731
+4D43        5531
+4D44        6398
+4D45        7825
+4D46        5CB3
+4D47        5DE1
+4D48        92AD
+4D49        98FD
+4D4A        9810
+4D4B        6CE3
+4D4C        6B64
+4D4D        5321
+4D4E        6B53
+4D4F        5E8F
+4D50        7AE5
+4D51        502B
+4D52        6E56
+4D53        62BD
+4D54        8276
+4D55        6A9C
+4D56        4E18
+4D57        57F7
+4D58        752B
+4D59        7C97
+4D5A        82EB
+4D5B        9802
+4D5C        811A
+4D5D        73CD
+4D5E        8F9B
+4D5F        5C0B
+4D60        63E1
+4D61        7372
+4D62        8150
+4D63        80E1
+4D64        5B99
+4D65        76D7
+4D66        6291
+4D67        65EC
+4D68        8A3A
+4D69        5947
+4D6A        65E8
+4D6B        6E7E
+4D6C        6696
+4D6D        55AB
+4D6E        8F09
+4D6F        92ED
+4D70        9396
+4D71        4EEE
+4D72        755C
+4D73        6F38
+4D74        8F9E
+4D75        7981
+4D76        5C01
+4D77        62E0
+4D78        9BE8
+4D79        91C8
+4D7A        6276
+4D7B        65CB
+4D7C        8E0F
+4D7D        8B21
+4D7E        699B
+4D7F        6216
+4D80        5A92
+4D81        90B8
+4D82        50DA
+4D83        79DF
+4D84        6C41
+4D85        5270
+4D86        9175
+4D87        8B39
+4D88        685D
+4D89        5875
+4D8A        819C
+4D8B        5B9C
+4D8C        8A89
+4D8D        8A72
+4D8E        9D8F
+4D8F        6377
+4D90        5974
+4D91        8AA4
+4D92        52B1
+4D93        6962
+4D94        5C48
+4D95        9CE9
+4D96        673A
+4D97        75B2
+4D98        6D1E
+4D99        4F0D
+4D9A        7E6D
+4D9B        7B48
+4D9C        7FCC
+4D9D        65E6
+4D9E        59A5
+4D9F        79E9
+4DA0        6212
+4DA1        6EDE
+4DA2        770B
+4DA3        8CA7
+4DA4        65BC
+4DA5        885D
+4DA6        6ADB
+4DA7        5C4A
+4DA8        8074
+4DA9        9084
+4DAA        8ECC
+4DAB        65D7
+4DAC        57F9
+4DAD        708E
+4DAE        6F06
+4DAF        5E7C
+4DB0        77AC
+4DB1        4FF5
+4DB2        5949
+4DB3        81ED
+4DB4        9B45
+4DB5        7FFC
+4DB6        8178
+4DB7        69FD
+4DB8        6CCA
+4DB9        69C7
+4DBA        79D2
+4DBB        8B1D
+4DBC        9ED9
+4DBD        81D3
+4DBE        7A3C
+4DBF        7968
+4DC0        6F5C
+4DC1        63B2
+4DC2        8DDD
+4DC3        6383
+4DC4        6E9C
+4DC5        5E33
+4DC6        61F8
+4DC7        76BF
+4DC8        642C
+4DC9        7DB4
+4DCA        6247
+4DCB        6458
+4DCC        6816
+4DCD        5F69
+4DCE        9022
+4DCF        7A1A
+4DD0        82B9
+4DD1        70C8
+4DD2        9A12
+4DD3        6163
+4DD4        6FEF
+4DD5        53EB
+4DD6        9D3B
+4DD7        62FE
+4DD8        60A0
+4DD9        9591
+4DDA        6D99
+4DDB        6162
+4DDC        9298
+4DDD        635C
+4DDE        9707
+4DDF        8972
+4DE0        683D
+4DE1        51E1
+4DE2        9B54
+4DE3        608C
+4DE4        5B22
+4DE5        99C4
+4DE6        7126
+4DE7        8A73
+4DE8        971C
+4DE9        7396
+4DEA        67D4
+4DEB        60A3
+4DEC        4E11
+4DED        4EF0
+4DEE        8CDB
+4DEF        8CB0
+4DF0        7912
+4DF1        9774
+4DF2        8986
+4DF3        5146
+4DF4        57DC
+4DF5        99D0
+4DF6        80C3
+4DF7        8338
+4DF8        78A7
+4DF9        86CD
+4DFA        7F85
+4DFB        5049
+4DFC        8247
+4DFD        690B
+4DFE        7C4D
+4E41        53EA
+4E42        5F26
+4E43        6E25
+4E44        6881
+4E45        9375
+4E46        5DFD
+4E47        5347
+4E48        9727
+4E49        643A
+4E4A        75C7
+4E4B        6FA4
+4E4C        73A9
+4E4D        77E9
+4E4E        9451
+4E4F        8B5C
+4E50        808C
+4E51        674E
+4E52        4EAD
+4E53        582F
+4E54        7573
+4E55        8ED2
+4E56        6CE5
+4E57        9320
+4E58        8FF7
+4E59        7D33
+4E5A        72C2
+4E5B        8217
+4E5C        7422
+4E5D        82C5
+4E5E        9A30
+4E5F        773A
+4E60        5F84
+4E61        9673
+4E62        64AD
+4E63        920D
+4E64        74DC
+4E65        60C7
+4E66        86ED
+4E67        4FFA
+4E68        52A3
+4E69        6A3A
+4E6A        7720
+4E6B        5320
+4E6C        61B6
+4E6D        5674
+4E6E        8776
+4E6F        6CBF
+4E70        505C
+4E71        602A
+4E72        8466
+4E73        6B96
+4E74        6DBC
+4E75        97D3
+4E76        968F
+4E77        6876
+4E78        60D1
+4E79        5378
+4E7A        64A4
+4E7B        51A0
+4E7C        9154
+4E7D        5DF4
+4E7E        629E
+4E7F        5E63
+4E80        929A
+4E81        7693
+4E82        6C5A
+4E83        6597
+4E84        50E7
+4E85        7C82
+4E86        5F6B
+4E87        6CE1
+4E88        5F6C
+4E89        5AC1
+4E8A        6F2C
+4E8B        852D
+4E8C        6442
+4E8D        5750
+4E8E        58C7
+4E8F        8CFC
+4E90        8A5E
+4E91        7A7F
+4E92        689D
+4E93        7E26
+4E94        7A40
+4E95        7344
+4E96        8AEB
+4E97        4FD7
+4E98        7A63
+4E99        8036
+4E9A        7DEF
+4E9B        80C6
+4E9C        8AED
+4E9D        731F
+4E9E        8FEA
+4E9F        4F0E
+4EA0        758B
+4EA1        518A
+4EA2        6734
+4EA3        5FD9
+4EA4        61C7
+4EA5        65AF
+4EA6        9CF3
+4EA7        5ECA
+4EA8        9262
+4EA9        68DF
+4EAA        6CB8
+4EAB        80F4
+4EAC        57CB
+4EAD        6C99
+4EAE        96A0
+4EAF        5B64
+4EB0        58F1
+4EB1        68C4
+4EB2        5410
+4EB3        982C
+4EB4        8A87
+4EB5        4E5E
+4EB6        6167
+4EB7        9BAB
+4EB8        90AA
+4EB9        55B0
+4EBA        82BD
+4EBB        596A
+4EBC        66F3
+4EBD        8299
+4EBE        5893
+4EBF        719F
+4EC0        6284
+4EC1        67D1
+4EC2        9063
+4EC3        5ACC
+4EC4        6C57
+4EC5        7CE7
+4EC6        5851
+4EC7        64B2
+4EC8        58CA
+4EC9        830E
+4ECA        5968
+4ECB        5302
+4ECC        5A46
+4ECD        8702
+4ECE        6065
+4ECF        72D9
+4ED0        89A7
+4ED1        6689
+4ED2        66F9
+4ED3        5D6F
+4ED4        5BB0
+4ED5        96BC
+4ED6        636E
+4ED7        60DC
+4ED8        7948
+4ED9        51DD
+4EDA        8606
+4EDB        5EC9
+4EDC        7554
+4EDD        596E
+4EDE        6B04
+4EDF        4F43
+4EE0        7B94
+4EE1        67DA
+4EE2        62DD
+4EE3        628A
+4EE4        971E
+4EE5        62ED
+4EE6        6EC5
+4EE7        508D
+4EE8        67B6
+4EE9        80E4
+4EEA        9EBF
+4EEB        5EB5
+4EEC        638C
+4EED        85CD
+4EEE        9867
+4EEF        52C5
+4EF0        6016
+4EF1        68CB
+4EF2        61D0
+4EF3        5751
+4EF4        8F29
+4EF5        5FAA
+4EF6        81A8
+4EF7        7D62
+4EF8        71C8
+4EF9        54C0
+4EFA        69CC
+4EFB        6B3E
+4EFC        65AC
+4EFD        63C3
+4EFE        4F46
+4F41        7B1B
+4F42        6B86
+4F43        88F8
+4F44        5203
+4F45        732E
+4F46        6687
+4F47        7D17
+4F48        57F4
+4F49        570F
+4F4A        618E
+4F4B        970A
+4F4C        7C3F
+4F4D        8B00
+4F4E        7881
+4F4F        8CE0
+4F50        548B
+4F51        7B87
+4F52        745B
+4F53        7C11
+4F54        8870
+4F55        5398
+4F56        5448
+4F57        6CF3
+4F58        6F22
+4F59        53F6
+4F5A        88B4
+4F5B        5301
+4F5C        7A6B
+4F5D        8695
+4F5E        586B
+4F5F        5D29
+4F60        88C2
+4F61        62D2
+4F62        4E1E
+4F63        5036
+4F64        96C0
+4F65        7363
+4F66        8A3B
+4F67        5176
+4F68        7199
+4F69        7FE0
+4F6A        8888
+4F6B        7E1E
+4F6C        4E4F
+4F6D        84CB
+4F6E        6F2B
+4F6F        5859
+4F70        936C
+4F71        53E9
+4F72        865A
+4F73        9149
+4F74        86EF
+4F75        5E06
+4F76        5507
+4F77        902E
+4F78        6795
+4F79        846C
+4F7A        5BA5
+4F7B        82A5
+4F7C        8431
+4F7D        6D8C
+4F7E        63FA
+4F7F        4EA5
+4F80        51C6
+4F81        6328
+4F82        7F70
+4F83        5B5F
+4F84        5DBD
+4F85        99C8
+4F86        53EC
+4F87        7985
+4F88        8A54
+4F89        7962
+4F8A        88DF
+4F8B        5B09
+4F8C        4FB5
+4F8D        4F91
+4F8E        9B8E
+4F8F        5192
+4F90        96F0
+4F91        6DAF
+4F92        622F
+4F93        8490
+4F94        8CDC
+4F95        5075
+4F96        5CE0
+4F97        4E14
+4F98        4F83
+4F99        7C54
+4F9A        84D1
+4F9B        77B3
+4F9C        8AEE
+4F9D        5CE8
+4F9E        62F6
+4F9F        663B
+4FA0        8A93
+4FA1        8526
+4FA2        8A95
+4FA3        65FA
+4FA4        6714
+4FA5        53D4
+4FA6        62AB
+4FA7        8CE6
+4FA8        88F3
+4FA9        5BE7
+4FAA        868A
+4FAB        668E
+4FAC        582A
+4FAD        6170
+4FAE        696F
+4FAF        9F13
+4FB0        7A92
+4FB1        7893
+4FB2        6A7F
+4FB3        9017
+4FB4        9266
+4FB5        7D10
+4FB6        7BC7
+4FB7        6EF4
+4FB8        821C
+4FB9        5C3D
+4FBA        62CD
+4FBB        85C1
+4FBC        6F02
+4FBD        6E67
+4FBE        6691
+4FBF        85A6
+4FC0        637A
+4FC1        821B
+4FC2        4F8D
+4FC3        5091
+4FC4        8A02
+4FC5        62EC
+4FC6        9BC9
+4FC7        7A3D
+4FC8        7C9B
+4FC9        50C5
+4FCA        9019
+4FCB        708A
+4FCC        7C8B
+4FCD        64EC
+4FCE        665F
+4FCF        6562
+4FD0        732B
+4FD1        5339
+4FD2        67A0
+4FD3        55A7
+4FD4        6D2A
+4FD5        7A3F
+4FD6        64E6
+4FD7        79A7
+4FD8        67D8
+4FD9        7B26
+4FDA        96BB
+4FDB        6311
+4FDC        72A0
+4FDD        5C6F
+4FDE        7026
+4FDF        97EE
+4FE0        60DF
+4FE1        8AFE
+4FE2        8B04
+4FE3        8494
+4FE4        9BD6
+4FE5        82AF
+4FE6        932C
+4FE7        6606
+4FE8        9640
+4FE9        5BC2
+4FEA        86C7
+4FEB        7949
+4FEC        8017
+4FED        6919
+4FEE        7092
+4FEF        963B
+4FF0        7C7E
+4FF1        59D3
+4FF2        5B5C
+4FF3        7D1B
+4FF4        91D8
+4FF5        6A80
+4FF6        85E9
+4FF7        6905
+4FF8        6C93
+4FF9        502D
+4FFA        4EA6
+4FFB        7FC1
+4FFC        61A4
+4FFD        8CCA
+4FFE        9665
+5041        93D1
+5042        53F1
+5043        598A
+5044        8EAC
+5045        62D8
+5046        6867
+5047        71D5
+5048        7B67
+5049        504F
+504A        67D0
+504B        82D1
+504C        978D
+504D        748B
+504E        80BA
+504F        7336
+5050        514E
+5051        8105
+5052        90CA
+5053        584A
+5054        67FE
+5055        6FF1
+5056        5FFD
+5057        76C6
+5058        9A0E
+5059        507D
+505A        9694
+505B        5EF7
+505C        7BB8
+505D        904D
+505E        6C4E
+505F        85FB
+5060        819D
+5061        67AF
+5062        564C
+5063        5606
+5064        8C8C
+5065        56DA
+5066        73ED
+5067        8CC4
+5068        8FC5
+5069        96F6
+506A        6C50
+506B        8944
+506C        8F3F
+506D        7D5E
+506E        60E8
+506F        72FC
+5070        7D9C
+5071        8463
+5072        5CFB
+5073        5446
+5074        5D16
+5075        6CA1
+5076        81B3
+5077        58FA
+5078        5BB4
+5079        8108
+507A        541F
+507B        8CBC
+507C        6182
+507D        78A9
+507E        6FE1
+507F        91A4
+5080        76F2
+5081        6020
+5082        76FE
+5083        84C9
+5084        7F36
+5085        4EC7
+5086        755D
+5087        7A17
+5088        84EC
+5089        75F4
+508A        4F3A
+508B        676D
+508C        7460
+508D        62F3
+508E        6F20
+508F        79E4
+5090        87F9
+5091        6094
+5092        6234
+5093        66AB
+5094        820C
+5095        8499
+5096        723A
+5097        5FCC
+5098        6109
+5099        70CF
+509A        7261
+509B        7A50
+509C        5098
+509D        9AED
+509E        5D69
+509F        601C
+50A0        6667
+50A1        99B4
+50A2        5E7B
+50A3        643E
+50A4        5830
+50A5        53C9
+50A6        7A9F
+50A7        990C
+50A8        9B42
+50A9        8F5F
+50AA        7AAE
+50AB        5B9B
+50AC        68A2
+50AD        6249
+50AE        7984
+50AF        9DFA
+50B0        5451
+50B1        932F
+50B2        8AC4
+50B3        5F90
+50B4        8DF3
+50B5        5A2F
+50B6        80DE
+50B7        6D29
+50B8        7A4F
+50B9        84BC
+50BA        9D2B
+50BB        9010
+50BC        6D38
+50BD        916A
+50BE        6FC1
+50BF        9905
+50C0        6BBB
+50C1        5EB6
+50C2        91B8
+50C3        5076
+50C4        6F0F
+50C5        4E19
+50C6        540F
+50C7        9675
+50C8        6C72
+50C9        51B4
+50CA        5631
+50CB        9F20
+50CC        66A6
+50CD        5F0A
+50CE        75AB
+50CF        51F8
+50D0        674F
+50D1        8DF5
+50D2        6C70
+50D3        8A6B
+50D4        757F
+50D5        5CAC
+50D6        6841
+50D7        8CD3
+50D8        9BDB
+50D9        8475
+50DA        6893
+50DB        840C
+50DC        72DB
+50DD        7577
+50DE        8568
+50DF        783A
+50E0        847A
+50E1        5F10
+50E2        831C
+50E3        6813
+50E4        6E1A
+50E5        9DAF
+50E6        51F9
+50E7        7980
+50E8        4E99
+50E9        5EE3
+50EA        908A
+50EB        80AF
+50EC        59A8
+50ED        77DB
+50EE        8D74
+50EF        8A1F
+50F0        673D
+50F1        533F
+50F2        8A0A
+50F3        5618
+50F4        6756
+50F5        53D9
+50F6        4F10
+50F7        7409
+50F8        5A41
+50F9        4FF8
+50FA        79B0
+50FB        9838
+50FC        8E2A
+50FD        9D60
+50FE        8F44
+5141        65A5
+5142        75BE
+5143        906D
+5144        867B
+5145        60BC
+5146        51B6
+5147        5937
+5148        7D2F
+5149        916C
+514A        69AE
+514B        7CE0
+514C        792A
+514D        5D14
+514E        64C1
+514F        58EC
+5150        589C
+5151        8D66
+5152        66D9
+5153        61F2
+5154        912D
+5155        6E58
+5156        9435
+5157        965B
+5158        7272
+5159        5F6A
+515A        5E9A
+515B        8F1B
+515C        5B95
+515D        5C39
+515E        9013
+515F        834F
+5160        7CCE
+5161        620A
+5162        90ED
+5163        691B
+5164        6E15
+5165        65DB
+5166        66FE
+5167        4E9F
+5168        55AA
+5169        7A83
+516A        83E9
+516B        8B83
+516C        846D
+516D        83F0
+516E        7F50
+516F        918D
+5170        9190
+5171        758E
+5172        95A5
+5173        81E7
+5174        75E2
+5175        61A9
+5176        8A50
+5177        95B2
+5178        53A8
+5179        59F6
+517A        9813
+517B        7891
+517C        7C17
+517D        6B3A
+517E        57E0
+517F        620E
+5180        83D6
+5181        8AD2
+5182        75D4
+5183        927E
+5184        59DC
+5185        5289
+5186        9087
+5187        6FFE
+5188        7473
+5189        5C09
+518A        9D6C
+518B        84FC
+518C        7CDF
+518D        7BAD
+518E        8A6E
+518F        594E
+5190        56A2
+5191        819A
+5192        7947
+5193        6636
+5194        53E1
+5195        7887
+5196        58CC
+5197        9397
+5198        6E13
+5199        5256
+519A        828B
+519B        9E9F
+519C        9583
+519D        658C
+519E        9E93
+519F        7345
+51A0        6E26
+51A1        9D07
+51A2        5983
+51A3        7DAC
+51A4        96C1
+51A5        61BE
+51A6        6762
+51A7        9ECE
+51A8        90A8
+51A9        9187
+51AA        9F0E
+51AB        7C38
+51AC        51F1
+51AD        8599
+51AE        524C
+51AF        540E
+51B0        7901
+51B1        655E
+51B2        6668
+51B3        5CE1
+51B4        7566
+51B5        76C8
+51B6        8679
+51B7        531D
+51B8        5506
+51B9        7926
+51BA        8912
+51BB        77EF
+51BC        7CC0
+51BD        570B
+51BE        515C
+51BF        7E8A
+51C0        535C
+51C1        8A60
+51C2        65A7
+51C3        8766
+51C4        5766
+51C5        6AE8
+51C6        87FB
+51C7        5E16
+51C8        7AEA
+51C9        8D73
+51CA        771E
+51CB        737A
+51CC        66E0
+51CD        9410
+51CE        816B
+51CF        7B08
+51D0        91FC
+51D1        5737
+51D2        6FE4
+51D3        856A
+51D4        7E55
+51D5        9957
+51D6        87BA
+51D7        694A
+51D8        818F
+51D9        5EFF
+51DA        891C
+51DB        72D0
+51DC        9846
+51DD        9EDB
+51DE        8D99
+51DF        5DD6
+51E0        62B9
+51E1        64AB
+51E2        4F76
+51E3        613F
+51E4        68AF
+51E5        5F14
+51E6        800C
+51E7        92F8
+51E8        7BC1
+51E9        52FE
+51EA        664F
+51EB        9177
+51EC        51F6
+51ED        97A0
+51EE        839E
+51EF        647A
+51F0        9C3A
+51F1        67F5
+51F2        7C4F
+51F3        685F
+51F4        9B6F
+51F5        9F4B
+51F6        7FFB
+51F7        9348
+51F8        4FF6
+51F9        9E92
+51FA        9197
+51FB        96DB
+51FC        5BE6
+51FD        6CCC
+51FE        7CFE
+5241        9453
+5242        6822
+5243        66B9
+5244        5BD4
+5245        98F4
+5246        8AE6
+5247        8154
+5248        7827
+5249        74BD
+524A        6ED3
+524B        9288
+524C        5A20
+524D        5B8B
+524E        86F8
+524F        760D
+5250        865C
+5251        6641
+5252        91C9
+5253        5589
+5254        7A4E
+5255        59E5
+5256        6042
+5257        932B
+5258        5B5A
+5259        849C
+525A        5C91
+525B        96CD
+525C        62D9
+525D        675C
+525E        6787
+525F        5E7D
+5260        8650
+5261        9EB9
+5262        5CB1
+5263        80CE
+5264        7A00
+5265        8ABC
+5266        5700
+5267        8096
+5268        7D72
+5269        9211
+526A        8098
+526B        907C
+526C        7761
+526D        8737
+526E        9075
+526F        817A
+5270        7C3E
+5271        6EA2
+5272        965E
+5273        7E90
+5274        72D7
+5275        58FD
+5276        60B3
+5277        9786
+5278        7E88
+5279        587E
+527A        6E20
+527B        84DC
+527C        6961
+527D        77AD
+527E        5197
+527F        652A
+5280        6777
+5281        5DCD
+5282        6101
+5283        932E
+5284        5954
+5285        6367
+5286        798D
+5287        7AFF
+5288        80D6
+5289        58B3
+528A        6168
+528B        6AC3
+528C        7483
+528D        9B92
+528E        660A
+528F        642D
+5290        5118
+5291        6763
+5292        809B
+5293        9C10
+5294        4FC9
+5295        6953
+5296        7A1C
+5297        52FF
+5298        6055
+5299        768E
+529A        817F
+529B        5642
+529C        5F6D
+529D        7194
+529E        70BB
+529F        7436
+52A0        8000
+52A1        874B
+52A2        55DA
+52A3        7435
+52A4        7690
+52A5        96EB
+52A6        66DD
+52A7        751C
+52A8        633D
+52A9        6EC9
+52AA        7C64
+52AB        7CA5
+52AC        6D35
+52AD        935C
+52AE        7027
+52AF        5E25
+52B0        701D
+52B1        54BD
+52B2        611A
+52B3        6973
+52B4        6C6A
+52B5        559A
+52B6        6D19
+52B7        96CC
+52B8        5BE1
+52B9        59FB
+52BA        697C
+52BB        914C
+52BC        7709
+52BD        8500
+52BE        7A46
+52BF        7872
+52C0        92E4
+52C1        8CED
+52C2        7CFA
+52C3        9D1B
+52C4        814E
+52C5        9AC4
+52C6        68A0
+52C7        6DCB
+52C8        5918
+52C9        83B1
+52CA        5629
+52CB        9B41
+52CC        6897
+52CD        70B3
+52CE        9771
+52CF        9419
+52D0        67A2
+52D1        6802
+52D2        7895
+52D3        68A7
+52D4        50D6
+52D5        80B1
+52D6        5EF8
+52D7        82D4
+52D8        797A
+52D9        67CA
+52DA        7E4D
+52DB        69CD
+52DC        51C4
+52DD        723D
+52DE        6829
+52DF        99B3
+52E0        5F3C
+52E1        8F61
+52E2        682B
+52E3        6155
+52E4        6591
+52E5        8FB1
+52E6        7E1B
+52E7        9798
+52E8        9952
+52E9        8877
+52EA        5B2C
+52EB        6631
+52EC        4FA0
+52ED        6939
+52EE        6AFB
+52EF        5BB5
+52F0        7AC8
+52F1        5026
+52F2        5944
+52F3        9059
+52F4        7B25
+52F5        7B4F
+52F6        8E74
+52F7        8543
+52F8        5858
+52F9        8B0E
+52FA        5039
+52FB        8654
+52FC        97F6
+52FD        7569
+52FE        72F8
+5341        4EF7
+5342        9D89
+5343        5016
+5344        51CC
+5345        62CC
+5346        91C6
+5347        8755
+5348        649A
+5349        88F4
+534A        91E6
+534B        6854
+534C        695A
+534D        6C40
+534E        7B6C
+534F        6741
+5350        77D7
+5351        8823
+5352        5384
+5353        8EAF
+5354        7280
+5355        8C6B
+5356        788D
+5357        7165
+5358        8207
+5359        68B1
+535A        8D04
+535B        9077
+535C        701E
+535D        8FE6
+535E        810A
+535F        81BF
+5360        89DC
+5361        68B3
+5362        6ADF
+5363        92EA
+5364        95C7
+5365        7957
+5366        7A20
+5367        53A9
+5368        8E5F
+5369        786F
+536A        79B9
+536B        5F27
+536C        5ED6
+536D        6853
+536E        93AC
+536F        919C
+5370        691A
+5371        5806
+5372        64B0
+5373        7E4B
+5374        7D8F
+5375        68F2
+5376        6EA5
+5377        82DB
+5378        9192
+5379        5243
+537A        8EB0
+537B        9081
+537C        721B
+537D        7DCB
+537E        7656
+537F        59AC
+5380        6FE0
+5381        8B28
+5382        80A2
+5383        5544
+5384        6070
+5385        5F4A
+5386        68C8
+5387        633A
+5388        9438
+5389        9B4F
+538A        81E5
+538B        6A17
+538C        70DD
+538D        69A7
+538E        614C
+538F        920E
+5390        9310
+5391        9BAD
+5392        52D7
+5393        925E
+5394        92F9
+5395        5993
+5396        7696
+5397        66FB
+5398        5769
+5399        73CA
+539A        7678
+539B        6A1F
+539C        7E9C
+539D        9811
+539E        8CD1
+539F        5840
+53A0        6349
+53A1        871C
+53A2        62D0
+53A3        60B4
+53A4        6B89
+53A5        86EE
+53A6        5764
+53A7        581D
+53A8        8549
+53A9        7235
+53AA        7652
+53AB        983B
+53AC        8237
+53AD        5351
+53AE        5C24
+53AF        59BE
+53B0        5815
+53B1        901D
+53B2        69B4
+53B3        834A
+53B4        9EA9
+53B5        976B
+53B6        8086
+53B7        53AD
+53B8        6068
+53B9        4FAE
+53BA        76C3
+53BB        6A05
+53BC        689B
+53BD        937E
+53BE        99D5
+53BF        91C7
+53C0        5C16
+53C1        585E
+53C2        61A7
+53C3        9699
+53C4        4FDF
+53C5        8278
+53C6        9C52
+53C7        5F45
+53C8        6108
+53C9        7C8D
+53CA        806F
+53CB        5DF7
+53CC        8D6B
+53CD        57B0
+53CE        98E2
+53CF        5703
+53D0        79BF
+53D1        5996
+53D2        7941
+53D3        540A
+53D4        83DF
+53D5        9C39
+53D6        52D2
+53D7        6BD8
+53D8        86CB
+53D9        4EC0
+53DA        9A28
+53DB        5366
+53DC        8006
+53DD        7337
+53DE        6492
+53DF        8FED
+53E0        5AC9
+53E1        5420
+53E2        537F
+53E3        4FAF
+53E4        807E
+53E5        543B
+53E6        7515
+53E7        7B18
+53E8        8749
+53E9        54B3
+53EA        704C
+53EB        8997
+53EC        6CAB
+53ED        85FA
+53EE        7114
+53EF        696E
+53F0        9328
+53F1        745A
+53F2        59D1
+53F3        6E5B
+53F4        617E
+53F5        53E2
+53F6        8317
+53F7        76E7
+53F8        848B
+53F9        85AF
+53FA        6925
+53FB        5C60
+53FC        7259
+53FD        75D5
+53FE        8B90
+5441        6E07
+5442        82AD
+5443        5C4F
+5444        7BED
+5445        9784
+5446        6F70
+5447        764C
+5448        88B7
+5449        92D2
+544A        4F36
+544B        5EFE
+544C        9061
+544D        88E1
+544E        8471
+544F        711A
+5450        6D1B
+5451        80B4
+5452        74E2
+5453        7433
+5454        5A7F
+5455        905C
+5456        980C
+5457        5319
+5458        906E
+5459        6BB4
+545A        85AA
+545B        7897
+545C        7AFA
+545D        6AAE
+545E        8910
+545F        958F
+5460        620C
+5461        4F3D
+5462        4F7C
+5463        79BE
+5464        9D0E
+5465        4ED4
+5466        57A2
+5467        51A5
+5468        6900
+5469        6089
+546A        707C
+546B        7AE3
+546C        8956
+546D        93A7
+546E        9C2D
+546F        5112
+5470        52FA
+5471        7CCA
+5472        60F9
+5473        7078
+5474        81C6
+5475        559D
+5476        6991
+5477        96C9
+5478        553E
+5479        805A
+547A        8304
+547B        8332
+547C        54FA
+547D        565B
+547E        8FBF
+547F        5634
+5480        6760
+5481        5265
+5482        840E
+5483        5E5F
+5484        7B65
+5485        9035
+5486        8387
+5487        6B4E
+5488        58BE
+5489        6309
+548A        727D
+548B        97AD
+548C        69D0
+548D        546A
+548E        984E
+548F        632B
+5490        714E
+5491        8557
+5492        7CDE
+5493        6372
+5494        68F9
+5495        7511
+5496        8602
+5497        6EBA
+5498        5A3C
+5499        7A84
+549A        851A
+549B        95A4
+549C        59D0
+549D        60DA
+549E        51EA
+549F        5A29
+54A0        7169
+54A1        6F15
+54A2        696B
+54A3        63BB
+54A4        75E9
+54A5        4E4E
+54A6        7DBB
+54A7        6934
+54A8        8521
+54A9        8FFA
+54AA        9354
+54AB        9C3B
+54AC        5F17
+54AD        5ED3
+54AE        8258
+54AF        895F
+54B0        82E7
+54B1        52C3
+54B2        5C51
+54B3        83AB
+54B4        7826
+54B5        79E1
+54B6        7FF0
+54B7        626E
+54B8        60F0
+54B9        5CA8
+54BA        6F97
+54BB        71A8
+54BC        9909
+54BD        5132
+54BE        5E37
+54BF        5F04
+54C0        637B
+54C1        6753
+54C2        68D7
+54C3        6652
+54C4        9CF6
+54C5        88B0
+54C6        52AB
+54C7        4FC4
+54C8        4E3C
+54C9        67B3
+54CA        7BAA
+54CB        7F4D
+54CC        8A23
+54CD        63B4
+54CE        71E6
+54CF        65A4
+54D0        6F09
+54D1        853D
+54D2        5072
+54D3        7DBA
+54D4        5516
+54D5        7B04
+54D6        72FD
+54D7        6CD3
+54D8        8422
+54D9        621F
+54DA        50AD
+54DB        8235
+54DC        8718
+54DD        5919
+54DE        6028
+54DF        677C
+54E0        6F23
+54E1        75B9
+54E2        695C
+54E3        520E
+54E4        8018
+54E5        8B01
+54E6        71ED
+54E7        5713
+54E8        660F
+54E9        83EB
+54EA        7164
+54EB        7D9B
+54EC        5617
+54ED        7D7D
+54EE        8F4D
+54EF        9318
+54F0        8569
+54F1        5D17
+54F2        678C
+54F3        67DE
+54F4        87C7
+54F5        79AE
+54F6        5835
+54F7        8404
+54F8        9041
+54F9        7FD4
+54FA        6E8C
+54FB        8A63
+54FC        9D08
+54FD        670F
+54FE        939A
+5541        63AC
+5542        602F
+5543        64E2
+5544        608D
+5545        96B7
+5546        6357
+5547        8461
+5548        914B
+5549        75D8
+554A        60E7
+554B        9913
+554C        9C57
+554D        5984
+554E        6DEB
+554F        5E96
+5550        6D9C
+5551        9BF0
+5552        58BB
+5553        7977
+5554        60B6
+5555        633F
+5556        5BF5
+5557        9812
+5558        558B
+5559        82D3
+555A        5147
+555B        6190
+555C        7953
+555D        79BD
+555E        6C5D
+555F        9EBA
+5560        9C48
+5561        8DA8
+5562        5EE0
+5563        7D43
+5564        5EFC
+5565        854E
+5566        8CE4
+5567        5AE1
+5568        54E8
+5569        5023
+556A        52BE
+556B        7DEC
+556C        8511
+556D        6666
+556E        6C3E
+556F        724C
+5570        8ADC
+5571        9C0D
+5572        77A5
+5573        8B02
+5574        8D05
+5575        6F11
+5576        9834
+5577        97FB
+5578        50FB
+5579        7F75
+557A        5A03
+557B        8513
+557C        4FB6
+557D        634C
+557E        9D61
+557F        808B
+5580        5294
+5581        65A1
+5582        567A
+5583        5957
+5584        8D0B
+5585        6A35
+5586        6AD3
+5587        70F9
+5588        865E
+5589        6FB1
+558A        51E7
+558B        7FEB
+558C        59EA
+558D        5E87
+558E        6B6A
+558F        754F
+5590        717D
+5591        914E
+5592        7D2C
+5593        8C79
+5594        6062
+5595        621A
+5596        7FA8
+5597        5F1B
+5598        6C8C
+5599        86FE
+559A        7562
+559B        7B86
+559C        9AB8
+559D        6627
+559E        7ABA
+559F        844E
+55A0        6F81
+55A1        8B2C
+55A2        86A4
+55A3        6FEB
+55A4        7B8B
+55A5        7F77
+55A6        8F2F
+55A7        8E44
+55A8        7E23
+55A9        4E4D
+55AA        79A6
+55AB        8AFA
+55AC        903C
+55AD        50D1
+55AE        9ECD
+55AF        5EDF
+55B0        758F
+55B1        631F
+55B2        53DB
+55B3        9910
+55B4        826E
+55B5        62F7
+55B6        68FA
+55B7        725D
+55B8        803D
+55B9        58D5
+55BA        5C4D
+55BB        86D9
+55BC        540B
+55BD        8805
+55BE        92F2
+55BF        9237
+55C0        5C61
+55C1        985B
+55C2        86E4
+55C3        966A
+55C4        7262
+55C5        6955
+55C6        6CD7
+55C7        6994
+55C8        9C2F
+55C9        77E7
+55CA        68C9
+55CB        8DE8
+55CC        6D6C
+55CD        67C1
+55CE        9BAA
+55CF        619A
+55D0        63A9
+55D1        7015
+55D2        9306
+55D3        934D
+55D4        6A61
+55D5        6258
+55D6        5283
+55D7        7525
+55D8        5687
+55D9        6C83
+55DA        6834
+55DB        649E
+55DC        4E9B
+55DD        7252
+55DE        59E6
+55DF        8FC2
+55E0        5FBD
+55E1        6DD8
+55E2        85F7
+55E3        8A51
+55E4        9817
+55E5        99C1
+55E6        63A0
+55E7        7C81
+55E8        5B30
+55E9        8139
+55EA        5403
+55EB        7E82
+55EC        8106
+55ED        532A
+55EE        6A8E
+55EF        7F6B
+55F0        54E9
+55F1        5678
+55F2        8AB9
+55F3        6715
+55F4        5BD3
+55F5        6478
+55F6        64FE
+55F7        6B1D
+55F8        8CC2
+55F9        51CB
+55FA        7E8F
+5641        5F0C
+5642        4E10
+5643        4E15
+5644        4E28
+5645        4E2A
+5646        4E31
+5647        4E36
+5648        4E3F
+5649        4E42
+564A        4E56
+564B        4E58
+564C        4E62
+564D        4E82
+564E        4E85
+564F        4E8A
+5650        4E8E
+5651        5F0D
+5652        4E9E
+5653        4EA0
+5654        4EA2
+5655        4EB0
+5656        4EB3
+5657        4EB6
+5658        4ECE
+5659        4ECD
+565A        4EC4
+565B        4EC6
+565C        4EC2
+565D        4EE1
+565E        4ED7
+565F        4EDE
+5660        4EED
+5661        4EDF
+5662        4EFC
+5663        4F09
+5664        4F1C
+5665        4F00
+5666        4F03
+5667        4F5A
+5668        4F30
+5669        4F5D
+566A        4F39
+566B        4F57
+566C        4F47
+566D        4F5E
+566E        4F56
+566F        4F5B
+5670        4F92
+5671        4F8A
+5672        4F88
+5673        4F8F
+5674        4F9A
+5675        4FAD
+5676        4F98
+5677        4F7B
+5678        4FAB
+5679        4F69
+567A        4F70
+567B        4F94
+567C        4F6F
+567D        4F86
+567E        4F96
+567F        4FD4
+5680        4FCE
+5681        4FD8
+5682        4FDB
+5683        4FD1
+5684        4FDA
+5685        4FD0
+5686        4FCD
+5687        4FE4
+5688        4FE5
+5689        501A
+568A        5040
+568B        5028
+568C        5014
+568D        502A
+568E        5025
+568F        5005
+5690        5021
+5691        5022
+5692        5029
+5693        502C
+5694        4FFF
+5695        4FFE
+5696        4FEF
+5697        5011
+5698        501E
+5699        5006
+569A        5043
+569B        5047
+569C        5055
+569D        5050
+569E        5048
+569F        505A
+56A0        5056
+56A1        500F
+56A2        5046
+56A3        5070
+56A4        5042
+56A5        506C
+56A6        5078
+56A7        5080
+56A8        5094
+56A9        509A
+56AA        5085
+56AB        50B4
+56AC        6703
+56AD        50B2
+56AE        50C9
+56AF        50CA
+56B0        50B3
+56B1        50C2
+56B2        50F4
+56B3        50DE
+56B4        50E5
+56B5        50D8
+56B6        50ED
+56B7        50E3
+56B8        50EE
+56B9        50F9
+56BA        50F5
+56BB        5109
+56BC        5101
+56BD        5102
+56BE        511A
+56BF        5115
+56C0        5114
+56C1        5116
+56C2        5121
+56C3        513A
+56C4        5137
+56C5        513C
+56C6        513B
+56C7        513F
+56C8        5140
+56C9        514A
+56CA        514C
+56CB        5152
+56CC        5154
+56CD        5162
+56CE        5164
+56CF        5169
+56D0        516A
+56D1        516E
+56D2        5180
+56D3        5182
+56D4        56D8
+56D5        518C
+56D6        5189
+56D7        518F
+56D8        5191
+56D9        5193
+56DA        5195
+56DB        5196
+56DC        519D
+56DD        51A4
+56DE        51A6
+56DF        51A2
+56E0        51A9
+56E1        51AA
+56E2        51AB
+56E3        51B3
+56E4        51B1
+56E5        51B2
+56E6        51B0
+56E7        51B5
+56E8        51BE
+56E9        51BD
+56EA        51C5
+56EB        51C9
+56EC        51DB
+56ED        51E0
+56EE        51E9
+56EF        51EC
+56F0        51ED
+56F1        51F0
+56F2        51F5
+56F3        51FE
+56F4        5204
+56F5        520B
+56F6        5214
+56F7        5215
+56F8        5227
+56F9        522A
+56FA        522E
+56FB        5233
+56FC        5239
+56FD        5244
+56FE        524B
+5741        524F
+5742        525E
+5743        5254
+5744        5271
+5745        526A
+5746        5273
+5747        5274
+5748        5269
+5749        527F
+574A        527D
+574B        528D
+574C        5288
+574D        5292
+574E        5291
+574F        529C
+5750        52A6
+5751        52AC
+5752        52AD
+5753        52BC
+5754        52B5
+5755        52C1
+5756        52C0
+5757        52CD
+5758        52DB
+5759        52DE
+575A        52E3
+575B        52E6
+575C        52E0
+575D        52F3
+575E        52F5
+575F        52F8
+5760        52F9
+5761        5300
+5762        5306
+5763        5307
+5764        5308
+5765        7538
+5766        530D
+5767        5310
+5768        530F
+5769        5315
+576A        531A
+576B        5324
+576C        5323
+576D        532F
+576E        5331
+576F        5333
+5770        5338
+5771        5340
+5772        5345
+5773        5346
+5774        5349
+5775        4E17
+5776        534D
+5777        51D6
+5778        8209
+5779        535E
+577A        5369
+577B        536E
+577C        5372
+577D        5377
+577E        537B
+577F        5382
+5780        5393
+5781        5396
+5782        53A0
+5783        53A6
+5784        53A5
+5785        53AE
+5786        53B0
+5787        53B2
+5788        53B6
+5789        53C3
+578A        7C12
+578B        53DD
+578C        53DF
+578D        66FC
+578E        FA0E
+578F        71EE
+5790        53EE
+5791        53E8
+5792        53ED
+5793        53FA
+5794        5401
+5795        543D
+5796        5440
+5797        542C
+5798        542D
+5799        543C
+579A        542E
+579B        5436
+579C        5429
+579D        541D
+579E        544E
+579F        548F
+57A0        5475
+57A1        548E
+57A2        545F
+57A3        5471
+57A4        5477
+57A5        5470
+57A6        5492
+57A7        547B
+57A8        5480
+57A9        549C
+57AA        5476
+57AB        5484
+57AC        5490
+57AD        5486
+57AE        548A
+57AF        54C7
+57B0        54BC
+57B1        54AF
+57B2        54A2
+57B3        54B8
+57B4        54A5
+57B5        54AC
+57B6        54C4
+57B7        54D8
+57B8        54C8
+57B9        54A8
+57BA        54AB
+57BB        54C2
+57BC        54A4
+57BD        54A9
+57BE        54BE
+57BF        54E5
+57C0        54FF
+57C1        54E6
+57C2        550F
+57C3        5514
+57C4        54FD
+57C5        54EE
+57C6        54ED
+57C7        54E2
+57C8        5539
+57C9        5540
+57CA        5563
+57CB        554C
+57CC        552E
+57CD        555C
+57CE        5545
+57CF        5556
+57D0        5557
+57D1        5538
+57D2        5533
+57D3        555D
+57D4        5599
+57D5        5580
+57D6        558A
+57D7        559F
+57D8        557B
+57D9        557E
+57DA        5598
+57DB        559E
+57DC        55AE
+57DD        557C
+57DE        5586
+57DF        5583
+57E0        55A9
+57E1        5587
+57E2        55A8
+57E3        55C5
+57E4        55DF
+57E5        55C4
+57E6        55DC
+57E7        55E4
+57E8        55D4
+57E9        55F9
+57EA        5614
+57EB        55F7
+57EC        5616
+57ED        55FE
+57EE        55FD
+57EF        561B
+57F0        564E
+57F1        5650
+57F2        5636
+57F3        5632
+57F4        5638
+57F5        566B
+57F6        5664
+57F7        5686
+57F8        562F
+57F9        566C
+57FA        566A
+57FB        71DF
+57FC        5694
+57FD        568F
+57FE        5680
+5841        568A
+5842        56A0
+5843        56A5
+5844        56AE
+5845        56B6
+5846        56B4
+5847        56C8
+5848        56C2
+5849        56BC
+584A        56C1
+584B        56C3
+584C        56C0
+584D        56CE
+584E        56D3
+584F        56D1
+5850        56D7
+5851        56EE
+5852        56F9
+5853        56FF
+5854        5704
+5855        5709
+5856        5708
+5857        570D
+5858        55C7
+5859        5718
+585A        5716
+585B        571C
+585C        5726
+585D        5738
+585E        574E
+585F        573B
+5860        5759
+5861        5740
+5862        574F
+5863        5765
+5864        5788
+5865        5761
+5866        577F
+5867        5789
+5868        5793
+5869        57A0
+586A        57A4
+586B        57B3
+586C        57AC
+586D        57AA
+586E        57C3
+586F        57C6
+5870        57C8
+5871        57C0
+5872        57D4
+5873        57C7
+5874        57D2
+5875        57D3
+5876        57D6
+5877        FA0F
+5878        580A
+5879        57E3
+587A        580B
+587B        5819
+587C        5821
+587D        584B
+587E        5862
+587F        6BC0
+5880        583D
+5881        5852
+5882        FA10
+5883        5870
+5884        5879
+5885        5885
+5886        5872
+5887        589F
+5888        58AB
+5889        58B8
+588A        589E
+588B        58AE
+588C        58B2
+588D        58B9
+588E        58BA
+588F        58C5
+5890        58D3
+5891        58D1
+5892        58D7
+5893        58D9
+5894        58D8
+5895        58DE
+5896        58DC
+5897        58DF
+5898        58E4
+5899        58E5
+589A        58EF
+589B        58F7
+589C        58F9
+589D        58FB
+589E        58FC
+589F        5902
+58A0        590A
+58A1        590B
+58A2        5910
+58A3        591B
+58A4        68A6
+58A5        5925
+58A6        592C
+58A7        592D
+58A8        5932
+58A9        5938
+58AA        593E
+58AB        5955
+58AC        5950
+58AD        5953
+58AE        595A
+58AF        5958
+58B0        595B
+58B1        595D
+58B2        5963
+58B3        5962
+58B4        5960
+58B5        5967
+58B6        596C
+58B7        5969
+58B8        5978
+58B9        5981
+58BA        598D
+58BB        599B
+58BC        599D
+58BD        59A3
+58BE        59A4
+58BF        59B2
+58C0        59BA
+58C1        59C6
+58C2        59E8
+58C3        59D9
+58C4        59DA
+58C5        5A25
+58C6        5A1F
+58C7        5A11
+58C8        5A1C
+58C9        5A1A
+58CA        5A09
+58CB        5A40
+58CC        5A6C
+58CD        5A49
+58CE        5A35
+58CF        5A36
+58D0        5A62
+58D1        5A6A
+58D2        5A9A
+58D3        5ABC
+58D4        5ABE
+58D5        5AD0
+58D6        5ACB
+58D7        5AC2
+58D8        5ABD
+58D9        5AE3
+58DA        5AD7
+58DB        5AE6
+58DC        5AE9
+58DD        5AD6
+58DE        5AFA
+58DF        5AFB
+58E0        5B0C
+58E1        5B0B
+58E2        5B16
+58E3        5B32
+58E4        5B2A
+58E5        5B36
+58E6        5B3E
+58E7        5B43
+58E8        5B45
+58E9        5B40
+58EA        5B51
+58EB        5B55
+58EC        5B56
+58ED        6588
+58EE        5B5B
+58EF        5B65
+58F0        5B69
+58F1        5B70
+58F2        5B73
+58F3        5B75
+58F4        5B78
+58F5        5B7A
+58F6        5B80
+58F7        5B83
+58F8        5BA6
+58F9        5BB8
+58FA        5BC3
+58FB        5BC7
+58FC        5BC0
+58FD        5BC9
+58FE        752F
+5941        5BD0
+5942        5BD8
+5943        5BDE
+5944        5BEC
+5945        5BE4
+5946        5BE2
+5947        5BE5
+5948        5BEB
+5949        5BF0
+594A        5BF3
+594B        5BF6
+594C        5C05
+594D        5C07
+594E        5C08
+594F        5C0D
+5950        5C13
+5951        5C1E
+5952        5C20
+5953        5C22
+5954        5C28
+5955        5C38
+5956        5C41
+5957        5C46
+5958        5C4E
+5959        5C53
+595A        5C50
+595B        5B71
+595C        5C6C
+595D        5C6E
+595E        5C76
+595F        5C79
+5960        5C8C
+5961        5C94
+5962        5CBE
+5963        5CAB
+5964        5CBB
+5965        5CB6
+5966        5CB7
+5967        5CA6
+5968        5CBA
+5969        5CC5
+596A        5CBC
+596B        5CC7
+596C        5CD9
+596D        5CE9
+596E        5CFD
+596F        5CFA
+5970        5CF5
+5971        5CED
+5972        5CEA
+5973        5D0B
+5974        5D15
+5975        5D1F
+5976        5D1B
+5977        5D11
+5978        5D27
+5979        5D22
+597A        5D1A
+597B        5D19
+597C        5D18
+597D        5D4C
+597E        5D52
+597F        5D53
+5980        FA11
+5981        5D5C
+5982        5D4E
+5983        5D4B
+5984        5D42
+5985        5D6C
+5986        5D73
+5987        5D6D
+5988        5D76
+5989        5D87
+598A        5D84
+598B        5D82
+598C        5D8C
+598D        5DA2
+598E        5D9D
+598F        5D90
+5990        5DAC
+5991        5DAE
+5992        5DB7
+5993        5DB8
+5994        5DBC
+5995        5DB9
+5996        5DC9
+5997        5DD0
+5998        5DD3
+5999        5DD2
+599A        5DDB
+599B        5DEB
+599C        5DF5
+599D        5E0B
+599E        5E1A
+599F        5E19
+59A0        5E11
+59A1        5E1B
+59A2        5E36
+59A3        5E44
+59A4        5E43
+59A5        5E40
+59A6        5E47
+59A7        5E4E
+59A8        5E57
+59A9        5E54
+59AA        5E62
+59AB        5E64
+59AC        5E75
+59AD        5E76
+59AE        5E7A
+59AF        5E7F
+59B0        5EA0
+59B1        5EC1
+59B2        5EC2
+59B3        5EC8
+59B4        5ED0
+59B5        5ECF
+59B6        5EDD
+59B7        5EDA
+59B8        5EDB
+59B9        5EE2
+59BA        5EE1
+59BB        5EE8
+59BC        5EE9
+59BD        5EEC
+59BE        5EF0
+59BF        5EF1
+59C0        5EF3
+59C1        5EF4
+59C2        5F03
+59C3        5F09
+59C4        5F0B
+59C5        5F11
+59C6        5F16
+59C7        5F21
+59C8        5F29
+59C9        5F2D
+59CA        5F2F
+59CB        5F34
+59CC        5F38
+59CD        5F41
+59CE        5F48
+59CF        5F4C
+59D0        5F4E
+59D1        5F51
+59D2        5F56
+59D3        5F57
+59D4        5F59
+59D5        5F5C
+59D6        5F5D
+59D7        5F61
+59D8        5F67
+59D9        5F73
+59DA        5F77
+59DB        5F83
+59DC        5F82
+59DD        5F7F
+59DE        5F8A
+59DF        5F88
+59E0        5F87
+59E1        5F91
+59E2        5F99
+59E3        5F9E
+59E4        5F98
+59E5        5FA0
+59E6        5FA8
+59E7        5FAD
+59E8        5FB7
+59E9        5FBC
+59EA        5FD6
+59EB        5FFB
+59EC        5FE4
+59ED        5FF8
+59EE        5FF1
+59EF        5FF0
+59F0        5FDD
+59F1        5FDE
+59F2        5FFF
+59F3        6021
+59F4        6019
+59F5        6010
+59F6        6029
+59F7        600E
+59F8        6031
+59F9        601B
+59FA        6015
+59FB        602B
+59FC        6026
+59FD        600F
+59FE        603A
+5A41        605A
+5A42        6041
+5A43        6060
+5A44        605D
+5A45        606A
+5A46        6077
+5A47        605F
+5A48        604A
+5A49        6046
+5A4A        604D
+5A4B        6063
+5A4C        6043
+5A4D        6064
+5A4E        606C
+5A4F        606B
+5A50        6059
+5A51        6085
+5A52        6081
+5A53        6083
+5A54        609A
+5A55        6084
+5A56        609B
+5A57        608A
+5A58        6096
+5A59        6097
+5A5A        6092
+5A5B        60A7
+5A5C        608B
+5A5D        60E1
+5A5E        60B8
+5A5F        60DE
+5A60        60E0
+5A61        60D3
+5A62        60BD
+5A63        60C6
+5A64        60B5
+5A65        60D5
+5A66        60D8
+5A67        6120
+5A68        60F2
+5A69        6115
+5A6A        6106
+5A6B        60F6
+5A6C        60F7
+5A6D        6100
+5A6E        60F4
+5A6F        60FA
+5A70        6103
+5A71        6121
+5A72        60FB
+5A73        60F1
+5A74        610D
+5A75        610E
+5A76        6111
+5A77        6147
+5A78        614D
+5A79        6137
+5A7A        6128
+5A7B        6127
+5A7C        613E
+5A7D        614A
+5A7E        6130
+5A7F        613C
+5A80        612C
+5A81        6134
+5A82        6165
+5A83        615D
+5A84        613D
+5A85        6142
+5A86        6144
+5A87        6173
+5A88        6187
+5A89        6177
+5A8A        6158
+5A8B        6159
+5A8C        615A
+5A8D        616B
+5A8E        6174
+5A8F        616F
+5A90        6171
+5A91        615F
+5A92        6153
+5A93        6175
+5A94        6198
+5A95        6199
+5A96        6196
+5A97        61AC
+5A98        6194
+5A99        618A
+5A9A        6191
+5A9B        61AB
+5A9C        61AE
+5A9D        61CC
+5A9E        61CA
+5A9F        61C9
+5AA0        61C8
+5AA1        61C3
+5AA2        61C6
+5AA3        61BA
+5AA4        61CB
+5AA5        7F79
+5AA6        61CD
+5AA7        61E6
+5AA8        61E3
+5AA9        61F4
+5AAA        61F7
+5AAB        61F6
+5AAC        61FD
+5AAD        61FA
+5AAE        61FF
+5AAF        61FC
+5AB0        61FE
+5AB1        6200
+5AB2        6208
+5AB3        6209
+5AB4        620D
+5AB5        6213
+5AB6        6214
+5AB7        621B
+5AB8        621E
+5AB9        6221
+5ABA        622A
+5ABB        622E
+5ABC        6230
+5ABD        6232
+5ABE        6233
+5ABF        6241
+5AC0        624E
+5AC1        625E
+5AC2        6263
+5AC3        625B
+5AC4        6260
+5AC5        6268
+5AC6        627C
+5AC7        6282
+5AC8        6289
+5AC9        6292
+5ACA        627E
+5ACB        6293
+5ACC        6296
+5ACD        6283
+5ACE        6294
+5ACF        62D7
+5AD0        62D1
+5AD1        62BB
+5AD2        62CF
+5AD3        62AC
+5AD4        62C6
+5AD5        62C8
+5AD6        62DC
+5AD7        62D4
+5AD8        62CA
+5AD9        62C2
+5ADA        62A6
+5ADB        62C7
+5ADC        629B
+5ADD        62C9
+5ADE        630C
+5ADF        62EE
+5AE0        62F1
+5AE1        6327
+5AE2        6302
+5AE3        6308
+5AE4        62EF
+5AE5        62F5
+5AE6        62FF
+5AE7        6350
+5AE8        634D
+5AE9        633E
+5AEA        634F
+5AEB        6396
+5AEC        638E
+5AED        6380
+5AEE        63AB
+5AEF        6376
+5AF0        63A3
+5AF1        638F
+5AF2        6389
+5AF3        639F
+5AF4        636B
+5AF5        6369
+5AF6        63B5
+5AF7        63BE
+5AF8        63E9
+5AF9        63C0
+5AFA        63C6
+5AFB        63F5
+5AFC        63E3
+5AFD        63C9
+5AFE        63D2
+5B41        63F6
+5B42        63C4
+5B43        6434
+5B44        6406
+5B45        6413
+5B46        6426
+5B47        6436
+5B48        641C
+5B49        6417
+5B4A        6428
+5B4B        640F
+5B4C        6416
+5B4D        644E
+5B4E        6467
+5B4F        646F
+5B50        6460
+5B51        6476
+5B52        64B9
+5B53        649D
+5B54        64CE
+5B55        6495
+5B56        64BB
+5B57        6493
+5B58        64A5
+5B59        64A9
+5B5A        6488
+5B5B        64BC
+5B5C        64DA
+5B5D        64D2
+5B5E        64C5
+5B5F        64C7
+5B60        64D4
+5B61        64D8
+5B62        64C2
+5B63        64F1
+5B64        64E7
+5B65        64E0
+5B66        64E1
+5B67        64E3
+5B68        64EF
+5B69        64F4
+5B6A        64F6
+5B6B        64F2
+5B6C        64FA
+5B6D        6500
+5B6E        64FD
+5B6F        6518
+5B70        651C
+5B71        651D
+5B72        6505
+5B73        6524
+5B74        6523
+5B75        652B
+5B76        652C
+5B77        6534
+5B78        6535
+5B79        6537
+5B7A        6536
+5B7B        6538
+5B7C        754B
+5B7D        6548
+5B7E        654E
+5B7F        6556
+5B80        654D
+5B81        6558
+5B82        6555
+5B83        655D
+5B84        6572
+5B85        6578
+5B86        6582
+5B87        6583
+5B88        8B8A
+5B89        659B
+5B8A        659F
+5B8B        65AB
+5B8C        65B7
+5B8D        65C3
+5B8E        65C6
+5B8F        65C1
+5B90        65C4
+5B91        65CC
+5B92        65D2
+5B93        65D9
+5B94        65E1
+5B95        65E0
+5B96        65F1
+5B97        6600
+5B98        6615
+5B99        6602
+5B9A        6772
+5B9B        6603
+5B9C        65FB
+5B9D        6609
+5B9E        663F
+5B9F        6635
+5BA0        662E
+5BA1        661E
+5BA2        6634
+5BA3        661C
+5BA4        6624
+5BA5        6644
+5BA6        6649
+5BA7        6665
+5BA8        6657
+5BA9        665E
+5BAA        6664
+5BAB        6659
+5BAC        6662
+5BAD        665D
+5BAE        FA12
+5BAF        6673
+5BB0        6670
+5BB1        6683
+5BB2        6688
+5BB3        6684
+5BB4        6699
+5BB5        6698
+5BB6        66A0
+5BB7        669D
+5BB8        66B2
+5BB9        66C4
+5BBA        66C1
+5BBB        66BF
+5BBC        66C9
+5BBD        66BE
+5BBE        66BC
+5BBF        66B8
+5BC0        66D6
+5BC1        66DA
+5BC2        66E6
+5BC3        66E9
+5BC4        66F0
+5BC5        66F5
+5BC6        66F7
+5BC7        66FA
+5BC8        670E
+5BC9        F929
+5BCA        6716
+5BCB        671E
+5BCC        7E22
+5BCD        6726
+5BCE        6727
+5BCF        9738
+5BD0        672E
+5BD1        673F
+5BD2        6736
+5BD3        6737
+5BD4        6738
+5BD5        6746
+5BD6        675E
+5BD7        6759
+5BD8        6766
+5BD9        6764
+5BDA        6789
+5BDB        6785
+5BDC        6770
+5BDD        67A9
+5BDE        676A
+5BDF        678B
+5BE0        6773
+5BE1        67A6
+5BE2        67A1
+5BE3        67BB
+5BE4        67B7
+5BE5        67EF
+5BE6        67B4
+5BE7        67EC
+5BE8        67E9
+5BE9        67B8
+5BEA        67E7
+5BEB        67E4
+5BEC        6852
+5BED        67DD
+5BEE        67E2
+5BEF        67EE
+5BF0        67C0
+5BF1        67CE
+5BF2        67B9
+5BF3        6801
+5BF4        67C6
+5BF5        681E
+5BF6        6846
+5BF7        684D
+5BF8        6840
+5BF9        6844
+5BFA        6832
+5BFB        684E
+5BFC        6863
+5BFD        6859
+5BFE        688D
+5C41        6877
+5C42        687F
+5C43        689F
+5C44        687E
+5C45        688F
+5C46        68AD
+5C47        6894
+5C48        6883
+5C49        68BC
+5C4A        68B9
+5C4B        6874
+5C4C        68B5
+5C4D        68BA
+5C4E        690F
+5C4F        6901
+5C50        68CA
+5C51        6908
+5C52        68D8
+5C53        6926
+5C54        68E1
+5C55        690C
+5C56        68CD
+5C57        68D4
+5C58        68E7
+5C59        68D5
+5C5A        6912
+5C5B        68EF
+5C5C        6904
+5C5D        68E3
+5C5E        68E0
+5C5F        68CF
+5C60        68C6
+5C61        6922
+5C62        692A
+5C63        6921
+5C64        6923
+5C65        6928
+5C66        FA13
+5C67        6979
+5C68        6977
+5C69        6936
+5C6A        6978
+5C6B        6954
+5C6C        696A
+5C6D        6974
+5C6E        6968
+5C6F        693D
+5C70        6959
+5C71        6930
+5C72        695E
+5C73        695D
+5C74        697E
+5C75        6981
+5C76        69B2
+5C77        69BF
+5C78        FA14
+5C79        6998
+5C7A        69C1
+5C7B        69D3
+5C7C        69BE
+5C7D        69CE
+5C7E        5BE8
+5C7F        69CA
+5C80        69B1
+5C81        69DD
+5C82        69BB
+5C83        69C3
+5C84        69A0
+5C85        699C
+5C86        6995
+5C87        69DE
+5C88        6A2E
+5C89        69E8
+5C8A        6A02
+5C8B        6A1B
+5C8C        69FF
+5C8D        69F9
+5C8E        69F2
+5C8F        69E7
+5C90        69E2
+5C91        6A1E
+5C92        69ED
+5C93        6A14
+5C94        69EB
+5C95        6A0A
+5C96        6A22
+5C97        6A12
+5C98        6A23
+5C99        6A13
+5C9A        6A30
+5C9B        6A6B
+5C9C        6A44
+5C9D        6A0C
+5C9E        6AA0
+5C9F        6A36
+5CA0        6A78
+5CA1        6A47
+5CA2        6A62
+5CA3        6A59
+5CA4        6A66
+5CA5        6A48
+5CA6        6A46
+5CA7        6A38
+5CA8        6A72
+5CA9        6A73
+5CAA        6A90
+5CAB        6A8D
+5CAC        6A84
+5CAD        6AA2
+5CAE        6AA3
+5CAF        6A7E
+5CB0        6A97
+5CB1        6AAC
+5CB2        6AAA
+5CB3        6ABB
+5CB4        6AC2
+5CB5        6AB8
+5CB6        6AB3
+5CB7        6AC1
+5CB8        6ADE
+5CB9        6AE2
+5CBA        6AD1
+5CBB        6ADA
+5CBC        6AE4
+5CBD        8616
+5CBE        8617
+5CBF        6AEA
+5CC0        6B05
+5CC1        6B0A
+5CC2        6AFA
+5CC3        6B12
+5CC4        6B16
+5CC5        6B1F
+5CC6        6B38
+5CC7        6B37
+5CC8        6B39
+5CC9        76DC
+5CCA        98EE
+5CCB        6B47
+5CCC        6B43
+5CCD        6B49
+5CCE        6B50
+5CCF        6B59
+5CD0        6B54
+5CD1        6B5B
+5CD2        6B5F
+5CD3        6B61
+5CD4        6B78
+5CD5        6B79
+5CD6        6B7F
+5CD7        6B80
+5CD8        6B84
+5CD9        6B83
+5CDA        6B8D
+5CDB        6B98
+5CDC        6B95
+5CDD        6B9E
+5CDE        6BA4
+5CDF        6BAA
+5CE0        6BAB
+5CE1        6BAF
+5CE2        6BB1
+5CE3        6BB2
+5CE4        6BB3
+5CE5        6BB7
+5CE6        6BBC
+5CE7        6BC6
+5CE8        6BCB
+5CE9        6BD3
+5CEA        6BD6
+5CEB        6BDF
+5CEC        6BEC
+5CED        6BEB
+5CEE        6BF3
+5CEF        6BEF
+5CF0        6C08
+5CF1        6C13
+5CF2        6C14
+5CF3        6C1B
+5CF4        6C24
+5CF5        6C23
+5CF6        6C3F
+5CF7        6C5E
+5CF8        6C55
+5CF9        6C5C
+5CFA        6C62
+5CFB        6C82
+5CFC        6C8D
+5CFD        6C86
+5CFE        6C6F
+5D41        6C9A
+5D42        6C81
+5D43        6C9B
+5D44        6C7E
+5D45        6C68
+5D46        6C73
+5D47        6C92
+5D48        6C90
+5D49        6CC4
+5D4A        6CF1
+5D4B        6CBD
+5D4C        6CC5
+5D4D        6CAE
+5D4E        6CDA
+5D4F        6CDD
+5D50        6CB1
+5D51        6CBE
+5D52        6CBA
+5D53        6CDB
+5D54        6CEF
+5D55        6CD9
+5D56        6CEA
+5D57        6D1F
+5D58        6D04
+5D59        6D36
+5D5A        6D2B
+5D5B        6D3D
+5D5C        6D33
+5D5D        6D12
+5D5E        6D0C
+5D5F        6D63
+5D60        6D87
+5D61        6D93
+5D62        6D6F
+5D63        6D64
+5D64        6D5A
+5D65        6D79
+5D66        6D59
+5D67        6D8E
+5D68        6D95
+5D69        6D9B
+5D6A        6D85
+5D6B        6D96
+5D6C        6DF9
+5D6D        6E0A
+5D6E        6E2E
+5D6F        6DB5
+5D70        6DE6
+5D71        6DC7
+5D72        6DAC
+5D73        6DB8
+5D74        6DCF
+5D75        6DC6
+5D76        6DEC
+5D77        6DDE
+5D78        6DCC
+5D79        6DE8
+5D7A        6DF8
+5D7B        6DD2
+5D7C        6DC5
+5D7D        6DFA
+5D7E        6DD9
+5D7F        6DF2
+5D80        6DFC
+5D81        6DE4
+5D82        6DD5
+5D83        6DEA
+5D84        6DEE
+5D85        6E2D
+5D86        6E6E
+5D87        6E19
+5D88        6E72
+5D89        6E5F
+5D8A        6E39
+5D8B        6E3E
+5D8C        6E23
+5D8D        6E6B
+5D8E        6E5C
+5D8F        6E2B
+5D90        6E76
+5D91        6E4D
+5D92        6E1F
+5D93        6E27
+5D94        6E43
+5D95        6E3C
+5D96        6E3A
+5D97        6E4E
+5D98        6E24
+5D99        6E1D
+5D9A        6E38
+5D9B        6E82
+5D9C        6EAA
+5D9D        6E98
+5D9E        6EB7
+5D9F        6EBD
+5DA0        6EAF
+5DA1        6EC4
+5DA2        6EB2
+5DA3        6ED4
+5DA4        6ED5
+5DA5        6E8F
+5DA6        6EBF
+5DA7        6EC2
+5DA8        6E9F
+5DA9        6F41
+5DAA        6F45
+5DAB        6EEC
+5DAC        6EF8
+5DAD        6EFE
+5DAE        6F3F
+5DAF        6EF2
+5DB0        6F31
+5DB1        6EEF
+5DB2        6F32
+5DB3        6ECC
+5DB4        6EFF
+5DB5        6F3E
+5DB6        6F13
+5DB7        6EF7
+5DB8        6F86
+5DB9        6F7A
+5DBA        6F78
+5DBB        6F80
+5DBC        6F6F
+5DBD        6F5B
+5DBE        6F6D
+5DBF        6F74
+5DC0        6F82
+5DC1        6F88
+5DC2        6F7C
+5DC3        6F58
+5DC4        6FC6
+5DC5        6F8E
+5DC6        6F91
+5DC7        6F66
+5DC8        6FB3
+5DC9        6FA3
+5DCA        6FB5
+5DCB        6FA1
+5DCC        6FB9
+5DCD        6FDB
+5DCE        6FAA
+5DCF        6FC2
+5DD0        6FDF
+5DD1        6FD5
+5DD2        6FEC
+5DD3        6FD8
+5DD4        6FD4
+5DD5        6FF5
+5DD6        6FEE
+5DD7        7005
+5DD8        7007
+5DD9        7009
+5DDA        700B
+5DDB        6FFA
+5DDC        7011
+5DDD        7001
+5DDE        700F
+5DDF        701B
+5DE0        701A
+5DE1        701F
+5DE2        6FF3
+5DE3        7028
+5DE4        7018
+5DE5        7030
+5DE6        703E
+5DE7        7032
+5DE8        7051
+5DE9        7063
+5DEA        7085
+5DEB        7099
+5DEC        70AF
+5DED        70AB
+5DEE        70AC
+5DEF        70B8
+5DF0        70AE
+5DF1        70DF
+5DF2        70CB
+5DF3        70D9
+5DF4        7109
+5DF5        710F
+5DF6        7104
+5DF7        70F1
+5DF8        70FD
+5DF9        711C
+5DFA        7119
+5DFB        715C
+5DFC        7146
+5DFD        7147
+5DFE        7166
+5E41        7162
+5E42        714C
+5E43        7156
+5E44        716C
+5E45        7188
+5E46        718F
+5E47        7184
+5E48        7195
+5E49        FA15
+5E4A        71AC
+5E4B        71C1
+5E4C        71B9
+5E4D        71BE
+5E4E        71D2
+5E4F        71E7
+5E50        71C9
+5E51        71D4
+5E52        71D7
+5E53        71CE
+5E54        71F5
+5E55        71E0
+5E56        71EC
+5E57        71FB
+5E58        71FC
+5E59        71F9
+5E5A        71FE
+5E5B        71FF
+5E5C        720D
+5E5D        7210
+5E5E        7228
+5E5F        722D
+5E60        722C
+5E61        7230
+5E62        7232
+5E63        723B
+5E64        723C
+5E65        723F
+5E66        7240
+5E67        7246
+5E68        724B
+5E69        7258
+5E6A        7274
+5E6B        727E
+5E6C        7281
+5E6D        7287
+5E6E        7282
+5E6F        7292
+5E70        7296
+5E71        72A2
+5E72        72A7
+5E73        72B1
+5E74        72B2
+5E75        72BE
+5E76        72C3
+5E77        72C6
+5E78        72C4
+5E79        72B9
+5E7A        72CE
+5E7B        72D2
+5E7C        72E2
+5E7D        72E0
+5E7E        72E1
+5E7F        72F9
+5E80        72F7
+5E81        7317
+5E82        730A
+5E83        731C
+5E84        7316
+5E85        731D
+5E86        7324
+5E87        7334
+5E88        7329
+5E89        732F
+5E8A        FA16
+5E8B        7325
+5E8C        733E
+5E8D        734F
+5E8E        734E
+5E8F        7357
+5E90        9ED8
+5E91        736A
+5E92        7368
+5E93        7370
+5E94        7377
+5E95        7378
+5E96        7375
+5E97        737B
+5E98        73C8
+5E99        73BD
+5E9A        73B3
+5E9B        73CE
+5E9C        73BB
+5E9D        73C0
+5E9E        73C9
+5E9F        73D6
+5EA0        73E5
+5EA1        73E3
+5EA2        73D2
+5EA3        73EE
+5EA4        73F1
+5EA5        73DE
+5EA6        73F8
+5EA7        7407
+5EA8        73F5
+5EA9        7405
+5EAA        7426
+5EAB        742A
+5EAC        7425
+5EAD        7429
+5EAE        742E
+5EAF        7432
+5EB0        743A
+5EB1        7455
+5EB2        743F
+5EB3        745F
+5EB4        7459
+5EB5        7441
+5EB6        745C
+5EB7        7469
+5EB8        7470
+5EB9        7463
+5EBA        746A
+5EBB        7464
+5EBC        7462
+5EBD        7489
+5EBE        746F
+5EBF        747E
+5EC0        749F
+5EC1        749E
+5EC2        74A2
+5EC3        74A7
+5EC4        74CA
+5EC5        74CF
+5EC6        74D4
+5EC7        74E0
+5EC8        74E3
+5EC9        74E7
+5ECA        74E9
+5ECB        74EE
+5ECC        74F0
+5ECD        74F2
+5ECE        74F1
+5ECF        74F7
+5ED0        74F8
+5ED1        7501
+5ED2        7504
+5ED3        7503
+5ED4        7505
+5ED5        750D
+5ED6        750C
+5ED7        750E
+5ED8        7513
+5ED9        751E
+5EDA        7526
+5EDB        752C
+5EDC        753C
+5EDD        7544
+5EDE        754D
+5EDF        754A
+5EE0        7549
+5EE1        7546
+5EE2        755B
+5EE3        755A
+5EE4        7564
+5EE5        7567
+5EE6        756B
+5EE7        756F
+5EE8        7574
+5EE9        756D
+5EEA        7578
+5EEB        7576
+5EEC        7582
+5EED        7586
+5EEE        7587
+5EEF        758A
+5EF0        7589
+5EF1        7594
+5EF2        759A
+5EF3        759D
+5EF4        75A5
+5EF5        75A3
+5EF6        75C2
+5EF7        75B3
+5EF8        75C3
+5EF9        75B5
+5EFA        75BD
+5EFB        75B8
+5EFC        75BC
+5EFD        75B1
+5EFE        75CD
+5F41        75CA
+5F42        75D2
+5F43        75D9
+5F44        75E3
+5F45        75DE
+5F46        75FE
+5F47        75FF
+5F48        75FC
+5F49        7601
+5F4A        75F0
+5F4B        75FA
+5F4C        75F2
+5F4D        75F3
+5F4E        760B
+5F4F        7609
+5F50        761F
+5F51        7627
+5F52        7620
+5F53        7621
+5F54        7622
+5F55        7624
+5F56        7634
+5F57        7630
+5F58        763B
+5F59        7647
+5F5A        7648
+5F5B        7658
+5F5C        7646
+5F5D        765C
+5F5E        7661
+5F5F        7662
+5F60        7668
+5F61        7669
+5F62        7667
+5F63        766A
+5F64        766C
+5F65        7670
+5F66        7672
+5F67        7676
+5F68        767C
+5F69        7682
+5F6A        7680
+5F6B        7683
+5F6C        7688
+5F6D        768B
+5F6E        7699
+5F6F        769A
+5F70        769C
+5F71        769E
+5F72        769B
+5F73        76A6
+5F74        76B0
+5F75        76B4
+5F76        76B8
+5F77        76B9
+5F78        76BA
+5F79        76C2
+5F7A        FA17
+5F7B        76CD
+5F7C        76D6
+5F7D        76D2
+5F7E        76DE
+5F7F        76E1
+5F80        76E5
+5F81        76EA
+5F82        862F
+5F83        76FB
+5F84        7708
+5F85        7707
+5F86        7704
+5F87        7724
+5F88        7729
+5F89        7725
+5F8A        7726
+5F8B        771B
+5F8C        7737
+5F8D        7738
+5F8E        7746
+5F8F        7747
+5F90        775A
+5F91        7768
+5F92        776B
+5F93        775B
+5F94        7765
+5F95        777F
+5F96        777E
+5F97        7779
+5F98        778E
+5F99        778B
+5F9A        7791
+5F9B        77A0
+5F9C        779E
+5F9D        77B0
+5F9E        77B6
+5F9F        77B9
+5FA0        77BF
+5FA1        77BC
+5FA2        77BD
+5FA3        77BB
+5FA4        77C7
+5FA5        77CD
+5FA6        77DA
+5FA7        77DC
+5FA8        77E3
+5FA9        77EE
+5FAA        52AF
+5FAB        77FC
+5FAC        780C
+5FAD        7812
+5FAE        7821
+5FAF        783F
+5FB0        7820
+5FB1        7845
+5FB2        784E
+5FB3        7864
+5FB4        7874
+5FB5        788E
+5FB6        787A
+5FB7        7886
+5FB8        789A
+5FB9        787C
+5FBA        788C
+5FBB        78A3
+5FBC        78B5
+5FBD        78AA
+5FBE        78AF
+5FBF        78D1
+5FC0        78C6
+5FC1        78CB
+5FC2        78D4
+5FC3        78BE
+5FC4        78BC
+5FC5        78C5
+5FC6        78CA
+5FC7        78EC
+5FC8        78E7
+5FC9        78DA
+5FCA        78FD
+5FCB        78F4
+5FCC        7907
+5FCD        7911
+5FCE        7919
+5FCF        792C
+5FD0        792B
+5FD1        7930
+5FD2        FA18
+5FD3        7940
+5FD4        7960
+5FD5        FA19
+5FD6        795F
+5FD7        795A
+5FD8        7955
+5FD9        FA1A
+5FDA        797F
+5FDB        798A
+5FDC        7994
+5FDD        FA1B
+5FDE        799D
+5FDF        799B
+5FE0        79AA
+5FE1        79B3
+5FE2        79BA
+5FE3        79C9
+5FE4        79D5
+5FE5        79E7
+5FE6        79EC
+5FE7        79E3
+5FE8        7A08
+5FE9        7A0D
+5FEA        7A18
+5FEB        7A19
+5FEC        7A1F
+5FED        7A31
+5FEE        7A3E
+5FEF        7A37
+5FF0        7A3B
+5FF1        7A43
+5FF2        7A57
+5FF3        7A49
+5FF4        7A62
+5FF5        7A61
+5FF6        7A69
+5FF7        9F9D
+5FF8        7A70
+5FF9        7A79
+5FFA        7A7D
+5FFB        7A88
+5FFC        7A95
+5FFD        7A98
+5FFE        7A96
+6041        7A97
+6042        7AA9
+6043        7AB0
+6044        7AB6
+6045        9083
+6046        7AC3
+6047        7ABF
+6048        7AC5
+6049        7AC4
+604A        7AC7
+604B        7ACA
+604C        7ACD
+604D        7ACF
+604E        7AD2
+604F        7AD1
+6050        7AD5
+6051        7AD3
+6052        7AD9
+6053        7ADA
+6054        7ADD
+6055        7AE1
+6056        7AE2
+6057        7AE6
+6058        7AE7
+6059        FA1C
+605A        7AEB
+605B        7AED
+605C        7AF0
+605D        7AF8
+605E        7B02
+605F        7B0F
+6060        7B0B
+6061        7B0A
+6062        7B06
+6063        7B33
+6064        7B36
+6065        7B19
+6066        7B1E
+6067        7B35
+6068        7B28
+6069        7B50
+606A        7B4D
+606B        7B4C
+606C        7B45
+606D        7B5D
+606E        7B75
+606F        7B7A
+6070        7B74
+6071        7B70
+6072        7B71
+6073        7B6E
+6074        7B9D
+6075        7B98
+6076        7B9F
+6077        7B8D
+6078        7B9C
+6079        7B9A
+607A        7B92
+607B        7B8F
+607C        7B99
+607D        7BCF
+607E        7BCB
+607F        7BCC
+6080        7BB4
+6081        7BC6
+6082        7B9E
+6083        7BDD
+6084        7BE9
+6085        7BE6
+6086        7BF7
+6087        7BE5
+6088        7C14
+6089        7C00
+608A        7C13
+608B        7C07
+608C        7BF3
+608D        7C0D
+608E        7BF6
+608F        7C23
+6090        7C27
+6091        7C2A
+6092        7C1F
+6093        7C37
+6094        7C2B
+6095        7C3D
+6096        7C40
+6097        7C4C
+6098        7C43
+6099        7C56
+609A        7C50
+609B        7C58
+609C        7C5F
+609D        7C65
+609E        7C6C
+609F        7C75
+60A0        7C83
+60A1        7C90
+60A2        7CA4
+60A3        7CA2
+60A4        7CAB
+60A5        7CA1
+60A6        7CAD
+60A7        7CA8
+60A8        7CB3
+60A9        7CB2
+60AA        7CB1
+60AB        7CAE
+60AC        7CB9
+60AD        FA1D
+60AE        7CBD
+60AF        7CC5
+60B0        7CC2
+60B1        7CD2
+60B2        7CE2
+60B3        7CD8
+60B4        7CDC
+60B5        7CEF
+60B6        7CF2
+60B7        7CF4
+60B8        7CF6
+60B9        7D06
+60BA        7D02
+60BB        7D1C
+60BC        7D15
+60BD        7D0A
+60BE        7D45
+60BF        7D4B
+60C0        7D2E
+60C1        7D32
+60C2        7D3F
+60C3        7D35
+60C4        7D48
+60C5        7D46
+60C6        7D5C
+60C7        7D73
+60C8        7D56
+60C9        7D4E
+60CA        7D68
+60CB        7D6E
+60CC        7D4F
+60CD        7D63
+60CE        7D93
+60CF        7D89
+60D0        7D5B
+60D1        7DAE
+60D2        7DA3
+60D3        7DB5
+60D4        7DB7
+60D5        7DC7
+60D6        7DBD
+60D7        7DAB
+60D8        7DA2
+60D9        7DAF
+60DA        7DA0
+60DB        7DB8
+60DC        7D9F
+60DD        7DB0
+60DE        7DD5
+60DF        7DD8
+60E0        7DDD
+60E1        7DD6
+60E2        7DE4
+60E3        7DDE
+60E4        7DFB
+60E5        7E0B
+60E6        7DF2
+60E7        7DE1
+60E8        7DDC
+60E9        7E05
+60EA        7E0A
+60EB        7E21
+60EC        7E12
+60ED        7E1F
+60EE        7E09
+60EF        7E3A
+60F0        7E46
+60F1        7E66
+60F2        7E31
+60F3        7E3D
+60F4        7E35
+60F5        7E3B
+60F6        7E39
+60F7        7E43
+60F8        7E37
+60F9        7E32
+60FA        7E5D
+60FB        7E56
+60FC        7E5E
+60FD        7E52
+60FE        7E59
+6141        7E5A
+6142        7E67
+6143        7E79
+6144        7E6A
+6145        7E69
+6146        7E7C
+6147        7E7B
+6148        7E7D
+6149        8FAE
+614A        7E7F
+614B        7E83
+614C        7E89
+614D        7E8E
+614E        7E8C
+614F        7E92
+6150        7E93
+6151        7E94
+6152        7E96
+6153        7E9B
+6154        7F38
+6155        7F3A
+6156        7F45
+6157        7F47
+6158        7F4C
+6159        7F4E
+615A        7F51
+615B        7F55
+615C        7F54
+615D        7F58
+615E        7F5F
+615F        7F60
+6160        7F68
+6161        7F67
+6162        7F69
+6163        7F78
+6164        7F82
+6165        7F86
+6166        7F83
+6167        7F87
+6168        7F88
+6169        7F8C
+616A        7F94
+616B        7F9E
+616C        7F9D
+616D        7F9A
+616E        7FA1
+616F        7FA3
+6170        7FAF
+6171        7FAE
+6172        7FB2
+6173        7FB9
+6174        7FB6
+6175        7FB8
+6176        8B71
+6177        FA1E
+6178        7FC5
+6179        7FC6
+617A        7FCA
+617B        7FD5
+617C        7FE1
+617D        7FE6
+617E        7FE9
+617F        7FF3
+6180        7FF9
+6181        8004
+6182        800B
+6183        8012
+6184        8019
+6185        801C
+6186        8021
+6187        8028
+6188        803F
+6189        803B
+618A        804A
+618B        8046
+618C        8052
+618D        8058
+618E        805F
+618F        8062
+6190        8068
+6191        8073
+6192        8072
+6193        8070
+6194        8076
+6195        8079
+6196        807D
+6197        807F
+6198        8084
+6199        8085
+619A        8093
+619B        809A
+619C        80AD
+619D        5190
+619E        80AC
+619F        80DB
+61A0        80E5
+61A1        80D9
+61A2        80DD
+61A3        80C4
+61A4        80DA
+61A5        8109
+61A6        80EF
+61A7        80F1
+61A8        811B
+61A9        8123
+61AA        812F
+61AB        814B
+61AC        8146
+61AD        813E
+61AE        8153
+61AF        8151
+61B0        80FC
+61B1        8171
+61B2        816E
+61B3        8165
+61B4        815F
+61B5        8166
+61B6        8174
+61B7        8183
+61B8        8188
+61B9        818A
+61BA        8180
+61BB        8182
+61BC        81A0
+61BD        8195
+61BE        81A3
+61BF        8193
+61C0        81B5
+61C1        81A4
+61C2        81A9
+61C3        81B8
+61C4        81B0
+61C5        81C8
+61C6        81BE
+61C7        81BD
+61C8        81C0
+61C9        81C2
+61CA        81BA
+61CB        81C9
+61CC        81CD
+61CD        81D1
+61CE        81D8
+61CF        81D9
+61D0        81DA
+61D1        81DF
+61D2        81E0
+61D3        81FA
+61D4        81FB
+61D5        81FE
+61D6        8201
+61D7        8202
+61D8        8205
+61D9        820D
+61DA        8210
+61DB        8212
+61DC        8216
+61DD        8229
+61DE        822B
+61DF        822E
+61E0        8238
+61E1        8233
+61E2        8240
+61E3        8259
+61E4        825A
+61E5        825D
+61E6        825F
+61E7        8264
+61E8        8262
+61E9        8268
+61EA        826A
+61EB        826B
+61EC        8271
+61ED        8277
+61EE        827E
+61EF        828D
+61F0        8292
+61F1        82AB
+61F2        829F
+61F3        82BB
+61F4        82AC
+61F5        82E1
+61F6        82E3
+61F7        82DF
+61F8        8301
+61F9        82D2
+61FA        82F4
+61FB        82F3
+61FC        8303
+61FD        82FB
+61FE        82F9
+6241        82DE
+6242        8306
+6243        82DC
+6244        82FA
+6245        8309
+6246        82D9
+6247        8335
+6248        8362
+6249        8334
+624A        8316
+624B        8331
+624C        8340
+624D        8339
+624E        8350
+624F        8345
+6250        832F
+6251        832B
+6252        8318
+6253        839A
+6254        83AA
+6255        839F
+6256        83A2
+6257        8396
+6258        8323
+6259        838E
+625A        8375
+625B        837F
+625C        838A
+625D        837C
+625E        83B5
+625F        8373
+6260        8393
+6261        83A0
+6262        8385
+6263        8389
+6264        83A8
+6265        83F4
+6266        8413
+6267        83C7
+6268        83CE
+6269        83F7
+626A        83FD
+626B        8403
+626C        83D8
+626D        840B
+626E        83C1
+626F        8407
+6270        83E0
+6271        83F2
+6272        840D
+6273        8420
+6274        83F6
+6275        83BD
+6276        83FB
+6277        842A
+6278        8462
+6279        843C
+627A        8484
+627B        8477
+627C        846B
+627D        8479
+627E        8448
+627F        846E
+6280        8482
+6281        8469
+6282        8446
+6283        846F
+6284        8438
+6285        8435
+6286        84CA
+6287        84B9
+6288        84BF
+6289        849F
+628A        84B4
+628B        84CD
+628C        84BB
+628D        84DA
+628E        84D0
+628F        84C1
+6290        84AD
+6291        84C6
+6292        84D6
+6293        84A1
+6294        84D9
+6295        84FF
+6296        84F4
+6297        8517
+6298        8518
+6299        852C
+629A        851F
+629B        8515
+629C        8514
+629D        8506
+629E        8553
+629F        855A
+62A0        8540
+62A1        8559
+62A2        8563
+62A3        8558
+62A4        8548
+62A5        8541
+62A6        854A
+62A7        854B
+62A8        856B
+62A9        8555
+62AA        8580
+62AB        85A4
+62AC        8588
+62AD        8591
+62AE        858A
+62AF        85A8
+62B0        856D
+62B1        8594
+62B2        859B
+62B3        85AE
+62B4        8587
+62B5        859C
+62B6        8577
+62B7        857E
+62B8        8590
+62B9        FA1F
+62BA        820A
+62BB        85B0
+62BC        85C9
+62BD        85BA
+62BE        85CF
+62BF        85B9
+62C0        85D0
+62C1        85D5
+62C2        85DD
+62C3        85E5
+62C4        85DC
+62C5        85F9
+62C6        860A
+62C7        8613
+62C8        860B
+62C9        85FE
+62CA        8622
+62CB        861A
+62CC        8630
+62CD        863F
+62CE        FA20
+62CF        864D
+62D0        4E55
+62D1        8655
+62D2        865F
+62D3        8667
+62D4        8671
+62D5        8693
+62D6        86A3
+62D7        86A9
+62D8        868B
+62D9        86AA
+62DA        868C
+62DB        86B6
+62DC        86AF
+62DD        86C4
+62DE        86C6
+62DF        86B0
+62E0        86C9
+62E1        86CE
+62E2        FA21
+62E3        86AB
+62E4        86D4
+62E5        86DE
+62E6        86E9
+62E7        86EC
+62E8        86DF
+62E9        86DB
+62EA        8712
+62EB        8706
+62EC        8708
+62ED        8700
+62EE        8703
+62EF        86FB
+62F0        8711
+62F1        8709
+62F2        870D
+62F3        86F9
+62F4        870A
+62F5        8734
+62F6        873F
+62F7        873B
+62F8        8725
+62F9        8729
+62FA        871A
+62FB        875F
+62FC        8778
+62FD        874C
+62FE        874E
+6341        8774
+6342        8757
+6343        8768
+6344        8782
+6345        876A
+6346        8760
+6347        876E
+6348        8759
+6349        8753
+634A        8763
+634B        877F
+634C        87A2
+634D        87C6
+634E        879F
+634F        87AF
+6350        87CB
+6351        87BD
+6352        87C0
+6353        87D0
+6354        96D6
+6355        87AB
+6356        87C4
+6357        87B3
+6358        87D2
+6359        87BB
+635A        87EF
+635B        87F2
+635C        87E0
+635D        880E
+635E        8807
+635F        880F
+6360        8816
+6361        880D
+6362        87FE
+6363        87F6
+6364        87F7
+6365        8811
+6366        8815
+6367        8822
+6368        8821
+6369        8827
+636A        8831
+636B        8836
+636C        8839
+636D        883B
+636E        8842
+636F        8844
+6370        884D
+6371        8852
+6372        8859
+6373        885E
+6374        8862
+6375        886B
+6376        8881
+6377        887E
+6378        8875
+6379        887D
+637A        8872
+637B        8882
+637C        889E
+637D        8897
+637E        8892
+637F        88AE
+6380        8899
+6381        88A2
+6382        888D
+6383        88A4
+6384        88BF
+6385        88B5
+6386        88B1
+6387        88C3
+6388        88C4
+6389        88D4
+638A        88D8
+638B        88D9
+638C        88DD
+638D        88F9
+638E        8902
+638F        88FC
+6390        88F5
+6391        88E8
+6392        88F2
+6393        8904
+6394        890C
+6395        892A
+6396        891D
+6397        890A
+6398        8913
+6399        891E
+639A        8925
+639B        892B
+639C        8941
+639D        893B
+639E        8936
+639F        8943
+63A0        8938
+63A1        894D
+63A2        894C
+63A3        8960
+63A4        895E
+63A5        8966
+63A6        896A
+63A7        8964
+63A8        896D
+63A9        896F
+63AA        8974
+63AB        8977
+63AC        897E
+63AD        8983
+63AE        8988
+63AF        898A
+63B0        8993
+63B1        8998
+63B2        89A1
+63B3        89A9
+63B4        89A6
+63B5        89AC
+63B6        89AF
+63B7        89B2
+63B8        89BA
+63B9        89BF
+63BA        89BD
+63BB        89C0
+63BC        89DA
+63BD        89DD
+63BE        89E7
+63BF        89F4
+63C0        89F8
+63C1        8A03
+63C2        8A16
+63C3        8A10
+63C4        8A0C
+63C5        8A12
+63C6        8A1B
+63C7        8A1D
+63C8        8A25
+63C9        8A36
+63CA        8A41
+63CB        8A37
+63CC        8A5B
+63CD        8A52
+63CE        8A46
+63CF        8A48
+63D0        8A7C
+63D1        8A6D
+63D2        8A6C
+63D3        8A62
+63D4        8A79
+63D5        8A85
+63D6        8A82
+63D7        8A84
+63D8        8AA8
+63D9        8AA1
+63DA        8A91
+63DB        8AA5
+63DC        8AA6
+63DD        8A9A
+63DE        8AA3
+63DF        8AA7
+63E0        8ACC
+63E1        8ABE
+63E2        8ACD
+63E3        8AC2
+63E4        8ADA
+63E5        8AF3
+63E6        8AE7
+63E7        8AE4
+63E8        8AF1
+63E9        8B14
+63EA        8AE0
+63EB        8AE2
+63EC        8AE1
+63ED        8ADF
+63EE        FA22
+63EF        8AF6
+63F0        8AF7
+63F1        8ADE
+63F2        8ADB
+63F3        8B0C
+63F4        8B07
+63F5        8B1A
+63F6        8B16
+63F7        8B10
+63F8        8B17
+63F9        8B20
+63FA        8B33
+63FB        8B41
+63FC        97AB
+63FD        8B26
+63FE        8B2B
+6441        8B3E
+6442        8B4C
+6443        8B4F
+6444        8B4E
+6445        8B53
+6446        8B49
+6447        8B56
+6448        8B5B
+6449        8B5A
+644A        8B74
+644B        8B6B
+644C        8B5F
+644D        8B6C
+644E        8B6F
+644F        8B7D
+6450        8B7F
+6451        8B80
+6452        8B8C
+6453        8B8E
+6454        8B99
+6455        8B92
+6456        8B93
+6457        8B96
+6458        8B9A
+6459        8C3A
+645A        8C41
+645B        8C3F
+645C        8C48
+645D        8C4C
+645E        8C4E
+645F        8C50
+6460        8C55
+6461        8C62
+6462        8C6C
+6463        8C78
+6464        8C7A
+6465        8C7C
+6466        8C82
+6467        8C89
+6468        8C85
+6469        8C8A
+646A        8C8D
+646B        8C8E
+646C        8C98
+646D        8C94
+646E        621D
+646F        8CAD
+6470        8CAA
+6471        8CAE
+6472        8CBD
+6473        8CB2
+6474        8CB3
+6475        8CC1
+6476        8CB6
+6477        8CC8
+6478        8CCE
+6479        8CCD
+647A        8CE3
+647B        8CDA
+647C        8CF0
+647D        8CF4
+647E        8CFD
+647F        8CFA
+6480        8CFB
+6481        8D07
+6482        8D0A
+6483        8D0F
+6484        8D0D
+6485        8D12
+6486        8D10
+6487        8D13
+6488        8D14
+6489        8D16
+648A        8D67
+648B        8D6D
+648C        8D71
+648D        8D76
+648E        FA23
+648F        8D81
+6490        8DC2
+6491        8DBE
+6492        8DBA
+6493        8DCF
+6494        8DDA
+6495        8DD6
+6496        8DCC
+6497        8DDB
+6498        8DCB
+6499        8DEA
+649A        8DEB
+649B        8DDF
+649C        8DE3
+649D        8DFC
+649E        8E08
+649F        8DFF
+64A0        8E09
+64A1        8E1D
+64A2        8E1E
+64A3        8E10
+64A4        8E1F
+64A5        8E42
+64A6        8E35
+64A7        8E30
+64A8        8E34
+64A9        8E4A
+64AA        8E47
+64AB        8E49
+64AC        8E4C
+64AD        8E50
+64AE        8E48
+64AF        8E59
+64B0        8E64
+64B1        8E60
+64B2        8E55
+64B3        8E63
+64B4        8E76
+64B5        8E72
+64B6        8E87
+64B7        8E7C
+64B8        8E81
+64B9        8E85
+64BA        8E84
+64BB        8E8B
+64BC        8E8A
+64BD        8E93
+64BE        8E91
+64BF        8E94
+64C0        8E99
+64C1        8EA1
+64C2        8EAA
+64C3        8EB1
+64C4        8EBE
+64C5        8EC6
+64C6        8EC5
+64C7        8EC8
+64C8        8ECB
+64C9        8ECF
+64CA        8EDB
+64CB        8EE3
+64CC        8EFC
+64CD        8EFB
+64CE        8EEB
+64CF        8EFE
+64D0        8F0A
+64D1        8F0C
+64D2        8F05
+64D3        8F15
+64D4        8F12
+64D5        8F13
+64D6        8F1C
+64D7        8F19
+64D8        8F1F
+64D9        8F26
+64DA        8F33
+64DB        8F3B
+64DC        8F39
+64DD        8F45
+64DE        8F42
+64DF        8F3E
+64E0        8F49
+64E1        8F46
+64E2        8F4C
+64E3        8F4E
+64E4        8F57
+64E5        8F5C
+64E6        8F62
+64E7        8F63
+64E8        8F64
+64E9        8F9C
+64EA        8F9F
+64EB        8FA3
+64EC        8FA8
+64ED        8FA7
+64EE        8FAD
+64EF        8FAF
+64F0        8FB7
+64F1        FA24
+64F2        8FDA
+64F3        8FE5
+64F4        8FE2
+64F5        8FEF
+64F6        8FE9
+64F7        8FF4
+64F8        9005
+64F9        8FF9
+64FA        8FF8
+64FB        9011
+64FC        9015
+64FD        900E
+64FE        9021
+6541        900D
+6542        901E
+6543        9016
+6544        900B
+6545        9027
+6546        9036
+6547        9039
+6548        904F
+6549        FA25
+654A        9050
+654B        9051
+654C        9052
+654D        9049
+654E        903E
+654F        9056
+6550        9058
+6551        905E
+6552        9068
+6553        9067
+6554        906F
+6555        9076
+6556        96A8
+6557        9072
+6558        9082
+6559        907D
+655A        9089
+655B        9080
+655C        908F
+655D        6248
+655E        90AF
+655F        90B1
+6560        90B5
+6561        90E2
+6562        90E4
+6563        90DB
+6564        90DE
+6565        9102
+6566        FA26
+6567        9115
+6568        9112
+6569        9119
+656A        9132
+656B        9127
+656C        9130
+656D        914A
+656E        9156
+656F        9158
+6570        9163
+6571        9165
+6572        9169
+6573        9173
+6574        9172
+6575        918B
+6576        9189
+6577        9182
+6578        91A2
+6579        91AB
+657A        91AF
+657B        91AA
+657C        91B5
+657D        91B4
+657E        91BA
+657F        91C0
+6580        91C1
+6581        91CB
+6582        91D0
+6583        91DA
+6584        91DB
+6585        91D7
+6586        91DE
+6587        91D6
+6588        91DF
+6589        91E1
+658A        91ED
+658B        91F5
+658C        91EE
+658D        91E4
+658E        91F6
+658F        91E5
+6590        9206
+6591        921E
+6592        91FF
+6593        9210
+6594        9214
+6595        920A
+6596        922C
+6597        9215
+6598        9229
+6599        9257
+659A        9245
+659B        923A
+659C        9249
+659D        9264
+659E        9240
+659F        923C
+65A0        9248
+65A1        924E
+65A2        9250
+65A3        9259
+65A4        923F
+65A5        9251
+65A6        9239
+65A7        924B
+65A8        9267
+65A9        925A
+65AA        929C
+65AB        92A7
+65AC        9277
+65AD        9278
+65AE        9296
+65AF        9293
+65B0        929B
+65B1        9295
+65B2        92E9
+65B3        92CF
+65B4        92E7
+65B5        92D7
+65B6        92D9
+65B7        92D0
+65B8        FA27
+65B9        92D5
+65BA        92B9
+65BB        92B7
+65BC        92E0
+65BD        92D3
+65BE        933A
+65BF        9335
+65C0        930F
+65C1        9325
+65C2        92FA
+65C3        9321
+65C4        9344
+65C5        92FB
+65C6        FA28
+65C7        9319
+65C8        931E
+65C9        92FF
+65CA        9322
+65CB        931A
+65CC        931D
+65CD        9323
+65CE        9302
+65CF        933B
+65D0        9370
+65D1        9360
+65D2        937C
+65D3        936E
+65D4        9356
+65D5        9357
+65D6        93B9
+65D7        93B0
+65D8        93A4
+65D9        93AD
+65DA        9394
+65DB        93C8
+65DC        93D6
+65DD        93C6
+65DE        93D7
+65DF        93E8
+65E0        93E5
+65E1        93D8
+65E2        93C3
+65E3        93DD
+65E4        93DE
+65E5        93D0
+65E6        93E4
+65E7        941A
+65E8        93F8
+65E9        9414
+65EA        9413
+65EB        9421
+65EC        9403
+65ED        9407
+65EE        9436
+65EF        942B
+65F0        9431
+65F1        943A
+65F2        9441
+65F3        9452
+65F4        9445
+65F5        9444
+65F6        9448
+65F7        945B
+65F8        945A
+65F9        9460
+65FA        9462
+65FB        945E
+65FC        946A
+65FD        9475
+65FE        9470
+6641        9477
+6642        947F
+6643        947D
+6644        947C
+6645        947E
+6646        9481
+6647        9582
+6648        9587
+6649        958A
+664A        9592
+664B        9594
+664C        9596
+664D        9598
+664E        9599
+664F        95A0
+6650        95A8
+6651        95A7
+6652        95AD
+6653        95BC
+6654        95BB
+6655        95B9
+6656        95BE
+6657        95CA
+6658        6FF6
+6659        95C3
+665A        95CD
+665B        95CC
+665C        95D5
+665D        95D4
+665E        95D6
+665F        95DC
+6660        95E1
+6661        95E5
+6662        95E2
+6663        9621
+6664        9628
+6665        962E
+6666        962F
+6667        9642
+6668        964F
+6669        964C
+666A        964B
+666B        965C
+666C        965D
+666D        965F
+666E        9666
+666F        9677
+6670        9672
+6671        966C
+6672        968D
+6673        968B
+6674        F9DC
+6675        9698
+6676        9695
+6677        9697
+6678        FA29
+6679        969D
+667A        96A7
+667B        96AA
+667C        96B1
+667D        96B2
+667E        96B0
+667F        96AF
+6680        96B4
+6681        96B6
+6682        96B8
+6683        96B9
+6684        96CE
+6685        96CB
+6686        96D5
+6687        96DC
+6688        96D9
+6689        96F9
+668A        9704
+668B        9706
+668C        9708
+668D        9719
+668E        970D
+668F        9713
+6690        970E
+6691        9711
+6692        970F
+6693        9716
+6694        9724
+6695        972A
+6696        9730
+6697        9733
+6698        9739
+6699        973B
+669A        973D
+669B        973E
+669C        9746
+669D        9744
+669E        9743
+669F        9748
+66A0        9742
+66A1        9749
+66A2        974D
+66A3        974F
+66A4        9751
+66A5        9755
+66A6        975C
+66A7        9760
+66A8        9764
+66A9        9766
+66AA        9768
+66AB        976D
+66AC        9779
+66AD        9785
+66AE        977C
+66AF        9781
+66B0        977A
+66B1        978B
+66B2        978F
+66B3        9790
+66B4        979C
+66B5        97A8
+66B6        97A6
+66B7        97A3
+66B8        97B3
+66B9        97B4
+66BA        97C3
+66BB        97C6
+66BC        97C8
+66BD        97CB
+66BE        97DC
+66BF        97ED
+66C0        97F2
+66C1        7ADF
+66C2        97F5
+66C3        980F
+66C4        981A
+66C5        9824
+66C6        9821
+66C7        9837
+66C8        983D
+66C9        984F
+66CA        984B
+66CB        9857
+66CC        9865
+66CD        986B
+66CE        986F
+66CF        9870
+66D0        9871
+66D1        9874
+66D2        9873
+66D3        98AA
+66D4        98AF
+66D5        98B1
+66D6        98B6
+66D7        98C4
+66D8        98C3
+66D9        98C6
+66DA        98DC
+66DB        98ED
+66DC        98E9
+66DD        FA2A
+66DE        98EB
+66DF        FA2B
+66E0        9903
+66E1        991D
+66E2        9912
+66E3        9914
+66E4        9918
+66E5        9927
+66E6        FA2C
+66E7        9921
+66E8        991E
+66E9        9924
+66EA        9920
+66EB        992C
+66EC        992E
+66ED        993D
+66EE        993E
+66EF        9942
+66F0        9949
+66F1        9945
+66F2        9950
+66F3        994B
+66F4        9951
+66F5        994C
+66F6        9955
+66F7        9997
+66F8        9998
+66F9        999E
+66FA        99A5
+66FB        99AD
+66FC        99AE
+66FD        99BC
+66FE        99DF
+6741        99DB
+6742        99DD
+6743        99D8
+6744        99D1
+6745        99ED
+6746        99EE
+6747        99E2
+6748        99F1
+6749        99F2
+674A        99FB
+674B        99F8
+674C        9A01
+674D        9A0F
+674E        9A05
+674F        9A19
+6750        9A2B
+6751        9A37
+6752        9A40
+6753        9A45
+6754        9A42
+6755        9A43
+6756        9A3E
+6757        9A55
+6758        9A4D
+6759        9A4E
+675A        9A5B
+675B        9A57
+675C        9A5F
+675D        9A62
+675E        9A69
+675F        9A65
+6760        9A64
+6761        9A6A
+6762        9A6B
+6763        9AAD
+6764        9AB0
+6765        9ABC
+6766        9AC0
+6767        9ACF
+6768        9AD3
+6769        9AD4
+676A        9AD1
+676B        9AD9
+676C        9ADC
+676D        9ADE
+676E        9ADF
+676F        9AE2
+6770        9AE3
+6771        9AE6
+6772        9AEF
+6773        9AEB
+6774        9AEE
+6775        9AF4
+6776        9AF1
+6777        9AF7
+6778        9AFB
+6779        9B06
+677A        9B18
+677B        9B1A
+677C        9B1F
+677D        9B22
+677E        9B23
+677F        9B25
+6780        9B27
+6781        9B28
+6782        9B29
+6783        9B2A
+6784        9B2E
+6785        9B2F
+6786        9B31
+6787        9B32
+6788        9B3B
+6789        9B44
+678A        9B43
+678B        9B4D
+678C        9B4E
+678D        9B51
+678E        9B58
+678F        9B75
+6790        9B74
+6791        9B72
+6792        9B93
+6793        9B8F
+6794        9B83
+6795        9B91
+6796        9B96
+6797        9B97
+6798        9B9F
+6799        9BA0
+679A        9BA8
+679B        9BB1
+679C        9BB4
+679D        9BC0
+679E        9BCA
+679F        9BBB
+67A0        9BB9
+67A1        9BC6
+67A2        9BCF
+67A3        9BD1
+67A4        9BD2
+67A5        9BE3
+67A6        9BE2
+67A7        9BE4
+67A8        9BD4
+67A9        9BE1
+67AA        9BF5
+67AB        9BF1
+67AC        9BF2
+67AD        9C04
+67AE        9C1B
+67AF        9C15
+67B0        9C14
+67B1        9C00
+67B2        9C09
+67B3        9C13
+67B4        9C0C
+67B5        9C06
+67B6        9C08
+67B7        9C12
+67B8        9C0A
+67B9        9C2E
+67BA        9C25
+67BB        9C24
+67BC        9C21
+67BD        9C30
+67BE        9C47
+67BF        9C32
+67C0        9C46
+67C1        9C3E
+67C2        9C5A
+67C3        9C60
+67C4        9C67
+67C5        9C76
+67C6        9C78
+67C7        9CEB
+67C8        9CE7
+67C9        9CEC
+67CA        9CF0
+67CB        9D09
+67CC        9D03
+67CD        9D06
+67CE        9D2A
+67CF        9D26
+67D0        9D2C
+67D1        9D23
+67D2        9D1F
+67D3        9D15
+67D4        9D12
+67D5        9D41
+67D6        9D3F
+67D7        9D44
+67D8        9D3E
+67D9        9D46
+67DA        9D48
+67DB        9D5D
+67DC        9D5E
+67DD        9D59
+67DE        9D51
+67DF        9D50
+67E0        9D64
+67E1        9D72
+67E2        9D70
+67E3        9D87
+67E4        9D6B
+67E5        9D6F
+67E6        9D7A
+67E7        9D9A
+67E8        9DA4
+67E9        9DA9
+67EA        9DAB
+67EB        9DB2
+67EC        9DC4
+67ED        9DC1
+67EE        9DBB
+67EF        9DB8
+67F0        9DBA
+67F1        9DC6
+67F2        9DCF
+67F3        9DC2
+67F4        FA2D
+67F5        9DD9
+67F6        9DD3
+67F7        9DF8
+67F8        9DE6
+67F9        9DED
+67FA        9DEF
+67FB        9DFD
+67FC        9E1A
+67FD        9E1B
+67FE        9E19
+6841        9E1E
+6842        9E75
+6843        9E79
+6844        9E7D
+6845        9E81
+6846        9E88
+6847        9E8B
+6848        9E8C
+6849        9E95
+684A        9E91
+684B        9E9D
+684C        9EA5
+684D        9EB8
+684E        9EAA
+684F        9EAD
+6850        9EBC
+6851        9EBE
+6852        9761
+6853        9ECC
+6854        9ECF
+6855        9ED0
+6856        9ED1
+6857        9ED4
+6858        9EDC
+6859        9EDE
+685A        9EDD
+685B        9EE0
+685C        9EE5
+685D        9EE8
+685E        9EEF
+685F        9EF4
+6860        9EF6
+6861        9EF7
+6862        9EF9
+6863        9EFB
+6864        9EFC
+6865        9EFD
+6866        9F07
+6867        9F08
+6868        76B7
+6869        9F15
+686A        9F21
+686B        9F2C
+686C        9F3E
+686D        9F4A
+686E        9F4E
+686F        9F4F
+6870        9F52
+6871        9F54
+6872        9F63
+6873        9F5F
+6874        9F60
+6875        9F61
+6876        9F66
+6877        9F67
+6878        9F6C
+6879        9F6A
+687A        9F77
+687B        9F72
+687C        9F76
+687D        9F95
+687E        9F9C
+687F        9FA0
+6880        5C2D
+6881        69D9
+6882        9065
+6883        7476
+6884        51DC
+6885        7155
+6941        E000
+6942        E001
+6943        E002
+6944        E003
+6945        E004
+6946        E005
+6947        E006
+6948        E007
+6949        E008
+694A        E009
+694B        E00A
+694C        E00B
+694D        E00C
+694E        E00D
+694F        E00E
+6950        E00F
+6951        E010
+6952        E011
+6953        E012
+6954        E013
+6955        E014
+6956        E015
+6957        E016
+6958        E017
+6959        E018
+695A        E019
+695B        E01A
+695C        E01B
+695D        E01C
+695E        E01D
+695F        E01E
+6960        E01F
+6961        E020
+6962        E021
+6963        E022
+6964        E023
+6965        E024
+6966        E025
+6967        E026
+6968        E027
+6969        E028
+696A        E029
+696B        E02A
+696C        E02B
+696D        E02C
+696E        E02D
+696F        E02E
+6970        E02F
+6971        E030
+6972        E031
+6973        E032
+6974        E033
+6975        E034
+6976        E035
+6977        E036
+6978        E037
+6979        E038
+697A        E039
+697B        E03A
+697C        E03B
+697D        E03C
+697E        E03D
+697F        E03E
+6980        E03F
+6981        E040
+6982        E041
+6983        E042
+6984        E043
+6985        E044
+6986        E045
+6987        E046
+6988        E047
+6989        E048
+698A        E049
+698B        E04A
+698C        E04B
+698D        E04C
+698E        E04D
+698F        E04E
+6990        E04F
+6991        E050
+6992        E051
+6993        E052
+6994        E053
+6995        E054
+6996        E055
+6997        E056
+6998        E057
+6999        E058
+699A        E059
+699B        E05A
+699C        E05B
+699D        E05C
+699E        E05D
+699F        E05E
+69A0        E05F
+69A1        E060
+69A2        E061
+69A3        E062
+69A4        E063
+69A5        E064
+69A6        E065
+69A7        E066
+69A8        E067
+69A9        E068
+69AA        E069
+69AB        E06A
+69AC        E06B
+69AD        E06C
+69AE        E06D
+69AF        E06E
+69B0        E06F
+69B1        E070
+69B2        E071
+69B3        E072
+69B4        E073
+69B5        E074
+69B6        E075
+69B7        E076
+69B8        E077
+69B9        E078
+69BA        E079
+69BB        E07A
+69BC        E07B
+69BD        E07C
+69BE        E07D
+69BF        E07E
+69C0        E07F
+69C1        E080
+69C2        E081
+69C3        E082
+69C4        E083
+69C5        E084
+69C6        E085
+69C7        E086
+69C8        E087
+69C9        E088
+69CA        E089
+69CB        E08A
+69CC        E08B
+69CD        E08C
+69CE        E08D
+69CF        E08E
+69D0        E08F
+69D1        E090
+69D2        E091
+69D3        E092
+69D4        E093
+69D5        E094
+69D6        E095
+69D7        E096
+69D8        E097
+69D9        E098
+69DA        E099
+69DB        E09A
+69DC        E09B
+69DD        E09C
+69DE        E09D
+69DF        E09E
+69E0        E09F
+69E1        E0A0
+69E2        E0A1
+69E3        E0A2
+69E4        E0A3
+69E5        E0A4
+69E6        E0A5
+69E7        E0A6
+69E8        E0A7
+69E9        E0A8
+69EA        E0A9
+69EB        E0AA
+69EC        E0AB
+69ED        E0AC
+69EE        E0AD
+69EF        E0AE
+69F0        E0AF
+69F1        E0B0
+69F2        E0B1
+69F3        E0B2
+69F4        E0B3
+69F5        E0B4
+69F6        E0B5
+69F7        E0B6
+69F8        E0B7
+69F9        E0B8
+69FA        E0B9
+69FB        E0BA
+69FC        E0BB
+69FD        E0BC
+69FE        E0BD
+6A41        E0BE
+6A42        E0BF
+6A43        E0C0
+6A44        E0C1
+6A45        E0C2
+6A46        E0C3
+6A47        E0C4
+6A48        E0C5
+6A49        E0C6
+6A4A        E0C7
+6A4B        E0C8
+6A4C        E0C9
+6A4D        E0CA
+6A4E        E0CB
+6A4F        E0CC
+6A50        E0CD
+6A51        E0CE
+6A52        E0CF
+6A53        E0D0
+6A54        E0D1
+6A55        E0D2
+6A56        E0D3
+6A57        E0D4
+6A58        E0D5
+6A59        E0D6
+6A5A        E0D7
+6A5B        E0D8
+6A5C        E0D9
+6A5D        E0DA
+6A5E        E0DB
+6A5F        E0DC
+6A60        E0DD
+6A61        E0DE
+6A62        E0DF
+6A63        E0E0
+6A64        E0E1
+6A65        E0E2
+6A66        E0E3
+6A67        E0E4
+6A68        E0E5
+6A69        E0E6
+6A6A        E0E7
+6A6B        E0E8
+6A6C        E0E9
+6A6D        E0EA
+6A6E        E0EB
+6A6F        E0EC
+6A70        E0ED
+6A71        E0EE
+6A72        E0EF
+6A73        E0F0
+6A74        E0F1
+6A75        E0F2
+6A76        E0F3
+6A77        E0F4
+6A78        E0F5
+6A79        E0F6
+6A7A        E0F7
+6A7B        E0F8
+6A7C        E0F9
+6A7D        E0FA
+6A7E        E0FB
+6A7F        E0FC
+6A80        E0FD
+6A81        E0FE
+6A82        E0FF
+6A83        E100
+6A84        E101
+6A85        E102
+6A86        E103
+6A87        E104
+6A88        E105
+6A89        E106
+6A8A        E107
+6A8B        E108
+6A8C        E109
+6A8D        E10A
+6A8E        E10B
+6A8F        E10C
+6A90        E10D
+6A91        E10E
+6A92        E10F
+6A93        E110
+6A94        E111
+6A95        E112
+6A96        E113
+6A97        E114
+6A98        E115
+6A99        E116
+6A9A        E117
+6A9B        E118
+6A9C        E119
+6A9D        E11A
+6A9E        E11B
+6A9F        E11C
+6AA0        E11D
+6AA1        E11E
+6AA2        E11F
+6AA3        E120
+6AA4        E121
+6AA5        E122
+6AA6        E123
+6AA7        E124
+6AA8        E125
+6AA9        E126
+6AAA        E127
+6AAB        E128
+6AAC        E129
+6AAD        E12A
+6AAE        E12B
+6AAF        E12C
+6AB0        E12D
+6AB1        E12E
+6AB2        E12F
+6AB3        E130
+6AB4        E131
+6AB5        E132
+6AB6        E133
+6AB7        E134
+6AB8        E135
+6AB9        E136
+6ABA        E137
+6ABB        E138
+6ABC        E139
+6ABD        E13A
+6ABE        E13B
+6ABF        E13C
+6AC0        E13D
+6AC1        E13E
+6AC2        E13F
+6AC3        E140
+6AC4        E141
+6AC5        E142
+6AC6        E143
+6AC7        E144
+6AC8        E145
+6AC9        E146
+6ACA        E147
+6ACB        E148
+6ACC        E149
+6ACD        E14A
+6ACE        E14B
+6ACF        E14C
+6AD0        E14D
+6AD1        E14E
+6AD2        E14F
+6AD3        E150
+6AD4        E151
+6AD5        E152
+6AD6        E153
+6AD7        E154
+6AD8        E155
+6AD9        E156
+6ADA        E157
+6ADB        E158
+6ADC        E159
+6ADD        E15A
+6ADE        E15B
+6ADF        E15C
+6AE0        E15D
+6AE1        E15E
+6AE2        E15F
+6AE3        E160
+6AE4        E161
+6AE5        E162
+6AE6        E163
+6AE7        E164
+6AE8        E165
+6AE9        E166
+6AEA        E167
+6AEB        E168
+6AEC        E169
+6AED        E16A
+6AEE        E16B
+6AEF        E16C
+6AF0        E16D
+6AF1        E16E
+6AF2        E16F
+6AF3        E170
+6AF4        E171
+6AF5        E172
+6AF6        E173
+6AF7        E174
+6AF8        E175
+6AF9        E176
+6AFA        E177
+6AFB        E178
+6AFC        E179
+6AFD        E17A
+6AFE        E17B
+6B41        E17C
+6B42        E17D
+6B43        E17E
+6B44        E17F
+6B45        E180
+6B46        E181
+6B47        E182
+6B48        E183
+6B49        E184
+6B4A        E185
+6B4B        E186
+6B4C        E187
+6B4D        E188
+6B4E        E189
+6B4F        E18A
+6B50        E18B
+6B51        E18C
+6B52        E18D
+6B53        E18E
+6B54        E18F
+6B55        E190
+6B56        E191
+6B57        E192
+6B58        E193
+6B59        E194
+6B5A        E195
+6B5B        E196
+6B5C        E197
+6B5D        E198
+6B5E        E199
+6B5F        E19A
+6B60        E19B
+6B61        E19C
+6B62        E19D
+6B63        E19E
+6B64        E19F
+6B65        E1A0
+6B66        E1A1
+6B67        E1A2
+6B68        E1A3
+6B69        E1A4
+6B6A        E1A5
+6B6B        E1A6
+6B6C        E1A7
+6B6D        E1A8
+6B6E        E1A9
+6B6F        E1AA
+6B70        E1AB
+6B71        E1AC
+6B72        E1AD
+6B73        E1AE
+6B74        E1AF
+6B75        E1B0
+6B76        E1B1
+6B77        E1B2
+6B78        E1B3
+6B79        E1B4
+6B7A        E1B5
+6B7B        E1B6
+6B7C        E1B7
+6B7D        E1B8
+6B7E        E1B9
+6B7F        E1BA
+6B80        E1BB
+6B81        E1BC
+6B82        E1BD
+6B83        E1BE
+6B84        E1BF
+6B85        E1C0
+6B86        E1C1
+6B87        E1C2
+6B88        E1C3
+6B89        E1C4
+6B8A        E1C5
+6B8B        E1C6
+6B8C        E1C7
+6B8D        E1C8
+6B8E        E1C9
+6B8F        E1CA
+6B90        E1CB
+6B91        E1CC
+6B92        E1CD
+6B93        E1CE
+6B94        E1CF
+6B95        E1D0
+6B96        E1D1
+6B97        E1D2
+6B98        E1D3
+6B99        E1D4
+6B9A        E1D5
+6B9B        E1D6
+6B9C        E1D7
+6B9D        E1D8
+6B9E        E1D9
+6B9F        E1DA
+6BA0        E1DB
+6BA1        E1DC
+6BA2        E1DD
+6BA3        E1DE
+6BA4        E1DF
+6BA5        E1E0
+6BA6        E1E1
+6BA7        E1E2
+6BA8        E1E3
+6BA9        E1E4
+6BAA        E1E5
+6BAB        E1E6
+6BAC        E1E7
+6BAD        E1E8
+6BAE        E1E9
+6BAF        E1EA
+6BB0        E1EB
+6BB1        E1EC
+6BB2        E1ED
+6BB3        E1EE
+6BB4        E1EF
+6BB5        E1F0
+6BB6        E1F1
+6BB7        E1F2
+6BB8        E1F3
+6BB9        E1F4
+6BBA        E1F5
+6BBB        E1F6
+6BBC        E1F7
+6BBD        E1F8
+6BBE        E1F9
+6BBF        E1FA
+6BC0        E1FB
+6BC1        E1FC
+6BC2        E1FD
+6BC3        E1FE
+6BC4        E1FF
+6BC5        E200
+6BC6        E201
+6BC7        E202
+6BC8        E203
+6BC9        E204
+6BCA        E205
+6BCB        E206
+6BCC        E207
+6BCD        E208
+6BCE        E209
+6BCF        E20A
+6BD0        E20B
+6BD1        E20C
+6BD2        E20D
+6BD3        E20E
+6BD4        E20F
+6BD5        E210
+6BD6        E211
+6BD7        E212
+6BD8        E213
+6BD9        E214
+6BDA        E215
+6BDB        E216
+6BDC        E217
+6BDD        E218
+6BDE        E219
+6BDF        E21A
+6BE0        E21B
+6BE1        E21C
+6BE2        E21D
+6BE3        E21E
+6BE4        E21F
+6BE5        E220
+6BE6        E221
+6BE7        E222
+6BE8        E223
+6BE9        E224
+6BEA        E225
+6BEB        E226
+6BEC        E227
+6BED        E228
+6BEE        E229
+6BEF        E22A
+6BF0        E22B
+6BF1        E22C
+6BF2        E22D
+6BF3        E22E
+6BF4        E22F
+6BF5        E230
+6BF6        E231
+6BF7        E232
+6BF8        E233
+6BF9        E234
+6BFA        E235
+6BFB        E236
+6BFC        E237
+6BFD        E238
+6BFE        E239
+6C41        E23A
+6C42        E23B
+6C43        E23C
+6C44        E23D
+6C45        E23E
+6C46        E23F
+6C47        E240
+6C48        E241
+6C49        E242
+6C4A        E243
+6C4B        E244
+6C4C        E245
+6C4D        E246
+6C4E        E247
+6C4F        E248
+6C50        E249
+6C51        E24A
+6C52        E24B
+6C53        E24C
+6C54        E24D
+6C55        E24E
+6C56        E24F
+6C57        E250
+6C58        E251
+6C59        E252
+6C5A        E253
+6C5B        E254
+6C5C        E255
+6C5D        E256
+6C5E        E257
+6C5F        E258
+6C60        E259
+6C61        E25A
+6C62        E25B
+6C63        E25C
+6C64        E25D
+6C65        E25E
+6C66        E25F
+6C67        E260
+6C68        E261
+6C69        E262
+6C6A        E263
+6C6B        E264
+6C6C        E265
+6C6D        E266
+6C6E        E267
+6C6F        E268
+6C70        E269
+6C71        E26A
+6C72        E26B
+6C73        E26C
+6C74        E26D
+6C75        E26E
+6C76        E26F
+6C77        E270
+6C78        E271
+6C79        E272
+6C7A        E273
+6C7B        E274
+6C7C        E275
+6C7D        E276
+6C7E        E277
+6C7F        E278
+6C80        E279
+6C81        E27A
+6C82        E27B
+6C83        E27C
+6C84        E27D
+6C85        E27E
+6C86        E27F
+6C87        E280
+6C88        E281
+6C89        E282
+6C8A        E283
+6C8B        E284
+6C8C        E285
+6C8D        E286
+6C8E        E287
+6C8F        E288
+6C90        E289
+6C91        E28A
+6C92        E28B
+6C93        E28C
+6C94        E28D
+6C95        E28E
+6C96        E28F
+6C97        E290
+6C98        E291
+6C99        E292
+6C9A        E293
+6C9B        E294
+6C9C        E295
+6C9D        E296
+6C9E        E297
+6C9F        E298
+6CA0        E299
+6CA1        E29A
+6CA2        E29B
+6CA3        E29C
+6CA4        E29D
+6CA5        E29E
+6CA6        E29F
+6CA7        E2A0
+6CA8        E2A1
+6CA9        E2A2
+6CAA        E2A3
+6CAB        E2A4
+6CAC        E2A5
+6CAD        E2A6
+6CAE        E2A7
+6CAF        E2A8
+6CB0        E2A9
+6CB1        E2AA
+6CB2        E2AB
+6CB3        E2AC
+6CB4        E2AD
+6CB5        E2AE
+6CB6        E2AF
+6CB7        E2B0
+6CB8        E2B1
+6CB9        E2B2
+6CBA        E2B3
+6CBB        E2B4
+6CBC        E2B5
+6CBD        E2B6
+6CBE        E2B7
+6CBF        E2B8
+6CC0        E2B9
+6CC1        E2BA
+6CC2        E2BB
+6CC3        E2BC
+6CC4        E2BD
+6CC5        E2BE
+6CC6        E2BF
+6CC7        E2C0
+6CC8        E2C1
+6CC9        E2C2
+6CCA        E2C3
+6CCB        E2C4
+6CCC        E2C5
+6CCD        E2C6
+6CCE        E2C7
+6CCF        E2C8
+6CD0        E2C9
+6CD1        E2CA
+6CD2        E2CB
+6CD3        E2CC
+6CD4        E2CD
+6CD5        E2CE
+6CD6        E2CF
+6CD7        E2D0
+6CD8        E2D1
+6CD9        E2D2
+6CDA        E2D3
+6CDB        E2D4
+6CDC        E2D5
+6CDD        E2D6
+6CDE        E2D7
+6CDF        E2D8
+6CE0        E2D9
+6CE1        E2DA
+6CE2        E2DB
+6CE3        E2DC
+6CE4        E2DD
+6CE5        E2DE
+6CE6        E2DF
+6CE7        E2E0
+6CE8        E2E1
+6CE9        E2E2
+6CEA        E2E3
+6CEB        E2E4
+6CEC        E2E5
+6CED        E2E6
+6CEE        E2E7
+6CEF        E2E8
+6CF0        E2E9
+6CF1        E2EA
+6CF2        E2EB
+6CF3        E2EC
+6CF4        E2ED
+6CF5        E2EE
+6CF6        E2EF
+6CF7        E2F0
+6CF8        E2F1
+6CF9        E2F2
+6CFA        E2F3
+6CFB        E2F4
+6CFC        E2F5
+6CFD        E2F6
+6CFE        E2F7
+6D41        E2F8
+6D42        E2F9
+6D43        E2FA
+6D44        E2FB
+6D45        E2FC
+6D46        E2FD
+6D47        E2FE
+6D48        E2FF
+6D49        E300
+6D4A        E301
+6D4B        E302
+6D4C        E303
+6D4D        E304
+6D4E        E305
+6D4F        E306
+6D50        E307
+6D51        E308
+6D52        E309
+6D53        E30A
+6D54        E30B
+6D55        E30C
+6D56        E30D
+6D57        E30E
+6D58        E30F
+6D59        E310
+6D5A        E311
+6D5B        E312
+6D5C        E313
+6D5D        E314
+6D5E        E315
+6D5F        E316
+6D60        E317
+6D61        E318
+6D62        E319
+6D63        E31A
+6D64        E31B
+6D65        E31C
+6D66        E31D
+6D67        E31E
+6D68        E31F
+6D69        E320
+6D6A        E321
+6D6B        E322
+6D6C        E323
+6D6D        E324
+6D6E        E325
+6D6F        E326
+6D70        E327
+6D71        E328
+6D72        E329
+6D73        E32A
+6D74        E32B
+6D75        E32C
+6D76        E32D
+6D77        E32E
+6D78        E32F
+6D79        E330
+6D7A        E331
+6D7B        E332
+6D7C        E333
+6D7D        E334
+6D7E        E335
+6D7F        E336
+6D80        E337
+6D81        E338
+6D82        E339
+6D83        E33A
+6D84        E33B
+6D85        E33C
+6D86        E33D
+6D87        E33E
+6D88        E33F
+6D89        E340
+6D8A        E341
+6D8B        E342
+6D8C        E343
+6D8D        E344
+6D8E        E345
+6D8F        E346
+6D90        E347
+6D91        E348
+6D92        E349
+6D93        E34A
+6D94        E34B
+6D95        E34C
+6D96        E34D
+6D97        E34E
+6D98        E34F
+6D99        E350
+6D9A        E351
+6D9B        E352
+6D9C        E353
+6D9D        E354
+6D9E        E355
+6D9F        E356
+6DA0        E357
+6DA1        E358
+6DA2        E359
+6DA3        E35A
+6DA4        E35B
+6DA5        E35C
+6DA6        E35D
+6DA7        E35E
+6DA8        E35F
+6DA9        E360
+6DAA        E361
+6DAB        E362
+6DAC        E363
+6DAD        E364
+6DAE        E365
+6DAF        E366
+6DB0        E367
+6DB1        E368
+6DB2        E369
+6DB3        E36A
+6DB4        E36B
+6DB5        E36C
+6DB6        E36D
+6DB7        E36E
+6DB8        E36F
+6DB9        E370
+6DBA        E371
+6DBB        E372
+6DBC        E373
+6DBD        E374
+6DBE        E375
+6DBF        E376
+6DC0        E377
+6DC1        E378
+6DC2        E379
+6DC3        E37A
+6DC4        E37B
+6DC5        E37C
+6DC6        E37D
+6DC7        E37E
+6DC8        E37F
+6DC9        E380
+6DCA        E381
+6DCB        E382
+6DCC        E383
+6DCD        E384
+6DCE        E385
+6DCF        E386
+6DD0        E387
+6DD1        E388
+6DD2        E389
+6DD3        E38A
+6DD4        E38B
+6DD5        E38C
+6DD6        E38D
+6DD7        E38E
+6DD8        E38F
+6DD9        E390
+6DDA        E391
+6DDB        E392
+6DDC        E393
+6DDD        E394
+6DDE        E395
+6DDF        E396
+6DE0        E397
+6DE1        E398
+6DE2        E399
+6DE3        E39A
+6DE4        E39B
+6DE5        E39C
+6DE6        E39D
+6DE7        E39E
+6DE8        E39F
+6DE9        E3A0
+6DEA        E3A1
+6DEB        E3A2
+6DEC        E3A3
+6DED        E3A4
+6DEE        E3A5
+6DEF        E3A6
+6DF0        E3A7
+6DF1        E3A8
+6DF2        E3A9
+6DF3        E3AA
+6DF4        E3AB
+6DF5        E3AC
+6DF6        E3AD
+6DF7        E3AE
+6DF8        E3AF
+6DF9        E3B0
+6DFA        E3B1
+6DFB        E3B2
+6DFC        E3B3
+6DFD        E3B4
+6DFE        E3B5
+6E41        E3B6
+6E42        E3B7
+6E43        E3B8
+6E44        E3B9
+6E45        E3BA
+6E46        E3BB
+6E47        E3BC
+6E48        E3BD
+6E49        E3BE
+6E4A        E3BF
+6E4B        E3C0
+6E4C        E3C1
+6E4D        E3C2
+6E4E        E3C3
+6E4F        E3C4
+6E50        E3C5
+6E51        E3C6
+6E52        E3C7
+6E53        E3C8
+6E54        E3C9
+6E55        E3CA
+6E56        E3CB
+6E57        E3CC
+6E58        E3CD
+6E59        E3CE
+6E5A        E3CF
+6E5B        E3D0
+6E5C        E3D1
+6E5D        E3D2
+6E5E        E3D3
+6E5F        E3D4
+6E60        E3D5
+6E61        E3D6
+6E62        E3D7
+6E63        E3D8
+6E64        E3D9
+6E65        E3DA
+6E66        E3DB
+6E67        E3DC
+6E68        E3DD
+6E69        E3DE
+6E6A        E3DF
+6E6B        E3E0
+6E6C        E3E1
+6E6D        E3E2
+6E6E        E3E3
+6E6F        E3E4
+6E70        E3E5
+6E71        E3E6
+6E72        E3E7
+6E73        E3E8
+6E74        E3E9
+6E75        E3EA
+6E76        E3EB
+6E77        E3EC
+6E78        E3ED
+6E79        E3EE
+6E7A        E3EF
+6E7B        E3F0
+6E7C        E3F1
+6E7D        E3F2
+6E7E        E3F3
+6E7F        E3F4
+6E80        E3F5
+6E81        E3F6
+6E82        E3F7
+6E83        E3F8
+6E84        E3F9
+6E85        E3FA
+6E86        E3FB
+6E87        E3FC
+6E88        E3FD
+6E89        E3FE
+6E8A        E3FF
+6E8B        E400
+6E8C        E401
+6E8D        E402
+6E8E        E403
+6E8F        E404
+6E90        E405
+6E91        E406
+6E92        E407
+6E93        E408
+6E94        E409
+6E95        E40A
+6E96        E40B
+6E97        E40C
+6E98        E40D
+6E99        E40E
+6E9A        E40F
+6E9B        E410
+6E9C        E411
+6E9D        E412
+6E9E        E413
+6E9F        E414
+6EA0        E415
+6EA1        E416
+6EA2        E417
+6EA3        E418
+6EA4        E419
+6EA5        E41A
+6EA6        E41B
+6EA7        E41C
+6EA8        E41D
+6EA9        E41E
+6EAA        E41F
+6EAB        E420
+6EAC        E421
+6EAD        E422
+6EAE        E423
+6EAF        E424
+6EB0        E425
+6EB1        E426
+6EB2        E427
+6EB3        E428
+6EB4        E429
+6EB5        E42A
+6EB6        E42B
+6EB7        E42C
+6EB8        E42D
+6EB9        E42E
+6EBA        E42F
+6EBB        E430
+6EBC        E431
+6EBD        E432
+6EBE        E433
+6EBF        E434
+6EC0        E435
+6EC1        E436
+6EC2        E437
+6EC3        E438
+6EC4        E439
+6EC5        E43A
+6EC6        E43B
+6EC7        E43C
+6EC8        E43D
+6EC9        E43E
+6ECA        E43F
+6ECB        E440
+6ECC        E441
+6ECD        E442
+6ECE        E443
+6ECF        E444
+6ED0        E445
+6ED1        E446
+6ED2        E447
+6ED3        E448
+6ED4        E449
+6ED5        E44A
+6ED6        E44B
+6ED7        E44C
+6ED8        E44D
+6ED9        E44E
+6EDA        E44F
+6EDB        E450
+6EDC        E451
+6EDD        E452
+6EDE        E453
+6EDF        E454
+6EE0        E455
+6EE1        E456
+6EE2        E457
+6EE3        E458
+6EE4        E459
+6EE5        E45A
+6EE6        E45B
+6EE7        E45C
+6EE8        E45D
+6EE9        E45E
+6EEA        E45F
+6EEB        E460
+6EEC        E461
+6EED        E462
+6EEE        E463
+6EEF        E464
+6EF0        E465
+6EF1        E466
+6EF2        E467
+6EF3        E468
+6EF4        E469
+6EF5        E46A
+6EF6        E46B
+6EF7        E46C
+6EF8        E46D
+6EF9        E46E
+6EFA        E46F
+6EFB        E470
+6EFC        E471
+6EFD        E472
+6EFE        E473
+6F41        E474
+6F42        E475
+6F43        E476
+6F44        E477
+6F45        E478
+6F46        E479
+6F47        E47A
+6F48        E47B
+6F49        E47C
+6F4A        E47D
+6F4B        E47E
+6F4C        E47F
+6F4D        E480
+6F4E        E481
+6F4F        E482
+6F50        E483
+6F51        E484
+6F52        E485
+6F53        E486
+6F54        E487
+6F55        E488
+6F56        E489
+6F57        E48A
+6F58        E48B
+6F59        E48C
+6F5A        E48D
+6F5B        E48E
+6F5C        E48F
+6F5D        E490
+6F5E        E491
+6F5F        E492
+6F60        E493
+6F61        E494
+6F62        E495
+6F63        E496
+6F64        E497
+6F65        E498
+6F66        E499
+6F67        E49A
+6F68        E49B
+6F69        E49C
+6F6A        E49D
+6F6B        E49E
+6F6C        E49F
+6F6D        E4A0
+6F6E        E4A1
+6F6F        E4A2
+6F70        E4A3
+6F71        E4A4
+6F72        E4A5
+6F73        E4A6
+6F74        E4A7
+6F75        E4A8
+6F76        E4A9
+6F77        E4AA
+6F78        E4AB
+6F79        E4AC
+6F7A        E4AD
+6F7B        E4AE
+6F7C        E4AF
+6F7D        E4B0
+6F7E        E4B1
+6F7F        E4B2
+6F80        E4B3
+6F81        E4B4
+6F82        E4B5
+6F83        E4B6
+6F84        E4B7
+6F85        E4B8
+6F86        E4B9
+6F87        E4BA
+6F88        E4BB
+6F89        E4BC
+6F8A        E4BD
+6F8B        E4BE
+6F8C        E4BF
+6F8D        E4C0
+6F8E        E4C1
+6F8F        E4C2
+6F90        E4C3
+6F91        E4C4
+6F92        E4C5
+6F93        E4C6
+6F94        E4C7
+6F95        E4C8
+6F96        E4C9
+6F97        E4CA
+6F98        E4CB
+6F99        E4CC
+6F9A        E4CD
+6F9B        E4CE
+6F9C        E4CF
+6F9D        E4D0
+6F9E        E4D1
+6F9F        E4D2
+6FA0        E4D3
+6FA1        E4D4
+6FA2        E4D5
+6FA3        E4D6
+6FA4        E4D7
+6FA5        E4D8
+6FA6        E4D9
+6FA7        E4DA
+6FA8        E4DB
+6FA9        E4DC
+6FAA        E4DD
+6FAB        E4DE
+6FAC        E4DF
+6FAD        E4E0
+6FAE        E4E1
+6FAF        E4E2
+6FB0        E4E3
+6FB1        E4E4
+6FB2        E4E5
+6FB3        E4E6
+6FB4        E4E7
+6FB5        E4E8
+6FB6        E4E9
+6FB7        E4EA
+6FB8        E4EB
+6FB9        E4EC
+6FBA        E4ED
+6FBB        E4EE
+6FBC        E4EF
+6FBD        E4F0
+6FBE        E4F1
+6FBF        E4F2
+6FC0        E4F3
+6FC1        E4F4
+6FC2        E4F5
+6FC3        E4F6
+6FC4        E4F7
+6FC5        E4F8
+6FC6        E4F9
+6FC7        E4FA
+6FC8        E4FB
+6FC9        E4FC
+6FCA        E4FD
+6FCB        E4FE
+6FCC        E4FF
+6FCD        E500
+6FCE        E501
+6FCF        E502
+6FD0        E503
+6FD1        E504
+6FD2        E505
+6FD3        E506
+6FD4        E507
+6FD5        E508
+6FD6        E509
+6FD7        E50A
+6FD8        E50B
+6FD9        E50C
+6FDA        E50D
+6FDB        E50E
+6FDC        E50F
+6FDD        E510
+6FDE        E511
+6FDF        E512
+6FE0        E513
+6FE1        E514
+6FE2        E515
+6FE3        E516
+6FE4        E517
+6FE5        E518
+6FE6        E519
+6FE7        E51A
+6FE8        E51B
+6FE9        E51C
+6FEA        E51D
+6FEB        E51E
+6FEC        E51F
+6FED        E520
+6FEE        E521
+6FEF        E522
+6FF0        E523
+6FF1        E524
+6FF2        E525
+6FF3        E526
+6FF4        E527
+6FF5        E528
+6FF6        E529
+6FF7        E52A
+6FF8        E52B
+6FF9        E52C
+6FFA        E52D
+6FFB        E52E
+6FFC        E52F
+6FFD        E530
+6FFE        E531
+7041        E532
+7042        E533
+7043        E534
+7044        E535
+7045        E536
+7046        E537
+7047        E538
+7048        E539
+7049        E53A
+704A        E53B
+704B        E53C
+704C        E53D
+704D        E53E
+704E        E53F
+704F        E540
+7050        E541
+7051        E542
+7052        E543
+7053        E544
+7054        E545
+7055        E546
+7056        E547
+7057        E548
+7058        E549
+7059        E54A
+705A        E54B
+705B        E54C
+705C        E54D
+705D        E54E
+705E        E54F
+705F        E550
+7060        E551
+7061        E552
+7062        E553
+7063        E554
+7064        E555
+7065        E556
+7066        E557
+7067        E558
+7068        E559
+7069        E55A
+706A        E55B
+706B        E55C
+706C        E55D
+706D        E55E
+706E        E55F
+706F        E560
+7070        E561
+7071        E562
+7072        E563
+7073        E564
+7074        E565
+7075        E566
+7076        E567
+7077        E568
+7078        E569
+7079        E56A
+707A        E56B
+707B        E56C
+707C        E56D
+707D        E56E
+707E        E56F
+707F        E570
+7080        E571
+7081        E572
+7082        E573
+7083        E574
+7084        E575
+7085        E576
+7086        E577
+7087        E578
+7088        E579
+7089        E57A
+708A        E57B
+708B        E57C
+708C        E57D
+708D        E57E
+708E        E57F
+708F        E580
+7090        E581
+7091        E582
+7092        E583
+7093        E584
+7094        E585
+7095        E586
+7096        E587
+7097        E588
+7098        E589
+7099        E58A
+709A        E58B
+709B        E58C
+709C        E58D
+709D        E58E
+709E        E58F
+709F        E590
+70A0        E591
+70A1        E592
+70A2        E593
+70A3        E594
+70A4        E595
+70A5        E596
+70A6        E597
+70A7        E598
+70A8        E599
+70A9        E59A
+70AA        E59B
+70AB        E59C
+70AC        E59D
+70AD        E59E
+70AE        E59F
+70AF        E5A0
+70B0        E5A1
+70B1        E5A2
+70B2        E5A3
+70B3        E5A4
+70B4        E5A5
+70B5        E5A6
+70B6        E5A7
+70B7        E5A8
+70B8        E5A9
+70B9        E5AA
+70BA        E5AB
+70BB        E5AC
+70BC        E5AD
+70BD        E5AE
+70BE        E5AF
+70BF        E5B0
+70C0        E5B1
+70C1        E5B2
+70C2        E5B3
+70C3        E5B4
+70C4        E5B5
+70C5        E5B6
+70C6        E5B7
+70C7        E5B8
+70C8        E5B9
+70C9        E5BA
+70CA        E5BB
+70CB        E5BC
+70CC        E5BD
+70CD        E5BE
+70CE        E5BF
+70CF        E5C0
+70D0        E5C1
+70D1        E5C2
+70D2        E5C3
+70D3        E5C4
+70D4        E5C5
+70D5        E5C6
+70D6        E5C7
+70D7        E5C8
+70D8        E5C9
+70D9        E5CA
+70DA        E5CB
+70DB        E5CC
+70DC        E5CD
+70DD        E5CE
+70DE        E5CF
+70DF        E5D0
+70E0        E5D1
+70E1        E5D2
+70E2        E5D3
+70E3        E5D4
+70E4        E5D5
+70E5        E5D6
+70E6        E5D7
+70E7        E5D8
+70E8        E5D9
+70E9        E5DA
+70EA        E5DB
+70EB        E5DC
+70EC        E5DD
+70ED        E5DE
+70EE        E5DF
+70EF        E5E0
+70F0        E5E1
+70F1        E5E2
+70F2        E5E3
+70F3        E5E4
+70F4        E5E5
+70F5        E5E6
+70F6        E5E7
+70F7        E5E8
+70F8        E5E9
+70F9        E5EA
+70FA        E5EB
+70FB        E5EC
+70FC        E5ED
+70FD        E5EE
+70FE        E5EF
+7141        E5F0
+7142        E5F1
+7143        E5F2
+7144        E5F3
+7145        E5F4
+7146        E5F5
+7147        E5F6
+7148        E5F7
+7149        E5F8
+714A        E5F9
+714B        E5FA
+714C        E5FB
+714D        E5FC
+714E        E5FD
+714F        E5FE
+7150        E5FF
+7151        E600
+7152        E601
+7153        E602
+7154        E603
+7155        E604
+7156        E605
+7157        E606
+7158        E607
+7159        E608
+715A        E609
+715B        E60A
+715C        E60B
+715D        E60C
+715E        E60D
+715F        E60E
+7160        E60F
+7161        E610
+7162        E611
+7163        E612
+7164        E613
+7165        E614
+7166        E615
+7167        E616
+7168        E617
+7169        E618
+716A        E619
+716B        E61A
+716C        E61B
+716D        E61C
+716E        E61D
+716F        E61E
+7170        E61F
+7171        E620
+7172        E621
+7173        E622
+7174        E623
+7175        E624
+7176        E625
+7177        E626
+7178        E627
+7179        E628
+717A        E629
+717B        E62A
+717C        E62B
+717D        E62C
+717E        E62D
+717F        E62E
+7180        E62F
+7181        E630
+7182        E631
+7183        E632
+7184        E633
+7185        E634
+7186        E635
+7187        E636
+7188        E637
+7189        E638
+718A        E639
+718B        E63A
+718C        E63B
+718D        E63C
+718E        E63D
+718F        E63E
+7190        E63F
+7191        E640
+7192        E641
+7193        E642
+7194        E643
+7195        E644
+7196        E645
+7197        E646
+7198        E647
+7199        E648
+719A        E649
+719B        E64A
+719C        E64B
+719D        E64C
+719E        E64D
+719F        E64E
+71A0        E64F
+71A1        E650
+71A2        E651
+71A3        E652
+71A4        E653
+71A5        E654
+71A6        E655
+71A7        E656
+71A8        E657
+71A9        E658
+71AA        E659
+71AB        E65A
+71AC        E65B
+71AD        E65C
+71AE        E65D
+71AF        E65E
+71B0        E65F
+71B1        E660
+71B2        E661
+71B3        E662
+71B4        E663
+71B5        E664
+71B6        E665
+71B7        E666
+71B8        E667
+71B9        E668
+71BA        E669
+71BB        E66A
+71BC        E66B
+71BD        E66C
+71BE        E66D
+71BF        E66E
+71C0        E66F
+71C1        E670
+71C2        E671
+71C3        E672
+71C4        E673
+71C5        E674
+71C6        E675
+71C7        E676
+71C8        E677
+71C9        E678
+71CA        E679
+71CB        E67A
+71CC        E67B
+71CD        E67C
+71CE        E67D
+71CF        E67E
+71D0        E67F
+71D1        E680
+71D2        E681
+71D3        E682
+71D4        E683
+71D5        E684
+71D6        E685
+71D7        E686
+71D8        E687
+71D9        E688
+71DA        E689
+71DB        E68A
+71DC        E68B
+71DD        E68C
+71DE        E68D
+71DF        E68E
+71E0        E68F
+71E1        E690
+71E2        E691
+71E3        E692
+71E4        E693
+71E5        E694
+71E6        E695
+71E7        E696
+71E8        E697
+71E9        E698
+71EA        E699
+71EB        E69A
+71EC        E69B
+71ED        E69C
+71EE        E69D
+71EF        E69E
+71F0        E69F
+71F1        E6A0
+71F2        E6A1
+71F3        E6A2
+71F4        E6A3
+71F5        E6A4
+71F6        E6A5
+71F7        E6A6
+71F8        E6A7
+71F9        E6A8
+71FA        E6A9
+71FB        E6AA
+71FC        E6AB
+71FD        E6AC
+71FE        E6AD
+7241        E6AE
+7242        E6AF
+7243        E6B0
+7244        E6B1
+7245        E6B2
+7246        E6B3
+7247        E6B4
+7248        E6B5
+7249        E6B6
+724A        E6B7
+724B        E6B8
+724C        E6B9
+724D        E6BA
+724E        E6BB
+724F        E6BC
+7250        E6BD
+7251        E6BE
+7252        E6BF
+7253        E6C0
+7254        E6C1
+7255        E6C2
+7256        E6C3
+7257        E6C4
+7258        E6C5
+7259        E6C6
+725A        E6C7
+725B        E6C8
+725C        E6C9
+725D        E6CA
+725E        E6CB
+725F        E6CC
+7260        E6CD
+7261        E6CE
+7262        E6CF
+7263        E6D0
+7264        E6D1
+7265        E6D2
+7266        E6D3
+7267        E6D4
+7268        E6D5
+7269        E6D6
+726A        E6D7
+726B        E6D8
+726C        E6D9
+726D        E6DA
+726E        E6DB
+726F        E6DC
+7270        E6DD
+7271        E6DE
+7272        E6DF
+7273        E6E0
+7274        E6E1
+7275        E6E2
+7276        E6E3
+7277        E6E4
+7278        E6E5
+7279        E6E6
+727A        E6E7
+727B        E6E8
+727C        E6E9
+727D        E6EA
+727E        E6EB
+727F        E6EC
+7280        E6ED
+7281        E6EE
+7282        E6EF
+7283        E6F0
+7284        E6F1
+7285        E6F2
+7286        E6F3
+7287        E6F4
+7288        E6F5
+7289        E6F6
+728A        E6F7
+728B        E6F8
+728C        E6F9
+728D        E6FA
+728E        E6FB
+728F        E6FC
+7290        E6FD
+7291        E6FE
+7292        E6FF
+7293        E700
+7294        E701
+7295        E702
+7296        E703
+7297        E704
+7298        E705
+7299        E706
+729A        E707
+729B        E708
+729C        E709
+729D        E70A
+729E        E70B
+729F        E70C
+72A0        E70D
+72A1        E70E
+72A2        E70F
+72A3        E710
+72A4        E711
+72A5        E712
+72A6        E713
+72A7        E714
+72A8        E715
+72A9        E716
+72AA        E717
+72AB        E718
+72AC        E719
+72AD        E71A
+72AE        E71B
+72AF        E71C
+72B0        E71D
+72B1        E71E
+72B2        E71F
+72B3        E720
+72B4        E721
+72B5        E722
+72B6        E723
+72B7        E724
+72B8        E725
+72B9        E726
+72BA        E727
+72BB        E728
+72BC        E729
+72BD        E72A
+72BE        E72B
+72BF        E72C
+72C0        E72D
+72C1        E72E
+72C2        E72F
+72C3        E730
+72C4        E731
+72C5        E732
+72C6        E733
+72C7        E734
+72C8        E735
+72C9        E736
+72CA        E737
+72CB        E738
+72CC        E739
+72CD        E73A
+72CE        E73B
+72CF        E73C
+72D0        E73D
+72D1        E73E
+72D2        E73F
+72D3        E740
+72D4        E741
+72D5        E742
+72D6        E743
+72D7        E744
+72D8        E745
+72D9        E746
+72DA        E747
+72DB        E748
+72DC        E749
+72DD        E74A
+72DE        E74B
+72DF        E74C
+72E0        E74D
+72E1        E74E
+72E2        E74F
+72E3        E750
+72E4        E751
+72E5        E752
+72E6        E753
+72E7        E754
+72E8        E755
+72E9        E756
+72EA        E757
+72EB        E758
+72EC        E759
+72ED        E75A
+72EE        E75B
+72EF        E75C
+72F0        E75D
+72F1        E75E
+72F2        E75F
+72F3        E760
+72F4        E761
+72F5        E762
+72F6        E763
+72F7        E764
+72F8        E765
+72F9        E766
+72FA        E767
+72FB        E768
+72FC        E769
+72FD        E76A
+72FE        E76B
+7341        E76C
+7342        E76D
+7343        E76E
+7344        E76F
+7345        E770
+7346        E771
+7347        E772
+7348        E773
+7349        E774
+734A        E775
+734B        E776
+734C        E777
+734D        E778
+734E        E779
+734F        E77A
+7350        E77B
+7351        E77C
+7352        E77D
+7353        E77E
+7354        E77F
+7355        E780
+7356        E781
+7357        E782
+7358        E783
+7359        E784
+735A        E785
+735B        E786
+735C        E787
+735D        E788
+735E        E789
+735F        E78A
+7360        E78B
+7361        E78C
+7362        E78D
+7363        E78E
+7364        E78F
+7365        E790
+7366        E791
+7367        E792
+7368        E793
+7369        E794
+736A        E795
+736B        E796
+736C        E797
+736D        E798
+736E        E799
+736F        E79A
+7370        E79B
+7371        E79C
+7372        E79D
+7373        E79E
+7374        E79F
+7375        E7A0
+7376        E7A1
+7377        E7A2
+7378        E7A3
+7379        E7A4
+737A        E7A5
+737B        E7A6
+737C        E7A7
+737D        E7A8
+737E        E7A9
+737F        E7AA
+7380        E7AB
+7381        E7AC
+7382        E7AD
+7383        E7AE
+7384        E7AF
+7385        E7B0
+7386        E7B1
+7387        E7B2
+7388        E7B3
+7389        E7B4
+738A        E7B5
+738B        E7B6
+738C        E7B7
+738D        E7B8
+738E        E7B9
+738F        E7BA
+7390        E7BB
+7391        E7BC
+7392        E7BD
+7393        E7BE
+7394        E7BF
+7395        E7C0
+7396        E7C1
+7397        E7C2
+7398        E7C3
+7399        E7C4
+739A        E7C5
+739B        E7C6
+739C        E7C7
+739D        E7C8
+739E        E7C9
+739F        E7CA
+73A0        E7CB
+73A1        E7CC
+73A2        E7CD
+73A3        E7CE
+73A4        E7CF
+73A5        E7D0
+73A6        E7D1
+73A7        E7D2
+73A8        E7D3
+73A9        E7D4
+73AA        E7D5
+73AB        E7D6
+73AC        E7D7
+73AD        E7D8
+73AE        E7D9
+73AF        E7DA
+73B0        E7DB
+73B1        E7DC
+73B2        E7DD
+73B3        E7DE
+73B4        E7DF
+73B5        E7E0
+73B6        E7E1
+73B7        E7E2
+73B8        E7E3
+73B9        E7E4
+73BA        E7E5
+73BB        E7E6
+73BC        E7E7
+73BD        E7E8
+73BE        E7E9
+73BF        E7EA
+73C0        E7EB
+73C1        E7EC
+73C2        E7ED
+73C3        E7EE
+73C4        E7EF
+73C5        E7F0
+73C6        E7F1
+73C7        E7F2
+73C8        E7F3
+73C9        E7F4
+73CA        E7F5
+73CB        E7F6
+73CC        E7F7
+73CD        E7F8
+73CE        E7F9
+73CF        E7FA
+73D0        E7FB
+73D1        E7FC
+73D2        E7FD
+73D3        E7FE
+73D4        E7FF
+73D5        E800
+73D6        E801
+73D7        E802
+73D8        E803
+73D9        E804
+73DA        E805
+73DB        E806
+73DC        E807
+73DD        E808
+73DE        E809
+73DF        E80A
+73E0        E80B
+73E1        E80C
+73E2        E80D
+73E3        E80E
+73E4        E80F
+73E5        E810
+73E6        E811
+73E7        E812
+73E8        E813
+73E9        E814
+73EA        E815
+73EB        E816
+73EC        E817
+73ED        E818
+73EE        E819
+73EF        E81A
+73F0        E81B
+73F1        E81C
+73F2        E81D
+73F3        E81E
+73F4        E81F
+73F5        E820
+73F6        E821
+73F7        E822
+73F8        E823
+73F9        E824
+73FA        E825
+73FB        E826
+73FC        E827
+73FD        E828
+73FE        E829
+7441        E82A
+7442        E82B
+7443        E82C
+7444        E82D
+7445        E82E
+7446        E82F
+7447        E830
+7448        E831
+7449        E832
+744A        E833
+744B        E834
+744C        E835
+744D        E836
+744E        E837
+744F        E838
+7450        E839
+7451        E83A
+7452        E83B
+7453        E83C
+7454        E83D
+7455        E83E
+7456        E83F
+7457        E840
+7458        E841
+7459        E842
+745A        E843
+745B        E844
+745C        E845
+745D        E846
+745E        E847
+745F        E848
+7460        E849
+7461        E84A
+7462        E84B
+7463        E84C
+7464        E84D
+7465        E84E
+7466        E84F
+7467        E850
+7468        E851
+7469        E852
+746A        E853
+746B        E854
+746C        E855
+746D        E856
+746E        E857
+746F        E858
+7470        E859
+7471        E85A
+7472        E85B
+7473        E85C
+7474        E85D
+7475        E85E
+7476        E85F
+7477        E860
+7478        E861
+7479        E862
+747A        E863
+747B        E864
+747C        E865
+747D        E866
+747E        E867
+747F        E868
+7480        E869
+7481        E86A
+7482        E86B
+7483        E86C
+7484        E86D
+7485        E86E
+7486        E86F
+7487        E870
+7488        E871
+7489        E872
+748A        E873
+748B        E874
+748C        E875
+748D        E876
+748E        E877
+748F        E878
+7490        E879
+7491        E87A
+7492        E87B
+7493        E87C
+7494        E87D
+7495        E87E
+7496        E87F
+7497        E880
+7498        E881
+7499        E882
+749A        E883
+749B        E884
+749C        E885
+749D        E886
+749E        E887
+749F        E888
+74A0        E889
+74A1        E88A
+74A2        E88B
+74A3        E88C
+74A4        E88D
+74A5        E88E
+74A6        E88F
+74A7        E890
+74A8        E891
+74A9        E892
+74AA        E893
+74AB        E894
+74AC        E895
+74AD        E896
+74AE        E897
+74AF        E898
+74B0        E899
+74B1        E89A
+74B2        E89B
+74B3        E89C
+74B4        E89D
+74B5        E89E
+74B6        E89F
+74B7        E8A0
+74B8        E8A1
+74B9        E8A2
+74BA        E8A3
+74BB        E8A4
+74BC        E8A5
+74BD        E8A6
+74BE        E8A7
+74BF        E8A8
+74C0        E8A9
+74C1        E8AA
+74C2        E8AB
+74C3        E8AC
+74C4        E8AD
+74C5        E8AE
+74C6        E8AF
+74C7        E8B0
+74C8        E8B1
+74C9        E8B2
+74CA        E8B3
+74CB        E8B4
+74CC        E8B5
+74CD        E8B6
+74CE        E8B7
+74CF        E8B8
+74D0        E8B9
+74D1        E8BA
+74D2        E8BB
+74D3        E8BC
+74D4        E8BD
+74D5        E8BE
+74D6        E8BF
+74D7        E8C0
+74D8        E8C1
+74D9        E8C2
+74DA        E8C3
+74DB        E8C4
+74DC        E8C5
+74DD        E8C6
+74DE        E8C7
+74DF        E8C8
+74E0        E8C9
+74E1        E8CA
+74E2        E8CB
+74E3        E8CC
+74E4        E8CD
+74E5        E8CE
+74E6        E8CF
+74E7        E8D0
+74E8        E8D1
+74E9        E8D2
+74EA        E8D3
+74EB        E8D4
+74EC        E8D5
+74ED        E8D6
+74EE        E8D7
+74EF        E8D8
+74F0        E8D9
+74F1        E8DA
+74F2        E8DB
+74F3        E8DC
+74F4        E8DD
+74F5        E8DE
+74F6        E8DF
+74F7        E8E0
+74F8        E8E1
+74F9        E8E2
+74FA        E8E3
+74FB        E8E4
+74FC        E8E5
+74FD        E8E6
+74FE        E8E7
+7541        E8E8
+7542        E8E9
+7543        E8EA
+7544        E8EB
+7545        E8EC
+7546        E8ED
+7547        E8EE
+7548        E8EF
+7549        E8F0
+754A        E8F1
+754B        E8F2
+754C        E8F3
+754D        E8F4
+754E        E8F5
+754F        E8F6
+7550        E8F7
+7551        E8F8
+7552        E8F9
+7553        E8FA
+7554        E8FB
+7555        E8FC
+7556        E8FD
+7557        E8FE
+7558        E8FF
+7559        E900
+755A        E901
+755B        E902
+755C        E903
+755D        E904
+755E        E905
+755F        E906
+7560        E907
+7561        E908
+7562        E909
+7563        E90A
+7564        E90B
+7565        E90C
+7566        E90D
+7567        E90E
+7568        E90F
+7569        E910
+756A        E911
+756B        E912
+756C        E913
+756D        E914
+756E        E915
+756F        E916
+7570        E917
+7571        E918
+7572        E919
+7573        E91A
+7574        E91B
+7575        E91C
+7576        E91D
+7577        E91E
+7578        E91F
+7579        E920
+757A        E921
+757B        E922
+757C        E923
+757D        E924
+757E        E925
+757F        E926
+7580        E927
+7581        E928
+7582        E929
+7583        E92A
+7584        E92B
+7585        E92C
+7586        E92D
+7587        E92E
+7588        E92F
+7589        E930
+758A        E931
+758B        E932
+758C        E933
+758D        E934
+758E        E935
+758F        E936
+7590        E937
+7591        E938
+7592        E939
+7593        E93A
+7594        E93B
+7595        E93C
+7596        E93D
+7597        E93E
+7598        E93F
+7599        E940
+759A        E941
+759B        E942
+759C        E943
+759D        E944
+759E        E945
+759F        E946
+75A0        E947
+75A1        E948
+75A2        E949
+75A3        E94A
+75A4        E94B
+75A5        E94C
+75A6        E94D
+75A7        E94E
+75A8        E94F
+75A9        E950
+75AA        E951
+75AB        E952
+75AC        E953
+75AD        E954
+75AE        E955
+75AF        E956
+75B0        E957
+75B1        E958
+75B2        E959
+75B3        E95A
+75B4        E95B
+75B5        E95C
+75B6        E95D
+75B7        E95E
+75B8        E95F
+75B9        E960
+75BA        E961
+75BB        E962
+75BC        E963
+75BD        E964
+75BE        E965
+75BF        E966
+75C0        E967
+75C1        E968
+75C2        E969
+75C3        E96A
+75C4        E96B
+75C5        E96C
+75C6        E96D
+75C7        E96E
+75C8        E96F
+75C9        E970
+75CA        E971
+75CB        E972
+75CC        E973
+75CD        E974
+75CE        E975
+75CF        E976
+75D0        E977
+75D1        E978
+75D2        E979
+75D3        E97A
+75D4        E97B
+75D5        E97C
+75D6        E97D
+75D7        E97E
+75D8        E97F
+75D9        E980
+75DA        E981
+75DB        E982
+75DC        E983
+75DD        E984
+75DE        E985
+75DF        E986
+75E0        E987
+75E1        E988
+75E2        E989
+75E3        E98A
+75E4        E98B
+75E5        E98C
+75E6        E98D
+75E7        E98E
+75E8        E98F
+75E9        E990
+75EA        E991
+75EB        E992
+75EC        E993
+75ED        E994
+75EE        E995
+75EF        E996
+75F0        E997
+75F1        E998
+75F2        E999
+75F3        E99A
+75F4        E99B
+75F5        E99C
+75F6        E99D
+75F7        E99E
+75F8        E99F
+75F9        E9A0
+75FA        E9A1
+75FB        E9A2
+75FC        E9A3
+75FD        E9A4
+75FE        E9A5
+7641        E9A6
+7642        E9A7
+7643        E9A8
+7644        E9A9
+7645        E9AA
+7646        E9AB
+7647        E9AC
+7648        E9AD
+7649        E9AE
+764A        E9AF
+764B        E9B0
+764C        E9B1
+764D        E9B2
+764E        E9B3
+764F        E9B4
+7650        E9B5
+7651        E9B6
+7652        E9B7
+7653        E9B8
+7654        E9B9
+7655        E9BA
+7656        E9BB
+7657        E9BC
+7658        E9BD
+7659        E9BE
+765A        E9BF
+765B        E9C0
+765C        E9C1
+765D        E9C2
+765E        E9C3
+765F        E9C4
+7660        E9C5
+7661        E9C6
+7662        E9C7
+7663        E9C8
+7664        E9C9
+7665        E9CA
+7666        E9CB
+7667        E9CC
+7668        E9CD
+7669        E9CE
+766A        E9CF
+766B        E9D0
+766C        E9D1
+766D        E9D2
+766E        E9D3
+766F        E9D4
+7670        E9D5
+7671        E9D6
+7672        E9D7
+7673        E9D8
+7674        E9D9
+7675        E9DA
+7676        E9DB
+7677        E9DC
+7678        E9DD
+7679        E9DE
+767A        E9DF
+767B        E9E0
+767C        E9E1
+767D        E9E2
+767E        E9E3
+767F        E9E4
+7680        E9E5
+7681        E9E6
+7682        E9E7
+7683        E9E8
+7684        E9E9
+7685        E9EA
+7686        E9EB
+7687        E9EC
+7688        E9ED
+7689        E9EE
+768A        E9EF
+768B        E9F0
+768C        E9F1
+768D        E9F2
+768E        E9F3
+768F        E9F4
+7690        E9F5
+7691        E9F6
+7692        E9F7
+7693        E9F8
+7694        E9F9
+7695        E9FA
+7696        E9FB
+7697        E9FC
+7698        E9FD
+7699        E9FE
+769A        E9FF
+769B        EA00
+769C        EA01
+769D        EA02
+769E        EA03
+769F        EA04
+76A0        EA05
+76A1        EA06
+76A2        EA07
+76A3        EA08
+76A4        EA09
+76A5        EA0A
+76A6        EA0B
+76A7        EA0C
+76A8        EA0D
+76A9        EA0E
+76AA        EA0F
+76AB        EA10
+76AC        EA11
+76AD        EA12
+76AE        EA13
+76AF        EA14
+76B0        EA15
+76B1        EA16
+76B2        EA17
+76B3        EA18
+76B4        EA19
+76B5        EA1A
+76B6        EA1B
+76B7        EA1C
+76B8        EA1D
+76B9        EA1E
+76BA        EA1F
+76BB        EA20
+76BC        EA21
+76BD        EA22
+76BE        EA23
+76BF        EA24
+76C0        EA25
+76C1        EA26
+76C2        EA27
+76C3        EA28
+76C4        EA29
+76C5        EA2A
+76C6        EA2B
+76C7        EA2C
+76C8        EA2D
+76C9        EA2E
+76CA        EA2F
+76CB        EA30
+76CC        EA31
+76CD        EA32
+76CE        EA33
+76CF        EA34
+76D0        EA35
+76D1        EA36
+76D2        EA37
+76D3        EA38
+76D4        EA39
+76D5        EA3A
+76D6        EA3B
+76D7        EA3C
+76D8        EA3D
+76D9        EA3E
+76DA        EA3F
+76DB        EA40
+76DC        EA41
+76DD        EA42
+76DE        EA43
+76DF        EA44
+76E0        EA45
+76E1        EA46
+76E2        EA47
+76E3        EA48
+76E4        EA49
+76E5        EA4A
+76E6        EA4B
+76E7        EA4C
+76E8        EA4D
+76E9        EA4E
+76EA        EA4F
+76EB        EA50
+76EC        EA51
+76ED        EA52
+76EE        EA53
+76EF        EA54
+76F0        EA55
+76F1        EA56
+76F2        EA57
+76F3        EA58
+76F4        EA59
+76F5        EA5A
+76F6        EA5B
+76F7        EA5C
+76F8        EA5D
+76F9        EA5E
+76FA        EA5F
+76FB        EA60
+76FC        EA61
+76FD        EA62
+76FE        EA63
+7741        EA64
+7742        EA65
+7743        EA66
+7744        EA67
+7745        EA68
+7746        EA69
+7747        EA6A
+7748        EA6B
+7749        EA6C
+774A        EA6D
+774B        EA6E
+774C        EA6F
+774D        EA70
+774E        EA71
+774F        EA72
+7750        EA73
+7751        EA74
+7752        EA75
+7753        EA76
+7754        EA77
+7755        EA78
+7756        EA79
+7757        EA7A
+7758        EA7B
+7759        EA7C
+775A        EA7D
+775B        EA7E
+775C        EA7F
+775D        EA80
+775E        EA81
+775F        EA82
+7760        EA83
+7761        EA84
+7762        EA85
+7763        EA86
+7764        EA87
+7765        EA88
+7766        EA89
+7767        EA8A
+7768        EA8B
+7769        EA8C
+776A        EA8D
+776B        EA8E
+776C        EA8F
+776D        EA90
+776E        EA91
+776F        EA92
+7770        EA93
+7771        EA94
+7772        EA95
+7773        EA96
+7774        EA97
+7775        EA98
+7776        EA99
+7777        EA9A
+7778        EA9B
+7779        EA9C
+777A        EA9D
+777B        EA9E
+777C        EA9F
+777D        EAA0
+777E        EAA1
+777F        EAA2
+7780        EAA3
+7781        EAA4
+7782        EAA5
+7783        EAA6
+7784        EAA7
+7785        EAA8
+7786        EAA9
+7787        EAAA
+7788        EAAB
+7789        EAAC
+778A        EAAD
+778B        EAAE
+778C        EAAF
+778D        EAB0
+778E        EAB1
+778F        EAB2
+7790        EAB3
+7791        EAB4
+7792        EAB5
+7793        EAB6
+7794        EAB7
+7795        EAB8
+7796        EAB9
+7797        EABA
+7798        EABB
+7799        EABC
+779A        EABD
+779B        EABE
+779C        EABF
+779D        EAC0
+779E        EAC1
+779F        EAC2
+77A0        EAC3
+77A1        EAC4
+77A2        EAC5
+77A3        EAC6
+77A4        EAC7
+77A5        EAC8
+77A6        EAC9
+77A7        EACA
+77A8        EACB
+77A9        EACC
+77AA        EACD
+77AB        EACE
+77AC        EACF
+77AD        EAD0
+77AE        EAD1
+77AF        EAD2
+77B0        EAD3
+77B1        EAD4
+77B2        EAD5
+77B3        EAD6
+77B4        EAD7
+77B5        EAD8
+77B6        EAD9
+77B7        EADA
+77B8        EADB
+77B9        EADC
+77BA        EADD
+77BB        EADE
+77BC        EADF
+77BD        EAE0
+77BE        EAE1
+77BF        EAE2
+77C0        EAE3
+77C1        EAE4
+77C2        EAE5
+77C3        EAE6
+77C4        EAE7
+77C5        EAE8
+77C6        EAE9
+77C7        EAEA
+77C8        EAEB
+77C9        EAEC
+77CA        EAED
+77CB        EAEE
+77CC        EAEF
+77CD        EAF0
+77CE        EAF1
+77CF        EAF2
+77D0        EAF3
+77D1        EAF4
+77D2        EAF5
+77D3        EAF6
+77D4        EAF7
+77D5        EAF8
+77D6        EAF9
+77D7        EAFA
+77D8        EAFB
+77D9        EAFC
+77DA        EAFD
+77DB        EAFE
+77DC        EAFF
+77DD        EB00
+77DE        EB01
+77DF        EB02
+77E0        EB03
+77E1        EB04
+77E2        EB05
+77E3        EB06
+77E4        EB07
+77E5        EB08
+77E6        EB09
+77E7        EB0A
+77E8        EB0B
+77E9        EB0C
+77EA        EB0D
+77EB        EB0E
+77EC        EB0F
+77ED        EB10
+77EE        EB11
+77EF        EB12
+77F0        EB13
+77F1        EB14
+77F2        EB15
+77F3        EB16
+77F4        EB17
+77F5        EB18
+77F6        EB19
+77F7        EB1A
+77F8        EB1B
+77F9        EB1C
+77FA        EB1D
+77FB        EB1E
+77FC        EB1F
+77FD        EB20
+77FE        EB21
+7841        EB22
+7842        EB23
+7843        EB24
+7844        EB25
+7845        EB26
+7846        EB27
+7847        EB28
+7848        EB29
+7849        EB2A
+784A        EB2B
+784B        EB2C
+784C        EB2D
+784D        EB2E
+784E        EB2F
+784F        EB30
+7850        EB31
+7851        EB32
+7852        EB33
+7853        EB34
+7854        EB35
+7855        EB36
+7856        EB37
+7857        EB38
+7858        EB39
+7859        EB3A
+785A        EB3B
+785B        EB3C
+785C        EB3D
+785D        EB3E
+785E        EB3F
+785F        EB40
+7860        EB41
+7861        EB42
+7862        EB43
+7863        EB44
+7864        EB45
+7865        EB46
+7866        EB47
+7867        EB48
+7868        EB49
+7869        EB4A
+786A        EB4B
+786B        EB4C
+786C        EB4D
+786D        EB4E
+786E        EB4F
+786F        EB50
+7870        EB51
+7871        EB52
+7872        EB53
+7873        EB54
+7874        EB55
+7875        EB56
+7876        EB57
+7877        EB58
+7878        EB59
+7879        EB5A
+787A        EB5B
+787B        EB5C
+787C        EB5D
+787D        EB5E
+787E        EB5F
+787F        EB60
+7880        EB61
+7881        EB62
+7882        EB63
+7883        EB64
+7884        EB65
+7885        EB66
+7886        EB67
+7887        EB68
+7888        EB69
+7889        EB6A
+788A        EB6B
+788B        EB6C
+788C        EB6D
+788D        EB6E
+788E        EB6F
+788F        EB70
+7890        EB71
+7891        EB72
+7892        EB73
+7893        EB74
+7894        EB75
+7895        EB76
+7896        EB77
+7897        EB78
+7898        EB79
+7899        EB7A
+789A        EB7B
+789B        EB7C
+789C        EB7D
+789D        EB7E
+789E        EB7F
+789F        EB80
+78A0        EB81
+78A1        EB82
+78A2        EB83
+78A3        EB84
+78A4        EB85
+78A5        EB86
+78A6        EB87
+78A7        EB88
+78A8        EB89
+78A9        EB8A
+78AA        EB8B
+78AB        EB8C
+78AC        EB8D
+78AD        EB8E
+78AE        EB8F
+78AF        EB90
+78B0        EB91
+78B1        EB92
+78B2        EB93
+78B3        EB94
+78B4        EB95
+78B5        EB96
+78B6        EB97
+78B7        EB98
+78B8        EB99
+78B9        EB9A
+78BA        EB9B
+78BB        EB9C
+78BC        EB9D
+78BD        EB9E
+78BE        EB9F
+78BF        EBA0
+78C0        EBA1
+78C1        EBA2
+78C2        EBA3
+78C3        EBA4
+78C4        EBA5
+78C5        EBA6
+78C6        EBA7
+78C7        EBA8
+78C8        EBA9
+78C9        EBAA
+78CA        EBAB
+78CB        EBAC
+78CC        EBAD
+78CD        EBAE
+78CE        EBAF
+78CF        EBB0
+78D0        EBB1
+78D1        EBB2
+78D2        EBB3
+78D3        EBB4
+78D4        EBB5
+78D5        EBB6
+78D6        EBB7
+78D7        EBB8
+78D8        EBB9
+78D9        EBBA
+78DA        EBBB
+78DB        EBBC
+78DC        EBBD
+78DD        EBBE
+78DE        EBBF
+78DF        EBC0
+78E0        EBC1
+78E1        EBC2
+78E2        EBC3
+78E3        EBC4
+78E4        EBC5
+78E5        EBC6
+78E6        EBC7
+78E7        EBC8
+78E8        EBC9
+78E9        EBCA
+78EA        EBCB
+78EB        EBCC
+78EC        EBCD
+78ED        EBCE
+78EE        EBCF
+78EF        EBD0
+78F0        EBD1
+78F1        EBD2
+78F2        EBD3
+78F3        EBD4
+78F4        EBD5
+78F5        EBD6
+78F6        EBD7
+78F7        EBD8
+78F8        EBD9
+78F9        EBDA
+78FA        EBDB
+78FB        EBDC
+78FC        EBDD
+78FD        EBDE
+78FE        EBDF
+7941        EBE0
+7942        EBE1
+7943        EBE2
+7944        EBE3
+7945        EBE4
+7946        EBE5
+7947        EBE6
+7948        EBE7
+7949        EBE8
+794A        EBE9
+794B        EBEA
+794C        EBEB
+794D        EBEC
+794E        EBED
+794F        EBEE
+7950        EBEF
+7951        EBF0
+7952        EBF1
+7953        EBF2
+7954        EBF3
+7955        EBF4
+7956        EBF5
+7957        EBF6
+7958        EBF7
+7959        EBF8
+795A        EBF9
+795B        EBFA
+795C        EBFB
+795D        EBFC
+795E        EBFD
+795F        EBFE
+7960        EBFF
+7961        EC00
+7962        EC01
+7963        EC02
+7964        EC03
+7965        EC04
+7966        EC05
+7967        EC06
+7968        EC07
+7969        EC08
+796A        EC09
+796B        EC0A
+796C        EC0B
+796D        EC0C
+796E        EC0D
+796F        EC0E
+7970        EC0F
+7971        EC10
+7972        EC11
+7973        EC12
+7974        EC13
+7975        EC14
+7976        EC15
+7977        EC16
+7978        EC17
+7979        EC18
+797A        EC19
+797B        EC1A
+797C        EC1B
+797D        EC1C
+797E        EC1D
+797F        EC1E
+7980        EC1F
+7981        EC20
+7982        EC21
+7983        EC22
+7984        EC23
+7985        EC24
+7986        EC25
+7987        EC26
+7988        EC27
+7989        EC28
+798A        EC29
+798B        EC2A
+798C        EC2B
+798D        EC2C
+798E        EC2D
+798F        EC2E
+7990        EC2F
+7991        EC30
+7992        EC31
+7993        EC32
+7994        EC33
+7995        EC34
+7996        EC35
+7997        EC36
+7998        EC37
+7999        EC38
+799A        EC39
+799B        EC3A
+799C        EC3B
+799D        EC3C
+799E        EC3D
+799F        EC3E
+79A0        EC3F
+79A1        EC40
+79A2        EC41
+79A3        EC42
+79A4        EC43
+79A5        EC44
+79A6        EC45
+79A7        EC46
+79A8        EC47
+79A9        EC48
+79AA        EC49
+79AB        EC4A
+79AC        EC4B
+79AD        EC4C
+79AE        EC4D
+79AF        EC4E
+79B0        EC4F
+79B1        EC50
+79B2        EC51
+79B3        EC52
+79B4        EC53
+79B5        EC54
+79B6        EC55
+79B7        EC56
+79B8        EC57
+79B9        EC58
+79BA        EC59
+79BB        EC5A
+79BC        EC5B
+79BD        EC5C
+79BE        EC5D
+79BF        EC5E
+79C0        EC5F
+79C1        EC60
+79C2        EC61
+79C3        EC62
+79C4        EC63
+79C5        EC64
+79C6        EC65
+79C7        EC66
+79C8        EC67
+79C9        EC68
+79CA        EC69
+79CB        EC6A
+79CC        EC6B
+79CD        EC6C
+79CE        EC6D
+79CF        EC6E
+79D0        EC6F
+79D1        EC70
+79D2        EC71
+79D3        EC72
+79D4        EC73
+79D5        EC74
+79D6        EC75
+79D7        EC76
+79D8        EC77
+79D9        EC78
+79DA        EC79
+79DB        EC7A
+79DC        EC7B
+79DD        EC7C
+79DE        EC7D
+79DF        EC7E
+79E0        EC7F
+79E1        EC80
+79E2        EC81
+79E3        EC82
+79E4        EC83
+79E5        EC84
+79E6        EC85
+79E7        EC86
+79E8        EC87
+79E9        EC88
+79EA        EC89
+79EB        EC8A
+79EC        EC8B
+79ED        EC8C
+79EE        EC8D
+79EF        EC8E
+79F0        EC8F
+79F1        EC90
+79F2        EC91
+79F3        EC92
+79F4        EC93
+79F5        EC94
+79F6        EC95
+79F7        EC96
+79F8        EC97
+79F9        EC98
+79FA        EC99
+79FB        EC9A
+79FC        EC9B
+79FD        EC9C
+79FE        EC9D
+7A41        EC9E
+7A42        EC9F
+7A43        ECA0
+7A44        ECA1
+7A45        ECA2
+7A46        ECA3
+7A47        ECA4
+7A48        ECA5
+7A49        ECA6
+7A4A        ECA7
+7A4B        ECA8
+7A4C        ECA9
+7A4D        ECAA
+7A4E        ECAB
+7A4F        ECAC
+7A50        ECAD
+7A51        ECAE
+7A52        ECAF
+7A53        ECB0
+7A54        ECB1
+7A55        ECB2
+7A56        ECB3
+7A57        ECB4
+7A58        ECB5
+7A59        ECB6
+7A5A        ECB7
+7A5B        ECB8
+7A5C        ECB9
+7A5D        ECBA
+7A5E        ECBB
+7A5F        ECBC
+7A60        ECBD
+7A61        ECBE
+7A62        ECBF
+7A63        ECC0
+7A64        ECC1
+7A65        ECC2
+7A66        ECC3
+7A67        ECC4
+7A68        ECC5
+7A69        ECC6
+7A6A        ECC7
+7A6B        ECC8
+7A6C        ECC9
+7A6D        ECCA
+7A6E        ECCB
+7A6F        ECCC
+7A70        ECCD
+7A71        ECCE
+7A72        ECCF
+7A73        ECD0
+7A74        ECD1
+7A75        ECD2
+7A76        ECD3
+7A77        ECD4
+7A78        ECD5
+7A79        ECD6
+7A7A        ECD7
+7A7B        ECD8
+7A7C        ECD9
+7A7D        ECDA
+7A7E        ECDB
+7A7F        ECDC
+7A80        ECDD
+7A81        ECDE
+7A82        ECDF
+7A83        ECE0
+7A84        ECE1
+7A85        ECE2
+7A86        ECE3
+7A87        ECE4
+7A88        ECE5
+7A89        ECE6
+7A8A        ECE7
+7A8B        ECE8
+7A8C        ECE9
+7A8D        ECEA
+7A8E        ECEB
+7A8F        ECEC
+7A90        ECED
+7A91        ECEE
+7A92        ECEF
+7A93        ECF0
+7A94        ECF1
+7A95        ECF2
+7A96        ECF3
+7A97        ECF4
+7A98        ECF5
+7A99        ECF6
+7A9A        ECF7
+7A9B        ECF8
+7A9C        ECF9
+7A9D        ECFA
+7A9E        ECFB
+7A9F        ECFC
+7AA0        ECFD
+7AA1        ECFE
+7AA2        ECFF
+7AA3        ED00
+7AA4        ED01
+7AA5        ED02
+7AA6        ED03
+7AA7        ED04
+7AA8        ED05
+7AA9        ED06
+7AAA        ED07
+7AAB        ED08
+7AAC        ED09
+7AAD        ED0A
+7AAE        ED0B
+7AAF        ED0C
+7AB0        ED0D
+7AB1        ED0E
+7AB2        ED0F
+7AB3        ED10
+7AB4        ED11
+7AB5        ED12
+7AB6        ED13
+7AB7        ED14
+7AB8        ED15
+7AB9        ED16
+7ABA        ED17
+7ABB        ED18
+7ABC        ED19
+7ABD        ED1A
+7ABE        ED1B
+7ABF        ED1C
+7AC0        ED1D
+7AC1        ED1E
+7AC2        ED1F
+7AC3        ED20
+7AC4        ED21
+7AC5        ED22
+7AC6        ED23
+7AC7        ED24
+7AC8        ED25
+7AC9        ED26
+7ACA        ED27
+7ACB        ED28
+7ACC        ED29
+7ACD        ED2A
+7ACE        ED2B
+7ACF        ED2C
+7AD0        ED2D
+7AD1        ED2E
+7AD2        ED2F
+7AD3        ED30
+7AD4        ED31
+7AD5        ED32
+7AD6        ED33
+7AD7        ED34
+7AD8        ED35
+7AD9        ED36
+7ADA        ED37
+7ADB        ED38
+7ADC        ED39
+7ADD        ED3A
+7ADE        ED3B
+7ADF        ED3C
+7AE0        ED3D
+7AE1        ED3E
+7AE2        ED3F
+7AE3        ED40
+7AE4        ED41
+7AE5        ED42
+7AE6        ED43
+7AE7        ED44
+7AE8        ED45
+7AE9        ED46
+7AEA        ED47
+7AEB        ED48
+7AEC        ED49
+7AED        ED4A
+7AEE        ED4B
+7AEF        ED4C
+7AF0        ED4D
+7AF1        ED4E
+7AF2        ED4F
+7AF3        ED50
+7AF4        ED51
+7AF5        ED52
+7AF6        ED53
+7AF7        ED54
+7AF8        ED55
+7AF9        ED56
+7AFA        ED57
+7AFB        ED58
+7AFC        ED59
+7AFD        ED5A
+7AFE        ED5B
+7B41        ED5C
+7B42        ED5D
+7B43        ED5E
+7B44        ED5F
+7B45        ED60
+7B46        ED61
+7B47        ED62
+7B48        ED63
+7B49        ED64
+7B4A        ED65
+7B4B        ED66
+7B4C        ED67
+7B4D        ED68
+7B4E        ED69
+7B4F        ED6A
+7B50        ED6B
+7B51        ED6C
+7B52        ED6D
+7B53        ED6E
+7B54        ED6F
+7B55        ED70
+7B56        ED71
+7B57        ED72
+7B58        ED73
+7B59        ED74
+7B5A        ED75
+7B5B        ED76
+7B5C        ED77
+7B5D        ED78
+7B5E        ED79
+7B5F        ED7A
+7B60        ED7B
+7B61        ED7C
+7B62        ED7D
+7B63        ED7E
+7B64        ED7F
+7B65        ED80
+7B66        ED81
+7B67        ED82
+7B68        ED83
+7B69        ED84
+7B6A        ED85
+7B6B        ED86
+7B6C        ED87
+7B6D        ED88
+7B6E        ED89
+7B6F        ED8A
+7B70        ED8B
+7B71        ED8C
+7B72        ED8D
+7B73        ED8E
+7B74        ED8F
+7B75        ED90
+7B76        ED91
+7B77        ED92
+7B78        ED93
+7B79        ED94
+7B7A        ED95
+7B7B        ED96
+7B7C        ED97
+7B7D        ED98
+7B7E        ED99
+7B7F        ED9A
+7B80        ED9B
+7B81        ED9C
+7B82        ED9D
+7B83        ED9E
+7B84        ED9F
+7B85        EDA0
+7B86        EDA1
+7B87        EDA2
+7B88        EDA3
+7B89        EDA4
+7B8A        EDA5
+7B8B        EDA6
+7B8C        EDA7
+7B8D        EDA8
+7B8E        EDA9
+7B8F        EDAA
+7B90        EDAB
+7B91        EDAC
+7B92        EDAD
+7B93        EDAE
+7B94        EDAF
+7B95        EDB0
+7B96        EDB1
+7B97        EDB2
+7B98        EDB3
+7B99        EDB4
+7B9A        EDB5
+7B9B        EDB6
+7B9C        EDB7
+7B9D        EDB8
+7B9E        EDB9
+7B9F        EDBA
+7BA0        EDBB
+7BA1        EDBC
+7BA2        EDBD
+7BA3        EDBE
+7BA4        EDBF
+7BA5        EDC0
+7BA6        EDC1
+7BA7        EDC2
+7BA8        EDC3
+7BA9        EDC4
+7BAA        EDC5
+7BAB        EDC6
+7BAC        EDC7
+7BAD        EDC8
+7BAE        EDC9
+7BAF        EDCA
+7BB0        EDCB
+7BB1        EDCC
+7BB2        EDCD
+7BB3        EDCE
+7BB4        EDCF
+7BB5        EDD0
+7BB6        EDD1
+7BB7        EDD2
+7BB8        EDD3
+7BB9        EDD4
+7BBA        EDD5
+7BBB        EDD6
+7BBC        EDD7
+7BBD        EDD8
+7BBE        EDD9
+7BBF        EDDA
+7BC0        EDDB
+7BC1        EDDC
+7BC2        EDDD
+7BC3        EDDE
+7BC4        EDDF
+7BC5        EDE0
+7BC6        EDE1
+7BC7        EDE2
+7BC8        EDE3
+7BC9        EDE4
+7BCA        EDE5
+7BCB        EDE6
+7BCC        EDE7
+7BCD        EDE8
+7BCE        EDE9
+7BCF        EDEA
+7BD0        EDEB
+7BD1        EDEC
+7BD2        EDED
+7BD3        EDEE
+7BD4        EDEF
+7BD5        EDF0
+7BD6        EDF1
+7BD7        EDF2
+7BD8        EDF3
+7BD9        EDF4
+7BDA        EDF5
+7BDB        EDF6
+7BDC        EDF7
+7BDD        EDF8
+7BDE        EDF9
+7BDF        EDFA
+7BE0        EDFB
+7BE1        EDFC
+7BE2        EDFD
+7BE3        EDFE
+7BE4        EDFF
+7BE5        EE00
+7BE6        EE01
+7BE7        EE02
+7BE8        EE03
+7BE9        EE04
+7BEA        EE05
+7BEB        EE06
+7BEC        EE07
+7BED        EE08
+7BEE        EE09
+7BEF        EE0A
+7BF0        EE0B
+7BF1        EE0C
+7BF2        EE0D
+7BF3        EE0E
+7BF4        EE0F
+7BF5        EE10
+7BF6        EE11
+7BF7        EE12
+7BF8        EE13
+7BF9        EE14
+7BFA        EE15
+7BFB        EE16
+7BFC        EE17
+7BFD        EE18
+7BFE        EE19
+7C41        EE1A
+7C42        EE1B
+7C43        EE1C
+7C44        EE1D
+7C45        EE1E
+7C46        EE1F
+7C47        EE20
+7C48        EE21
+7C49        EE22
+7C4A        EE23
+7C4B        EE24
+7C4C        EE25
+7C4D        EE26
+7C4E        EE27
+7C4F        EE28
+7C50        EE29
+7C51        EE2A
+7C52        EE2B
+7C53        EE2C
+7C54        EE2D
+7C55        EE2E
+7C56        EE2F
+7C57        EE30
+7C58        EE31
+7C59        EE32
+7C5A        EE33
+7C5B        EE34
+7C5C        EE35
+7C5D        EE36
+7C5E        EE37
+7C5F        EE38
+7C60        EE39
+7C61        EE3A
+7C62        EE3B
+7C63        EE3C
+7C64        EE3D
+7C65        EE3E
+7C66        EE3F
+7C67        EE40
+7C68        EE41
+7C69        EE42
+7C6A        EE43
+7C6B        EE44
+7C6C        EE45
+7C6D        EE46
+7C6E        EE47
+7C6F        EE48
+7C70        EE49
+7C71        EE4A
+7C72        EE4B
+7C73        EE4C
+7C74        EE4D
+7C75        EE4E
+7C76        EE4F
+7C77        EE50
+7C78        EE51
+7C79        EE52
+7C7A        EE53
+7C7B        EE54
+7C7C        EE55
+7C7D        EE56
+7C7E        EE57
+7C7F        EE58
+7C80        EE59
+7C81        EE5A
+7C82        EE5B
+7C83        EE5C
+7C84        EE5D
+7C85        EE5E
+7C86        EE5F
+7C87        EE60
+7C88        EE61
+7C89        EE62
+7C8A        EE63
+7C8B        EE64
+7C8C        EE65
+7C8D        EE66
+7C8E        EE67
+7C8F        EE68
+7C90        EE69
+7C91        EE6A
+7C92        EE6B
+7C93        EE6C
+7C94        EE6D
+7C95        EE6E
+7C96        EE6F
+7C97        EE70
+7C98        EE71
+7C99        EE72
+7C9A        EE73
+7C9B        EE74
+7C9C        EE75
+7C9D        EE76
+7C9E        EE77
+7C9F        EE78
+7CA0        EE79
+7CA1        EE7A
+7CA2        EE7B
+7CA3        EE7C
+7CA4        EE7D
+7CA5        EE7E
+7CA6        EE7F
+7CA7        EE80
+7CA8        EE81
+7CA9        EE82
+7CAA        EE83
+7CAB        EE84
+7CAC        EE85
+7CAD        EE86
+7CAE        EE87
+7CAF        EE88
+7CB0        EE89
+7CB1        EE8A
+7CB2        EE8B
+7CB3        EE8C
+7CB4        EE8D
+7CB5        EE8E
+7CB6        EE8F
+7CB7        EE90
+7CB8        EE91
+7CB9        EE92
+7CBA        EE93
+7CBB        EE94
+7CBC        EE95
+7CBD        EE96
+7CBE        EE97
+7CBF        EE98
+7CC0        EE99
+7CC1        EE9A
+7CC2        EE9B
+7CC3        EE9C
+7CC4        EE9D
+7CC5        EE9E
+7CC6        EE9F
+7CC7        EEA0
+7CC8        EEA1
+7CC9        EEA2
+7CCA        EEA3
+7CCB        EEA4
+7CCC        EEA5
+7CCD        EEA6
+7CCE        EEA7
+7CCF        EEA8
+7CD0        EEA9
+7CD1        EEAA
+7CD2        EEAB
+7CD3        EEAC
+7CD4        EEAD
+7CD5        EEAE
+7CD6        EEAF
+7CD7        EEB0
+7CD8        EEB1
+7CD9        EEB2
+7CDA        EEB3
+7CDB        EEB4
+7CDC        EEB5
+7CDD        EEB6
+7CDE        EEB7
+7CDF        EEB8
+7CE0        EEB9
+7CE1        EEBA
+7CE2        EEBB
+7CE3        EEBC
+7CE4        EEBD
+7CE5        EEBE
+7CE6        EEBF
+7CE7        EEC0
+7CE8        EEC1
+7CE9        EEC2
+7CEA        EEC3
+7CEB        EEC4
+7CEC        EEC5
+7CED        EEC6
+7CEE        EEC7
+7CEF        EEC8
+7CF0        EEC9
+7CF1        EECA
+7CF2        EECB
+7CF3        EECC
+7CF4        EECD
+7CF5        EECE
+7CF6        EECF
+7CF7        EED0
+7CF8        EED1
+7CF9        EED2
+7CFA        EED3
+7CFB        EED4
+7CFC        EED5
+7CFD        EED6
+7CFE        EED7
+7D41        EED8
+7D42        EED9
+7D43        EEDA
+7D44        EEDB
+7D45        EEDC
+7D46        EEDD
+7D47        EEDE
+7D48        EEDF
+7D49        EEE0
+7D4A        EEE1
+7D4B        EEE2
+7D4C        EEE3
+7D4D        EEE4
+7D4E        EEE5
+7D4F        EEE6
+7D50        EEE7
+7D51        EEE8
+7D52        EEE9
+7D53        EEEA
+7D54        EEEB
+7D55        EEEC
+7D56        EEED
+7D57        EEEE
+7D58        EEEF
+7D59        EEF0
+7D5A        EEF1
+7D5B        EEF2
+7D5C        EEF3
+7D5D        EEF4
+7D5E        EEF5
+7D5F        EEF6
+7D60        EEF7
+7D61        EEF8
+7D62        EEF9
+7D63        EEFA
+7D64        EEFB
+7D65        EEFC
+7D66        EEFD
+7D67        EEFE
+7D68        EEFF
+7D69        EF00
+7D6A        EF01
+7D6B        EF02
+7D6C        EF03
+7D6D        EF04
+7D6E        EF05
+7D6F        EF06
+7D70        EF07
+7D71        EF08
+7D72        EF09
+7D73        EF0A
+7D74        EF0B
+7D75        EF0C
+7D76        EF0D
+7D77        EF0E
+7D78        EF0F
+7D79        EF10
+7D7A        EF11
+7D7B        EF12
+7D7C        EF13
+7D7D        EF14
+7D7E        EF15
+7D7F        EF16
+7D80        EF17
+7D81        EF18
+7D82        EF19
+7D83        EF1A
+7D84        EF1B
+7D85        EF1C
+7D86        EF1D
+7D87        EF1E
+7D88        EF1F
+7D89        EF20
+7D8A        EF21
+7D8B        EF22
+7D8C        EF23
+7D8D        EF24
+7D8E        EF25
+7D8F        EF26
+7D90        EF27
+7D91        EF28
+7D92        EF29
+7D93        EF2A
+7D94        EF2B
+7D95        EF2C
+7D96        EF2D
+7D97        EF2E
+7D98        EF2F
+7D99        EF30
+7D9A        EF31
+7D9B        EF32
+7D9C        EF33
+7D9D        EF34
+7D9E        EF35
+7D9F        EF36
+7DA0        EF37
+7DA1        EF38
+7DA2        EF39
+7DA3        EF3A
+7DA4        EF3B
+7DA5        EF3C
+7DA6        EF3D
+7DA7        EF3E
+7DA8        EF3F
+7DA9        EF40
+7DAA        EF41
+7DAB        EF42
+7DAC        EF43
+7DAD        EF44
+7DAE        EF45
+7DAF        EF46
+7DB0        EF47
+7DB1        EF48
+7DB2        EF49
+7DB3        EF4A
+7DB4        EF4B
+7DB5        EF4C
+7DB6        EF4D
+7DB7        EF4E
+7DB8        EF4F
+7DB9        EF50
+7DBA        EF51
+7DBB        EF52
+7DBC        EF53
+7DBD        EF54
+7DBE        EF55
+7DBF        EF56
+7DC0        EF57
+7DC1        EF58
+7DC2        EF59
+7DC3        EF5A
+7DC4        EF5B
+7DC5        EF5C
+7DC6        EF5D
+7DC7        EF5E
+7DC8        EF5F
+7DC9        EF60
+7DCA        EF61
+7DCB        EF62
+7DCC        EF63
+7DCD        EF64
+7DCE        EF65
+7DCF        EF66
+7DD0        EF67
+7DD1        EF68
+7DD2        EF69
+7DD3        EF6A
+7DD4        EF6B
+7DD5        EF6C
+7DD6        EF6D
+7DD7        EF6E
+7DD8        EF6F
+7DD9        EF70
+7DDA        EF71
+7DDB        EF72
+7DDC        EF73
+7DDD        EF74
+7DDE        EF75
+7DDF        EF76
+7DE0        EF77
+7DE1        EF78
+7DE2        EF79
+7DE3        EF7A
+7DE4        EF7B
+7DE5        EF7C
+7DE6        EF7D
+7DE7        EF7E
+7DE8        EF7F
+7DE9        EF80
+7DEA        EF81
+7DEB        EF82
+7DEC        EF83
+7DED        EF84
+7DEE        EF85
+7DEF        EF86
+7DF0        EF87
+7DF1        EF88
+7DF2        EF89
+7DF3        EF8A
+7DF4        EF8B
+7DF5        EF8C
+7DF6        EF8D
+7DF7        EF8E
+7DF8        EF8F
+7DF9        EF90
+7DFA        EF91
+7DFB        EF92
+7DFC        EF93
+7DFD        EF94
+7DFE        EF95
+7E41        EF96
+7E42        EF97
+7E43        EF98
+7E44        EF99
+7E45        EF9A
+7E46        EF9B
+7E47        EF9C
+7E48        EF9D
+7E49        EF9E
+7E4A        EF9F
+7E4B        EFA0
+7E4C        EFA1
+7E4D        EFA2
+7E4E        EFA3
+7E4F        EFA4
+7E50        EFA5
+7E51        EFA6
+7E52        EFA7
+7E53        EFA8
+7E54        EFA9
+7E55        EFAA
+7E56        EFAB
+7E57        EFAC
+7E58        EFAD
+7E59        EFAE
+7E5A        EFAF
+7E5B        EFB0
+7E5C        EFB1
+7E5D        EFB2
+7E5E        EFB3
+7E5F        EFB4
+7E60        EFB5
+7E61        EFB6
+7E62        EFB7
+7E63        EFB8
+7E64        EFB9
+7E65        EFBA
+7E66        EFBB
+7E67        EFBC
+7E68        EFBD
+7E69        EFBE
+7E6A        EFBF
+7E6B        EFC0
+7E6C        EFC1
+7E6D        EFC2
+7E6E        EFC3
+7E6F        EFC4
+7E70        EFC5
+7E71        EFC6
+7E72        EFC7
+7E73        EFC8
+7E74        EFC9
+7E75        EFCA
+7E76        EFCB
+7E77        EFCC
+7E78        EFCD
+7E79        EFCE
+7E7A        EFCF
+7E7B        EFD0
+7E7C        EFD1
+7E7D        EFD2
+7E7E        EFD3
+7E7F        EFD4
+7E80        EFD5
+7E81        EFD6
+7E82        EFD7
+7E83        EFD8
+7E84        EFD9
+7E85        EFDA
+7E86        EFDB
+7E87        EFDC
+7E88        EFDD
+7E89        EFDE
+7E8A        EFDF
+7E8B        EFE0
+7E8C        EFE1
+7E8D        EFE2
+7E8E        EFE3
+7E8F        EFE4
+7E90        EFE5
+7E91        EFE6
+7E92        EFE7
+7E93        EFE8
+7E94        EFE9
+7E95        EFEA
+7E96        EFEB
+7E97        EFEC
+7E98        EFED
+7E99        EFEE
+7E9A        EFEF
+7E9B        EFF0
+7E9C        EFF1
+7E9D        EFF2
+7E9E        EFF3
+7E9F        EFF4
+7EA0        EFF5
+7EA1        EFF6
+7EA2        EFF7
+7EA3        EFF8
+7EA4        EFF9
+7EA5        EFFA
+7EA6        EFFB
+7EA7        EFFC
+7EA8        EFFD
+7EA9        EFFE
+7EAA        EFFF
+7EAB        F000
+7EAC        F001
+7EAD        F002
+7EAE        F003
+7EAF        F004
+7EB0        F005
+7EB1        F006
+7EB2        F007
+7EB3        F008
+7EB4        F009
+7EB5        F00A
+7EB6        F00B
+7EB7        F00C
+7EB8        F00D
+7EB9        F00E
+7EBA        F00F
+7EBB        F010
+7EBC        F011
+7EBD        F012
+7EBE        F013
+7EBF        F014
+7EC0        F015
+7EC1        F016
+7EC2        F017
+7EC3        F018
+7EC4        F019
+7EC5        F01A
+7EC6        F01B
+7EC7        F01C
+7EC8        F01D
+7EC9        F01E
+7ECA        F01F
+7ECB        F020
+7ECC        F021
+7ECD        F022
+7ECE        F023
+7ECF        F024
+7ED0        F025
+7ED1        F026
+7ED2        F027
+7ED3        F028
+7ED4        F029
+7ED5        F02A
+7ED6        F02B
+7ED7        F02C
+7ED8        F02D
+7ED9        F02E
+7EDA        F02F
+7EDB        F030
+7EDC        F031
+7EDD        F032
+7EDE        F033
+7EDF        F034
+7EE0        F035
+7EE1        F036
+7EE2        F037
+7EE3        F038
+7EE4        F039
+7EE5        F03A
+7EE6        F03B
+7EE7        F03C
+7EE8        F03D
+7EE9        F03E
+7EEA        F03F
+7EEB        F040
+7EEC        F041
+7EED        F042
+7EEE        F043
+7EEF        F044
+7EF0        F045
+7EF1        F046
+7EF2        F047
+7EF3        F048
+7EF4        F049
+7EF5        F04A
+7EF6        F04B
+7EF7        F04C
+7EF8        F04D
+7EF9        F04E
+7EFA        F04F
+7EFB        F050
+7EFC        F051
+7EFD        F052
+7EFE        F053
+7F41        F054
+7F42        F055
+7F43        F056
+7F44        F057
+7F45        F058
+7F46        F059
+7F47        F05A
+7F48        F05B
+7F49        F05C
+7F4A        F05D
+7F4B        F05E
+7F4C        F05F
+7F4D        F060
+7F4E        F061
+7F4F        F062
+7F50        F063
+7F51        F064
+7F52        F065
+7F53        F066
+7F54        F067
+7F55        F068
+7F56        F069
+7F57        F06A
+7F58        F06B
+7F59        F06C
+7F5A        F06D
+7F5B        F06E
+7F5C        F06F
+7F5D        F070
+7F5E        F071
+7F5F        F072
+7F60        F073
+7F61        F074
+7F62        F075
+7F63        F076
+7F64        F077
+7F65        F078
+7F66        F079
+7F67        F07A
+7F68        F07B
+7F69        F07C
+7F6A        F07D
+7F6B        F07E
+7F6C        F07F
+7F6D        F080
+7F6E        F081
+7F6F        F082
+7F70        F083
+7F71        F084
+7F72        F085
+7F73        F086
+7F74        F087
+7F75        F088
+7F76        F089
+7F77        F08A
+7F78        F08B
+7F79        F08C
+7F7A        F08D
+7F7B        F08E
+7F7C        F08F
+7F7D        F090
+7F7E        F091
+7F7F        F092
+7F80        F093
+7F81        F094
+7F82        F095
+7F83        F096
+7F84        F097
+7F85        F098
+7F86        F099
+7F87        F09A
+7F88        F09B
+7F89        F09C
+7F8A        F09D
+7F8B        F09E
+7F8C        F09F
+7F8D        F0A0
+7F8E        F0A1
+7F8F        F0A2
+7F90        F0A3
+7F91        F0A4
+7F92        F0A5
+7F93        F0A6
+7F94        F0A7
+7F95        F0A8
+7F96        F0A9
+7F97        F0AA
+7F98        F0AB
+7F99        F0AC
+7F9A        F0AD
+7F9B        F0AE
+7F9C        F0AF
+7F9D        F0B0
+7F9E        F0B1
+7F9F        F0B2
+7FA0        F0B3
+7FA1        F0B4
+7FA2        F0B5
+7FA3        F0B6
+7FA4        F0B7
+7FA5        F0B8
+7FA6        F0B9
+7FA7        F0BA
+7FA8        F0BB
+7FA9        F0BC
+7FAA        F0BD
+7FAB        F0BE
+7FAC        F0BF
+7FAD        F0C0
+7FAE        F0C1
+7FAF        F0C2
+7FB0        F0C3
+7FB1        F0C4
+7FB2        F0C5
+7FB3        F0C6
+7FB4        F0C7
+7FB5        F0C8
+7FB6        F0C9
+7FB7        F0CA
+7FB8        F0CB
+7FB9        F0CC
+7FBA        F0CD
+7FBB        F0CE
+7FBC        F0CF
+7FBD        F0D0
+7FBE        F0D1
+7FBF        F0D2
+7FC0        F0D3
+7FC1        F0D4
+7FC2        F0D5
+7FC3        F0D6
+7FC4        F0D7
+7FC5        F0D8
+7FC6        F0D9
+7FC7        F0DA
+7FC8        F0DB
+7FC9        F0DC
+7FCA        F0DD
+7FCB        F0DE
+7FCC        F0DF
+7FCD        F0E0
+7FCE        F0E1
+7FCF        F0E2
+7FD0        F0E3
+7FD1        F0E4
+7FD2        F0E5
+7FD3        F0E6
+7FD4        F0E7
+7FD5        F0E8
+7FD6        F0E9
+7FD7        F0EA
+7FD8        F0EB
+7FD9        F0EC
+7FDA        F0ED
+7FDB        F0EE
+7FDC        F0EF
+7FDD        F0F0
+7FDE        F0F1
+7FDF        F0F2
+7FE0        F0F3
+7FE1        F0F4
+7FE2        F0F5
+7FE3        F0F6
+7FE4        F0F7
+7FE5        F0F8
+7FE6        F0F9
+7FE7        F0FA
+7FE8        F0FB
+7FE9        F0FC
+7FEA        F0FD
+7FEB        F0FE
+7FEC        F0FF
+7FED        F100
+7FEE        F101
+7FEF        F102
+7FF0        F103
+7FF1        F104
+7FF2        F105
+7FF3        F106
+7FF4        F107
+7FF5        F108
+7FF6        F109
+7FF7        F10A
+7FF8        F10B
+7FF9        F10C
+7FFA        F10D
+7FFB        F10E
+7FFC        F10F
+7FFD        F110
+7FFE        F111
diff --git a/make/tools/CharsetMapping/dbcs b/make/tools/CharsetMapping/dbcs
index abc18f44c25a0579fa20b4fe0155366a53ac402e..a22e886977f869f641df952a4b2b0a31367d9619 100644
--- a/make/tools/CharsetMapping/dbcs
+++ b/make/tools/CharsetMapping/dbcs
@@ -15,6 +15,7 @@ PCK	  x-PCK      PCK      basic     sun.nio.cs.ext    true    0x81   0xfc   0x40
 IBM1364	  x-IBM1364  Cp1364   ebcdic	sun.nio.cs.ext	  false   0x40   0xde   0x40  0xfe
 IBM1381	  x-IBM1381  Cp1381   basic     sun.nio.cs.ext    true    0x8c   0xf7   0xa1  0xfe
 IBM1383	  x-IBM1383  Cp1383   euc_sim   sun.nio.cs.ext    true    0xa1   0xfe   0xa1  0xfe
+IBM300	  x-IBM300   Cp300    dbcsonly  sun.nio.cs.ext    false   0x40   0x7f   0x40  0xfe
 IBM930	  x-IBM930   Cp930    ebcdic    sun.nio.cs.ext    false   0x40   0x7f   0x40  0xfe
 IBM933	  x-IBM933   Cp933    ebcdic    sun.nio.cs.ext    false   0x40   0xdd   0x40  0xfe
 IBM935	  x-IBM935   Cp935    ebcdic    sun.nio.cs.ext    false   0x40   0x7f   0x40  0xfe
diff --git a/make/tools/CharsetMapping/extsbcs b/make/tools/CharsetMapping/extsbcs
index 61d089a6624b2c272e8b3a4002fd995f90affee7..ed82dbe82d93f59dedafdaaa5193fbff2d31949f 100644
--- a/make/tools/CharsetMapping/extsbcs
+++ b/make/tools/CharsetMapping/extsbcs
@@ -28,6 +28,7 @@ IBM278		IBM278		Cp278		false		sun.nio.cs.ext
 IBM280		IBM280		Cp280		false		sun.nio.cs.ext
 IBM284		IBM284		Cp284		false		sun.nio.cs.ext
 IBM285		IBM285		Cp285		false		sun.nio.cs.ext
+IBM290		IBM290		Cp290		false		sun.nio.cs.ext
 IBM297		IBM297		Cp297		false		sun.nio.cs.ext
 IBM420		IBM420		Cp420		false		sun.nio.cs.ext
 IBM424		IBM424		Cp424		false		sun.nio.cs.ext
diff --git a/make/tools/src/build/tools/charsetmapping/DBCS.java b/make/tools/src/build/tools/charsetmapping/DBCS.java
index 4b297d70e92e7b8663fa35858657eed8780d1b87..ecd3676b10080e9035983d094595536a8970b1d0 100644
--- a/make/tools/src/build/tools/charsetmapping/DBCS.java
+++ b/make/tools/src/build/tools/charsetmapping/DBCS.java
@@ -196,11 +196,14 @@ public class DBCS {
 
         // (5) c2b replacement, only used for JIs0208/0212, which
         // are two pure db charsets so default '3f' does not work
+        // TBD: move this into configuration file
         String c2bRepl = "";
         if (clzName.startsWith("JIS_X_0208")) {
             c2bRepl = "new byte[]{ (byte)0x21, (byte)0x29 },";
         } else if (clzName.startsWith("JIS_X_0212")) {
             c2bRepl = "new byte[]{ (byte)0x22, (byte)0x44 },";
+        } else if (clzName.startsWith("IBM300")) {
+            c2bRepl = "new byte[]{ (byte)0x42, (byte)0x6f },";
         }
 
         while (s.hasNextLine()) {
diff --git a/make/tools/src/build/tools/cldrconverter/CLDRConverter.java b/make/tools/src/build/tools/cldrconverter/CLDRConverter.java
index 9cbf02a9c3b112fd69c35a107f902ad213e2752e..33ea34ffa2aea40e72de9dfc8a76dbce8c909a81 100644
--- a/make/tools/src/build/tools/cldrconverter/CLDRConverter.java
+++ b/make/tools/src/build/tools/cldrconverter/CLDRConverter.java
@@ -605,7 +605,23 @@ public class CLDRConverter {
                 copyIfPresent(map, key, formatData);
             }
         }
-
+        // Workaround for islamic-umalqura name support (JDK-8015986)
+        switch (id) {
+        case "ar":
+            map.put(CLDRConverter.CALENDAR_NAME_PREFIX
+                    + CalendarType.ISLAMIC_UMALQURA.lname(),
+                    // derived from CLDR 24 draft
+                    "\u0627\u0644\u062a\u0642\u0648\u064a\u0645 "
+                    +"\u0627\u0644\u0625\u0633\u0644\u0627\u0645\u064a "
+                    +"[\u0623\u0645 \u0627\u0644\u0642\u0631\u0649]");
+            break;
+        case "en":
+            map.put(CLDRConverter.CALENDAR_NAME_PREFIX
+                    + CalendarType.ISLAMIC_UMALQURA.lname(),
+                    // derived from CLDR 24 draft
+                    "Islamic Calendar [Umm al-Qura]");
+            break;
+        }
         // Copy available calendar names
         for (String key : map.keySet()) {
             if (key.startsWith(CLDRConverter.CALENDAR_NAME_PREFIX)) {
diff --git a/make/tools/src/build/tools/cldrconverter/CalendarType.java b/make/tools/src/build/tools/cldrconverter/CalendarType.java
index b530080ae71cb6c85d8be956e11d9e5501a50989..561907e63819fb053247b90649085f84d0ecc499 100644
--- a/make/tools/src/build/tools/cldrconverter/CalendarType.java
+++ b/make/tools/src/build/tools/cldrconverter/CalendarType.java
@@ -31,7 +31,8 @@ import java.util.Locale;
  * Constants for the Calendars supported by JRE.
  */
 enum CalendarType {
-    GREGORIAN("gregory"), BUDDHIST, JAPANESE, ROC, ISLAMIC, ISLAMIC_CIVIL("islamicc");
+    GREGORIAN("gregory"), BUDDHIST, JAPANESE, ROC,
+    ISLAMIC, ISLAMIC_CIVIL("islamicc"), ISLAMIC_UMALQURA("islamic-umalqura");
 
     private static final int[][] ERA_DATA = {
         // start index, array length
@@ -41,6 +42,7 @@ enum CalendarType {
         {0,   2},   // roc (Minguo)
         {0,   1},   // islamic (Hijrah)
         {0,   1},   // islamicc (same as islamic)
+        {0,   1},   // islamic-umalqura
     };
 
     private final String lname; // lowercase name
@@ -52,8 +54,8 @@ enum CalendarType {
 
     private CalendarType(String uname) {
         String lname = name().toLowerCase(Locale.ROOT);
-        if (lname.equals("islamic_civil")) {
-            lname = "islamic-civil";
+        if (lname.startsWith("islamic_")) {
+            lname = lname.replace('_', '-');
         }
         this.lname = lname;
         this.uname = (uname != null) ? uname : lname;
diff --git a/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java b/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java
index f432bd803d30cd24f3a36eb3b12e48dd44bd1d13..270c5fc4c36ae1647ad2e62607cfee8af5ccbf78 100644
--- a/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java
+++ b/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java
@@ -31,6 +31,7 @@ import java.awt.peer.MenuComponentPeer;
 import javax.swing.*;
 import javax.swing.plaf.MenuBarUI;
 
+import com.apple.laf.ScreenMenuBar;
 import sun.lwawt.macosx.CMenuBar;
 
 import com.apple.laf.AquaMenuBarUI;
@@ -72,12 +73,15 @@ class _AppMenuBarHandler {
         // scan the current frames, and see if any are foreground
         final Frame[] frames = Frame.getFrames();
         for (final Frame frame : frames) {
-            if (frame.isVisible() && !isFrameMinimized(frame)) return;
+            if (frame.isVisible() && !isFrameMinimized(frame)) {
+                return;
+            }
         }
 
         // if we have no foreground frames, then we have to "kick" the menubar
         final JFrame pingFrame = new JFrame();
         pingFrame.getRootPane().putClientProperty("Window.alpha", new Float(0.0f));
+        pingFrame.setUndecorated(true);
         pingFrame.setVisible(true);
         pingFrame.toFront();
         pingFrame.setVisible(false);
@@ -101,7 +105,6 @@ class _AppMenuBarHandler {
             // Aqua was not installed
             throw new IllegalStateException("Application.setDefaultMenuBar() only works with the Aqua Look and Feel");
         }
-/* TODO: disabled until ScreenMenuBar is working
 
         final AquaMenuBarUI aquaUI = (AquaMenuBarUI)ui;
         final ScreenMenuBar screenMenuBar = aquaUI.getScreenMenuBar();
@@ -118,8 +121,7 @@ class _AppMenuBarHandler {
         }
 
         // grab the pointer to the CMenuBar, and retain it in native
-        nativeSetDefaultMenuBar(((CMenuBar)peer).getNativeMenuBarPeer());
-*/
+        nativeSetDefaultMenuBar(((CMenuBar)peer).getModel());
     }
 
     void setAboutMenuItemVisible(final boolean present) {
diff --git a/src/macosx/classes/sun/font/CStrike.java b/src/macosx/classes/sun/font/CStrike.java
index 9635b85a1de72370d0c7d85704349ae25ea6621b..af4f8754cfbc42fb2f8df9cb306ec3c8a77caf52 100644
--- a/src/macosx/classes/sun/font/CStrike.java
+++ b/src/macosx/classes/sun/font/CStrike.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,7 +31,7 @@ import java.util.*;
 
 import sun.awt.SunHints;
 
-public class CStrike extends FontStrike {
+public final class CStrike extends FontStrike {
 
     // Creates the native strike
     private static native long createNativeStrikePtr(long nativeFontPtr,
@@ -68,10 +68,10 @@ public class CStrike extends FontStrike {
                                                          Rectangle2D.Float result,
                                                          double x, double y);
 
-    private CFont nativeFont;
+    private final CFont nativeFont;
     private AffineTransform invDevTx;
-    private GlyphInfoCache glyphInfoCache;
-    private GlyphAdvanceCache glyphAdvanceCache;
+    private final GlyphInfoCache glyphInfoCache;
+    private final GlyphAdvanceCache glyphAdvanceCache;
     private long nativeStrikePtr;
 
     CStrike(final CFont font, final FontStrikeDesc inDesc) {
@@ -84,11 +84,11 @@ public class CStrike extends FontStrike {
         // Normally the device transform should be the identity transform
         // for screen operations.  The device transform only becomes
         // interesting when we are outputting between different dpi surfaces,
-        // like when we are printing to postscript.
+        // like when we are printing to postscript or use retina.
         if (inDesc.devTx != null && !inDesc.devTx.isIdentity()) {
             try {
                 invDevTx = inDesc.devTx.createInverse();
-            } catch (NoninvertibleTransformException e) {
+            } catch (NoninvertibleTransformException ignored) {
                 // ignored, since device transforms should not be that
                 // complicated, and if they are - there is nothing we can do,
                 // so we won't worry about it.
@@ -134,15 +134,13 @@ public class CStrike extends FontStrike {
         nativeStrikePtr = 0;
     }
 
-    // the fractional metrics default on our platform is OFF
-    private boolean useFractionalMetrics() {
-        return desc.fmHint == SunHints.INTVAL_FRACTIONALMETRICS_ON;
-    }
 
+    @Override
     public int getNumGlyphs() {
         return nativeFont.getNumGlyphs();
     }
 
+    @Override
     StrikeMetrics getFontMetrics() {
         if (strikeMetrics == null) {
             StrikeMetrics metrics = getFontMetrics(getNativeStrikePtr());
@@ -155,74 +153,24 @@ public class CStrike extends FontStrike {
         return strikeMetrics;
     }
 
-    float getGlyphAdvance(int glyphCode) {
-        return getScaledAdvanceForAdvance(getCachedNativeGlyphAdvance(glyphCode));
-    }
-
-    float getCodePointAdvance(int cp) {
-        float advance = getCachedNativeGlyphAdvance(nativeFont.getMapper().charToGlyph(cp));
-
-        double glyphScaleX = desc.glyphTx.getScaleX();
-        double devScaleX = desc.devTx.getScaleX();
-
-        if (devScaleX == 0) {
-            glyphScaleX = Math.sqrt(desc.glyphTx.getDeterminant());
-            devScaleX = Math.sqrt(desc.devTx.getDeterminant());
-        }
-
-        if (devScaleX == 0) {
-            devScaleX = Double.NaN; // this an undefined graphics state
-        }
-        advance = (float) (advance * glyphScaleX / devScaleX);
-        return useFractionalMetrics() ? advance : Math.round(advance);
-    }
-
-    // calculate an advance, and round if not using fractional metrics
-    private float getScaledAdvanceForAdvance(float advance) {
-        if (invDevTx != null) {
-            advance *= invDevTx.getScaleX();
-        }
-        advance *= desc.glyphTx.getScaleX();
-        return useFractionalMetrics() ? advance : Math.round(advance);
-    }
-
-    Point2D.Float getCharMetrics(char ch) {
-        return getScaledPointForAdvance(getCachedNativeGlyphAdvance(nativeFont.getMapper().charToGlyph(ch)));
+    @Override
+    float getGlyphAdvance(final int glyphCode) {
+        return getCachedNativeGlyphAdvance(glyphCode);
     }
 
-    Point2D.Float getGlyphMetrics(int glyphCode) {
-        return getScaledPointForAdvance(getCachedNativeGlyphAdvance(glyphCode));
+    @Override
+    float getCodePointAdvance(final int cp) {
+        return getGlyphAdvance(nativeFont.getMapper().charToGlyph(cp));
     }
 
-    // calculate an advance point, and round if not using fractional metrics
-    private Point2D.Float getScaledPointForAdvance(float advance) {
-        Point2D.Float pt = new Point2D.Float(advance, 0);
-
-        if (!desc.glyphTx.isIdentity()) {
-            return scalePoint(pt);
-        }
-
-        if (!useFractionalMetrics()) {
-            pt.x = Math.round(pt.x);
-        }
-        return pt;
+    @Override
+    Point2D.Float getCharMetrics(final char ch) {
+        return getGlyphMetrics(nativeFont.getMapper().charToGlyph(ch));
     }
 
-    private Point2D.Float scalePoint(Point2D.Float pt) {
-        if (invDevTx != null) {
-            // transform the point out of the device space first
-            invDevTx.transform(pt, pt);
-        }
-        desc.glyphTx.transform(pt, pt);
-        pt.x -= desc.glyphTx.getTranslateX();
-        pt.y -= desc.glyphTx.getTranslateY();
-
-        if (!useFractionalMetrics()) {
-            pt.x = Math.round(pt.x);
-            pt.y = Math.round(pt.y);
-        }
-
-        return pt;
+    @Override
+    Point2D.Float getGlyphMetrics(final int glyphCode) {
+        return new Point2D.Float(getGlyphAdvance(glyphCode), 0.0f);
     }
 
     Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) {
@@ -414,9 +362,7 @@ public class CStrike extends FontStrike {
         private SparseBitShiftingTwoLayerArray secondLayerCache;
         private HashMap generalCache;
 
-        public GlyphInfoCache(final Font2D nativeFont,
-                              final FontStrikeDesc desc)
-        {
+        GlyphInfoCache(final Font2D nativeFont, final FontStrikeDesc desc) {
             super(nativeFont, desc);
             firstLayerCache = new long[FIRST_LAYER_SIZE];
         }
@@ -527,7 +473,7 @@ public class CStrike extends FontStrike {
             final int shift;
             final int secondLayerLength;
 
-            public SparseBitShiftingTwoLayerArray(final int size, final int shift) {
+            SparseBitShiftingTwoLayerArray(final int size, final int shift) {
                 this.shift = shift;
                 this.cache = new long[1 << shift][];
                 this.secondLayerLength = size >> shift;
@@ -559,6 +505,12 @@ public class CStrike extends FontStrike {
         private SparseBitShiftingTwoLayerArray secondLayerCache;
         private HashMap generalCache;
 
+        // Empty non private constructor was added because access to this
+        // class shouldn't be emulated by a synthetic accessor method.
+        GlyphAdvanceCache() {
+            super();
+        }
+
         public synchronized float get(final int index) {
             if (index < 0) {
                 if (-index < SECOND_LAYER_SIZE) {
@@ -609,9 +561,7 @@ public class CStrike extends FontStrike {
             final int shift;
             final int secondLayerLength;
 
-            public SparseBitShiftingTwoLayerArray(final int size,
-                                                  final int shift)
-            {
+            SparseBitShiftingTwoLayerArray(final int size, final int shift) {
                 this.shift = shift;
                 this.cache = new float[1 << shift][];
                 this.secondLayerLength = size >> shift;
diff --git a/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java b/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
index 35c6ef6d54db489d6a6131975f882365511993c7..b4f0f97823a6e2b06ee8b98cd2bff3f969b6ed0d 100644
--- a/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
+++ b/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
@@ -182,7 +182,11 @@ public class CDataTransferer extends DataTransferer {
         Long format = predefinedClipboardNameMap.get(str);
 
         if (format == null) {
-            format = new Long(registerFormatWithPasteboard(str));
+            if (java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance()) {
+                // Do not try to access native system for the unknown format
+                return -1L;
+            }
+            format = registerFormatWithPasteboard(str);
             predefinedClipboardNameMap.put(str, format);
             predefinedClipboardFormatMap.put(format, str);
         }
diff --git a/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java b/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java
index 0ac7c0cfa65b80cce6f3ef926bc8ac111dab0dba..0cffc90409f58bf40596cb65e7e4e0046d12e7da 100644
--- a/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java
+++ b/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java
@@ -43,7 +43,7 @@ public abstract class CMenuComponent implements MenuComponentPeer {
         return target;
     }
 
-    long getModel() {
+    public long getModel() {
         return modelPtr;
     }
 
diff --git a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
index 124e8f7399808a95a97d522cc473fa58ed8f1d61..8aed7e5feaabd2c851b881e4f0afa8fc89fc4773 100644
--- a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
@@ -47,7 +47,7 @@ import com.apple.laf.ClientPropertyApplicator.Property;
 import com.sun.awt.AWTUtilities;
 
 public class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
-    private native long nativeCreateNSWindow(long nsViewPtr, long styleBits, double x, double y, double w, double h);
+    private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h);
     private static native void nativeSetNSWindowStyleBits(long nsWindowPtr, int mask, int data);
     private static native void nativeSetNSWindowMenuBar(long nsWindowPtr, long menuBarPtr);
     private static native Insets nativeGetNSWindowInsets(long nsWindowPtr);
@@ -230,7 +230,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
         contentView = createContentView();
         contentView.initialize(peer, responder);
 
-        final long nativeWindowPtr = nativeCreateNSWindow(contentView.getAWTView(), styleBits, 0, 0, 0, 0);
+        final long ownerPtr = owner != null ? owner.getNSWindowPtr() : 0L;
+        final long nativeWindowPtr = nativeCreateNSWindow(contentView.getAWTView(), ownerPtr, styleBits, 0, 0, 0, 0);
         setPtr(nativeWindowPtr);
 
         if (target instanceof javax.swing.RootPaneContainer) {
diff --git a/src/macosx/native/java/util/SCDynamicStoreConfig.m b/src/macosx/native/java/util/SCDynamicStoreConfig.m
index f6ad5e2e3fa4a5ff368fd011ed8103a7a9be7b2c..86e6a67d793a5a5390ff16e8f031f4b9ff04b65f 100644
--- a/src/macosx/native/java/util/SCDynamicStoreConfig.m
+++ b/src/macosx/native/java/util/SCDynamicStoreConfig.m
@@ -103,7 +103,6 @@ NSDictionary *realmConfigsForRealms(SCDynamicStoreRef store, NSArray *realms) {
         CFTypeRef realmInfo = SCDynamicStoreCopyValue(store, (CFStringRef) [NSString stringWithFormat:@"Kerberos:%@", realm]);
 
         if (CFGetTypeID(realmInfo) != CFDictionaryGetTypeID()) {
-            NSLog(@"Unexpected CFType for realm Info: %lu", CFGetTypeID(realmInfo));
             return nil;
         }
 
@@ -140,7 +139,6 @@ JNF_COCOA_ENTER(env);
 
     SCDynamicStoreRef store = SCDynamicStoreCreate(NULL, CFSTR("java"), _SCDynamicStoreCallBack, NULL);
     if (store == NULL) {
-        NSLog(@"Unable to load SCDynamicStore to install NotificationCallback");
         return;
     }
 
@@ -171,19 +169,11 @@ JNF_COCOA_ENTER(env);
 
     SCDynamicStoreRef store = SCDynamicStoreCreate(NULL, CFSTR("java-kerberos"), NULL, NULL);
     if (store == NULL) {
-        NSLog(@"Unable to load SCDynamicStore");
-        return NULL;
-    }
-
-    // Create the store if it is NULL and set it.
-    if (store == NULL) {
-        NSLog(@"Invalid value for SCDynamicStore");
         return NULL;
     }
 
     CFTypeRef realms = SCDynamicStoreCopyValue(store, (CFStringRef) KERBEROS_DEFAULT_REALMS);
     if (realms == NULL || CFGetTypeID(realms) != CFArrayGetTypeID()) {
-        NSLog(@"Unable to load realm info from SCDynamicStore");
         if (realms) CFRelease(realms);
         CFRelease(store);
         return NULL;
@@ -192,7 +182,6 @@ JNF_COCOA_ENTER(env);
     CFTypeRef realmMappings = SCDynamicStoreCopyValue(store, (CFStringRef) KERBEROS_DEFAULT_REALM_MAPPINGS);
 
     if (realmMappings == NULL || CFGetTypeID(realmMappings) != CFArrayGetTypeID()) {
-        NSLog(@"Unable to load realm mapping info from SCDynamicStore");
         if (realmMappings) CFRelease(realmMappings);
         CFRelease(realms);
         CFRelease(store);
diff --git a/src/macosx/native/sun/awt/AWTWindow.h b/src/macosx/native/sun/awt/AWTWindow.h
index c3949a62bb11bf3428fa52fc9f1deb8255d158ea..698820ade4d10e2584368e659c044b57b9294e40 100644
--- a/src/macosx/native/sun/awt/AWTWindow.h
+++ b/src/macosx/native/sun/awt/AWTWindow.h
@@ -44,6 +44,7 @@
     jint styleBits;
     BOOL isEnabled;
     NSWindow *nsWindow;
+    AWTWindow *ownerWindow;
 }
 
 // An instance of either AWTWindow_Normal or AWTWindow_Panel
@@ -51,12 +52,15 @@
 
 @property (nonatomic, retain) JNFWeakJObjectWrapper *javaPlatformWindow;
 @property (nonatomic, retain) CMenuBar *javaMenuBar;
+@property (nonatomic, retain) AWTWindow *ownerWindow;
 @property (nonatomic) NSSize javaMinSize;
 @property (nonatomic) NSSize javaMaxSize;
 @property (nonatomic) jint styleBits;
 @property (nonatomic) BOOL isEnabled;
 
+
 - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)javaPlatformWindow
+                  ownerWindow:owner
                     styleBits:(jint)styleBits
                     frameRect:(NSRect)frameRect
                   contentView:(NSView *)contentView;
diff --git a/src/macosx/native/sun/awt/AWTWindow.m b/src/macosx/native/sun/awt/AWTWindow.m
index 2a596bcfa75bb6abe62d046a15f01efb65c0d3c4..5608b4ad98c2f08257f5989e2a86f87725f68339 100644
--- a/src/macosx/native/sun/awt/AWTWindow.m
+++ b/src/macosx/native/sun/awt/AWTWindow.m
@@ -30,6 +30,7 @@
 #import "sun_lwawt_macosx_CPlatformWindow.h"
 #import "com_apple_eawt_event_GestureHandler.h"
 #import "com_apple_eawt_FullScreenHandler.h"
+#import "ApplicationDelegate.h"
 
 #import "AWTWindow.h"
 #import "AWTView.h"
@@ -55,7 +56,7 @@ static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow");
 // doesn't provide information about "opposite" window, so we
 // have to do a bit of tracking. This variable points to a window
 // which had been the key window just before a new key window
-// was set. It would be nil if the new key window isn't an AWT 
+// was set. It would be nil if the new key window isn't an AWT
 // window or the app currently has no key window.
 static AWTWindow* lastKeyWindow = nil;
 
@@ -120,6 +121,7 @@ AWT_NS_WINDOW_IMPLEMENTATION
 @synthesize javaMaxSize;
 @synthesize styleBits;
 @synthesize isEnabled;
+@synthesize ownerWindow;
 
 - (void) updateMinMaxSize:(BOOL)resizable {
     if (resizable) {
@@ -201,6 +203,7 @@ AWT_NS_WINDOW_IMPLEMENTATION
 }
 
 - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)platformWindow
+                  ownerWindow:owner
                     styleBits:(jint)bits
                     frameRect:(NSRect)rect
                   contentView:(NSView *)view
@@ -245,6 +248,7 @@ AWT_ASSERT_APPKIT_THREAD;
     self.isEnabled = YES;
     self.javaPlatformWindow = platformWindow;
     self.styleBits = bits;
+    self.ownerWindow = owner;
     [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)];
 
     return self;
@@ -350,7 +354,7 @@ AWT_ASSERT_APPKIT_THREAD;
     [self.javaPlatformWindow setJObject:nil withEnv:env];
 
     self.nsWindow = nil;
-
+    self.ownerWindow = nil;
     [super dealloc];
 }
 
@@ -539,11 +543,27 @@ AWT_ASSERT_APPKIT_THREAD;
 AWT_ASSERT_APPKIT_THREAD;
     [AWTToolkit eventCountPlusPlus];
     AWTWindow *opposite = [AWTWindow lastKeyWindow];
-    if (!IS(self.styleBits, IS_DIALOG)) {
-        [CMenuBar activate:self.javaMenuBar modallyDisabled:NO];
-    } else if ((opposite != NULL) && IS(self.styleBits, IS_MODAL)) {
-        [CMenuBar activate:opposite->javaMenuBar modallyDisabled:YES];        
+
+    // Finds appropriate menubar in our hierarchy,
+    AWTWindow *awtWindow = self;
+    while (awtWindow.ownerWindow != nil) {
+        awtWindow = awtWindow.ownerWindow;
+    }
+
+    CMenuBar *menuBar = nil;
+    BOOL isDisabled = NO;
+    if ([awtWindow.nsWindow isVisible]){
+        menuBar = awtWindow.javaMenuBar;
+        isDisabled = !awtWindow.isEnabled;
     }
+
+    if (menuBar == nil) {
+        menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar];
+        isDisabled = NO;
+    }
+
+    [CMenuBar activate:menuBar modallyDisabled:isDisabled];
+
     [AWTWindow setLastKeyWindow:nil];
 
     [self _deliverWindowFocusEvent:YES oppositeWindow: opposite];
@@ -555,6 +575,14 @@ AWT_ASSERT_APPKIT_THREAD;
     [AWTToolkit eventCountPlusPlus];
     [self.javaMenuBar deactivate];
 
+    // In theory, this might cause flickering if the window gaining focus
+    // has its own menu. However, I couldn't reproduce it on practice, so
+    // perhaps this is a non issue.
+    CMenuBar* defaultMenu = [[ApplicationDelegate sharedDelegate] defaultMenuBar];
+    if (defaultMenu != nil) {
+        [CMenuBar activate:defaultMenu modallyDisabled:NO];
+    }
+
     // the new key window
     NSWindow *keyWindow = [NSApp keyWindow];
     AWTWindow *opposite = nil;
@@ -741,7 +769,7 @@ AWT_ASSERT_APPKIT_THREAD;
  * Signature: (JJIIII)J
  */
 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWindow
-(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h)
+(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong ownerPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h)
 {
     __block AWTWindow *window = nil;
 
@@ -750,13 +778,14 @@ JNF_COCOA_ENTER(env);
     JNFWeakJObjectWrapper *platformWindow = [JNFWeakJObjectWrapper wrapperWithJObject:obj withEnv:env];
     NSView *contentView = OBJC(contentViewPtr);
     NSRect frameRect = NSMakeRect(x, y, w, h);
-
+    AWTWindow *owner = [OBJC(ownerPtr) delegate];
     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 
         window = [[AWTWindow alloc] initWithPlatformWindow:platformWindow
-                                                  styleBits:styleBits
-                                                  frameRect:frameRect
-                                                contentView:contentView];
+                                               ownerWindow:owner
+                                                 styleBits:styleBits
+                                                 frameRect:frameRect
+                                               contentView:contentView];
         // the window is released is CPlatformWindow.nativeDispose()
 
         if (window) CFRetain(window.nsWindow);
@@ -818,11 +847,19 @@ JNF_COCOA_ENTER(env);
 
         AWTWindow *window = (AWTWindow*)[nsWindow delegate];
 
-        if ([nsWindow isKeyWindow]) [window.javaMenuBar deactivate];
+        if ([nsWindow isKeyWindow]) {
+            [window.javaMenuBar deactivate];
+        }
+
         window.javaMenuBar = menuBar;
 
+        CMenuBar* actualMenuBar = menuBar;
+        if (actualMenuBar == nil) {
+            actualMenuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar];
+        }
+
         if ([nsWindow isKeyWindow]) {
-            [CMenuBar activate:window.javaMenuBar modallyDisabled:NO];
+            [CMenuBar activate:actualMenuBar modallyDisabled:NO];
         }
     }];
 
diff --git a/src/macosx/native/sun/awt/CMenuBar.m b/src/macosx/native/sun/awt/CMenuBar.m
index b0d67f71a2a40c3adcc378ac72d2b60f89856533..7858221dcf5c20fcccbc6baa556a5b878f0f6952 100644
--- a/src/macosx/native/sun/awt/CMenuBar.m
+++ b/src/macosx/native/sun/awt/CMenuBar.m
@@ -63,7 +63,7 @@ static BOOL sSetupHelpMenu = NO;
         if (excludingAppleMenu && ![currMenu isJavaMenu]) {
             continue;
         }
-
+        [currItem setSubmenu:nil];
         [theMainMenu removeItemAtIndex:index];
     }
 
@@ -154,7 +154,10 @@ static BOOL sSetupHelpMenu = NO;
     // Clean up extra items
     NSUInteger removedIndex, removedCount = [removedMenuArray count];
     for (removedIndex=removedCount; removedIndex > 0; removedIndex--) {
-        [theMainMenu removeItemAtIndex:[[removedMenuArray objectAtIndex:(removedIndex-1)] integerValue]];
+        NSUInteger index = [[removedMenuArray objectAtIndex:(removedIndex-1)] integerValue];
+        NSMenuItem *currItem = [theMainMenu itemAtIndex:index];
+        [currItem setSubmenu:nil];
+        [theMainMenu removeItemAtIndex:index];
     }
 
     i = cmenuIndex;
diff --git a/src/macosx/native/sun/awt/CMenuItem.m b/src/macosx/native/sun/awt/CMenuItem.m
index 0d1ade68ab676b8cec8503cb2224c6adeebcbf2b..978710eefc7e4b1b5003cab45058c07cbc4d0436 100644
--- a/src/macosx/native/sun/awt/CMenuItem.m
+++ b/src/macosx/native/sun/awt/CMenuItem.m
@@ -70,9 +70,15 @@ AWT_ASSERT_APPKIT_THREAD;
     JNIEnv *env = [ThreadUtilities getJNIEnv];
 JNF_COCOA_ENTER(env);
 
-    // If we are called as a result of user pressing a shorcut, do nothing,
+    // If we are called as a result of user pressing a shortcut, do nothing,
     // because AVTView has already sent corresponding key event to the Java
-    // layer from performKeyEquivalent
+    // layer from performKeyEquivalent.
+    // There is an exception from the rule above, though: if a window with
+    // a menu gets minimized by user and there are no other windows to take
+    // focus, the window's menu won't be removed from the global menu bar.
+    // However, the Java layer won't handle invocation by a shortcut coming
+    // from this "frameless" menu, because there are no active windows. This
+    // means we have to handle it here.
     NSEvent *currEvent = [[NSApplication sharedApplication] currentEvent];
     if ([currEvent type] == NSKeyDown) {
         NSString *menuKey = [sender keyEquivalent];
@@ -91,7 +97,8 @@ JNF_COCOA_ENTER(env);
             eventKey = [NSString stringWithCharacters: &newChar length: 1];
         }
 
-        if ([menuKey isEqualToString:eventKey]) {
+        NSWindow *keyWindow = [NSApp keyWindow];
+        if ([menuKey isEqualToString:eventKey] && keyWindow != nil) {
             return;
         }
     }
diff --git a/src/macosx/native/sun/font/AWTStrike.h b/src/macosx/native/sun/font/AWTStrike.h
index 41bbe4d5c96c64fdfb62bb88f611bebdbf6a3afe..05ef198764bd0389d5cb65e441bdcf96cb2f1bcd 100644
--- a/src/macosx/native/sun/font/AWTStrike.h
+++ b/src/macosx/native/sun/font/AWTStrike.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,11 +31,12 @@
 @interface AWTStrike : NSObject {
 @public
     AWTFont *                fAWTFont;
-    CGFloat                    fSize;
+    CGFloat                  fSize;
     JRSFontRenderingStyle    fStyle;
-    jint                    fAAStyle;
+    jint                     fAAStyle;
 
     CGAffineTransform        fTx;
+    CGAffineTransform        fDevTx;
     CGAffineTransform        fAltTx; // alternate strike tx used for Sun2D
     CGAffineTransform        fFontTx;
 }
diff --git a/src/macosx/native/sun/font/AWTStrike.m b/src/macosx/native/sun/font/AWTStrike.m
index 7f04b530ade01bc0d88d7a5f63ac1403e9a12d7d..6e4b4291cbbcd7ecb0a7030e6ff81225486e09a3 100644
--- a/src/macosx/native/sun/font/AWTStrike.m
+++ b/src/macosx/native/sun/font/AWTStrike.m
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -65,6 +65,7 @@ static CGAffineTransform sInverseTX = { 1, 0, 0, -1, 0, 0 };
         invDevTx.b *= -1;
         invDevTx.c *= -1;
         fFontTx = CGAffineTransformConcat(CGAffineTransformConcat(tx, invDevTx), sInverseTX);
+        fDevTx = CGAffineTransformInvert(invDevTx);
 
         // the "font size" is the square root of the determinant of the matrix
         fSize = sqrt(abs(fFontTx.a * fFontTx.d - fFontTx.b * fFontTx.c));
@@ -148,7 +149,8 @@ Java_sun_font_CStrike_getNativeGlyphAdvance
 {
     CGSize advance;
 JNF_COCOA_ENTER(env);
-    AWTFont *awtFont = ((AWTStrike *)jlong_to_ptr(awtStrikePtr))->fAWTFont;
+    AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr);
+    AWTFont *awtFont = awtStrike->fAWTFont;
 
     // negative glyph codes are really unicodes, which were placed there by the mapper
     // to indicate we should use CoreText to substitute the character
@@ -156,6 +158,10 @@ JNF_COCOA_ENTER(env);
     const CTFontRef fallback = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtFont, glyphCode, &glyph);
     CTFontGetAdvancesForGlyphs(fallback, kCTFontDefaultOrientation, &glyph, &advance, 1);
     CFRelease(fallback);
+    advance = CGSizeApplyAffineTransform(advance, awtStrike->fFontTx);
+    if (!JRSFontStyleUsesFractionalMetrics(awtStrike->fStyle)) {
+        advance.width = round(advance.width);
+    }
 
 JNF_COCOA_EXIT(env);
     return advance.width;
diff --git a/src/macosx/native/sun/font/CGGlyphImages.m b/src/macosx/native/sun/font/CGGlyphImages.m
index 508c12766d96a5f0e64bd459b1e977781250534f..1901c1fc5cbd63b272c793e2532d15f7d4844d12 100644
--- a/src/macosx/native/sun/font/CGGlyphImages.m
+++ b/src/macosx/native/sun/font/CGGlyphImages.m
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -455,6 +455,7 @@ CGGI_ClearCanvas(CGGI_GlyphCanvas *canvas, GlyphInfo *info)
 #define CGGI_GLYPH_BBOX_PADDING 2.0f
 static inline GlyphInfo *
 CGGI_CreateNewGlyphInfoFrom(CGSize advance, CGRect bbox,
+                            const AWTStrike *strike,
                             const CGGI_RenderingMode *mode)
 {
     size_t pixelSize = mode->glyphDescriptor->pixelSize;
@@ -477,6 +478,12 @@ CGGI_CreateNewGlyphInfoFrom(CGSize advance, CGRect bbox,
         width = 1;
         height = 1;
     }
+    advance = CGSizeApplyAffineTransform(advance, strike->fFontTx);
+    if (!JRSFontStyleUsesFractionalMetrics(strike->fStyle)) {
+        advance.width = round(advance.width);
+        advance.height = round(advance.height);
+    }
+    advance = CGSizeApplyAffineTransform(advance, strike->fDevTx);
 
 #ifdef USE_IMAGE_ALIGNED_MEMORY
     // create separate memory
@@ -564,10 +571,10 @@ CGGI_CreateImageForUnicode
     JRSFontGetBoundingBoxesForGlyphsAndStyle(fallback, &tx, style, &glyph, 1, &bbox);
 
     CGSize advance;
-    JRSFontGetAdvancesForGlyphsAndStyle(fallback, &tx, strike->fStyle, &glyph, 1, &advance);
+    CTFontGetAdvancesForGlyphs(fallback, kCTFontDefaultOrientation, &glyph, &advance, 1);
 
     // create the Sun2D GlyphInfo we are going to strike into
-    GlyphInfo *info = CGGI_CreateNewGlyphInfoFrom(advance, bbox, mode);
+    GlyphInfo *info = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, mode);
 
     // fix the context size, just in case the substituted character is unexpectedly large
     CGGI_SizeCanvas(canvas, info->width, info->height, mode->cgFontMode);
@@ -715,7 +722,7 @@ CGGI_CreateGlyphInfos(jlong *glyphInfos, const AWTStrike *strike,
     JRSFontRenderingStyle bboxCGMode = JRSFontAlignStyleForFractionalMeasurement(strike->fStyle);
 
     JRSFontGetBoundingBoxesForGlyphsAndStyle((CTFontRef)font->fFont, &tx, bboxCGMode, glyphs, len, bboxes);
-    JRSFontGetAdvancesForGlyphsAndStyle((CTFontRef)font->fFont, &tx, strike->fStyle, glyphs, len, advances);
+    CTFontGetAdvancesForGlyphs((CTFontRef)font->fFont, kCTFontDefaultOrientation, glyphs, advances, len);
 
     size_t maxWidth = 1;
     size_t maxHeight = 1;
@@ -732,7 +739,7 @@ CGGI_CreateGlyphInfos(jlong *glyphInfos, const AWTStrike *strike,
         CGSize advance = advances[i];
         CGRect bbox = bboxes[i];
 
-        GlyphInfo *glyphInfo = CGGI_CreateNewGlyphInfoFrom(advance, bbox, mode);
+        GlyphInfo *glyphInfo = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, mode);
 
         if (maxWidth < glyphInfo->width)   maxWidth = glyphInfo->width;
         if (maxHeight < glyphInfo->height) maxHeight = glyphInfo->height;
diff --git a/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk.properties b/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk.properties
index 636d88a9b84b984fb46fcd44eaed1fa76e3a3ec4..dc84d130187ed75e614fea92a3fce860a85b0cd6 100644
--- a/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk.properties
+++ b/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk.properties
@@ -1,54 +1,54 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=>K Color Chooser
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Hue:
-
-GTKColorChooserPanel.red.textAndMnemonic=R&ed:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&Saturation:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Green:
-
-GTKColorChooserPanel.value.textAndMnemonic=&Value:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Blue:
-
-GTKColorChooserPanel.color.textAndMnemonic=Color &Name:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=All Files
-FileChooser.newFolderButton.textAndMnemonic=&New Folder
-FileChooser.newFolderDialog.textAndMnemonic=Folder name:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Error
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Error creating directory "{0}": No such file or directory
-FileChooser.deleteFileButton.textAndMnemonic=De&lete File
-FileChooser.renameFileButton.textAndMnemonic=&Rename File
-FileChooser.cancelButton.textAndMnemonic=&Cancel
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Save
-FileChooser.openDialogTitle.textAndMnemonic=Open
-FileChooser.pathLabel.textAndMnemonic=&Selection:
-FileChooser.filterLabel.textAndMnemonic=Filter:
-FileChooser.foldersLabel.textAndMnemonic=Fol&ders
-FileChooser.filesLabel.textAndMnemonic=&Files
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog.
-FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file.
-FileChooser.openButtonToolTip.textAndMnemonic=Open selected file.
-
-FileChooser.renameFileDialog.textAndMnemonic=Rename file "{0}" to
-FileChooser.renameFileError.titleAndMnemonic=Error
-FileChooser.renameFileError.textAndMnemonic=Error renaming file "{0}" to "{1}"
-
+# Refer to the note in basic.properties for a description as to what
+# the mnemonics correspond to and how to calculate them.
+
+
+
+# GTK specific properties
+
+# GTK color chooser properties:
+GTKColorChooserPanel.textAndMnemonic=>K Color Chooser
+# mnemonic as a VK_ constant
+
+GTKColorChooserPanel.hue.textAndMnemonic=&Hue:
+
+GTKColorChooserPanel.red.textAndMnemonic=R&ed:
+
+GTKColorChooserPanel.saturation.textAndMnemonic=&Saturation:
+
+GTKColorChooserPanel.green.textAndMnemonic=&Green:
+
+GTKColorChooserPanel.value.textAndMnemonic=&Value:
+
+GTKColorChooserPanel.blue.textAndMnemonic=&Blue:
+
+GTKColorChooserPanel.color.textAndMnemonic=Color &Name:
+
+
+
+############ FILE CHOOSER STRINGS #############
+
+FileChooser.acceptAllFileFilter.textAndMnemonic=All Files
+FileChooser.newFolderButton.textAndMnemonic=&New Folder
+FileChooser.newFolderDialog.textAndMnemonic=Folder name:
+FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Error
+FileChooser.newFolderNoDirectoryError.textAndMnemonic=Error creating directory "{0}": No such file or directory
+FileChooser.deleteFileButton.textAndMnemonic=De&lete File
+FileChooser.renameFileButton.textAndMnemonic=&Rename File
+FileChooser.cancelButton.textAndMnemonic=&Cancel
+FileChooser.saveButton.textAndMnemonic=&OK
+FileChooser.openButton.textAndMnemonic=&OK
+FileChooser.saveDialogTitle.textAndMnemonic=Save
+FileChooser.openDialogTitle.textAndMnemonic=Open
+FileChooser.pathLabel.textAndMnemonic=&Selection:
+FileChooser.filterLabel.textAndMnemonic=Filter:
+FileChooser.foldersLabel.textAndMnemonic=Fol&ders
+FileChooser.filesLabel.textAndMnemonic=&Files
+
+FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog.
+FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file.
+FileChooser.openButtonToolTip.textAndMnemonic=Open selected file.
+
+FileChooser.renameFileDialog.textAndMnemonic=Rename file "{0}" to
+FileChooser.renameFileError.titleAndMnemonic=Error
+FileChooser.renameFileError.textAndMnemonic=Error renaming file "{0}" to "{1}"
+
diff --git a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java
index 30a3d5e572f67f9c89b4ef02bbb79f31b8108232..3e4c7faa66fe75de6bec406ce83fb001a672d32b 100644
--- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java
+++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java
@@ -499,7 +499,8 @@ public class WindowsComboBoxUI extends BasicComboBoxUI {
 
         public void setItem(Object item) {
             super.setItem(item);
-            if (editor.hasFocus()) {
+            Object focus = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+            if ((focus == editor) || (focus == editor.getParent())) {
                 editor.selectAll();
             }
         }
diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java
index 0144025216aabbf0fe3c75a5ce8de805ffd6d3d5..0b9a1ae2accb934b5230a12777f2e09c3f5f8470 100644
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java
@@ -42,7 +42,7 @@ import org.w3c.dom.Element;
 public class DEREncodedKeyValue extends Signature11ElementProxy implements KeyInfoContent {
 
     /** JCA algorithm key types supported by this implementation. */
-    public static final String supportedKeyTypes[] = { "RSA", "DSA", "EC"};
+    private static final String supportedKeyTypes[] = { "RSA", "DSA", "EC"};
 
     /**
      * Constructor DEREncodedKeyValue
diff --git a/src/share/classes/com/sun/security/auth/PolicyFile.java b/src/share/classes/com/sun/security/auth/PolicyFile.java
index 447eb395b6900b5e0a4c78070ca16f2a61334c64..2ea13fb31691a9dc5b16f2b41f3cb949d60bfb38 100644
--- a/src/share/classes/com/sun/security/auth/PolicyFile.java
+++ b/src/share/classes/com/sun/security/auth/PolicyFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,6 +47,10 @@ import javax.security.auth.PrivateCredentialPermission;
 
 import sun.security.util.PropertyExpander;
 
+import sun.security.provider.PolicyParser.PrincipalEntry;
+import sun.security.provider.PolicyParser.GrantEntry;
+import sun.security.provider.PolicyParser.PermissionEntry;
+
 /**
  * This class represents a default implementation for
  * javax.security.auth.Policy.
@@ -469,7 +473,8 @@ public class PolicyFile extends javax.security.auth.Policy {
      * @param policyFile the policy Reader object.
      */
     private void init(URL policy) {
-        PolicyParser pp = new PolicyParser(expandProperties);
+        sun.security.provider.PolicyParser pp =
+                new sun.security.provider.PolicyParser(expandProperties);
         try {
             InputStreamReader isr
                 = new InputStreamReader(getInputStream(policy));
@@ -477,12 +482,12 @@ public class PolicyFile extends javax.security.auth.Policy {
             isr.close();
             KeyStore keyStore = initKeyStore(policy, pp.getKeyStoreUrl(),
                                              pp.getKeyStoreType());
-            Enumeration enum_ = pp.grantElements();
+            Enumeration enum_ = pp.grantElements();
             while (enum_.hasMoreElements()) {
-                PolicyParser.GrantEntry ge = enum_.nextElement();
+                GrantEntry ge = enum_.nextElement();
                 addGrantEntry(ge, keyStore);
             }
-        } catch (PolicyParser.ParsingException pe) {
+        } catch (sun.security.provider.PolicyParser.ParsingException pe) {
             System.err.println(AUTH_POLICY +
                                 rb.getString(".error.parsing.") + policy);
             System.err.println(AUTH_POLICY +
@@ -521,8 +526,8 @@ public class PolicyFile extends javax.security.auth.Policy {
      *
      * @return null if signedBy alias is not recognized
      */
-    CodeSource getCodeSource(PolicyParser.GrantEntry ge, KeyStore keyStore)
-        throws java.net.MalformedURLException
+    CodeSource getCodeSource(GrantEntry ge, KeyStore keyStore)
+            throws java.net.MalformedURLException
     {
         Certificate[] certs = null;
         if (ge.signedBy != null) {
@@ -559,20 +564,18 @@ public class PolicyFile extends javax.security.auth.Policy {
     /**
      * Add one policy entry to the vector.
      */
-    private void addGrantEntry(PolicyParser.GrantEntry ge,
-                               KeyStore keyStore) {
+    private void addGrantEntry(GrantEntry ge, KeyStore keyStore) {
 
         if (debug != null) {
             debug.println("Adding policy entry: ");
             debug.println("  signedBy " + ge.signedBy);
             debug.println("  codeBase " + ge.codeBase);
             if (ge.principals != null && ge.principals.size() > 0) {
-                ListIterator li =
-                                                ge.principals.listIterator();
+                ListIterator li = ge.principals.listIterator();
                 while (li.hasNext()) {
-                    PolicyParser.PrincipalEntry pppe = li.next();
-                    debug.println("  " + pppe.principalClass +
-                                        " " + pppe.principalName);
+                    PrincipalEntry pppe = li.next();
+                    debug.println("  " + pppe.getPrincipalClass() +
+                                        " " + pppe.getPrincipalName());
                 }
             }
             debug.println();
@@ -584,10 +587,9 @@ public class PolicyFile extends javax.security.auth.Policy {
             if (codesource == null) return;
 
             PolicyEntry entry = new PolicyEntry(codesource);
-            Enumeration enum_ =
-                                                ge.permissionElements();
+            Enumeration enum_ = ge.permissionElements();
             while (enum_.hasMoreElements()) {
-                PolicyParser.PermissionEntry pe = enum_.nextElement();
+                PermissionEntry pe = enum_.nextElement();
                 try {
                     // XXX special case PrivateCredentialPermission-SELF
                     Permission perm;
@@ -998,11 +1000,11 @@ public class PolicyFile extends javax.security.auth.Policy {
                 return true;
             }
 
-            ListIterator pli =
-                                        scs.getPrincipals().listIterator();
+            ListIterator pli =
+                    scs.getPrincipals().listIterator();
             while (pli.hasNext()) {
 
-                PolicyParser.PrincipalEntry principal = pli.next();
+                PrincipalEntry principal = pli.next();
 
                 // XXX
                 //      if the Policy entry's Principal does not contain a
@@ -1050,30 +1052,29 @@ public class PolicyFile extends javax.security.auth.Policy {
      *                  if (y == 1), it's the principal name.
      */
     private String[][] getPrincipalInfo
-                (PolicyParser.PrincipalEntry principal,
-                final CodeSource accCs) {
+                (PrincipalEntry principal, final CodeSource accCs) {
 
         // there are 3 possibilities:
         // 1) the entry's Principal class and name are not wildcarded
         // 2) the entry's Principal name is wildcarded only
         // 3) the entry's Principal class and name are wildcarded
 
-        if (!principal.principalClass.equals
-                (PolicyParser.PrincipalEntry.WILDCARD_CLASS) &&
-            !principal.principalName.equals
-                (PolicyParser.PrincipalEntry.WILDCARD_NAME)) {
+        if (!principal.getPrincipalClass().equals
+                (PrincipalEntry.WILDCARD_CLASS) &&
+            !principal.getPrincipalName().equals
+                (PrincipalEntry.WILDCARD_NAME)) {
 
             // build a PrivateCredentialPermission for the principal
             // from the Policy entry
             String[][] info = new String[1][2];
-            info[0][0] = principal.principalClass;
-            info[0][1] = principal.principalName;
+            info[0][0] = principal.getPrincipalClass();
+            info[0][1] = principal.getPrincipalName();
             return info;
 
-        } else if (!principal.principalClass.equals
-                (PolicyParser.PrincipalEntry.WILDCARD_CLASS) &&
-            principal.principalName.equals
-                (PolicyParser.PrincipalEntry.WILDCARD_NAME)) {
+        } else if (!principal.getPrincipalClass().equals
+                (PrincipalEntry.WILDCARD_CLASS) &&
+            principal.getPrincipalName().equals
+                (PrincipalEntry.WILDCARD_NAME)) {
 
             // build a PrivateCredentialPermission for all
             // the Subject's principals that are instances of principalClass
@@ -1088,7 +1089,7 @@ public class PolicyFile extends javax.security.auth.Policy {
                 // If it doesn't, we should stop here with a ClassCastException.
                 @SuppressWarnings("unchecked")
                 Class pClass = (Class)
-                        Class.forName(principal.principalClass, false,
+                        Class.forName(principal.getPrincipalClass(), false,
                                       ClassLoader.getSystemClassLoader());
                 principalSet = scs.getSubject().getPrincipals(pClass);
             } catch (Exception e) {
@@ -1387,6 +1388,7 @@ public class PolicyFile extends javax.security.auth.Policy {
     }
 }
 
+@SuppressWarnings("deprecation")
 class PolicyPermissions extends PermissionCollection {
 
     private static final long serialVersionUID = -1954188373270545523L;
diff --git a/src/share/classes/com/sun/security/auth/SubjectCodeSource.java b/src/share/classes/com/sun/security/auth/SubjectCodeSource.java
index 35d3bf1c410c59d0af324376a4742592c10a7aff..7e38a087420352a934449580d91469450b455056 100644
--- a/src/share/classes/com/sun/security/auth/SubjectCodeSource.java
+++ b/src/share/classes/com/sun/security/auth/SubjectCodeSource.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@ import java.security.cert.Certificate;
 import java.lang.reflect.Constructor;
 
 import javax.security.auth.Subject;
+import sun.security.provider.PolicyParser.PrincipalEntry;
 
 /**
  * 

This SubjectCodeSource class contains @@ -57,7 +58,7 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { }); private Subject subject; - private LinkedList principals; + private LinkedList principals; private static final Class[] PARAMS = { String.class }; private static final sun.security.util.Debug debug = sun.security.util.Debug.getInstance("auth", "\t[Auth Access]"); @@ -87,14 +88,14 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { * SubjectCodeSource

*/ SubjectCodeSource(Subject subject, - LinkedList principals, + LinkedList principals, URL url, Certificate[] certs) { super(url, certs); this.subject = subject; this.principals = (principals == null ? - new LinkedList() : - new LinkedList(principals)); + new LinkedList() : + new LinkedList(principals)); sysClassLoader = java.security.AccessController.doPrivileged (new java.security.PrivilegedAction() { public ClassLoader run() { @@ -114,7 +115,7 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { * SubjectCodeSource as a LinkedList * of PolicyParser.PrincipalEntry objects. */ - LinkedList getPrincipals() { + LinkedList getPrincipals() { return principals; } @@ -167,7 +168,7 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { */ public boolean implies(CodeSource codesource) { - LinkedList subjectList = null; + LinkedList subjectList = null; if (codesource == null || !(codesource instanceof SubjectCodeSource) || @@ -197,20 +198,19 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { return false; } - ListIterator li = - this.principals.listIterator(0); + ListIterator li = this.principals.listIterator(0); while (li.hasNext()) { - PolicyParser.PrincipalEntry pppe = li.next(); + PrincipalEntry pppe = li.next(); try { // handle PrincipalComparators Class principalComparator = Class.forName( - pppe.principalClass, true, sysClassLoader); + pppe.getPrincipalClass(), true, sysClassLoader); Constructor c = principalComparator.getConstructor(PARAMS); PrincipalComparator pc = (PrincipalComparator)c.newInstance - (new Object[] { pppe.principalName }); + (new Object[] { pppe.getPrincipalName() }); if (!pc.implies(that.getSubject())) { if (debug != null) @@ -236,11 +236,10 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { Iterator i = that.getSubject().getPrincipals().iterator(); - subjectList = new LinkedList(); + subjectList = new LinkedList(); while (i.hasNext()) { Principal p = i.next(); - PolicyParser.PrincipalEntry spppe = - new PolicyParser.PrincipalEntry + PrincipalEntry spppe = new PrincipalEntry (p.getClass().getName(), p.getName()); subjectList.add(spppe); } @@ -281,23 +280,19 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { * pppe argument. */ private boolean subjectListImpliesPrincipalEntry( - LinkedList subjectList, - PolicyParser.PrincipalEntry pppe) { + LinkedList subjectList, PrincipalEntry pppe) { - ListIterator li = - subjectList.listIterator(0); + ListIterator li = subjectList.listIterator(0); while (li.hasNext()) { - PolicyParser.PrincipalEntry listPppe = li.next(); - - if (pppe.principalClass.equals - (PolicyParser.PrincipalEntry.WILDCARD_CLASS) || - pppe.principalClass.equals - (listPppe.principalClass)) { - - if (pppe.principalName.equals - (PolicyParser.PrincipalEntry.WILDCARD_NAME) || - pppe.principalName.equals - (listPppe.principalName)) + PrincipalEntry listPppe = li.next(); + + if (pppe.getPrincipalClass().equals + (PrincipalEntry.WILDCARD_CLASS) || + pppe.getPrincipalClass().equals(listPppe.getPrincipalClass())) + { + if (pppe.getPrincipalName().equals + (PrincipalEntry.WILDCARD_NAME) || + pppe.getPrincipalName().equals(listPppe.getPrincipalName())) return true; } } @@ -390,13 +385,12 @@ class SubjectCodeSource extends CodeSource implements java.io.Serializable { } } if (principals != null) { - ListIterator li = - principals.listIterator(); + ListIterator li = principals.listIterator(); while (li.hasNext()) { - PolicyParser.PrincipalEntry pppe = li.next(); + PrincipalEntry pppe = li.next(); returnMe = returnMe + rb.getString("NEWLINE") + - pppe.principalClass + " " + - pppe.principalName; + pppe.getPrincipalClass() + " " + + pppe.getPrincipalName(); } } return returnMe; diff --git a/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth.properties b/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth.properties index 35d2356449294c9756a05d158a2b8ed1c77e2a2b..66f334e6c4049871d4e7e70fbc2c8b81bd90f366 100644 --- a/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth.properties +++ b/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth.properties @@ -1,45 +1,45 @@ -# This properties file is used to create a PropertyResourceBundle -# It contains Locale specific strings used be the Synth Look and Feel. -# Currently, the following components need this for support: -# -# FileChooser -# -# When this file is read in, the strings are put into the -# defaults table. This is an implementation detail of the current -# workings of Swing. DO NOT DEPEND ON THIS. -# This may change in future versions of Swing as we improve localization -# support. -# -# Refer to the note in basic.properties for a description as to what -# the mnemonics correspond to and how to calculate them. -# -# @author Steve Wilson - - -############ FILE CHOOSER STRINGS ############# - -FileChooser.lookInLabel.textAndMnemonic=Look &In: -FileChooser.saveInLabel.textAndMnemonic=Save In: -FileChooser.fileNameLabel.textAndMnemonic=File &Name: -FileChooser.folderNameLabel.textAndMnemonic=Folder &Name: -FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &Type: -FileChooser.upFolderToolTip.textAndMnemonic=Up One Level -FileChooser.upFolderAccessibleName=Up -FileChooser.homeFolderToolTip.textAndMnemonic=Home -FileChooser.homeFolderAccessibleName=Home -FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder -FileChooser.newFolderAccessibleName=New Folder -FileChooser.newFolderActionLabel.textAndMnemonic=New Folder -FileChooser.listViewButtonToolTip.textAndMnemonic=List -FileChooser.listViewButtonAccessibleName=List -FileChooser.listViewActionLabel.textAndMnemonic=List -FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details -FileChooser.detailsViewButtonAccessibleName=Details -FileChooser.detailsViewActionLabel.textAndMnemonic=Details -FileChooser.refreshActionLabel.textAndMnemonic=Refresh -FileChooser.viewMenuLabel.textAndMnemonic=View -FileChooser.fileNameHeader.textAndMnemonic=Name -FileChooser.fileSizeHeader.textAndMnemonic=Size -FileChooser.fileTypeHeader.textAndMnemonic=Type -FileChooser.fileDateHeader.textAndMnemonic=Modified -FileChooser.fileAttrHeader.textAndMnemonic=Attributes +# This properties file is used to create a PropertyResourceBundle +# It contains Locale specific strings used be the Synth Look and Feel. +# Currently, the following components need this for support: +# +# FileChooser +# +# When this file is read in, the strings are put into the +# defaults table. This is an implementation detail of the current +# workings of Swing. DO NOT DEPEND ON THIS. +# This may change in future versions of Swing as we improve localization +# support. +# +# Refer to the note in basic.properties for a description as to what +# the mnemonics correspond to and how to calculate them. +# +# @author Steve Wilson + + +############ FILE CHOOSER STRINGS ############# + +FileChooser.lookInLabel.textAndMnemonic=Look &In: +FileChooser.saveInLabel.textAndMnemonic=Save In: +FileChooser.fileNameLabel.textAndMnemonic=File &Name: +FileChooser.folderNameLabel.textAndMnemonic=Folder &Name: +FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &Type: +FileChooser.upFolderToolTip.textAndMnemonic=Up One Level +FileChooser.upFolderAccessibleName=Up +FileChooser.homeFolderToolTip.textAndMnemonic=Home +FileChooser.homeFolderAccessibleName=Home +FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder +FileChooser.newFolderAccessibleName=New Folder +FileChooser.newFolderActionLabel.textAndMnemonic=New Folder +FileChooser.listViewButtonToolTip.textAndMnemonic=List +FileChooser.listViewButtonAccessibleName=List +FileChooser.listViewActionLabel.textAndMnemonic=List +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details +FileChooser.detailsViewButtonAccessibleName=Details +FileChooser.detailsViewActionLabel.textAndMnemonic=Details +FileChooser.refreshActionLabel.textAndMnemonic=Refresh +FileChooser.viewMenuLabel.textAndMnemonic=View +FileChooser.fileNameHeader.textAndMnemonic=Name +FileChooser.fileSizeHeader.textAndMnemonic=Size +FileChooser.fileTypeHeader.textAndMnemonic=Type +FileChooser.fileDateHeader.textAndMnemonic=Modified +FileChooser.fileAttrHeader.textAndMnemonic=Attributes diff --git a/src/share/classes/com/sun/tools/hat/resources/hat.js b/src/share/classes/com/sun/tools/hat/resources/hat.js index 468d25ae172043c1f235fe57b7a0ac1ed6fb8343..f2c92ab4b0d44ac294329bbecb6ae3cc3fa6f56f 100644 --- a/src/share/classes/com/sun/tools/hat/resources/hat.js +++ b/src/share/classes/com/sun/tools/hat/resources/hat.js @@ -151,7 +151,7 @@ function JavaClassProto() { while (tmp != null) { res[res.length] = tmp; tmp = tmp.superclass; - } + } return res; } @@ -263,16 +263,19 @@ function wrapJavaObject(thing) { if (name == 'class') { return wrapJavaValue(instance.clazz); - } else if (name == 'toString') { - return function() { - return instance.toString(); - } } else if (name == 'wrapped-object') { return instance; } return undefined; - } + }, + __call__: function(name) { + if (name == 'toString') { + return instance.toString(); + } else { + return undefined; + } + } } } @@ -297,7 +300,7 @@ function wrapJavaObject(thing) { return true; } } - return theJavaClassProto[name] != undefined; + return false; }, __get__ : function(name) { for (var i in fields) { @@ -305,7 +308,7 @@ function wrapJavaObject(thing) { return wrapJavaValue(fields[i].value); } } - return theJavaClassProto[name]; + return undefined; } } @@ -322,7 +325,12 @@ function wrapJavaObject(thing) { this.name = jclass.name; this.fields = jclass.fields; this['wrapped-object'] = jclass; - this.__proto__ = this.statics; + } + + for (var i in theJavaClassProto) { + if (typeof theJavaClassProto[i] == 'function') { + JavaClassWrapper.prototype[i] = theJavaClassProto[i]; + } } // returns wrapper for Java object arrays @@ -334,32 +342,35 @@ function wrapJavaObject(thing) { __getIds__ : function() { var res = new Array(elements.length); for (var i = 0; i < elements.length; i++) { - res[i] = i; + res[i] = String(i); } return res; }, __has__: function(name) { - return (typeof(name) == 'number' && - name >= 0 && name < elements.length) || + return (name >= 0 && name < elements.length) || name == 'length' || name == 'class' || name == 'toString' || name == 'wrapped-object'; }, __get__ : function(name) { - if (typeof(name) == 'number' && - name >= 0 && name < elements.length) { + if (name >= 0 && name < elements.length) { return wrapJavaValue(elements[name]); } else if (name == 'length') { return elements.length; } else if (name == 'class') { return wrapJavaValue(array.clazz); - } else if (name == 'toString') { - return function() { return array.toString(); } } else if (name == 'wrapped-object') { return array; } else { return undefined; } - } + }, + __call__: function(name) { + if (name == 'toString') { + return array.toString(); + } else { + return undefined; + } + } } } @@ -373,26 +384,22 @@ function wrapJavaObject(thing) { __getIds__ : function() { var r = new Array(array.length); for (var i = 0; i < array.length; i++) { - r[i] = i; + r[i] = String(i); } return r; }, __has__: function(name) { - return (typeof(name) == 'number' && - name >= 0 && name < array.length) || + return (name >= 0 && name < array.length) || name == 'length' || name == 'class' || name == 'toString' || name == 'wrapped-object'; }, __get__: function(name) { - if (typeof(name) == 'number' && - name >= 0 && name < array.length) { + if (name >= 0 && name < array.length) { return elements[name]; } if (name == 'length') { return array.length; - } else if (name == 'toString') { - return function() { return array.valueString(true); } } else if (name == 'wrapped-object') { return array; } else if (name == 'class') { @@ -400,7 +407,14 @@ function wrapJavaObject(thing) { } else { return undefined; } - } + }, + __call__: function(name) { + if (name == 'toString') { + return array.valueString(true); + } else { + return undefined; + } + } } } return javaObject(thing); @@ -673,34 +687,33 @@ function wrapHeapSnapshot(heap) { __getIds__ : function() { var res = new Array(path.length); for (var i = 0; i < path.length; i++) { - res[i] = i; + res[i] = String(i); } return res; }, __has__ : function (name) { - return (typeof(name) == 'number' && - name >= 0 && name < path.length) || + return (name >= 0 && name < path.length) || name == 'length' || name == 'toHtml' || name == 'toString'; }, __get__ : function(name) { - if (typeof(name) == 'number' && - name >= 0 && name < path.length) { + if (name >= 0 && name < path.length) { return path[name]; } else if (name == 'length') { return path.length; - } else if (name == 'toHtml') { - return function() { - return computeDescription(true); - } - } else if (name == 'toString') { - return function() { - return computeDescription(false); - } } else { return undefined; } }, + __call__: function(name) { + if (name == 'toHtml') { + return computeDescription(true); + } else if (name == 'toString') { + return computeDescription(false); + } else { + return undefined; + } + } }; } @@ -1005,22 +1018,8 @@ function toHtml(obj) { return "" + name + "@" + id + ""; } - } else if ((typeof(obj) == 'object') || (obj instanceof JSAdapter)) { - if (obj instanceof java.lang.Object) { - // script wrapped Java object - obj = wrapIterator(obj); - // special case for enumeration - if (obj instanceof java.util.Enumeration) { - var res = "[ "; - while (obj.hasMoreElements()) { - res += toHtml(obj.nextElement()) + ", "; - } - res += "]"; - return res; - } else { - return obj; - } - } else if (obj instanceof Array) { + } else if (obj instanceof Object) { + if (Array.isArray(obj)) { // script array var res = "[ "; for (var i in obj) { @@ -1047,8 +1046,19 @@ function toHtml(obj) { } } } else { - // JavaScript primitive value - return obj; + // a Java object + obj = wrapIterator(obj); + // special case for enumeration + if (obj instanceof java.util.Enumeration) { + var res = "[ "; + while (obj.hasMoreElements()) { + res += toHtml(obj.nextElement()) + ", "; + } + res += "]"; + return res; + } else { + return obj; + } } } diff --git a/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html b/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html index 3937f4a1c39429ca19c3aaec9bde0dfa36d77da1..d660fd3cae87d944c2909ff963fda51faf7017e9 100644 --- a/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html +++ b/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html @@ -79,7 +79,7 @@ bound to a JavaScript variable of the identifier name specified in select s.value.toString() from java.lang.String s - where /java/(s.value.toString()) + where /java/.test(s.value.toString())

  • show path value of all File objects @@ -219,7 +219,6 @@ Examples:
     
         select heap.findClass("java.lang.System").statics.props
    -    select heap.findClass("java.lang.System").props
     
     
  • get number of fields of java.lang.String class @@ -237,7 +236,7 @@ Examples:
  • select all classes that have name pattern java.net.*
     
    -    select filter(heap.classes(), "/java.net./(it.name)")
    +    select filter(heap.classes(), "/java.net./.test(it.name)")
     
     
    @@ -536,7 +535,7 @@ refer to the following built-in variables. Example: print number of classes that have specific name pattern
     
    -    select count(heap.classes(), "/java.io./(it.name)")
    +    select count(heap.classes(), "/java.io./.test(it.name)")
     
     
    @@ -559,14 +558,14 @@ Examples:
  • show all classes that have java.io.* name pattern
     
    -    select filter(heap.classes(), "/java.io./(it.name)")
    +    select filter(heap.classes(), "/java.io./.test(it.name)")
     
     
  • show all referrers of URL object where the referrer is not from java.net package
     
    -    select filter(referrers(u), "! /java.net./(classof(it).name)")
    +    select filter(referrers(u), "! /java.net./.test(classof(it).name)")
         from java.net.URL u
     
     
    @@ -619,13 +618,13 @@ Examples:
  • find the maximum length of any String instance
     
    -    select max(map(heap.objects('java.lang.String', false), 'it.count'))
    +    select max(map(heap.objects('java.lang.String', false), 'it.value.length'))
     
     
  • find string instance that has the maximum length
     
    -    select max(heap.objects('java.lang.String'), 'lhs.count > rhs.count')
    +    select max(heap.objects('java.lang.String'), 'lhs.value.length > rhs.value.length')
     
     
    @@ -775,7 +774,7 @@ and walk until parent is null using the callback function to map call.
     
    -   select map(filter(heap.findClass('java.lang.System').props.table, 'it != null'), 
    +   select map(filter(heap.findClass('java.lang.System').statics.props.table, 'it != null'), 
                 function (it) {
                     var res = "";
                     while (it != null) {
    diff --git a/src/share/classes/java/applet/AppletContext.java b/src/share/classes/java/applet/AppletContext.java
    index 87623ee334f50f9a42b9c344f9953c22e8f17226..f28308cfb11628ed880248f2e9516cd7e428463e 100644
    --- a/src/share/classes/java/applet/AppletContext.java
    +++ b/src/share/classes/java/applet/AppletContext.java
    @@ -1,5 +1,5 @@
     /*
    - * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
    + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
      * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      *
      * This code is free software; you can redistribute it and/or modify it
    @@ -56,7 +56,7 @@ public interface AppletContext {
     
         /**
          * Returns an Image object that can then be painted on
    -     * the screen. The url argument that is
    +     * the screen. The url argument that is
          * passed as an argument must specify an absolute URL.
          * 

    * This method always returns immediately, whether or not the image @@ -157,7 +157,7 @@ public interface AppletContext { * @param stream stream to be associated with the specified key. If this * parameter is null, the specified key is removed * in this applet context. - * @throws IOException if the stream size exceeds a certain + * @throws IOException if the stream size exceeds a certain * size limit. Size limit is decided by the implementor of this * interface. * @since 1.4 diff --git a/src/share/classes/java/awt/AWTException.java b/src/share/classes/java/awt/AWTException.java index a8c555c6c8972a3b81d2e0f7aec6a93195dee518..3c03635837fe93d95e883a8cbfba04d8f31b0d0a 100644 --- a/src/share/classes/java/awt/AWTException.java +++ b/src/share/classes/java/awt/AWTException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1997, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ package java.awt; /** - * Signals that an Absract Window Toolkit exception has occurred. + * Signals that an Abstract Window Toolkit exception has occurred. * * @author Arthur van Hoff */ diff --git a/src/share/classes/java/beans/AppletInitializer.java b/src/share/classes/java/beans/AppletInitializer.java index 9e4b7239d6155386b3b6b73b0187b279b962a1b6..2c271a236cadb16e2101e2fcbdff60580148a674 100644 --- a/src/share/classes/java/beans/AppletInitializer.java +++ b/src/share/classes/java/beans/AppletInitializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,6 @@ public interface AppletInitializer { * the Applet with its Container during the subsequent invocation of its * addChildren() method. * - *

    * * @param newAppletBean The newly instantiated JavaBean * @param bCtxt The BeanContext intended for this Applet, or diff --git a/src/share/classes/java/beans/Beans.java b/src/share/classes/java/beans/Beans.java index 2183d224167d640a1b5559f145dd415107ea7cfc..58a411691fd9a220961af97aeb05c0a354220f3a 100644 --- a/src/share/classes/java/beans/Beans.java +++ b/src/share/classes/java/beans/Beans.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,7 +62,7 @@ public class Beans { *

    * Instantiate a JavaBean. *

    - * + * @return a JavaBean * @param cls the class-loader from which we should create * the bean. If this is null, then the system * class-loader is used. @@ -82,6 +82,7 @@ public class Beans { *

    * Instantiate a JavaBean. *

    + * @return a JavaBean * * @param cls the class-loader from which we should create * the bean. If this is null, then the system @@ -137,6 +138,7 @@ public class Beans { * the JDK appletviewer (for a reference browser environment) and the * BDK BeanBox (for a reference bean container). * + * @return a JavaBean * @param cls the class-loader from which we should create * the bean. If this is null, then the system * class-loader is used. @@ -361,6 +363,8 @@ public class Beans { * This method is provided in Beans 1.0 as a hook to allow the * addition of more flexible bean behaviour in the future. * + * @return an object representing a specified type view of the + * source object * @param bean Object from which we want to obtain a view. * @param targetType The type of view we'd like to get. * @@ -384,7 +388,6 @@ public class Beans { return Introspector.isSubclass(bean.getClass(), targetType); } - /** * Test if we are in design-mode. * diff --git a/src/share/classes/java/beans/ConstructorProperties.java b/src/share/classes/java/beans/ConstructorProperties.java index 3166de31747e1e396dd5a8a23f283f0d033b326f..5ee947c1f1cad85d18a6673fa5150be340dc420d 100644 --- a/src/share/classes/java/beans/ConstructorProperties.java +++ b/src/share/classes/java/beans/ConstructorProperties.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ import static java.lang.annotation.RetentionPolicy.*; the {@code getY()} method. Since parameter names are not in general available at runtime, without the annotation there would be no way to know whether the parameters correspond to {@code getX()} - and {@code getY()} or the other way around.

    + and {@code getY()} or the other way around. @since 1.6 */ diff --git a/src/share/classes/java/beans/DefaultPersistenceDelegate.java b/src/share/classes/java/beans/DefaultPersistenceDelegate.java index 3c6c7c2a3d37530cbcd7708e55dea6fca5ef3d76..de6a1b7517897b255690ee427265e622a604ea2c 100644 --- a/src/share/classes/java/beans/DefaultPersistenceDelegate.java +++ b/src/share/classes/java/beans/DefaultPersistenceDelegate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -382,6 +382,7 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate { * a class such that no property value depends on the value of * a subsequent property. * + * @param type the type of the instances * @param oldInstance The instance to be copied. * @param newInstance The instance that is to be modified. * @param out The stream to which any initialization statements should be written. diff --git a/src/share/classes/java/beans/EventHandler.java b/src/share/classes/java/beans/EventHandler.java index b7635c931b7031f6bf3684b691bea1614621503b..b428f2892a142ff54dce520c29379d20bc1f5ff7 100644 --- a/src/share/classes/java/beans/EventHandler.java +++ b/src/share/classes/java/beans/EventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -515,6 +515,7 @@ public class EventHandler implements InvocationHandler { *
    * * + * @param the type to create * @param listenerInterface the listener interface to create a proxy for * @param target the object that will perform the action * @param action the name of a (possibly qualified) property or method on @@ -570,6 +571,7 @@ public class EventHandler implements InvocationHandler { *
  • * * + * @param the type to create * @param listenerInterface the listener interface to create a proxy for * @param target the object that will perform the action * @param action the name of a (possibly qualified) property or method on @@ -659,6 +661,7 @@ public class EventHandler implements InvocationHandler { * * * + * @param the type to create * @param listenerInterface the listener interface to create a proxy for * @param target the object that will perform the action * @param action the name of a (possibly qualified) property or method on diff --git a/src/share/classes/java/beans/Expression.java b/src/share/classes/java/beans/Expression.java index f7a15c3464ad5f72d43f1e60ac058f6d1b012350..ce6fafb104e0b485d5bed186534cc5a7b05712dd 100644 --- a/src/share/classes/java/beans/Expression.java +++ b/src/share/classes/java/beans/Expression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,7 +139,7 @@ public class Expression extends Statement { * replaces this default value in the same way that any other value * would, ensuring that expressions are never evaluated more than once. *

    - * See the excecute method for details on how + * See the execute method for details on how * methods are chosen using the dynamic types of the target * and arguments. * @@ -147,6 +147,8 @@ public class Expression extends Statement { * @see #setValue * * @return The result of applying this method to these arguments. + * @throws Exception if the method with the specified methodName + * throws an exception */ public Object getValue() throws Exception { if (value == unbound) { diff --git a/src/share/classes/java/beans/IndexedPropertyDescriptor.java b/src/share/classes/java/beans/IndexedPropertyDescriptor.java index d3f16d2901e0a1cef2be8fdf07ec845d96a5dc18..1d59f7afddb15fb310785b6fba04e74b990733ae 100644 --- a/src/share/classes/java/beans/IndexedPropertyDescriptor.java +++ b/src/share/classes/java/beans/IndexedPropertyDescriptor.java @@ -207,6 +207,8 @@ public class IndexedPropertyDescriptor extends PropertyDescriptor { * Sets the method that should be used to read an indexed property value. * * @param readMethod The new indexed read method. + * @throws IntrospectionException if an exception occurs during + * introspection. */ public synchronized void setIndexedReadMethod(Method readMethod) throws IntrospectionException { @@ -285,6 +287,8 @@ public class IndexedPropertyDescriptor extends PropertyDescriptor { * Sets the method that should be used to write an indexed property value. * * @param writeMethod The new indexed write method. + * @throws IntrospectionException if an exception occurs during + * introspection. */ public synchronized void setIndexedWriteMethod(Method writeMethod) throws IntrospectionException { diff --git a/src/share/classes/java/beans/Introspector.java b/src/share/classes/java/beans/Introspector.java index 783fcbef315e586b1ddf5cf9a0aab8d3049f234c..acc0f77f389b451afd7e0e8eec4390ebf7e11751 100644 --- a/src/share/classes/java/beans/Introspector.java +++ b/src/share/classes/java/beans/Introspector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -93,8 +93,17 @@ import sun.reflect.misc.ReflectUtil; public class Introspector { // Flags that can be used to control getBeanInfo: + /** + * Flag to indicate to use of all beaninfo. + */ public final static int USE_ALL_BEANINFO = 1; + /** + * Flag to indicate to ignore immediate beaninfo. + */ public final static int IGNORE_IMMEDIATE_BEANINFO = 2; + /** + * Flag to indicate to ignore all beaninfo. + */ public final static int IGNORE_ALL_BEANINFO = 3; // Static Caches to speed up introspection. @@ -202,7 +211,7 @@ public class Introspector { * If the BeanInfo class for a Java Bean has been previously Introspected * based on the same arguments, then the BeanInfo class is retrieved * from the BeanInfo cache. - * + * @return the BeanInfo for the bean * @param beanClass The bean class to be analyzed. * @param stopClass The baseclass at which to stop the analysis. Any * methods/properties/events in the stopClass or in its baseclasses diff --git a/src/share/classes/java/beans/PersistenceDelegate.java b/src/share/classes/java/beans/PersistenceDelegate.java index 01c5bb123876af66d4ed2281bd5a262f93af69aa..bbdcdbf060c0026f7a07faec60bae724f1d5be39 100644 --- a/src/share/classes/java/beans/PersistenceDelegate.java +++ b/src/share/classes/java/beans/PersistenceDelegate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -197,6 +197,7 @@ public abstract class PersistenceDelegate { * The default implementation, calls the initialize * method of the type's superclass. * + * @param type the type of the instances * @param oldInstance The instance to be copied. * @param newInstance The instance that is to be modified. * @param out The stream to which any initialization statements should be written. diff --git a/src/share/classes/java/beans/PropertyChangeSupport.java b/src/share/classes/java/beans/PropertyChangeSupport.java index c3c73179b1a4637c3216c327e9c70aa8480e0923..d55ae76efc8ded9fa4c7c8c1ce554f418bc02966 100644 --- a/src/share/classes/java/beans/PropertyChangeSupport.java +++ b/src/share/classes/java/beans/PropertyChangeSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,7 +156,7 @@ public class PropertyChangeSupport implements Serializable { * PropertyChangeListenerProxy, perform the cast, and examine * the parameter. * - *

    +     * 
    {@code
          * PropertyChangeListener[] listeners = bean.getPropertyChangeListeners();
          * for (int i = 0; i < listeners.length; i++) {
          *   if (listeners[i] instanceof PropertyChangeListenerProxy) {
    @@ -168,7 +168,7 @@ public class PropertyChangeSupport implements Serializable {
          *     }
          *   }
          * }
    -     *
    + * }
    * * @see PropertyChangeListenerProxy * @return all of the PropertyChangeListeners added or an diff --git a/src/share/classes/java/beans/PropertyDescriptor.java b/src/share/classes/java/beans/PropertyDescriptor.java index 0abdcad972b6e19e23ac9eea7aad1a8f8e22fd4e..c519b504d58afee94795d0024ba0c129e376c046 100644 --- a/src/share/classes/java/beans/PropertyDescriptor.java +++ b/src/share/classes/java/beans/PropertyDescriptor.java @@ -243,6 +243,7 @@ public class PropertyDescriptor extends FeatureDescriptor { * Sets the method that should be used to read the property value. * * @param readMethod The new read method. + * @throws IntrospectionException if the read method is invalid */ public synchronized void setReadMethod(Method readMethod) throws IntrospectionException { @@ -313,6 +314,7 @@ public class PropertyDescriptor extends FeatureDescriptor { * Sets the method that should be used to write the property value. * * @param writeMethod The new write method. + * @throws IntrospectionException if the write method is invalid */ public synchronized void setWriteMethod(Method writeMethod) throws IntrospectionException { diff --git a/src/share/classes/java/beans/Transient.java b/src/share/classes/java/beans/Transient.java index 0a2761ce8b9106f19cfb95a4ca885356b882166a..165621b39fd041b8645079f21df59bea95ac9eaf 100644 --- a/src/share/classes/java/beans/Transient.java +++ b/src/share/classes/java/beans/Transient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * A {@code true} value for the "transient" attribute * indicates to encoders derived from {@link Encoder} * that this feature should be ignored. - *

    + *

    * The {@code Transient} annotation may be be used * in any of the methods that are involved * in a {@link FeatureDescriptor} subclass @@ -49,7 +49,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * to put the annotation and it is this declaration * that takes precedence in the case of multiple annotations * being defined for the same feature. - *

    + *

    * To declare a feature non-transient in a class * whose superclass declares it transient, * use {@code @Transient(false)}. @@ -64,5 +64,11 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Target({METHOD}) @Retention(RUNTIME) public @interface Transient { + /** + * Returns whether or not the {@code Introspector} should + * construct artifacts for the annotated method. + * @return whether or not the {@code Introspector} should + * construct artifacts for the annotated method + */ boolean value() default true; } diff --git a/src/share/classes/java/beans/VetoableChangeSupport.java b/src/share/classes/java/beans/VetoableChangeSupport.java index 6b7e268eba7e1fa0d8d76a5b3a1b935b3d98c85c..293ae5af2c61a2e1820359c9bec7cb7f1ef06740 100644 --- a/src/share/classes/java/beans/VetoableChangeSupport.java +++ b/src/share/classes/java/beans/VetoableChangeSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,7 @@ import java.util.Map.Entry; *

    * Here is an example of {@code VetoableChangeSupport} usage that follows * the rules and recommendations laid out in the JavaBeans™ specification: - *

    + * 
    {@code
      * public class MyBean {
      *     private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);
      *
    @@ -68,7 +68,7 @@ import java.util.Map.Entry;
      *
      *     [...]
      * }
    - * 
    + * }
    *

    * A {@code VetoableChangeSupport} instance is thread-safe. *

    @@ -156,7 +156,7 @@ public class VetoableChangeSupport implements Serializable { * VetoableChangeListenerProxy, perform the cast, and examine * the parameter. * - *

    +     * 
    {@code
          * VetoableChangeListener[] listeners = bean.getVetoableChangeListeners();
          * for (int i = 0; i < listeners.length; i++) {
          *        if (listeners[i] instanceof VetoableChangeListenerProxy) {
    @@ -168,7 +168,7 @@ public class VetoableChangeSupport implements Serializable {
          *     }
          *   }
          * }
    -     *
    + * }
    * * @see VetoableChangeListenerProxy * @return all of the VetoableChangeListeners added or an diff --git a/src/share/classes/java/beans/beancontext/BeanContext.java b/src/share/classes/java/beans/beancontext/BeanContext.java index c6217289fafdffe8c10f97cdd996b189f0e8b035..308147b9e3c1d22b06a8490c4ee9230586aef755 100644 --- a/src/share/classes/java/beans/beancontext/BeanContext.java +++ b/src/share/classes/java/beans/beancontext/BeanContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,10 +64,12 @@ public interface BeanContext extends BeanContextChild, Collection, DesignMode, V * and is defined by the * java.beans.Beans.instantiate() method. * + * @return a javaBean named as a child of this + * BeanContext * @param beanName The name of the JavaBean to instantiate * as a child of this BeanContext - * @throws IOException - * @throws ClassNotFoundException if the class identified + * @throws IOException if an IO problem occurs + * @throws ClassNotFoundException if the class identified * by the beanName parameter is not found */ Object instantiateChild(String beanName) throws IOException, ClassNotFoundException; @@ -83,7 +85,7 @@ public interface BeanContext extends BeanContextChild, Collection, DesignMode, V * @return an InputStream for reading the resource, * or null if the resource could not * be found. - * @throws IllegalArgumentException if + * @throws IllegalArgumentException if * the resource is not valid */ InputStream getResourceAsStream(String name, BeanContextChild bcc) throws IllegalArgumentException; @@ -98,7 +100,7 @@ public interface BeanContext extends BeanContextChild, Collection, DesignMode, V * @param bcc the specified child * @return a URL for the named * resource for the specified child - * @throws IllegalArgumentException + * @throws IllegalArgumentException * if the resource is not valid */ URL getResource(String name, BeanContextChild bcc) throws IllegalArgumentException; @@ -109,7 +111,7 @@ public interface BeanContext extends BeanContextChild, Collection, DesignMode, V * this BeanContext whenever it adds * or removes a child Component(s). * - * @param bcml the BeanContextMembershipListener to be added + * @param bcml the BeanContextMembershipListener to be added */ void addBeanContextMembershipListener(BeanContextMembershipListener bcml); diff --git a/src/share/classes/java/beans/beancontext/BeanContextChild.java b/src/share/classes/java/beans/beancontext/BeanContextChild.java index 841e3ccbc5edb5f20ab5d0f26ea04375ed116a0b..e84b7a7eeb50ddfb6dccce7fec012c757e43e94d 100644 --- a/src/share/classes/java/beans/beancontext/BeanContextChild.java +++ b/src/share/classes/java/beans/beancontext/BeanContextChild.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,7 +82,7 @@ public interface BeanContextChild { *

    * @param bc The BeanContext with which * to associate this BeanContextChild. - * @throws PropertyVetoException if the + * @throws PropertyVetoException if the * addition of the specified BeanContext is refused. */ void setBeanContext(BeanContext bc) throws PropertyVetoException; diff --git a/src/share/classes/java/beans/beancontext/BeanContextChildSupport.java b/src/share/classes/java/beans/beancontext/BeanContextChildSupport.java index 056913b654aa5ae22c7d5142d7fb2b1e42e62d9f..b2b855867b57a262eeeafd7de9a6b20df582dbe0 100644 --- a/src/share/classes/java/beans/beancontext/BeanContextChildSupport.java +++ b/src/share/classes/java/beans/beancontext/BeanContextChildSupport.java @@ -78,6 +78,7 @@ public class BeanContextChildSupport implements BeanContextChild, BeanContextSer * construct a BeanContextChildSupport where the JavaBean component * itself implements BeanContextChild, and encapsulates this, delegating * that interface to this implementation + * @param bcc the underlying bean context child */ public BeanContextChildSupport(BeanContextChild bcc) { @@ -94,7 +95,7 @@ public class BeanContextChildSupport implements BeanContextChild, BeanContextSer * this BeanContextChildSupport. * @param bc the new value to be assigned to the BeanContext * property - * @throws PropertyVetoException if the change is rejected + * @throws PropertyVetoException if the change is rejected */ public synchronized void setBeanContext(BeanContext bc) throws PropertyVetoException { if (bc == beanContext) return; @@ -361,6 +362,9 @@ public class BeanContextChildSupport implements BeanContextChild, BeanContextSer */ protected VetoableChangeSupport vcSupport; + /** + * The bean context. + */ protected transient BeanContext beanContext; /** diff --git a/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java b/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java index 6b5f4f5609cd653d9c791b0df5067e53a684fdaa..24406d4e7db9b56fe312a4541c66214dd4dd96a2 100644 --- a/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java +++ b/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -103,6 +103,7 @@ public class BeanContextMembershipEvent extends BeanContextEvent { * Is the child specified affected by the event? * @return true if affected, false * if not + * @param child the object to check for being affected */ public boolean contains(Object child) { return children.contains(child); diff --git a/src/share/classes/java/beans/beancontext/BeanContextServices.java b/src/share/classes/java/beans/beancontext/BeanContextServices.java index 168056c260d8b240b1e9fe2bc5830ebf5526b5a6..0348817bfe86d8a3c4bc9c1b44db9ee37b8e0203 100644 --- a/src/share/classes/java/beans/beancontext/BeanContextServices.java +++ b/src/share/classes/java/beans/beancontext/BeanContextServices.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,7 @@ public interface BeanContextServices extends BeanContext, BeanContextServicesLis * @param serviceClass the service to add * @param serviceProvider the BeanContextServiceProvider * associated with the service + * @return true if the service was successful added, false otherwise */ boolean addService(Class serviceClass, BeanContextServiceProvider serviceProvider); @@ -108,7 +109,7 @@ public interface BeanContextServices extends BeanContext, BeanContextServicesLis * @param bcsrl the * BeanContextServiceRevokedListener to notify * if the service should later become revoked - * @throws TooManyListenersException + * @throws TooManyListenersException if there are too many listeners * @return a reference to this context's named * Service as requested or null */ diff --git a/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java b/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java index 94d104b14bdc55a49c834bf4f3da55728c204898..ca0942efef983fa3de939d04d21da62e2a6de09d 100644 --- a/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java +++ b/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -603,12 +603,16 @@ public class BeanContextServicesSupport extends BeanContextSupport serviceProvider = bcsp; } + /** + * Returns the service provider. + * @return the service provider + */ protected BeanContextServiceProvider getServiceProvider() { return serviceProvider; } - /* - * fields + /** + * The service provider. */ protected BeanContextServiceProvider serviceProvider; @@ -618,6 +622,9 @@ public class BeanContextServicesSupport extends BeanContextSupport * subclasses can override this method to create new subclasses of * BCSSServiceProvider without having to overrride addService() in * order to instantiate. + * @param sc the class + * @param bcsp the service provider + * @return a service provider without overriding addService() */ protected BCSSServiceProvider createBCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) { @@ -629,7 +636,7 @@ public class BeanContextServicesSupport extends BeanContextSupport /** * add a BeanContextServicesListener * - * @throws NullPointerException + * @throws NullPointerException if the argument is null */ public void addBeanContextServicesListener(BeanContextServicesListener bcsl) { @@ -660,6 +667,8 @@ public class BeanContextServicesSupport extends BeanContextSupport /** * add a service + * @param serviceClass the service class + * @param bcsp the service provider */ public boolean addService(Class serviceClass, BeanContextServiceProvider bcsp) { @@ -668,6 +677,10 @@ public class BeanContextServicesSupport extends BeanContextSupport /** * add a service + * @param serviceClass the service class + * @param bcsp the service provider + * @param fireEvent whether or not an event should be fired + * @return true if the service was successfully added */ protected boolean addService(Class serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent) { @@ -709,6 +722,9 @@ public class BeanContextServicesSupport extends BeanContextSupport /** * remove a service + * @param serviceClass the service class + * @param bcsp the service provider + * @param revokeCurrentServicesNow whether or not to revoke the service */ public void revokeService(Class serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow) { @@ -1067,6 +1083,7 @@ public class BeanContextServicesSupport extends BeanContextSupport /** * Fires a BeanContextServiceEvent notifying of a new service. + * @param serviceClass the service class */ protected final void fireServiceAdded(Class serviceClass) { BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass); @@ -1109,6 +1126,8 @@ public class BeanContextServicesSupport extends BeanContextSupport * Fires a BeanContextServiceRevokedEvent * indicating that a particular service is * no longer available. + * @param serviceClass the service class + * @param revokeNow whether or not the event should be revoked now */ protected final void fireServiceRevoked(Class serviceClass, boolean revokeNow) { Object[] copy; diff --git a/src/share/classes/java/beans/beancontext/BeanContextSupport.java b/src/share/classes/java/beans/beancontext/BeanContextSupport.java index 85b1a5a292fd9b33b4fab1e15143a593ac5aae74..a549e2dc317c9c997a97afe668e0859f4011b341 100644 --- a/src/share/classes/java/beans/beancontext/BeanContextSupport.java +++ b/src/share/classes/java/beans/beancontext/BeanContextSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,7 +62,6 @@ import java.util.Map; /** * This helper class provides a utility implementation of the * java.beans.beancontext.BeanContext interface. - *

    *

    * Since this class directly implements the BeanContext interface, the class * can, and is intended to be used either by subclassing this implementation, @@ -351,9 +350,8 @@ public class BeanContextSupport extends BeanContextChildSupport * of Child without having to override add() or the other Collection * methods that add children to the set. *

    - * * @param targetChild the child to create the Child on behalf of - * @param peer the peer if the tragetChild and the peer are related by an implementation of BeanContextProxy + * @param peer the peer if the tragetChild and the peer are related by an implementation of BeanContextProxy * @return Subtype-specific subclass of Child without overriding collection methods */ protected BCSChild createBCSChild(Object targetChild, Object peer) { @@ -492,6 +490,7 @@ public class BeanContextSupport extends BeanContextChildSupport * @param callChildSetBC used to indicate that * the child should be notified that it is no * longer nested in this BeanContext. + * @return whether or not was present before being removed */ protected boolean remove(Object targetChild, boolean callChildSetBC) { @@ -580,7 +579,8 @@ public class BeanContextSupport extends BeanContextChildSupport /** * add Collection to set of Children (Unsupported) * implementations must synchronized on the hierarchy lock and "children" protected field - * @throws UnsupportedOperationException + * @throws UnsupportedOperationException thrown unconditionally by this implementation + * @return this implementation unconditionally throws {@code UnsupportedOperationException} */ public boolean addAll(Collection c) { throw new UnsupportedOperationException(); @@ -589,7 +589,9 @@ public class BeanContextSupport extends BeanContextChildSupport /** * remove all specified children (Unsupported) * implementations must synchronized on the hierarchy lock and "children" protected field - * @throws UnsupportedOperationException + * @throws UnsupportedOperationException thrown unconditionally by this implementation + * @return this implementation unconditionally throws {@code UnsupportedOperationException} + */ public boolean removeAll(Collection c) { throw new UnsupportedOperationException(); @@ -599,7 +601,8 @@ public class BeanContextSupport extends BeanContextChildSupport /** * retain only specified children (Unsupported) * implementations must synchronized on the hierarchy lock and "children" protected field - * @throws UnsupportedOperationException + * @throws UnsupportedOperationException thrown unconditionally by this implementation + * @return this implementation unconditionally throws {@code UnsupportedOperationException} */ public boolean retainAll(Collection c) { throw new UnsupportedOperationException(); @@ -608,7 +611,7 @@ public class BeanContextSupport extends BeanContextChildSupport /** * clear the children (Unsupported) * implementations must synchronized on the hierarchy lock and "children" protected field - * @throws UnsupportedOperationException + * @throws UnsupportedOperationException thrown unconditionally by this implementation */ public void clear() { throw new UnsupportedOperationException(); @@ -618,7 +621,7 @@ public class BeanContextSupport extends BeanContextChildSupport * Adds a BeanContextMembershipListener * * @param bcml the BeanContextMembershipListener to add - * @throws NullPointerException + * @throws NullPointerException if the argument is null */ public void addBeanContextMembershipListener(BeanContextMembershipListener bcml) { @@ -636,7 +639,7 @@ public class BeanContextSupport extends BeanContextChildSupport * Removes a BeanContextMembershipListener * * @param bcml the BeanContextMembershipListener to remove - * @throws NullPointerException + * @throws NullPointerException if the argument is null */ public void removeBeanContextMembershipListener(BeanContextMembershipListener bcml) { @@ -655,7 +658,7 @@ public class BeanContextSupport extends BeanContextChildSupport * @param bcc the child object making the request. * * @return the requested resource as an InputStream - * @throws NullPointerException + * @throws NullPointerException if the argument is null */ public InputStream getResourceAsStream(String name, BeanContextChild bcc) { @@ -849,6 +852,8 @@ public class BeanContextSupport extends BeanContextChildSupport * * This method should not however be used by subclasses to replace their * own implementation (if any) of writeObject(). + * @param oos the {@code ObjectOutputStream} to use during serialization + * @throws IOException if serialization failed */ protected void bcsPreSerializationHook(ObjectOutputStream oos) throws IOException { @@ -864,6 +869,9 @@ public class BeanContextSupport extends BeanContextChildSupport * * This method should not however be used by subclasses to replace their * own implementation (if any) of readObject(). + * @param ois the {@code ObjectInputStream} to use during deserialization + * @throws IOException if deserialization failed + * @throws ClassNotFoundException if needed classes are not found */ protected void bcsPreDeserializationHook(ObjectInputStream ois) throws IOException, ClassNotFoundException { @@ -914,6 +922,8 @@ public class BeanContextSupport extends BeanContextChildSupport * used by readObject to deserialize a collection. * @param ois the ObjectInputStream to use * @param coll the Collection + * @throws IOException if deserialization failed + * @throws ClassNotFoundException if needed classes are not found */ protected final void deserialize(ObjectInputStream ois, Collection coll) throws IOException, ClassNotFoundException { int count = 0; @@ -1005,6 +1015,9 @@ public class BeanContextSupport extends BeanContextChildSupport * When an instance of this class is used as a delegate for the * implementation of the BeanContext protocols (and its subprotocols) * there exists a 'chicken and egg' problem during deserialization + * @param ois the ObjectInputStream to use + * @throws IOException if deserialization failed + * @throws ClassNotFoundException if needed classes are not found */ public final void readChildren(ObjectInputStream ois) throws IOException, ClassNotFoundException { @@ -1122,6 +1135,7 @@ public class BeanContextSupport extends BeanContextChildSupport * immediately prior to their being added to the BeanContext. *

    * + * @param targetChild the child to create the Child on behalf of * @return true iff the child may be added to this BeanContext, otherwise false. */ @@ -1136,6 +1150,7 @@ public class BeanContextSupport extends BeanContextChildSupport * immediately prior to their being removed from the BeanContext. *

    * + * @param targetChild the child to create the Child on behalf of * @return true iff the child may be removed from this BeanContext, otherwise false. */ @@ -1147,6 +1162,8 @@ public class BeanContextSupport extends BeanContextChildSupport * subclasses may override this method to simply extend add() semantics * after the child has been added and before the event notification has * occurred. The method is called with the child synchronized. + * @param child the child + * @param bcsc the BCSChild */ protected void childJustAddedHook(Object child, BCSChild bcsc) { @@ -1156,6 +1173,8 @@ public class BeanContextSupport extends BeanContextChildSupport * subclasses may override this method to simply extend remove() semantics * after the child has been removed and before the event notification has * occurred. The method is called with the child synchronized. + * @param child the child + * @param bcsc the BCSChild */ protected void childJustRemovedHook(Object child, BCSChild bcsc) { @@ -1254,6 +1273,7 @@ public class BeanContextSupport extends BeanContextChildSupport /** * Fire a BeanContextshipEvent on the BeanContextMembershipListener interface + * @param bcme the event to fire */ protected final void fireChildrenAdded(BeanContextMembershipEvent bcme) { @@ -1267,6 +1287,7 @@ public class BeanContextSupport extends BeanContextChildSupport /** * Fire a BeanContextshipEvent on the BeanContextMembershipListener interface + * @param bcme the event to fire */ protected final void fireChildrenRemoved(BeanContextMembershipEvent bcme) { diff --git a/src/share/classes/java/net/Authenticator.java b/src/share/classes/java/net/Authenticator.java index bc9945c5ddbb56653c9fa4c32ab67a5ed9adf294..28df05ca0d367cea036fec93a41cc19923402d1a 100644 --- a/src/share/classes/java/net/Authenticator.java +++ b/src/share/classes/java/net/Authenticator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -103,17 +103,17 @@ class Authenticator { * Sets the authenticator that will be used by the networking code * when a proxy or an HTTP server asks for authentication. *

    - * First, if there is a security manager, its checkPermission + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * NetPermission("setDefaultAuthenticator") permission. + * {@code NetPermission("setDefaultAuthenticator")} permission. * This may result in a java.lang.SecurityException. * - * @param a The authenticator to be set. If a is null then + * @param a The authenticator to be set. If a is {@code null} then * any previously set authenticator is removed. * * @throws SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * setting the default authenticator. * * @see SecurityManager#checkPermission @@ -134,9 +134,9 @@ class Authenticator { * Ask the authenticator that has been registered with the system * for a password. *

    - * First, if there is a security manager, its checkPermission + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * NetPermission("requestPasswordAuthentication") permission. + * {@code NetPermission("requestPasswordAuthentication")} permission. * This may result in a java.lang.SecurityException. * * @param addr The InetAddress of the site requesting authorization, @@ -151,7 +151,7 @@ class Authenticator { * * @throws SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * the password authentication request. * * @see SecurityManager#checkPermission @@ -193,9 +193,9 @@ class Authenticator { * because the hostname can be provided in cases where the InetAddress * is not available. *

    - * First, if there is a security manager, its checkPermission + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * NetPermission("requestPasswordAuthentication") permission. + * {@code NetPermission("requestPasswordAuthentication")} permission. * This may result in a java.lang.SecurityException. * * @param host The hostname of the site requesting authentication. @@ -211,7 +211,7 @@ class Authenticator { * * @throws SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * the password authentication request. * * @see SecurityManager#checkPermission @@ -254,9 +254,9 @@ class Authenticator { * Ask the authenticator that has been registered with the system * for a password. *

    - * First, if there is a security manager, its checkPermission + * First, if there is a security manager, its {@code checkPermission} * method is called with a - * NetPermission("requestPasswordAuthentication") permission. + * {@code NetPermission("requestPasswordAuthentication")} permission. * This may result in a java.lang.SecurityException. * * @param host The hostname of the site requesting authentication. @@ -275,7 +275,7 @@ class Authenticator { * * @throws SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * the password authentication request. * * @see SecurityManager#checkPermission @@ -320,8 +320,8 @@ class Authenticator { } /** - * Gets the hostname of the - * site or proxy requesting authentication, or null + * Gets the {@code hostname} of the + * site or proxy requesting authentication, or {@code null} * if not available. * * @return the hostname of the connection requiring authentication, or null @@ -333,8 +333,8 @@ class Authenticator { } /** - * Gets the InetAddress of the - * site requesting authorization, or null + * Gets the {@code InetAddress} of the + * site requesting authorization, or {@code null} * if not available. * * @return the InetAddress of the site requesting authorization, or null @@ -346,7 +346,7 @@ class Authenticator { /** * Gets the port number for the requested connection. - * @return an int indicating the + * @return an {@code int} indicating the * port for the requested connection. */ protected final int getRequestingPort() { diff --git a/src/share/classes/java/net/ContentHandler.java b/src/share/classes/java/net/ContentHandler.java index 79bcb0a30cadb531e8200e401e1e2829a60fbce5..8c585cbf35405a59a66d97542dfe2d43c9257e88 100644 --- a/src/share/classes/java/net/ContentHandler.java +++ b/src/share/classes/java/net/ContentHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,21 +28,21 @@ package java.net; import java.io.IOException; /** - * The abstract class ContentHandler is the superclass - * of all classes that read an Object from a - * URLConnection. + * The abstract class {@code ContentHandler} is the superclass + * of all classes that read an {@code Object} from a + * {@code URLConnection}. *

    * An application does not generally call the - * getContent method in this class directly. Instead, an - * application calls the getContent method in class - * URL or in URLConnection. + * {@code getContent} method in this class directly. Instead, an + * application calls the {@code getContent} method in class + * {@code URL} or in {@code URLConnection}. * The application's content handler factory (an instance of a class that - * implements the interface ContentHandlerFactory set - * up by a call to setContentHandler) is - * called with a String giving the MIME type of the + * implements the interface {@code ContentHandlerFactory} set + * up by a call to {@code setContentHandler}) is + * called with a {@code String} giving the MIME type of the * object being received on the socket. The factory returns an - * instance of a subclass of ContentHandler, and its - * getContent method is called to create the object. + * instance of a subclass of {@code ContentHandler}, and its + * {@code getContent} method is called to create the object. *

    * If no content handler could be found, URLConnection will * look for a content handler in a user-defineable set of places. @@ -75,7 +75,7 @@ abstract public class ContentHandler { * creates an object from it. * * @param urlc a URL connection. - * @return the object read by the ContentHandler. + * @return the object read by the {@code ContentHandler}. * @exception IOException if an I/O error occurs while reading the object. */ abstract public Object getContent(URLConnection urlc) throws IOException; @@ -90,7 +90,7 @@ abstract public class ContentHandler { * * @param urlc a URL connection. * @param classes an array of types requested - * @return the object read by the ContentHandler that is + * @return the object read by the {@code ContentHandler} that is * the first match of the suggested types. * null if none of the requested are supported. * @exception IOException if an I/O error occurs while reading the object. diff --git a/src/share/classes/java/net/ContentHandlerFactory.java b/src/share/classes/java/net/ContentHandlerFactory.java index 69a909c5795d948acd231b8ace8aeb9c6c5de7cb..64112e3a80620b7dc6fe3151d2d4e30c64159487 100644 --- a/src/share/classes/java/net/ContentHandlerFactory.java +++ b/src/share/classes/java/net/ContentHandlerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1997, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,10 +28,10 @@ package java.net; /** * This interface defines a factory for content handlers. An * implementation of this interface should map a MIME type into an - * instance of ContentHandler. + * instance of {@code ContentHandler}. *

    - * This interface is used by the URLStreamHandler class - * to create a ContentHandler for a MIME type. + * This interface is used by the {@code URLStreamHandler} class + * to create a {@code ContentHandler} for a MIME type. * * @author James Gosling * @see java.net.ContentHandler @@ -40,13 +40,13 @@ package java.net; */ public interface ContentHandlerFactory { /** - * Creates a new ContentHandler to read an object from - * a URLStreamHandler. + * Creates a new {@code ContentHandler} to read an object from + * a {@code URLStreamHandler}. * * @param mimetype the MIME type for which a content handler is desired. - * @return a new ContentHandler to read an object from a - * URLStreamHandler. + * @return a new {@code ContentHandler} to read an object from a + * {@code URLStreamHandler}. * @see java.net.ContentHandler * @see java.net.URLStreamHandler */ diff --git a/src/share/classes/java/net/CookieHandler.java b/src/share/classes/java/net/CookieHandler.java index 3fbc5bc1ce14c343d5818574b0d02738a31c9237..ef91d009feb6e421a46d7f919dd50b6402a9f806 100644 --- a/src/share/classes/java/net/CookieHandler.java +++ b/src/share/classes/java/net/CookieHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,7 +66,7 @@ public abstract class CookieHandler { * there is no system-wide cookie handler currently set. * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}("getCookieHandler") + * {@link NetPermission}{@code ("getCookieHandler")} * @see #setDefault(CookieHandler) */ public synchronized static CookieHandler getDefault() { @@ -83,10 +83,10 @@ public abstract class CookieHandler { * Note: non-standard http protocol handlers may ignore this setting. * * @param cHandler The HTTP cookie handler, or - * null to unset. + * {@code null} to unset. * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}("setCookieHandler") + * {@link NetPermission}{@code ("setCookieHandler")} * @see #getDefault() */ public synchronized static void setDefault(CookieHandler cHandler) { @@ -114,7 +114,7 @@ public abstract class CookieHandler { * called after all request headers related to choosing cookies * are added, and before the request is sent.

    * - * @param uri a URI representing the intended use for the + * @param uri a {@code URI} representing the intended use for the * cookies * @param requestHeaders - a Map from request header * field names to lists of field values representing @@ -136,7 +136,7 @@ public abstract class CookieHandler { * fields that are named Set-Cookie2, present in the response * headers into a cookie cache. * - * @param uri a URI where the cookies come from + * @param uri a {@code URI} where the cookies come from * @param responseHeaders an immutable map from field names to * lists of field values representing the response * header fields returned diff --git a/src/share/classes/java/net/CookieManager.java b/src/share/classes/java/net/CookieManager.java index b8cae55342b572496e7395347f9c9a0e1e79c7cf..bb80f0a7f25bcefdb4c7e4098e13b55699d5f743 100644 --- a/src/share/classes/java/net/CookieManager.java +++ b/src/share/classes/java/net/CookieManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -131,7 +131,7 @@ public class CookieManager extends CookieHandler * *

    This constructor will create new cookie manager with default * cookie store and accept policy. The effect is same as - * CookieManager(null, null). + * {@code CookieManager(null, null)}. */ public CookieManager() { this(null, null); @@ -141,12 +141,12 @@ public class CookieManager extends CookieHandler /** * Create a new cookie manager with specified cookie store and cookie policy. * - * @param store a CookieStore to be used by cookie manager. - * if null, cookie manager will use a default one, + * @param store a {@code CookieStore} to be used by cookie manager. + * if {@code null}, cookie manager will use a default one, * which is an in-memory CookieStore implmentation. - * @param cookiePolicy a CookiePolicy instance + * @param cookiePolicy a {@code CookiePolicy} instance * to be used by cookie manager as policy callback. - * if null, ACCEPT_ORIGINAL_SERVER will + * if {@code null}, ACCEPT_ORIGINAL_SERVER will * be used. */ public CookieManager(CookieStore store, @@ -170,11 +170,11 @@ public class CookieManager extends CookieHandler /** * To set the cookie policy of this cookie manager. * - *

    A instance of CookieManager will have + *

    A instance of {@code CookieManager} will have * cookie policy ACCEPT_ORIGINAL_SERVER by default. Users always * can call this method to set another cookie policy. * - * @param cookiePolicy the cookie policy. Can be null, which + * @param cookiePolicy the cookie policy. Can be {@code null}, which * has no effects on current cookie policy. */ public void setCookiePolicy(CookiePolicy cookiePolicy) { diff --git a/src/share/classes/java/net/CookiePolicy.java b/src/share/classes/java/net/CookiePolicy.java index 3de98f904da2224ffc425a6fb1f9e8134aa4a698..80948359153f2dbb85f2d86e3da067edd8484c42 100644 --- a/src/share/classes/java/net/CookiePolicy.java +++ b/src/share/classes/java/net/CookiePolicy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,8 +71,8 @@ public interface CookiePolicy { * * @param uri the URI to consult accept policy with * @param cookie the HttpCookie object in question - * @return true if this cookie should be accepted; - * otherwise, false + * @return {@code true} if this cookie should be accepted; + * otherwise, {@code false} */ public boolean shouldAccept(URI uri, HttpCookie cookie); } diff --git a/src/share/classes/java/net/CookieStore.java b/src/share/classes/java/net/CookieStore.java index 89b9c41dd01a717dc39b7bd845dc03b6ae6b8eaa..648817e4b52df2286561179319c915d0b00d5355 100644 --- a/src/share/classes/java/net/CookieStore.java +++ b/src/share/classes/java/net/CookieStore.java @@ -32,8 +32,8 @@ import java.util.Map; * A CookieStore object represents a storage for cookie. Can store and retrieve * cookies. * - *

    {@link CookieManager} will call CookieStore.add to save cookies - * for every incoming HTTP response, and call CookieStore.get to + *

    {@link CookieManager} will call {@code CookieStore.add} to save cookies + * for every incoming HTTP response, and call {@code CookieStore.get} to * retrieve cookie for every outgoing HTTP request. A CookieStore * is responsible for removing HttpCookie instances which have expired. * @@ -55,11 +55,11 @@ public interface CookieStore { * then it is replaced with the new one. * * @param uri the uri this cookie associated with. - * if null, this cookie will not be associated + * if {@code null}, this cookie will not be associated * with an URI * @param cookie the cookie to store * - * @throws NullPointerException if cookie is null + * @throws NullPointerException if {@code cookie} is {@code null} * * @see #get * @@ -77,7 +77,7 @@ public interface CookieStore { * * @param uri the uri associated with the cookies to be returned * - * @throws NullPointerException if uri is null + * @throws NullPointerException if {@code uri} is {@code null} * * @see #add * @@ -108,14 +108,14 @@ public interface CookieStore { * Remove a cookie from store. * * @param uri the uri this cookie associated with. - * if null, the cookie to be removed is not associated - * with an URI when added; if not null, the cookie + * if {@code null}, the cookie to be removed is not associated + * with an URI when added; if not {@code null}, the cookie * to be removed is associated with the given URI when added. * @param cookie the cookie to remove * - * @return true if this store contained the specified cookie + * @return {@code true} if this store contained the specified cookie * - * @throws NullPointerException if cookie is null + * @throws NullPointerException if {@code cookie} is {@code null} */ public boolean remove(URI uri, HttpCookie cookie); @@ -123,7 +123,7 @@ public interface CookieStore { /** * Remove all cookies in this cookie store. * - * @return true if this store changed as a result of the call + * @return {@code true} if this store changed as a result of the call */ public boolean removeAll(); } diff --git a/src/share/classes/java/net/DatagramPacket.java b/src/share/classes/java/net/DatagramPacket.java index 1f6af9eb939d97a91b72d4cd68921ab058dee218..b0728f01cd0d55dea7d1add8d6ebe18dc0e46f82 100644 --- a/src/share/classes/java/net/DatagramPacket.java +++ b/src/share/classes/java/net/DatagramPacket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,11 +68,11 @@ class DatagramPacket { int port; /** - * Constructs a DatagramPacket for receiving packets of - * length length, specifying an offset into the buffer. + * Constructs a {@code DatagramPacket} for receiving packets of + * length {@code length}, specifying an offset into the buffer. *

    - * The length argument must be less than or equal to - * buf.length. + * The {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf buffer for holding the incoming datagram. * @param offset the offset for the buffer @@ -87,11 +87,11 @@ class DatagramPacket { } /** - * Constructs a DatagramPacket for receiving packets of - * length length. + * Constructs a {@code DatagramPacket} for receiving packets of + * length {@code length}. *

    - * The length argument must be less than or equal to - * buf.length. + * The {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf buffer for holding the incoming datagram. * @param length the number of bytes to read. @@ -102,10 +102,10 @@ class DatagramPacket { /** * Constructs a datagram packet for sending packets of length - * length with offset ioffsetto the + * {@code length} with offset {@code ioffset}to the * specified port number on the specified host. The - * length argument must be less than or equal to - * buf.length. + * {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf the packet data. * @param offset the packet data offset. @@ -125,10 +125,10 @@ class DatagramPacket { /** * Constructs a datagram packet for sending packets of length - * length with offset ioffsetto the + * {@code length} with offset {@code ioffset}to the * specified port number on the specified host. The - * length argument must be less than or equal to - * buf.length. + * {@code length} argument must be less than or equal to + * {@code buf.length}. * * @param buf the packet data. * @param offset the packet data offset. @@ -147,9 +147,9 @@ class DatagramPacket { /** * Constructs a datagram packet for sending packets of length - * length to the specified port number on the specified - * host. The length argument must be less than or equal - * to buf.length. + * {@code length} to the specified port number on the specified + * host. The {@code length} argument must be less than or equal + * to {@code buf.length}. * * @param buf the packet data. * @param length the packet length. @@ -164,9 +164,9 @@ class DatagramPacket { /** * Constructs a datagram packet for sending packets of length - * length to the specified port number on the specified - * host. The length argument must be less than or equal - * to buf.length. + * {@code length} to the specified port number on the specified + * host. The {@code length} argument must be less than or equal + * to {@code buf.length}. * * @param buf the packet data. * @param length the packet length. @@ -207,8 +207,8 @@ class DatagramPacket { /** * Returns the data buffer. The data received or the data to be sent - * starts from the offset in the buffer, - * and runs for length long. + * starts from the {@code offset} in the buffer, + * and runs for {@code length} long. * * @return the buffer used to receive or send data * @see #setData(byte[], int, int) @@ -277,7 +277,7 @@ class DatagramPacket { /** * Sets the IP address of the machine to which this datagram * is being sent. - * @param iaddr the InetAddress + * @param iaddr the {@code InetAddress} * @since JDK1.1 * @see #getAddress() */ @@ -303,7 +303,7 @@ class DatagramPacket { * Sets the SocketAddress (usually IP address + port number) of the remote * host to which this datagram is being sent. * - * @param address the SocketAddress + * @param address the {@code SocketAddress} * @throws IllegalArgumentException if address is null or is a * SocketAddress subclass not supported by this socket * @@ -324,7 +324,7 @@ class DatagramPacket { * Gets the SocketAddress (usually IP address + port number) of the remote * host that this packet is being sent to or is coming from. * - * @return the SocketAddress + * @return the {@code SocketAddress} * @since 1.4 * @see #setSocketAddress */ @@ -335,7 +335,7 @@ class DatagramPacket { /** * Set the data buffer for this packet. With the offset of * this DatagramPacket set to 0, and the length set to - * the length of buf. + * the length of {@code buf}. * * @param buf the buffer to set for this packet. * diff --git a/src/share/classes/java/net/DatagramSocket.java b/src/share/classes/java/net/DatagramSocket.java index d6ffca23755ed1b8411f47052b90441d639da2c5..ab60a263ac7479bdb4dad34fea89246d11cd8e5c 100644 --- a/src/share/classes/java/net/DatagramSocket.java +++ b/src/share/classes/java/net/DatagramSocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,14 +47,14 @@ import java.security.PrivilegedExceptionAction; * a DatagramSocket is bound to a more specific address. *

    * Example: - * + * {@code * DatagramSocket s = new DatagramSocket(null); * s.bind(new InetSocketAddress(8888)); - * + * } * Which is equivalent to: - * + * {@code * DatagramSocket s = new DatagramSocket(8888); - * + * } * Both cases will create a DatagramSocket able to receive broadcasts on * UDP port 8888. * @@ -161,14 +161,14 @@ class DatagramSocket implements java.io.Closeable { * an IP address chosen by the kernel. * *

    If there is a security manager, - * its checkListen method is first called + * its {@code checkListen} method is first called * with 0 as its argument to ensure the operation is allowed. * This could result in a SecurityException. * * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen */ @@ -195,21 +195,21 @@ class DatagramSocket implements java.io.Closeable { * Creates a datagram socket, bound to the specified local * socket address. *

    - * If, if the address is null, creates an unbound socket. + * If, if the address is {@code null}, creates an unbound socket. *

    *

    If there is a security manager, - * its checkListen method is first called + * its {@code checkListen} method is first called * with the port from the socket address * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * - * @param bindaddr local socket address to bind, or null + * @param bindaddr local socket address to bind, or {@code null} * for an unbound socket. * * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen * @since 1.4 @@ -234,8 +234,8 @@ class DatagramSocket implements java.io.Closeable { * an IP address chosen by the kernel. * *

    If there is a security manager, - * its checkListen method is first called - * with the port argument + * its {@code checkListen} method is first called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * @@ -243,7 +243,7 @@ class DatagramSocket implements java.io.Closeable { * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen */ @@ -259,8 +259,8 @@ class DatagramSocket implements java.io.Closeable { * an IP address chosen by the kernel. * *

    If there is a security manager, - * its checkListen method is first called - * with the port argument + * its {@code checkListen} method is first called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * @@ -270,7 +270,7 @@ class DatagramSocket implements java.io.Closeable { * @exception SocketException if the socket could not be opened, * or the socket could not bind to the specified local port. * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * * @see SecurityManager#checkListen * @since JDK1.1 @@ -319,10 +319,10 @@ class DatagramSocket implements java.io.Closeable { } /** - * Get the DatagramSocketImpl attached to this socket, + * Get the {@code DatagramSocketImpl} attached to this socket, * creating it if necessary. * - * @return the DatagramSocketImpl attached to that + * @return the {@code DatagramSocketImpl} attached to that * DatagramSocket * @throws SocketException if creation fails. * @since 1.4 @@ -336,14 +336,14 @@ class DatagramSocket implements java.io.Closeable { /** * Binds this DatagramSocket to a specific address and port. *

    - * If the address is null, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. *

    * @param addr The address and port to bind to. * @throws SocketException if any error happens during the bind, or if the * socket is already bound. * @throws SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @throws IllegalArgumentException if addr is a SocketAddress subclass * not supported by this socket. * @since 1.4 @@ -496,7 +496,7 @@ class DatagramSocket implements java.io.Closeable { * Returns the binding state of the socket. *

    * If the socket was bound prior to being {@link #close closed}, - * then this method will continue to return true + * then this method will continue to return {@code true} * after the socket is closed. * * @return true if the socket successfully bound to an address @@ -510,7 +510,7 @@ class DatagramSocket implements java.io.Closeable { * Returns the connection state of the socket. *

    * If the socket was connected prior to being {@link #close closed}, - * then this method will continue to return true + * then this method will continue to return {@code true} * after the socket is closed. * * @return true if the socket successfully connected to a server @@ -522,7 +522,7 @@ class DatagramSocket implements java.io.Closeable { /** * Returns the address to which this socket is connected. Returns - * null if the socket is not connected. + * {@code null} if the socket is not connected. *

    * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected address @@ -536,7 +536,7 @@ class DatagramSocket implements java.io.Closeable { /** * Returns the port number to which this socket is connected. - * Returns -1 if the socket is not connected. + * Returns {@code -1} if the socket is not connected. *

    * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected port number @@ -550,14 +550,14 @@ class DatagramSocket implements java.io.Closeable { /** * Returns the address of the endpoint this socket is connected to, or - * null if it is unconnected. + * {@code null} if it is unconnected. *

    * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected address * after the socket is closed. * - * @return a SocketAddress representing the remote - * endpoint of this socket, or null if it is + * @return a {@code SocketAddress} representing the remote + * endpoint of this socket, or {@code null} if it is * not connected yet. * @see #getInetAddress() * @see #getPort() @@ -573,8 +573,8 @@ class DatagramSocket implements java.io.Closeable { /** * Returns the address of the endpoint this socket is bound to. * - * @return a SocketAddress representing the local endpoint of this - * socket, or null if it is closed or not bound yet. + * @return a {@code SocketAddress} representing the local endpoint of this + * socket, or {@code null} if it is closed or not bound yet. * @see #getLocalAddress() * @see #getLocalPort() * @see #bind(SocketAddress) @@ -591,28 +591,28 @@ class DatagramSocket implements java.io.Closeable { /** * Sends a datagram packet from this socket. The - * DatagramPacket includes information indicating the + * {@code DatagramPacket} includes information indicating the * data to be sent, its length, the IP address of the remote host, * and the port number on the remote host. * *

    If there is a security manager, and the socket is not currently * connected to a remote address, this method first performs some - * security checks. First, if p.getAddress().isMulticastAddress() + * security checks. First, if {@code p.getAddress().isMulticastAddress()} * is true, this method calls the - * security manager's checkMulticast method - * with p.getAddress() as its argument. + * security manager's {@code checkMulticast} method + * with {@code p.getAddress()} as its argument. * If the evaluation of that expression is false, * this method instead calls the security manager's - * checkConnect method with arguments - * p.getAddress().getHostAddress() and - * p.getPort(). Each call to a security manager method + * {@code checkConnect} method with arguments + * {@code p.getAddress().getHostAddress()} and + * {@code p.getPort()}. Each call to a security manager method * could result in a SecurityException if the operation is not allowed. * - * @param p the DatagramPacket to be sent. + * @param p the {@code DatagramPacket} to be sent. * * @exception IOException if an I/O error occurs. * @exception SecurityException if a security manager exists and its - * checkMulticast or checkConnect + * {@code checkMulticast} or {@code checkConnect} * method doesn't allow the send. * @exception PortUnreachableException may be thrown if the socket is connected * to a currently unreachable destination. Note, there is no @@ -674,20 +674,20 @@ class DatagramSocket implements java.io.Closeable { /** * Receives a datagram packet from this socket. When this method - * returns, the DatagramPacket's buffer is filled with + * returns, the {@code DatagramPacket}'s buffer is filled with * the data received. The datagram packet also contains the sender's * IP address, and the port number on the sender's machine. *

    * This method blocks until a datagram is received. The - * length field of the datagram packet object contains + * {@code length} field of the datagram packet object contains * the length of the received message. If the message is longer than * the packet's length, the message is truncated. *

    * If there is a security manager, a packet cannot be received if the - * security manager's checkAccept method + * security manager's {@code checkAccept} method * does not allow it. * - * @param p the DatagramPacket into which to place + * @param p the {@code DatagramPacket} into which to place * the incoming data. * @exception IOException if an I/O error occurs. * @exception SocketTimeoutException if setSoTimeout was previously called @@ -786,17 +786,17 @@ class DatagramSocket implements java.io.Closeable { * Gets the local address to which the socket is bound. * *

    If there is a security manager, its - * checkConnect method is first called - * with the host address and -1 + * {@code checkConnect} method is first called + * with the host address and {@code -1} * as its arguments to see if the operation is allowed. * * @see SecurityManager#checkConnect * @return the local address to which the socket is bound, - * null if the socket is closed, or - * an InetAddress representing + * {@code null} if the socket is closed, or + * an {@code InetAddress} representing * {@link InetAddress#isAnyLocalAddress wildcard} * address if either the socket is not bound, or - * the security manager checkConnect + * the security manager {@code checkConnect} * method does not allow the operation * @since 1.1 */ @@ -824,8 +824,8 @@ class DatagramSocket implements java.io.Closeable { * is bound. * * @return the port number on the local host to which this socket is bound, - -1 if the socket is closed, or - 0 if it is not bound yet. + {@code -1} if the socket is closed, or + {@code 0} if it is not bound yet. */ public int getLocalPort() { if (isClosed()) @@ -883,7 +883,7 @@ class DatagramSocket implements java.io.Closeable { /** * Sets the SO_SNDBUF option to the specified value for this - * DatagramSocket. The SO_SNDBUF option is used by the + * {@code DatagramSocket}. The SO_SNDBUF option is used by the * network implementation as a hint to size the underlying * network I/O buffers. The SO_SNDBUF setting may also be used * by the network implementation to determine the maximum size @@ -897,7 +897,7 @@ class DatagramSocket implements java.io.Closeable { * is high. *

    * Note: If {@link #send(DatagramPacket)} is used to send a - * DatagramPacket that is larger than the setting + * {@code DatagramPacket} that is larger than the setting * of SO_SNDBUF then it is implementation specific if the * packet is sent or discarded. * @@ -921,10 +921,10 @@ class DatagramSocket implements java.io.Closeable { } /** - * Get value of the SO_SNDBUF option for this DatagramSocket, that is the - * buffer size used by the platform for output on this DatagramSocket. + * Get value of the SO_SNDBUF option for this {@code DatagramSocket}, that is the + * buffer size used by the platform for output on this {@code DatagramSocket}. * - * @return the value of the SO_SNDBUF option for this DatagramSocket + * @return the value of the SO_SNDBUF option for this {@code DatagramSocket} * @exception SocketException if there is an error in * the underlying protocol, such as an UDP error. * @see #setSendBufferSize @@ -942,7 +942,7 @@ class DatagramSocket implements java.io.Closeable { /** * Sets the SO_RCVBUF option to the specified value for this - * DatagramSocket. The SO_RCVBUF option is used by the + * {@code DatagramSocket}. The SO_RCVBUF option is used by the * the network implementation as a hint to size the underlying * network I/O buffers. The SO_RCVBUF setting may also be used * by the network implementation to determine the maximum size @@ -979,10 +979,10 @@ class DatagramSocket implements java.io.Closeable { } /** - * Get value of the SO_RCVBUF option for this DatagramSocket, that is the - * buffer size used by the platform for input on this DatagramSocket. + * Get value of the SO_RCVBUF option for this {@code DatagramSocket}, that is the + * buffer size used by the platform for input on this {@code DatagramSocket}. * - * @return the value of the SO_RCVBUF option for this DatagramSocket + * @return the value of the SO_RCVBUF option for this {@code DatagramSocket} * @exception SocketException if there is an error in the underlying protocol, such as an UDP error. * @see #setReceiveBufferSize(int) */ @@ -1005,26 +1005,26 @@ class DatagramSocket implements java.io.Closeable { * socket to the same socket address. This is typically for the * purpose of receiving multicast packets * (See {@link java.net.MulticastSocket}). The - * SO_REUSEADDR socket option allows multiple + * {@code SO_REUSEADDR} socket option allows multiple * sockets to be bound to the same socket address if the - * SO_REUSEADDR socket option is enabled prior + * {@code SO_REUSEADDR} socket option is enabled prior * to binding the socket using {@link #bind(SocketAddress)}. *

    * Note: This functionality is not supported by all existing platforms, * so it is implementation specific whether this option will be ignored * or not. However, if it is not supported then - * {@link #getReuseAddress()} will always return false. + * {@link #getReuseAddress()} will always return {@code false}. *

    - * When a DatagramSocket is created the initial setting - * of SO_REUSEADDR is disabled. + * When a {@code DatagramSocket} is created the initial setting + * of {@code SO_REUSEADDR} is disabled. *

    - * The behaviour when SO_REUSEADDR is enabled or + * The behaviour when {@code SO_REUSEADDR} is enabled or * disabled after a socket is bound (See {@link #isBound()}) * is not defined. * * @param on whether to enable or disable the * @exception SocketException if an error occurs enabling or - * disabling the SO_RESUEADDR socket option, + * disabling the {@code SO_RESUEADDR} socket option, * or the socket is closed. * @since 1.4 * @see #getReuseAddress() @@ -1045,7 +1045,7 @@ class DatagramSocket implements java.io.Closeable { /** * Tests if SO_REUSEADDR is enabled. * - * @return a boolean indicating whether or not SO_REUSEADDR is enabled. + * @return a {@code boolean} indicating whether or not SO_REUSEADDR is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as an UDP error. * @since 1.4 @@ -1083,7 +1083,7 @@ class DatagramSocket implements java.io.Closeable { /** * Tests if SO_BROADCAST is enabled. - * @return a boolean indicating whether or not SO_BROADCAST is enabled. + * @return a {@code boolean} indicating whether or not SO_BROADCAST is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as an UDP error. * @since 1.4 @@ -1105,7 +1105,7 @@ class DatagramSocket implements java.io.Closeable { * 255} or an IllegalArgumentException will be thrown. *

    Notes: *

    For Internet Protocol v4 the value consists of an - * integer, the least significant 8 bits of which + * {@code integer}, the least significant 8 bits of which * represent the value of the TOS octet in IP packets sent by * the socket. * RFC 1349 defines the TOS values as follows: @@ -1123,10 +1123,10 @@ class DatagramSocket implements java.io.Closeable { * SocketException indicating that the operation is not * permitted. *

    - * for Internet Protocol v6 tc is the value that + * for Internet Protocol v6 {@code tc} is the value that * would be placed into the sin6_flowinfo field of the IP header. * - * @param tc an int value for the bitset. + * @param tc an {@code int} value for the bitset. * @throws SocketException if there is an error setting the * traffic class or type-of-service * @since 1.4 @@ -1205,7 +1205,7 @@ class DatagramSocket implements java.io.Closeable { * DatagramChannel.open} method. * * @return the datagram channel associated with this datagram socket, - * or null if this socket was not created for a channel + * or {@code null} if this socket was not created for a channel * * @since 1.4 * @spec JSR-51 @@ -1224,14 +1224,14 @@ class DatagramSocket implements java.io.Closeable { * application. The factory can be specified only once. *

    * When an application creates a new datagram socket, the socket - * implementation factory's createDatagramSocketImpl method is + * implementation factory's {@code createDatagramSocketImpl} method is * called to create the actual datagram socket implementation. *

    - * Passing null to the method is a no-op unless the factory + * Passing {@code null} to the method is a no-op unless the factory * was already set. * *

    If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * @@ -1240,7 +1240,7 @@ class DatagramSocket implements java.io.Closeable { * datagram socket factory. * @exception SocketException if the factory is already defined. * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't allow the + * {@code checkSetFactory} method doesn't allow the operation. * @see java.net.DatagramSocketImplFactory#createDatagramSocketImpl() diff --git a/src/share/classes/java/net/DatagramSocketImpl.java b/src/share/classes/java/net/DatagramSocketImpl.java index 3ed11e4b9d265eaf93e71c52805aace7839a9b98..524f06b83ca1bf14f716c230216584e184fd9217 100644 --- a/src/share/classes/java/net/DatagramSocketImpl.java +++ b/src/share/classes/java/net/DatagramSocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -101,7 +101,7 @@ public abstract class DatagramSocketImpl implements SocketOptions { protected void disconnect() {} /** - * Peek at the packet to see who it is from. Updates the specified InetAddress + * Peek at the packet to see who it is from. Updates the specified {@code InetAddress} * to the address which the packet came from. * @param i an InetAddress object * @return the port number which the packet came from. @@ -114,7 +114,7 @@ public abstract class DatagramSocketImpl implements SocketOptions { /** * Peek at the packet to see who it is from. The data is copied into the specified - * DatagramPacket. The data is returned, + * {@code DatagramPacket}. The data is returned, * but not consumed, so that a subsequent peekData/receive operation * will see the same data. * @param p the Packet Received. @@ -163,7 +163,7 @@ public abstract class DatagramSocketImpl implements SocketOptions { /** * Set the TTL (time-to-live) option. - * @param ttl an int specifying the time-to-live value + * @param ttl an {@code int} specifying the time-to-live value * @exception IOException if an I/O exception occurs * while setting the time-to-live option. * @see #getTimeToLive() @@ -174,7 +174,7 @@ public abstract class DatagramSocketImpl implements SocketOptions { * Retrieve the TTL (time-to-live) option. * @exception IOException if an I/O exception occurs * while retrieving the time-to-live option - * @return an int representing the time-to-live value + * @return an {@code int} representing the time-to-live value * @see #setTimeToLive(int) */ protected abstract int getTimeToLive() throws IOException; @@ -227,7 +227,7 @@ public abstract class DatagramSocketImpl implements SocketOptions { /** * Gets the local port. - * @return an int representing the local port value + * @return an {@code int} representing the local port value */ protected int getLocalPort() { return localPort; @@ -235,7 +235,7 @@ public abstract class DatagramSocketImpl implements SocketOptions { /** * Gets the datagram socket file descriptor. - * @return a FileDescriptor object representing the datagram socket + * @return a {@code FileDescriptor} object representing the datagram socket * file descriptor */ protected FileDescriptor getFileDescriptor() { diff --git a/src/share/classes/java/net/DatagramSocketImplFactory.java b/src/share/classes/java/net/DatagramSocketImplFactory.java index e89aeb30a6cb62f2b966006af3d141954658f9a5..4d891962ae273d649d07f19bbc581e4e9c43520c 100644 --- a/src/share/classes/java/net/DatagramSocketImplFactory.java +++ b/src/share/classes/java/net/DatagramSocketImplFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ package java.net; /** * This interface defines a factory for datagram socket implementations. It - * is used by the classes DatagramSocket to create actual socket + * is used by the classes {@code DatagramSocket} to create actual socket * implementations. * * @author Yingxian Wang @@ -37,9 +37,9 @@ package java.net; public interface DatagramSocketImplFactory { /** - * Creates a new DatagramSocketImpl instance. + * Creates a new {@code DatagramSocketImpl} instance. * - * @return a new instance of DatagramSocketImpl. + * @return a new instance of {@code DatagramSocketImpl}. * @see java.net.DatagramSocketImpl */ DatagramSocketImpl createDatagramSocketImpl(); diff --git a/src/share/classes/java/net/FileNameMap.java b/src/share/classes/java/net/FileNameMap.java index b9bdb6e53e00744533b933e4d07e83eebc108c5e..393b5aa6d9e948c172d048251d37a24d77a1d25c 100644 --- a/src/share/classes/java/net/FileNameMap.java +++ b/src/share/classes/java/net/FileNameMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ public interface FileNameMap { /** * Gets the MIME type for the specified file name. * @param fileName the specified file name - * @return a String indicating the MIME + * @return a {@code String} indicating the MIME * type for the specified file name. */ public String getContentTypeFor(String fileName); diff --git a/src/share/classes/java/net/HttpCookie.java b/src/share/classes/java/net/HttpCookie.java index d265e284c267ead981ee631fcc7c9dd4101b1f62..fb02ae3e03d195a9373c8f6c68ddff6da5842b58 100644 --- a/src/share/classes/java/net/HttpCookie.java +++ b/src/share/classes/java/net/HttpCookie.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -470,7 +470,7 @@ public final class HttpCookie implements Cloneable { * protocol. * * @return {@code false} if the cookie can be sent over any standard - * protocol; otherwise, true + * protocol; otherwise, {@code true} * * @see #setSecure */ diff --git a/src/share/classes/java/net/HttpRetryException.java b/src/share/classes/java/net/HttpRetryException.java index 8829c1e90dd556c372bfd5153efae9fec353437f..d498a653f1ce1eca6b7b5e85bc88e69141f0476a 100644 --- a/src/share/classes/java/net/HttpRetryException.java +++ b/src/share/classes/java/net/HttpRetryException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ class HttpRetryException extends IOException { private String location; /** - * Constructs a new HttpRetryException from the + * Constructs a new {@code HttpRetryException} from the * specified response code and exception detail message * * @param detail the detail message. @@ -55,7 +55,7 @@ class HttpRetryException extends IOException { } /** - * Constructs a new HttpRetryException with detail message + * Constructs a new {@code HttpRetryException} with detail message * responseCode and the contents of the Location response header field. * * @param detail the detail message. diff --git a/src/share/classes/java/net/HttpURLConnection.java b/src/share/classes/java/net/HttpURLConnection.java index b93f1e731bd11bb1856a75bd2e992d02915605be..be23241e5a631cb7be4e4dd9c7d7410e44aaa406 100644 --- a/src/share/classes/java/net/HttpURLConnection.java +++ b/src/share/classes/java/net/HttpURLConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -76,14 +76,14 @@ abstract public class HttpURLConnection extends URLConnection { /** * The chunk-length when using chunked encoding streaming mode for output. - * A value of -1 means chunked encoding is disabled for output. + * A value of {@code -1} means chunked encoding is disabled for output. * @since 1.5 */ protected int chunkLength = -1; /** * The fixed content-length when using fixed-length streaming mode. - * A value of -1 means fixed-length streaming mode is disabled + * A value of {@code -1} means fixed-length streaming mode is disabled * for output. * *

    NOTE: {@link #fixedContentLengthLong} is recommended instead @@ -103,15 +103,15 @@ abstract public class HttpURLConnection extends URLConnection { protected long fixedContentLengthLong = -1; /** - * Returns the key for the nth header field. - * Some implementations may treat the 0th + * Returns the key for the {@code n}th header field. + * Some implementations may treat the {@code 0}th * header field as special, i.e. as the status line returned by the HTTP * server. In this case, {@link #getHeaderField(int) getHeaderField(0)} returns the status - * line, but getHeaderFieldKey(0) returns null. + * line, but {@code getHeaderFieldKey(0)} returns null. * * @param n an index, where {@code n >=0}. - * @return the key for the nth header field, - * or null if the key does not exist. + * @return the key for the {@code n}th header field, + * or {@code null} if the key does not exist. */ public String getHeaderFieldKey (int n) { return null; @@ -251,8 +251,8 @@ abstract public class HttpURLConnection extends URLConnection { } /** - * Returns the value for the nth header field. - * Some implementations may treat the 0th + * Returns the value for the {@code n}th header field. + * Some implementations may treat the {@code 0}th * header field as special, i.e. as the status line returned by the HTTP * server. *

    @@ -261,8 +261,8 @@ abstract public class HttpURLConnection extends URLConnection { * the headers in the message. * * @param n an index, where {@code n>=0}. - * @return the value of the nth header field, - * or null if the value does not exist. + * @return the value of the {@code n}th header field, + * or {@code null} if the value does not exist. * @see java.net.HttpURLConnection#getHeaderFieldKey(int) */ public String getHeaderField(int n) { @@ -270,7 +270,7 @@ abstract public class HttpURLConnection extends URLConnection { } /** - * An int representing the three digit HTTP Status-Code. + * An {@code int} representing the three digit HTTP Status-Code. *

      *
    • 1xx: Informational *
    • 2xx: Success @@ -292,12 +292,12 @@ abstract public class HttpURLConnection extends URLConnection { private static boolean followRedirects = true; /** - * If true, the protocol will automatically follow redirects. - * If false, the protocol will not automatically follow + * If {@code true}, the protocol will automatically follow redirects. + * If {@code false}, the protocol will not automatically follow * redirects. *

      - * This field is set by the setInstanceFollowRedirects - * method. Its value is returned by the getInstanceFollowRedirects + * This field is set by the {@code setInstanceFollowRedirects} + * method. Its value is returned by the {@code getInstanceFollowRedirects} * method. *

      * Its default value is based on the value of the static followRedirects @@ -328,14 +328,14 @@ abstract public class HttpURLConnection extends URLConnection { * cannot change this variable. *

      * If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * - * @param set a boolean indicating whether or not + * @param set a {@code boolean} indicating whether or not * to follow HTTP redirects. * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't + * {@code checkSetFactory} method doesn't * allow the operation. * @see SecurityManager#checkSetFactory * @see #getFollowRedirects() @@ -350,12 +350,12 @@ abstract public class HttpURLConnection extends URLConnection { } /** - * Returns a boolean indicating + * Returns a {@code boolean} indicating * whether or not HTTP redirects (3xx) should * be automatically followed. * - * @return true if HTTP redirects should - * be automatically followed, false if not. + * @return {@code true} if HTTP redirects should + * be automatically followed, {@code false} if not. * @see #setFollowRedirects(boolean) */ public static boolean getFollowRedirects() { @@ -364,13 +364,13 @@ abstract public class HttpURLConnection extends URLConnection { /** * Sets whether HTTP redirects (requests with response code 3xx) should - * be automatically followed by this HttpURLConnection + * be automatically followed by this {@code HttpURLConnection} * instance. *

      * The default value comes from followRedirects, which defaults to * true. * - * @param followRedirects a boolean indicating + * @param followRedirects a {@code boolean} indicating * whether or not to follow HTTP redirects. * * @see java.net.HttpURLConnection#instanceFollowRedirects @@ -382,11 +382,11 @@ abstract public class HttpURLConnection extends URLConnection { } /** - * Returns the value of this HttpURLConnection's - * instanceFollowRedirects field. + * Returns the value of this {@code HttpURLConnection}'s + * {@code instanceFollowRedirects} field. * - * @return the value of this HttpURLConnection's - * instanceFollowRedirects field. + * @return the value of this {@code HttpURLConnection}'s + * {@code instanceFollowRedirects} field. * @see java.net.HttpURLConnection#instanceFollowRedirects * @see #setInstanceFollowRedirects(boolean) * @since 1.3 @@ -540,7 +540,7 @@ abstract public class HttpURLConnection extends URLConnection { * Returns null if none could be discerned from the responses * (the result was not valid HTTP). * @throws IOException if an error occurred connecting to the server. - * @return the HTTP response message, or null + * @return the HTTP response message, or {@code null} */ public String getResponseMessage() throws IOException { getResponseCode(); @@ -583,7 +583,7 @@ abstract public class HttpURLConnection extends URLConnection { * @exception IOException if an error occurs while computing * the permission. * - * @return a SocketPermission object representing the + * @return a {@code SocketPermission} object representing the * permission necessary to connect to the destination * host and port. */ diff --git a/src/share/classes/java/net/IDN.java b/src/share/classes/java/net/IDN.java index 563d356804fc53ca1e8334eaf7792620c7ee0a88..0e48155895639aea9aa79fb01890e75c1a0afbc7 100644 --- a/src/share/classes/java/net/IDN.java +++ b/src/share/classes/java/net/IDN.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -104,7 +104,7 @@ public final class IDN { * @param input the string to be processed * @param flag process flag; can be 0 or any logical OR of possible flags * - * @return the translated String + * @return the translated {@code String} * * @throws IllegalArgumentException if the input string doesn't conform to RFC 3490 specification */ @@ -130,13 +130,13 @@ public final class IDN { * *

      This convenience method works as if by invoking the * two-argument counterpart as follows: - *

      + *
      * {@link #toASCII(String, int) toASCII}(input, 0); - *
      + *
      * * @param input the string to be processed * - * @return the translated String + * @return the translated {@code String} * * @throws IllegalArgumentException if the input string doesn't conform to RFC 3490 specification */ @@ -161,7 +161,7 @@ public final class IDN { * @param input the string to be processed * @param flag process flag; can be 0 or any logical OR of possible flags * - * @return the translated String + * @return the translated {@code String} */ public static String toUnicode(String input, int flag) { int p = 0, q = 0; @@ -184,13 +184,13 @@ public final class IDN { * *

      This convenience method works as if by invoking the * two-argument counterpart as follows: - *

      + *
      * {@link #toUnicode(String, int) toUnicode}(input, 0); - *
      + *
      * * @param input the string to be processed * - * @return the translated String + * @return the translated {@code String} */ public static String toUnicode(String input) { return toUnicode(input, 0); diff --git a/src/share/classes/java/net/Inet4Address.java b/src/share/classes/java/net/Inet4Address.java index 6c59a692f825933df8d0390a39fc0b050e5dc560..528b27674651f4f7c8d9d6d06346b566f6e5b76d 100644 --- a/src/share/classes/java/net/Inet4Address.java +++ b/src/share/classes/java/net/Inet4Address.java @@ -42,10 +42,10 @@ import java.io.ObjectStreamException; * takes one of the following forms: * *
      - * - * - * - * + * + * + * + * *
      d.d.d.d
      d.d.d
      d.d
      d
      {@code d.d.d.d}
      {@code d.d.d}
      {@code d.d}
      {@code d}
      * *

      When four parts are specified, each is interpreted as a byte of @@ -153,7 +153,7 @@ class Inet4Address extends InetAddress { * Utility routine to check if the InetAddress is an * IP multicast address. IP multicast address is a Class D * address i.e first four bits of the address are 1110. - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * an IP multicast address * @since JDK1.1 */ @@ -163,7 +163,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the InetAddress in a wildcard address. - * @return a boolean indicating if the Inetaddress is + * @return a {@code boolean} indicating if the Inetaddress is * a wildcard address. * @since 1.4 */ @@ -174,7 +174,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the InetAddress is a loopback address. * - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a loopback address; or false otherwise. * @since 1.4 */ @@ -187,7 +187,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the InetAddress is an link local address. * - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a link local address; or false if address is not a link local unicast address. * @since 1.4 */ @@ -204,7 +204,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the InetAddress is a site local address. * - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a site local address; or false if address is not a site local unicast address. * @since 1.4 */ @@ -224,7 +224,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the multicast address has global scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of global scope, false if it is not * of global scope or it is not a multicast address * @since 1.4 @@ -240,7 +240,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the multicast address has node scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of node-local scope, false if it is not * of node-local scope or it is not a multicast address * @since 1.4 @@ -253,7 +253,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the multicast address has link scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of link-local scope, false if it is not * of link-local scope or it is not a multicast address * @since 1.4 @@ -269,7 +269,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the multicast address has site scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of site-local scope, false if it is not * of site-local scope or it is not a multicast address * @since 1.4 @@ -284,7 +284,7 @@ class Inet4Address extends InetAddress { /** * Utility routine to check if the multicast address has organization scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of organization-local scope, * false if it is not of organization-local scope * or it is not a multicast address @@ -299,9 +299,9 @@ class Inet4Address extends InetAddress { } /** - * Returns the raw IP address of this InetAddress + * Returns the raw IP address of this {@code InetAddress} * object. The result is in network byte order: the highest order - * byte of the address is in getAddress()[0]. + * byte of the address is in {@code getAddress()[0]}. * * @return the raw IP address of this object. */ @@ -337,18 +337,18 @@ class Inet4Address extends InetAddress { /** * Compares this object against the specified object. - * The result is true if and only if the argument is - * not null and it represents the same IP address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same IP address as * this object. *

      - * Two instances of InetAddress represent the same IP + * Two instances of {@code InetAddress} represent the same IP * address if the length of the byte arrays returned by - * getAddress is the same for both, and each of the + * {@code getAddress} is the same for both, and each of the * array components is the same for the byte arrays. * * @param obj the object to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#getAddress() */ public boolean equals(Object obj) { diff --git a/src/share/classes/java/net/Inet6Address.java b/src/share/classes/java/net/Inet6Address.java index 169a180de11b311a12999649fc0ee1a79cd052fa..7b10db96c08b8e6ad68698a0db9b4b025887107a 100644 --- a/src/share/classes/java/net/Inet6Address.java +++ b/src/share/classes/java/net/Inet6Address.java @@ -47,7 +47,7 @@ import java.util.Enumeration; * address. This is the full form. For example, * *

      - * + * *
      1080:0:0:0:8:800:200C:417A
      {@code 1080:0:0:0:8:800:200C:417A}
      * *

      Note that it is not necessary to write the leading zeros in @@ -64,7 +64,7 @@ import java.util.Enumeration; * zeros in an address. For example, * *

      - * + * *
      1080::8:800:200C:417A
      {@code 1080::8:800:200C:417A}
      * *
    • An alternative form that is sometimes more convenient @@ -75,8 +75,8 @@ import java.util.Enumeration; * standard IPv4 representation address, for example, * *

      - * - * + * + * *
      ::FFFF:129.144.52.38
      ::129.144.52.38
      {@code ::FFFF:129.144.52.38}
      {@code ::129.144.52.38}
      * *

      where "::FFFF:d.d.d.d" and "::d.d.d.d" are, respectively, the @@ -85,23 +85,23 @@ import java.util.Enumeration; * in the "d.d.d.d" form. The following forms are invalid: * *

      - * - * - * - * + * + * + * + * *
      ::FFFF:d.d.d
      ::FFFF:d.d
      ::d.d.d
      ::d.d
      {@code ::FFFF:d.d.d}
      {@code ::FFFF:d.d}
      {@code ::d.d.d}
      {@code ::d.d}
      * *

      The following form: * *

      - * + * *
      ::FFFF:d
      {@code ::FFFF:d}
      * *

      is valid, however it is an unconventional representation of * the IPv4-compatible IPv6 address, * *

      - * + * *
      ::255.255.0.d
      {@code ::255.255.0.d}
      * *

      while "::d" corresponds to the general IPv6 address @@ -258,7 +258,7 @@ class Inet6Address extends InetAddress { * Create an Inet6Address in the exact manner of {@link * InetAddress#getByAddress(String,byte[])} except that the IPv6 scope_id is * set to the value corresponding to the given interface for the address - * type specified in addr. The call will fail with an + * type specified in {@code addr}. The call will fail with an * UnknownHostException if the given interface does not have a numeric * scope_id assigned for the given address type (eg. link-local or site-local). * See here for a description of IPv6 diff --git a/src/share/classes/java/net/InetAddress.java b/src/share/classes/java/net/InetAddress.java index aa5ef16705de5e5cea3df04ab96bfb6deacac5cb..48178497827808821e9bacadbc96e4f7b2e4372b 100644 --- a/src/share/classes/java/net/InetAddress.java +++ b/src/share/classes/java/net/InetAddress.java @@ -296,7 +296,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the InetAddress is an * IP multicast address. - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * an IP multicast address * @since JDK1.1 */ @@ -306,7 +306,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the InetAddress in a wildcard address. - * @return a boolean indicating if the Inetaddress is + * @return a {@code boolean} indicating if the Inetaddress is * a wildcard address. * @since 1.4 */ @@ -317,7 +317,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the InetAddress is a loopback address. * - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a loopback address; or false otherwise. * @since 1.4 */ @@ -328,7 +328,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the InetAddress is an link local address. * - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a link local address; or false if address is not a link local unicast address. * @since 1.4 */ @@ -339,7 +339,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the InetAddress is a site local address. * - * @return a boolean indicating if the InetAddress is + * @return a {@code boolean} indicating if the InetAddress is * a site local address; or false if address is not a site local unicast address. * @since 1.4 */ @@ -350,7 +350,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the multicast address has global scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of global scope, false if it is not * of global scope or it is not a multicast address * @since 1.4 @@ -362,7 +362,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the multicast address has node scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of node-local scope, false if it is not * of node-local scope or it is not a multicast address * @since 1.4 @@ -374,7 +374,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the multicast address has link scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of link-local scope, false if it is not * of link-local scope or it is not a multicast address * @since 1.4 @@ -386,7 +386,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the multicast address has site scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of site-local scope, false if it is not * of site-local scope or it is not a multicast address * @since 1.4 @@ -398,7 +398,7 @@ class InetAddress implements java.io.Serializable { /** * Utility routine to check if the multicast address has organization scope. * - * @return a boolean indicating if the address has + * @return a {@code boolean} indicating if the address has * is a multicast address of organization-local scope, * false if it is not of organization-local scope * or it is not a multicast address @@ -424,9 +424,9 @@ class InetAddress implements java.io.Serializable { * in an IllegalArgumentException being thrown. * * @param timeout the time, in milliseconds, before the call aborts - * @return a boolean indicating if the address is reachable. + * @return a {@code boolean} indicating if the address is reachable. * @throws IOException if a network error occurs - * @throws IllegalArgumentException if timeout is negative. + * @throws IllegalArgumentException if {@code timeout} is negative. * @since 1.5 */ public boolean isReachable(int timeout) throws IOException { @@ -442,10 +442,10 @@ class InetAddress implements java.io.Serializable { * privilege can be obtained, otherwise it will try to establish * a TCP connection on port 7 (Echo) of the destination host. *

      - * The network interface and ttl parameters + * The {@code network interface} and {@code ttl} parameters * let the caller specify which network interface the test will go through * and the maximum number of hops the packets should go through. - * A negative value for the ttl will result in an + * A negative value for the {@code ttl} will result in an * IllegalArgumentException being thrown. *

      * The timeout value, in milliseconds, indicates the maximum amount of time @@ -458,9 +458,9 @@ class InetAddress implements java.io.Serializable { * @param ttl the maximum numbers of hops to try or 0 for the * default * @param timeout the time, in milliseconds, before the call aborts - * @throws IllegalArgumentException if either timeout - * or ttl are negative. - * @return a booleanindicating if the address is reachable. + * @throws IllegalArgumentException if either {@code timeout} + * or {@code ttl} are negative. + * @return a {@code boolean}indicating if the address is reachable. * @throws IOException if a network error occurs * @since 1.5 */ @@ -486,8 +486,8 @@ class InetAddress implements java.io.Serializable { * {@link #getCanonicalHostName() getCanonicalHostName}. * *

      If there is a security manager, its - * checkConnect method is first called - * with the hostname and -1 + * {@code checkConnect} method is first called + * with the hostname and {@code -1} * as its arguments to see if the operation is allowed. * If the operation is not allowed, it will return * the textual representation of the IP address. @@ -511,8 +511,8 @@ class InetAddress implements java.io.Serializable { * here without a security check. * *

      If there is a security manager, this method first - * calls its checkConnect method - * with the hostname and -1 + * calls its {@code checkConnect} method + * with the hostname and {@code -1} * as its arguments to see if the calling code is allowed to know * the hostname for this IP address, i.e., to connect to the host. * If the operation is not allowed, it will return @@ -539,8 +539,8 @@ class InetAddress implements java.io.Serializable { * the FQDN depending on the underlying system configuration. * *

      If there is a security manager, this method first - * calls its checkConnect method - * with the hostname and -1 + * calls its {@code checkConnect} method + * with the hostname and {@code -1} * as its arguments to see if the calling code is allowed to know * the hostname for this IP address, i.e., to connect to the host. * If the operation is not allowed, it will return @@ -566,8 +566,8 @@ class InetAddress implements java.io.Serializable { * Returns the hostname for this address. * *

      If there is a security manager, this method first - * calls its checkConnect method - * with the hostname and -1 + * calls its {@code checkConnect} method + * with the hostname and {@code -1} * as its arguments to see if the calling code is allowed to know * the hostname for this IP address, i.e., to connect to the host. * If the operation is not allowed, it will return @@ -633,9 +633,9 @@ class InetAddress implements java.io.Serializable { } /** - * Returns the raw IP address of this InetAddress + * Returns the raw IP address of this {@code InetAddress} * object. The result is in network byte order: the highest order - * byte of the address is in getAddress()[0]. + * byte of the address is in {@code getAddress()[0]}. * * @return the raw IP address of this object. */ @@ -664,18 +664,18 @@ class InetAddress implements java.io.Serializable { /** * Compares this object against the specified object. - * The result is true if and only if the argument is - * not null and it represents the same IP address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same IP address as * this object. *

      - * Two instances of InetAddress represent the same IP + * Two instances of {@code InetAddress} represent the same IP * address if the length of the byte arrays returned by - * getAddress is the same for both, and each of the + * {@code getAddress} is the same for both, and each of the * array components is the same for the byte arrays. * * @param obj the object to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#getAddress() */ public boolean equals(Object obj) { @@ -683,7 +683,7 @@ class InetAddress implements java.io.Serializable { } /** - * Converts this IP address to a String. The + * Converts this IP address to a {@code String}. The * string returned is of the form: hostname / literal IP * address. * @@ -974,7 +974,7 @@ class InetAddress implements java.io.Serializable { * No name service is checked for the validity of the address. * *

      The host name can either be a machine name, such as - * "java.sun.com", or a textual representation of its IP + * "{@code java.sun.com}", or a textual representation of its IP * address. *

      No validity checking is done on the host name either. * @@ -1019,26 +1019,26 @@ class InetAddress implements java.io.Serializable { * Determines the IP address of a host, given the host's name. * *

      The host name can either be a machine name, such as - * "java.sun.com", or a textual representation of its + * "{@code java.sun.com}", or a textual representation of its * IP address. If a literal IP address is supplied, only the * validity of the address format is checked. * - *

      For host specified in literal IPv6 address, + *

      For {@code host} specified in literal IPv6 address, * either the form defined in RFC 2732 or the literal IPv6 address * format defined in RFC 2373 is accepted. IPv6 scoped addresses are also * supported. See here for a description of IPv6 * scoped addresses. * - *

      If the host is null then an InetAddress + *

      If the host is {@code null} then an {@code InetAddress} * representing an address of the loopback interface is returned. * See RFC 3330 * section 2 and RFC 2373 * section 2.5.3.

      * - * @param host the specified host, or null. + * @param host the specified host, or {@code null}. * @return an IP address for the given host name. * @exception UnknownHostException if no IP address for the - * host could be found, or if a scope_id was specified + * {@code host} could be found, or if a scope_id was specified * for a global IPv6 address. * @exception SecurityException if a security manager exists * and its checkConnect method doesn't allow the operation @@ -1059,37 +1059,37 @@ class InetAddress implements java.io.Serializable { * based on the configured name service on the system. * *

      The host name can either be a machine name, such as - * "java.sun.com", or a textual representation of its IP + * "{@code java.sun.com}", or a textual representation of its IP * address. If a literal IP address is supplied, only the * validity of the address format is checked. * - *

      For host specified in literal IPv6 address, + *

      For {@code host} specified in literal IPv6 address, * either the form defined in RFC 2732 or the literal IPv6 address * format defined in RFC 2373 is accepted. A literal IPv6 address may * also be qualified by appending a scoped zone identifier or scope_id. * The syntax and usage of scope_ids is described * here. - *

      If the host is null then an InetAddress + *

      If the host is {@code null} then an {@code InetAddress} * representing an address of the loopback interface is returned. * See RFC 3330 * section 2 and RFC 2373 * section 2.5.3.

      * - *

      If there is a security manager and host is not - * null and host.length() is not equal to zero, the + *

      If there is a security manager and {@code host} is not + * null and {@code host.length() } is not equal to zero, the * security manager's - * checkConnect method is called - * with the hostname and -1 + * {@code checkConnect} method is called + * with the hostname and {@code -1} * as its arguments to see if the operation is allowed. * - * @param host the name of the host, or null. + * @param host the name of the host, or {@code null}. * @return an array of all the IP addresses for a given host name. * * @exception UnknownHostException if no IP address for the - * host could be found, or if a scope_id was specified + * {@code host} could be found, or if a scope_id was specified * for a global IPv6 address. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * * @see SecurityManager#checkConnect */ @@ -1389,9 +1389,9 @@ class InetAddress implements java.io.Serializable { } /** - * Returns an InetAddress object given the raw IP address . + * Returns an {@code InetAddress} object given the raw IP address . * The argument is in network byte order: the highest order - * byte of the address is in getAddress()[0]. + * byte of the address is in {@code getAddress()[0]}. * *

      This method doesn't block, i.e. no reverse name service lookup * is performed. @@ -1417,14 +1417,14 @@ class InetAddress implements java.io.Serializable { /** * Returns the address of the local host. This is achieved by retrieving * the name of the host from the system, then resolving that name into - * an InetAddress. + * an {@code InetAddress}. * *

      Note: The resolved address may be cached for a short period of time. *

      * *

      If there is a security manager, its - * checkConnect method is called - * with the local host name and -1 + * {@code checkConnect} method is called + * with the local host name and {@code -1} * as its arguments to see if the operation is allowed. * If the operation is not allowed, an InetAddress representing * the loopback address is returned. @@ -1601,7 +1601,6 @@ class InetAddress implements java.io.Serializable { pf.put("address", holder().getAddress()); pf.put("family", holder().getFamily()); s.writeFields(); - s.flush(); } } diff --git a/src/share/classes/java/net/InetSocketAddress.java b/src/share/classes/java/net/InetSocketAddress.java index 44604c664aa42f2c8ac3f2984aa119756c7f8126..6792979312b093cc1eda1c4b7abaec0a35ddc7eb 100644 --- a/src/share/classes/java/net/InetSocketAddress.java +++ b/src/share/classes/java/net/InetSocketAddress.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ import java.io.ObjectStreamField; * as returned values. *

      * The wildcard is a special local IP address. It usually means "any" - * and can only be used for bind operations. + * and can only be used for {@code bind} operations. * * @see java.net.Socket * @see java.net.ServerSocket @@ -155,8 +155,8 @@ public class InetSocketAddress * and the port number a specified value. *

      * A valid port value is between 0 and 65535. - * A port number of zero will let the system pick up an - * ephemeral port in a bind operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. *

      * @param port The port number * @throws IllegalArgumentException if the port parameter is outside the specified @@ -171,10 +171,10 @@ public class InetSocketAddress * Creates a socket address from an IP address and a port number. *

      * A valid port value is between 0 and 65535. - * A port number of zero will let the system pick up an - * ephemeral port in a bind operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. *

      - * A null address will assign the wildcard address. + * A {@code null} address will assign the wildcard address. *

      * @param addr The IP address * @param port The port number @@ -195,13 +195,13 @@ public class InetSocketAddress * An attempt will be made to resolve the hostname into an InetAddress. * If that attempt fails, the address will be flagged as unresolved. *

      - * If there is a security manager, its checkConnect method + * If there is a security manager, its {@code checkConnect} method * is called with the host name as its argument to check the permissiom * to resolve it. This could result in a SecurityException. *

      * A valid port value is between 0 and 65535. - * A port number of zero will let the system pick up an - * ephemeral port in a bind operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. *

      * @param hostname the Host name * @param port The port number @@ -237,8 +237,8 @@ public class InetSocketAddress * The address will be flagged as unresolved. *

      * A valid port value is between 0 and 65535. - * A port number of zero will let the system pick up an - * ephemeral port in a bind operation. + * A port number of {@code zero} will let the system pick up an + * ephemeral port in a {@code bind} operation. *

      * @param host the Host name * @param port The port number @@ -246,7 +246,7 @@ public class InetSocketAddress * the range of valid port values, or if the hostname * parameter is null. * @see #isUnresolved() - * @return a InetSocketAddress representing the unresolved + * @return a {@code InetSocketAddress} representing the unresolved * socket address * @since 1.5 */ @@ -326,16 +326,16 @@ public class InetSocketAddress /** * - * Gets the InetAddress. + * Gets the {@code InetAddress}. * - * @return the InetAdress or null if it is unresolved. + * @return the InetAdress or {@code null} if it is unresolved. */ public final InetAddress getAddress() { return holder.getAddress(); } /** - * Gets the hostname. + * Gets the {@code hostname}. * Note: This method may trigger a name service reverse lookup if the * address was created with a literal IP address. * @@ -360,8 +360,8 @@ public class InetSocketAddress /** * Checks whether the address has been resolved or not. * - * @return true if the hostname couldn't be resolved into - * an InetAddress. + * @return {@code true} if the hostname couldn't be resolved into + * an {@code InetAddress}. */ public final boolean isUnresolved() { return holder.isUnresolved(); @@ -382,11 +382,11 @@ public class InetSocketAddress /** * Compares this object against the specified object. - * The result is true if and only if the argument is - * not null and it represents the same address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same address as * this object. *

      - * Two instances of InetSocketAddress represent the same + * Two instances of {@code InetSocketAddress} represent the same * address if both the InetAddresses (or hostnames if it is unresolved) and port * numbers are equal. * If both addresses are unresolved, then the hostname and the port number @@ -396,8 +396,8 @@ public class InetSocketAddress * considered equal. * * @param obj the object to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#equals(java.lang.Object) */ @Override diff --git a/src/share/classes/java/net/InterfaceAddress.java b/src/share/classes/java/net/InterfaceAddress.java index 1fb18ae0f6c8875b3cd1cdc36f736a260e1138fa..704e1fae9d5d222ab37c5685a8de0ae7ef59f6e6 100644 --- a/src/share/classes/java/net/InterfaceAddress.java +++ b/src/share/classes/java/net/InterfaceAddress.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,23 +47,23 @@ public class InterfaceAddress { } /** - * Returns an InetAddress for this address. + * Returns an {@code InetAddress} for this address. * - * @return the InetAddress for this address. + * @return the {@code InetAddress} for this address. */ public InetAddress getAddress() { return address; } /** - * Returns an InetAddress for the brodcast address + * Returns an {@code InetAddress} for the brodcast address * for this InterfaceAddress. *

      * Only IPv4 networks have broadcast address therefore, in the case - * of an IPv6 network, null will be returned. + * of an IPv6 network, {@code null} will be returned. * - * @return the InetAddress representing the broadcast - * address or null if there is no broadcast address. + * @return the {@code InetAddress} representing the broadcast + * address or {@code null} if there is no broadcast address. */ public InetAddress getBroadcast() { return broadcast; @@ -76,7 +76,7 @@ public class InterfaceAddress { * or 24 (255.255.255.0).

      * Typical IPv6 values would be 128 (::1/128) or 10 (fe80::203:baff:fe27:1243/10) * - * @return a short representing the prefix length for the + * @return a {@code short} representing the prefix length for the * subnet of that address. */ public short getNetworkPrefixLength() { @@ -85,17 +85,17 @@ public class InterfaceAddress { /** * Compares this object against the specified object. - * The result is true if and only if the argument is - * not null and it represents the same interface address as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same interface address as * this object. *

      - * Two instances of InterfaceAddress represent the same + * Two instances of {@code InterfaceAddress} represent the same * address if the InetAddress, the prefix length and the broadcast are * the same for both. * * @param obj the object to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InterfaceAddress#hashCode() */ public boolean equals(Object obj) { @@ -122,7 +122,7 @@ public class InterfaceAddress { } /** - * Converts this Interface address to a String. The + * Converts this Interface address to a {@code String}. The * string returned is of the form: InetAddress / prefix length [ broadcast address ]. * * @return a string representation of this Interface address. diff --git a/src/share/classes/java/net/JarURLConnection.java b/src/share/classes/java/net/JarURLConnection.java index 433be8cfdb930874edfc3eddfb210ffadd6705c8..c6fd8cf94f7355530a55db9bc5910f54f7783033 100644 --- a/src/share/classes/java/net/JarURLConnection.java +++ b/src/share/classes/java/net/JarURLConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,18 +45,14 @@ import sun.net.www.ParseUtil; * *

      for example: * - *

      - * jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
      - *
      + *

      {@code jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class} * *

      Jar URLs should be used to refer to a JAR file or entries in * a JAR file. The example above is a JAR URL which refers to a JAR * entry. If the entry name is omitted, the URL refers to the whole * JAR file: * - * - * jar:http://www.foo.com/bar/baz.jar!/ - * + * {@code jar:http://www.foo.com/bar/baz.jar!/} * *

      Users should cast the generic URLConnection to a * JarURLConnection when they know that the URL they created is a JAR @@ -76,19 +72,19 @@ import sun.net.www.ParseUtil; *

      * *
      A Jar entry - *
      jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class + *
      {@code jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class} * *
      A Jar file - *
      jar:http://www.foo.com/bar/baz.jar!/ + *
      {@code jar:http://www.foo.com/bar/baz.jar!/} * *
      A Jar directory - *
      jar:http://www.foo.com/bar/baz.jar!/COM/foo/ + *
      {@code jar:http://www.foo.com/bar/baz.jar!/COM/foo/} * *
      * - *

      !/ is refered to as the separator. + *

      {@code !/} is refered to as the separator. * - *

      When constructing a JAR url via new URL(context, spec), + *

      When constructing a JAR url via {@code new URL(context, spec)}, * the following rules apply: * *

        @@ -294,7 +290,7 @@ public abstract class JarURLConnection extends URLConnection { * can only be called once * the connection has been completely verified by reading * from the input stream until the end of the stream has been - * reached. Otherwise, this method will return null + * reached. Otherwise, this method will return {@code null} * * @return the Certificate object for this connection if the URL * for it points to a JAR file entry, null otherwise. diff --git a/src/share/classes/java/net/MalformedURLException.java b/src/share/classes/java/net/MalformedURLException.java index f6ed89219fa70ab15f51b84a41e5364c59308c5b..7aef75c78214d71c7f75dbfd61019c1d4f734f85 100644 --- a/src/share/classes/java/net/MalformedURLException.java +++ b/src/share/classes/java/net/MalformedURLException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,13 +39,13 @@ public class MalformedURLException extends IOException { private static final long serialVersionUID = -182787522200415866L; /** - * Constructs a MalformedURLException with no detail message. + * Constructs a {@code MalformedURLException} with no detail message. */ public MalformedURLException() { } /** - * Constructs a MalformedURLException with the + * Constructs a {@code MalformedURLException} with the * specified detail message. * * @param msg the detail message. diff --git a/src/share/classes/java/net/MulticastSocket.java b/src/share/classes/java/net/MulticastSocket.java index 0a4d7c1023d76438989e7c85fd1194818c9eaf38..9c5cb05acbb9427168bb927705c53140ff45e1bc 100644 --- a/src/share/classes/java/net/MulticastSocket.java +++ b/src/share/classes/java/net/MulticastSocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -92,7 +92,7 @@ class MulticastSocket extends DatagramSocket { * Create a multicast socket. * *

        If there is a security manager, - * its checkListen method is first called + * its {@code checkListen} method is first called * with 0 as its argument to ensure the operation is allowed. * This could result in a SecurityException. *

        @@ -103,7 +103,7 @@ class MulticastSocket extends DatagramSocket { * @exception IOException if an I/O exception occurs * while creating the MulticastSocket * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @see SecurityManager#checkListen * @see java.net.DatagramSocket#setReuseAddress(boolean) */ @@ -115,8 +115,8 @@ class MulticastSocket extends DatagramSocket { * Create a multicast socket and bind it to a specific port. * *

        If there is a security manager, - * its checkListen method is first called - * with the port argument + * its {@code checkListen} method is first called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. *

        @@ -128,7 +128,7 @@ class MulticastSocket extends DatagramSocket { * @exception IOException if an I/O exception occurs * while creating the MulticastSocket * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @see SecurityManager#checkListen * @see java.net.DatagramSocket#setReuseAddress(boolean) */ @@ -139,10 +139,10 @@ class MulticastSocket extends DatagramSocket { /** * Create a MulticastSocket bound to the specified socket address. *

        - * Or, if the address is null, create an unbound socket. + * Or, if the address is {@code null}, create an unbound socket. *

        *

        If there is a security manager, - * its checkListen method is first called + * its {@code checkListen} method is first called * with the SocketAddress port as its argument to ensure the operation is allowed. * This could result in a SecurityException. *

        @@ -150,12 +150,12 @@ class MulticastSocket extends DatagramSocket { * {@link DatagramSocket#setReuseAddress(boolean)} method is * called to enable the SO_REUSEADDR socket option. * - * @param bindaddr Socket address to bind to, or null for + * @param bindaddr Socket address to bind to, or {@code null} for * an unbound socket. * @exception IOException if an I/O exception occurs * while creating the MulticastSocket * @exception SecurityException if a security manager exists and its - * checkListen method doesn't allow the operation. + * {@code checkListen} method doesn't allow the operation. * @see SecurityManager#checkListen * @see java.net.DatagramSocket#setReuseAddress(boolean) * @@ -197,7 +197,7 @@ class MulticastSocket extends DatagramSocket { /** * Set the default time-to-live for multicast packets sent out - * on this MulticastSocket in order to control the + * on this {@code MulticastSocket} in order to control the * scope of the multicasts. * *

        The ttl is an unsigned 8-bit quantity, and so must be @@ -279,11 +279,11 @@ class MulticastSocket extends DatagramSocket { /** * Joins a multicast group. Its behavior may be affected by - * setInterface or setNetworkInterface. + * {@code setInterface} or {@code setNetworkInterface}. * *

        If there is a security manager, this method first - * calls its checkMulticast method - * with the mcastaddr argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to join @@ -291,7 +291,7 @@ class MulticastSocket extends DatagramSocket { * @exception IOException if there is an error joining * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * checkMulticast method doesn't allow the join. + * {@code checkMulticast} method doesn't allow the join. * * @see SecurityManager#checkMulticast(InetAddress) */ @@ -325,18 +325,18 @@ class MulticastSocket extends DatagramSocket { /** * Leave a multicast group. Its behavior may be affected by - * setInterface or setNetworkInterface. + * {@code setInterface} or {@code setNetworkInterface}. * *

        If there is a security manager, this method first - * calls its checkMulticast method - * with the mcastaddr argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to leave * @exception IOException if there is an error leaving * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * checkMulticast method doesn't allow the operation. + * {@code checkMulticast} method doesn't allow the operation. * * @see SecurityManager#checkMulticast(InetAddress) */ @@ -362,8 +362,8 @@ class MulticastSocket extends DatagramSocket { * Joins the specified multicast group at the specified interface. * *

        If there is a security manager, this method first - * calls its checkMulticast method - * with the mcastaddr argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to join @@ -375,7 +375,7 @@ class MulticastSocket extends DatagramSocket { * @exception IOException if there is an error joining * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * checkMulticast method doesn't allow the join. + * {@code checkMulticast} method doesn't allow the join. * @throws IllegalArgumentException if mcastaddr is null or is a * SocketAddress subclass not supported by this socket * @@ -410,8 +410,8 @@ class MulticastSocket extends DatagramSocket { * Leave a multicast group on a specified local interface. * *

        If there is a security manager, this method first - * calls its checkMulticast method - * with the mcastaddr argument + * calls its {@code checkMulticast} method + * with the {@code mcastaddr} argument * as its argument. * * @param mcastaddr is the multicast address to leave @@ -422,7 +422,7 @@ class MulticastSocket extends DatagramSocket { * @exception IOException if there is an error leaving * or when the address is not a multicast address. * @exception SecurityException if a security manager exists and its - * checkMulticast method doesn't allow the operation. + * {@code checkMulticast} method doesn't allow the operation. * @throws IllegalArgumentException if mcastaddr is null or is a * SocketAddress subclass not supported by this socket * @@ -478,7 +478,7 @@ class MulticastSocket extends DatagramSocket { * Retrieve the address of the network interface used for * multicast packets. * - * @return An InetAddress representing + * @return An {@code InetAddress} representing * the address of the network interface used for * multicast packets. * @@ -562,7 +562,7 @@ class MulticastSocket extends DatagramSocket { * * @exception SocketException if there is an error in * the underlying protocol, such as a TCP error. - * @return the multicast NetworkInterface currently set + * @return the multicast {@code NetworkInterface} currently set * @see #setNetworkInterface(NetworkInterface) * @since 1.4 */ @@ -587,7 +587,7 @@ class MulticastSocket extends DatagramSocket { *

        Because this option is a hint, applications that want to * verify what loopback mode is set to should call * {@link #getLoopbackMode()} - * @param disable true to disable the LoopbackMode + * @param disable {@code true} to disable the LoopbackMode * @throws SocketException if an error occurs while setting the value * @since 1.4 * @see #getLoopbackMode @@ -615,18 +615,18 @@ class MulticastSocket extends DatagramSocket { * otherwise it is preferable to set a TTL once on the socket, and * use that default TTL for all packets. This method does not * alter the default TTL for the socket. Its behavior may be - * affected by setInterface. + * affected by {@code setInterface}. * *

        If there is a security manager, this method first performs some - * security checks. First, if p.getAddress().isMulticastAddress() + * security checks. First, if {@code p.getAddress().isMulticastAddress()} * is true, this method calls the - * security manager's checkMulticast method - * with p.getAddress() and ttl as its arguments. + * security manager's {@code checkMulticast} method + * with {@code p.getAddress()} and {@code ttl} as its arguments. * If the evaluation of that expression is false, * this method instead calls the security manager's - * checkConnect method with arguments - * p.getAddress().getHostAddress() and - * p.getPort(). Each call to a security manager method + * {@code checkConnect} method with arguments + * {@code p.getAddress().getHostAddress()} and + * {@code p.getPort()}. Each call to a security manager method * could result in a SecurityException if the operation is not allowed. * * @param p is the packet to be sent. The packet should contain @@ -639,7 +639,7 @@ class MulticastSocket extends DatagramSocket { * @exception IOException is raised if an error occurs i.e * error while setting ttl. * @exception SecurityException if a security manager exists and its - * checkMulticast or checkConnect + * {@code checkMulticast} or {@code checkConnect} * method doesn't allow the send. * * @deprecated Use the following code or its equivalent instead: diff --git a/src/share/classes/java/net/NetPermission.java b/src/share/classes/java/net/NetPermission.java index f11337e5b9ef76fa92474384e02a54239cdcb63c..cf7cbd2af67db617a19fb11a6b768f9186ced3f8 100644 --- a/src/share/classes/java/net/NetPermission.java +++ b/src/share/classes/java/net/NetPermission.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -177,8 +177,8 @@ public final class NetPermission extends BasicPermission { * * @param name the name of the NetPermission. * - * @throws NullPointerException if name is null. - * @throws IllegalArgumentException if name is empty. + * @throws NullPointerException if {@code name} is {@code null}. + * @throws IllegalArgumentException if {@code name} is empty. */ public NetPermission(String name) @@ -194,8 +194,8 @@ public final class NetPermission extends BasicPermission { * @param name the name of the NetPermission. * @param actions should be null. * - * @throws NullPointerException if name is null. - * @throws IllegalArgumentException if name is empty. + * @throws NullPointerException if {@code name} is {@code null}. + * @throws IllegalArgumentException if {@code name} is empty. */ public NetPermission(String name, String actions) diff --git a/src/share/classes/java/net/NetworkInterface.java b/src/share/classes/java/net/NetworkInterface.java index c1644dea2bc5f8124cf11eb50d194df8979c2323..411d8df14b9d14e9b28eb09f1b172600758417aa 100644 --- a/src/share/classes/java/net/NetworkInterface.java +++ b/src/share/classes/java/net/NetworkInterface.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -98,9 +98,9 @@ public final class NetworkInterface { * Convenience method to return an Enumeration with all or a * subset of the InetAddresses bound to this network interface. *

        - * If there is a security manager, its checkConnect + * If there is a security manager, its {@code checkConnect} * method is called for each InetAddress. Only InetAddresses where - * the checkConnect doesn't throw a SecurityException + * the {@code checkConnect} doesn't throw a SecurityException * will be returned in the Enumeration. However, if the caller has the * {@link NetPermission}("getNetworkInformation") permission, then all * InetAddresses are returned. @@ -154,15 +154,15 @@ public final class NetworkInterface { } /** - * Get a List of all or a subset of the InterfaceAddresses + * Get a List of all or a subset of the {@code InterfaceAddresses} * of this network interface. *

        - * If there is a security manager, its checkConnect + * If there is a security manager, its {@code checkConnect} * method is called with the InetAddress for each InterfaceAddress. - * Only InterfaceAddresses where the checkConnect doesn't throw + * Only InterfaceAddresses where the {@code checkConnect} doesn't throw * a SecurityException will be returned in the List. * - * @return a List object with all or a subset of the + * @return a {@code List} object with all or a subset of the * InterfaceAddresss of this network interface * @since 1.6 */ @@ -216,10 +216,10 @@ public final class NetworkInterface { /** * Returns the parent NetworkInterface of this interface if this is - * a subinterface, or null if it is a physical + * a subinterface, or {@code null} if it is a physical * (non virtual) interface or has no parent. * - * @return The NetworkInterface this interface is attached to. + * @return The {@code NetworkInterface} this interface is attached to. * @since 1.6 */ public NetworkInterface getParent() { @@ -260,15 +260,15 @@ public final class NetworkInterface { * @param name * The name of the network interface. * - * @return A NetworkInterface with the specified name, - * or null if there is no network interface + * @return A {@code NetworkInterface} with the specified name, + * or {@code null} if there is no network interface * with the specified name. * * @throws SocketException * If an I/O error occurs. * * @throws NullPointerException - * If the specified name is null. + * If the specified name is {@code null}. */ public static NetworkInterface getByName(String name) throws SocketException { if (name == null) @@ -303,17 +303,17 @@ public final class NetworkInterface { * returned. * * @param addr - * The InetAddress to search with. + * The {@code InetAddress} to search with. * - * @return A NetworkInterface - * or null if there is no network interface + * @return A {@code NetworkInterface} + * or {@code null} if there is no network interface * with the specified IP address. * * @throws SocketException * If an I/O error occurs. * * @throws NullPointerException - * If the specified address is null. + * If the specified address is {@code null}. */ public static NetworkInterface getByInetAddress(InetAddress addr) throws SocketException { if (addr == null) { @@ -378,7 +378,7 @@ public final class NetworkInterface { /** * Returns whether a network interface is up and running. * - * @return true if the interface is up and running. + * @return {@code true} if the interface is up and running. * @exception SocketException if an I/O error occurs. * @since 1.6 */ @@ -390,7 +390,7 @@ public final class NetworkInterface { /** * Returns whether a network interface is a loopback interface. * - * @return true if the interface is a loopback interface. + * @return {@code true} if the interface is a loopback interface. * @exception SocketException if an I/O error occurs. * @since 1.6 */ @@ -404,7 +404,7 @@ public final class NetworkInterface { * A typical point to point interface would be a PPP connection through * a modem. * - * @return true if the interface is a point to point + * @return {@code true} if the interface is a point to point * interface. * @exception SocketException if an I/O error occurs. * @since 1.6 @@ -417,7 +417,7 @@ public final class NetworkInterface { /** * Returns whether a network interface supports multicasting or not. * - * @return true if the interface supports Multicasting. + * @return {@code true} if the interface supports Multicasting. * @exception SocketException if an I/O error occurs. * @since 1.6 */ @@ -432,7 +432,7 @@ public final class NetworkInterface { * If a security manager is set, then the caller must have * the permission {@link NetPermission}("getNetworkInformation"). * - * @return a byte array containing the address, or null if + * @return a byte array containing the address, or {@code null} if * the address doesn't exist, is not accessible or a security * manager is set and the caller does not have the permission * NetPermission("getNetworkInformation") @@ -481,7 +481,7 @@ public final class NetworkInterface { * can be several virtual interfaces attached to a single physical * interface. * - * @return true if this interface is a virtual interface. + * @return {@code true} if this interface is a virtual interface. * @since 1.6 */ public boolean isVirtual() { @@ -497,16 +497,16 @@ public final class NetworkInterface { /** * Compares this object against the specified object. - * The result is true if and only if the argument is - * not null and it represents the same NetworkInterface + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same NetworkInterface * as this object. *

        - * Two instances of NetworkInterface represent the same + * Two instances of {@code NetworkInterface} represent the same * NetworkInterface if both name and addrs are the same for both. * * @param obj the object to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetAddress#getAddress() */ public boolean equals(Object obj) { diff --git a/src/share/classes/java/net/PasswordAuthentication.java b/src/share/classes/java/net/PasswordAuthentication.java index ee2280fc730af5c3df35de6bee90af8441f18edb..5529568f3a314835216bcef381bde9fa8e0879f9 100644 --- a/src/share/classes/java/net/PasswordAuthentication.java +++ b/src/share/classes/java/net/PasswordAuthentication.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,11 +43,11 @@ public final class PasswordAuthentication { private char[] password; /** - * Creates a new PasswordAuthentication object from the given + * Creates a new {@code PasswordAuthentication} object from the given * user name and password. * *

        Note that the given user password is cloned before it is stored in - * the new PasswordAuthentication object. + * the new {@code PasswordAuthentication} object. * * @param userName the user name * @param password the user's password diff --git a/src/share/classes/java/net/PortUnreachableException.java b/src/share/classes/java/net/PortUnreachableException.java index c21345fb7d9951f002cba8db9152dcbb9c783ed9..8d1f21b0e87957848222bb68bec2b805c7157620 100644 --- a/src/share/classes/java/net/PortUnreachableException.java +++ b/src/share/classes/java/net/PortUnreachableException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,7 +36,7 @@ public class PortUnreachableException extends SocketException { private static final long serialVersionUID = 8462541992376507323L; /** - * Constructs a new PortUnreachableException with a + * Constructs a new {@code PortUnreachableException} with a * detail message. * @param msg the detail message */ @@ -45,7 +45,7 @@ public class PortUnreachableException extends SocketException { } /** - * Construct a new PortUnreachableException with no + * Construct a new {@code PortUnreachableException} with no * detailed message. */ public PortUnreachableException() {} diff --git a/src/share/classes/java/net/ProtocolException.java b/src/share/classes/java/net/ProtocolException.java index 74ff4f1322e932586ab8a3dbef14fca56f812b0e..ebb94eb16ca3c0e743dcef8eb7cc572f7dcdbf12 100644 --- a/src/share/classes/java/net/ProtocolException.java +++ b/src/share/classes/java/net/ProtocolException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ class ProtocolException extends IOException { private static final long serialVersionUID = -6098449442062388080L; /** - * Constructs a new ProtocolException with the + * Constructs a new {@code ProtocolException} with the * specified detail message. * * @param host the detail message. @@ -49,7 +49,7 @@ class ProtocolException extends IOException { } /** - * Constructs a new ProtocolException with no detail message. + * Constructs a new {@code ProtocolException} with no detail message. */ public ProtocolException() { } diff --git a/src/share/classes/java/net/Proxy.java b/src/share/classes/java/net/Proxy.java index 4b8b6f148d57eb2c6794290700ab82b5b6d5e14b..fe481fadfa2523ec9420eeba8a8ce32f0ef9121a 100644 --- a/src/share/classes/java/net/Proxy.java +++ b/src/share/classes/java/net/Proxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ package java.net; /** * This class represents a proxy setting, typically a type (http, socks) and * a socket address. - * A Proxy is an immutable object. + * A {@code Proxy} is an immutable object. * * @see java.net.ProxySelector * @author Yingxian Wang @@ -61,17 +61,17 @@ public class Proxy { private SocketAddress sa; /** - * A proxy setting that represents a DIRECT connection, + * A proxy setting that represents a {@code DIRECT} connection, * basically telling the protocol handler not to use any proxying. * Used, for instance, to create sockets bypassing any other global * proxy settings (like SOCKS): *

        - * Socket s = new Socket(Proxy.NO_PROXY);
        + * {@code Socket s = new Socket(Proxy.NO_PROXY);}
        *

        */ public final static Proxy NO_PROXY = new Proxy(); - // Creates the proxy that represents a DIRECT connection. + // Creates the proxy that represents a {@code DIRECT} connection. private Proxy() { type = Type.DIRECT; sa = null; @@ -82,11 +82,11 @@ public class Proxy { * Certain combinations are illegal. For instance, for types Http, and * Socks, a SocketAddress must be provided. *

        - * Use the Proxy.NO_PROXY constant + * Use the {@code Proxy.NO_PROXY} constant * for representing a direct connection. * - * @param type the Type of the proxy - * @param sa the SocketAddress for that proxy + * @param type the {@code Type} of the proxy + * @param sa the {@code SocketAddress} for that proxy * @throws IllegalArgumentException when the type and the address are * incompatible */ @@ -108,9 +108,9 @@ public class Proxy { /** * Returns the socket address of the proxy, or - * null if its a direct connection. + * {@code null} if its a direct connection. * - * @return a SocketAddress representing the socket end + * @return a {@code SocketAddress} representing the socket end * point of the proxy */ public SocketAddress address() { @@ -121,7 +121,7 @@ public class Proxy { * Constructs a string representation of this Proxy. * This String is constructed by calling toString() on its type * and concatenating " @ " and the toString() result from its address - * if its type is not DIRECT. + * if its type is not {@code DIRECT}. * * @return a string representation of this object. */ @@ -133,16 +133,16 @@ public class Proxy { /** * Compares this object against the specified object. - * The result is true if and only if the argument is - * not null and it represents the same proxy as + * The result is {@code true} if and only if the argument is + * not {@code null} and it represents the same proxy as * this object. *

        - * Two instances of Proxy represent the same + * Two instances of {@code Proxy} represent the same * address if both the SocketAddresses and type are equal. * * @param obj the object to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.net.InetSocketAddress#equals(java.lang.Object) */ public final boolean equals(Object obj) { diff --git a/src/share/classes/java/net/ProxySelector.java b/src/share/classes/java/net/ProxySelector.java index 6aa01ffd2e3fc4d37df165de5919afd99326f648..d6bb53656fdb8bcc0e52bd3058e26601aa1047b9 100644 --- a/src/share/classes/java/net/ProxySelector.java +++ b/src/share/classes/java/net/ProxySelector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -83,9 +83,9 @@ public abstract class ProxySelector { * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}("getProxySelector") + * {@link NetPermission}{@code ("getProxySelector")} * @see #setDefault(ProxySelector) - * @return the system-wide ProxySelector + * @return the system-wide {@code ProxySelector} * @since 1.5 */ public static ProxySelector getDefault() { @@ -102,11 +102,11 @@ public abstract class ProxySelector { * Note: non-standard protocol handlers may ignore this setting. * * @param ps The HTTP proxy selector, or - * null to unset the proxy selector. + * {@code null} to unset the proxy selector. * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}("setProxySelector") + * {@link NetPermission}{@code ("setProxySelector")} * * @see #getDefault() * @since 1.5 @@ -127,7 +127,7 @@ public abstract class ProxySelector { *

          *
        • http URI for http connections
        • *
        • https URI for https connections - *
        • socket://host:port
          + *
        • {@code socket://host:port}
          * for tcp client sockets connections
        • *
        * diff --git a/src/share/classes/java/net/ResponseCache.java b/src/share/classes/java/net/ResponseCache.java index 6a67bf655b3514efc411d9e6008e1bba7718f761..2dfaf4aa9f950eb45d9b8addf5d9fb158f27e8d2 100644 --- a/src/share/classes/java/net/ResponseCache.java +++ b/src/share/classes/java/net/ResponseCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,10 +74,10 @@ public abstract class ResponseCache { * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}("getResponseCache") + * {@link NetPermission}{@code ("getResponseCache")} * * @see #setDefault(ResponseCache) - * @return the system-wide ResponseCache + * @return the system-wide {@code ResponseCache} * @since 1.5 */ public synchronized static ResponseCache getDefault() { @@ -94,11 +94,11 @@ public abstract class ResponseCache { * Note: non-standard procotol handlers may ignore this setting. * * @param responseCache The response cache, or - * null to unset the cache. + * {@code null} to unset the cache. * * @throws SecurityException * If a security manager has been installed and it denies - * {@link NetPermission}("setResponseCache") + * {@link NetPermission}{@code ("setResponseCache")} * * @see #getDefault() * @since 1.5 @@ -118,14 +118,14 @@ public abstract class ResponseCache { * to get the network resource. If a cached response is returned, * that resource is used instead. * - * @param uri a URI used to reference the requested + * @param uri a {@code URI} used to reference the requested * network resource - * @param rqstMethod a String representing the request + * @param rqstMethod a {@code String} representing the request * method * @param rqstHeaders - a Map from request header * field names to lists of field values representing * the current request headers - * @return a CacheResponse instance if available + * @return a {@code CacheResponse} instance if available * from cache, or null otherwise * @throws IOException if an I/O error occurs * @throws IllegalArgumentException if any one of the arguments is null @@ -148,11 +148,11 @@ public abstract class ResponseCache { * use to write the resource into the cache. If the resource is * not to be cached, then put must return null. * - * @param uri a URI used to reference the requested + * @param uri a {@code URI} used to reference the requested * network resource * @param conn - a URLConnection instance that is used to fetch * the response to be cached - * @return a CacheRequest for recording the + * @return a {@code CacheRequest} for recording the * response to be cached. Null return indicates that * the caller does not intend to cache the response. * @throws IOException if an I/O error occurs diff --git a/src/share/classes/java/net/ServerSocket.java b/src/share/classes/java/net/ServerSocket.java index 0b69ad6a266c4ae29ac90cd451966d73c3bf8d08..bcc77ae42f37ee79051a2b9432980e4c3701cf85 100644 --- a/src/share/classes/java/net/ServerSocket.java +++ b/src/share/classes/java/net/ServerSocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ import java.security.PrivilegedExceptionAction; * based on that request, and then possibly returns a result to the requester. *

        * The actual work of the server socket is performed by an instance - * of the SocketImpl class. An application can + * of the {@code SocketImpl} class. An application can * change the socket factory that creates the socket * implementation to configure itself to create sockets * appropriate to the local firewall. @@ -89,31 +89,31 @@ class ServerSocket implements java.io.Closeable { /** * Creates a server socket, bound to the specified port. A port number - * of 0 means that the port number is automatically + * of {@code 0} means that the port number is automatically * allocated, typically from an ephemeral port range. This port * number can then be retrieved by calling {@link #getLocalPort getLocalPort}. *

        * The maximum queue length for incoming connection indications (a - * request to connect) is set to 50. If a connection + * request to connect) is set to {@code 50}. If a connection * indication arrives when the queue is full, the connection is refused. *

        * If the application has specified a server socket factory, that - * factory's createSocketImpl method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. *

        * If there is a security manager, - * its checkListen method is called - * with the port argument + * its {@code checkListen} method is called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * * - * @param port the port number, or 0 to use a port + * @param port the port number, or {@code 0} to use a port * number that is automatically allocated. * * @exception IOException if an I/O error occurs when opening the socket. * @exception SecurityException - * if a security manager exists and its checkListen + * if a security manager exists and its {@code checkListen} * method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between @@ -131,42 +131,42 @@ class ServerSocket implements java.io.Closeable { /** * Creates a server socket and binds it to the specified local port * number, with the specified backlog. - * A port number of 0 means that the port number is + * A port number of {@code 0} means that the port number is * automatically allocated, typically from an ephemeral port range. * This port number can then be retrieved by calling * {@link #getLocalPort getLocalPort}. *

        * The maximum queue length for incoming connection indications (a - * request to connect) is set to the backlog parameter. If + * request to connect) is set to the {@code backlog} parameter. If * a connection indication arrives when the queue is full, the * connection is refused. *

        * If the application has specified a server socket factory, that - * factory's createSocketImpl method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. *

        * If there is a security manager, - * its checkListen method is called - * with the port argument + * its {@code checkListen} method is called + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * - * The backlog argument is the requested maximum number of + * The {@code backlog} argument is the requested maximum number of * pending connections on the socket. Its exact semantics are implementation * specific. In particular, an implementation may impose a maximum length * or may choose to ignore the parameter altogther. The value provided - * should be greater than 0. If it is less than or equal to - * 0, then an implementation specific default will be used. + * should be greater than {@code 0}. If it is less than or equal to + * {@code 0}, then an implementation specific default will be used. *

        * - * @param port the port number, or 0 to use a port + * @param port the port number, or {@code 0} to use a port * number that is automatically allocated. * @param backlog requested maximum length of the queue of incoming * connections. * * @exception IOException if an I/O error occurs when opening the socket. * @exception SecurityException - * if a security manager exists and its checkListen + * if a security manager exists and its {@code checkListen} * method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between @@ -189,32 +189,32 @@ class ServerSocket implements java.io.Closeable { * If bindAddr is null, it will default accepting * connections on any/all local addresses. * The port must be between 0 and 65535, inclusive. - * A port number of 0 means that the port number is + * A port number of {@code 0} means that the port number is * automatically allocated, typically from an ephemeral port range. * This port number can then be retrieved by calling * {@link #getLocalPort getLocalPort}. * *

        If there is a security manager, this method - * calls its checkListen method - * with the port argument + * calls its {@code checkListen} method + * with the {@code port} argument * as its argument to ensure the operation is allowed. * This could result in a SecurityException. * - * The backlog argument is the requested maximum number of + * The {@code backlog} argument is the requested maximum number of * pending connections on the socket. Its exact semantics are implementation * specific. In particular, an implementation may impose a maximum length * or may choose to ignore the parameter altogther. The value provided - * should be greater than 0. If it is less than or equal to - * 0, then an implementation specific default will be used. + * should be greater than {@code 0}. If it is less than or equal to + * {@code 0}, then an implementation specific default will be used. *

        - * @param port the port number, or 0 to use a port + * @param port the port number, or {@code 0} to use a port * number that is automatically allocated. * @param backlog requested maximum length of the queue of incoming * connections. * @param bindAddr the local InetAddress the server will bind to * * @throws SecurityException if a security manager exists and - * its checkListen method doesn't allow the operation. + * its {@code checkListen} method doesn't allow the operation. * * @throws IOException if an I/O error occurs when opening the socket. * @exception IllegalArgumentException if the port parameter is outside @@ -245,10 +245,10 @@ class ServerSocket implements java.io.Closeable { } /** - * Get the SocketImpl attached to this socket, creating + * Get the {@code SocketImpl} attached to this socket, creating * it if necessary. * - * @return the SocketImpl attached to that ServerSocket. + * @return the {@code SocketImpl} attached to that ServerSocket. * @throws SocketException if creation fails. * @since 1.4 */ @@ -310,17 +310,17 @@ class ServerSocket implements java.io.Closeable { /** * - * Binds the ServerSocket to a specific address + * Binds the {@code ServerSocket} to a specific address * (IP address and port number). *

        - * If the address is null, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. *

        * @param endpoint The IP address and port number to bind to. * @throws IOException if the bind operation fails, or if the socket * is already bound. - * @throws SecurityException if a SecurityManager is present and - * its checkListen method doesn't allow the operation. + * @throws SecurityException if a {@code SecurityManager} is present and + * its {@code checkListen} method doesn't allow the operation. * @throws IllegalArgumentException if endpoint is a * SocketAddress subclass not supported by this socket * @since 1.4 @@ -331,25 +331,25 @@ class ServerSocket implements java.io.Closeable { /** * - * Binds the ServerSocket to a specific address + * Binds the {@code ServerSocket} to a specific address * (IP address and port number). *

        - * If the address is null, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. *

        - * The backlog argument is the requested maximum number of + * The {@code backlog} argument is the requested maximum number of * pending connections on the socket. Its exact semantics are implementation * specific. In particular, an implementation may impose a maximum length * or may choose to ignore the parameter altogther. The value provided - * should be greater than 0. If it is less than or equal to - * 0, then an implementation specific default will be used. + * should be greater than {@code 0}. If it is less than or equal to + * {@code 0}, then an implementation specific default will be used. * @param endpoint The IP address and port number to bind to. * @param backlog requested maximum length of the queue of * incoming connections. * @throws IOException if the bind operation fails, or if the socket * is already bound. - * @throws SecurityException if a SecurityManager is present and - * its checkListen method doesn't allow the operation. + * @throws SecurityException if a {@code SecurityManager} is present and + * its {@code checkListen} method doesn't allow the operation. * @throws IllegalArgumentException if endpoint is a * SocketAddress subclass not supported by this socket * @since 1.4 @@ -480,18 +480,18 @@ class ServerSocket implements java.io.Closeable { * Listens for a connection to be made to this socket and accepts * it. The method blocks until a connection is made. * - *

        A new Socket s is created and, if there + *

        A new Socket {@code s} is created and, if there * is a security manager, - * the security manager's checkAccept method is called - * with s.getInetAddress().getHostAddress() and - * s.getPort() + * the security manager's {@code checkAccept} method is called + * with {@code s.getInetAddress().getHostAddress()} and + * {@code s.getPort()} * as its arguments to ensure the operation is allowed. * This could result in a SecurityException. * * @exception IOException if an I/O error occurs when waiting for a * connection. * @exception SecurityException if a security manager exists and its - * checkAccept method doesn't allow the operation. + * {@code checkAccept} method doesn't allow the operation. * @exception SocketTimeoutException if a timeout was previously set with setSoTimeout and * the timeout has been reached. * @exception java.nio.channels.IllegalBlockingModeException @@ -597,7 +597,7 @@ class ServerSocket implements java.io.Closeable { * method. * * @return the server-socket channel associated with this socket, - * or null if this socket was not created + * or {@code null} if this socket was not created * for a channel * * @since 1.4 @@ -678,18 +678,18 @@ class ServerSocket implements java.io.Closeable { *

        * When a TCP connection is closed the connection may remain * in a timeout state for a period of time after the connection - * is closed (typically known as the TIME_WAIT state - * or 2MSL wait state). + * is closed (typically known as the {@code TIME_WAIT} state + * or {@code 2MSL} wait state). * For applications using a well known socket address or port * it may not be possible to bind a socket to the required - * SocketAddress if there is a connection in the + * {@code SocketAddress} if there is a connection in the * timeout state involving the socket address or port. *

        * Enabling {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} prior to * binding the socket using {@link #bind(SocketAddress)} allows the socket * to be bound even though a previous connection is in a timeout state. *

        - * When a ServerSocket is created the initial setting + * When a {@code ServerSocket} is created the initial setting * of {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is not defined. * Applications can use {@link #getReuseAddress()} to determine the initial * setting of {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR}. @@ -717,7 +717,7 @@ class ServerSocket implements java.io.Closeable { /** * Tests if {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is enabled. * - * @return a boolean indicating whether or not + * @return a {@code boolean} indicating whether or not * {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -732,7 +732,7 @@ class ServerSocket implements java.io.Closeable { /** * Returns the implementation address and implementation port of - * this socket as a String. + * this socket as a {@code String}. *

        * If there is a security manager set, its {@code checkConnect} method is * called with the local address and {@code -1} as its arguments to see @@ -773,14 +773,14 @@ class ServerSocket implements java.io.Closeable { * application. The factory can be specified only once. *

        * When an application creates a new server socket, the socket - * implementation factory's createSocketImpl method is + * implementation factory's {@code createSocketImpl} method is * called to create the actual socket implementation. *

        - * Passing null to the method is a no-op unless the factory + * Passing {@code null} to the method is a no-op unless the factory * was already set. *

        * If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * @@ -789,7 +789,7 @@ class ServerSocket implements java.io.Closeable { * socket factory. * @exception SocketException if the factory has already been defined. * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't allow the operation. + * {@code checkSetFactory} method doesn't allow the operation. * @see java.net.SocketImplFactory#createSocketImpl() * @see SecurityManager#checkSetFactory */ @@ -807,7 +807,7 @@ class ServerSocket implements java.io.Closeable { /** * Sets a default proposed value for the * {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option for sockets - * accepted from this ServerSocket. The value actually set + * accepted from this {@code ServerSocket}. The value actually set * in the accepted socket must be determined by calling * {@link Socket#getReceiveBufferSize()} after the socket * is returned by {@link #accept()}. @@ -851,13 +851,13 @@ class ServerSocket implements java.io.Closeable { /** * Gets the value of the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option - * for this ServerSocket, that is the proposed buffer size that - * will be used for Sockets accepted from this ServerSocket. + * for this {@code ServerSocket}, that is the proposed buffer size that + * will be used for Sockets accepted from this {@code ServerSocket}. * *

        Note, the value actually set in the accepted socket is determined by * calling {@link Socket#getReceiveBufferSize()}. * @return the value of the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} - * option for this Socket. + * option for this {@code Socket}. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. * @see #setReceiveBufferSize(int) @@ -891,24 +891,24 @@ class ServerSocket implements java.io.Closeable { * compared, with larger values indicating stronger preferences. If the * application prefers short connection time over both low latency and high * bandwidth, for example, then it could invoke this method with the values - * (1, 0, 0). If the application prefers high bandwidth above low + * {@code (1, 0, 0)}. If the application prefers high bandwidth above low * latency, and low latency above short connection time, then it could - * invoke this method with the values (0, 1, 2). + * invoke this method with the values {@code (0, 1, 2)}. * *

        Invoking this method after this socket has been bound * will have no effect. This implies that in order to use this capability * requires the socket to be created with the no-argument constructor. * * @param connectionTime - * An int expressing the relative importance of a short + * An {@code int} expressing the relative importance of a short * connection time * * @param latency - * An int expressing the relative importance of low + * An {@code int} expressing the relative importance of low * latency * * @param bandwidth - * An int expressing the relative importance of high + * An {@code int} expressing the relative importance of high * bandwidth * * @since 1.5 diff --git a/src/share/classes/java/net/Socket.java b/src/share/classes/java/net/Socket.java index 8ab5e866ee25abdd2ec195be896e9c5ae1145505..361260351f581bb42a2d5b3c6d0629c34e2c4d60 100644 --- a/src/share/classes/java/net/Socket.java +++ b/src/share/classes/java/net/Socket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ import java.security.PrivilegedAction; * between two machines. *

        * The actual work of the socket is performed by an instance of the - * SocketImpl class. An application, by changing + * {@code SocketImpl} class. An application, by changing * the socket factory that creates the socket implementation, * can configure itself to create sockets appropriate to the local * firewall. @@ -88,14 +88,14 @@ class Socket implements java.io.Closeable { * Creates an unconnected socket, specifying the type of proxy, if any, * that should be used regardless of any other settings. *

        - * If there is a security manager, its checkConnect method + * If there is a security manager, its {@code checkConnect} method * is called with the proxy host address and port number * as its arguments. This could result in a SecurityException. *

        * Examples: - *

        • Socket s = new Socket(Proxy.NO_PROXY); will create + *
          • {@code Socket s = new Socket(Proxy.NO_PROXY);} will create * a plain socket ignoring any other proxy configuration.
          • - *
          • Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080))); + *
          • {@code Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));} * will create a socket connecting through the specified SOCKS proxy * server.
          • *
          @@ -103,7 +103,7 @@ class Socket implements java.io.Closeable { * @param proxy a {@link java.net.Proxy Proxy} object specifying what kind * of proxying should be used. * @throws IllegalArgumentException if the proxy is of an invalid type - * or null. + * or {@code null}. * @throws SecurityException if a security manager is present and * permission to connect to the proxy is * denied. @@ -173,21 +173,22 @@ class Socket implements java.io.Closeable { * Creates a stream socket and connects it to the specified port * number on the named host. *

          - * If the specified host is null it is the equivalent of - * specifying the address as {@link java.net.InetAddress#getByName InetAddress.getByName}(null). + * If the specified host is {@code null} it is the equivalent of + * specifying the address as + * {@link java.net.InetAddress#getByName InetAddress.getByName}{@code (null)}. * In other words, it is equivalent to specifying an address of the * loopback interface.

          *

          * If the application has specified a server socket factory, that - * factory's createSocketImpl method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. *

          * If there is a security manager, its - * checkConnect method is called - * with the host address and port + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * - * @param host the host name, or null for the loopback address. + * @param host the host name, or {@code null} for the loopback address. * @param port the port number. * * @exception UnknownHostException if the IP address of @@ -195,7 +196,7 @@ class Socket implements java.io.Closeable { * * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between * 0 and 65535, inclusive. @@ -217,23 +218,23 @@ class Socket implements java.io.Closeable { * number at the specified IP address. *

          * If the application has specified a socket factory, that factory's - * createSocketImpl method is called to create the + * {@code createSocketImpl} method is called to create the * actual socket implementation. Otherwise a "plain" socket is created. *

          * If there is a security manager, its - * checkConnect method is called - * with the host address and port + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * * @param address the IP address. * @param port the port number. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between * 0 and 65535, inclusive. - * @exception NullPointerException if address is null. + * @exception NullPointerException if {@code address} is null. * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory) * @see java.net.SocketImpl * @see java.net.SocketImplFactory#createSocketImpl() @@ -249,28 +250,29 @@ class Socket implements java.io.Closeable { * the specified remote port. The Socket will also bind() to the local * address and port supplied. *

          - * If the specified host is null it is the equivalent of - * specifying the address as {@link java.net.InetAddress#getByName InetAddress.getByName}(null). + * If the specified host is {@code null} it is the equivalent of + * specifying the address as + * {@link java.net.InetAddress#getByName InetAddress.getByName}{@code (null)}. * In other words, it is equivalent to specifying an address of the * loopback interface.

          *

          - * A local port number of zero will let the system pick up a - * free port in the bind operation.

          + * A local port number of {@code zero} will let the system pick up a + * free port in the {@code bind} operation.

          *

          * If there is a security manager, its - * checkConnect method is called - * with the host address and port + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * - * @param host the name of the remote host, or null for the loopback address. + * @param host the name of the remote host, or {@code null} for the loopback address. * @param port the remote port * @param localAddr the local address the socket is bound to, or - * null for the anyLocal address. + * {@code null} for the {@code anyLocal} address. * @param localPort the local port the socket is bound to, or - * zero for a system selected free port. + * {@code zero} for a system selected free port. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter or localPort * parameter is outside the specified range of valid port values, * which is between 0 and 65535, inclusive. @@ -289,30 +291,31 @@ class Socket implements java.io.Closeable { * the specified remote port. The Socket will also bind() to the local * address and port supplied. *

          - * If the specified local address is null it is the equivalent of - * specifying the address as the AnyLocal address (see {@link java.net.InetAddress#isAnyLocalAddress InetAddress.isAnyLocalAddress}()). + * If the specified local address is {@code null} it is the equivalent of + * specifying the address as the AnyLocal address + * (see {@link java.net.InetAddress#isAnyLocalAddress InetAddress.isAnyLocalAddress}{@code ()}). *

          - * A local port number of zero will let the system pick up a - * free port in the bind operation.

          + * A local port number of {@code zero} will let the system pick up a + * free port in the {@code bind} operation.

          *

          * If there is a security manager, its - * checkConnect method is called - * with the host address and port + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. * * @param address the remote address * @param port the remote port * @param localAddr the local address the socket is bound to, or - * null for the anyLocal address. + * {@code null} for the {@code anyLocal} address. * @param localPort the local port the socket is bound to or - * zero for a system selected free port. + * {@code zero} for a system selected free port. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter or localPort * parameter is outside the specified range of valid port values, * which is between 0 and 65535, inclusive. - * @exception NullPointerException if address is null. + * @exception NullPointerException if {@code address} is null. * @see SecurityManager#checkConnect * @since JDK1.1 */ @@ -326,33 +329,34 @@ class Socket implements java.io.Closeable { * Creates a stream socket and connects it to the specified port * number on the named host. *

          - * If the specified host is null it is the equivalent of - * specifying the address as {@link java.net.InetAddress#getByName InetAddress.getByName}(null). + * If the specified host is {@code null} it is the equivalent of + * specifying the address as + * {@link java.net.InetAddress#getByName InetAddress.getByName}{@code (null)}. * In other words, it is equivalent to specifying an address of the * loopback interface.

          *

          - * If the stream argument is true, this creates a - * stream socket. If the stream argument is false, it + * If the stream argument is {@code true}, this creates a + * stream socket. If the stream argument is {@code false}, it * creates a datagram socket. *

          * If the application has specified a server socket factory, that - * factory's createSocketImpl method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. *

          * If there is a security manager, its - * checkConnect method is called - * with the host address and port + * {@code checkConnect} method is called + * with the host address and {@code port} * as its arguments. This could result in a SecurityException. *

          * If a UDP socket is used, TCP/IP related socket options will not apply. * - * @param host the host name, or null for the loopback address. + * @param host the host name, or {@code null} for the loopback address. * @param port the port number. - * @param stream a boolean indicating whether this is + * @param stream a {@code boolean} indicating whether this is * a stream socket or a datagram socket. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between * 0 and 65535, inclusive. @@ -373,32 +377,32 @@ class Socket implements java.io.Closeable { * Creates a socket and connects it to the specified port number at * the specified IP address. *

          - * If the stream argument is true, this creates a - * stream socket. If the stream argument is false, it + * If the stream argument is {@code true}, this creates a + * stream socket. If the stream argument is {@code false}, it * creates a datagram socket. *

          * If the application has specified a server socket factory, that - * factory's createSocketImpl method is called to create + * factory's {@code createSocketImpl} method is called to create * the actual socket implementation. Otherwise a "plain" socket is created. * *

          If there is a security manager, its - * checkConnect method is called - * with host.getHostAddress() and port + * {@code checkConnect} method is called + * with {@code host.getHostAddress()} and {@code port} * as its arguments. This could result in a SecurityException. *

          * If UDP socket is used, TCP/IP related socket options will not apply. * * @param host the IP address. * @param port the port number. - * @param stream if true, create a stream socket; + * @param stream if {@code true}, create a stream socket; * otherwise, create a datagram socket. * @exception IOException if an I/O error occurs when creating the socket. * @exception SecurityException if a security manager exists and its - * checkConnect method doesn't allow the operation. + * {@code checkConnect} method doesn't allow the operation. * @exception IllegalArgumentException if the port parameter is outside * the specified range of valid port values, which is between * 0 and 65535, inclusive. - * @exception NullPointerException if host is null. + * @exception NullPointerException if {@code host} is null. * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory) * @see java.net.SocketImpl * @see java.net.SocketImplFactory#createSocketImpl() @@ -437,8 +441,8 @@ class Socket implements java.io.Closeable { /** * Creates the socket implementation. * - * @param stream a boolean value : true for a TCP socket, - * false for UDP. + * @param stream a {@code boolean} value : {@code true} for a TCP socket, + * {@code false} for UDP. * @throws IOException if creation fails * @since 1.4 */ @@ -500,10 +504,10 @@ class Socket implements java.io.Closeable { /** - * Get the SocketImpl attached to this socket, creating + * Get the {@code SocketImpl} attached to this socket, creating * it if necessary. * - * @return the SocketImpl attached to that ServerSocket. + * @return the {@code SocketImpl} attached to that ServerSocket. * @throws SocketException if creation fails * @since 1.4 */ @@ -516,7 +520,7 @@ class Socket implements java.io.Closeable { /** * Connects this socket to the server. * - * @param endpoint the SocketAddress + * @param endpoint the {@code SocketAddress} * @throws IOException if an error occurs during the connection * @throws java.nio.channels.IllegalBlockingModeException * if this socket has an associated channel, @@ -535,7 +539,7 @@ class Socket implements java.io.Closeable { * A timeout of zero is interpreted as an infinite timeout. The connection * will then block until established or an error occurs. * - * @param endpoint the SocketAddress + * @param endpoint the {@code SocketAddress} * @param timeout the timeout value to be used in milliseconds. * @throws IOException if an error occurs during the connection * @throws SocketTimeoutException if timeout expires before connecting @@ -597,10 +601,10 @@ class Socket implements java.io.Closeable { /** * Binds the socket to a local address. *

          - * If the address is null, then the system will pick up + * If the address is {@code null}, then the system will pick up * an ephemeral port and a valid local address to bind the socket. * - * @param bindpoint the SocketAddress to bind to + * @param bindpoint the {@code SocketAddress} to bind to * @throws IOException if the bind operation fails, or if the socket * is already bound. * @throws IllegalArgumentException if bindpoint is a @@ -668,7 +672,7 @@ class Socket implements java.io.Closeable { * after the socket is closed. * * @return the remote IP address to which this socket is connected, - * or null if the socket is not connected. + * or {@code null} if the socket is not connected. */ public InetAddress getInetAddress() { if (!isConnected()) @@ -760,15 +764,15 @@ class Socket implements java.io.Closeable { /** * Returns the address of the endpoint this socket is connected to, or - * null if it is unconnected. + * {@code null} if it is unconnected. *

          * If the socket was connected prior to being {@link #close closed}, * then this method will continue to return the connected address * after the socket is closed. * - * @return a SocketAddress representing the remote endpoint of this - * socket, or null if it is not connected yet. + * @return a {@code SocketAddress} representing the remote endpoint of this + * socket, or {@code null} if it is not connected yet. * @see #getInetAddress() * @see #getPort() * @see #connect(SocketAddress, int) @@ -785,10 +789,10 @@ class Socket implements java.io.Closeable { * Returns the address of the endpoint this socket is bound to. *

          * If a socket bound to an endpoint represented by an - * InetSocketAddress is {@link #close closed}, - * then this method will continue to return an InetSocketAddress + * {@code InetSocketAddress } is {@link #close closed}, + * then this method will continue to return an {@code InetSocketAddress} * after the socket is closed. In that case the returned - * InetSocketAddress's address is the + * {@code InetSocketAddress}'s address is the * {@link InetAddress#isAnyLocalAddress wildcard} address * and its port is the local port that it was bound to. *

          @@ -828,7 +832,7 @@ class Socket implements java.io.Closeable { * methods. * * @return the socket channel associated with this socket, - * or null if this socket was not created + * or {@code null} if this socket was not created * for a channel * * @since 1.4 @@ -843,7 +847,7 @@ class Socket implements java.io.Closeable { * *

          If this socket has an associated channel then the resulting input * stream delegates all of its operations to the channel. If the channel - * is in non-blocking mode then the input stream's read operations + * is in non-blocking mode then the input stream's {@code read} operations * will throw an {@link java.nio.channels.IllegalBlockingModeException}. * *

          Under abnormal conditions the underlying connection may be @@ -867,7 +871,7 @@ class Socket implements java.io.Closeable { *

        • If there are no bytes buffered on the socket, and the * socket has not been closed using {@link #close close}, then * {@link java.io.InputStream#available available} will - * return 0. + * return {@code 0}. * *

        * @@ -910,7 +914,7 @@ class Socket implements java.io.Closeable { * *

        If this socket has an associated channel then the resulting output * stream delegates all of its operations to the channel. If the channel - * is in non-blocking mode then the output stream's write + * is in non-blocking mode then the output stream's {@code write} * operations will throw an {@link * java.nio.channels.IllegalBlockingModeException}. * @@ -949,8 +953,8 @@ class Socket implements java.io.Closeable { * Enable/disable {@link SocketOptions#TCP_NODELAY TCP_NODELAY} * (disable/enable Nagle's algorithm). * - * @param on true to enable TCP_NODELAY, - * false to disable. + * @param on {@code true} to enable TCP_NODELAY, + * {@code false} to disable. * * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -968,7 +972,7 @@ class Socket implements java.io.Closeable { /** * Tests if {@link SocketOptions#TCP_NODELAY TCP_NODELAY} is enabled. * - * @return a boolean indicating whether or not + * @return a {@code boolean} indicating whether or not * {@link SocketOptions#TCP_NODELAY TCP_NODELAY} is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -1066,9 +1070,9 @@ class Socket implements java.io.Closeable { * and there is no capability to distinguish between normal data and urgent * data unless provided by a higher level protocol. * - * @param on true to enable + * @param on {@code true} to enable * {@link SocketOptions#SO_OOBINLINE SO_OOBINLINE}, - * false to disable. + * {@code false} to disable. * * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -1086,7 +1090,7 @@ class Socket implements java.io.Closeable { /** * Tests if {@link SocketOptions#SO_OOBINLINE SO_OOBINLINE} is enabled. * - * @return a boolean indicating whether or not + * @return a {@code boolean} indicating whether or not * {@link SocketOptions#SO_OOBINLINE SO_OOBINLINE}is enabled. * * @exception SocketException if there is an error @@ -1151,7 +1155,7 @@ class Socket implements java.io.Closeable { /** * Sets the {@link SocketOptions#SO_SNDBUF SO_SNDBUF} option to the - * specified value for this Socket. + * specified value for this {@code Socket}. * The {@link SocketOptions#SO_SNDBUF SO_SNDBUF} option is used by the * platform's networking code as a hint for the size to set the underlying * network I/O buffers. @@ -1184,10 +1188,10 @@ class Socket implements java.io.Closeable { /** * Get value of the {@link SocketOptions#SO_SNDBUF SO_SNDBUF} option - * for this Socket, that is the buffer size used by the platform - * for output on this Socket. + * for this {@code Socket}, that is the buffer size used by the platform + * for output on this {@code Socket}. * @return the value of the {@link SocketOptions#SO_SNDBUF SO_SNDBUF} - * option for this Socket. + * option for this {@code Socket}. * * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -1208,7 +1212,7 @@ class Socket implements java.io.Closeable { /** * Sets the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option to the - * specified value for this Socket. The + * specified value for this {@code Socket}. The * {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option is * used by the platform's networking code as a hint for the size to set * the underlying network I/O buffers. @@ -1258,11 +1262,11 @@ class Socket implements java.io.Closeable { /** * Gets the value of the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} option - * for this Socket, that is the buffer size used by the platform - * for input on this Socket. + * for this {@code Socket}, that is the buffer size used by the platform + * for input on this {@code Socket}. * * @return the value of the {@link SocketOptions#SO_RCVBUF SO_RCVBUF} - * option for this Socket. + * option for this {@code Socket}. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. * @see #setReceiveBufferSize(int) @@ -1298,7 +1302,7 @@ class Socket implements java.io.Closeable { /** * Tests if {@link SocketOptions#SO_KEEPALIVE SO_KEEPALIVE} is enabled. * - * @return a boolean indicating whether or not + * @return a {@code boolean} indicating whether or not * {@link SocketOptions#SO_KEEPALIVE SO_KEEPALIVE} is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -1321,7 +1325,7 @@ class Socket implements java.io.Closeable { * 255} or an IllegalArgumentException will be thrown. *

        Notes: *

        For Internet Protocol v4 the value consists of an - * integer, the least significant 8 bits of which + * {@code integer}, the least significant 8 bits of which * represent the value of the TOS octet in IP packets sent by * the socket. * RFC 1349 defines the TOS values as follows: @@ -1347,10 +1351,10 @@ class Socket implements java.io.Closeable { * in the underlying platform. Applications should not assume that * they can change the TOS field after the connection. *

        - * For Internet Protocol v6 tc is the value that + * For Internet Protocol v6 {@code tc} is the value that * would be placed into the sin6_flowinfo field of the IP header. * - * @param tc an int value for the bitset. + * @param tc an {@code int} value for the bitset. * @throws SocketException if there is an error setting the * traffic class or type-of-service * @since 1.4 @@ -1392,11 +1396,11 @@ class Socket implements java.io.Closeable { *

        * When a TCP connection is closed the connection may remain * in a timeout state for a period of time after the connection - * is closed (typically known as the TIME_WAIT state - * or 2MSL wait state). + * is closed (typically known as the {@code TIME_WAIT} state + * or {@code 2MSL} wait state). * For applications using a well known socket address or port * it may not be possible to bind a socket to the required - * SocketAddress if there is a connection in the + * {@code SocketAddress} if there is a connection in the * timeout state involving the socket address or port. *

        * Enabling {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} @@ -1404,7 +1408,7 @@ class Socket implements java.io.Closeable { * the socket to be bound even though a previous connection is in a timeout * state. *

        - * When a Socket is created the initial setting + * When a {@code Socket} is created the initial setting * of {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is disabled. *

        * The behaviour when {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is @@ -1430,7 +1434,7 @@ class Socket implements java.io.Closeable { /** * Tests if {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is enabled. * - * @return a boolean indicating whether or not + * @return a {@code boolean} indicating whether or not * {@link SocketOptions#SO_REUSEADDR SO_REUSEADDR} is enabled. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. @@ -1536,7 +1540,7 @@ class Socket implements java.io.Closeable { } /** - * Converts this socket to a String. + * Converts this socket to a {@code String}. * * @return a string representation of this socket. */ @@ -1555,7 +1559,7 @@ class Socket implements java.io.Closeable { * Returns the connection state of the socket. *

        * Note: Closing a socket doesn't clear its connection state, which means - * this method will return true for a closed socket + * this method will return {@code true} for a closed socket * (see {@link #isClosed()}) if it was successfuly connected prior * to being closed. * @@ -1571,7 +1575,7 @@ class Socket implements java.io.Closeable { * Returns the binding state of the socket. *

        * Note: Closing a socket doesn't clear its binding state, which means - * this method will return true for a closed socket + * this method will return {@code true} for a closed socket * (see {@link #isClosed()}) if it was successfuly bound prior * to being closed. * @@ -1629,13 +1633,13 @@ class Socket implements java.io.Closeable { * application. The factory can be specified only once. *

        * When an application creates a new client socket, the socket - * implementation factory's createSocketImpl method is + * implementation factory's {@code createSocketImpl} method is * called to create the actual socket implementation. *

        - * Passing null to the method is a no-op unless the factory + * Passing {@code null} to the method is a no-op unless the factory * was already set. *

        If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * @@ -1644,7 +1648,7 @@ class Socket implements java.io.Closeable { * socket factory. * @exception SocketException if the factory is already defined. * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't allow the operation. + * {@code checkSetFactory} method doesn't allow the operation. * @see java.net.SocketImplFactory#createSocketImpl() * @see SecurityManager#checkSetFactory */ @@ -1678,23 +1682,23 @@ class Socket implements java.io.Closeable { * values represent a lower priority than positive values. If the * application prefers short connection time over both low latency and high * bandwidth, for example, then it could invoke this method with the values - * (1, 0, 0). If the application prefers high bandwidth above low + * {@code (1, 0, 0)}. If the application prefers high bandwidth above low * latency, and low latency above short connection time, then it could - * invoke this method with the values (0, 1, 2). + * invoke this method with the values {@code (0, 1, 2)}. * *

        Invoking this method after this socket has been connected * will have no effect. * * @param connectionTime - * An int expressing the relative importance of a short + * An {@code int} expressing the relative importance of a short * connection time * * @param latency - * An int expressing the relative importance of low + * An {@code int} expressing the relative importance of low * latency * * @param bandwidth - * An int expressing the relative importance of high + * An {@code int} expressing the relative importance of high * bandwidth * * @since 1.5 diff --git a/src/share/classes/java/net/SocketAddress.java b/src/share/classes/java/net/SocketAddress.java index 5cdd4a519cbd62aba350d55c42405236692e7fa7..a3ee4ee52f5e34ebfb668b04a81a221b6c8474c7 100644 --- a/src/share/classes/java/net/SocketAddress.java +++ b/src/share/classes/java/net/SocketAddress.java @@ -39,4 +39,7 @@ package java.net; * @since 1.4 */ public abstract class SocketAddress implements java.io.Serializable { + + static final long serialVersionUID = 5215720748342549866L; + } diff --git a/src/share/classes/java/net/SocketException.java b/src/share/classes/java/net/SocketException.java index eae84d92bab26ea49c5be94bdb0b68d5ceb600cd..690fc4f55bd1533d854452dc867fbc5d038c52ce 100644 --- a/src/share/classes/java/net/SocketException.java +++ b/src/share/classes/java/net/SocketException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,7 +38,7 @@ class SocketException extends IOException { private static final long serialVersionUID = -5935874303556886934L; /** - * Constructs a new SocketException with the + * Constructs a new {@code SocketException} with the * specified detail message. * * @param msg the detail message. @@ -48,7 +48,7 @@ class SocketException extends IOException { } /** - * Constructs a new SocketException with no detail message. + * Constructs a new {@code SocketException} with no detail message. */ public SocketException() { } diff --git a/src/share/classes/java/net/SocketImpl.java b/src/share/classes/java/net/SocketImpl.java index 3dbb7b355ed09ab5180555ff2e6107f5b9238763..67286a1cd608c609628717ba12cb2408f839950e 100644 --- a/src/share/classes/java/net/SocketImpl.java +++ b/src/share/classes/java/net/SocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ import java.io.OutputStream; import java.io.FileDescriptor; /** - * The abstract class SocketImpl is a common superclass + * The abstract class {@code SocketImpl} is a common superclass * of all classes that actually implement sockets. It is used to * create both client and server sockets. *

        @@ -71,7 +71,7 @@ public abstract class SocketImpl implements SocketOptions { /** * Creates either a stream or a datagram socket. * - * @param stream if true, create a stream socket; + * @param stream if {@code true}, create a stream socket; * otherwise, create a datagram socket. * @exception IOException if an I/O error occurs while creating the * socket. @@ -122,7 +122,7 @@ public abstract class SocketImpl implements SocketOptions { /** * Sets the maximum queue length for incoming connection indications - * (a request to connect) to the count argument. If a + * (a request to connect) to the {@code count} argument. If a * connection indication arrives when the queue is full, the * connection is refused. * @@ -217,9 +217,9 @@ public abstract class SocketImpl implements SocketOptions { } /** - * Returns the value of this socket's fd field. + * Returns the value of this socket's {@code fd} field. * - * @return the value of this socket's fd field. + * @return the value of this socket's {@code fd} field. * @see java.net.SocketImpl#fd */ protected FileDescriptor getFileDescriptor() { @@ -227,9 +227,9 @@ public abstract class SocketImpl implements SocketOptions { } /** - * Returns the value of this socket's address field. + * Returns the value of this socket's {@code address} field. * - * @return the value of this socket's address field. + * @return the value of this socket's {@code address} field. * @see java.net.SocketImpl#address */ protected InetAddress getInetAddress() { @@ -237,9 +237,9 @@ public abstract class SocketImpl implements SocketOptions { } /** - * Returns the value of this socket's port field. + * Returns the value of this socket's {@code port} field. * - * @return the value of this socket's port field. + * @return the value of this socket's {@code port} field. * @see java.net.SocketImpl#port */ protected int getPort() { @@ -270,9 +270,9 @@ public abstract class SocketImpl implements SocketOptions { protected abstract void sendUrgentData (int data) throws IOException; /** - * Returns the value of this socket's localport field. + * Returns the value of this socket's {@code localport} field. * - * @return the value of this socket's localport field. + * @return the value of this socket's {@code localport} field. * @see java.net.SocketImpl#localport */ protected int getLocalPort() { @@ -296,7 +296,7 @@ public abstract class SocketImpl implements SocketOptions { } /** - * Returns the address and port of this socket as a String. + * Returns the address and port of this socket as a {@code String}. * * @return a string representation of this socket. */ @@ -328,23 +328,23 @@ public abstract class SocketImpl implements SocketOptions { * values represent a lower priority than positive values. If the * application prefers short connection time over both low latency and high * bandwidth, for example, then it could invoke this method with the values - * (1, 0, 0). If the application prefers high bandwidth above low + * {@code (1, 0, 0)}. If the application prefers high bandwidth above low * latency, and low latency above short connection time, then it could - * invoke this method with the values (0, 1, 2). + * invoke this method with the values {@code (0, 1, 2)}. * * By default, this method does nothing, unless it is overridden in a * a sub-class. * * @param connectionTime - * An int expressing the relative importance of a short + * An {@code int} expressing the relative importance of a short * connection time * * @param latency - * An int expressing the relative importance of low + * An {@code int} expressing the relative importance of low * latency * * @param bandwidth - * An int expressing the relative importance of high + * An {@code int} expressing the relative importance of high * bandwidth * * @since 1.5 diff --git a/src/share/classes/java/net/SocketImplFactory.java b/src/share/classes/java/net/SocketImplFactory.java index 52ab3277aac93f3d3a0ee7e6f40d2842503e0c09..7aa6363b4fd4b679cdf75560e51d36dc6a3f3a45 100644 --- a/src/share/classes/java/net/SocketImplFactory.java +++ b/src/share/classes/java/net/SocketImplFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,8 +27,8 @@ package java.net; /** * This interface defines a factory for socket implementations. It - * is used by the classes Socket and - * ServerSocket to create actual socket + * is used by the classes {@code Socket} and + * {@code ServerSocket} to create actual socket * implementations. * * @author Arthur van Hoff @@ -39,9 +39,9 @@ package java.net; public interface SocketImplFactory { /** - * Creates a new SocketImpl instance. + * Creates a new {@code SocketImpl} instance. * - * @return a new instance of SocketImpl. + * @return a new instance of {@code SocketImpl}. * @see java.net.SocketImpl */ SocketImpl createSocketImpl(); diff --git a/src/share/classes/java/net/SocketInputStream.java b/src/share/classes/java/net/SocketInputStream.java index b708436a783054cf47c85cf9160f807f203581f0..224051ff6085c63014d1fd7bef50cce058e2d61b 100644 --- a/src/share/classes/java/net/SocketInputStream.java +++ b/src/share/classes/java/net/SocketInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,8 +67,8 @@ class SocketInputStream extends FileInputStream * Returns the unique {@link java.nio.channels.FileChannel FileChannel} * object associated with this file input stream.

        * - * The getChannel method of SocketInputStream - * returns null since it is a socket based stream.

        + * The {@code getChannel} method of {@code SocketInputStream} + * returns {@code null} since it is a socket based stream.

        * * @return the file channel associated with this file input stream * diff --git a/src/share/classes/java/net/SocketOptions.java b/src/share/classes/java/net/SocketOptions.java index 44dd1b9b40df3fd3ab1742e7d1f29d4d7b07da4b..b9508dbb2664c96e5d31a5d27e8018af2ea0b80e 100644 --- a/src/share/classes/java/net/SocketOptions.java +++ b/src/share/classes/java/net/SocketOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -115,7 +115,7 @@ public interface SocketOptions { * } * * - * @param optID an int identifying the option to fetch + * @param optID an {@code int} identifying the option to fetch * @return the value of the option * @throws SocketException if the socket is closed * @throws SocketException if optID is unknown along the diff --git a/src/share/classes/java/net/SocketOutputStream.java b/src/share/classes/java/net/SocketOutputStream.java index 06e234efc4a307bae29014bb91a036e7b5df6973..2404e9583f438a500da26e85a260126925324308 100644 --- a/src/share/classes/java/net/SocketOutputStream.java +++ b/src/share/classes/java/net/SocketOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,8 +64,8 @@ class SocketOutputStream extends FileOutputStream * Returns the unique {@link java.nio.channels.FileChannel FileChannel} * object associated with this file output stream.

        * - * The getChannel method of SocketOutputStream - * returns null since it is a socket based stream.

        + * The {@code getChannel} method of {@code SocketOutputStream} + * returns {@code null} since it is a socket based stream.

        * * @return the file channel associated with this file output stream * diff --git a/src/share/classes/java/net/SocketPermission.java b/src/share/classes/java/net/SocketPermission.java index 43650068ae212365322f4721b9229f8468e7fcaa..e90856eac8ef93150e4e8698d268971b422b9774 100644 --- a/src/share/classes/java/net/SocketPermission.java +++ b/src/share/classes/java/net/SocketPermission.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -110,7 +110,7 @@ import sun.security.util.Debug; * * * is granted to some code, it allows that code to connect to port 7777 on - * puffin.eng.sun.com, and to accept connections on that port. + * {@code puffin.eng.sun.com}, and to accept connections on that port. * *

        Similarly, if the following permission: * @@ -788,7 +788,7 @@ public final class SocketPermission extends Permission * port range is ignored when p only contains the action, 'resolve'.

        *

      * - * Then implies checks each of the following, in order, + * Then {@code implies} checks each of the following, in order, * and for each returns true if the stated condition is true:

      *

        *
      • If this object was initialized with a single IP address and one of p's @@ -802,7 +802,7 @@ public final class SocketPermission extends Permission *
      • If this canonical name equals p's canonical name.

        *

      * - * If none of the above are true, implies returns false. + * If none of the above are true, {@code implies} returns false. * @param p the permission to check against. * * @return true if the specified permission is implied by this object, @@ -1131,7 +1131,7 @@ public final class SocketPermission extends Permission *

      * SocketPermission objects must be stored in a manner that allows them * to be inserted into the collection in any order, but that also enables the - * PermissionCollection implies + * PermissionCollection {@code implies} * method to be implemented in an efficient (and consistent) manner. * * @return a new PermissionCollection object suitable for storing SocketPermissions. diff --git a/src/share/classes/java/net/SocksSocketImpl.java b/src/share/classes/java/net/SocksSocketImpl.java index 16155d2f1158b51213f1e14538a0cd03b3c974c5..3e4fb5fe74a47980eff4cf4d634c0305dde29874 100644 --- a/src/share/classes/java/net/SocksSocketImpl.java +++ b/src/share/classes/java/net/SocksSocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -315,7 +315,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { * grants the connections, then the connect is successful and all * further traffic will go to the "real" endpoint. * - * @param endpoint the SocketAddress to connect to. + * @param endpoint the {@code SocketAddress} to connect to. * @param timeout the timeout value in milliseconds * @throws IOException if the connection can't be established. * @throws SecurityException if there is a security manager and it @@ -1032,9 +1032,9 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { /** - * Returns the value of this socket's address field. + * Returns the value of this socket's {@code address} field. * - * @return the value of this socket's address field. + * @return the value of this socket's {@code address} field. * @see java.net.SocketImpl#address */ @Override @@ -1046,9 +1046,9 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { } /** - * Returns the value of this socket's port field. + * Returns the value of this socket's {@code port} field. * - * @return the value of this socket's port field. + * @return the value of this socket's {@code port} field. * @see java.net.SocketImpl#port */ @Override diff --git a/src/share/classes/java/net/URI.java b/src/share/classes/java/net/URI.java index 24e1a979f6e134bb9cefecfc17923e614c6fc59d..77c2f7a178f4abe7ed14e0880543ee4e7e5208f6 100644 --- a/src/share/classes/java/net/URI.java +++ b/src/share/classes/java/net/URI.java @@ -67,24 +67,24 @@ import java.lang.NullPointerException; // for javadoc * form has the syntax * *

      - * [scheme:]scheme-specific-part[#fragment] + * [scheme{@code :}]scheme-specific-part[{@code #}fragment] *
      * * where square brackets [...] delineate optional components and the characters - * : and # stand for themselves. + * {@code :} and {@code #} stand for themselves. * *

      An absolute URI specifies a scheme; a URI that is not absolute is * said to be relative. URIs are also classified according to whether * they are opaque or hierarchical. * *

      An opaque URI is an absolute URI whose scheme-specific part does - * not begin with a slash character ('/'). Opaque URIs are not + * not begin with a slash character ({@code '/'}). Opaque URIs are not * subject to further parsing. Some examples of opaque URIs are: * *

      - * - * - * + * + * + * *
      mailto:java-net@java.sun.com
      news:comp.lang.java
      urn:isbn:096139210x
      {@code mailto:java-net@java.sun.com}
      {@code news:comp.lang.java}
      {@code urn:isbn:096139210x}
      * *

      A hierarchical URI is either an absolute URI whose @@ -93,20 +93,20 @@ import java.lang.NullPointerException; // for javadoc * URIs are: * *

      - * http://java.sun.com/j2se/1.3/
      - * docs/guide/collections/designfaq.html#28
      - * ../../../demo/jfc/SwingSet2/src/SwingSet2.java
      - * file:///~/calendar + * {@code http://java.sun.com/j2se/1.3/}
      + * {@code docs/guide/collections/designfaq.html#28}
      + * {@code ../../../demo/jfc/SwingSet2/src/SwingSet2.java}
      + * {@code file:///~/calendar} *
      * *

      A hierarchical URI is subject to further parsing according to the syntax * *

      - * [scheme:][//authority][path][?query][#fragment] + * [scheme{@code :}][{@code //}authority][path][{@code ?}query][{@code #}fragment] *
      * - * where the characters :, /, - * ?, and # stand for themselves. The + * where the characters {@code :}, {@code /}, + * {@code ?}, and {@code #} stand for themselves. The * scheme-specific part of a hierarchical URI consists of the characters * between the scheme and fragment components. * @@ -115,16 +115,16 @@ import java.lang.NullPointerException; // for javadoc * parses according to the familiar syntax * *
      - * [user-info@]host[:port] + * [user-info{@code @}]host[{@code :}port] *
      * - * where the characters @ and : stand for + * where the characters {@code @} and {@code :} stand for * themselves. Nearly all URI schemes currently in use are server-based. An * authority component that does not parse in this way is considered to be * registry-based. * *

      The path component of a hierarchical URI is itself said to be absolute - * if it begins with a slash character ('/'); otherwise it is + * if it begins with a slash character ({@code '/'}); otherwise it is * relative. The path of a hierarchical URI that is either absolute or * specifies an authority is always absolute. * @@ -132,21 +132,21 @@ import java.lang.NullPointerException; // for javadoc * *

      * - * - * - * - * - * - * - * - * - * + * + * + * + * + * + * + * + * + * *
      ComponentType
      schemeString
      scheme-specific-part    String
      authorityString
      user-infoString
      hostString
      portint
      pathString
      queryString
      fragmentString
      scheme{@code String}
      scheme-specific-part    {@code String}
      authority{@code String}
      user-info{@code String}
      host{@code String}
      port{@code int}
      path{@code String}
      query{@code String}
      fragment{@code String}
      * * In a given instance any particular component is either undefined or * defined with a distinct value. Undefined string components are - * represented by null, while undefined integer components are - * represented by -1. A string component may be defined to have the + * represented by {@code null}, while undefined integer components are + * represented by {@code -1}. A string component may be defined to have the * empty string as its value; this is not equivalent to that component being * undefined. * @@ -165,10 +165,10 @@ import java.lang.NullPointerException; // for javadoc * The key operations supported by this class are those of * normalization, resolution, and relativization. * - *

      Normalization is the process of removing unnecessary "." - * and ".." segments from the path component of a hierarchical URI. - * Each "." segment is simply removed. A ".." segment is - * removed only if it is preceded by a non-".." segment. + *

      Normalization is the process of removing unnecessary {@code "."} + * and {@code ".."} segments from the path component of a hierarchical URI. + * Each {@code "."} segment is simply removed. A {@code ".."} segment is + * removed only if it is preceded by a non-{@code ".."} segment. * Normalization has no effect upon opaque URIs. * *

      Resolution is the process of resolving one URI against another, @@ -179,45 +179,47 @@ import java.lang.NullPointerException; // for javadoc * normalized. The result, for example, of resolving * *

      - * docs/guide/collections/designfaq.html#28          (1) + * {@code docs/guide/collections/designfaq.html#28} + *              + *     (1) *
      * - * against the base URI http://java.sun.com/j2se/1.3/ is the result + * against the base URI {@code http://java.sun.com/j2se/1.3/} is the result * URI * *
      - * http://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28 + * {@code http://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28} *
      * * Resolving the relative URI * *
      - * ../../../demo/jfc/SwingSet2/src/SwingSet2.java    (2) + * {@code ../../../demo/jfc/SwingSet2/src/SwingSet2.java}    (2) *
      * * against this result yields, in turn, * *
      - * http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java + * {@code http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java} *
      * * Resolution of both absolute and relative URIs, and of both absolute and * relative paths in the case of hierarchical URIs, is supported. Resolving - * the URI file:///~calendar against any other URI simply yields the + * the URI {@code file:///~calendar} against any other URI simply yields the * original URI, since it is absolute. Resolving the relative URI (2) above * against the relative base URI (1) yields the normalized, but still relative, * URI * *
      - * demo/jfc/SwingSet2/src/SwingSet2.java + * {@code demo/jfc/SwingSet2/src/SwingSet2.java} *
      * *

      Relativization, finally, is the inverse of resolution: For any * two normalized URIs u and v, * *

      - * u.relativize(u.resolve(v)).equals(v)  and
      - * u.resolve(u.relativize(v)).equals(v)  .
      + * u{@code .relativize(}u{@code .resolve(}v{@code )).equals(}v{@code )}  and
      + * u{@code .resolve(}u{@code .relativize(}v{@code )).equals(}v{@code )}  .
      *
      * * This operation is often useful when constructing a document containing URIs @@ -225,16 +227,16 @@ import java.lang.NullPointerException; // for javadoc * possible. For example, relativizing the URI * *
      - * http://java.sun.com/j2se/1.3/docs/guide/index.html + * {@code http://java.sun.com/j2se/1.3/docs/guide/index.html} *
      * * against the base URI * *
      - * http://java.sun.com/j2se/1.3 + * {@code http://java.sun.com/j2se/1.3} *
      * - * yields the relative URI docs/guide/index.html. + * yields the relative URI {@code docs/guide/index.html}. * * *

      Character categories

      @@ -247,26 +249,26 @@ import java.lang.NullPointerException; // for javadoc *
      * * + * {@code 'A'} through {@code 'Z'} + * and {@code 'a'} through {@code 'z'} * * + * {@code '0'} through {@code '9'} * * * * + * {@code "_-!.~'()*"} * - * + * * * + * {@code "?/[]@"} * * + * character ({@code '%'}) followed by two hexadecimal digits + * ({@code '0'}-{@code '9'}, {@code 'A'}-{@code 'F'}, and + * {@code 'a'}-{@code 'f'}) * *
      alphaThe US-ASCII alphabetic characters, - * 'A' through 'Z' - * and 'a' through 'z'
      digitThe US-ASCII decimal digit characters, - * '0' through '9'
      alphanumAll alpha and digit characters
      unreserved    All alphanum characters together with those in the string - * "_-!.~'()*"
      punctThe characters in the string ",;:$&+="
      The characters in the string {@code ",;:$&+="}
      reservedAll punct characters together with those in the string - * "?/[]@"
      escapedEscaped octets, that is, triplets consisting of the percent - * character ('%') followed by two hexadecimal digits - * ('0'-'9', 'A'-'F', and - * 'a'-'f')
      otherThe Unicode characters that are not in the US-ASCII character set, * are not control characters (according to the {@link @@ -306,14 +308,14 @@ import java.lang.NullPointerException; // for javadoc * *
    • A character is encoded by replacing it * with the sequence of escaped octets that represent that character in the - * UTF-8 character set. The Euro currency symbol ('\u20AC'), - * for example, is encoded as "%E2%82%AC". (Deviation from + * UTF-8 character set. The Euro currency symbol ({@code '\u005Cu20AC'}), + * for example, is encoded as {@code "%E2%82%AC"}. (Deviation from * RFC 2396, which does not specify any particular character * set.)

    • * *
    • An illegal character is quoted simply by * encoding it. The space character, for example, is quoted by replacing it - * with "%20". UTF-8 contains US-ASCII, hence for US-ASCII + * with {@code "%20"}. UTF-8 contains US-ASCII, hence for US-ASCII * characters this transformation has exactly the effect required by * RFC 2396.

    • * @@ -325,7 +327,7 @@ import java.lang.NullPointerException; // for javadoc * decoding any encoded non-US-ASCII characters. If a decoding error occurs * when decoding the escaped octets then the erroneous octets are replaced by - * '\uFFFD', the Unicode replacement character.

      + * {@code '\u005CuFFFD'}, the Unicode replacement character.

      * * * @@ -343,7 +345,7 @@ import java.lang.NullPointerException; // for javadoc * #URI(java.lang.String,java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String) * multi-argument constructors} quote illegal characters as * required by the components in which they appear. The percent character - * ('%') is always quoted by these constructors. Any other + * ({@code '%'}) is always quoted by these constructors. Any other * characters are preserved.

      * *
    • The {@link #getRawUserInfo() getRawUserInfo}, {@link #getRawPath() @@ -379,42 +381,33 @@ import java.lang.NullPointerException; // for javadoc * For any URI u, it is always the case that * *

      - * new URI(u.toString()).equals(u) . + * {@code new URI(}u{@code .toString()).equals(}u{@code )} . *
      * * For any URI u that does not contain redundant syntax such as two - * slashes before an empty authority (as in file:///tmp/ ) or a + * slashes before an empty authority (as in {@code file:///tmp/} ) or a * colon following a host name but no port (as in - * http://java.sun.com: ), and that does not encode characters + * {@code http://java.sun.com:} ), and that does not encode characters * except those that must be quoted, the following identities also hold: - * - *
      - * new URI(u.getScheme(),
      - *         
      u.getSchemeSpecificPart(),
      - *         
      u.getFragment())
      - * .equals(
      u) - *
      - * + *

      + *     new URI(u.getScheme(),
      + *             u.getSchemeSpecificPart(),
      + *             u.getFragment())
      + *     .equals(u)
      * in all cases, - * - *
      - * new URI(u.getScheme(),
      - *         
      u.getUserInfo(), u.getAuthority(),
      - *         
      u.getPath(), u.getQuery(),
      - *         
      u.getFragment())
      - * .equals(
      u) - *
      - * + *

      + *     new URI(u.getScheme(),
      + *             u.getUserInfo(), u.getAuthority(),
      + *             u.getPath(), u.getQuery(),
      + *             u.getFragment())
      + *     .equals(u)
      * if u is hierarchical, and - * - *
      - * new URI(u.getScheme(),
      - *         
      u.getUserInfo(), u.getHost(), u.getPort(),
      - *         
      u.getPath(), u.getQuery(),
      - *         
      u.getFragment())
      - * .equals(
      u) - *
      - * + *

      + *     new URI(u.getScheme(),
      + *             u.getUserInfo(), u.getHost(), u.getPort(),
      + *             u.getPath(), u.getQuery(),
      + *             u.getFragment())
      + *     .equals(u)
      * if u is hierarchical and has either no authority or a server-based * authority. * @@ -425,8 +418,8 @@ import java.lang.NullPointerException; // for javadoc * resource locator. Hence every URL is a URI, abstractly speaking, but * not every URI is a URL. This is because there is another subcategory of * URIs, uniform resource names (URNs), which name resources but do not - * specify how to locate them. The mailto, news, and - * isbn URIs shown above are examples of URNs. + * specify how to locate them. The {@code mailto}, {@code news}, and + * {@code isbn} URIs shown above are examples of URNs. * *

      The conceptual distinction between URIs and URLs is reflected in the * differences between this class and the {@link URL} class. @@ -535,7 +528,7 @@ public final class URI *

    • An empty authority component is permitted as long as it is * followed by a non-empty path, a query component, or a fragment * component. This allows the parsing of URIs such as - * "file:///foo/bar", which seems to be the intent of + * {@code "file:///foo/bar"}, which seems to be the intent of * RFC 2396 although the grammar does not permit it. If the * authority component is empty then the user-information, host, and port * components are undefined.

    • @@ -543,7 +536,7 @@ public final class URI *
    • Empty relative paths are permitted; this seems to be the * intent of RFC 2396 although the grammar does not permit it. The * primary consequence of this deviation is that a standalone fragment - * such as "#foo" parses as a relative URI with an empty path + * such as {@code "#foo"} parses as a relative URI with an empty path * and the given fragment, and can be usefully resolved against a base URI. * @@ -560,12 +553,12 @@ public final class URI * href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396 * section 3.2.2 although the grammar does not permit it. The * consequence of this deviation is that the authority component of a - * hierarchical URI such as s://123, will parse as a server-based + * hierarchical URI such as {@code s://123}, will parse as a server-based * authority.

    • * *
    • IPv6 addresses are permitted for the host component. An IPv6 - * address must be enclosed in square brackets ('[' and - * ']') as specified by RFC 2732. The * IPv6 address itself must parse according to RFC 2373. IPv6 @@ -585,7 +578,7 @@ public final class URI * @param str The string to be parsed into a URI * * @throws NullPointerException - * If str is null + * If {@code str} is {@code null} * * @throws URISyntaxException * If the given string violates RFC 2396, as augmented @@ -599,10 +592,10 @@ public final class URI * Constructs a hierarchical URI from the given components. * *

      If a scheme is given then the path, if also given, must either be - * empty or begin with a slash character ('/'). Otherwise a - * component of the new URI may be left undefined by passing null - * for the corresponding parameter or, in the case of the port - * parameter, by passing -1. + * empty or begin with a slash character ({@code '/'}). Otherwise a + * component of the new URI may be left undefined by passing {@code null} + * for the corresponding parameter or, in the case of the {@code port} + * parameter, by passing {@code -1}. * *

      This constructor first builds a URI string from the given components * according to the rules specified in

      Initially, the result string is empty.

    • * *
    • If a scheme is given then it is appended to the result, - * followed by a colon character (':').

    • + * followed by a colon character ({@code ':'}).

      * *
    • If user information, a host, or a port are given then the - * string "//" is appended.

    • + * string {@code "//"} is appended.

      * *
    • If user information is given then it is appended, followed by - * a commercial-at character ('@'). Any character not in the + * a commercial-at character ({@code '@'}). Any character not in the * unreserved, punct, escaped, or other * categories is quoted.

    • * *
    • If a host is given then it is appended. If the host is a * literal IPv6 address but is not enclosed in square brackets - * ('[' and ']') then the square brackets are added. + * ({@code '['} and {@code ']'}) then the square brackets are added. *

    • * *
    • If a port number is given then a colon character - * (':') is appended, followed by the port number in decimal. + * ({@code ':'}) is appended, followed by the port number in decimal. *

    • * *
    • If a path is given then it is appended. Any character not in * the unreserved, punct, escaped, or other - * categories, and not equal to the slash character ('/') or the - * commercial-at character ('@'), is quoted.

    • + * categories, and not equal to the slash character ({@code '/'}) or the + * commercial-at character ({@code '@'}), is quoted.

      * *
    • If a query is given then a question-mark character - * ('?') is appended, followed by the query. Any character that + * ({@code '?'}) is appended, followed by the query. Any character that * is not a legal URI character is quoted. *

    • * *
    • Finally, if a fragment is given then a hash character - * ('#') is appended, followed by the fragment. Any character + * ({@code '#'}) is appended, followed by the fragment. Any character * that is not a legal URI character is quoted.

    • * * @@ -684,8 +677,8 @@ public final class URI * Constructs a hierarchical URI from the given components. * *

      If a scheme is given then the path, if also given, must either be - * empty or begin with a slash character ('/'). Otherwise a - * component of the new URI may be left undefined by passing null + * empty or begin with a slash character ({@code '/'}). Otherwise a + * component of the new URI may be left undefined by passing {@code null} * for the corresponding parameter. * *

      This constructor first builds a URI string from the given components @@ -698,28 +691,28 @@ public final class URI *

    • Initially, the result string is empty.

    • * *
    • If a scheme is given then it is appended to the result, - * followed by a colon character (':').

    • + * followed by a colon character ({@code ':'}).

      * - *
    • If an authority is given then the string "//" is + *

    • If an authority is given then the string {@code "//"} is * appended, followed by the authority. If the authority contains a * literal IPv6 address then the address must be enclosed in square - * brackets ('[' and ']'). Any character not in the + * brackets ({@code '['} and {@code ']'}). Any character not in the * unreserved, punct, escaped, or other * categories, and not equal to the commercial-at character - * ('@'), is quoted.

    • + * ({@code '@'}), is quoted.

      * *
    • If a path is given then it is appended. Any character not in * the unreserved, punct, escaped, or other - * categories, and not equal to the slash character ('/') or the - * commercial-at character ('@'), is quoted.

    • + * categories, and not equal to the slash character ({@code '/'}) or the + * commercial-at character ({@code '@'}), is quoted.

      * *
    • If a query is given then a question-mark character - * ('?') is appended, followed by the query. Any character that + * ({@code '?'}) is appended, followed by the query. Any character that * is not a legal URI character is quoted. *

    • * *
    • Finally, if a fragment is given then a hash character - * ('#') is appended, followed by the fragment. Any character + * ({@code '#'}) is appended, followed by the fragment. Any character * that is not a legal URI character is quoted.

    • * * @@ -756,15 +749,15 @@ public final class URI /** * Constructs a hierarchical URI from the given components. * - *

      A component may be left undefined by passing null. + *

      A component may be left undefined by passing {@code null}. * *

      This convenience constructor works as if by invoking the * seven-argument constructor as follows: * - *

      - * new {@link #URI(String, String, String, int, String, String, String) - * URI}(scheme, null, host, -1, path, null, fragment); - *
      + *
      + * {@code new} {@link #URI(String, String, String, int, String, String, String) + * URI}{@code (scheme, null, host, -1, path, null, fragment);} + *
      * * @param scheme Scheme name * @param host Host name @@ -784,7 +777,7 @@ public final class URI /** * Constructs a URI from the given components. * - *

      A component may be left undefined by passing null. + *

      A component may be left undefined by passing {@code null}. * *

      This constructor first builds a URI in string form using the given * components as follows:

      @@ -794,14 +787,14 @@ public final class URI *
    • Initially, the result string is empty.

    • * *
    • If a scheme is given then it is appended to the result, - * followed by a colon character (':').

    • + * followed by a colon character ({@code ':'}).

      * *
    • If a scheme-specific part is given then it is appended. Any * character that is not a legal URI character * is quoted.

    • * *
    • Finally, if a fragment is given then a hash character - * ('#') is appended to the string, followed by the fragment. + * ({@code '#'}) is appended to the string, followed by the fragment. * Any character that is not a legal URI character is quoted.

    • * * @@ -847,7 +840,7 @@ public final class URI * @return The new URI * * @throws NullPointerException - * If str is null + * If {@code str} is {@code null} * * @throws IllegalArgumentException * If the given string violates RFC 2396 @@ -882,7 +875,7 @@ public final class URI * cannot always distinguish a malformed server-based authority from a * legitimate registry-based authority. It must therefore treat some * instances of the former as instances of the latter. The authority - * component in the URI string "//foo:bar", for example, is not a + * component in the URI string {@code "//foo:bar"}, for example, is not a * legal server-based authority but it is legal as a registry-based * authority. * @@ -892,7 +885,7 @@ public final class URI * treated as an error. In these cases a statement such as * *
      - * URI u = new URI(str).parseServerAuthority(); + * {@code URI }u{@code = new URI(str).parseServerAuthority();} *
      * *

      can be used to ensure that u always refers to a URI that, if @@ -936,26 +929,26 @@ public final class URI * *

        * - *
      1. All "." segments are removed.

      2. + *
      3. All {@code "."} segments are removed.

      4. * - *
      5. If a ".." segment is preceded by a non-".." + *

      6. If a {@code ".."} segment is preceded by a non-{@code ".."} * segment then both of these segments are removed. This step is * repeated until it is no longer applicable.

      7. * *
      8. If the path is relative, and if its first segment contains a - * colon character (':'), then a "." segment is + * colon character ({@code ':'}), then a {@code "."} segment is * prepended. This prevents a relative URI with a path such as - * "a:b/c/d" from later being re-parsed as an opaque URI with a - * scheme of "a" and a scheme-specific part of "b/c/d". + * {@code "a:b/c/d"} from later being re-parsed as an opaque URI with a + * scheme of {@code "a"} and a scheme-specific part of {@code "b/c/d"}. * (Deviation from RFC 2396)

      9. * *
      * - *

      A normalized path will begin with one or more ".." segments - * if there were insufficient non-".." segments preceding them to - * allow their removal. A normalized path will begin with a "." + *

      A normalized path will begin with one or more {@code ".."} segments + * if there were insufficient non-{@code ".."} segments preceding them to + * allow their removal. A normalized path will begin with a {@code "."} * segment if one was inserted by step 3 above. Otherwise, a normalized - * path will not contain any "." or ".." segments.

      + * path will not contain any {@code "."} or {@code ".."} segments.

      * * @return A URI equivalent to this URI, * but whose path is in normal form @@ -975,7 +968,7 @@ public final class URI * query components are undefined, then a URI with the given fragment but * with all other components equal to those of this URI is returned. This * allows a URI representing a standalone fragment reference, such as - * "#foo", to be usefully resolved against a base URI. + * {@code "#foo"}, to be usefully resolved against a base URI. * *

      Otherwise this method constructs a new hierarchical URI in a manner * consistent with uri is null + * If {@code uri} is {@code null} */ public URI resolve(URI uri) { return resolve(this, uri); @@ -1027,14 +1020,14 @@ public final class URI * against this URI. * *

      This convenience method works as if invoking it were equivalent to - * evaluating the expression {@link #resolve(java.net.URI) - * resolve}(URI.{@link #create(String) create}(str)).

      + * evaluating the expression {@link #resolve(java.net.URI) + * resolve}{@code (URI.}{@link #create(String) create}{@code (str))}.

      * * @param str The string to be parsed into a URI * @return The resulting URI * * @throws NullPointerException - * If str is null + * If {@code str} is {@code null} * * @throws IllegalArgumentException * If the given string violates RFC 2396 @@ -1067,7 +1060,7 @@ public final class URI * @return The resulting URI * * @throws NullPointerException - * If uri is null + * If {@code uri} is {@code null} */ public URI relativize(URI uri) { return relativize(this, uri); @@ -1077,7 +1070,7 @@ public final class URI * Constructs a URL from this URI. * *

      This convenience method works as if invoking it were equivalent to - * evaluating the expression new URL(this.toString()) after + * evaluating the expression {@code new URL(this.toString())} after * first checking that this URI is absolute.

      * * @return A URL constructed from this URI @@ -1102,14 +1095,14 @@ public final class URI * Returns the scheme component of this URI. * *

      The scheme component of a URI, if defined, only contains characters - * in the alphanum category and in the string "-.+". A + * in the alphanum category and in the string {@code "-.+"}. A * scheme always starts with an alpha character.

      * * The scheme component of a URI cannot contain escaped octets, hence this * method does not perform any decoding. * * @return The scheme component of this URI, - * or null if the scheme is undefined + * or {@code null} if the scheme is undefined */ public String getScheme() { return scheme; @@ -1120,7 +1113,7 @@ public final class URI * *

      A URI is absolute if, and only if, it has a scheme component.

      * - * @return true if, and only if, this URI is absolute + * @return {@code true} if, and only if, this URI is absolute */ public boolean isAbsolute() { return scheme != null; @@ -1134,7 +1127,7 @@ public final class URI * An opaque URI has a scheme, a scheme-specific part, and possibly * a fragment; all other components are undefined.

      * - * @return true if, and only if, this URI is opaque + * @return {@code true} if, and only if, this URI is opaque */ public boolean isOpaque() { return path == null; @@ -1148,7 +1141,7 @@ public final class URI * characters.

      * * @return The raw scheme-specific part of this URI - * (never null) + * (never {@code null}) */ public String getRawSchemeSpecificPart() { defineSchemeSpecificPart(); @@ -1164,7 +1157,7 @@ public final class URI * href="#decode">decoded
      .

      * * @return The decoded scheme-specific part of this URI - * (never null) + * (never {@code null}) */ public String getSchemeSpecificPart() { if (decodedSchemeSpecificPart == null) @@ -1176,14 +1169,14 @@ public final class URI * Returns the raw authority component of this URI. * *

      The authority component of a URI, if defined, only contains the - * commercial-at character ('@') and characters in the + * commercial-at character ({@code '@'}) and characters in the * unreserved, punct, escaped, and other * categories. If the authority is server-based then it is further * constrained to have valid user-information, host, and port * components.

      * * @return The raw authority component of this URI, - * or null if the authority is undefined + * or {@code null} if the authority is undefined */ public String getRawAuthority() { return authority; @@ -1197,7 +1190,7 @@ public final class URI * sequences of escaped octets are decoded.

      * * @return The decoded authority component of this URI, - * or null if the authority is undefined + * or {@code null} if the authority is undefined */ public String getAuthority() { if (decodedAuthority == null) @@ -1213,7 +1206,7 @@ public final class URI * other categories.

      * * @return The raw user-information component of this URI, - * or null if the user information is undefined + * or {@code null} if the user information is undefined */ public String getRawUserInfo() { return userInfo; @@ -1227,7 +1220,7 @@ public final class URI * sequences of escaped octets are decoded.

      * * @return The decoded user-information component of this URI, - * or null if the user information is undefined + * or {@code null} if the user information is undefined */ public String getUserInfo() { if ((decodedUserInfo == null) && (userInfo != null)) @@ -1244,21 +1237,21 @@ public final class URI *
        * *
      • A domain name consisting of one or more labels - * separated by period characters ('.'), optionally followed by + * separated by period characters ({@code '.'}), optionally followed by * a period character. Each label consists of alphanum characters - * as well as hyphen characters ('-'), though hyphens never + * as well as hyphen characters ({@code '-'}), though hyphens never * occur as the first or last characters in a label. The rightmost * label of a domain name consisting of two or more labels, begins * with an alpha character.

      • * *
      • A dotted-quad IPv4 address of the form - * digit+.digit+.digit+.digit+, + * digit{@code +.}digit{@code +.}digit{@code +.}digit{@code +}, * where no digit sequence is longer than three characters and no * sequence has a value larger than 255.

      • * - *
      • An IPv6 address enclosed in square brackets ('[' and - * ']') and consisting of hexadecimal digits, colon characters - * (':'), and possibly an embedded IPv4 address. The full + *

      • An IPv6 address enclosed in square brackets ({@code '['} and + * {@code ']'}) and consisting of hexadecimal digits, colon characters + * ({@code ':'}), and possibly an embedded IPv4 address. The full * syntax of IPv6 addresses is specified in RFC 2373: IPv6 * Addressing Architecture.

      • @@ -1269,7 +1262,7 @@ public final class URI * method does not perform any decoding. * * @return The host component of this URI, - * or null if the host is undefined + * or {@code null} if the host is undefined */ public String getHost() { return host; @@ -1282,7 +1275,7 @@ public final class URI * integer.

        * * @return The port component of this URI, - * or -1 if the port is undefined + * or {@code -1} if the port is undefined */ public int getPort() { return port; @@ -1292,12 +1285,12 @@ public final class URI * Returns the raw path component of this URI. * *

        The path component of a URI, if defined, only contains the slash - * character ('/'), the commercial-at character ('@'), + * character ({@code '/'}), the commercial-at character ({@code '@'}), * and characters in the unreserved, punct, escaped, * and other categories.

        * * @return The path component of this URI, - * or null if the path is undefined + * or {@code null} if the path is undefined */ public String getRawPath() { return path; @@ -1311,7 +1304,7 @@ public final class URI * escaped octets are decoded.

        * * @return The decoded path component of this URI, - * or null if the path is undefined + * or {@code null} if the path is undefined */ public String getPath() { if ((decodedPath == null) && (path != null)) @@ -1326,7 +1319,7 @@ public final class URI * characters.

        * * @return The raw query component of this URI, - * or null if the query is undefined + * or {@code null} if the query is undefined */ public String getRawQuery() { return query; @@ -1340,7 +1333,7 @@ public final class URI * escaped octets are decoded.

        * * @return The decoded query component of this URI, - * or null if the query is undefined + * or {@code null} if the query is undefined */ public String getQuery() { if ((decodedQuery == null) && (query != null)) @@ -1355,7 +1348,7 @@ public final class URI * characters.

        * * @return The raw fragment component of this URI, - * or null if the fragment is undefined + * or {@code null} if the fragment is undefined */ public String getRawFragment() { return fragment; @@ -1369,7 +1362,7 @@ public final class URI * sequences of escaped octets are decoded.

        * * @return The decoded fragment component of this URI, - * or null if the fragment is undefined + * or {@code null} if the fragment is undefined */ public String getFragment() { if ((decodedFragment == null) && (fragment != null)) @@ -1384,7 +1377,7 @@ public final class URI * Tests this URI for equality with another object. * *

        If the given object is not a URI then this method immediately - * returns false. + * returns {@code false}. * *

        For two URIs to be considered equal requires that either both are * opaque or both are hierarchical. Their schemes must either both be @@ -1414,7 +1407,7 @@ public final class URI * * @param ob The object to which this object is to be compared * - * @return true if, and only if, the given object is a URI that + * @return {@code true} if, and only if, the given object is a URI that * is identical to this URI */ public boolean equals(Object ob) { @@ -1635,7 +1628,7 @@ public final class URI /** * Saves the content of this URI to the given serial stream. * - *

        The only serializable field of a URI instance is its string + *

        The only serializable field of a URI instance is its {@code string} * field. That field is given a value, if it does not have one already, * and then the {@link java.io.ObjectOutputStream#defaultWriteObject()} * method of the given object-output stream is invoked.

        @@ -1654,7 +1647,7 @@ public final class URI * Reconstitutes a URI from the given serial stream. * *

        The {@link java.io.ObjectInputStream#defaultReadObject()} method is - * invoked to read the value of the string field. The result is + * invoked to read the value of the {@code string} field. The result is * then parsed in the usual way. * * @param is The object-input stream from which this object diff --git a/src/share/classes/java/net/URISyntaxException.java b/src/share/classes/java/net/URISyntaxException.java index df4a02a5ef85439872b4f1c607df84c11c017e51..8072c37244e49c36852bb7d4d90a563be38ca938 100644 --- a/src/share/classes/java/net/URISyntaxException.java +++ b/src/share/classes/java/net/URISyntaxException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,13 +50,13 @@ public class URISyntaxException * @param input The input string * @param reason A string explaining why the input could not be parsed * @param index The index at which the parse error occurred, - * or -1 if the index is not known + * or {@code -1} if the index is not known * * @throws NullPointerException - * If either the input or reason strings are null + * If either the input or reason strings are {@code null} * * @throws IllegalArgumentException - * If the error index is less than -1 + * If the error index is less than {@code -1} */ public URISyntaxException(String input, String reason, int index) { super(reason); @@ -70,13 +70,13 @@ public class URISyntaxException /** * Constructs an instance from the given input string and reason. The - * resulting object will have an error index of -1. + * resulting object will have an error index of {@code -1}. * * @param input The input string * @param reason A string explaining why the input could not be parsed * * @throws NullPointerException - * If either the input or reason strings are null + * If either the input or reason strings are {@code null} */ public URISyntaxException(String input, String reason) { this(input, reason, -1); @@ -102,7 +102,7 @@ public class URISyntaxException /** * Returns an index into the input string of the position at which the - * parse error occurred, or -1 if this position is not known. + * parse error occurred, or {@code -1} if this position is not known. * * @return The error index */ @@ -113,8 +113,8 @@ public class URISyntaxException /** * Returns a string describing the parse error. The resulting string * consists of the reason string followed by a colon character - * (':'), a space, and the input string. If the error index is - * defined then the string " at index " followed by the index, in + * ({@code ':'}), a space, and the input string. If the error index is + * defined then the string {@code " at index "} followed by the index, in * decimal, is inserted after the reason string and before the colon * character. * diff --git a/src/share/classes/java/net/URL.java b/src/share/classes/java/net/URL.java index caa1d5964cb6bb96e41f38df7dce8fc0086cf076..e7946d22e89fc12ceaba94eb3f59e7d276b4f767 100644 --- a/src/share/classes/java/net/URL.java +++ b/src/share/classes/java/net/URL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ import java.util.StringTokenizer; import sun.security.util.SecurityConstants; /** - * Class URL represents a Uniform Resource + * Class {@code URL} represents a Uniform Resource * Locator, a pointer to a "resource" on the World * Wide Web. A resource can be something as simple as a file or a * directory, or it can be a reference to a more complicated object, @@ -49,10 +49,10 @@ import sun.security.util.SecurityConstants; * *

        * The URL above indicates that the protocol to use is - * http (HyperText Transfer Protocol) and that the + * {@code http} (HyperText Transfer Protocol) and that the * information resides on a host machine named - * www.example.com. The information on that host - * machine is named /docs/resource1.html. The exact + * {@code www.example.com}. The information on that host + * machine is named {@code /docs/resource1.html}. The exact * meaning of this name on the host machine is both protocol * dependent and host dependent. The information normally resides in * a file, but it could be generated on the fly. This component of @@ -62,13 +62,13 @@ import sun.security.util.SecurityConstants; * port number to which the TCP connection is made on the remote host * machine. If the port is not specified, the default port for * the protocol is used instead. For example, the default port for - * http is 80. An alternative port could be + * {@code http} is {@code 80}. An alternative port could be * specified as: *

          *     http://www.example.com:1080/docs/resource1.html
          * 
        *

        - * The syntax of URL is defined by RFC 2396: Uniform * Resource Identifiers (URI): Generic Syntax, amended by RFC 2732: Format for @@ -86,7 +86,7 @@ import sun.security.util.SecurityConstants; * This fragment is not technically part of the URL. Rather, it * indicates that after the specified resource is retrieved, the * application is specifically interested in that part of the - * document that has the tag chapter1 attached to it. The + * document that has the tag {@code chapter1} attached to it. The * meaning of a tag is resource specific. *

        * An application can also specify a "relative URL", @@ -170,8 +170,8 @@ public final class URL implements java.io.Serializable { private int port = -1; /** - * The specified file name on that host. file is - * defined as path[?query] + * The specified file name on that host. {@code file} is + * defined as {@code path[?query]} * @serial */ private String file; @@ -220,42 +220,42 @@ public final class URL implements java.io.Serializable { private int hashCode = -1; /** - * Creates a URL object from the specified - * protocol, host, port - * number, and file.

        + * Creates a {@code URL} object from the specified + * {@code protocol}, {@code host}, {@code port} + * number, and {@code file}.

        * - * host can be expressed as a host name or a literal + * {@code host} can be expressed as a host name or a literal * IP address. If IPv6 literal address is used, it should be - * enclosed in square brackets ('[' and ']'), as + * enclosed in square brackets ({@code '['} and {@code ']'}), as * specified by RFC 2732; * However, the literal IPv6 address format defined in RFC 2373: IP * Version 6 Addressing Architecture is also accepted.

        * - * Specifying a port number of -1 + * Specifying a {@code port} number of {@code -1} * indicates that the URL should use the default port for the * protocol.

        * * If this is the first URL object being created with the specified * protocol, a stream protocol handler object, an instance of - * class URLStreamHandler, is created for that protocol: + * class {@code URLStreamHandler}, is created for that protocol: *

          *
        1. If the application has previously set up an instance of - * URLStreamHandlerFactory as the stream handler factory, - * then the createURLStreamHandler method of that instance + * {@code URLStreamHandlerFactory} as the stream handler factory, + * then the {@code createURLStreamHandler} method of that instance * is called with the protocol string as an argument to create the * stream protocol handler. - *
        2. If no URLStreamHandlerFactory has yet been set up, - * or if the factory's createURLStreamHandler method - * returns null, then the constructor finds the + *
        3. If no {@code URLStreamHandlerFactory} has yet been set up, + * or if the factory's {@code createURLStreamHandler} method + * returns {@code null}, then the constructor finds the * value of the system property: *
                *         java.protocol.handler.pkgs
                *     
          - * If the value of that system property is not null, + * If the value of that system property is not {@code null}, * it is interpreted as a list of packages separated by a vertical - * slash character '|'. The constructor tries to load + * slash character '{@code |}'. The constructor tries to load * the class named: *
                *         <package>.<protocol>.Handler
          @@ -263,7 +263,7 @@ public final class URL implements java.io.Serializable {
                *     where <package> is replaced by the name of the package
                *     and <protocol> is replaced by the name of the protocol.
                *     If this class does not exist, or if the class exists but it is not
          -     *     a subclass of URLStreamHandler, then the next package
          +     *     a subclass of {@code URLStreamHandler}, then the next package
                *     in the list is tried.
                * 
        4. If the previous step fails to find a protocol handler, then the * constructor tries to load from a system default package. @@ -271,8 +271,8 @@ public final class URL implements java.io.Serializable { * <system default package>.<protocol>.Handler *
        5. * If this class does not exist, or if the class exists but it is not a - * subclass of URLStreamHandler, then a - * MalformedURLException is thrown. + * subclass of {@code URLStreamHandler}, then a + * {@code MalformedURLException} is thrown. *
        * *

        Protocol handlers for the following protocols are guaranteed @@ -304,13 +304,13 @@ public final class URL implements java.io.Serializable { } /** - * Creates a URL from the specified protocol - * name, host name, and file name. The + * Creates a URL from the specified {@code protocol} + * name, {@code host} name, and {@code file} name. The * default port for the specified protocol is used. *

        * This method is equivalent to calling the four-argument - * constructor with the arguments being protocol, - * host, -1, and file. + * constructor with the arguments being {@code protocol}, + * {@code host}, {@code -1}, and {@code file}. * * No validation of the inputs is performed by this constructor. * @@ -327,21 +327,21 @@ public final class URL implements java.io.Serializable { } /** - * Creates a URL object from the specified - * protocol, host, port - * number, file, and handler. Specifying - * a port number of -1 indicates that + * Creates a {@code URL} object from the specified + * {@code protocol}, {@code host}, {@code port} + * number, {@code file}, and {@code handler}. Specifying + * a {@code port} number of {@code -1} indicates that * the URL should use the default port for the protocol. Specifying - * a handler of null indicates that the URL + * a {@code handler} of {@code null} indicates that the URL * should use a default stream handler for the protocol, as outlined * for: * java.net.URL#URL(java.lang.String, java.lang.String, int, * java.lang.String) * *

        If the handler is not null and there is a security manager, - * the security manager's checkPermission + * the security manager's {@code checkPermission} * method is called with a - * NetPermission("specifyStreamHandler") permission. + * {@code NetPermission("specifyStreamHandler")} permission. * This may result in a SecurityException. * * No validation of the inputs is performed by this constructor. @@ -354,7 +354,7 @@ public final class URL implements java.io.Serializable { * @exception MalformedURLException if an unknown protocol is specified. * @exception SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * specifying a stream handler explicitly. * @see java.lang.System#getProperty(java.lang.String) * @see java.net.URL#setURLStreamHandlerFactory( @@ -417,15 +417,15 @@ public final class URL implements java.io.Serializable { } /** - * Creates a URL object from the String + * Creates a {@code URL} object from the {@code String} * representation. *

        * This constructor is equivalent to a call to the two-argument - * constructor with a null first argument. + * constructor with a {@code null} first argument. * - * @param spec the String to parse as a URL. + * @param spec the {@code String} to parse as a URL. * @exception MalformedURLException if no protocol is specified, or an - * unknown protocol is found, or spec is null. + * unknown protocol is found, or {@code spec} is {@code null}. * @see java.net.URL#URL(java.net.URL, java.lang.String) */ public URL(String spec) throws MalformedURLException { @@ -470,9 +470,9 @@ public final class URL implements java.io.Serializable { * For a more detailed description of URL parsing, refer to RFC2396. * * @param context the context in which to parse the specification. - * @param spec the String to parse as a URL. + * @param spec the {@code String} to parse as a URL. * @exception MalformedURLException if no protocol is specified, or an - * unknown protocol is found, or spec is null. + * unknown protocol is found, or {@code spec} is {@code null}. * @see java.net.URL#URL(java.lang.String, java.lang.String, * int, java.lang.String) * @see java.net.URLStreamHandler @@ -489,13 +489,13 @@ public final class URL implements java.io.Serializable { * occurs as with the two argument constructor. * * @param context the context in which to parse the specification. - * @param spec the String to parse as a URL. + * @param spec the {@code String} to parse as a URL. * @param handler the stream handler for the URL. * @exception MalformedURLException if no protocol is specified, or an - * unknown protocol is found, or spec is null. + * unknown protocol is found, or {@code spec} is {@code null}. * @exception SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * specifying a stream handler. * @see java.net.URL#URL(java.lang.String, java.lang.String, * int, java.lang.String) @@ -719,9 +719,9 @@ public final class URL implements java.io.Serializable { } /** - * Gets the query part of this URL. + * Gets the query part of this {@code URL}. * - * @return the query part of this URL, + * @return the query part of this {@code URL}, * or null if one does not exist * @since 1.3 */ @@ -730,9 +730,9 @@ public final class URL implements java.io.Serializable { } /** - * Gets the path part of this URL. + * Gets the path part of this {@code URL}. * - * @return the path part of this URL, or an + * @return the path part of this {@code URL}, or an * empty string if one does not exist * @since 1.3 */ @@ -741,9 +741,9 @@ public final class URL implements java.io.Serializable { } /** - * Gets the userInfo part of this URL. + * Gets the userInfo part of this {@code URL}. * - * @return the userInfo part of this URL, or + * @return the userInfo part of this {@code URL}, or * null if one does not exist * @since 1.3 */ @@ -752,9 +752,9 @@ public final class URL implements java.io.Serializable { } /** - * Gets the authority part of this URL. + * Gets the authority part of this {@code URL}. * - * @return the authority part of this URL + * @return the authority part of this {@code URL} * @since 1.3 */ public String getAuthority() { @@ -762,7 +762,7 @@ public final class URL implements java.io.Serializable { } /** - * Gets the port number of this URL. + * Gets the port number of this {@code URL}. * * @return the port number, or -1 if the port is not set */ @@ -772,7 +772,7 @@ public final class URL implements java.io.Serializable { /** * Gets the default port number of the protocol associated - * with this URL. If the URL scheme or the URLStreamHandler + * with this {@code URL}. If the URL scheme or the URLStreamHandler * for the URL do not define a default port number, * then -1 is returned. * @@ -784,35 +784,35 @@ public final class URL implements java.io.Serializable { } /** - * Gets the protocol name of this URL. + * Gets the protocol name of this {@code URL}. * - * @return the protocol of this URL. + * @return the protocol of this {@code URL}. */ public String getProtocol() { return protocol; } /** - * Gets the host name of this URL, if applicable. + * Gets the host name of this {@code URL}, if applicable. * The format of the host conforms to RFC 2732, i.e. for a * literal IPv6 address, this method will return the IPv6 address - * enclosed in square brackets ('[' and ']'). + * enclosed in square brackets ({@code '['} and {@code ']'}). * - * @return the host name of this URL. + * @return the host name of this {@code URL}. */ public String getHost() { return host; } /** - * Gets the file name of this URL. + * Gets the file name of this {@code URL}. * The returned file portion will be * the same as getPath(), plus the concatenation of * the value of getQuery(), if any. If there is * no query portion, this method and getPath() will * return identical results. * - * @return the file name of this URL, + * @return the file name of this {@code URL}, * or an empty string if one does not exist */ public String getFile() { @@ -821,10 +821,10 @@ public final class URL implements java.io.Serializable { /** * Gets the anchor (also known as the "reference") of this - * URL. + * {@code URL}. * * @return the anchor (also known as the "reference") of this - * URL, or null if one does not exist + * {@code URL}, or null if one does not exist */ public String getRef() { return ref; @@ -834,7 +834,7 @@ public final class URL implements java.io.Serializable { * Compares this URL for equality with another object.

        * * If the given object is not a URL then this method immediately returns - * false.

        + * {@code false}.

        * * Two URL objects are equal if they have the same protocol, reference * equivalent hosts, have the same port number on the host, and the same @@ -848,12 +848,12 @@ public final class URL implements java.io.Serializable { * Since hosts comparison requires name resolution, this operation is a * blocking operation.

        * - * Note: The defined behavior for equals is known to + * Note: The defined behavior for {@code equals} is known to * be inconsistent with virtual hosting in HTTP. * * @param obj the URL to compare against. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. */ public boolean equals(Object obj) { if (!(obj instanceof URL)) @@ -869,7 +869,7 @@ public final class URL implements java.io.Serializable { * The hash code is based upon all the URL components relevant for URL * comparison. As such, this operation is a blocking operation.

        * - * @return a hash code for this URL. + * @return a hash code for this {@code URL}. */ public synchronized int hashCode() { if (hashCode != -1) @@ -882,21 +882,21 @@ public final class URL implements java.io.Serializable { /** * Compares two URLs, excluding the fragment component.

        * - * Returns true if this URL and the - * other argument are equal without taking the + * Returns {@code true} if this {@code URL} and the + * {@code other} argument are equal without taking the * fragment component into consideration. * - * @param other the URL to compare against. - * @return true if they reference the same remote object; - * false otherwise. + * @param other the {@code URL} to compare against. + * @return {@code true} if they reference the same remote object; + * {@code false} otherwise. */ public boolean sameFile(URL other) { return handler.sameFile(this, other); } /** - * Constructs a string representation of this URL. The - * string is created by calling the toExternalForm + * Constructs a string representation of this {@code URL}. The + * string is created by calling the {@code toExternalForm} * method of the stream protocol handler for this object. * * @return a string representation of this object. @@ -909,8 +909,8 @@ public final class URL implements java.io.Serializable { } /** - * Constructs a string representation of this URL. The - * string is created by calling the toExternalForm + * Constructs a string representation of this {@code URL}. The + * string is created by calling the {@code toExternalForm} * method of the stream protocol handler for this object. * * @return a string representation of this object. @@ -924,7 +924,7 @@ public final class URL implements java.io.Serializable { /** * Returns a {@link java.net.URI} equivalent to this URL. - * This method functions in the same way as new URI (this.toString()). + * This method functions in the same way as {@code new URI (this.toString())}. *

        Note, any URL instance that complies with RFC 2396 can be converted * to a URI. However, some URLs that are not strictly in compliance * can not be converted to a URI. @@ -984,7 +984,7 @@ public final class URL implements java.io.Serializable { * @param proxy the Proxy through which this connection * will be made. If direct connection is desired, * Proxy.NO_PROXY should be specified. - * @return a URLConnection to the URL. + * @return a {@code URLConnection} to the URL. * @exception IOException if an I/O exception occurs. * @exception SecurityException if a security manager is present * and the caller doesn't have permission to connect @@ -1022,8 +1022,8 @@ public final class URL implements java.io.Serializable { } /** - * Opens a connection to this URL and returns an - * InputStream for reading from that connection. This + * Opens a connection to this {@code URL} and returns an + * {@code InputStream} for reading from that connection. This * method is a shorthand for: *

              *     openConnection().getInputStream()
        @@ -1077,22 +1077,22 @@ public final class URL implements java.io.Serializable {
             static URLStreamHandlerFactory factory;
         
             /**
        -     * Sets an application's URLStreamHandlerFactory.
        +     * Sets an application's {@code URLStreamHandlerFactory}.
              * This method can be called at most once in a given Java Virtual
              * Machine.
              *
        -     *

        The URLStreamHandlerFactory instance is used to + *

        The {@code URLStreamHandlerFactory} instance is used to *construct a stream protocol handler from a protocol name. * *

        If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * * @param fac the desired factory. * @exception Error if the application has already set a factory. * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't allow + * {@code checkSetFactory} method doesn't allow * the operation. * @see java.net.URL#URL(java.lang.String, java.lang.String, * int, java.lang.String) diff --git a/src/share/classes/java/net/URLClassLoader.java b/src/share/classes/java/net/URLClassLoader.java index ba611dd3e0b829c5254d17ea8821ef6afce9ea0d..fa371864cd41ee3fdc7b1b0d6c99d6cca8dc091b 100644 --- a/src/share/classes/java/net/URLClassLoader.java +++ b/src/share/classes/java/net/URLClassLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -117,7 +117,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { /** * Constructs a new URLClassLoader for the specified URLs using the - * default delegation parent ClassLoader. The URLs will + * default delegation parent {@code ClassLoader}. The URLs will * be searched in the order specified for classes and resources after * first searching in the parent class loader. Any URL that ends with * a '/' is assumed to refer to a directory. Otherwise, the URL is @@ -125,13 +125,13 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * as needed. * *

        If there is a security manager, this method first - * calls the security manager's checkCreateClassLoader method + * calls the security manager's {@code checkCreateClassLoader} method * to ensure creation of a class loader is allowed. * * @param urls the URLs from which to load classes and resources * * @exception SecurityException if a security manager exists and its - * checkCreateClassLoader method doesn't allow + * {@code checkCreateClassLoader} method doesn't allow * creation of a class loader. * @see SecurityManager#checkCreateClassLoader */ @@ -165,7 +165,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * obtain protocol handlers when creating new jar URLs. * *

        If there is a security manager, this method first - * calls the security manager's checkCreateClassLoader method + * calls the security manager's {@code checkCreateClassLoader} method * to ensure creation of a class loader is allowed. * * @param urls the URLs from which to load classes and resources @@ -173,7 +173,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * @param factory the URLStreamHandlerFactory to use when creating URLs * * @exception SecurityException if a security manager exists and its - * checkCreateClassLoader method doesn't allow + * {@code checkCreateClassLoader} method doesn't allow * creation of a class loader. * @see SecurityManager#checkCreateClassLoader */ @@ -217,7 +217,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * @param name * The resource name * - * @return An input stream for reading the resource, or null + * @return An input stream for reading the resource, or {@code null} * if the resource could not be found * * @since 1.7 @@ -273,7 +273,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * as suppressed exceptions of the first one caught, which is then re-thrown. * * @throws SecurityException if a security manager is set, and it denies - * {@link RuntimePermission}("closeClassLoader") + * {@link RuntimePermission}{@code ("closeClassLoader")} * * @since 1.7 */ @@ -316,7 +316,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * Appends the specified URL to the list of URLs to search for * classes and resources. *

        - * If the URL specified is null or is already in the + * If the URL specified is {@code null} or is already in the * list of URLs, or if this loader is closed, then invoking this * method has no effect. * @@ -537,7 +537,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * Finds the resource with the specified name on the URL search path. * * @param name the name of the resource - * @return a URL for the resource, or null + * @return a {@code URL} for the resource, or {@code null} * if the resource could not be found, or if the loader is closed. */ public URL findResource(final String name) { @@ -560,7 +560,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { * * @param name the resource name * @exception IOException if an I/O exception occurs - * @return an Enumeration of URLs + * @return an {@code Enumeration} of {@code URL}s * If the loader is closed, the Enumeration will be empty. */ public Enumeration findResources(final String name) @@ -699,9 +699,9 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { /** * Creates a new instance of URLClassLoader for the specified * URLs and parent class loader. If a security manager is - * installed, the loadClass method of the URLClassLoader + * installed, the {@code loadClass} method of the URLClassLoader * returned by this method will invoke the - * SecurityManager.checkPackageAccess method before + * {@code SecurityManager.checkPackageAccess} method before * loading the class. * * @param urls the URLs to search for classes and resources @@ -725,9 +725,9 @@ public class URLClassLoader extends SecureClassLoader implements Closeable { /** * Creates a new instance of URLClassLoader for the specified * URLs and default parent class loader. If a security manager is - * installed, the loadClass method of the URLClassLoader + * installed, the {@code loadClass} method of the URLClassLoader * returned by this method will invoke the - * SecurityManager.checkPackageAccess before + * {@code SecurityManager.checkPackageAccess} before * loading the class. * * @param urls the URLs to search for classes and resources diff --git a/src/share/classes/java/net/URLConnection.java b/src/share/classes/java/net/URLConnection.java index b69c00f94a36287c4eba1fb2d784c6563e7e0027..b731ac70d90a1a351dc1889fb22723048e0b7f36 100644 --- a/src/share/classes/java/net/URLConnection.java +++ b/src/share/classes/java/net/URLConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,15 +40,15 @@ import sun.security.util.SecurityConstants; import sun.net.www.MessageHeader; /** - * The abstract class URLConnection is the superclass + * The abstract class {@code URLConnection} is the superclass * of all classes that represent a communications link between the * application and a URL. Instances of this class can be used both to * read from and to write to the resource referenced by the URL. In * general, creating a connection to a URL is a multistep process: *

        *

        - * - * + * + * * * * * - * - * + * + * * + * before attaching it. The "insertProvider" permission subsumes the + * "insertProvider.{provider name}" permission (see the section below for + * more information). + * * * * @@ -186,9 +189,10 @@ import java.util.StringTokenizer; *
        openConnection()connect()
        {@code openConnection()}{@code connect()}
        Manipulate parameters that affect the connection to the remote * resource.Interact with the resource; query header fields and @@ -59,78 +59,78 @@ import sun.net.www.MessageHeader; * *
          *
        1. The connection object is created by invoking the - * openConnection method on a URL. + * {@code openConnection} method on a URL. *
        2. The setup parameters and general request properties are manipulated. *
        3. The actual connection to the remote object is made, using the - * connect method. + * {@code connect} method. *
        4. The remote object becomes available. The header fields and the contents * of the remote object can be accessed. *
        *

        * The setup parameters are modified using the following methods: *

          - *
        • setAllowUserInteraction - *
        • setDoInput - *
        • setDoOutput - *
        • setIfModifiedSince - *
        • setUseCaches + *
        • {@code setAllowUserInteraction} + *
        • {@code setDoInput} + *
        • {@code setDoOutput} + *
        • {@code setIfModifiedSince} + *
        • {@code setUseCaches} *
        *

        * and the general request properties are modified using the method: *

          - *
        • setRequestProperty + *
        • {@code setRequestProperty} *
        *

        - * Default values for the AllowUserInteraction and - * UseCaches parameters can be set using the methods - * setDefaultAllowUserInteraction and - * setDefaultUseCaches. + * Default values for the {@code AllowUserInteraction} and + * {@code UseCaches} parameters can be set using the methods + * {@code setDefaultAllowUserInteraction} and + * {@code setDefaultUseCaches}. *

        - * Each of the above set methods has a corresponding - * get method to retrieve the value of the parameter or + * Each of the above {@code set} methods has a corresponding + * {@code get} method to retrieve the value of the parameter or * general request property. The specific parameters and general * request properties that are applicable are protocol specific. *

        * The following methods are used to access the header fields and * the contents after the connection is made to the remote object: *

          - *
        • getContent - *
        • getHeaderField - *
        • getInputStream - *
        • getOutputStream + *
        • {@code getContent} + *
        • {@code getHeaderField} + *
        • {@code getInputStream} + *
        • {@code getOutputStream} *
        *

        * Certain header fields are accessed frequently. The methods: *

          - *
        • getContentEncoding - *
        • getContentLength - *
        • getContentType - *
        • getDate - *
        • getExpiration - *
        • getLastModifed + *
        • {@code getContentEncoding} + *
        • {@code getContentLength} + *
        • {@code getContentType} + *
        • {@code getDate} + *
        • {@code getExpiration} + *
        • {@code getLastModifed} *
        *

        * provide convenient access to these fields. The - * getContentType method is used by the - * getContent method to determine the type of the remote + * {@code getContentType} method is used by the + * {@code getContent} method to determine the type of the remote * object; subclasses may find it convenient to override the - * getContentType method. + * {@code getContentType} method. *

        * In the common case, all of the pre-connection parameters and * general request properties can be ignored: the pre-connection * parameters and request properties default to sensible values. For * most clients of this interface, there are only two interesting - * methods: getInputStream and getContent, - * which are mirrored in the URL class by convenience methods. + * methods: {@code getInputStream} and {@code getContent}, + * which are mirrored in the {@code URL} class by convenience methods. *

        * More information on the request properties and header fields of - * an http connection can be found at: + * an {@code http} connection can be found at: *

          * http://www.ietf.org/rfc/rfc2616.txt
          * 
        * - * Invoking the close() methods on the InputStream or OutputStream of an - * URLConnection after a request may free network resources associated with this + * Invoking the {@code close()} methods on the {@code InputStream} or {@code OutputStream} of an + * {@code URLConnection} after a request may free network resources associated with this * instance, unless particular protocol specifications specify different behaviours * for it. * @@ -164,10 +164,10 @@ public abstract class URLConnection { * which this connection is opened. *

        * The value of this field can be accessed by the - * getURL method. + * {@code getURL} method. *

        * The default value of this variable is the value of the URL - * argument in the URLConnection constructor. + * argument in the {@code URLConnection} constructor. * * @see java.net.URLConnection#getURL() * @see java.net.URLConnection#url @@ -175,14 +175,14 @@ public abstract class URLConnection { protected URL url; /** - * This variable is set by the setDoInput method. Its - * value is returned by the getDoInput method. + * This variable is set by the {@code setDoInput} method. Its + * value is returned by the {@code getDoInput} method. *

        * A URL connection can be used for input and/or output. Setting the - * doInput flag to true indicates that + * {@code doInput} flag to {@code true} indicates that * the application intends to read data from the URL connection. *

        - * The default value of this field is true. + * The default value of this field is {@code true}. * * @see java.net.URLConnection#getDoInput() * @see java.net.URLConnection#setDoInput(boolean) @@ -190,14 +190,14 @@ public abstract class URLConnection { protected boolean doInput = true; /** - * This variable is set by the setDoOutput method. Its - * value is returned by the getDoOutput method. + * This variable is set by the {@code setDoOutput} method. Its + * value is returned by the {@code getDoOutput} method. *

        * A URL connection can be used for input and/or output. Setting the - * doOutput flag to true indicates + * {@code doOutput} flag to {@code true} indicates * that the application intends to write data to the URL connection. *

        - * The default value of this field is false. + * The default value of this field is {@code false}. * * @see java.net.URLConnection#getDoOutput() * @see java.net.URLConnection#setDoOutput(boolean) @@ -207,17 +207,17 @@ public abstract class URLConnection { private static boolean defaultAllowUserInteraction = false; /** - * If true, this URL is being examined in + * If {@code true}, this {@code URL} is being examined in * a context in which it makes sense to allow user interactions such - * as popping up an authentication dialog. If false, + * as popping up an authentication dialog. If {@code false}, * then no user interaction is allowed. *

        * The value of this field can be set by the - * setAllowUserInteraction method. + * {@code setAllowUserInteraction} method. * Its value is returned by the - * getAllowUserInteraction method. + * {@code getAllowUserInteraction} method. * Its default value is the value of the argument in the last invocation - * of the setDefaultAllowUserInteraction method. + * of the {@code setDefaultAllowUserInteraction} method. * * @see java.net.URLConnection#getAllowUserInteraction() * @see java.net.URLConnection#setAllowUserInteraction(boolean) @@ -228,15 +228,15 @@ public abstract class URLConnection { private static boolean defaultUseCaches = true; /** - * If true, the protocol is allowed to use caching - * whenever it can. If false, the protocol must always + * If {@code true}, the protocol is allowed to use caching + * whenever it can. If {@code false}, the protocol must always * try to get a fresh copy of the object. *

        - * This field is set by the setUseCaches method. Its - * value is returned by the getUseCaches method. + * This field is set by the {@code setUseCaches} method. Its + * value is returned by the {@code getUseCaches} method. *

        * Its default value is the value given in the last invocation of the - * setDefaultUseCaches method. + * {@code setDefaultUseCaches} method. * * @see java.net.URLConnection#setUseCaches(boolean) * @see java.net.URLConnection#getUseCaches() @@ -252,11 +252,11 @@ public abstract class URLConnection { * January 1, 1970, GMT. The object is fetched only if it has been * modified more recently than that time. *

        - * This variable is set by the setIfModifiedSince + * This variable is set by the {@code setIfModifiedSince} * method. Its value is returned by the - * getIfModifiedSince method. + * {@code getIfModifiedSince} method. *

        - * The default value of this field is 0, indicating + * The default value of this field is {@code 0}, indicating * that the fetching must always occur. * * @see java.net.URLConnection#getIfModifiedSince() @@ -265,8 +265,8 @@ public abstract class URLConnection { protected long ifModifiedSince = 0; /** - * If false, this connection object has not created a - * communications link to the specified URL. If true, + * If {@code false}, this connection object has not created a + * communications link to the specified URL. If {@code true}, * the communications link has been established. */ protected boolean connected = false; @@ -320,13 +320,13 @@ public abstract class URLConnection { * Sets the FileNameMap. *

        * If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * * @param map the FileNameMap to be set * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't allow the operation. + * {@code checkSetFactory} method doesn't allow the operation. * @see SecurityManager#checkSetFactory * @see #getFileNameMap() * @since 1.2 @@ -341,9 +341,9 @@ public abstract class URLConnection { * Opens a communications link to the resource referenced by this * URL, if such a connection has not already been established. *

        - * If the connect method is called when the connection - * has already been opened (indicated by the connected - * field having the value true), the call is ignored. + * If the {@code connect} method is called when the connection + * has already been opened (indicated by the {@code connected} + * field having the value {@code true}), the call is ignored. *

        * URLConnection objects go through two phases: first they are * created, then they are connected. After being created, and @@ -375,7 +375,7 @@ public abstract class URLConnection { * the specified timeout. To see the connect timeout set, please * call getConnectTimeout(). * - * @param timeout an int that specifies the connect + * @param timeout an {@code int} that specifies the connect * timeout value in milliseconds * @throws IllegalArgumentException if the timeout parameter is negative * @@ -396,7 +396,7 @@ public abstract class URLConnection { * 0 return implies that the option is disabled * (i.e., timeout of infinity). * - * @return an int that indicates the connect timeout + * @return an {@code int} that indicates the connect timeout * value in milliseconds * @see #setConnectTimeout(int) * @see #connect() @@ -418,7 +418,7 @@ public abstract class URLConnection { * specified timeout. To see the read timeout set, please call * getReadTimeout(). * - * @param timeout an int that specifies the timeout + * @param timeout an {@code int} that specifies the timeout * value to be used in milliseconds * @throws IllegalArgumentException if the timeout parameter is negative * @@ -437,7 +437,7 @@ public abstract class URLConnection { * Returns setting for read timeout. 0 return implies that the * option is disabled (i.e., timeout of infinity). * - * @return an int that indicates the read timeout + * @return an {@code int} that indicates the read timeout * value in milliseconds * * @see #setReadTimeout(int) @@ -459,10 +459,10 @@ public abstract class URLConnection { } /** - * Returns the value of this URLConnection's URL + * Returns the value of this {@code URLConnection}'s {@code URL} * field. * - * @return the value of this URLConnection's URL + * @return the value of this {@code URLConnection}'s {@code URL} * field. * @see java.net.URLConnection#url */ @@ -471,7 +471,7 @@ public abstract class URLConnection { } /** - * Returns the value of the content-length header field. + * Returns the value of the {@code content-length} header field. *

        * Note: {@link #getContentLengthLong() getContentLengthLong()} * should be preferred over this method, since it returns a {@code long} @@ -489,11 +489,11 @@ public abstract class URLConnection { } /** - * Returns the value of the content-length header field as a + * Returns the value of the {@code content-length} header field as a * long. * * @return the content length of the resource that this connection's URL - * references, or -1 if the content length is + * references, or {@code -1} if the content length is * not known. * @since 7.0 */ @@ -502,10 +502,10 @@ public abstract class URLConnection { } /** - * Returns the value of the content-type header field. + * Returns the value of the {@code content-type} header field. * * @return the content type of the resource that the URL references, - * or null if not known. + * or {@code null} if not known. * @see java.net.URLConnection#getHeaderField(java.lang.String) */ public String getContentType() { @@ -513,10 +513,10 @@ public abstract class URLConnection { } /** - * Returns the value of the content-encoding header field. + * Returns the value of the {@code content-encoding} header field. * * @return the content encoding of the resource that the URL references, - * or null if not known. + * or {@code null} if not known. * @see java.net.URLConnection#getHeaderField(java.lang.String) */ public String getContentEncoding() { @@ -524,7 +524,7 @@ public abstract class URLConnection { } /** - * Returns the value of the expires header field. + * Returns the value of the {@code expires} header field. * * @return the expiration date of the resource that this URL references, * or 0 if not known. The value is the number of milliseconds since @@ -536,10 +536,10 @@ public abstract class URLConnection { } /** - * Returns the value of the date header field. + * Returns the value of the {@code date} header field. * * @return the sending date of the resource that the URL references, - * or 0 if not known. The value returned is the + * or {@code 0} if not known. The value returned is the * number of milliseconds since January 1, 1970 GMT. * @see java.net.URLConnection#getHeaderField(java.lang.String) */ @@ -548,11 +548,11 @@ public abstract class URLConnection { } /** - * Returns the value of the last-modified header field. + * Returns the value of the {@code last-modified} header field. * The result is the number of milliseconds since January 1, 1970 GMT. * * @return the date the resource referenced by this - * URLConnection was last modified, or 0 if not known. + * {@code URLConnection} was last modified, or 0 if not known. * @see java.net.URLConnection#getHeaderField(java.lang.String) */ public long getLastModified() { @@ -567,7 +567,7 @@ public abstract class URLConnection { * * * @param name the name of a header field. - * @return the value of the named header field, or null + * @return the value of the named header field, or {@code null} * if there is no such field in the header. */ public String getHeaderField(String name) { @@ -591,15 +591,15 @@ public abstract class URLConnection { /** * Returns the value of the named field parsed as a number. *

        - * This form of getHeaderField exists because some - * connection types (e.g., http-ng) have pre-parsed + * This form of {@code getHeaderField} exists because some + * connection types (e.g., {@code http-ng}) have pre-parsed * headers. Classes for that connection type can override this method * and short-circuit the parsing. * * @param name the name of the header field. * @param Default the default value. * @return the value of the named field, parsed as an integer. The - * Default value is returned if the field is + * {@code Default} value is returned if the field is * missing or malformed. */ public int getHeaderFieldInt(String name, int Default) { @@ -613,15 +613,15 @@ public abstract class URLConnection { /** * Returns the value of the named field parsed as a number. *

        - * This form of getHeaderField exists because some - * connection types (e.g., http-ng) have pre-parsed + * This form of {@code getHeaderField} exists because some + * connection types (e.g., {@code http-ng}) have pre-parsed * headers. Classes for that connection type can override this method * and short-circuit the parsing. * * @param name the name of the header field. * @param Default the default value. * @return the value of the named field, parsed as a long. The - * Default value is returned if the field is + * {@code Default} value is returned if the field is * missing or malformed. * @since 7.0 */ @@ -638,15 +638,15 @@ public abstract class URLConnection { * The result is the number of milliseconds since January 1, 1970 GMT * represented by the named field. *

        - * This form of getHeaderField exists because some - * connection types (e.g., http-ng) have pre-parsed + * This form of {@code getHeaderField} exists because some + * connection types (e.g., {@code http-ng}) have pre-parsed * headers. Classes for that connection type can override this method * and short-circuit the parsing. * * @param name the name of the header field. * @param Default a default value. * @return the value of the field, parsed as a date. The value of the - * Default argument is returned if the field is + * {@code Default} argument is returned if the field is * missing or malformed. */ @SuppressWarnings("deprecation") @@ -659,12 +659,12 @@ public abstract class URLConnection { } /** - * Returns the key for the nth header field. - * It returns null if there are fewer than n+1 fields. + * Returns the key for the {@code n}th header field. + * It returns {@code null} if there are fewer than {@code n+1} fields. * * @param n an index, where {@code n>=0} - * @return the key for the nth header field, - * or null if there are fewer than n+1 + * @return the key for the {@code n}th header field, + * or {@code null} if there are fewer than {@code n+1} * fields. */ public String getHeaderFieldKey(int n) { @@ -672,17 +672,17 @@ public abstract class URLConnection { } /** - * Returns the value for the nth header field. - * It returns null if there are fewer than - * n+1fields. + * Returns the value for the {@code n}th header field. + * It returns {@code null} if there are fewer than + * {@code n+1}fields. *

        * This method can be used in conjunction with the * {@link #getHeaderFieldKey(int) getHeaderFieldKey} method to iterate through all * the headers in the message. * * @param n an index, where {@code n>=0} - * @return the value of the nth header field - * or null if there are fewer than n+1 fields + * @return the value of the {@code n}th header field + * or {@code null} if there are fewer than {@code n+1} fields * @see java.net.URLConnection#getHeaderFieldKey(int) */ public String getHeaderField(int n) { @@ -693,35 +693,35 @@ public abstract class URLConnection { * Retrieves the contents of this URL connection. *

        * This method first determines the content type of the object by - * calling the getContentType method. If this is + * calling the {@code getContentType} method. If this is * the first time that the application has seen that specific content * type, a content handler for that content type is created: *

          *
        1. If the application has set up a content handler factory instance - * using the setContentHandlerFactory method, the - * createContentHandler method of that instance is called + * using the {@code setContentHandlerFactory} method, the + * {@code createContentHandler} method of that instance is called * with the content type as an argument; the result is a content * handler for that content type. *
        2. If no content handler factory has yet been set up, or if the - * factory's createContentHandler method returns - * null, then the application loads the class named: + * factory's {@code createContentHandler} method returns + * {@code null}, then the application loads the class named: *
                *         sun.net.www.content.<contentType>
                *     
          * where <contentType> is formed by taking the * content-type string, replacing all slash characters with a - * period ('.'), and all other non-alphanumeric characters - * with the underscore character '_'. The alphanumeric + * {@code period} ('.'), and all other non-alphanumeric characters + * with the underscore character '{@code _}'. The alphanumeric * characters are specifically the 26 uppercase ASCII letters - * 'A' through 'Z', the 26 lowercase ASCII - * letters 'a' through 'z', and the 10 ASCII - * digits '0' through '9'. If the specified + * '{@code A}' through '{@code Z}', the 26 lowercase ASCII + * letters '{@code a}' through '{@code z}', and the 10 ASCII + * digits '{@code 0}' through '{@code 9}'. If the specified * class does not exist, or is not a subclass of - * ContentHandler, then an - * UnknownServiceException is thrown. + * {@code ContentHandler}, then an + * {@code UnknownServiceException} is thrown. *
        * - * @return the object fetched. The instanceof operator + * @return the object fetched. The {@code instanceof} operator * should be used to determine the specific kind of object * returned. * @exception IOException if an I/O error occurs while @@ -743,12 +743,12 @@ public abstract class URLConnection { /** * Retrieves the contents of this URL connection. * - * @param classes the Class array + * @param classes the {@code Class} array * indicating the requested types * @return the object fetched that is the first match of the type * specified in the classes array. null if none of * the requested types are supported. - * The instanceof operator should be used to + * The {@code instanceof} operator should be used to * determine the specific kind of object returned. * @exception IOException if an I/O error occurs while * getting the content. @@ -773,12 +773,12 @@ public abstract class URLConnection { * necessary to make the connection represented by this * object. This method returns null if no permission is * required to make the connection. By default, this method - * returns java.security.AllPermission. Subclasses + * returns {@code java.security.AllPermission}. Subclasses * should override this method and return the permission * that best represents the permission required to make a - * a connection to the URL. For example, a URLConnection - * representing a file: URL would return a - * java.io.FilePermission object. + * a connection to the URL. For example, a {@code URLConnection} + * representing a {@code file:} URL would return a + * {@code java.io.FilePermission} object. * *

        The permission returned may dependent upon the state of the * connection. For example, the permission before connecting may be @@ -844,17 +844,17 @@ public abstract class URLConnection { } /** - * Returns a String representation of this URL connection. + * Returns a {@code String} representation of this URL connection. * - * @return a string representation of this URLConnection. + * @return a string representation of this {@code URLConnection}. */ public String toString() { return this.getClass().getName() + ":" + url; } /** - * Sets the value of the doInput field for this - * URLConnection to the specified value. + * Sets the value of the {@code doInput} field for this + * {@code URLConnection} to the specified value. *

        * A URL connection can be used for input and/or output. Set the DoInput * flag to true if you intend to use the URL connection for input, @@ -872,11 +872,11 @@ public abstract class URLConnection { } /** - * Returns the value of this URLConnection's - * doInput flag. + * Returns the value of this {@code URLConnection}'s + * {@code doInput} flag. * - * @return the value of this URLConnection's - * doInput flag. + * @return the value of this {@code URLConnection}'s + * {@code doInput} flag. * @see #setDoInput(boolean) */ public boolean getDoInput() { @@ -884,8 +884,8 @@ public abstract class URLConnection { } /** - * Sets the value of the doOutput field for this - * URLConnection to the specified value. + * Sets the value of the {@code doOutput} field for this + * {@code URLConnection} to the specified value. *

        * A URL connection can be used for input and/or output. Set the DoOutput * flag to true if you intend to use the URL connection for output, @@ -902,11 +902,11 @@ public abstract class URLConnection { } /** - * Returns the value of this URLConnection's - * doOutput flag. + * Returns the value of this {@code URLConnection}'s + * {@code doOutput} flag. * - * @return the value of this URLConnection's - * doOutput flag. + * @return the value of this {@code URLConnection}'s + * {@code doOutput} flag. * @see #setDoOutput(boolean) */ public boolean getDoOutput() { @@ -914,8 +914,8 @@ public abstract class URLConnection { } /** - * Set the value of the allowUserInteraction field of - * this URLConnection. + * Set the value of the {@code allowUserInteraction} field of + * this {@code URLConnection}. * * @param allowuserinteraction the new value. * @throws IllegalStateException if already connected @@ -928,10 +928,10 @@ public abstract class URLConnection { } /** - * Returns the value of the allowUserInteraction field for + * Returns the value of the {@code allowUserInteraction} field for * this object. * - * @return the value of the allowUserInteraction field for + * @return the value of the {@code allowUserInteraction} field for * this object. * @see #setAllowUserInteraction(boolean) */ @@ -941,8 +941,8 @@ public abstract class URLConnection { /** * Sets the default value of the - * allowUserInteraction field for all future - * URLConnection objects to the specified value. + * {@code allowUserInteraction} field for all future + * {@code URLConnection} objects to the specified value. * * @param defaultallowuserinteraction the new value. * @see #getDefaultAllowUserInteraction() @@ -952,14 +952,14 @@ public abstract class URLConnection { } /** - * Returns the default value of the allowUserInteraction + * Returns the default value of the {@code allowUserInteraction} * field. *

        * Ths default is "sticky", being a part of the static state of all * URLConnections. This flag applies to the next, and all following * URLConnections that are created. * - * @return the default value of the allowUserInteraction + * @return the default value of the {@code allowUserInteraction} * field. * @see #setDefaultAllowUserInteraction(boolean) */ @@ -968,8 +968,8 @@ public abstract class URLConnection { } /** - * Sets the value of the useCaches field of this - * URLConnection to the specified value. + * Sets the value of the {@code useCaches} field of this + * {@code URLConnection} to the specified value. *

        * Some protocols do caching of documents. Occasionally, it is important * to be able to "tunnel through" and ignore the caches (e.g., the @@ -979,7 +979,7 @@ public abstract class URLConnection { * The default value comes from DefaultUseCaches, which defaults to * true. * - * @param usecaches a boolean indicating whether + * @param usecaches a {@code boolean} indicating whether * or not to allow caching * @throws IllegalStateException if already connected * @see #getUseCaches() @@ -991,11 +991,11 @@ public abstract class URLConnection { } /** - * Returns the value of this URLConnection's - * useCaches field. + * Returns the value of this {@code URLConnection}'s + * {@code useCaches} field. * - * @return the value of this URLConnection's - * useCaches field. + * @return the value of this {@code URLConnection}'s + * {@code useCaches} field. * @see #setUseCaches(boolean) */ public boolean getUseCaches() { @@ -1003,8 +1003,8 @@ public abstract class URLConnection { } /** - * Sets the value of the ifModifiedSince field of - * this URLConnection to the specified value. + * Sets the value of the {@code ifModifiedSince} field of + * this {@code URLConnection} to the specified value. * * @param ifmodifiedsince the new value. * @throws IllegalStateException if already connected @@ -1017,9 +1017,9 @@ public abstract class URLConnection { } /** - * Returns the value of this object's ifModifiedSince field. + * Returns the value of this object's {@code ifModifiedSince} field. * - * @return the value of this object's ifModifiedSince field. + * @return the value of this object's {@code ifModifiedSince} field. * @see #setIfModifiedSince(long) */ public long getIfModifiedSince() { @@ -1027,15 +1027,15 @@ public abstract class URLConnection { } /** - * Returns the default value of a URLConnection's - * useCaches flag. + * Returns the default value of a {@code URLConnection}'s + * {@code useCaches} flag. *

        * Ths default is "sticky", being a part of the static state of all * URLConnections. This flag applies to the next, and all following * URLConnections that are created. * - * @return the default value of a URLConnection's - * useCaches flag. + * @return the default value of a {@code URLConnection}'s + * {@code useCaches} flag. * @see #setDefaultUseCaches(boolean) */ public boolean getDefaultUseCaches() { @@ -1043,7 +1043,7 @@ public abstract class URLConnection { } /** - * Sets the default value of the useCaches field to the + * Sets the default value of the {@code useCaches} field to the * specified value. * * @param defaultusecaches the new value. @@ -1063,7 +1063,7 @@ public abstract class URLConnection { * properties to be appended into a single property. * * @param key the keyword by which the request is known - * (e.g., "Accept"). + * (e.g., "{@code Accept}"). * @param value the value associated with it. * @throws IllegalStateException if already connected * @throws NullPointerException if key is null @@ -1087,7 +1087,7 @@ public abstract class URLConnection { * existing values associated with the same key. * * @param key the keyword by which the request is known - * (e.g., "Accept"). + * (e.g., "{@code Accept}"). * @param value the value associated with it. * @throws IllegalStateException if already connected * @throws NullPointerException if key is null @@ -1151,11 +1151,11 @@ public abstract class URLConnection { /** * Sets the default value of a general request property. When a - * URLConnection is created, it is initialized with + * {@code URLConnection} is created, it is initialized with * these properties. * * @param key the keyword by which the request is known - * (e.g., "Accept"). + * (e.g., "{@code Accept}"). * @param value the value associated with the key. * * @see java.net.URLConnection#setRequestProperty(java.lang.String,java.lang.String) @@ -1197,21 +1197,21 @@ public abstract class URLConnection { static ContentHandlerFactory factory; /** - * Sets the ContentHandlerFactory of an + * Sets the {@code ContentHandlerFactory} of an * application. It can be called at most once by an application. *

        - * The ContentHandlerFactory instance is used to + * The {@code ContentHandlerFactory} instance is used to * construct a content handler from a content type *

        * If there is a security manager, this method first calls - * the security manager's checkSetFactory method + * the security manager's {@code checkSetFactory} method * to ensure the operation is allowed. * This could result in a SecurityException. * * @param fac the desired factory. * @exception Error if the factory has already been defined. * @exception SecurityException if a security manager exists and its - * checkSetFactory method doesn't allow the operation. + * {@code checkSetFactory} method doesn't allow the operation. * @see java.net.ContentHandlerFactory * @see java.net.URLConnection#getContent() * @see SecurityManager#checkSetFactory @@ -1374,7 +1374,7 @@ public abstract class URLConnection { * Tries to determine the content type of an object, based * on the specified "file" component of a URL. * This is a convenience method that can be used by - * subclasses that override the getContentType method. + * subclasses that override the {@code getContentType} method. * * @param fname a filename. * @return a guess as to what the content type of the object is, @@ -1389,16 +1389,16 @@ public abstract class URLConnection { * Tries to determine the type of an input stream based on the * characters at the beginning of the input stream. This method can * be used by subclasses that override the - * getContentType method. + * {@code getContentType} method. *

        * Ideally, this routine would not be needed. But many - * http servers return the incorrect content type; in + * {@code http} servers return the incorrect content type; in * addition, there are many nonstandard extensions. Direct inspection * of the bytes to determine the content type is often more accurate - * than believing the content type claimed by the http server. + * than believing the content type claimed by the {@code http} server. * * @param is an input stream that supports marks. - * @return a guess at the content type, or null if none + * @return a guess at the content type, or {@code null} if none * can be determined. * @exception IOException if an I/O error occurs while reading the * input stream. diff --git a/src/share/classes/java/net/URLDecoder.java b/src/share/classes/java/net/URLDecoder.java index e23f0c56af01134fb875332b70b3f38b420f3f9a..eb5e36e5d82f6ef57dbe04d82fcbd9b62e9d3220 100644 --- a/src/share/classes/java/net/URLDecoder.java +++ b/src/share/classes/java/net/URLDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,27 +34,27 @@ import java.io.*; *

        * The conversion process is the reverse of that used by the URLEncoder class. It is assumed * that all characters in the encoded string are one of the following: - * "a" through "z", - * "A" through "Z", - * "0" through "9", and - * "-", "_", - * ".", and "*". The - * character "%" is allowed but is interpreted + * "{@code a}" through "{@code z}", + * "{@code A}" through "{@code Z}", + * "{@code 0}" through "{@code 9}", and + * "{@code -}", "{@code _}", + * "{@code .}", and "{@code *}". The + * character "{@code %}" is allowed but is interpreted * as the start of a special escaped sequence. *

        * The following rules are applied in the conversion: *

        *

          - *
        • The alphanumeric characters "a" through - * "z", "A" through - * "Z" and "0" - * through "9" remain the same. - *
        • The special characters ".", - * "-", "*", and - * "_" remain the same. - *
        • The plus sign "+" is converted into a - * space character " " . - *
        • A sequence of the form "%xy" will be + *
        • The alphanumeric characters "{@code a}" through + * "{@code z}", "{@code A}" through + * "{@code Z}" and "{@code 0}" + * through "{@code 9}" remain the same. + *
        • The special characters "{@code .}", + * "{@code -}", "{@code *}", and + * "{@code _}" remain the same. + *
        • The plus sign "{@code +}" is converted into a + * space character "   " . + *
        • A sequence of the form "{@code %xy}" will be * treated as representing a byte where xy is the two-digit * hexadecimal representation of the 8 bits. Then, all substrings * that contain one or more of these byte sequences consecutively @@ -66,7 +66,7 @@ import java.io.*; *

          * There are two possible ways in which this decoder could deal with * illegal strings. It could either leave illegal characters alone or - * it could throw an {@link java.lang.IllegalArgumentException}. + * it could throw an {@link java.lang.IllegalArgumentException}. * Which approach the decoder takes is left to the * implementation. * @@ -81,15 +81,15 @@ public class URLDecoder { static String dfltEncName = URLEncoder.dfltEncName; /** - * Decodes a x-www-form-urlencoded string. + * Decodes a {@code x-www-form-urlencoded} string. * The platform's default encoding is used to determine what characters * are represented by any consecutive sequences of the form - * "%xy". - * @param s the String to decode + * "{@code %xy}". + * @param s the {@code String} to decode * @deprecated The resulting string may vary depending on the platform's * default encoding. Instead, use the decode(String,String) method * to specify the encoding. - * @return the newly decoded String + * @return the newly decoded {@code String} */ @Deprecated public static String decode(String s) { @@ -106,11 +106,11 @@ public class URLDecoder { } /** - * Decodes a application/x-www-form-urlencoded string using a specific + * Decodes a {@code application/x-www-form-urlencoded} string using a specific * encoding scheme. * The supplied encoding is used to determine * what characters are represented by any consecutive sequences of the - * form "%xy". + * form "{@code %xy}". *

          * Note: The @@ -118,11 +118,11 @@ public class URLDecoder { * UTF-8 should be used. Not doing so may introduce * incompatibilites. * - * @param s the String to decode + * @param s the {@code String} to decode * @param enc The name of a supported * character * encoding. - * @return the newly decoded String + * @return the newly decoded {@code String} * @exception UnsupportedEncodingException * If character encoding needs to be consulted, but * named character encoding is not supported diff --git a/src/share/classes/java/net/URLEncoder.java b/src/share/classes/java/net/URLEncoder.java index 68fca8ca5c91e366d1becbf21e2b7aa517ae1bf8..b5c4a8c32f93634e7d67c769469ab396beb2dcb5 100644 --- a/src/share/classes/java/net/URLEncoder.java +++ b/src/share/classes/java/net/URLEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,19 +51,19 @@ import sun.security.action.GetPropertyAction; * *

          *

            - *
          • The alphanumeric characters "a" through - * "z", "A" through - * "Z" and "0" - * through "9" remain the same. - *
          • The special characters ".", - * "-", "*", and - * "_" remain the same. - *
          • The space character " " is - * converted into a plus sign "+". + *
          • The alphanumeric characters "{@code a}" through + * "{@code z}", "{@code A}" through + * "{@code Z}" and "{@code 0}" + * through "{@code 9}" remain the same. + *
          • The special characters "{@code .}", + * "{@code -}", "{@code *}", and + * "{@code _}" remain the same. + *
          • The space character "   " is + * converted into a plus sign "{@code +}". *
          • All other characters are unsafe and are first converted into * one or more bytes using some encoding scheme. Then each byte is * represented by the 3-character string - * "%xy", where xy is the + * "{@code %xy}", where xy is the * two-digit hexadecimal representation of the byte. * The recommended encoding scheme to use is UTF-8. However, * for compatibility reasons, if an encoding is not specified, @@ -152,15 +152,15 @@ public class URLEncoder { private URLEncoder() { } /** - * Translates a string into x-www-form-urlencoded + * Translates a string into {@code x-www-form-urlencoded} * format. This method uses the platform's default encoding * as the encoding scheme to obtain the bytes for unsafe characters. * - * @param s String to be translated. + * @param s {@code String} to be translated. * @deprecated The resulting string may vary depending on the platform's * default encoding. Instead, use the encode(String,String) * method to specify the encoding. - * @return the translated String. + * @return the translated {@code String}. */ @Deprecated public static String encode(String s) { @@ -177,7 +177,7 @@ public class URLEncoder { } /** - * Translates a string into application/x-www-form-urlencoded + * Translates a string into {@code application/x-www-form-urlencoded} * format using a specific encoding scheme. This method uses the * supplied encoding scheme to obtain the bytes for unsafe * characters. @@ -188,11 +188,11 @@ public class URLEncoder { * UTF-8 should be used. Not doing so may introduce * incompatibilites. * - * @param s String to be translated. + * @param s {@code String} to be translated. * @param enc The name of a supported * character * encoding. - * @return the translated String. + * @return the translated {@code String}. * @exception UnsupportedEncodingException * If the named encoding is not supported * @see URLDecoder#decode(java.lang.String, java.lang.String) diff --git a/src/share/classes/java/net/URLStreamHandler.java b/src/share/classes/java/net/URLStreamHandler.java index 0561527488d2e464335c6fffbef453adb53b1592..a77c5ed2cfc24a9d417e78fc257135085df2e51a 100644 --- a/src/share/classes/java/net/URLStreamHandler.java +++ b/src/share/classes/java/net/URLStreamHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,15 +34,15 @@ import sun.net.util.IPAddressUtil; import sun.net.www.ParseUtil; /** - * The abstract class URLStreamHandler is the common + * The abstract class {@code URLStreamHandler} is the common * superclass for all stream protocol handlers. A stream protocol * handler knows how to make a connection for a particular protocol - * type, such as http or https. + * type, such as {@code http} or {@code https}. *

            - * In most cases, an instance of a URLStreamHandler + * In most cases, an instance of a {@code URLStreamHandler} * subclass is not created directly by an application. Rather, the * first time a protocol name is encountered when constructing a - * URL, the appropriate stream protocol handler is + * {@code URL}, the appropriate stream protocol handler is * automatically loaded. * * @author James Gosling @@ -52,7 +52,7 @@ import sun.net.www.ParseUtil; public abstract class URLStreamHandler { /** * Opens a connection to the object referenced by the - * URL argument. + * {@code URL} argument. * This method should be overridden by a subclass. * *

            If for the handler's protocol (such as HTTP or JAR), there @@ -64,7 +64,7 @@ public abstract class URLStreamHandler { * JarURLConnection will be returned. * * @param u the URL that this connects to. - * @return a URLConnection object for the URL. + * @return a {@code URLConnection} object for the {@code URL}. * @exception IOException if an I/O error occurs while opening the * connection. */ @@ -83,7 +83,7 @@ public abstract class URLStreamHandler { * @param p the proxy through which the connection will be made. * If direct connection is desired, Proxy.NO_PROXY * should be specified. - * @return a URLConnection object for the URL. + * @return a {@code URLConnection} object for the {@code URL}. * @exception IOException if an I/O error occurs while opening the * connection. * @exception IllegalArgumentException if either u or p is null, @@ -97,28 +97,28 @@ public abstract class URLStreamHandler { } /** - * Parses the string representation of a URL into a - * URL object. + * Parses the string representation of a {@code URL} into a + * {@code URL} object. *

            * If there is any inherited context, then it has already been - * copied into the URL argument. + * copied into the {@code URL} argument. *

            - * The parseURL method of URLStreamHandler + * The {@code parseURL} method of {@code URLStreamHandler} * parses the string representation as if it were an - * http specification. Most URL protocol families have a + * {@code http} specification. Most URL protocol families have a * similar parsing. A stream protocol handler for a protocol that has * a different syntax must override this routine. * - * @param u the URL to receive the result of parsing + * @param u the {@code URL} to receive the result of parsing * the spec. - * @param spec the String representing the URL that + * @param spec the {@code String} representing the URL that * must be parsed. * @param start the character index at which to begin parsing. This is - * just past the ':' (if there is one) that + * just past the '{@code :}' (if there is one) that * specifies the determination of the protocol name. * @param limit the character position to stop parsing at. This is the * end of the string or the position of the - * "#" character, if present. All information + * "{@code #}" character, if present. All information * after the sharp sign indicates an anchor. */ protected void parseURL(URL u, String spec, int start, int limit) { @@ -307,7 +307,7 @@ public abstract class URLStreamHandler { /** * Returns the default port for a URL parsed by this handler. This method * is meant to be overidden by handlers with default port numbers. - * @return the default port for a URL parsed by this handler. + * @return the default port for a {@code URL} parsed by this handler. * @since 1.3 */ protected int getDefaultPort() { @@ -321,7 +321,7 @@ public abstract class URLStreamHandler { * guaranteed by the fact that it is only called by java.net.URL class. * @param u1 a URL object * @param u2 a URL object - * @return true if the two urls are + * @return {@code true} if the two urls are * considered equal, ie. they refer to the same * fragment in the same file. * @since 1.3 @@ -338,7 +338,7 @@ public abstract class URLStreamHandler { * other protocols that have different requirements for hashCode * calculation. * @param u a URL object - * @return an int suitable for hash table indexing + * @return an {@code int} suitable for hash table indexing * @since 1.3 */ protected int hashCode(URL u) { @@ -420,7 +420,7 @@ public abstract class URLStreamHandler { * will result in a null return. * * @param u a URL object - * @return an InetAddress representing the host + * @return an {@code InetAddress} representing the host * IP address. * @since 1.3 */ @@ -447,8 +447,8 @@ public abstract class URLStreamHandler { * Compares the host components of two URLs. * @param u1 the URL of the first host to compare * @param u2 the URL of the second host to compare - * @return true if and only if they - * are equal, false otherwise. + * @return {@code true} if and only if they + * are equal, {@code false} otherwise. * @since 1.3 */ protected boolean hostsEqual(URL u1, URL u2) { @@ -465,11 +465,11 @@ public abstract class URLStreamHandler { } /** - * Converts a URL of a specific protocol to a - * String. + * Converts a {@code URL} of a specific protocol to a + * {@code String}. * * @param u the URL. - * @return a string representation of the URL argument. + * @return a string representation of the {@code URL} argument. */ protected String toExternalForm(URL u) { @@ -508,7 +508,7 @@ public abstract class URLStreamHandler { } /** - * Sets the fields of the URL argument to the indicated values. + * Sets the fields of the {@code URL} argument to the indicated values. * Only classes derived from URLStreamHandler are able * to use this method to set the values of the URL fields. * @@ -538,7 +538,7 @@ public abstract class URLStreamHandler { } /** - * Sets the fields of the URL argument to the indicated values. + * Sets the fields of the {@code URL} argument to the indicated values. * Only classes derived from URLStreamHandler are able * to use this method to set the values of the URL fields. * diff --git a/src/share/classes/java/net/URLStreamHandlerFactory.java b/src/share/classes/java/net/URLStreamHandlerFactory.java index 1a58474d900518066536b5a1a957399673c15c79..e46e02857e3e4c38744186f7e6de9c4053453993 100644 --- a/src/share/classes/java/net/URLStreamHandlerFactory.java +++ b/src/share/classes/java/net/URLStreamHandlerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,11 @@ package java.net; /** - * This interface defines a factory for URL stream + * This interface defines a factory for {@code URL} stream * protocol handlers. *

            - * It is used by the URL class to create a - * URLStreamHandler for a specific protocol. + * It is used by the {@code URL} class to create a + * {@code URLStreamHandler} for a specific protocol. * * @author Arthur van Hoff * @see java.net.URL @@ -39,12 +39,12 @@ package java.net; */ public interface URLStreamHandlerFactory { /** - * Creates a new URLStreamHandler instance with the specified + * Creates a new {@code URLStreamHandler} instance with the specified * protocol. * - * @param protocol the protocol ("ftp", - * "http", "nntp", etc.). - * @return a URLStreamHandler for the specific protocol. + * @param protocol the protocol ("{@code ftp}", + * "{@code http}", "{@code nntp}", etc.). + * @return a {@code URLStreamHandler} for the specific protocol. * @see java.net.URLStreamHandler */ URLStreamHandler createURLStreamHandler(String protocol); diff --git a/src/share/classes/java/net/UnknownHostException.java b/src/share/classes/java/net/UnknownHostException.java index 0c68c78faa12563c8445d37bf407a8dd1add7f85..21a9d1450cb816d1d60ea221311585a3a06fe673 100644 --- a/src/share/classes/java/net/UnknownHostException.java +++ b/src/share/classes/java/net/UnknownHostException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,7 +38,7 @@ class UnknownHostException extends IOException { private static final long serialVersionUID = -4639126076052875403L; /** - * Constructs a new UnknownHostException with the + * Constructs a new {@code UnknownHostException} with the * specified detail message. * * @param host the detail message. @@ -48,7 +48,7 @@ class UnknownHostException extends IOException { } /** - * Constructs a new UnknownHostException with no detail + * Constructs a new {@code UnknownHostException} with no detail * message. */ public UnknownHostException() { diff --git a/src/share/classes/java/net/UnknownServiceException.java b/src/share/classes/java/net/UnknownServiceException.java index e954ce9c6e13f0ce00bbc0b3bdd2059254c95ef2..4eea4a769dbea49ca2d679ea89a023e022095d46 100644 --- a/src/share/classes/java/net/UnknownServiceException.java +++ b/src/share/classes/java/net/UnknownServiceException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,14 +40,14 @@ public class UnknownServiceException extends IOException { private static final long serialVersionUID = -4169033248853639508L; /** - * Constructs a new UnknownServiceException with no + * Constructs a new {@code UnknownServiceException} with no * detail message. */ public UnknownServiceException() { } /** - * Constructs a new UnknownServiceException with the + * Constructs a new {@code UnknownServiceException} with the * specified detail message. * * @param msg the detail message. diff --git a/src/share/classes/java/net/package-info.java b/src/share/classes/java/net/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..6552b30b634db0a853bd57494005e6239b4d351c --- /dev/null +++ b/src/share/classes/java/net/package-info.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides the classes for implementing networking applications. + * + *

            The java.net package can be roughly divided in two sections:

            + *
              + *
            • A Low Level API, which deals with the + * following abstractions:

              + *
                + *
              • Addresses, which are networking identifiers, + * like IP addresses.

              • + *
              • Sockets, which are basic bidirectional data communication + * mechanisms.

              • + *
              • Interfaces, which describe network interfaces.

              • + *
            • + *
            • A High Level API, which deals with the following + * abstractions:

              + *
                + *
              • URIs, which represent + * Universal Resource Identifiers.

              • + *
              • URLs, which represent + * Universal Resource Locators.

              • + *
              • Connections, which represents connections to the resource + * pointed to by URLs.

              • + *
            • + *
            + *

            Addresses

            + *

            Addresses are used throughout the java.net APIs as either host + * identifiers, or socket endpoint identifiers.

            + *

            The {@link java.net.InetAddress} class is the abstraction representing an + * IP (Internet Protocol) address. It has two subclasses: + *

              + *
            • {@link java.net.Inet4Address} for IPv4 addresses.
            • + *
            • {@link java.net.Inet6Address} for IPv6 addresses.
            • + *
            + *

            But, in most cases, there is no need to deal directly with the subclasses, + * as the InetAddress abstraction should cover most of the needed + * functionality.

            + *

            About IPv6

            + *

            Not all systems have support for the IPv6 protocol, and while the Java + * networking stack will attempt to detect it and use it transparently when + * available, it is also possible to disable its use with a system property. + * In the case where IPv6 is not available, or explicitly disabled, + * Inet6Address are not valid arguments for most networking operations any + * more. While methods like {@link java.net.InetAddress#getByName} are + * guaranteed not to return an Inet6Address when looking up host names, it + * is possible, by passing literals, to create such an object. In which + * case, most methods, when called with an Inet6Address will throw an + * Exception.

            + *

            Sockets

            + *

            Sockets are means to establish a communication link between machines over + * the network. The java.net package provides 4 kinds of Sockets:

            + *
              + *
            • {@link java.net.Socket} is a TCP client API, and will typically + * be used to {@linkplain java.net.Socket#connect(SocketAddress) + * connect} to a remote host.
            • + *
            • {@link java.net.ServerSocket} is a TCP server API, and will + * typically {@linkplain java.net.ServerSocket#accept accept} + * connections from client sockets.
            • + *
            • {@link java.net.DatagramSocket} is a UDP endpoint API and is used + * to {@linkplain java.net.DatagramSocket#send send} and + * {@linkplain java.net.DatagramSocket#receive receive} + * {@linkplain java.net.DatagramPacket datagram packets}.
            • + *
            • {@link java.net.MulticastSocket} is a subclass of + * {@code DatagramSocket} used when dealing with multicast + * groups.
            • + *
            + *

            Sending and receiving with TCP sockets is done through InputStreams and + * OutputStreams which can be obtained via the + * {@link java.net.Socket#getInputStream} and + * {@link java.net.Socket#getOutputStream} methods.

            + *

            Interfaces

            + *

            The {@link java.net.NetworkInterface} class provides APIs to browse and + * query all the networking interfaces (e.g. ethernet connection or PPP + * endpoint) of the local machine. It is through that class that you can + * check if any of the local interfaces is configured to support IPv6.

            + *

            Note, all conforming implementations must support at least one + * {@code NetworkInterface} object, which must either be connected to a + * network, or be a "loopback" interface that can only communicate with + * entities on the same machine.

            + * + *

            High level API

            + *

            A number of classes in the java.net package do provide for a much higher + * level of abstraction and allow for easy access to resources on the + * network. The classes are: + *

              + *
            • {@link java.net.URI} is the class representing a + * Universal Resource Identifier, as specified in RFC 2396. + * As the name indicates, this is just an Identifier and doesn't + * provide directly the means to access the resource.
            • + *
            • {@link java.net.URL} is the class representing a + * Universal Resource Locator, which is both an older concept for + * URIs and a means to access the resources.
            • + *
            • {@link java.net.URLConnection} is created from a URL and is the + * communication link used to access the resource pointed by the + * URL. This abstract class will delegate most of the work to the + * underlying protocol handlers like http or https.
            • + *
            • {@link java.net.HttpURLConnection} is a subclass of URLConnection + * and provides some additional functionalities specific to the + * HTTP protocol.
            • + *
            + *

            The recommended usage is to use {@link java.net.URI} to identify + * resources, then convert it into a {@link java.net.URL} when it is time to + * access the resource. From that URL, you can either get the + * {@link java.net.URLConnection} for fine control, or get directly the + * InputStream.

            + *

            Here is an example:

            + *

            + * URI uri = new URI("http://java.sun.com/");
            + * URL url = uri.toURL();
            + * InputStream in = url.openStream();
            + * 
            + *

            Protocol Handlers

            + * As mentioned, URL and URLConnection rely on protocol handlers which must be + * present, otherwise an Exception is thrown. This is the major difference with + * URIs which only identify resources, and therefore don't need to have access + * to the protocol handler. So, while it is possible to create an URI with any + * kind of protocol scheme (e.g. {@code myproto://myhost.mydomain/resource/}), + * a similar URL will try to instantiate the handler for the specified protocol; + * if it doesn't exist an exception will be thrown. + *

            By default the protocol handlers are loaded dynamically from the default + * location. It is, however, possible to add to the search path by setting + * the {@code java.protocol.handler.pkgs} system property. For instance if + * it is set to {@code myapp.protocols}, then the URL code will try, in the + * case of http, first to load {@code myapp.protocols.http.Handler}, then, + * if this fails, {@code http.Handler} from the default location.

            + *

            Note that the Handler class has to be a subclass of the abstract + * class {@link java.net.URLStreamHandler}.

            + *

            Additional Specification

            + * + * + * @since JDK1.0 + */ +package java.net; diff --git a/src/share/classes/java/net/package.html b/src/share/classes/java/net/package.html deleted file mode 100644 index b78a704a145542e6afc11742442ddd79098546ee..0000000000000000000000000000000000000000 --- a/src/share/classes/java/net/package.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - -Provides the classes for implementing networking applications. - -

            The java.net package can be roughly divided in two sections:

            -
              -
            • A Low Level API, which deals with the following abstractions:

              -
                -
              • Addresses, which are networking identifiers, like IP addresses.

              • -
              • Sockets, which are basic bidirectional data communication mechanisms.

              • -
              • Interfaces, which describe network interfaces.

              • -
            • -
            • A High Level API, which deals with the following abstractions:

              -
                -
              • URIs, which represent Universal Resource Identifiers.

              • -
              • URLs, which represent Universal Resource Locators.

              • -
              • Connections, which represents connections to the resource pointed to by URLs.

              • -
            • -
            -

            Addresses

            -

            Addresses are used throughout the java.net APIs as either host identifiers, or socket endpoint identifiers.

            -

            The {@link java.net.InetAddress} class is the abstraction representing an IP (Internet Protocol) address. It has two subclasses: -

              -
            • {@link java.net.Inet4Address} for IPv4 addresses.
            • -
            • {@link java.net.Inet6Address} for IPv6 addresses.
            • -
            -

            But, in most cases, there is no need to deal directly with the subclasses, as the InetAddress abstraction should cover most of the needed functionality.

            -

            About IPv6

            -

            Not all systems have support for the IPv6 protocol, and while the Java networking stack will attempt to detect it and use it transparently when available, it is also possible to disable its use with a system property. In the case where IPv6 is not available, or explicitly disabled, Inet6Address are not valid arguments for most networking operations any more. While methods like {@link java.net.InetAddress#getByName} are guaranteed not to return an Inet6Address when looking up host names, it is possible, by passing literals, to create such an object. In which case, most methods, when called with an Inet6Address will throw an Exception.

            -

            Sockets

            -

            Sockets are means to establish a communication link between machines over the network. The java.net package provides 4 kinds of Sockets:

            -
              -
            • {@link java.net.Socket} is a TCP client API, and will typically be used to {@linkplain java.net.Socket#connect(SocketAddress) connect} to a remote host.
            • -
            • {@link java.net.ServerSocket} is a TCP server API, and will typically {@linkplain java.net.ServerSocket#accept accept} connections from client sockets.
            • -
            • {@link java.net.DatagramSocket} is a UDP endpoint API and is used to {@linkplain java.net.DatagramSocket#send send} and {@linkplain java.net.DatagramSocket#receive receive} {@linkplain java.net.DatagramPacket datagram packets}.
            • -
            • {@link java.net.MulticastSocket} is a subclass of {@code DatagramSocket} used when dealing with multicast groups.
            • -
            -

            Sending and receiving with TCP sockets is done through InputStreams and OutputStreams which can be obtained via the {@link java.net.Socket#getInputStream} and {@link java.net.Socket#getOutputStream} methods.

            -

            Interfaces

            -

            The {@link java.net.NetworkInterface} class provides APIs to browse and query all the networking interfaces (e.g. ethernet connection or PPP endpoint) of the local machine. It is through that class that you can check if any of the local interfaces is configured to support IPv6.

            -

            Note, all conforming implementations must support at least one {@code NetworkInterface} object, which must either be connected to a network, or be a "loopback" interface that can only communicate with entities on the same machine.

            - -

            High level API

            -

            A number of classes in the java.net package do provide for a much higher level of abstraction and allow for easy access to resources on the network. The classes are: -

              -
            • {@link java.net.URI} is the class representing a Universal Resource Identifier, as specified in RFC 2396. As the name indicates, this is just an Identifier and doesn't provide directly the means to access the resource.
            • -
            • {@link java.net.URL} is the class representing a Universal Resource Locator, which is both an older concept for URIs and a means to access the resources.
            • -
            • {@link java.net.URLConnection} is created from a URL and is the communication link used to access the resource pointed by the URL. This abstract class will delegate most of the work to the underlying protocol handlers like http or https.
            • -
            • {@link java.net.HttpURLConnection} is a subclass of URLConnection and provides some additional functionalities specific to the HTTP protocol.
            • -
            -

            The recommended usage is to use {@link java.net.URI} to identify resources, then convert it into a {@link java.net.URL} when it is time to access the resource. From that URL, you can either get the {@link java.net.URLConnection} for fine control, or get directly the InputStream.

            -

            Here is an example:

            -

            -URI uri = new URI("http://java.sun.com/");
            -URL url = uri.toURL();
            -InputStream in = url.openStream(); -

            -

            Protocol Handlers

            -As mentioned, URL and URLConnection rely on protocol handlers which must be present, otherwise an Exception is thrown. This is the major difference with URIs which only identify resources, and therefore don't need to have access to the protocol handler. So, while it is possible to create an URI with any kind of protocol scheme (e.g. myproto://myhost.mydomain/resource/), a similar URL will try to instantiate the handler for the specified protocol; if it doesn't exist an exception will be thrown.

            -

            By default the protocol handlers are loaded dynamically from the default location. It is, however, possible to add to the search path by setting the java.protocol.handler.pkgs system property. For instance if it is set to myapp.protocols, then the URL code will try, in the case of http, first to load myapp.protocols.http.Handler, then, if this fails, http.Handler from the default location.

            -

            Note that the Handler class has to be a subclass of the abstract class {@link java.net.URLStreamHandler}.

            -

            Additional Specification

            - - - -@since JDK1.0 - - diff --git a/src/share/classes/java/nio/file/Files.java b/src/share/classes/java/nio/file/Files.java index 586859f17dc1c6ae2180e38d6fb8fede336b32ba..721184c1533382511572e15f9f0f6bb2fa171ba6 100644 --- a/src/share/classes/java/nio/file/Files.java +++ b/src/share/classes/java/nio/file/Files.java @@ -25,10 +25,10 @@ package java.nio.file; -import java.nio.ByteBuffer; import java.nio.file.attribute.*; import java.nio.file.spi.FileSystemProvider; import java.nio.file.spi.FileTypeDetector; +import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.SeekableByteChannel; import java.io.Closeable; @@ -2965,7 +2965,63 @@ public final class Files { } /** - * Read all the bytes from a file. The method ensures that the file is + * The maximum size of array to allocate. + * Some VMs reserve some header words in an array. + * Attempts to allocate larger arrays may result in + * OutOfMemoryError: Requested array size exceeds VM limit + */ + private static final int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8; + + /** + * Reads all the bytes from an input stream. Uses {@code initialSize} as a hint + * about how many bytes the stream will have. + * + * @param source + * the input stream to read from + * @param initialSize + * the initial size of the byte array to allocate + * + * @return a byte array containing the bytes read from the file + * + * @throws IOException + * if an I/O error occurs reading from the stream + * @throws OutOfMemoryError + * if an array of the required size cannot be allocated + */ + private static byte[] read(InputStream source, int initialSize) + throws IOException + { + int capacity = initialSize; + byte[] buf = new byte[capacity]; + int nread = 0; + int n; + for (;;) { + // read to EOF which may read more or less than initialSize (eg: file + // is truncated while we are reading) + while ((n = source.read(buf, nread, capacity - nread)) > 0) + nread += n; + + // if last call to source.read() returned -1, we are done + // otherwise, try to read one more byte; if that failed we're done too + if (n < 0 || (n = source.read()) < 0) + break; + + // one more byte was read; need to allocate a larger buffer + if (capacity <= MAX_BUFFER_SIZE - capacity) { + capacity = Math.max(capacity << 1, BUFFER_SIZE); + } else { + if (capacity == MAX_BUFFER_SIZE) + throw new OutOfMemoryError("Required array size too large"); + capacity = MAX_BUFFER_SIZE; + } + buf = Arrays.copyOf(buf, capacity); + buf[nread++] = (byte)n; + } + return (capacity == nread) ? buf : Arrays.copyOf(buf, nread); + } + + /** + * Reads all the bytes from a file. The method ensures that the file is * closed when all bytes have been read or an I/O error, or other runtime * exception, is thrown. * @@ -2989,22 +3045,13 @@ public final class Files { * method is invoked to check read access to the file. */ public static byte[] readAllBytes(Path path) throws IOException { - try (FileChannel fc = FileChannel.open(path)) { + try (FileChannel fc = FileChannel.open(path); + InputStream is = Channels.newInputStream(fc)) { long size = fc.size(); - if (size > (long)Integer.MAX_VALUE) + if (size > (long)MAX_BUFFER_SIZE) throw new OutOfMemoryError("Required array size too large"); - byte[] arr = new byte[(int)size]; - ByteBuffer bb = ByteBuffer.wrap(arr); - while (bb.hasRemaining()) { - if (fc.read(bb) < 0) { - // truncated - break; - } - } - - int nread = bb.position(); - return (nread == size) ? arr : Arrays.copyOf(arr, nread); + return read(is, (int)size); } } diff --git a/src/share/classes/java/rmi/server/RMISocketFactory.java b/src/share/classes/java/rmi/server/RMISocketFactory.java index ccff225c87da2ff2fc8c1afbbab498f8c5482eb3..e7b7581820b6661f62c17ad55f7d778fa1e1f45e 100644 --- a/src/share/classes/java/rmi/server/RMISocketFactory.java +++ b/src/share/classes/java/rmi/server/RMISocketFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,15 +33,47 @@ import java.net.*; * in order to obtain client and server sockets for RMI calls. An * application may use the setSocketFactory method to * request that the RMI runtime use its socket factory instance - * instead of the default implementation.

            + * instead of the default implementation. * - * The default socket factory implementation used goes through a + *

            The default socket factory implementation performs a * three-tiered approach to creating client sockets. First, a direct * socket connection to the remote VM is attempted. If that fails * (due to a firewall), the runtime uses HTTP with the explicit port * number of the server. If the firewall does not allow this type of * communication, then HTTP to a cgi-bin script on the server is used - * to POST the RMI call.

            + * to POST the RMI call. + * + *

            The default socket factory implementation creates server sockets that + * are bound to the wildcard address, which accepts requests from all network + * interfaces. + * + * @implNote + *

            You can use the {@code RMISocketFactory} class to create a server socket that + * is bound to a specific address, restricting the origin of requests. For example, + * the following code implements a socket factory that binds server sockets to the + * loopback address. This restricts RMI to processing requests only from the local host. + * + *

            {@code
            + *     class LoopbackSocketFactory extends RMISocketFactory {
            + *         public ServerSocket createServerSocket(int port) throws IOException {
            + *             return new ServerSocket(port, 5, InetAddress.getLoopbackAddress());
            + *         }
            + *
            + *         public Socket createSocket(String host, int port) throws IOException {
            + *             // just call the default client socket factory
            + *             return RMISocketFactory.getDefaultSocketFactory()
            + *                                    .createSocket(host, port);
            + *         }
            + *     }
            + *
            + *     // ...
            + *
            + *     RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
            + * }
            + * + * Set the {@code java.rmi.server.hostname} system property + * to a host name (typically {@code localhost}) that resolves to the loopback + * interface to ensure that the generated stubs use the right network interface. * * @author Ann Wollrath * @author Peter Jones diff --git a/src/share/classes/java/rmi/server/UnicastRemoteObject.java b/src/share/classes/java/rmi/server/UnicastRemoteObject.java index 7764627bceb078a00d3391de3408f73b89bca8ac..be86c275246a9ddc80745345e76fd3c49b0d6d04 100644 --- a/src/share/classes/java/rmi/server/UnicastRemoteObject.java +++ b/src/share/classes/java/rmi/server/UnicastRemoteObject.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,6 +100,26 @@ import sun.rmi.server.UnicastServerRef2; *
          *
        * + *

        If an object is exported with the + * {@link #exportObject(Remote) exportObject(Remote)} + * or + * {@link #exportObject(Remote, int) exportObject(Remote, port)} + * methods, or if a subclass constructor invokes one of the + * {@link #UnicastRemoteObject()} + * or + * {@link #UnicastRemoteObject(int) UnicastRemoteObject(port)} + * constructors, the object is exported with a server socket created using the + * {@link RMISocketFactory} + * class. + * + * @implNote + *

        By default, server sockets created by the {@link RMISocketFactory} class + * listen on all network interfaces. See the + * {@link RMISocketFactory} class and the section + * RMI Socket Factories + * in the + * Java RMI Specification. + * * @author Ann Wollrath * @author Peter Jones * @since JDK1.1 diff --git a/src/share/classes/java/security/Security.java b/src/share/classes/java/security/Security.java index 98699da8149c4e1e3eeadf91553c3071d51d875a..ce99101e71669068b52ac5a07558893a5f8f1039 100644 --- a/src/share/classes/java/security/Security.java +++ b/src/share/classes/java/security/Security.java @@ -326,17 +326,13 @@ public final class Security { * *

        A provider cannot be added if it is already installed. * - *

        First, if there is a security manager, its - * {@code checkSecurityAccess} - * method is called with the string - * {@code "insertProvider."+provider.getName()} - * to see if it's ok to add a new provider. - * If the default implementation of {@code checkSecurityAccess} - * is used (i.e., that method is not overriden), then this will result in - * a call to the security manager's {@code checkPermission} method - * with a - * {@code SecurityPermission("insertProvider."+provider.getName())} - * permission. + *

        If there is a security manager, the + * {@link java.lang.SecurityManager#checkSecurityAccess} method is called + * with the {@code "insertProvider"} permission target name to see if + * it's ok to add a new provider. If this permission check is denied, + * {@code checkSecurityAccess} is called again with the + * {@code "insertProvider."+provider.getName()} permission target name. If + * both checks are denied, a {@code SecurityException} is thrown. * * @param provider the provider to be added. * @@ -360,7 +356,7 @@ public final class Security { public static synchronized int insertProviderAt(Provider provider, int position) { String providerName = provider.getName(); - check("insertProvider." + providerName); + checkInsertProvider(providerName); ProviderList list = Providers.getFullProviderList(); ProviderList newList = ProviderList.insertAt(list, provider, position - 1); if (list == newList) { @@ -373,17 +369,13 @@ public final class Security { /** * Adds a provider to the next position available. * - *

        First, if there is a security manager, its - * {@code checkSecurityAccess} - * method is called with the string - * {@code "insertProvider."+provider.getName()} - * to see if it's ok to add a new provider. - * If the default implementation of {@code checkSecurityAccess} - * is used (i.e., that method is not overriden), then this will result in - * a call to the security manager's {@code checkPermission} method - * with a - * {@code SecurityPermission("insertProvider."+provider.getName())} - * permission. + *

        If there is a security manager, the + * {@link java.lang.SecurityManager#checkSecurityAccess} method is called + * with the {@code "insertProvider"} permission target name to see if + * it's ok to add a new provider. If this permission check is denied, + * {@code checkSecurityAccess} is called again with the + * {@code "insertProvider."+provider.getName()} permission target name. If + * both checks are denied, a {@code SecurityException} is thrown. * * @param provider the provider to be added. * @@ -863,6 +855,23 @@ public final class Security { } } + private static void checkInsertProvider(String name) { + SecurityManager security = System.getSecurityManager(); + if (security != null) { + try { + security.checkSecurityAccess("insertProvider"); + } catch (SecurityException se1) { + try { + security.checkSecurityAccess("insertProvider." + name); + } catch (SecurityException se2) { + // throw first exception, but add second to suppressed + se1.addSuppressed(se2); + throw se1; + } + } + } + } + /* * Returns all providers who satisfy the specified * criterion. diff --git a/src/share/classes/java/security/SecurityPermission.java b/src/share/classes/java/security/SecurityPermission.java index e0f0f92b40c49d7f7222ccdc4aafd4bf4cd2054a..bbdccaeffe3e40bddbb0aabbeb46aa669d0f8e87 100644 --- a/src/share/classes/java/security/SecurityPermission.java +++ b/src/share/classes/java/security/SecurityPermission.java @@ -130,14 +130,17 @@ import java.util.StringTokenizer; *

        insertProvider.{provider name}Addition of a new provider, with the specified nameinsertProviderAddition of a new providerThis would allow somebody to introduce a possibly * malicious provider (e.g., one that discloses the private keys passed * to it) as the highest-priority provider. This would be possible * because the Security object (which manages the installed providers) * currently does not check the integrity or authenticity of a provider - * before attaching it.
        * *

        - * The following permissions are associated with classes that have been - * deprecated: {@link Identity}, {@link IdentityScope}, {@link Signer}. Use of - * them is discouraged. See the applicable classes for more information. + * The following permissions have been superseded by newer permissions or are + * associated with classes that have been deprecated: {@link Identity}, + * {@link IdentityScope}, {@link Signer}. Use of them is discouraged. See the + * applicable classes for more information. *

        * * @@ -199,6 +203,23 @@ import java.util.StringTokenizer; * * * + * + * + * + * + * + * * * *
        insertProvider.{provider name}Addition of a new provider, with the specified nameUse of this permission is discouraged from further use because it is + * possible to circumvent the name restrictions by overriding the + * {@link java.security.Provider#getName} method. Also, there is an equivalent + * level of risk associated with granting code permission to insert a provider + * with a specific name, or any name it chooses. Users should use the + * "insertProvider" permission instead. + *

        This would allow somebody to introduce a possibly + * malicious provider (e.g., one that discloses the private keys passed + * to it) as the highest-priority provider. This would be possible + * because the Security object (which manages the installed providers) + * currently does not check the integrity or authenticity of a provider + * before attaching it.

        setSystemScopeSetting of the system identity scopeThis would allow an attacker to configure the system identity scope with @@ -306,7 +327,6 @@ public final class SecurityPermission extends BasicPermission { * @throws NullPointerException if {@code name} is {@code null}. * @throws IllegalArgumentException if {@code name} is empty. */ - public SecurityPermission(String name) { super(name); @@ -323,7 +343,6 @@ public final class SecurityPermission extends BasicPermission { * @throws NullPointerException if {@code name} is {@code null}. * @throws IllegalArgumentException if {@code name} is empty. */ - public SecurityPermission(String name, String actions) { super(name, actions); diff --git a/src/share/classes/java/util/ArrayPrefixHelpers.java b/src/share/classes/java/util/ArrayPrefixHelpers.java index ef59ec7d47897ab3cfe181974dd9bbf07919322c..afa872c5855527b86196ef834b0728091bfc552c 100644 --- a/src/share/classes/java/util/ArrayPrefixHelpers.java +++ b/src/share/classes/java/util/ArrayPrefixHelpers.java @@ -128,6 +128,7 @@ class ArrayPrefixHelpers { this.lo = lo; this.hi = hi; } + @SuppressWarnings("unchecked") public final void compute() { final BinaryOperator fn; final T[] a; @@ -692,6 +693,4 @@ class ArrayPrefixHelpers { } } } - - -} \ No newline at end of file +} diff --git a/src/share/classes/java/util/Collections.java b/src/share/classes/java/util/Collections.java index 43ce42eeea6d32d316235261d534057ed7d4d60e..97555f567fa3f02b064a9a338275773026662833 100644 --- a/src/share/classes/java/util/Collections.java +++ b/src/share/classes/java/util/Collections.java @@ -1143,6 +1143,7 @@ public class Collections { public boolean removeIf(Predicate filter) { throw new UnsupportedOperationException(); } + @SuppressWarnings("unchecked") @Override public Spliterator spliterator() { return (Spliterator)c.spliterator(); @@ -1900,7 +1901,7 @@ public class Collections { private static final long serialVersionUID = -2239321462712562324L; - EmptyNavigableMap() { super(new TreeMap()); } + EmptyNavigableMap() { super(new TreeMap()); } @Override public NavigableSet navigableKeySet() @@ -1928,46 +1929,52 @@ public class Collections { public K ceilingKey(K key) { return nm.ceilingKey(key); } public K higherKey(K key) { return nm.higherKey(key); } + @SuppressWarnings("unchecked") public Entry lowerEntry(K key) { Entry lower = (Entry) nm.lowerEntry(key); return (null != lower) - ? new UnmodifiableEntrySet.UnmodifiableEntry(lower) + ? new UnmodifiableEntrySet.UnmodifiableEntry<>(lower) : null; } + @SuppressWarnings("unchecked") public Entry floorEntry(K key) { Entry floor = (Entry) nm.floorEntry(key); return (null != floor) - ? new UnmodifiableEntrySet.UnmodifiableEntry(floor) + ? new UnmodifiableEntrySet.UnmodifiableEntry<>(floor) : null; } + @SuppressWarnings("unchecked") public Entry ceilingEntry(K key) { Entry ceiling = (Entry) nm.ceilingEntry(key); return (null != ceiling) - ? new UnmodifiableEntrySet.UnmodifiableEntry(ceiling) + ? new UnmodifiableEntrySet.UnmodifiableEntry<>(ceiling) : null; } + @SuppressWarnings("unchecked") public Entry higherEntry(K key) { Entry higher = (Entry) nm.higherEntry(key); return (null != higher) - ? new UnmodifiableEntrySet.UnmodifiableEntry(higher) + ? new UnmodifiableEntrySet.UnmodifiableEntry<>(higher) : null; } + @SuppressWarnings("unchecked") public Entry firstEntry() { Entry first = (Entry) nm.firstEntry(); return (null != first) - ? new UnmodifiableEntrySet.UnmodifiableEntry(first) + ? new UnmodifiableEntrySet.UnmodifiableEntry<>(first) : null; } + @SuppressWarnings("unchecked") public Entry lastEntry() { Entry last = (Entry) nm.lastEntry(); return (null != last) - ? new UnmodifiableEntrySet.UnmodifiableEntry(last) + ? new UnmodifiableEntrySet.UnmodifiableEntry<>(last) : null; } @@ -2360,7 +2367,7 @@ public class Collections { } public NavigableSet tailSet(E fromElement) { synchronized (mutex) { - return new SynchronizedNavigableSet(ns.tailSet(fromElement, true), mutex); + return new SynchronizedNavigableSet<>(ns.tailSet(fromElement, true), mutex); } } @@ -2925,7 +2932,7 @@ public class Collections { public NavigableMap descendingMap() { synchronized (mutex) { return - new SynchronizedNavigableMap(nm.descendingMap(), mutex); + new SynchronizedNavigableMap<>(nm.descendingMap(), mutex); } } @@ -2935,13 +2942,13 @@ public class Collections { public NavigableSet navigableKeySet() { synchronized (mutex) { - return new SynchronizedNavigableSet(nm.navigableKeySet(), mutex); + return new SynchronizedNavigableSet<>(nm.navigableKeySet(), mutex); } } public NavigableSet descendingKeySet() { synchronized (mutex) { - return new SynchronizedNavigableSet(nm.descendingKeySet(), mutex); + return new SynchronizedNavigableSet<>(nm.descendingKeySet(), mutex); } } @@ -2959,27 +2966,27 @@ public class Collections { } public SortedMap tailMap(K fromKey) { synchronized (mutex) { - return new SynchronizedNavigableMap<>(nm.tailMap(fromKey, true),mutex); + return new SynchronizedNavigableMap<>(nm.tailMap(fromKey, true),mutex); } } public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { synchronized (mutex) { - return new SynchronizedNavigableMap( + return new SynchronizedNavigableMap<>( nm.subMap(fromKey, fromInclusive, toKey, toInclusive), mutex); } } public NavigableMap headMap(K toKey, boolean inclusive) { synchronized (mutex) { - return new SynchronizedNavigableMap( + return new SynchronizedNavigableMap<>( nm.headMap(toKey, inclusive), mutex); } } public NavigableMap tailMap(K fromKey, boolean inclusive) { synchronized (mutex) { - return new SynchronizedNavigableMap( + return new SynchronizedNavigableMap<>( nm.tailMap(fromKey, inclusive), mutex); } } @@ -4081,7 +4088,7 @@ public class Collections { public Entry lowerEntry(K key) { Entry lower = nm.lowerEntry(key); return (null != lower) - ? new CheckedMap.CheckedEntrySet.CheckedEntry(lower, valueType) + ? new CheckedMap.CheckedEntrySet.CheckedEntry<>(lower, valueType) : null; } @@ -4090,7 +4097,7 @@ public class Collections { public Entry floorEntry(K key) { Entry floor = nm.floorEntry(key); return (null != floor) - ? new CheckedMap.CheckedEntrySet.CheckedEntry(floor, valueType) + ? new CheckedMap.CheckedEntrySet.CheckedEntry<>(floor, valueType) : null; } @@ -4099,7 +4106,7 @@ public class Collections { public Entry ceilingEntry(K key) { Entry ceiling = nm.ceilingEntry(key); return (null != ceiling) - ? new CheckedMap.CheckedEntrySet.CheckedEntry(ceiling, valueType) + ? new CheckedMap.CheckedEntrySet.CheckedEntry<>(ceiling, valueType) : null; } @@ -4108,7 +4115,7 @@ public class Collections { public Entry higherEntry(K key) { Entry higher = nm.higherEntry(key); return (null != higher) - ? new CheckedMap.CheckedEntrySet.CheckedEntry(higher, valueType) + ? new CheckedMap.CheckedEntrySet.CheckedEntry<>(higher, valueType) : null; } @@ -4117,14 +4124,14 @@ public class Collections { public Entry firstEntry() { Entry first = nm.firstEntry(); return (null != first) - ? new CheckedMap.CheckedEntrySet.CheckedEntry(first, valueType) + ? new CheckedMap.CheckedEntrySet.CheckedEntry<>(first, valueType) : null; } public Entry lastEntry() { Entry last = nm.lastEntry(); return (null != last) - ? new CheckedMap.CheckedEntrySet.CheckedEntry(last, valueType) + ? new CheckedMap.CheckedEntrySet.CheckedEntry<>(last, valueType) : null; } @@ -4132,14 +4139,14 @@ public class Collections { Entry entry = nm.pollFirstEntry(); return (null == entry) ? null - : new CheckedMap.CheckedEntrySet.CheckedEntry(entry, valueType); + : new CheckedMap.CheckedEntrySet.CheckedEntry<>(entry, valueType); } public Entry pollLastEntry() { Entry entry = nm.pollLastEntry(); return (null == entry) ? null - : new CheckedMap.CheckedEntrySet.CheckedEntry(entry, valueType); + : new CheckedMap.CheckedEntrySet.CheckedEntry<>(entry, valueType); } public NavigableMap descendingMap() { diff --git a/src/share/classes/java/util/Comparator.java b/src/share/classes/java/util/Comparator.java index cd65ca4ea06e05e5314cd68f9ce2f2a9ae1d4f7e..55d5efb986678e4216d3c8088cb05cc71f1970f6 100644 --- a/src/share/classes/java/util/Comparator.java +++ b/src/share/classes/java/util/Comparator.java @@ -352,6 +352,7 @@ public interface Comparator { * @see Comparable * @since 1.8 */ + @SuppressWarnings("unchecked") public static > Comparator naturalOrder() { return (Comparator) Comparators.NaturalOrderComparator.INSTANCE; } @@ -374,7 +375,7 @@ public interface Comparator { * @since 1.8 */ public static Comparator nullsFirst(Comparator comparator) { - return new Comparators.NullComparator(true, comparator); + return new Comparators.NullComparator<>(true, comparator); } /** @@ -395,7 +396,7 @@ public interface Comparator { * @since 1.8 */ public static Comparator nullsLast(Comparator comparator) { - return new Comparators.NullComparator(false, comparator); + return new Comparators.NullComparator<>(false, comparator); } /** diff --git a/src/share/classes/java/util/Comparators.java b/src/share/classes/java/util/Comparators.java index a90383210854756b2589a16c9740abc3d6ee3cec..ee806798d7a79807217219afe714ac3344e846f9 100644 --- a/src/share/classes/java/util/Comparators.java +++ b/src/share/classes/java/util/Comparators.java @@ -87,12 +87,12 @@ class Comparators { @Override public Comparator thenComparing(Comparator other) { Objects.requireNonNull(other); - return new NullComparator(nullFirst, real == null ? other : real.thenComparing(other)); + return new NullComparator<>(nullFirst, real == null ? other : real.thenComparing(other)); } @Override public Comparator reversed() { - return new NullComparator(!nullFirst, real == null ? null : real.reversed()); + return new NullComparator<>(!nullFirst, real == null ? null : real.reversed()); } } } diff --git a/src/share/classes/java/util/Deque.java b/src/share/classes/java/util/Deque.java index 051ae9cca46b7aa99106e6f2083d400f3745e3ae..f6511417f33e875ca732252958d64229bc8c2567 100644 --- a/src/share/classes/java/util/Deque.java +++ b/src/share/classes/java/util/Deque.java @@ -38,7 +38,7 @@ package java.util; /** * A linear collection that supports element insertion and removal at * both ends. The name deque is short for "double ended queue" - * and is usually pronounced "deck". Most Deque + * and is usually pronounced "deck". Most {@code Deque} * implementations place no fixed limits on the number of elements * they may contain, but this interface supports capacity-restricted * deques as well as those with no fixed size limit. @@ -47,10 +47,10 @@ package java.util; * ends of the deque. Methods are provided to insert, remove, and * examine the element. Each of these methods exists in two forms: * one throws an exception if the operation fails, the other returns a - * special value (either null or false, depending on + * special value (either {@code null} or {@code false}, depending on * the operation). The latter form of the insert operation is * designed specifically for use with capacity-restricted - * Deque implementations; in most implementations, insert + * {@code Deque} implementations; in most implementations, insert * operations cannot fail. * *

        The twelve methods described above are summarized in the @@ -58,6 +58,7 @@ package java.util; * *

        * + * * * * @@ -72,38 +73,39 @@ package java.util; * * * - * - * - * - * + * + * + * + * * * * - * - * - * - * + * + * + * + * * * * - * - * - * - * + * + * + * + * * *
        Summary of Deque methods
        First Element (Head)
        Insert{@link #addFirst addFirst(e)}{@link #offerFirst offerFirst(e)}{@link #addLast addLast(e)}{@link #offerLast offerLast(e)}{@link Deque#addFirst addFirst(e)}{@link Deque#offerFirst offerFirst(e)}{@link Deque#addLast addLast(e)}{@link Deque#offerLast offerLast(e)}
        Remove{@link #removeFirst removeFirst()}{@link #pollFirst pollFirst()}{@link #removeLast removeLast()}{@link #pollLast pollLast()}{@link Deque#removeFirst removeFirst()}{@link Deque#pollFirst pollFirst()}{@link Deque#removeLast removeLast()}{@link Deque#pollLast pollLast()}
        Examine{@link #getFirst getFirst()}{@link #peekFirst peekFirst()}{@link #getLast getLast()}{@link #peekLast peekLast()}{@link Deque#getFirst getFirst()}{@link Deque#peekFirst peekFirst()}{@link Deque#getLast getLast()}{@link Deque#peekLast peekLast()}
        * *

        This interface extends the {@link Queue} interface. When a deque is * used as a queue, FIFO (First-In-First-Out) behavior results. Elements are * added at the end of the deque and removed from the beginning. The methods - * inherited from the Queue interface are precisely equivalent to - * Deque methods as indicated in the following table: + * inherited from the {@code Queue} interface are precisely equivalent to + * {@code Deque} methods as indicated in the following table: * *

        * + * * - * - * + * + * * * * @@ -135,13 +137,14 @@ package java.util; * interface should be used in preference to the legacy {@link Stack} class. * When a deque is used as a stack, elements are pushed and popped from the * beginning of the deque. Stack methods are precisely equivalent to - * Deque methods as indicated in the table below: + * {@code Deque} methods as indicated in the table below: * *

        *

        Comparison of Queue and Deque methods
        Queue Method Equivalent Deque Method {@code Queue} Method Equivalent {@code Deque} Method
        {@link java.util.Queue#add add(e)}
        + * * * - * + * * * * @@ -168,18 +171,18 @@ package java.util; *

        Unlike the {@link List} interface, this interface does not * provide support for indexed access to elements. * - *

        While Deque implementations are not strictly required + *

        While {@code Deque} implementations are not strictly required * to prohibit the insertion of null elements, they are strongly - * encouraged to do so. Users of any Deque implementations + * encouraged to do so. Users of any {@code Deque} implementations * that do allow null elements are strongly encouraged not to * take advantage of the ability to insert nulls. This is so because - * null is used as a special return value by various methods + * {@code null} is used as a special return value by various methods * to indicated that the deque is empty. * - *

        Deque implementations generally do not define - * element-based versions of the equals and hashCode + *

        {@code Deque} implementations generally do not define + * element-based versions of the {@code equals} and {@code hashCode} * methods, but instead inherit the identity-based versions from class - * Object. + * {@code Object}. * *

        This interface is a member of the Java Collections @@ -190,13 +193,13 @@ package java.util; * @since 1.6 * @param the type of elements held in this collection */ - public interface Deque extends Queue { /** * Inserts the specified element at the front of this deque if it is - * possible to do so immediately without violating capacity restrictions. - * When using a capacity-restricted deque, it is generally preferable to - * use method {@link #offerFirst}. + * possible to do so immediately without violating capacity restrictions, + * throwing an {@code IllegalStateException} if no space is currently + * available. When using a capacity-restricted deque, it is generally + * preferable to use method {@link #offerFirst}. * * @param e the element to add * @throws IllegalStateException if the element cannot be added at this @@ -212,9 +215,10 @@ public interface Deque extends Queue { /** * Inserts the specified element at the end of this deque if it is - * possible to do so immediately without violating capacity restrictions. - * When using a capacity-restricted deque, it is generally preferable to - * use method {@link #offerLast}. + * possible to do so immediately without violating capacity restrictions, + * throwing an {@code IllegalStateException} if no space is currently + * available. When using a capacity-restricted deque, it is generally + * preferable to use method {@link #offerLast}. * *

        This method is equivalent to {@link #add}. * @@ -237,8 +241,8 @@ public interface Deque extends Queue { * which can fail to insert an element only by throwing an exception. * * @param e the element to add - * @return true if the element was added to this deque, else - * false + * @return {@code true} if the element was added to this deque, else + * {@code false} * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this @@ -255,8 +259,8 @@ public interface Deque extends Queue { * which can fail to insert an element only by throwing an exception. * * @param e the element to add - * @return true if the element was added to this deque, else - * false + * @return {@code true} if the element was added to this deque, else + * {@code false} * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this @@ -288,17 +292,17 @@ public interface Deque extends Queue { /** * Retrieves and removes the first element of this deque, - * or returns null if this deque is empty. + * or returns {@code null} if this deque is empty. * - * @return the head of this deque, or null if this deque is empty + * @return the head of this deque, or {@code null} if this deque is empty */ E pollFirst(); /** * Retrieves and removes the last element of this deque, - * or returns null if this deque is empty. + * or returns {@code null} if this deque is empty. * - * @return the tail of this deque, or null if this deque is empty + * @return the tail of this deque, or {@code null} if this deque is empty */ E pollLast(); @@ -325,31 +329,31 @@ public interface Deque extends Queue { /** * Retrieves, but does not remove, the first element of this deque, - * or returns null if this deque is empty. + * or returns {@code null} if this deque is empty. * - * @return the head of this deque, or null if this deque is empty + * @return the head of this deque, or {@code null} if this deque is empty */ E peekFirst(); /** * Retrieves, but does not remove, the last element of this deque, - * or returns null if this deque is empty. + * or returns {@code null} if this deque is empty. * - * @return the tail of this deque, or null if this deque is empty + * @return the tail of this deque, or {@code null} if this deque is empty */ E peekLast(); /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. - * More formally, removes the first element e such that + * More formally, removes the first element {@code e} such that * (o==null ? e==null : o.equals(e)) * (if such an element exists). - * Returns true if this deque contained the specified element + * Returns {@code true} if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present - * @return true if an element was removed as a result of this call + * @return {@code true} if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque * (optional) @@ -362,14 +366,14 @@ public interface Deque extends Queue { /** * Removes the last occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. - * More formally, removes the last element e such that + * More formally, removes the last element {@code e} such that * (o==null ? e==null : o.equals(e)) * (if such an element exists). - * Returns true if this deque contained the specified element + * Returns {@code true} if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present - * @return true if an element was removed as a result of this call + * @return {@code true} if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque * (optional) @@ -385,15 +389,15 @@ public interface Deque extends Queue { * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning - * true upon success and throwing an - * IllegalStateException if no space is currently available. + * {@code true} upon success and throwing an + * {@code IllegalStateException} if no space is currently available. * When using a capacity-restricted deque, it is generally preferable to * use {@link #offer(Object) offer}. * *

        This method is equivalent to {@link #addLast}. * * @param e the element to add - * @return true (as specified by {@link Collection#add}) + * @return {@code true} (as specified by {@link Collection#add}) * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element @@ -409,7 +413,7 @@ public interface Deque extends Queue { * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning - * true upon success and false if no space is currently + * {@code true} upon success and {@code false} if no space is currently * available. When using a capacity-restricted deque, this method is * generally preferable to the {@link #add} method, which can fail to * insert an element only by throwing an exception. @@ -417,8 +421,8 @@ public interface Deque extends Queue { *

        This method is equivalent to {@link #offerLast}. * * @param e the element to add - * @return true if the element was added to this deque, else - * false + * @return {@code true} if the element was added to this deque, else + * {@code false} * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this @@ -444,11 +448,11 @@ public interface Deque extends Queue { /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque), or returns - * null if this deque is empty. + * {@code null} if this deque is empty. * *

        This method is equivalent to {@link #pollFirst()}. * - * @return the first element of this deque, or null if + * @return the first element of this deque, or {@code null} if * this deque is empty */ E poll(); @@ -469,12 +473,12 @@ public interface Deque extends Queue { /** * Retrieves, but does not remove, the head of the queue represented by * this deque (in other words, the first element of this deque), or - * returns null if this deque is empty. + * returns {@code null} if this deque is empty. * *

        This method is equivalent to {@link #peekFirst()}. * * @return the head of the queue represented by this deque, or - * null if this deque is empty + * {@code null} if this deque is empty */ E peek(); @@ -484,9 +488,8 @@ public interface Deque extends Queue { /** * Pushes an element onto the stack represented by this deque (in other * words, at the head of this deque) if it is possible to do so - * immediately without violating capacity restrictions, returning - * true upon success and throwing an - * IllegalStateException if no space is currently available. + * immediately without violating capacity restrictions, throwing an + * {@code IllegalStateException} if no space is currently available. * *

        This method is equivalent to {@link #addFirst}. * @@ -520,16 +523,16 @@ public interface Deque extends Queue { /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. - * More formally, removes the first element e such that + * More formally, removes the first element {@code e} such that * (o==null ? e==null : o.equals(e)) * (if such an element exists). - * Returns true if this deque contained the specified element + * Returns {@code true} if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * - *

        This method is equivalent to {@link #removeFirstOccurrence}. + *

        This method is equivalent to {@link #removeFirstOccurrence(Object)}. * * @param o element to be removed from this deque, if present - * @return true if an element was removed as a result of this call + * @return {@code true} if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque * (optional) @@ -540,13 +543,13 @@ public interface Deque extends Queue { boolean remove(Object o); /** - * Returns true if this deque contains the specified element. - * More formally, returns true if and only if this deque contains - * at least one element e such that + * Returns {@code true} if this deque contains the specified element. + * More formally, returns {@code true} if and only if this deque contains + * at least one element {@code e} such that * (o==null ? e==null : o.equals(e)). * * @param o element whose presence in this deque is to be tested - * @return true if this deque contains the specified element + * @return {@code true} if this deque contains the specified element * @throws ClassCastException if the type of the specified element * is incompatible with this deque * (optional) diff --git a/src/share/classes/java/util/DoubleSummaryStatistics.java b/src/share/classes/java/util/DoubleSummaryStatistics.java index fb79c56660b5ed3d129b88311e7db8e5d5e98d1e..63c887e23ce50c0de392bd2ce2620a77d508f07e 100644 --- a/src/share/classes/java/util/DoubleSummaryStatistics.java +++ b/src/share/classes/java/util/DoubleSummaryStatistics.java @@ -25,6 +25,7 @@ package java.util; import java.util.function.DoubleConsumer; +import java.util.stream.Collector; /** * A state object for collecting statistics such as count, min, max, sum, and @@ -35,24 +36,24 @@ import java.util.function.DoubleConsumer; * summary statistics on a stream of doubles with: *

         {@code
          * DoubleSummaryStatistics stats = doubleStream.collect(DoubleSummaryStatistics::new,
        - *     DoubleSummaryStatistics::accept,
        - *     DoubleSummaryStatistics::combine);
        + *                                                      DoubleSummaryStatistics::accept,
        + *                                                      DoubleSummaryStatistics::combine);
          * }
        * *

        {@code DoubleSummaryStatistics} can be used as a - * {@linkplain java.util.stream.Stream#reduce(java.util.function.BinaryOperator) reduction} + * {@linkplain java.util.stream.Stream#collect(Collector) reduction} * target for a {@linkplain java.util.stream.Stream stream}. For example: * *

         {@code
          * DoubleSummaryStatistics stats = people.stream()
        - *     .collect(Collectors.toDoubleSummaryStatistics(Person::getWeight));
        + *     .collect(Collectors.summarizingDouble(Person::getWeight));
          *}
        * * This computes, in a single pass, the count of people, as well as the minimum, * maximum, sum, and average of their weights. * * @implNote This implementation is not thread safe. However, it is safe to use - * {@link java.util.stream.Collectors#toDoubleSummaryStatistics(java.util.function.ToDoubleFunction) + * {@link java.util.stream.Collectors#summarizingDouble(java.util.function.ToDoubleFunction) * Collectors.toDoubleStatistics()} on a parallel stream, because the parallel * implementation of {@link java.util.stream.Stream#collect Stream.collect()} * provides the necessary partitioning, isolation, and merging of results for @@ -152,7 +153,7 @@ public class DoubleSummaryStatistics implements DoubleConsumer { } /** - * Returns the average of values recorded, or zero if no values have been + * Returns the arithmetic mean of values recorded, or zero if no values have been * recorded. The average returned can vary depending upon the order in * which values are recorded. This is due to accumulated rounding error in * addition of values of differing magnitudes. Values sorted by increasing @@ -160,7 +161,7 @@ public class DoubleSummaryStatistics implements DoubleConsumer { * value is a {@code NaN} or the sum is at any point a {@code NaN} then the * average will be {@code NaN}. * - * @return the average of values, or zero if none + * @return the arithmetic mean of values, or zero if none */ public final double getAverage() { return getCount() > 0 ? getSum() / getCount() : 0.0d; diff --git a/src/share/classes/java/util/Formatter.java b/src/share/classes/java/util/Formatter.java index 5c096c63acfb66c313c541e93c2ccc6a940304aa..275e1854e0aef8ac29505ec8c2f245fc346e306e 100644 --- a/src/share/classes/java/util/Formatter.java +++ b/src/share/classes/java/util/Formatter.java @@ -626,12 +626,11 @@ import sun.misc.FormattedFloatingDecimal; *

        For general argument types, the precision is the maximum number of * characters to be written to the output. * - *

        For the floating-point conversions {@code 'e'}, {@code 'E'}, and - * {@code 'f'} the precision is the number of digits after the decimal - * separator. If the conversion is {@code 'g'} or {@code 'G'}, then the + *

        For the floating-point conversions {@code 'a'}, {@code 'A'}, {@code 'e'}, + * {@code 'E'}, and {@code 'f'} the precision is the number of digits after the + * radix point. If the conversion is {@code 'g'} or {@code 'G'}, then the * precision is the total number of digits in the resulting magnitude after - * rounding. If the conversion is {@code 'a'} or {@code 'A'}, then the - * precision must not be specified. + * rounding. * *

        For character, integral, and date/time argument types and the percent * and line separator conversions, the precision is not applicable; if a @@ -1297,14 +1296,21 @@ import sun.misc.FormattedFloatingDecimal; * of the significand as a fraction. The exponent is represented by * {@code 'p'} ('\u0070') followed by a decimal string of the * unbiased exponent as if produced by invoking {@link - * Integer#toString(int) Integer.toString} on the exponent value. + * Integer#toString(int) Integer.toString} on the exponent value. If the + * precision is specified, the value is rounded to the given number of + * hexadecimal digits. * *

      • If m is a {@code double} value with a subnormal - * representation then the significand is represented by the characters - * {@code '0x0.'} followed by the hexadecimal representation of the rest - * of the significand as a fraction. The exponent is represented by - * {@code 'p-1022'}. Note that there must be at least one nonzero digit - * in a subnormal significand. + * representation then, unless the precision is specified to be in the range + * 1 through 12, inclusive, the significand is represented by the characters + * {@code '0x0.'} followed by the hexadecimal representation of the rest of + * the significand as a fraction, and the exponent represented by + * {@code 'p-1022'}. If the precision is in the interval + * [1, 12], the subnormal value is normalized such that it + * begins with the characters {@code '0x1.'}, rounded to the number of + * hexadecimal digits of precision, and the exponent adjusted + * accordingly. Note that there must be at least one nonzero digit in a + * subnormal significand. * * * @@ -1367,7 +1373,7 @@ import sun.misc.FormattedFloatingDecimal; * {@code 1}. * *

        If the conversion is {@code 'a'} or {@code 'A'}, then the precision - * is the number of hexadecimal digits after the decimal separator. If the + * is the number of hexadecimal digits after the radix point. If the * precision is not provided, then all of the digits as returned by {@link * Double#toHexString(double)} will be output. * diff --git a/src/share/classes/java/util/HashMap.java b/src/share/classes/java/util/HashMap.java index c2aace9db8fbc7dc70301e8b6a95ac4b91f7995d..8dfafac8642df11bd6139de8c030397dbdf95c7c 100644 --- a/src/share/classes/java/util/HashMap.java +++ b/src/share/classes/java/util/HashMap.java @@ -876,13 +876,9 @@ public class HashMap private static int roundUpToPowerOf2(int number) { // assert number >= 0 : "number must be non-negative"; - int rounded = number >= MAXIMUM_CAPACITY + return number >= MAXIMUM_CAPACITY ? MAXIMUM_CAPACITY - : (rounded = Integer.highestOneBit(number)) != 0 - ? (Integer.bitCount(number) > 1) ? rounded << 1 : rounded - : 1; - - return rounded; + : (number > 1) ? Integer.highestOneBit((number - 1) << 1) : 1; } /** diff --git a/src/share/classes/java/util/Hashtable.java b/src/share/classes/java/util/Hashtable.java index a481719be0c97d1a95ab5c9da3c0a43902a68eb0..518bd17f5b784e90937bb2a82f1147f4581767b1 100644 --- a/src/share/classes/java/util/Hashtable.java +++ b/src/share/classes/java/util/Hashtable.java @@ -928,6 +928,7 @@ public class Hashtable return (null == result) ? defaultValue : result; } + @SuppressWarnings("unchecked") @Override public synchronized void forEach(BiConsumer action) { Objects.requireNonNull(action); // explicit check required in case @@ -947,6 +948,7 @@ public class Hashtable } } + @SuppressWarnings("unchecked") @Override public synchronized void replaceAll(BiFunction function) { Objects.requireNonNull(function); // explicit check required in case diff --git a/src/share/classes/java/util/IdentityHashMap.java b/src/share/classes/java/util/IdentityHashMap.java index 3064588c9013b3c9a7c7b67795fcd08df530d547..a4bdc4b9efdadec6b38e3f010788e30a2fde38ff 100644 --- a/src/share/classes/java/util/IdentityHashMap.java +++ b/src/share/classes/java/util/IdentityHashMap.java @@ -1339,6 +1339,7 @@ public class IdentityHashMap tab[i + 1] = value; } + @SuppressWarnings("unchecked") @Override public void forEach(BiConsumer action) { Objects.requireNonNull(action); @@ -1357,6 +1358,7 @@ public class IdentityHashMap } } + @SuppressWarnings("unchecked") @Override public void replaceAll(BiFunction function) { Objects.requireNonNull(function); diff --git a/src/share/classes/java/util/IntSummaryStatistics.java b/src/share/classes/java/util/IntSummaryStatistics.java index fcca3296f85569b9462c80b0cc554b382fde924a..f93436e701742300bc515c267ea33b68f17ffe5d 100644 --- a/src/share/classes/java/util/IntSummaryStatistics.java +++ b/src/share/classes/java/util/IntSummaryStatistics.java @@ -25,6 +25,7 @@ package java.util; import java.util.function.IntConsumer; +import java.util.stream.Collector; /** * A state object for collecting statistics such as count, min, max, sum, and @@ -35,24 +36,24 @@ import java.util.function.IntConsumer; * summary statistics on a stream of ints with: *

         {@code
          * IntSummaryStatistics stats = intStream.collect(IntSummaryStatistics::new,
        - *     IntSummaryStatistics::accept,
        - *     IntSummaryStatistics::combine);
        + *                                                IntSummaryStatistics::accept,
        + *                                                IntSummaryStatistics::combine);
          * }
        * *

        {@code IntSummaryStatistics} can be used as a - * {@linkplain java.util.stream.Stream#reduce(java.util.function.BinaryOperator) reduction} + * {@linkplain java.util.stream.Stream#collect(Collector) reduction} * target for a {@linkplain java.util.stream.Stream stream}. For example: * *

         {@code
          * IntSummaryStatistics stats = people.stream()
        - *     .collect(Collectors.toIntSummaryStatistics(Person::getDependents));
        + *                                    .collect(Collectors.summarizingInt(Person::getDependents));
          *}
        * * This computes, in a single pass, the count of people, as well as the minimum, * maximum, sum, and average of their number of dependents. * * @implNote This implementation is not thread safe. However, it is safe to use - * {@link java.util.stream.Collectors#toIntSummaryStatistics(java.util.function.ToIntFunction) + * {@link java.util.stream.Collectors#summarizingInt(java.util.function.ToIntFunction) * Collectors.toIntStatistics()} on a parallel stream, because the parallel * implementation of {@link java.util.stream.Stream#collect Stream.collect()} * provides the necessary partitioning, isolation, and merging of results for @@ -140,10 +141,10 @@ public class IntSummaryStatistics implements IntConsumer { } /** - * Returns the average of values recorded, or zero if no values have been + * Returns the arithmetic mean of values recorded, or zero if no values have been * recorded. * - * @return the average of values, or zero if none + * @return the arithmetic mean of values, or zero if none */ public final double getAverage() { return getCount() > 0 ? (double) getSum() / getCount() : 0.0d; diff --git a/src/share/classes/java/util/List.java b/src/share/classes/java/util/List.java index daee8acd641c74b66e176dfc2326e4c5abbeb732..11104ab760ea9f156127dd44bfa082efd59834c8 100644 --- a/src/share/classes/java/util/List.java +++ b/src/share/classes/java/util/List.java @@ -384,10 +384,12 @@ public interface List extends Collection { * @implSpec * The default implementation is equivalent to, for this {@code list}: *
        +     * {@code
              * final ListIterator li = list.listIterator();
              * while (li.hasNext()) {
              *   li.set(operator.apply(li.next()));
              * }
        +     * }
              * 
        * If the list's list-iterator does not support the {@code set} operation * then an {@code UnsupportedOperationException} will be thrown when diff --git a/src/share/classes/java/util/LongSummaryStatistics.java b/src/share/classes/java/util/LongSummaryStatistics.java index 0e2da71f8bc95d30f0b16ec71a1f417e20effe89..085aa2980756006fd64ec9a7a580f9cb2df9cff7 100644 --- a/src/share/classes/java/util/LongSummaryStatistics.java +++ b/src/share/classes/java/util/LongSummaryStatistics.java @@ -26,6 +26,7 @@ package java.util; import java.util.function.IntConsumer; import java.util.function.LongConsumer; +import java.util.stream.Collector; /** * A state object for collecting statistics such as count, min, max, sum, and @@ -36,24 +37,24 @@ import java.util.function.LongConsumer; * summary statistics on a stream of longs with: *
         {@code
          * LongSummaryStatistics stats = longStream.collect(LongSummaryStatistics::new,
        - *     LongSummaryStatistics::accept,
        - *     LongSummaryStatistics::combine);
        + *                                                  LongSummaryStatistics::accept,
        + *                                                  LongSummaryStatistics::combine);
          * }
        * *

        {@code LongSummaryStatistics} can be used as a - * {@linkplain java.util.stream.Stream#reduce(java.util.function.BinaryOperator) reduction} + * {@linkplain java.util.stream.Stream#collect(Collector)} reduction} * target for a {@linkplain java.util.stream.Stream stream}. For example: * *

         {@code
          * LongSummaryStatistics stats = people.stream()
        - *     .collect(Collectors.toLongSummaryStatistics(Person::getAge));
        + *                                     .collect(Collectors.summarizingLong(Person::getAge));
          *}
        * * This computes, in a single pass, the count of people, as well as the minimum, - * maximum, sum, and average of their ages in milliseconds. + * maximum, sum, and average of their ages. * * @implNote This implementation is not thread safe. However, it is safe to use - * {@link java.util.stream.Collectors#toLongSummaryStatistics(java.util.function.ToLongFunction) + * {@link java.util.stream.Collectors#summarizingLong(java.util.function.ToLongFunction) * Collectors.toLongStatistics()} on a parallel stream, because the parallel * implementation of {@link java.util.stream.Stream#collect Stream.collect()} * provides the necessary partitioning, isolation, and merging of results for @@ -152,10 +153,10 @@ public class LongSummaryStatistics implements LongConsumer, IntConsumer { } /** - * Returns the average of values recorded, or zero if no values have been + * Returns the arithmetic mean of values recorded, or zero if no values have been * recorded. * - * @return The average of values, or zero if none + * @return The arithmetic mean of values, or zero if none */ public final double getAverage() { return getCount() > 0 ? (double) getSum() / getCount() : 0.0d; diff --git a/src/share/classes/java/util/Map.java b/src/share/classes/java/util/Map.java index 8ad16ee8323359c562f3f4aee4ea55a0eec93aca..321233e6f8d9a58e97be98dbf00bef87761f5cd4 100644 --- a/src/share/classes/java/util/Map.java +++ b/src/share/classes/java/util/Map.java @@ -561,6 +561,7 @@ public interface Map { * concurrency properties. * * @param key the key whose associated value is to be returned + * @param defaultValue the default mapping of the key * @return the value to which the specified key is mapped, or * {@code defaultValue} if this map contains no mapping for the key * @throws ClassCastException if the key is of an inappropriate type for diff --git a/src/share/classes/java/util/Optional.java b/src/share/classes/java/util/Optional.java index 4e95e18684b335f7a82986a6f6b186fa9ad6a6fc..ce2a33d1de68c915502027ee5ff38672d0a93747 100644 --- a/src/share/classes/java/util/Optional.java +++ b/src/share/classes/java/util/Optional.java @@ -93,6 +93,7 @@ public final class Optional { /** * Returns an {@code Optional} with the specified present non-null value. * + * @param the class of the value * @param value the value to be present, which must be non-null * @return an {@code Optional} with the value present */ @@ -104,6 +105,7 @@ public final class Optional { * Returns an {@code Optional} describing the specified value, if non-null, * otherwise returns an empty {@code Optional}. * + * @param the class of the value * @param value the possibly-null value to describe * @return an {@code Optional} with a present value if the specified value * is non-null, otherwise an empty {@code Optional} @@ -305,7 +307,7 @@ public final class Optional { return false; } - Optional other = (Optional) obj; + Optional other = (Optional) obj; return Objects.equals(value, other.value); } diff --git a/src/share/classes/java/util/Queue.java b/src/share/classes/java/util/Queue.java index 124cc449426ec3ea291c9755c051649adcbf79fa..4d345df7e6fc26e0dc1c23eb747a7f7737179dd2 100644 --- a/src/share/classes/java/util/Queue.java +++ b/src/share/classes/java/util/Queue.java @@ -41,14 +41,15 @@ package java.util; * queues provide additional insertion, extraction, and inspection * operations. Each of these methods exists in two forms: one throws * an exception if the operation fails, the other returns a special - * value (either null or false, depending on the + * value (either {@code null} or {@code false}, depending on the * operation). The latter form of the insert operation is designed - * specifically for use with capacity-restricted Queue + * specifically for use with capacity-restricted {@code Queue} * implementations; in most implementations, insert operations cannot * fail. * *

        *

      • Comparison of Stack and Deque methods
        Stack Method Equivalent Deque Method Equivalent {@code Deque} Method
        {@link #push push(e)}
        + * * * * @@ -56,18 +57,18 @@ package java.util; * * * - * - * + * + * * * * - * - * + * + * * * * - * - * + * + * * *
        Summary of Queue methods
        Throws exception
        Insert{@link #add add(e)}{@link #offer offer(e)}{@link Queue#add add(e)}{@link Queue#offer offer(e)}
        Remove{@link #remove remove()}{@link #poll poll()}{@link Queue#remove remove()}{@link Queue#poll poll()}
        Examine{@link #element element()}{@link #peek peek()}{@link Queue#element element()}{@link Queue#peek peek()}
        * @@ -79,15 +80,15 @@ package java.util; * Whatever the ordering used, the head of the queue is that * element which would be removed by a call to {@link #remove() } or * {@link #poll()}. In a FIFO queue, all new elements are inserted at - * the tail of the queue. Other kinds of queues may use - * different placement rules. Every Queue implementation + * the tail of the queue. Other kinds of queues may use + * different placement rules. Every {@code Queue} implementation * must specify its ordering properties. * *

        The {@link #offer offer} method inserts an element if possible, - * otherwise returning false. This differs from the {@link + * otherwise returning {@code false}. This differs from the {@link * java.util.Collection#add Collection.add} method, which can fail to * add an element only by throwing an unchecked exception. The - * offer method is designed for use when failure is a normal, + * {@code offer} method is designed for use when failure is a normal, * rather than exceptional occurrence, for example, in fixed-capacity * (or "bounded") queues. * @@ -95,32 +96,32 @@ package java.util; * return the head of the queue. * Exactly which element is removed from the queue is a * function of the queue's ordering policy, which differs from - * implementation to implementation. The remove() and - * poll() methods differ only in their behavior when the - * queue is empty: the remove() method throws an exception, - * while the poll() method returns null. + * implementation to implementation. The {@code remove()} and + * {@code poll()} methods differ only in their behavior when the + * queue is empty: the {@code remove()} method throws an exception, + * while the {@code poll()} method returns {@code null}. * *

        The {@link #element()} and {@link #peek()} methods return, but do * not remove, the head of the queue. * - *

        The Queue interface does not define the blocking queue + *

        The {@code Queue} interface does not define the blocking queue * methods, which are common in concurrent programming. These methods, * which wait for elements to appear or for space to become available, are * defined in the {@link java.util.concurrent.BlockingQueue} interface, which * extends this interface. * - *

        Queue implementations generally do not allow insertion - * of null elements, although some implementations, such as - * {@link LinkedList}, do not prohibit insertion of null. - * Even in the implementations that permit it, null should - * not be inserted into a Queue, as null is also - * used as a special return value by the poll method to + *

        {@code Queue} implementations generally do not allow insertion + * of {@code null} elements, although some implementations, such as + * {@link LinkedList}, do not prohibit insertion of {@code null}. + * Even in the implementations that permit it, {@code null} should + * not be inserted into a {@code Queue}, as {@code null} is also + * used as a special return value by the {@code poll} method to * indicate that the queue contains no elements. * - *

        Queue implementations generally do not define - * element-based versions of methods equals and - * hashCode but instead inherit the identity based versions - * from class Object, because element-based equality is not + *

        {@code Queue} implementations generally do not define + * element-based versions of methods {@code equals} and + * {@code hashCode} but instead inherit the identity based versions + * from class {@code Object}, because element-based equality is not * always well-defined for queues with the same elements but different * ordering properties. * @@ -145,11 +146,11 @@ public interface Queue extends Collection { /** * Inserts the specified element into this queue if it is possible to do so * immediately without violating capacity restrictions, returning - * true upon success and throwing an IllegalStateException + * {@code true} upon success and throwing an {@code IllegalStateException} * if no space is currently available. * * @param e the element to add - * @return true (as specified by {@link Collection#add}) + * @return {@code true} (as specified by {@link Collection#add}) * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element @@ -169,8 +170,8 @@ public interface Queue extends Collection { * by throwing an exception. * * @param e the element to add - * @return true if the element was added to this queue, else - * false + * @return {@code true} if the element was added to this queue, else + * {@code false} * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null and @@ -192,9 +193,9 @@ public interface Queue extends Collection { /** * Retrieves and removes the head of this queue, - * or returns null if this queue is empty. + * or returns {@code null} if this queue is empty. * - * @return the head of this queue, or null if this queue is empty + * @return the head of this queue, or {@code null} if this queue is empty */ E poll(); @@ -210,9 +211,9 @@ public interface Queue extends Collection { /** * Retrieves, but does not remove, the head of this queue, - * or returns null if this queue is empty. + * or returns {@code null} if this queue is empty. * - * @return the head of this queue, or null if this queue is empty + * @return the head of this queue, or {@code null} if this queue is empty */ E peek(); } diff --git a/src/share/classes/java/util/Random.java b/src/share/classes/java/util/Random.java index ca430bae26fdfeaeabb9e46c211d3cdb3443b0fe..ae2551c0f9bd9782be2f3230a1306feef928ee60 100644 --- a/src/share/classes/java/util/Random.java +++ b/src/share/classes/java/util/Random.java @@ -225,9 +225,8 @@ class Random implements java.io.Serializable { * Returns the next pseudorandom, uniformly distributed {@code int} * value from this random number generator's sequence. The general * contract of {@code nextInt} is that one {@code int} value is - * pseudorandomly generated and returned. All 232 - * possible {@code int} values are produced with - * (approximately) equal probability. + * pseudorandomly generated and returned. All 232 possible + * {@code int} values are produced with (approximately) equal probability. * *

        The method {@code nextInt} is implemented by class {@code Random} * as if by: @@ -370,11 +369,9 @@ class Random implements java.io.Serializable { *

        The general contract of {@code nextFloat} is that one * {@code float} value, chosen (approximately) uniformly from the * range {@code 0.0f} (inclusive) to {@code 1.0f} (exclusive), is - * pseudorandomly generated and returned. All 224 possible {@code float} values - * of the form m x 2-24, where m is a positive - * integer less than 224 , are + * pseudorandomly generated and returned. All 224 possible + * {@code float} values of the form m x 2-24, + * where m is a positive integer less than 224, are * produced with (approximately) equal probability. * *

        The method {@code nextFloat} is implemented by class {@code Random} diff --git a/src/share/classes/java/util/Scanner.java b/src/share/classes/java/util/Scanner.java index f6967f3a75cd08cdcd66c3f96f93a42f18930db9..36be8e3a2f9dbc713717c8ce84231826166223af 100644 --- a/src/share/classes/java/util/Scanner.java +++ b/src/share/classes/java/util/Scanner.java @@ -76,7 +76,7 @@ import sun.misc.LRUCache; * } *

        * prints the following output: - *

        {@code
        + * 
        {@code
          *     1
          *     2
          *     red
        @@ -149,8 +149,7 @@ import sun.misc.LRUCache;
          * {@link #reset} method will reset the value of the scanner's radix to
          * 10 regardless of whether it was previously changed.
          *
        - * 
        - * 

        Localized numbers

        + *

        Localized numbers

        * *

        An instance of this class is capable of scanning numbers in the standard * formats as well as in the formats of the scanner's locale. A scanner's @@ -167,186 +166,139 @@ import sun.misc.LRUCache; * {@link java.text.DecimalFormatSymbols DecimalFormatSymbols} object, * dfs. * - *

        - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
        LocalGroupSeparator  The character used to separate thousands groups, - * i.e., dfs.{@link - * java.text.DecimalFormatSymbols#getGroupingSeparator - * getGroupingSeparator()}
        LocalDecimalSeparator  The character used for the decimal point, - * i.e., dfs.{@link - * java.text.DecimalFormatSymbols#getDecimalSeparator - * getDecimalSeparator()}
        LocalPositivePrefix  The string that appears before a positive number (may - * be empty), i.e., df.{@link - * java.text.DecimalFormat#getPositivePrefix - * getPositivePrefix()}
        LocalPositiveSuffix  The string that appears after a positive number (may be - * empty), i.e., df.{@link - * java.text.DecimalFormat#getPositiveSuffix - * getPositiveSuffix()}
        LocalNegativePrefix  The string that appears before a negative number (may - * be empty), i.e., df.{@link - * java.text.DecimalFormat#getNegativePrefix - * getNegativePrefix()}
        LocalNegativeSuffix  The string that appears after a negative number (may be - * empty), i.e., df.{@link - * java.text.DecimalFormat#getNegativeSuffix - * getNegativeSuffix()}
        LocalNaN  The string that represents not-a-number for - * floating-point values, - * i.e., dfs.{@link - * java.text.DecimalFormatSymbols#getNaN - * getNaN()}
        LocalInfinity  The string that represents infinity for floating-point - * values, i.e., dfs.{@link - * java.text.DecimalFormatSymbols#getInfinity - * getInfinity()}
        + *
        + *
        LocalGroupSeparator   + *
        The character used to separate thousands groups, + * i.e., dfs.{@link + * java.text.DecimalFormatSymbols#getGroupingSeparator + * getGroupingSeparator()} + *
        LocalDecimalSeparator   + *
        The character used for the decimal point, + * i.e., dfs.{@link + * java.text.DecimalFormatSymbols#getDecimalSeparator + * getDecimalSeparator()} + *
        LocalPositivePrefix   + *
        The string that appears before a positive number (may + * be empty), i.e., df.{@link + * java.text.DecimalFormat#getPositivePrefix + * getPositivePrefix()} + *
        LocalPositiveSuffix   + *
        The string that appears after a positive number (may be + * empty), i.e., df.{@link + * java.text.DecimalFormat#getPositiveSuffix + * getPositiveSuffix()} + *
        LocalNegativePrefix   + *
        The string that appears before a negative number (may + * be empty), i.e., df.{@link + * java.text.DecimalFormat#getNegativePrefix + * getNegativePrefix()} + *
        LocalNegativeSuffix   + *
        The string that appears after a negative number (may be + * empty), i.e., df.{@link + * java.text.DecimalFormat#getNegativeSuffix + * getNegativeSuffix()} + *
        LocalNaN   + *
        The string that represents not-a-number for + * floating-point values, + * i.e., dfs.{@link + * java.text.DecimalFormatSymbols#getNaN + * getNaN()} + *
        LocalInfinity   + *
        The string that represents infinity for floating-point + * values, i.e., dfs.{@link + * java.text.DecimalFormatSymbols#getInfinity + * getInfinity()} + *
        * - * - *

        Number syntax

        + *

        Number syntax

        * *

        The strings that can be parsed as numbers by an instance of this class * are specified in terms of the following regular-expression grammar, where - * Rmax is the highest digit in the radix being used (for example, Rmax is 9 - * in base 10). + * Rmax is the highest digit in the radix being used (for example, Rmax is 9 in base 10). * *

        - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * + * returns true * - * + *
        Non0Digit: + *
        [1-Rmax] | NonASCIIDigit * - *
        - * + *
        Digit: + *
        [0-Rmax] | NonASCIIDigit * - *
        + *
        GroupedNumeral: + *
        Non0Digit + * Digit? + * Digit? + *
            LocalGroupSeparator + * Digit + * Digit + * Digit )+ ) * - *
        - * - * - * - * - * + *
        Numeral: + *
        ( ( Digit+ ) + * | GroupedNumeral ) * - *
        + *
        Integer: + *
        ( [-+]? ( Numeral + * ) ) + *
        | LocalPositivePrefix Numeral + * LocalPositiveSuffix + *
        | LocalNegativePrefix Numeral + * LocalNegativeSuffix * - *
        - * - * - * - * - * + *
        DecimalNumeral: + *
        Numeral + *
        | Numeral + * LocalDecimalSeparator + * Digit* + *
        | LocalDecimalSeparator + * Digit+ * - *
        + *
        Exponent: + *
        ( [eE] [+-]? Digit+ ) * - *
        - * + *
        Decimal: + *
        ( [-+]? DecimalNumeral + * Exponent? ) + *
        | LocalPositivePrefix + * DecimalNumeral + * LocalPositiveSuffix + * Exponent? + *
        | LocalNegativePrefix + * DecimalNumeral + * LocalNegativeSuffix + * Exponent? * - *
        + *
        HexFloat: + *
        [-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ + * ([pP][-+]?[0-9]+)? * - *
        - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * + * | LocalInfinity * - * - * - * - * - * - * + *
        SignedNonNumber: + *
        ( [-+]? NonNumber ) + *
        | LocalPositivePrefix + * NonNumber + * LocalPositiveSuffix + *
        | LocalNegativePrefix + * NonNumber + * LocalNegativeSuffix * - *
        NonASCIIDigit  ::= A non-ASCII character c for which + *
        + *
        NonAsciiDigit: + *
        A non-ASCII character c for which * {@link java.lang.Character#isDigit Character.isDigit}(c) - * returns true
         
        Non0Digit  ::= [1-Rmax] | NonASCIIDigit
         
        Digit  ::= [0-Rmax] | NonASCIIDigit
         
        GroupedNumeral  :: - * - * - * - * - * - *
        = ( Non0Digit - * Digit? - * Digit?
        LocalGroupSeparator - * Digit - * Digit - * Digit )+ )
         
        Numeral  ::= ( ( Digit+ ) - * | GroupedNumeral )
         
        - * Integer  ::= ( [-+]? ( Numeral - * ) )
        | LocalPositivePrefix Numeral - * LocalPositiveSuffix
        | LocalNegativePrefix Numeral - * LocalNegativeSuffix
         
        DecimalNumeral  ::= Numeral
        | Numeral - * LocalDecimalSeparator - * Digit*
        | LocalDecimalSeparator - * Digit+
         
        Exponent  ::= ( [eE] [+-]? Digit+ )
         
        - * Decimal  ::= ( [-+]? DecimalNumeral - * Exponent? )
        | LocalPositivePrefix - * DecimalNumeral - * LocalPositiveSuffix - * Exponent?
        | LocalNegativePrefix - * DecimalNumeral - * LocalNegativeSuffix - * Exponent?
         
        HexFloat  ::= [-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ - * ([pP][-+]?[0-9]+)?
         
        NonNumber  ::= NaN + *
        NonNumber: + *
        NaN * | LocalNan * | Infinity - * | LocalInfinity
         
        SignedNonNumber  ::= ( [-+]? NonNumber )
        | LocalPositivePrefix - * NonNumber - * LocalPositiveSuffix
        | LocalNegativePrefix - * NonNumber - * LocalNegativeSuffix
         
        - * Float  ::= Decimal
        | HexFloat
        | SignedNonNumber
        - * + *

        Float: + *
        Decimal + * | HexFloat + * | SignedNonNumber * - *

        Whitespace is not significant in the above regular expressions. + * + *

        Whitespace is not significant in the above regular expressions. * * @since 1.5 */ @@ -1675,6 +1627,7 @@ public final class Scanner implements Iterator, Closeable { * findWithinHorizon(Pattern.compile(pattern, horizon)). * * @param pattern a string specifying the pattern to search for + * @param horizon the search horizon * @return the text that matched the specified pattern * @throws IllegalStateException if this scanner is closed * @throws IllegalArgumentException if horizon is negative @@ -1709,6 +1662,7 @@ public final class Scanner implements Iterator, Closeable { * thrown. * * @param pattern the pattern to scan for + * @param horizon the search horizon * @return the text that matched the specified pattern * @throws IllegalStateException if this scanner is closed * @throws IllegalArgumentException if horizon is negative diff --git a/src/share/classes/java/util/ServiceLoader.java b/src/share/classes/java/util/ServiceLoader.java index 962438022a7b6476b1eeced7d6415266324fc7b7..aa5c300881837f2e8caab43418404bc9f94cff40 100644 --- a/src/share/classes/java/util/ServiceLoader.java +++ b/src/share/classes/java/util/ServiceLoader.java @@ -68,12 +68,13 @@ import java.util.NoSuchElementException; * *

        A service provider is identified by placing a * provider-configuration file in the resource directory - * META-INF/services. The file's name is the fully-qualified META-INF/services. The file's name is the fully-qualified binary name of the service's type. * The file contains a list of fully-qualified binary names of concrete * provider classes, one per line. Space and tab characters surrounding each * name, as well as blank lines, are ignored. The comment character is - * '#' ('\u0023', NUMBER SIGN); on + * '#' ('\u0023', + * NUMBER SIGN); on * each line all characters following the first comment character are ignored. * The file must be encoded in UTF-8. * @@ -484,6 +485,8 @@ public final class ServiceLoader * Creates a new service loader for the given service type and class * loader. * + * @param the class of the service type + * * @param service * The interface or abstract class representing the service * @@ -517,6 +520,8 @@ public final class ServiceLoader * ServiceLoader.load(service, * Thread.currentThread().getContextClassLoader())

        * + * @param the class of the service type + * * @param service * The interface or abstract class representing the service * @@ -546,6 +551,8 @@ public final class ServiceLoader * have been installed into the current Java virtual machine; providers on * the application's class path will be ignored. * + * @param the class of the service type + * * @param service * The interface or abstract class representing the service * diff --git a/src/share/classes/java/util/StringJoiner.java b/src/share/classes/java/util/StringJoiner.java index d2734102c672e2c845ffc9667a3f34564978ba3f..d4050a4afd50ed2bcc81e19ea89fc96c46b1759f 100644 --- a/src/share/classes/java/util/StringJoiner.java +++ b/src/share/classes/java/util/StringJoiner.java @@ -49,16 +49,17 @@ package java.util; *

        * A {@code StringJoiner} may be employed to create formatted output from a * {@link java.util.stream.Stream} using - * {@link java.util.stream.Collectors#toStringJoiner}. For example: + * {@link java.util.stream.Collectors#joining(CharSequence)}. For example: * *

         {@code
          * List numbers = Arrays.asList(1, 2, 3, 4);
          * String commaSeparatedNumbers = numbers.stream()
          *     .map(i -> i.toString())
        - *     .collect(Collectors.toStringJoiner(", ")).toString();
        + *     .collect(Collectors.joining(", "));
          * }
        * - * @see java.util.stream.Collectors#toStringJoiner + * @see java.util.stream.Collectors#joining(CharSequence) + * @see java.util.stream.Collectors#joining(CharSequence, CharSequence, CharSequence) * @since 1.8 */ public final class StringJoiner { @@ -202,15 +203,17 @@ public final class StringJoiner { * @param other The {@code StringJoiner} whose contents should be merged * into this one * @throws NullPointerException if the other {@code StringJoiner} is null + * @return This {@code StringJoiner} */ public StringJoiner merge(StringJoiner other) { Objects.requireNonNull(other); if (other.value != null) { + final int length = other.value.length(); + // lock the length so that we can seize the data to be appended + // before initiate copying to avoid interference, especially when + // merge 'this' StringBuilder builder = prepareBuilder(); - StringBuilder otherBuilder = other.value; - if (other.prefix.length() < otherBuilder.length()) { - builder.append(otherBuilder, other.prefix.length(), otherBuilder.length()); - } + builder.append(other.value, other.prefix.length(), length); } return this; } diff --git a/src/share/classes/java/util/TimeZone.java b/src/share/classes/java/util/TimeZone.java index ba4abb91f2cb674106f8c00f609b4fb45c83b9a5..b37c9f89d1c3527ca5d9895305e4c43fa03b3ae9 100644 --- a/src/share/classes/java/util/TimeZone.java +++ b/src/share/classes/java/util/TimeZone.java @@ -118,7 +118,7 @@ import sun.util.locale.provider.TimeZoneNameUtility; *
        * For example, TimeZone.getTimeZone("GMT-8").getID() returns "GMT-08:00". * - *

        Three-letter time zone IDs

        + *

        Three-letter time zone IDs

        * * For compatibility with JDK 1.1.x, some other three-letter time zone IDs * (such as "PST", "CTT", "AST") are also supported. However, their @@ -304,10 +304,10 @@ abstract public class TimeZone implements Serializable, Cloneable { * presentation to the user in the default locale. * *

        This method is equivalent to: - *

        + *
              * getDisplayName(false, {@link #LONG},
              *                Locale.getDefault({@link Locale.Category#DISPLAY}))
        -     * 
        + * * * @return the human-readable name of this time zone in the default locale. * @since 1.2 @@ -325,9 +325,9 @@ abstract public class TimeZone implements Serializable, Cloneable { * presentation to the user in the specified {@code locale}. * *

        This method is equivalent to: - *

        + *
              * getDisplayName(false, {@link #LONG}, locale)
        -     * 
        + * * * @param locale the locale in which to supply the display name. * @return the human-readable name of this time zone in the given locale. @@ -347,10 +347,10 @@ abstract public class TimeZone implements Serializable, Cloneable { * Time). Otherwise, a Standard Time name is returned. * *

        This method is equivalent to: - *

        + *
              * getDisplayName(daylight, style,
              *                Locale.getDefault({@link Locale.Category#DISPLAY}))
        -     * 
        + * * * @param daylight {@code true} specifying a Daylight Saving Time name, or * {@code false} specifying a Standard Time name diff --git a/src/share/classes/java/util/TreeMap.java b/src/share/classes/java/util/TreeMap.java index 352ac237ee8dafbf94c01a4bfc7ceccab358e6eb..5c61d4f71eeca624dc86a3ebe4b860669d44b4f0 100644 --- a/src/share/classes/java/util/TreeMap.java +++ b/src/share/classes/java/util/TreeMap.java @@ -2944,16 +2944,11 @@ public class TreeMap @Override public Comparator> getComparator() { - // Since SORTED is reported and Map.Entry elements are not comparable - // then a non-null comparator needs to be returned + // Adapt or create a key-based comparator if (tree.comparator != null) { - // Adapt the existing non-null comparator to compare entries - // by key return Map.Entry.comparingByKey(tree.comparator); } else { - // Return a comparator of entries by key, with K assumed to be - // of Comparable return (Comparator> & Serializable) (e1, e2) -> { @SuppressWarnings("unchecked") Comparable k1 = (Comparable) e1.getKey(); diff --git a/src/share/classes/java/util/UUID.java b/src/share/classes/java/util/UUID.java index 211912ef452e880be471e8f24c27a98b7cb18d7d..b9be5a47baf05616be5ee59a6de30ca33461684e 100644 --- a/src/share/classes/java/util/UUID.java +++ b/src/share/classes/java/util/UUID.java @@ -286,6 +286,7 @@ public final class UUID implements java.io.Serializable, Comparable { * * @throws UnsupportedOperationException * If this UUID is not a version 1 UUID + * @return The timestamp of this {@code UUID}. */ public long timestamp() { if (version() != 1) { diff --git a/src/share/classes/java/util/Vector.java b/src/share/classes/java/util/Vector.java index fc3a1f7f235467806e1a1454e2f72d8e7083be4f..6146957dfd6f6cc8f62a32f1eba2d0919ffaf153 100644 --- a/src/share/classes/java/util/Vector.java +++ b/src/share/classes/java/util/Vector.java @@ -45,9 +45,9 @@ import java.util.function.UnaryOperator; * capacity of a vector before inserting a large number of * components; this reduces the amount of incremental reallocation. * - *

        + *

        * The iterators returned by this class's {@link #iterator() iterator} and - * {@link #listIterator(int) listIterator} methods are fail-fast: + * {@link #listIterator(int) listIterator} methods are fail-fast: * if the vector is structurally modified at any time after the iterator is * created, in any way except through the iterator's own * {@link ListIterator#remove() remove} or @@ -1164,12 +1164,13 @@ public class Vector if (i >= size) { return; } - final Object[] elementData = Vector.this.elementData; + @SuppressWarnings("unchecked") + final E[] elementData = (E[]) Vector.this.elementData; if (i >= elementData.length) { throw new ConcurrentModificationException(); } while (i != size && modCount == expectedModCount) { - action.accept((E) elementData[i++]); + action.accept(elementData[i++]); } // update once at end of iteration to reduce heap write traffic cursor = i; @@ -1311,8 +1312,8 @@ public class Vector modCount++; } - @Override @SuppressWarnings("unchecked") + @Override public synchronized void sort(Comparator c) { final int expectedModCount = modCount; Arrays.sort((E[]) elementData, 0, elementCount, c); diff --git a/src/share/classes/java/util/WeakHashMap.java b/src/share/classes/java/util/WeakHashMap.java index eb2e636e2ba3e78cdb286f79c94ec75c46f8e196..0299d29663884bfc2059b8ac36cf4ad273c0050d 100644 --- a/src/share/classes/java/util/WeakHashMap.java +++ b/src/share/classes/java/util/WeakHashMap.java @@ -1038,6 +1038,7 @@ public class WeakHashMap } } + @SuppressWarnings("unchecked") @Override public void forEach(BiConsumer action) { Objects.requireNonNull(action); @@ -1059,6 +1060,7 @@ public class WeakHashMap } } + @SuppressWarnings("unchecked") @Override public void replaceAll(BiFunction function) { Objects.requireNonNull(function); diff --git a/src/share/classes/java/util/concurrent/CompletableFuture.java b/src/share/classes/java/util/concurrent/CompletableFuture.java index 7926f2e63b93d434109f7b1a9c325b3e5588524f..8f2354cd1f8afd865e9ca4d70251dde08b369aa1 100644 --- a/src/share/classes/java/util/concurrent/CompletableFuture.java +++ b/src/share/classes/java/util/concurrent/CompletableFuture.java @@ -48,13 +48,16 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import java.util.concurrent.CancellationException; +import java.util.concurrent.CompletionException; +import java.util.concurrent.CompletionStage; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.LockSupport; /** * A {@link Future} that may be explicitly completed (setting its - * value and status), and may include dependent functions and actions - * that trigger upon its completion. + * value and status), and may be used as a {@link CompletionStage}, + * supporting dependent functions and actions that trigger upon its + * completion. * *

        When two or more threads attempt to * {@link #complete complete}, @@ -62,64 +65,50 @@ import java.util.concurrent.locks.LockSupport; * {@link #cancel cancel} * a CompletableFuture, only one of them succeeds. * - *

        Methods are available for adding dependents based on - * user-provided Functions, Consumers, or Runnables. The appropriate - * form to use depends on whether actions require arguments and/or - * produce results. Completion of a dependent action will trigger the - * completion of another CompletableFuture. Actions may also be - * triggered after either or both the current and another - * CompletableFuture complete. Multiple CompletableFutures may also - * be grouped as one using {@link #anyOf(CompletableFuture...)} and - * {@link #allOf(CompletableFuture...)}. + *

        In addition to these and related methods for directly + * manipulating status and results, CompletableFuture implements + * interface {@link CompletionStage} with the following policies:

          * - *

          CompletableFutures themselves do not execute asynchronously. - * However, actions supplied for dependent completions of another - * CompletableFuture may do so, depending on whether they are provided - * via one of the async methods (that is, methods with names - * of the form xxxAsync). The async - * methods provide a way to commence asynchronous processing of an - * action using either a given {@link Executor} or by default the - * {@link ForkJoinPool#commonPool()}. To simplify monitoring, + *

        • Actions supplied for dependent completions of + * non-async methods may be performed by the thread that + * completes the current CompletableFuture, or by any other caller of + * a completion method.
        • + * + *
        • All async methods without an explicit Executor + * argument are performed using the {@link ForkJoinPool#commonPool()} + * (unless it does not support a parallelism level of at least two, in + * which case, a new Thread is used). To simplify monitoring, * debugging, and tracking, all generated asynchronous tasks are - * instances of the marker interface {@link AsynchronousCompletionTask}. + * instances of the marker interface {@link + * AsynchronousCompletionTask}.
        • * - *

          Actions supplied for dependent completions of non-async - * methods may be performed by the thread that completes the current - * CompletableFuture, or by any other caller of these methods. There - * are no guarantees about the order of processing completions unless - * constrained by these methods. + *

        • All CompletionStage methods are implemented independently of + * other public methods, so the behavior of one method is not impacted + * by overrides of others in subclasses.
        * - *

        Since (unlike {@link FutureTask}) this class has no direct - * control over the computation that causes it to be completed, - * cancellation is treated as just another form of exceptional completion. - * Method {@link #cancel cancel} has the same effect as - * {@code completeExceptionally(new CancellationException())}. + *

        CompletableFuture also implements {@link Future} with the following + * policies:

          * - *

          Upon exceptional completion (including cancellation), or when a - * completion entails an additional computation which terminates - * abruptly with an (unchecked) exception or error, then all of their - * dependent completions (and their dependents in turn) generally act - * as {@code completeExceptionally} with a {@link CompletionException} - * holding that exception as its cause. However, the {@link - * #exceptionally exceptionally} and {@link #handle handle} - * completions are able to handle exceptional completions of - * the CompletableFutures they depend on. + *

        • Since (unlike {@link FutureTask}) this class has no direct + * control over the computation that causes it to be completed, + * cancellation is treated as just another form of exceptional + * completion. Method {@link #cancel cancel} has the same effect as + * {@code completeExceptionally(new CancellationException())}. Method + * {@link #isCompletedExceptionally} can be used to determine if a + * CompletableFuture completed in any exceptional fashion.
        • * - *

          In case of exceptional completion with a CompletionException, + *

        • In case of exceptional completion with a CompletionException, * methods {@link #get()} and {@link #get(long, TimeUnit)} throw an * {@link ExecutionException} with the same cause as held in the - * corresponding CompletionException. However, in these cases, - * methods {@link #join()} and {@link #getNow} throw the - * CompletionException, which simplifies usage. - * - *

          Arguments used to pass a completion result (that is, for parameters - * of type {@code T}) may be null, but passing a null value for any other - * parameter will result in a {@link NullPointerException} being thrown. + * corresponding CompletionException. To simplify usage in most + * contexts, this class also defines methods {@link #join()} and + * {@link #getNow} that instead throw the CompletionException directly + * in these cases.

        * * @author Doug Lea * @since 1.8 */ -public class CompletableFuture implements Future { +public class CompletableFuture implements Future, CompletionStage { /* * Overview: @@ -431,6 +420,7 @@ public class CompletableFuture implements Future { } /** Base class can act as either FJ or plain Runnable */ + @SuppressWarnings("serial") abstract static class Async extends ForkJoinTask implements Runnable, AsynchronousCompletionTask { public final Void getRawResult() { return null; } @@ -438,6 +428,19 @@ public class CompletableFuture implements Future { public final void run() { exec(); } } + /** + * Starts the given async task using the given executor, unless + * the executor is ForkJoinPool.commonPool and it has been + * disabled, in which case starts a new thread. + */ + static void execAsync(Executor e, Async r) { + if (e == ForkJoinPool.commonPool() && + ForkJoinPool.getCommonPoolParallelism() <= 1) + new Thread(r).start(); + else + e.execute(r); + } + static final class AsyncRun extends Async { final Runnable fn; final CompletableFuture dst; @@ -538,13 +541,13 @@ public class CompletableFuture implements Future { static final class AsyncAccept extends Async { final T arg; final Consumer fn; - final CompletableFuture dst; + final CompletableFuture dst; AsyncAccept(T arg, Consumer fn, - CompletableFuture dst) { + CompletableFuture dst) { this.arg = arg; this.fn = fn; this.dst = dst; } public final boolean exec() { - CompletableFuture d; Throwable ex; + CompletableFuture d; Throwable ex; if ((d = this.dst) != null && d.result == null) { try { fn.accept(arg); @@ -563,14 +566,14 @@ public class CompletableFuture implements Future { final T arg1; final U arg2; final BiConsumer fn; - final CompletableFuture dst; + final CompletableFuture dst; AsyncAcceptBoth(T arg1, U arg2, BiConsumer fn, - CompletableFuture dst) { + CompletableFuture dst) { this.arg1 = arg1; this.arg2 = arg2; this.fn = fn; this.dst = dst; } public final boolean exec() { - CompletableFuture d; Throwable ex; + CompletableFuture d; Throwable ex; if ((d = this.dst) != null && d.result == null) { try { fn.accept(arg1, arg2); @@ -587,10 +590,10 @@ public class CompletableFuture implements Future { static final class AsyncCompose extends Async { final T arg; - final Function> fn; + final Function> fn; final CompletableFuture dst; AsyncCompose(T arg, - Function> fn, + Function> fn, CompletableFuture dst) { this.arg = arg; this.fn = fn; this.dst = dst; } @@ -598,7 +601,8 @@ public class CompletableFuture implements Future { CompletableFuture d, fr; U u; Throwable ex; if ((d = this.dst) != null && d.result == null) { try { - fr = fn.apply(arg); + CompletionStage cs = fn.apply(arg); + fr = (cs == null) ? null : cs.toCompletableFuture(); ex = (fr == null) ? new NullPointerException() : null; } catch (Throwable rex) { ex = rex; @@ -626,6 +630,33 @@ public class CompletableFuture implements Future { private static final long serialVersionUID = 5232453952276885070L; } + static final class AsyncWhenComplete extends Async { + final T arg1; + final Throwable arg2; + final BiConsumer fn; + final CompletableFuture dst; + AsyncWhenComplete(T arg1, Throwable arg2, + BiConsumer fn, + CompletableFuture dst) { + this.arg1 = arg1; this.arg2 = arg2; this.fn = fn; this.dst = dst; + } + public final boolean exec() { + CompletableFuture d; + if ((d = this.dst) != null && d.result == null) { + Throwable ex = arg2; + try { + fn.accept(arg1, ex); + } catch (Throwable rex) { + if (ex == null) + ex = rex; + } + d.internalComplete(arg1, ex); + } + return true; + } + private static final long serialVersionUID = 5232453952276885070L; + } + /* ------------- Completions -------------- */ /** @@ -641,6 +672,7 @@ public class CompletableFuture implements Future { } // Opportunistically subclass AtomicInteger to use compareAndSet to claim. + @SuppressWarnings("serial") abstract static class Completion extends AtomicInteger implements Runnable { } @@ -680,7 +712,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncApply(t, fn, dst)); + execAsync(e, new AsyncApply(t, fn, dst)); else u = fn.apply(t); } catch (Throwable rex) { @@ -697,11 +729,11 @@ public class CompletableFuture implements Future { static final class ThenAccept extends Completion { final CompletableFuture src; final Consumer fn; - final CompletableFuture dst; + final CompletableFuture dst; final Executor executor; ThenAccept(CompletableFuture src, Consumer fn, - CompletableFuture dst, + CompletableFuture dst, Executor executor) { this.src = src; this.fn = fn; this.dst = dst; this.executor = executor; @@ -709,7 +741,7 @@ public class CompletableFuture implements Future { public final void run() { final CompletableFuture a; final Consumer fn; - final CompletableFuture dst; + final CompletableFuture dst; Object r; T t; Throwable ex; if ((dst = this.dst) != null && (fn = this.fn) != null && @@ -729,7 +761,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncAccept(t, fn, dst)); + execAsync(e, new AsyncAccept(t, fn, dst)); else fn.accept(t); } catch (Throwable rex) { @@ -773,7 +805,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncRun(fn, dst)); + execAsync(e, new AsyncRun(fn, dst)); else fn.run(); } catch (Throwable rex) { @@ -839,7 +871,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncCombine(t, u, fn, dst)); + execAsync(e, new AsyncCombine(t, u, fn, dst)); else v = fn.apply(t, u); } catch (Throwable rex) { @@ -904,7 +936,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncAcceptBoth(t, u, fn, dst)); + execAsync(e, new AsyncAcceptBoth(t, u, fn, dst)); else fn.accept(t, u); } catch (Throwable rex) { @@ -956,7 +988,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncRun(fn, dst)); + execAsync(e, new AsyncRun(fn, dst)); else fn.run(); } catch (Throwable rex) { @@ -1042,7 +1074,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncApply(t, fn, dst)); + execAsync(e, new AsyncApply(t, fn, dst)); else u = fn.apply(t); } catch (Throwable rex) { @@ -1095,7 +1127,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncAccept(t, fn, dst)); + execAsync(e, new AsyncAccept(t, fn, dst)); else fn.accept(t); } catch (Throwable rex) { @@ -1143,7 +1175,7 @@ public class CompletableFuture implements Future { if (ex == null) { try { if (e != null) - e.execute(new AsyncRun(fn, dst)); + execAsync(e, new AsyncRun(fn, dst)); else fn.run(); } catch (Throwable rex) { @@ -1226,6 +1258,54 @@ public class CompletableFuture implements Future { private static final long serialVersionUID = 5232453952276885070L; } + static final class WhenCompleteCompletion extends Completion { + final CompletableFuture src; + final BiConsumer fn; + final CompletableFuture dst; + final Executor executor; + WhenCompleteCompletion(CompletableFuture src, + BiConsumer fn, + CompletableFuture dst, + Executor executor) { + this.src = src; this.fn = fn; this.dst = dst; + this.executor = executor; + } + public final void run() { + final CompletableFuture a; + final BiConsumer fn; + final CompletableFuture dst; + Object r; T t; Throwable ex; + if ((dst = this.dst) != null && + (fn = this.fn) != null && + (a = this.src) != null && + (r = a.result) != null && + compareAndSet(0, 1)) { + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + Executor e = executor; + Throwable dx = null; + try { + if (e != null) + execAsync(e, new AsyncWhenComplete(t, ex, fn, dst)); + else + fn.accept(t, ex); + } catch (Throwable rex) { + dx = rex; + } + if (e == null || dx != null) + dst.internalComplete(t, ex != null ? ex : dx); + } + } + private static final long serialVersionUID = 5232453952276885070L; + } + static final class ThenCopy extends Completion { final CompletableFuture src; final CompletableFuture dst; @@ -1286,10 +1366,13 @@ public class CompletableFuture implements Future { final CompletableFuture src; final BiFunction fn; final CompletableFuture dst; + final Executor executor; HandleCompletion(CompletableFuture src, BiFunction fn, - CompletableFuture dst) { + CompletableFuture dst, + Executor executor) { this.src = src; this.fn = fn; this.dst = dst; + this.executor = executor; } public final void run() { final CompletableFuture a; @@ -1310,13 +1393,19 @@ public class CompletableFuture implements Future { @SuppressWarnings("unchecked") T tr = (T) r; t = tr; } - U u = null; Throwable dx = null; + Executor e = executor; + U u = null; + Throwable dx = null; try { - u = fn.apply(t, ex); + if (e != null) + execAsync(e, new AsyncCombine(t, ex, fn, dst)); + else + u = fn.apply(t, ex); } catch (Throwable rex) { dx = rex; } - dst.internalComplete(u, dx); + if (e == null || dx != null) + dst.internalComplete(u, dx); } } private static final long serialVersionUID = 5232453952276885070L; @@ -1324,11 +1413,11 @@ public class CompletableFuture implements Future { static final class ThenCompose extends Completion { final CompletableFuture src; - final Function> fn; + final Function> fn; final CompletableFuture dst; final Executor executor; ThenCompose(CompletableFuture src, - Function> fn, + Function> fn, CompletableFuture dst, Executor executor) { this.src = src; this.fn = fn; this.dst = dst; @@ -1336,7 +1425,7 @@ public class CompletableFuture implements Future { } public final void run() { final CompletableFuture a; - final Function> fn; + final Function> fn; final CompletableFuture dst; Object r; T t; Throwable ex; Executor e; if ((dst = this.dst) != null && @@ -1358,10 +1447,12 @@ public class CompletableFuture implements Future { boolean complete = false; if (ex == null) { if ((e = executor) != null) - e.execute(new AsyncCompose(t, fn, dst)); + execAsync(e, new AsyncCompose(t, fn, dst)); else { try { - if ((c = fn.apply(t)) == null) + CompletionStage cs = fn.apply(t); + c = (cs == null) ? null : cs.toCompletableFuture(); + if (c == null) ex = new NullPointerException(); } catch (Throwable rex) { ex = rex; @@ -1401,84 +1492,697 @@ public class CompletableFuture implements Future { private static final long serialVersionUID = 5232453952276885070L; } - // public methods - - /** - * Creates a new incomplete CompletableFuture. - */ - public CompletableFuture() { - } + // Implementations of stage methods with (plain, async, Executor) forms - /** - * Returns a new CompletableFuture that is asynchronously completed - * by a task running in the {@link ForkJoinPool#commonPool()} with - * the value obtained by calling the given Supplier. - * - * @param supplier a function returning the value to be used - * to complete the returned CompletableFuture - * @return the new CompletableFuture - */ - public static CompletableFuture supplyAsync(Supplier supplier) { - if (supplier == null) throw new NullPointerException(); - CompletableFuture f = new CompletableFuture(); - ForkJoinPool.commonPool(). - execute((ForkJoinTask)new AsyncSupply(supplier, f)); - return f; + private CompletableFuture doThenApply + (Function fn, + Executor e) { + if (fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + ThenApply d = null; + Object r; + if ((r = result) == null) { + CompletionNode p = new CompletionNode + (d = new ThenApply(this, fn, dst, e)); + while ((r = result) == null) { + if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + break; + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + U u = null; + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncApply(t, fn, dst)); + else + u = fn.apply(t); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(u, ex); + } + helpPostComplete(); + return dst; } - /** - * Returns a new CompletableFuture that is asynchronously completed - * by a task running in the given executor with the value obtained - * by calling the given Supplier. - * - * @param supplier a function returning the value to be used - * to complete the returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ - public static CompletableFuture supplyAsync(Supplier supplier, - Executor executor) { - if (executor == null || supplier == null) - throw new NullPointerException(); - CompletableFuture f = new CompletableFuture(); - executor.execute(new AsyncSupply(supplier, f)); - return f; + private CompletableFuture doThenAccept(Consumer fn, + Executor e) { + if (fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + ThenAccept d = null; + Object r; + if ((r = result) == null) { + CompletionNode p = new CompletionNode + (d = new ThenAccept(this, fn, dst, e)); + while ((r = result) == null) { + if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + break; + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncAccept(t, fn, dst)); + else + fn.accept(t); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + return dst; } - /** - * Returns a new CompletableFuture that is asynchronously completed - * by a task running in the {@link ForkJoinPool#commonPool()} after - * it runs the given action. - * - * @param runnable the action to run before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public static CompletableFuture runAsync(Runnable runnable) { - if (runnable == null) throw new NullPointerException(); - CompletableFuture f = new CompletableFuture(); - ForkJoinPool.commonPool(). - execute((ForkJoinTask)new AsyncRun(runnable, f)); - return f; + private CompletableFuture doThenRun(Runnable action, + Executor e) { + if (action == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + ThenRun d = null; + Object r; + if ((r = result) == null) { + CompletionNode p = new CompletionNode + (d = new ThenRun(this, action, dst, e)); + while ((r = result) == null) { + if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + break; + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + Throwable ex; + if (r instanceof AltResult) + ex = ((AltResult)r).ex; + else + ex = null; + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncRun(action, dst)); + else + action.run(); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + return dst; } - /** - * Returns a new CompletableFuture that is asynchronously completed - * by a task running in the given executor after it runs the given - * action. - * - * @param runnable the action to run before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ - public static CompletableFuture runAsync(Runnable runnable, - Executor executor) { - if (executor == null || runnable == null) - throw new NullPointerException(); - CompletableFuture f = new CompletableFuture(); - executor.execute(new AsyncRun(runnable, f)); - return f; + private CompletableFuture doThenCombine + (CompletableFuture other, + BiFunction fn, + Executor e) { + if (other == null || fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + ThenCombine d = null; + Object r, s = null; + if ((r = result) == null || (s = other.result) == null) { + d = new ThenCombine(this, other, fn, dst, e); + CompletionNode q = null, p = new CompletionNode(d); + while ((r == null && (r = result) == null) || + (s == null && (s = other.result) == null)) { + if (q != null) { + if (s != null || + UNSAFE.compareAndSwapObject + (other, COMPLETIONS, q.next = other.completions, q)) + break; + } + else if (r != null || + UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) { + if (s != null) + break; + q = new CompletionNode(d); + } + } + } + if (r != null && s != null && (d == null || d.compareAndSet(0, 1))) { + T t; U u; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + if (ex != null) + u = null; + else if (s instanceof AltResult) { + ex = ((AltResult)s).ex; + u = null; + } + else { + @SuppressWarnings("unchecked") U us = (U) s; + u = us; + } + V v = null; + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncCombine(t, u, fn, dst)); + else + v = fn.apply(t, u); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(v, ex); + } + helpPostComplete(); + other.helpPostComplete(); + return dst; + } + + private CompletableFuture doThenAcceptBoth + (CompletableFuture other, + BiConsumer fn, + Executor e) { + if (other == null || fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + ThenAcceptBoth d = null; + Object r, s = null; + if ((r = result) == null || (s = other.result) == null) { + d = new ThenAcceptBoth(this, other, fn, dst, e); + CompletionNode q = null, p = new CompletionNode(d); + while ((r == null && (r = result) == null) || + (s == null && (s = other.result) == null)) { + if (q != null) { + if (s != null || + UNSAFE.compareAndSwapObject + (other, COMPLETIONS, q.next = other.completions, q)) + break; + } + else if (r != null || + UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) { + if (s != null) + break; + q = new CompletionNode(d); + } + } + } + if (r != null && s != null && (d == null || d.compareAndSet(0, 1))) { + T t; U u; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + if (ex != null) + u = null; + else if (s instanceof AltResult) { + ex = ((AltResult)s).ex; + u = null; + } + else { + @SuppressWarnings("unchecked") U us = (U) s; + u = us; + } + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncAcceptBoth(t, u, fn, dst)); + else + fn.accept(t, u); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + other.helpPostComplete(); + return dst; + } + + private CompletableFuture doRunAfterBoth(CompletableFuture other, + Runnable action, + Executor e) { + if (other == null || action == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + RunAfterBoth d = null; + Object r, s = null; + if ((r = result) == null || (s = other.result) == null) { + d = new RunAfterBoth(this, other, action, dst, e); + CompletionNode q = null, p = new CompletionNode(d); + while ((r == null && (r = result) == null) || + (s == null && (s = other.result) == null)) { + if (q != null) { + if (s != null || + UNSAFE.compareAndSwapObject + (other, COMPLETIONS, q.next = other.completions, q)) + break; + } + else if (r != null || + UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) { + if (s != null) + break; + q = new CompletionNode(d); + } + } + } + if (r != null && s != null && (d == null || d.compareAndSet(0, 1))) { + Throwable ex; + if (r instanceof AltResult) + ex = ((AltResult)r).ex; + else + ex = null; + if (ex == null && (s instanceof AltResult)) + ex = ((AltResult)s).ex; + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncRun(action, dst)); + else + action.run(); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + other.helpPostComplete(); + return dst; + } + + private CompletableFuture doApplyToEither + (CompletableFuture other, + Function fn, + Executor e) { + if (other == null || fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + ApplyToEither d = null; + Object r; + if ((r = result) == null && (r = other.result) == null) { + d = new ApplyToEither(this, other, fn, dst, e); + CompletionNode q = null, p = new CompletionNode(d); + while ((r = result) == null && (r = other.result) == null) { + if (q != null) { + if (UNSAFE.compareAndSwapObject + (other, COMPLETIONS, q.next = other.completions, q)) + break; + } + else if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + q = new CompletionNode(d); + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + U u = null; + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncApply(t, fn, dst)); + else + u = fn.apply(t); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(u, ex); + } + helpPostComplete(); + other.helpPostComplete(); + return dst; + } + + private CompletableFuture doAcceptEither + (CompletableFuture other, + Consumer fn, + Executor e) { + if (other == null || fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + AcceptEither d = null; + Object r; + if ((r = result) == null && (r = other.result) == null) { + d = new AcceptEither(this, other, fn, dst, e); + CompletionNode q = null, p = new CompletionNode(d); + while ((r = result) == null && (r = other.result) == null) { + if (q != null) { + if (UNSAFE.compareAndSwapObject + (other, COMPLETIONS, q.next = other.completions, q)) + break; + } + else if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + q = new CompletionNode(d); + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncAccept(t, fn, dst)); + else + fn.accept(t); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + other.helpPostComplete(); + return dst; + } + + private CompletableFuture doRunAfterEither + (CompletableFuture other, + Runnable action, + Executor e) { + if (other == null || action == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + RunAfterEither d = null; + Object r; + if ((r = result) == null && (r = other.result) == null) { + d = new RunAfterEither(this, other, action, dst, e); + CompletionNode q = null, p = new CompletionNode(d); + while ((r = result) == null && (r = other.result) == null) { + if (q != null) { + if (UNSAFE.compareAndSwapObject + (other, COMPLETIONS, q.next = other.completions, q)) + break; + } + else if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + q = new CompletionNode(d); + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + Throwable ex; + if (r instanceof AltResult) + ex = ((AltResult)r).ex; + else + ex = null; + if (ex == null) { + try { + if (e != null) + execAsync(e, new AsyncRun(action, dst)); + else + action.run(); + } catch (Throwable rex) { + ex = rex; + } + } + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + other.helpPostComplete(); + return dst; + } + + private CompletableFuture doThenCompose + (Function> fn, + Executor e) { + if (fn == null) throw new NullPointerException(); + CompletableFuture dst = null; + ThenCompose d = null; + Object r; + if ((r = result) == null) { + dst = new CompletableFuture(); + CompletionNode p = new CompletionNode + (d = new ThenCompose(this, fn, dst, e)); + while ((r = result) == null) { + if (UNSAFE.compareAndSwapObject + (this, COMPLETIONS, p.next = completions, p)) + break; + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + if (ex == null) { + if (e != null) { + if (dst == null) + dst = new CompletableFuture(); + execAsync(e, new AsyncCompose(t, fn, dst)); + } + else { + try { + CompletionStage cs = fn.apply(t); + if (cs == null || + (dst = cs.toCompletableFuture()) == null) + ex = new NullPointerException(); + } catch (Throwable rex) { + ex = rex; + } + } + } + if (dst == null) + dst = new CompletableFuture(); + if (e == null || ex != null) + dst.internalComplete(null, ex); + } + helpPostComplete(); + dst.helpPostComplete(); + return dst; + } + + private CompletableFuture doWhenComplete + (BiConsumer fn, + Executor e) { + if (fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + WhenCompleteCompletion d = null; + Object r; + if ((r = result) == null) { + CompletionNode p = + new CompletionNode(d = new WhenCompleteCompletion + (this, fn, dst, e)); + while ((r = result) == null) { + if (UNSAFE.compareAndSwapObject(this, COMPLETIONS, + p.next = completions, p)) + break; + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + Throwable dx = null; + try { + if (e != null) + execAsync(e, new AsyncWhenComplete(t, ex, fn, dst)); + else + fn.accept(t, ex); + } catch (Throwable rex) { + dx = rex; + } + if (e == null || dx != null) + dst.internalComplete(t, ex != null ? ex : dx); + } + helpPostComplete(); + return dst; + } + + private CompletableFuture doHandle + (BiFunction fn, + Executor e) { + if (fn == null) throw new NullPointerException(); + CompletableFuture dst = new CompletableFuture(); + HandleCompletion d = null; + Object r; + if ((r = result) == null) { + CompletionNode p = + new CompletionNode(d = new HandleCompletion + (this, fn, dst, e)); + while ((r = result) == null) { + if (UNSAFE.compareAndSwapObject(this, COMPLETIONS, + p.next = completions, p)) + break; + } + } + if (r != null && (d == null || d.compareAndSet(0, 1))) { + T t; Throwable ex; + if (r instanceof AltResult) { + ex = ((AltResult)r).ex; + t = null; + } + else { + ex = null; + @SuppressWarnings("unchecked") T tr = (T) r; + t = tr; + } + U u = null; + Throwable dx = null; + try { + if (e != null) + execAsync(e, new AsyncCombine(t, ex, fn, dst)); + else { + u = fn.apply(t, ex); + dx = null; + } + } catch (Throwable rex) { + dx = rex; + u = null; + } + if (e == null || dx != null) + dst.internalComplete(u, dx); + } + helpPostComplete(); + return dst; + } + + + // public methods + + /** + * Creates a new incomplete CompletableFuture. + */ + public CompletableFuture() { + } + + /** + * Returns a new CompletableFuture that is asynchronously completed + * by a task running in the {@link ForkJoinPool#commonPool()} with + * the value obtained by calling the given Supplier. + * + * @param supplier a function returning the value to be used + * to complete the returned CompletableFuture + * @param the function's return type + * @return the new CompletableFuture + */ + public static CompletableFuture supplyAsync(Supplier supplier) { + if (supplier == null) throw new NullPointerException(); + CompletableFuture f = new CompletableFuture(); + execAsync(ForkJoinPool.commonPool(), new AsyncSupply(supplier, f)); + return f; + } + + /** + * Returns a new CompletableFuture that is asynchronously completed + * by a task running in the given executor with the value obtained + * by calling the given Supplier. + * + * @param supplier a function returning the value to be used + * to complete the returned CompletableFuture + * @param executor the executor to use for asynchronous execution + * @param the function's return type + * @return the new CompletableFuture + */ + public static CompletableFuture supplyAsync(Supplier supplier, + Executor executor) { + if (executor == null || supplier == null) + throw new NullPointerException(); + CompletableFuture f = new CompletableFuture(); + execAsync(executor, new AsyncSupply(supplier, f)); + return f; + } + + /** + * Returns a new CompletableFuture that is asynchronously completed + * by a task running in the {@link ForkJoinPool#commonPool()} after + * it runs the given action. + * + * @param runnable the action to run before completing the + * returned CompletableFuture + * @return the new CompletableFuture + */ + public static CompletableFuture runAsync(Runnable runnable) { + if (runnable == null) throw new NullPointerException(); + CompletableFuture f = new CompletableFuture(); + execAsync(ForkJoinPool.commonPool(), new AsyncRun(runnable, f)); + return f; + } + + /** + * Returns a new CompletableFuture that is asynchronously completed + * by a task running in the given executor after it runs the given + * action. + * + * @param runnable the action to run before completing the + * returned CompletableFuture + * @param executor the executor to use for asynchronous execution + * @return the new CompletableFuture + */ + public static CompletableFuture runAsync(Runnable runnable, + Executor executor) { + if (executor == null || runnable == null) + throw new NullPointerException(); + CompletableFuture f = new CompletableFuture(); + execAsync(executor, new AsyncRun(runnable, f)); + return f; } /** @@ -1486,6 +2190,7 @@ public class CompletableFuture implements Future { * the given value. * * @param value the value + * @param the type of the value * @return the completed CompletableFuture */ public static CompletableFuture completedFuture(U value) { @@ -1620,1247 +2325,284 @@ public class CompletableFuture implements Future { return null; if (ex instanceof CancellationException) throw (CancellationException)ex; - if (ex instanceof CompletionException) - throw (CompletionException)ex; - throw new CompletionException(ex); - } - - /** - * If not already completed, sets the value returned by {@link - * #get()} and related methods to the given value. - * - * @param value the result value - * @return {@code true} if this invocation caused this CompletableFuture - * to transition to a completed state, else {@code false} - */ - public boolean complete(T value) { - boolean triggered = result == null && - UNSAFE.compareAndSwapObject(this, RESULT, null, - value == null ? NIL : value); - postComplete(); - return triggered; - } - - /** - * If not already completed, causes invocations of {@link #get()} - * and related methods to throw the given exception. - * - * @param ex the exception - * @return {@code true} if this invocation caused this CompletableFuture - * to transition to a completed state, else {@code false} - */ - public boolean completeExceptionally(Throwable ex) { - if (ex == null) throw new NullPointerException(); - boolean triggered = result == null && - UNSAFE.compareAndSwapObject(this, RESULT, null, new AltResult(ex)); - postComplete(); - return triggered; - } - - /** - * Returns a new CompletableFuture that is completed - * when this CompletableFuture completes, with the result of the - * given function of this CompletableFuture's result. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied function throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture thenApply(Function fn) { - return doThenApply(fn, null); - } - - /** - * Returns a new CompletableFuture that is asynchronously completed - * when this CompletableFuture completes, with the result of the - * given function of this CompletableFuture's result from a - * task running in the {@link ForkJoinPool#commonPool()}. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied function throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture thenApplyAsync - (Function fn) { - return doThenApply(fn, ForkJoinPool.commonPool()); - } - - /** - * Returns a new CompletableFuture that is asynchronously completed - * when this CompletableFuture completes, with the result of the - * given function of this CompletableFuture's result from a - * task running in the given executor. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied function throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ - public CompletableFuture thenApplyAsync - (Function fn, - Executor executor) { - if (executor == null) throw new NullPointerException(); - return doThenApply(fn, executor); - } - - private CompletableFuture doThenApply - (Function fn, - Executor e) { - if (fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - ThenApply d = null; - Object r; - if ((r = result) == null) { - CompletionNode p = new CompletionNode - (d = new ThenApply(this, fn, dst, e)); - while ((r = result) == null) { - if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - break; - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - T t; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - U u = null; - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncApply(t, fn, dst)); - else - u = fn.apply(t); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(u, ex); - } - helpPostComplete(); - return dst; + if (ex instanceof CompletionException) + throw (CompletionException)ex; + throw new CompletionException(ex); } /** - * Returns a new CompletableFuture that is completed - * when this CompletableFuture completes, after performing the given - * action with this CompletableFuture's result. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied action throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. + * If not already completed, sets the value returned by {@link + * #get()} and related methods to the given value. * - * @param block the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture + * @param value the result value + * @return {@code true} if this invocation caused this CompletableFuture + * to transition to a completed state, else {@code false} */ - public CompletableFuture thenAccept(Consumer block) { - return doThenAccept(block, null); + public boolean complete(T value) { + boolean triggered = result == null && + UNSAFE.compareAndSwapObject(this, RESULT, null, + value == null ? NIL : value); + postComplete(); + return triggered; } /** - * Returns a new CompletableFuture that is asynchronously completed - * when this CompletableFuture completes, after performing the given - * action with this CompletableFuture's result from a task running - * in the {@link ForkJoinPool#commonPool()}. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied action throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. + * If not already completed, causes invocations of {@link #get()} + * and related methods to throw the given exception. * - * @param block the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture + * @param ex the exception + * @return {@code true} if this invocation caused this CompletableFuture + * to transition to a completed state, else {@code false} */ - public CompletableFuture thenAcceptAsync(Consumer block) { - return doThenAccept(block, ForkJoinPool.commonPool()); + public boolean completeExceptionally(Throwable ex) { + if (ex == null) throw new NullPointerException(); + boolean triggered = result == null && + UNSAFE.compareAndSwapObject(this, RESULT, null, new AltResult(ex)); + postComplete(); + return triggered; } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when this CompletableFuture completes, after performing the given - * action with this CompletableFuture's result from a task running - * in the given executor. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied action throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param block the action to perform before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ - public CompletableFuture thenAcceptAsync(Consumer block, - Executor executor) { + // CompletionStage methods + + public CompletableFuture thenApply + (Function fn) { + return doThenApply(fn, null); + } + + public CompletableFuture thenApplyAsync + (Function fn) { + return doThenApply(fn, ForkJoinPool.commonPool()); + } + + public CompletableFuture thenApplyAsync + (Function fn, + Executor executor) { if (executor == null) throw new NullPointerException(); - return doThenAccept(block, executor); + return doThenApply(fn, executor); } - private CompletableFuture doThenAccept(Consumer fn, - Executor e) { - if (fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - ThenAccept d = null; - Object r; - if ((r = result) == null) { - CompletionNode p = new CompletionNode - (d = new ThenAccept(this, fn, dst, e)); - while ((r = result) == null) { - if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - break; - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - T t; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncAccept(t, fn, dst)); - else - fn.accept(t); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - return dst; + public CompletableFuture thenAccept + (Consumer action) { + return doThenAccept(action, null); } - /** - * Returns a new CompletableFuture that is completed - * when this CompletableFuture completes, after performing the given - * action. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied action throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param action the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture thenRun(Runnable action) { + public CompletableFuture thenAcceptAsync + (Consumer action) { + return doThenAccept(action, ForkJoinPool.commonPool()); + } + + public CompletableFuture thenAcceptAsync + (Consumer action, + Executor executor) { + if (executor == null) throw new NullPointerException(); + return doThenAccept(action, executor); + } + + public CompletableFuture thenRun + (Runnable action) { return doThenRun(action, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when this CompletableFuture completes, after performing the given - * action from a task running in the {@link ForkJoinPool#commonPool()}. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied action throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param action the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture thenRunAsync(Runnable action) { + public CompletableFuture thenRunAsync + (Runnable action) { return doThenRun(action, ForkJoinPool.commonPool()); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when this CompletableFuture completes, after performing the given - * action from a task running in the given executor. - * - *

        If this CompletableFuture completes exceptionally, or the - * supplied action throws an exception, then the returned - * CompletableFuture completes exceptionally with a - * CompletionException holding the exception as its cause. - * - * @param action the action to perform before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ - public CompletableFuture thenRunAsync(Runnable action, - Executor executor) { + public CompletableFuture thenRunAsync + (Runnable action, + Executor executor) { if (executor == null) throw new NullPointerException(); return doThenRun(action, executor); } - private CompletableFuture doThenRun(Runnable action, - Executor e) { - if (action == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - ThenRun d = null; - Object r; - if ((r = result) == null) { - CompletionNode p = new CompletionNode - (d = new ThenRun(this, action, dst, e)); - while ((r = result) == null) { - if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - break; - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - Throwable ex; - if (r instanceof AltResult) - ex = ((AltResult)r).ex; - else - ex = null; - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncRun(action, dst)); - else - action.run(); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - return dst; - } - - /** - * Returns a new CompletableFuture that is completed - * when both this and the other given CompletableFuture complete, - * with the result of the given function of the results of the two - * CompletableFutures. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied function throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture thenCombine - (CompletableFuture other, + (CompletionStage other, BiFunction fn) { - return doThenCombine(other, fn, null); + return doThenCombine(other.toCompletableFuture(), fn, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when both this and the other given CompletableFuture complete, - * with the result of the given function of the results of the two - * CompletableFutures from a task running in the - * {@link ForkJoinPool#commonPool()}. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied function throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture thenCombineAsync - (CompletableFuture other, + (CompletionStage other, BiFunction fn) { - return doThenCombine(other, fn, ForkJoinPool.commonPool()); + return doThenCombine(other.toCompletableFuture(), fn, + ForkJoinPool.commonPool()); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when both this and the other given CompletableFuture complete, - * with the result of the given function of the results of the two - * CompletableFutures from a task running in the given executor. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied function throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ public CompletableFuture thenCombineAsync - (CompletableFuture other, + (CompletionStage other, BiFunction fn, Executor executor) { if (executor == null) throw new NullPointerException(); - return doThenCombine(other, fn, executor); - } - - private CompletableFuture doThenCombine - (CompletableFuture other, - BiFunction fn, - Executor e) { - if (other == null || fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - ThenCombine d = null; - Object r, s = null; - if ((r = result) == null || (s = other.result) == null) { - d = new ThenCombine(this, other, fn, dst, e); - CompletionNode q = null, p = new CompletionNode(d); - while ((r == null && (r = result) == null) || - (s == null && (s = other.result) == null)) { - if (q != null) { - if (s != null || - UNSAFE.compareAndSwapObject - (other, COMPLETIONS, q.next = other.completions, q)) - break; - } - else if (r != null || - UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) { - if (s != null) - break; - q = new CompletionNode(d); - } - } - } - if (r != null && s != null && (d == null || d.compareAndSet(0, 1))) { - T t; U u; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - if (ex != null) - u = null; - else if (s instanceof AltResult) { - ex = ((AltResult)s).ex; - u = null; - } - else { - @SuppressWarnings("unchecked") U us = (U) s; - u = us; - } - V v = null; - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncCombine(t, u, fn, dst)); - else - v = fn.apply(t, u); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(v, ex); - } - helpPostComplete(); - other.helpPostComplete(); - return dst; + return doThenCombine(other.toCompletableFuture(), fn, executor); } - /** - * Returns a new CompletableFuture that is completed - * when both this and the other given CompletableFuture complete, - * after performing the given action with the results of the two - * CompletableFutures. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied action throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param block the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture thenAcceptBoth - (CompletableFuture other, - BiConsumer block) { - return doThenAcceptBoth(other, block, null); + (CompletionStage other, + BiConsumer action) { + return doThenAcceptBoth(other.toCompletableFuture(), action, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when both this and the other given CompletableFuture complete, - * after performing the given action with the results of the two - * CompletableFutures from a task running in the {@link - * ForkJoinPool#commonPool()}. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied action throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param block the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture thenAcceptBothAsync - (CompletableFuture other, - BiConsumer block) { - return doThenAcceptBoth(other, block, ForkJoinPool.commonPool()); + (CompletionStage other, + BiConsumer action) { + return doThenAcceptBoth(other.toCompletableFuture(), action, + ForkJoinPool.commonPool()); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when both this and the other given CompletableFuture complete, - * after performing the given action with the results of the two - * CompletableFutures from a task running in the given executor. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied action throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param block the action to perform before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ public CompletableFuture thenAcceptBothAsync - (CompletableFuture other, - BiConsumer block, + (CompletionStage other, + BiConsumer action, Executor executor) { if (executor == null) throw new NullPointerException(); - return doThenAcceptBoth(other, block, executor); - } - - private CompletableFuture doThenAcceptBoth - (CompletableFuture other, - BiConsumer fn, - Executor e) { - if (other == null || fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - ThenAcceptBoth d = null; - Object r, s = null; - if ((r = result) == null || (s = other.result) == null) { - d = new ThenAcceptBoth(this, other, fn, dst, e); - CompletionNode q = null, p = new CompletionNode(d); - while ((r == null && (r = result) == null) || - (s == null && (s = other.result) == null)) { - if (q != null) { - if (s != null || - UNSAFE.compareAndSwapObject - (other, COMPLETIONS, q.next = other.completions, q)) - break; - } - else if (r != null || - UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) { - if (s != null) - break; - q = new CompletionNode(d); - } - } - } - if (r != null && s != null && (d == null || d.compareAndSet(0, 1))) { - T t; U u; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - if (ex != null) - u = null; - else if (s instanceof AltResult) { - ex = ((AltResult)s).ex; - u = null; - } - else { - @SuppressWarnings("unchecked") U us = (U) s; - u = us; - } - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncAcceptBoth(t, u, fn, dst)); - else - fn.accept(t, u); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - other.helpPostComplete(); - return dst; + return doThenAcceptBoth(other.toCompletableFuture(), action, executor); } - /** - * Returns a new CompletableFuture that is completed - * when both this and the other given CompletableFuture complete, - * after performing the given action. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied action throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param action the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture runAfterBoth(CompletableFuture other, - Runnable action) { - return doRunAfterBoth(other, action, null); + public CompletableFuture runAfterBoth + (CompletionStage other, + Runnable action) { + return doRunAfterBoth(other.toCompletableFuture(), action, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when both this and the other given CompletableFuture complete, - * after performing the given action from a task running in the - * {@link ForkJoinPool#commonPool()}. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied action throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param action the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture runAfterBothAsync(CompletableFuture other, - Runnable action) { - return doRunAfterBoth(other, action, ForkJoinPool.commonPool()); + public CompletableFuture runAfterBothAsync + (CompletionStage other, + Runnable action) { + return doRunAfterBoth(other.toCompletableFuture(), action, + ForkJoinPool.commonPool()); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when both this and the other given CompletableFuture complete, - * after performing the given action from a task running in the - * given executor. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, or the supplied action throws an exception, - * then the returned CompletableFuture completes exceptionally - * with a CompletionException holding the exception as its cause. - * - * @param other the other CompletableFuture - * @param action the action to perform before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ - public CompletableFuture runAfterBothAsync(CompletableFuture other, - Runnable action, - Executor executor) { + public CompletableFuture runAfterBothAsync + (CompletionStage other, + Runnable action, + Executor executor) { if (executor == null) throw new NullPointerException(); - return doRunAfterBoth(other, action, executor); + return doRunAfterBoth(other.toCompletableFuture(), action, executor); } - private CompletableFuture doRunAfterBoth(CompletableFuture other, - Runnable action, - Executor e) { - if (other == null || action == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - RunAfterBoth d = null; - Object r, s = null; - if ((r = result) == null || (s = other.result) == null) { - d = new RunAfterBoth(this, other, action, dst, e); - CompletionNode q = null, p = new CompletionNode(d); - while ((r == null && (r = result) == null) || - (s == null && (s = other.result) == null)) { - if (q != null) { - if (s != null || - UNSAFE.compareAndSwapObject - (other, COMPLETIONS, q.next = other.completions, q)) - break; - } - else if (r != null || - UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) { - if (s != null) - break; - q = new CompletionNode(d); - } - } - } - if (r != null && s != null && (d == null || d.compareAndSet(0, 1))) { - Throwable ex; - if (r instanceof AltResult) - ex = ((AltResult)r).ex; - else - ex = null; - if (ex == null && (s instanceof AltResult)) - ex = ((AltResult)s).ex; - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncRun(action, dst)); - else - action.run(); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - other.helpPostComplete(); - return dst; - } - /** - * Returns a new CompletableFuture that is completed - * when either this or the other given CompletableFuture completes, - * with the result of the given function of either this or the other - * CompletableFuture's result. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied function - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture applyToEither - (CompletableFuture other, + (CompletionStage other, Function fn) { - return doApplyToEither(other, fn, null); + return doApplyToEither(other.toCompletableFuture(), fn, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when either this or the other given CompletableFuture completes, - * with the result of the given function of either this or the other - * CompletableFuture's result from a task running in the - * {@link ForkJoinPool#commonPool()}. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied function - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture applyToEitherAsync - (CompletableFuture other, + (CompletionStage other, Function fn) { - return doApplyToEither(other, fn, ForkJoinPool.commonPool()); + return doApplyToEither(other.toCompletableFuture(), fn, + ForkJoinPool.commonPool()); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when either this or the other given CompletableFuture completes, - * with the result of the given function of either this or the other - * CompletableFuture's result from a task running in the - * given executor. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied function - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param fn the function to use to compute the value of - * the returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ public CompletableFuture applyToEitherAsync - (CompletableFuture other, + (CompletionStage other, Function fn, Executor executor) { if (executor == null) throw new NullPointerException(); - return doApplyToEither(other, fn, executor); - } - - private CompletableFuture doApplyToEither - (CompletableFuture other, - Function fn, - Executor e) { - if (other == null || fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - ApplyToEither d = null; - Object r; - if ((r = result) == null && (r = other.result) == null) { - d = new ApplyToEither(this, other, fn, dst, e); - CompletionNode q = null, p = new CompletionNode(d); - while ((r = result) == null && (r = other.result) == null) { - if (q != null) { - if (UNSAFE.compareAndSwapObject - (other, COMPLETIONS, q.next = other.completions, q)) - break; - } - else if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - q = new CompletionNode(d); - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - T t; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - U u = null; - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncApply(t, fn, dst)); - else - u = fn.apply(t); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(u, ex); - } - helpPostComplete(); - other.helpPostComplete(); - return dst; + return doApplyToEither(other.toCompletableFuture(), fn, executor); } - /** - * Returns a new CompletableFuture that is completed - * when either this or the other given CompletableFuture completes, - * after performing the given action with the result of either this - * or the other CompletableFuture's result. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied action - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param block the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture acceptEither - (CompletableFuture other, - Consumer block) { - return doAcceptEither(other, block, null); + (CompletionStage other, + Consumer action) { + return doAcceptEither(other.toCompletableFuture(), action, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when either this or the other given CompletableFuture completes, - * after performing the given action with the result of either this - * or the other CompletableFuture's result from a task running in - * the {@link ForkJoinPool#commonPool()}. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied action - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param block the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture acceptEitherAsync - (CompletableFuture other, - Consumer block) { - return doAcceptEither(other, block, ForkJoinPool.commonPool()); - } - - /** - * Returns a new CompletableFuture that is asynchronously completed - * when either this or the other given CompletableFuture completes, - * after performing the given action with the result of either this - * or the other CompletableFuture's result from a task running in - * the given executor. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied action - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param block the action to perform before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ + (CompletionStage other, + Consumer action) { + return doAcceptEither(other.toCompletableFuture(), action, + ForkJoinPool.commonPool()); + } + public CompletableFuture acceptEitherAsync - (CompletableFuture other, - Consumer block, + (CompletionStage other, + Consumer action, Executor executor) { if (executor == null) throw new NullPointerException(); - return doAcceptEither(other, block, executor); - } - - private CompletableFuture doAcceptEither - (CompletableFuture other, - Consumer fn, - Executor e) { - if (other == null || fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - AcceptEither d = null; - Object r; - if ((r = result) == null && (r = other.result) == null) { - d = new AcceptEither(this, other, fn, dst, e); - CompletionNode q = null, p = new CompletionNode(d); - while ((r = result) == null && (r = other.result) == null) { - if (q != null) { - if (UNSAFE.compareAndSwapObject - (other, COMPLETIONS, q.next = other.completions, q)) - break; - } - else if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - q = new CompletionNode(d); - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - T t; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncAccept(t, fn, dst)); - else - fn.accept(t); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - other.helpPostComplete(); - return dst; + return doAcceptEither(other.toCompletableFuture(), action, executor); } - /** - * Returns a new CompletableFuture that is completed - * when either this or the other given CompletableFuture completes, - * after performing the given action. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied action - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param action the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture runAfterEither(CompletableFuture other, + public CompletableFuture runAfterEither(CompletionStage other, Runnable action) { - return doRunAfterEither(other, action, null); + return doRunAfterEither(other.toCompletableFuture(), action, null); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when either this or the other given CompletableFuture completes, - * after performing the given action from a task running in the - * {@link ForkJoinPool#commonPool()}. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied action - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param action the action to perform before completing the - * returned CompletableFuture - * @return the new CompletableFuture - */ public CompletableFuture runAfterEitherAsync - (CompletableFuture other, + (CompletionStage other, Runnable action) { - return doRunAfterEither(other, action, ForkJoinPool.commonPool()); + return doRunAfterEither(other.toCompletableFuture(), action, + ForkJoinPool.commonPool()); } - /** - * Returns a new CompletableFuture that is asynchronously completed - * when either this or the other given CompletableFuture completes, - * after performing the given action from a task running in the - * given executor. - * - *

        If this and/or the other CompletableFuture complete - * exceptionally, then the returned CompletableFuture may also do so, - * with a CompletionException holding one of these exceptions as its - * cause. No guarantees are made about which result or exception is - * used in the returned CompletableFuture. If the supplied action - * throws an exception, then the returned CompletableFuture completes - * exceptionally with a CompletionException holding the exception as - * its cause. - * - * @param other the other CompletableFuture - * @param action the action to perform before completing the - * returned CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the new CompletableFuture - */ public CompletableFuture runAfterEitherAsync - (CompletableFuture other, + (CompletionStage other, Runnable action, Executor executor) { if (executor == null) throw new NullPointerException(); - return doRunAfterEither(other, action, executor); - } - - private CompletableFuture doRunAfterEither - (CompletableFuture other, - Runnable action, - Executor e) { - if (other == null || action == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - RunAfterEither d = null; - Object r; - if ((r = result) == null && (r = other.result) == null) { - d = new RunAfterEither(this, other, action, dst, e); - CompletionNode q = null, p = new CompletionNode(d); - while ((r = result) == null && (r = other.result) == null) { - if (q != null) { - if (UNSAFE.compareAndSwapObject - (other, COMPLETIONS, q.next = other.completions, q)) - break; - } - else if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - q = new CompletionNode(d); - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - Throwable ex; - if (r instanceof AltResult) - ex = ((AltResult)r).ex; - else - ex = null; - if (ex == null) { - try { - if (e != null) - e.execute(new AsyncRun(action, dst)); - else - action.run(); - } catch (Throwable rex) { - ex = rex; - } - } - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - other.helpPostComplete(); - return dst; + return doRunAfterEither(other.toCompletableFuture(), action, executor); } - /** - * Returns a CompletableFuture that upon completion, has the same - * value as produced by the given function of the result of this - * CompletableFuture. - * - *

        If this CompletableFuture completes exceptionally, then the - * returned CompletableFuture also does so, with a - * CompletionException holding this exception as its cause. - * Similarly, if the computed CompletableFuture completes - * exceptionally, then so does the returned CompletableFuture. - * - * @param fn the function returning a new CompletableFuture - * @return the CompletableFuture - */ public CompletableFuture thenCompose - (Function> fn) { + (Function> fn) { return doThenCompose(fn, null); } - /** - * Returns a CompletableFuture that upon completion, has the same - * value as that produced asynchronously using the {@link - * ForkJoinPool#commonPool()} by the given function of the result - * of this CompletableFuture. - * - *

        If this CompletableFuture completes exceptionally, then the - * returned CompletableFuture also does so, with a - * CompletionException holding this exception as its cause. - * Similarly, if the computed CompletableFuture completes - * exceptionally, then so does the returned CompletableFuture. - * - * @param fn the function returning a new CompletableFuture - * @return the CompletableFuture - */ public CompletableFuture thenComposeAsync - (Function> fn) { + (Function> fn) { return doThenCompose(fn, ForkJoinPool.commonPool()); } - /** - * Returns a CompletableFuture that upon completion, has the same - * value as that produced asynchronously using the given executor - * by the given function of this CompletableFuture. - * - *

        If this CompletableFuture completes exceptionally, then the - * returned CompletableFuture also does so, with a - * CompletionException holding this exception as its cause. - * Similarly, if the computed CompletableFuture completes - * exceptionally, then so does the returned CompletableFuture. - * - * @param fn the function returning a new CompletableFuture - * @param executor the executor to use for asynchronous execution - * @return the CompletableFuture - */ public CompletableFuture thenComposeAsync - (Function> fn, + (Function> fn, Executor executor) { if (executor == null) throw new NullPointerException(); return doThenCompose(fn, executor); } - private CompletableFuture doThenCompose - (Function> fn, - Executor e) { - if (fn == null) throw new NullPointerException(); - CompletableFuture dst = null; - ThenCompose d = null; - Object r; - if ((r = result) == null) { - dst = new CompletableFuture(); - CompletionNode p = new CompletionNode - (d = new ThenCompose(this, fn, dst, e)); - while ((r = result) == null) { - if (UNSAFE.compareAndSwapObject - (this, COMPLETIONS, p.next = completions, p)) - break; - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - T t; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - if (ex == null) { - if (e != null) { - if (dst == null) - dst = new CompletableFuture(); - e.execute(new AsyncCompose(t, fn, dst)); - } - else { - try { - if ((dst = fn.apply(t)) == null) - ex = new NullPointerException(); - } catch (Throwable rex) { - ex = rex; - } - } - } - if (dst == null) - dst = new CompletableFuture(); - if (e == null || ex != null) - dst.internalComplete(null, ex); - } - helpPostComplete(); - dst.helpPostComplete(); - return dst; + public CompletableFuture whenComplete + (BiConsumer action) { + return doWhenComplete(action, null); + } + + public CompletableFuture whenCompleteAsync + (BiConsumer action) { + return doWhenComplete(action, ForkJoinPool.commonPool()); + } + + public CompletableFuture whenCompleteAsync + (BiConsumer action, + Executor executor) { + if (executor == null) throw new NullPointerException(); + return doWhenComplete(action, executor); + } + + public CompletableFuture handle + (BiFunction fn) { + return doHandle(fn, null); } + public CompletableFuture handleAsync + (BiFunction fn) { + return doHandle(fn, ForkJoinPool.commonPool()); + } + + public CompletableFuture handleAsync + (BiFunction fn, + Executor executor) { + if (executor == null) throw new NullPointerException(); + return doHandle(fn, executor); + } + + /** + * Returns this CompletableFuture + * + * @return this CompletableFuture + */ + public CompletableFuture toCompletableFuture() { + return this; + } + + // not in interface CompletionStage + /** * Returns a new CompletableFuture that is completed when this * CompletableFuture completes, with the result of the given @@ -2868,6 +2610,8 @@ public class CompletableFuture implements Future { * completion when it completes exceptionally; otherwise, if this * CompletableFuture completes normally, then the returned * CompletableFuture also completes normally with the same value. + * Note: More flexible versions of this functionality are + * available using methods {@code whenComplete} and {@code handle}. * * @param fn the function to use to compute the value of the * returned CompletableFuture if this CompletableFuture completed @@ -2882,7 +2626,8 @@ public class CompletableFuture implements Future { Object r; if ((r = result) == null) { CompletionNode p = - new CompletionNode(d = new ExceptionCompletion(this, fn, dst)); + new CompletionNode(d = new ExceptionCompletion + (this, fn, dst)); while ((r = result) == null) { if (UNSAFE.compareAndSwapObject(this, COMPLETIONS, p.next = completions, p)) @@ -2910,59 +2655,6 @@ public class CompletableFuture implements Future { return dst; } - /** - * Returns a new CompletableFuture that is completed when this - * CompletableFuture completes, with the result of the given - * function of the result and exception of this CompletableFuture's - * completion. The given function is invoked with the result (or - * {@code null} if none) and the exception (or {@code null} if none) - * of this CompletableFuture when complete. - * - * @param fn the function to use to compute the value of the - * returned CompletableFuture - * @return the new CompletableFuture - */ - public CompletableFuture handle - (BiFunction fn) { - if (fn == null) throw new NullPointerException(); - CompletableFuture dst = new CompletableFuture(); - HandleCompletion d = null; - Object r; - if ((r = result) == null) { - CompletionNode p = - new CompletionNode(d = new HandleCompletion(this, fn, dst)); - while ((r = result) == null) { - if (UNSAFE.compareAndSwapObject(this, COMPLETIONS, - p.next = completions, p)) - break; - } - } - if (r != null && (d == null || d.compareAndSet(0, 1))) { - T t; Throwable ex; - if (r instanceof AltResult) { - ex = ((AltResult)r).ex; - t = null; - } - else { - ex = null; - @SuppressWarnings("unchecked") T tr = (T) r; - t = tr; - } - U u; Throwable dx; - try { - u = fn.apply(t, ex); - dx = null; - } catch (Throwable rex) { - dx = rex; - u = null; - } - dst.internalComplete(u, dx); - } - helpPostComplete(); - return dst; - } - - /* ------------- Arbitrary-arity constructions -------------- */ /* @@ -3214,6 +2906,21 @@ public class CompletableFuture implements Future { (((AltResult)r).ex instanceof CancellationException); } + /** + * Returns {@code true} if this CompletableFuture completed + * exceptionally, in any way. Possible causes include + * cancellation, explicit invocation of {@code + * completeExceptionally}, and abrupt termination of a + * CompletionStage action. + * + * @return {@code true} if this CompletableFuture completed + * exceptionally + */ + public boolean isCompletedExceptionally() { + Object r; + return ((r = result) instanceof AltResult) && r != NIL; + } + /** * Forcibly sets or resets the value subsequently returned by * method {@link #get()} and related methods, whether or not diff --git a/src/share/classes/java/util/concurrent/CompletionStage.java b/src/share/classes/java/util/concurrent/CompletionStage.java new file mode 100644 index 0000000000000000000000000000000000000000..6de60980cffbd5a1ac7988aaf6151eb58cc38279 --- /dev/null +++ b/src/share/classes/java/util/concurrent/CompletionStage.java @@ -0,0 +1,760 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * This file is available under and governed by the GNU General Public + * License version 2 only, as published by the Free Software Foundation. + * However, the following notice accompanied the original version of this + * file: + * + * Written by Doug Lea with assistance from members of JCP JSR-166 + * Expert Group and released to the public domain, as explained at + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +package java.util.concurrent; +import java.util.function.Supplier; +import java.util.function.Consumer; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.BiFunction; +import java.util.concurrent.Executor; + +/** + * A stage of a possibly asynchronous computation, that performs an + * action or computes a value when another CompletionStage completes. + * A stage completes upon termination of its computation, but this may + * in turn trigger other dependent stages. The functionality defined + * in this interface takes only a few basic forms, which expand out to + * a larger set of methods to capture a range of usage styles:

          + * + *
        • The computation performed by a stage may be expressed as a + * Function, Consumer, or Runnable (using methods with names including + * apply, accept, or run, respectively) + * depending on whether it requires arguments and/or produces results. + * For example, {@code stage.thenApply(x -> square(x)).thenAccept(x -> + * System.out.print(x)).thenRun(() -> System.out.println())}. An + * additional form (compose) applies functions of stages + * themselves, rather than their results.
        • + * + *
        • One stage's execution may be triggered by completion of a + * single stage, or both of two stages, or either of two stages. + * Dependencies on a single stage are arranged using methods with + * prefix then. Those triggered by completion of + * both of two stages may combine their results or + * effects, using correspondingly named methods. Those triggered by + * either of two stages make no guarantees about which of the + * results or effects are used for the dependent stage's + * computation.
        • + * + *
        • Dependencies among stages control the triggering of + * computations, but do not otherwise guarantee any particular + * ordering. Additionally, execution of a new stage's computations may + * be arranged in any of three ways: default execution, default + * asynchronous execution (using methods with suffix async + * that employ the stage's default asynchronous execution facility), + * or custom (via a supplied {@link Executor}). The execution + * properties of default and async modes are specified by + * CompletionStage implementations, not this interface. Methods with + * explicit Executor arguments may have arbitrary execution + * properties, and might not even support concurrent execution, but + * are arranged for processing in a way that accommodates asynchrony. + * + *
        • Two method forms support processing whether the triggering + * stage completed normally or exceptionally: Method {@link + * #whenComplete whenComplete} allows injection of an action + * regardless of outcome, otherwise preserving the outcome in its + * completion. Method {@link #handle handle} additionally allows the + * stage to compute a replacement result that may enable further + * processing by other dependent stages. In all other cases, if a + * stage's computation terminates abruptly with an (unchecked) + * exception or error, then all dependent stages requiring its + * completion complete exceptionally as well, with a {@link + * CompletionException} holding the exception as its cause. If a + * stage is dependent on both of two stages, and both + * complete exceptionally, then the CompletionException may correspond + * to either one of these exceptions. If a stage is dependent on + * either of two others, and only one of them completes + * exceptionally, no guarantees are made about whether the dependent + * stage completes normally or exceptionally. In the case of method + * {@code whenComplete}, when the supplied action itself encounters an + * exception, then the stage exceptionally completes with this + * exception if not already completed exceptionally.
        • + * + *
        + * + *

        All methods adhere to the above triggering, execution, and + * exceptional completion specifications (which are not repeated in + * individual method specifications). Additionally, while arguments + * used to pass a completion result (that is, for parameters of type + * {@code T}) for methods accepting them may be null, passing a null + * value for any other parameter will result in a {@link + * NullPointerException} being thrown. + * + *

        This interface does not define methods for initially creating, + * forcibly completing normally or exceptionally, probing completion + * status or results, or awaiting completion of a stage. + * Implementations of CompletionStage may provide means of achieving + * such effects, as appropriate. Method {@link #toCompletableFuture} + * enables interoperability among different implementations of this + * interface by providing a common conversion type. + * + * @author Doug Lea + * @since 1.8 + */ +public interface CompletionStage { + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed with this stage's result as the argument + * to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage thenApply(Function fn); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed using this stage's default asynchronous + * execution facility, with this stage's result as the argument to + * the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage thenApplyAsync + (Function fn); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed using the supplied Executor, with this + * stage's result as the argument to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage thenApplyAsync + (Function fn, + Executor executor); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed with this stage's result as the argument + * to the supplied action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage thenAccept(Consumer action); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed using this stage's default asynchronous + * execution facility, with this stage's result as the argument to + * the supplied action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage thenAcceptAsync(Consumer action); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed using the supplied Executor, with this + * stage's result as the argument to the supplied action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param action the action to perform before completing the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @return the new CompletionStage + */ + public CompletionStage thenAcceptAsync(Consumer action, + Executor executor); + /** + * Returns a new CompletionStage that, when this stage completes + * normally, executes the given action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage thenRun(Runnable action); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, executes the given action using this stage's default + * asynchronous execution facility. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage thenRunAsync(Runnable action); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, executes the given action using the supplied Executor. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param action the action to perform before completing the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @return the new CompletionStage + */ + public CompletionStage thenRunAsync(Runnable action, + Executor executor); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage both complete normally, is executed with the two + * results as arguments to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param the type of the other CompletionStage's result + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage thenCombine + (CompletionStage other, + BiFunction fn); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage complete normally, is executed using this stage's + * default asynchronous execution facility, with the two results + * as arguments to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param the type of the other CompletionStage's result + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage thenCombineAsync + (CompletionStage other, + BiFunction fn); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage complete normally, is executed using the supplied + * executor, with the two results as arguments to the supplied + * function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @param the type of the other CompletionStage's result + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage thenCombineAsync + (CompletionStage other, + BiFunction fn, + Executor executor); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage both complete normally, is executed with the two + * results as arguments to the supplied action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @param the type of the other CompletionStage's result + * @return the new CompletionStage + */ + public CompletionStage thenAcceptBoth + (CompletionStage other, + BiConsumer action); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage complete normally, is executed using this stage's + * default asynchronous execution facility, with the two results + * as arguments to the supplied action. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @param the type of the other CompletionStage's result + * @return the new CompletionStage + */ + public CompletionStage thenAcceptBothAsync + (CompletionStage other, + BiConsumer action); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage complete normally, is executed using the supplied + * executor, with the two results as arguments to the supplied + * function. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @param the type of the other CompletionStage's result + * @return the new CompletionStage + */ + public CompletionStage thenAcceptBothAsync + (CompletionStage other, + BiConsumer action, + Executor executor); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage both complete normally, executes the given action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage runAfterBoth(CompletionStage other, + Runnable action); + /** + * Returns a new CompletionStage that, when this and the other + * given stage complete normally, executes the given action using + * this stage's default asynchronous execution facility. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage runAfterBothAsync(CompletionStage other, + Runnable action); + + /** + * Returns a new CompletionStage that, when this and the other + * given stage complete normally, executes the given action using + * the supplied executor + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @return the new CompletionStage + */ + public CompletionStage runAfterBothAsync(CompletionStage other, + Runnable action, + Executor executor); + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, is executed with the + * corresponding result as argument to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage applyToEither + (CompletionStage other, + Function fn); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, is executed using this + * stage's default asynchronous execution facility, with the + * corresponding result as argument to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage applyToEitherAsync + (CompletionStage other, + Function fn); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, is executed using the + * supplied executor, with the corresponding result as argument to + * the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param fn the function to use to compute the value of + * the returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage applyToEitherAsync + (CompletionStage other, + Function fn, + Executor executor); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, is executed with the + * corresponding result as argument to the supplied action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage acceptEither + (CompletionStage other, + Consumer action); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, is executed using this + * stage's default asynchronous execution facility, with the + * corresponding result as argument to the supplied action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage acceptEitherAsync + (CompletionStage other, + Consumer action); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, is executed using the + * supplied executor, with the corresponding result as argument to + * the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @return the new CompletionStage + */ + public CompletionStage acceptEitherAsync + (CompletionStage other, + Consumer action, + Executor executor); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, executes the given action. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage runAfterEither(CompletionStage other, + Runnable action); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, executes the given action + * using this stage's default asynchronous execution facility. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @return the new CompletionStage + */ + public CompletionStage runAfterEitherAsync + (CompletionStage other, + Runnable action); + + /** + * Returns a new CompletionStage that, when either this or the + * other given stage complete normally, executes the given action + * using supplied executor. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param other the other CompletionStage + * @param action the action to perform before completing the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @return the new CompletionStage + */ + public CompletionStage runAfterEitherAsync + (CompletionStage other, + Runnable action, + Executor executor); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed with this stage as the argument + * to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param fn the function returning a new CompletionStage + * @param the type of the returned CompletionStage's result + * @return the CompletionStage + */ + public CompletionStage thenCompose + (Function> fn); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed using this stage's default asynchronous + * execution facility, with this stage as the argument to the + * supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param fn the function returning a new CompletionStage + * @param the type of the returned CompletionStage's result + * @return the CompletionStage + */ + public CompletionStage thenComposeAsync + (Function> fn); + + /** + * Returns a new CompletionStage that, when this stage completes + * normally, is executed using the supplied Executor, with this + * stage's result as the argument to the supplied function. + * + * See the {@link CompletionStage} documentation for rules + * covering exceptional completion. + * + * @param fn the function returning a new CompletionStage + * @param executor the executor to use for asynchronous execution + * @param the type of the returned CompletionStage's result + * @return the CompletionStage + */ + public CompletionStage thenComposeAsync + (Function> fn, + Executor executor); + + /** + * Returns a new CompletionStage that, when this stage completes + * exceptionally, is executed with this stage's exception as the + * argument to the supplied function. Otherwise, if this stage + * completes normally, then the returned stage also completes + * normally with the same value. + * + * @param fn the function to use to compute the value of the + * returned CompletionStage if this CompletionStage completed + * exceptionally + * @return the new CompletionStage + */ + public CompletionStage exceptionally + (Function fn); + + /** + * Returns a new CompletionStage with the same result or exception + * as this stage, and when this stage completes, executes the + * given action with the result (or {@code null} if none) and the + * exception (or {@code null} if none) of this stage. + * + * @param action the action to perform + * @return the new CompletionStage + */ + public CompletionStage whenComplete + (BiConsumer action); + + /** + * Returns a new CompletionStage with the same result or exception + * as this stage, and when this stage completes, executes the + * given action executes the given action using this stage's + * default asynchronous execution facility, with the result (or + * {@code null} if none) and the exception (or {@code null} if + * none) of this stage as arguments. + * + * @param action the action to perform + * @return the new CompletionStage + */ + public CompletionStage whenCompleteAsync + (BiConsumer action); + + /** + * Returns a new CompletionStage with the same result or exception + * as this stage, and when this stage completes, executes using + * the supplied Executor, the given action with the result (or + * {@code null} if none) and the exception (or {@code null} if + * none) of this stage as arguments. + * + * @param action the action to perform + * @param executor the executor to use for asynchronous execution + * @return the new CompletionStage + */ + public CompletionStage whenCompleteAsync + (BiConsumer action, + Executor executor); + + /** + * Returns a new CompletionStage that, when this stage completes + * either normally or exceptionally, is executed with this stage's + * result and exception as arguments to the supplied function. + * The given function is invoked with the result (or {@code null} + * if none) and the exception (or {@code null} if none) of this + * stage when complete as arguments. + * + * @param fn the function to use to compute the value of the + * returned CompletionStage + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage handle + (BiFunction fn); + + /** + * Returns a new CompletionStage that, when this stage completes + * either normally or exceptionally, is executed using this stage's + * default asynchronous execution facility, with this stage's + * result and exception as arguments to the supplied function. + * The given function is invoked with the result (or {@code null} + * if none) and the exception (or {@code null} if none) of this + * stage when complete as arguments. + * + * @param fn the function to use to compute the value of the + * returned CompletionStage + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage handleAsync + (BiFunction fn); + + /** + * Returns a new CompletionStage that, when this stage completes + * either normally or exceptionally, is executed using the + * supplied executor, with this stage's result and exception as + * arguments to the supplied function. The given function is + * invoked with the result (or {@code null} if none) and the + * exception (or {@code null} if none) of this stage when complete + * as arguments. + * + * @param fn the function to use to compute the value of the + * returned CompletionStage + * @param executor the executor to use for asynchronous execution + * @param the function's return type + * @return the new CompletionStage + */ + public CompletionStage handleAsync + (BiFunction fn, + Executor executor); + + /** + * Returns a {@link CompletableFuture} maintaining the same + * completion properties as this stage. If this stage is already a + * CompletableFuture, this method may return this stage itself. + * Otherwise, invocation of this method may be equivalent in + * effect to {@code thenApply(x -> x)}, but returning an instance + * of type {@code CompletableFuture}. A CompletionStage + * implementation that does not choose to interoperate with others + * may throw {@code UnsupportedOperationException}. + * + * @return the CompletableFuture + * @throws UnsupportedOperationException if this implementation + * does not interoperate with CompletableFuture + */ + public CompletableFuture toCompletableFuture(); + +} diff --git a/src/share/classes/java/util/concurrent/ConcurrentHashMap.java b/src/share/classes/java/util/concurrent/ConcurrentHashMap.java index edd788afe25701d7142be732549f5421d44723db..2914d1a85980f0d0ca8a9ea457d2e1b20fee970a 100644 --- a/src/share/classes/java/util/concurrent/ConcurrentHashMap.java +++ b/src/share/classes/java/util/concurrent/ConcurrentHashMap.java @@ -4716,6 +4716,7 @@ public class ConcurrentHashMap extends AbstractMap * Base class for bulk tasks. Repeats some fields and code from * class Traverser, because we need to subclass CountedCompleter. */ + @SuppressWarnings("serial") abstract static class BulkTask extends CountedCompleter { Node[] tab; // same as Traverser Node next; diff --git a/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java b/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java index 99faf1668346d32b2e333d22dbf4181e0b633e9c..ff75003e4c24bda133334b3d5caca5557db4ef32 100644 --- a/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java +++ b/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java @@ -34,6 +34,7 @@ */ package java.util.concurrent; +import java.io.Serializable; import java.util.AbstractCollection; import java.util.AbstractMap; import java.util.AbstractSet; @@ -44,11 +45,15 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.NavigableMap; import java.util.NavigableSet; import java.util.NoSuchElementException; import java.util.Set; import java.util.SortedMap; +import java.util.SortedSet; import java.util.Spliterator; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ConcurrentNavigableMap; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.BiConsumer; @@ -108,9 +113,7 @@ import java.util.function.Function; * @since 1.6 */ public class ConcurrentSkipListMap extends AbstractMap - implements ConcurrentNavigableMap, - Cloneable, - java.io.Serializable { + implements ConcurrentNavigableMap, Cloneable, Serializable { /* * This class implements a tree-like two-dimensionally linked skip * list in which the index levels are represented in separate @@ -1412,6 +1415,8 @@ public class ConcurrentSkipListMap extends AbstractMap /** * Saves this map to a stream (that is, serializes it). * + * @param s the stream + * @throws java.io.IOException if an I/O error occurs * @serialData The key (Object) and value (Object) for each * key-value mapping represented by the map, followed by * {@code null}. The key-value mappings are emitted in key-order @@ -1436,6 +1441,10 @@ public class ConcurrentSkipListMap extends AbstractMap /** * Reconstitutes this map from a stream (that is, deserializes it). + * @param s the stream + * @throws ClassNotFoundException if the class of a serialized object + * could not be found + * @throws java.io.IOException if an I/O error occurs */ @SuppressWarnings("unchecked") private void readObject(final java.io.ObjectInputStream s) @@ -2548,8 +2557,7 @@ public class ConcurrentSkipListMap extends AbstractMap * @serial include */ static final class SubMap extends AbstractMap - implements ConcurrentNavigableMap, Cloneable, - java.io.Serializable { + implements ConcurrentNavigableMap, Cloneable, Serializable { private static final long serialVersionUID = -7647078645895051609L; /** Underlying map */ @@ -3180,6 +3188,7 @@ public class ConcurrentSkipListMap extends AbstractMap public long estimateSize() { return Long.MAX_VALUE; } + } final class SubMapValueIterator extends SubMapIter { @@ -3434,7 +3443,8 @@ public class ConcurrentSkipListMap extends AbstractMap } public int characteristics() { - return Spliterator.CONCURRENT | Spliterator.NONNULL; + return Spliterator.CONCURRENT | Spliterator.ORDERED | + Spliterator.NONNULL; } } @@ -3528,8 +3538,17 @@ public class ConcurrentSkipListMap extends AbstractMap } public final Comparator> getComparator() { - return comparator == null ? null : - Map.Entry.comparingByKey(comparator); + // Adapt or create a key-based comparator + if (comparator != null) { + return Map.Entry.comparingByKey(comparator); + } + else { + return (Comparator> & Serializable) (e1, e2) -> { + @SuppressWarnings("unchecked") + Comparable k1 = (Comparable) e1.getKey(); + return k1.compareTo(e2.getKey()); + }; + } } } diff --git a/src/share/classes/java/util/concurrent/atomic/Striped64.java b/src/share/classes/java/util/concurrent/atomic/Striped64.java index 16dcb4da6cca23a9cf5131e5745d5380da83ff73..a09868daba60d16cc8e024de925afb8932a31c1b 100644 --- a/src/share/classes/java/util/concurrent/atomic/Striped64.java +++ b/src/share/classes/java/util/concurrent/atomic/Striped64.java @@ -43,6 +43,7 @@ import java.util.concurrent.ThreadLocalRandom; * for classes supporting dynamic striping on 64bit values. The class * extends Number so that concrete subclasses must publicly do so. */ +@SuppressWarnings("serial") abstract class Striped64 extends Number { /* * This class maintains a lazily-initialized table of atomically diff --git a/src/share/classes/java/util/jar/JarVerifier.java b/src/share/classes/java/util/jar/JarVerifier.java index a455fb1f2f7c2786086734205aff87cfa2e2ed3b..73748c1083d5662c4e424698658dc25ed682cc12 100644 --- a/src/share/classes/java/util/jar/JarVerifier.java +++ b/src/share/classes/java/util/jar/JarVerifier.java @@ -139,13 +139,21 @@ class JarVerifier { return; } + if (uname.equals(JarFile.MANIFEST_NAME)) { + return; + } + if (SignatureFileVerifier.isBlockOrSF(uname)) { /* We parse only DSA, RSA or EC PKCS7 blocks. */ parsingBlockOrSF = true; baos.reset(); mev.setEntry(null, je); + return; } - return; + + // If a META-INF entry is not MF or block or SF, they should + // be normal entries. According to 2 above, no more block or + // SF will appear. Let's doneWithMeta. } } diff --git a/src/share/classes/java/util/logging/XMLFormatter.java b/src/share/classes/java/util/logging/XMLFormatter.java index 6b0a58a7130589b3a090ca637cab6e391118802d..d32d978dbe5a47d153f6e9628ea981b0cc85aba2 100644 --- a/src/share/classes/java/util/logging/XMLFormatter.java +++ b/src/share/classes/java/util/logging/XMLFormatter.java @@ -47,7 +47,7 @@ public class XMLFormatter extends Formatter { private LogManager manager = LogManager.getLogManager(); // Append a two digit number. - private void a2(StringBuffer sb, int x) { + private void a2(StringBuilder sb, int x) { if (x < 10) { sb.append('0'); } @@ -55,25 +55,26 @@ public class XMLFormatter extends Formatter { } // Append the time and date in ISO 8601 format - private void appendISO8601(StringBuffer sb, long millis) { - Date date = new Date(millis); - sb.append(date.getYear() + 1900); + private void appendISO8601(StringBuilder sb, long millis) { + GregorianCalendar cal = new GregorianCalendar(); + cal.setTimeInMillis(millis); + sb.append(cal.get(Calendar.YEAR) + 1900); sb.append('-'); - a2(sb, date.getMonth() + 1); + a2(sb, cal.get(Calendar.MONTH) + 1); sb.append('-'); - a2(sb, date.getDate()); + a2(sb, cal.get(Calendar.DAY_OF_MONTH)); sb.append('T'); - a2(sb, date.getHours()); + a2(sb, cal.get(Calendar.HOUR_OF_DAY)); sb.append(':'); - a2(sb, date.getMinutes()); + a2(sb, cal.get(Calendar.MINUTE)); sb.append(':'); - a2(sb, date.getSeconds()); + a2(sb, cal.get(Calendar.SECOND)); } - // Append to the given StringBuffer an escaped version of the + // Append to the given StringBuilder an escaped version of the // given text string where XML special characters have been escaped. // For a null string we append "" - private void escape(StringBuffer sb, String text) { + private void escape(StringBuilder sb, String text) { if (text == null) { text = ""; } @@ -102,7 +103,7 @@ public class XMLFormatter extends Formatter { * @return a formatted log record */ public String format(LogRecord record) { - StringBuffer sb = new StringBuffer(500); + StringBuilder sb = new StringBuilder(500); sb.append("\n"); sb.append(" "); @@ -224,7 +225,7 @@ public class XMLFormatter extends Formatter { * @return a valid XML string */ public String getHead(Handler h) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); String encoding; sb.append("> * Backlink to the head of the pipeline chain (self if this is the source * stage). */ + @SuppressWarnings("rawtypes") private final AbstractPipeline sourceStage; /** * The "upstream" pipeline, or null if this is the source stage. */ + @SuppressWarnings("rawtypes") private final AbstractPipeline previousStage; /** @@ -92,6 +94,7 @@ abstract class AbstractPipeline> * The next stage in the pipeline, or null if this is the last stage. * Effectively final at the point of linking to the next pipeline. */ + @SuppressWarnings("rawtypes") private AbstractPipeline nextStage; /** @@ -222,8 +225,8 @@ abstract class AbstractPipeline> linkedOrConsumed = true; return isParallel() - ? (R) terminalOp.evaluateParallel(this, sourceSpliterator(terminalOp.getOpFlags())) - : (R) terminalOp.evaluateSequential(this, sourceSpliterator(terminalOp.getOpFlags())); + ? terminalOp.evaluateParallel(this, sourceSpliterator(terminalOp.getOpFlags())) + : terminalOp.evaluateSequential(this, sourceSpliterator(terminalOp.getOpFlags())); } /** @@ -232,6 +235,7 @@ abstract class AbstractPipeline> * @param generator the array generator to be used to create array instances * @return a flat array-backed Node that holds the collected output elements */ + @SuppressWarnings("unchecked") final Node evaluateToArrayNode(IntFunction generator) { if (linkedOrConsumed) throw new IllegalStateException("stream has already been operated upon"); @@ -256,6 +260,7 @@ abstract class AbstractPipeline> * @throws IllegalStateException if this pipeline stage is not the source * stage. */ + @SuppressWarnings("unchecked") final Spliterator sourceStageSpliterator() { if (this != sourceStage) throw new IllegalStateException(); @@ -265,11 +270,13 @@ abstract class AbstractPipeline> linkedOrConsumed = true; if (sourceStage.sourceSpliterator != null) { + @SuppressWarnings("unchecked") Spliterator s = sourceStage.sourceSpliterator; sourceStage.sourceSpliterator = null; return s; } else if (sourceStage.sourceSupplier != null) { + @SuppressWarnings("unchecked") Spliterator s = (Spliterator) sourceStage.sourceSupplier.get(); sourceStage.sourceSupplier = null; return s; @@ -282,12 +289,14 @@ abstract class AbstractPipeline> // BaseStream @Override + @SuppressWarnings("unchecked") public final S sequential() { sourceStage.parallel = false; return (S) this; } @Override + @SuppressWarnings("unchecked") public final S parallel() { sourceStage.parallel = true; return (S) this; @@ -295,6 +304,7 @@ abstract class AbstractPipeline> // Primitive specialization use co-variant overrides, hence is not final @Override + @SuppressWarnings("unchecked") public Spliterator spliterator() { if (linkedOrConsumed) throw new IllegalStateException("stream has already been operated upon"); @@ -302,12 +312,14 @@ abstract class AbstractPipeline> if (this == sourceStage) { if (sourceStage.sourceSpliterator != null) { - Spliterator s = sourceStage.sourceSpliterator; + @SuppressWarnings("unchecked") + Spliterator s = (Spliterator) sourceStage.sourceSpliterator; sourceStage.sourceSpliterator = null; return s; } else if (sourceStage.sourceSupplier != null) { - Supplier> s = sourceStage.sourceSupplier; + @SuppressWarnings("unchecked") + Supplier> s = (Supplier>) sourceStage.sourceSupplier; sourceStage.sourceSupplier = null; return lazySpliterator(s); } @@ -349,10 +361,11 @@ abstract class AbstractPipeline> * @param terminalFlags Operation flags for the terminal operation */ private void parallelPrepare(int terminalFlags) { + @SuppressWarnings("rawtypes") AbstractPipeline backPropagationHead = sourceStage; if (sourceStage.sourceAnyStateful) { int depth = 1; - for (AbstractPipeline u = sourceStage, p = sourceStage.nextStage; + for ( @SuppressWarnings("rawtypes") AbstractPipeline u = sourceStage, p = sourceStage.nextStage; p != null; u = p, p = p.nextStage) { int thisOpFlags = p.sourceOrOpFlags; @@ -383,7 +396,7 @@ abstract class AbstractPipeline> // Apply the upstream terminal flags if (terminalFlags != 0) { int upstreamTerminalFlags = terminalFlags & StreamOpFlag.UPSTREAM_TERMINAL_OP_MASK; - for (AbstractPipeline p = backPropagationHead; p.nextStage != null; p = p.nextStage) { + for ( @SuppressWarnings("rawtypes") AbstractPipeline p = backPropagationHead; p.nextStage != null; p = p.nextStage) { p.combinedFlags = StreamOpFlag.combineOpFlags(upstreamTerminalFlags, p.combinedFlags); } @@ -398,6 +411,7 @@ abstract class AbstractPipeline> * of all computations up to and including the most recent stateful * operation. */ + @SuppressWarnings("unchecked") private Spliterator sourceSpliterator(int terminalFlags) { // Get the source spliterator of the pipeline Spliterator spliterator = null; @@ -421,7 +435,7 @@ abstract class AbstractPipeline> // Adapt the source spliterator, evaluating each stateful op // in the pipeline up to and including this pipeline stage - for (AbstractPipeline u = sourceStage, p = sourceStage.nextStage, e = this; + for ( @SuppressWarnings("rawtypes") AbstractPipeline u = sourceStage, p = sourceStage.nextStage, e = this; u != e; u = p, p = p.nextStage) { @@ -442,6 +456,7 @@ abstract class AbstractPipeline> @Override final StreamShape getSourceShape() { + @SuppressWarnings("rawtypes") AbstractPipeline p = AbstractPipeline.this; while (p.depth > 0) { p = p.previousStage; @@ -475,7 +490,9 @@ abstract class AbstractPipeline> } @Override + @SuppressWarnings("unchecked") final void copyIntoWithCancel(Sink wrappedSink, Spliterator spliterator) { + @SuppressWarnings({"rawtypes","unchecked"}) AbstractPipeline p = AbstractPipeline.this; while (p.depth > 0) { p = p.previousStage; @@ -495,16 +512,18 @@ abstract class AbstractPipeline> } @Override + @SuppressWarnings("unchecked") final Sink wrapSink(Sink sink) { Objects.requireNonNull(sink); - for (AbstractPipeline p=AbstractPipeline.this; p.depth > 0; p=p.previousStage) { + for ( @SuppressWarnings("rawtypes") AbstractPipeline p=AbstractPipeline.this; p.depth > 0; p=p.previousStage) { sink = p.opWrapSink(p.previousStage.combinedFlags, sink); } return (Sink) sink; } @Override + @SuppressWarnings("unchecked") final Spliterator wrapSpliterator(Spliterator sourceSpliterator) { if (depth == 0) { return (Spliterator) sourceSpliterator; @@ -591,16 +610,19 @@ abstract class AbstractPipeline> /** * Make a node builder compatible with this stream shape. * - * @param exactSizeIfKnown if {@literal >=0}, then a node builder will be created that - * has a fixed capacity of at most sizeIfKnown elements. If {@literal < 0}, - * then the node builder has an unfixed capacity. A fixed capacity node - * builder will throw exceptions if an element is added after builder has - * reached capacity, or is built before the builder has reached capacity. + * @param exactSizeIfKnown if {@literal >=0}, then a node builder will be + * created that has a fixed capacity of at most sizeIfKnown elements. If + * {@literal < 0}, then the node builder has an unfixed capacity. A fixed + * capacity node builder will throw exceptions if an element is added after + * builder has reached capacity, or is built before the builder has reached + * capacity. + * * @param generator the array generator to be used to create instances of a * T[] array. For implementations supporting primitive nodes, this parameter * may be ignored. * @return a node builder */ + @Override abstract Node.Builder makeNodeBuilder(long exactSizeIfKnown, IntFunction generator); @@ -679,6 +701,7 @@ abstract class AbstractPipeline> * @param spliterator the source {@code Spliterator} * @return a {@code Spliterator} describing the result of the evaluation */ + @SuppressWarnings("unchecked") Spliterator opEvaluateParallelLazy(PipelineHelper helper, Spliterator spliterator) { return opEvaluateParallel(helper, spliterator, i -> (E_OUT[]) new Object[i]).spliterator(); diff --git a/src/share/classes/java/util/stream/AbstractShortCircuitTask.java b/src/share/classes/java/util/stream/AbstractShortCircuitTask.java index 7a102e80d8e4d98b1009ce90bdccfbcdbab32456..bbf09f03b14db1c42021af11e01f53592caa2ad1 100644 --- a/src/share/classes/java/util/stream/AbstractShortCircuitTask.java +++ b/src/share/classes/java/util/stream/AbstractShortCircuitTask.java @@ -39,6 +39,7 @@ import java.util.concurrent.atomic.AtomicReference; * @param type of child and sibling tasks * @since 1.8 */ +@SuppressWarnings("serial") abstract class AbstractShortCircuitTask> extends AbstractTask { @@ -219,7 +220,8 @@ abstract class AbstractShortCircuitTask * + *

        Serialization is not supported as there is no intention to serialize + * tasks managed by stream ops. + * * @param Type of elements input to the pipeline * @param Type of elements output from the pipeline * @param Type of intermediate result, which may be different from operation @@ -80,6 +83,7 @@ import java.util.concurrent.ForkJoinPool; * @param Type of parent, child and sibling tasks * @since 1.8 */ +@SuppressWarnings("serial") abstract class AbstractTask> extends CountedCompleter { diff --git a/src/share/classes/java/util/stream/Collector.java b/src/share/classes/java/util/stream/Collector.java index 71bb2276f7b062ce0fd00f8eb1cec208ed4c4a0b..49629176032bc98eb0b6dbc4f48214ceabedaf67 100644 --- a/src/share/classes/java/util/stream/Collector.java +++ b/src/share/classes/java/util/stream/Collector.java @@ -25,40 +25,45 @@ package java.util.stream; import java.util.Collections; +import java.util.EnumSet; import java.util.Set; -import java.util.function.BiFunction; +import java.util.function.BiConsumer; import java.util.function.BinaryOperator; +import java.util.function.Function; import java.util.function.Supplier; /** * A reduction operation that - * supports folding input elements into a cumulative result. The result may be - * a value or may be a mutable result container. Examples of operations - * accumulating results into a mutable result container include: accumulating - * input elements into a {@code Collection}; concatenating strings into a - * {@code StringBuilder}; computing summary information about elements such as - * sum, min, max, or average; computing "pivot table" summaries such as "maximum - * valued transaction by seller", etc. Reduction operations can be performed - * either sequentially or in parallel. + * folds input elements into a mutable result container, optionally transforming + * the accumulated result into a final representation after all input elements + * have been processed. + * + *

        Examples of mutable reduction operations include: + * accumulating elements into a {@code Collection}; concatenating + * strings using a {@code StringBuilder}; computing summary information about + * elements such as sum, min, max, or average; computing "pivot table" summaries + * such as "maximum valued transaction by seller", etc. Reduction operations + * can be performed either sequentially or in parallel. * *

        The following are examples of using the predefined {@code Collector} * implementations in {@link Collectors} with the {@code Stream} API to perform * mutable reduction tasks: *

        {@code
        - *     // Accumulate elements into a List
        - *     List list = stream.collect(Collectors.toList());
        + *     // Accumulate names into a List
        + *     List list = people.stream().map(Person::getName).collect(Collectors.toList());
          *
        - *     // Accumulate elements into a TreeSet
        - *     Set list = stream.collect(Collectors.toCollection(TreeSet::new));
        + *     // Accumulate names into a TreeSet
        + *     Set list = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));
          *
          *     // Convert elements to strings and concatenate them, separated by commas
        - *     String joined = stream.map(Object::toString)
        - *                           .collect(Collectors.toStringJoiner(", "))
        - *                           .toString();
        + *     String joined = things.stream()
        + *                           .map(Object::toString)
        + *                           .collect(Collectors.joining(", "));
          *
          *     // Find highest-paid employee
          *     Employee highestPaid = employees.stream()
        - *                                     .collect(Collectors.maxBy(Comparators.comparing(Employee::getSalary)));
        + *                                     .collect(Collectors.maxBy(Comparators.comparing(Employee::getSalary)))
        + *                                     .get();
          *
          *     // Group employees by department
          *     Map> byDept
        @@ -66,7 +71,7 @@ import java.util.function.Supplier;
          *                    .collect(Collectors.groupingBy(Employee::getDepartment));
          *
          *     // Find highest-paid employee by department
        - *     Map highestPaidByDept
        + *     Map> highestPaidByDept
          *         = employees.stream()
          *                    .collect(Collectors.groupingBy(Employee::getDepartment,
          *                                                   Collectors.maxBy(Comparators.comparing(Employee::getSalary))));
        @@ -74,43 +79,42 @@ import java.util.function.Supplier;
          *     // Partition students into passing and failing
          *     Map> passingFailing =
          *         students.stream()
        - *                 .collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD);
        + *                 .collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
          *
          * }
        * - *

        A {@code Collector} is specified by three functions that work together to - * manage a result or result container. They are: creation of an initial - * result, incorporating a new data element into a result, and combining two - * results into one. The last function -- combining two results into one -- is - * used during parallel operations, where subsets of the input are accumulated - * in parallel, and then the subresults merged into a combined result. The - * result may be a mutable container or a value. If the result is mutable, the - * accumulation and combination functions may either mutate their left argument - * and return that (such as adding elements to a collection), or return a new - * result, in which case it should not perform any mutation. - * - *

        Collectors also have a set of characteristics, including - * {@link Characteristics#CONCURRENT} and - * {@link Characteristics#STRICTLY_MUTATIVE}. These characteristics provide + *

        A {@code Collector} is specified by four functions that work together to + * accumulate entries into a mutable result container, and optionally perform + * a final transform on the result. They are: creation of a new result container, + * incorporating a new data element into a result container, combining two + * result containers into one, and performing a final transform on the container. + * The combiner function is used during parallel operations, where + * subsets of the input are accumulated into separate result + * containers, and then the subresults merged into a combined result. The + * combiner function may merge one set of subresults into the other and return + * that, or it may return a new object to describe the combined results. + * + *

        Collectors also have a set of characteristics, such as + * {@link Characteristics#CONCURRENT}. These characteristics provide * hints that can be used by a reduction implementation to provide better * performance. * *

        Libraries that implement reduction based on {@code Collector}, such as * {@link Stream#collect(Collector)}, must adhere to the following constraints: *

          - *
        • The first argument passed to the accumulator function, and both - * arguments passed to the combiner function, must be the result of a - * previous invocation of {@link #resultSupplier()}, {@link #accumulator()}, - * or {@link #combiner()}.
        • + *
        • The first argument passed to the accumulator function, both + * arguments passed to the combiner function, and the argument passed to the + * finisher function must be the result of a previous invocation of the + * result supplier, accumulator, or combiner functions.
        • *
        • The implementation should not do anything with the result of any of * the result supplier, accumulator, or combiner functions other than to - * pass them again to the accumulator or combiner functions, or return them - * to the caller of the reduction operation.
        • - *
        • If a result is passed to the accumulator or combiner function, and - * the same object is not returned from that function, it is never used - * again.
        • - *
        • Once a result is passed to the combiner function, it is never passed - * to the accumulator function again.
        • + * pass them again to the accumulator, combiner, or finisher functions, + * or return them to the caller of the reduction operation. + *
        • If a result is passed to the combiner or finisher + * function, and the same object is not returned from that function, it is + * never used again.
        • + *
        • Once a result is passed to the combiner or finisher function, it + * is never passed to the accumulator function again.
        • *
        • For non-concurrent collectors, any result returned from the result * supplier, accumulator, or combiner functions must be serially * thread-confined. This enables collection to occur in parallel without @@ -132,11 +136,10 @@ import java.util.function.Supplier; * Performing a reduction operation with a {@code Collector} should produce a * result equivalent to: *
          {@code
          - *     BiFunction accumulator = collector.accumulator();
          - *     R result = collector.resultSupplier().get();
          + *     R container = collector.supplier().get();
            *     for (T t : data)
          - *         result = accumulator.apply(result, t);
          - *     return result;
          + *         collector.accumulator().accept(container, t);
          + *     return collector.finisher().apply(container);
            * }
          * *

          However, the library is free to partition the input, perform the reduction @@ -149,7 +152,7 @@ import java.util.function.Supplier; * is accumulating elements into a {@code TreeSet}. In this case, the {@code * resultSupplier()} function is {@code () -> new Treeset()}, the * {@code accumulator} function is - * {@code (set, element) -> { set.add(element); return set; }}, and the combiner + * {@code (set, element) -> set.add(element) }, and the combiner * function is {@code (left, right) -> { left.addAll(right); return left; }}. * (This behavior is implemented by * {@code Collectors.toCollection(TreeSet::new)}). @@ -159,51 +162,49 @@ import java.util.function.Supplier; * @see Stream#collect(Collector) * @see Collectors * - * @param the type of input element to the collect operation - * @param the result type of the collect operation + * @param the type of input elements to the reduction operation + * @param the mutable accumulation type of the reduction operation (often + * hidden as an implementation detail) + * @param the result type of the reduction operation * @since 1.8 */ -public interface Collector { +public interface Collector { /** - * A function that creates and returns a new result that represents - * "no values". If the accumulator or combiner functions may mutate their - * arguments, this must be a new, empty result container. + * A function that creates and returns a new mutable result container. * - * @return a function which, when invoked, returns a result representing - * "no values" + * @return a function which returns a new, mutable result container */ - Supplier resultSupplier(); + Supplier supplier(); /** - * A function that folds a new value into a cumulative result. The result - * may be a mutable result container or a value. The accumulator function - * may modify a mutable container and return it, or create a new result and - * return that, but if it returns a new result object, it must not modify - * any of its arguments. - * - *

          If the collector has the {@link Characteristics#STRICTLY_MUTATIVE} - * characteristic, then the accumulator function must always return - * its first argument, after possibly mutating its state. + * A function that folds a new value into a mutable result container. * - * @return a function which folds a new value into a cumulative result + * @return a function which folds a new value into a mutable result container */ - BiFunction accumulator(); + BiConsumer accumulator(); /** * A function that accepts two partial results and merges them. The * combiner function may fold state from one argument into the other and - * return that, or may return a new result object, but if it returns - * a new result object, it must not modify the state of either of its - * arguments. - * - *

          If the collector has the {@link Characteristics#STRICTLY_MUTATIVE} - * characteristic, then the combiner function must always return - * its first argument, after possibly mutating its state. + * return that, or may return a new result object. * * @return a function which combines two partial results into a cumulative * result */ - BinaryOperator combiner(); + BinaryOperator combiner(); + + /** + * Perform the final transformation from the intermediate accumulation type + * {@code A} to the final result representation {@code R}. + * + *

          If the characteristic {@code IDENTITY_TRANSFORM} is + * set, this function may be presumed to be an identity transform with an + * unchecked cast from {@code A} to {@code R}. + * + * @return a function which transforms the intermediate result to the final + * result + */ + Function finisher(); /** * Returns a {@code Set} of {@code Collector.Characteristics} indicating @@ -213,6 +214,62 @@ public interface Collector { */ Set characteristics(); + /** + * Returns a new {@code Collector} described by the given {@code supplier}, + * {@code accumulator}, and {@code combiner} functions. The resulting + * {@code Collector} has the {@code Collector.Characteristics.IDENTITY_FINISH} + * characteristic. + * + * @param supplier The supplier function for the new collector + * @param accumulator The accumulator function for the new collector + * @param combiner The combiner function for the new collector + * @param characteristics The collector characteristics for the new + * collector + * @param The type of input elements for the new collector + * @param The type of intermediate accumulation result, and final result, + * for the new collector + * @return the new {@code Collector} + */ + public static Collector of(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Characteristics... characteristics) { + Set cs = (characteristics.length == 0) + ? Collectors.CH_ID + : Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH, + characteristics)); + return new Collectors.CollectorImpl<>(supplier, accumulator, combiner, cs); + } + + /** + * Returns a new {@code Collector} described by the given {@code supplier}, + * {@code accumulator}, {@code combiner}, and {@code finisher} functions. + * + * @param supplier The supplier function for the new collector + * @param accumulator The accumulator function for the new collector + * @param combiner The combiner function for the new collector + * @param finisher The finisher function for the new collector + * @param characteristics The collector characteristics for the new + * collector + * @param The type of input elements for the new collector + * @param The intermediate accumulation type of the new collector + * @param The final result type of the new collector + * @return the new {@code Collector} + */ + public static Collector of(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Function finisher, + Characteristics... characteristics) { + Set cs = Collectors.CH_NOID; + if (characteristics.length > 0) { + cs = EnumSet.noneOf(Characteristics.class); + Collections.addAll(cs, characteristics); + cs = Collections.unmodifiableSet(cs); + } + return new Collectors.CollectorImpl<>(supplier, accumulator, combiner, finisher, cs); + } + /** * Characteristics indicating properties of a {@code Collector}, which can * be used to optimize reduction implementations. @@ -222,8 +279,7 @@ public interface Collector { * Indicates that this collector is concurrent, meaning that * the result container can support the accumulator function being * called concurrently with the same result container from multiple - * threads. Concurrent collectors must also always have the - * {@code STRICTLY_MUTATIVE} characteristic. + * threads. * *

          If a {@code CONCURRENT} collector is not also {@code UNORDERED}, * then it should only be evaluated concurrently if applied to an @@ -238,12 +294,10 @@ public interface Collector { UNORDERED, /** - * Indicates that this collector operates by strict mutation of its - * result container. This means that the {@link #accumulator()} and - * {@link #combiner()} functions will always modify the state of and - * return their first argument, rather than returning a different result - * container. + * Indicates that the finisher function is the identity function and + * can be elided. If set, it must be the case that an unchecked cast + * from A to R will succeed. */ - STRICTLY_MUTATIVE + IDENTITY_FINISH } } diff --git a/src/share/classes/java/util/stream/Collectors.java b/src/share/classes/java/util/stream/Collectors.java index 8f5e8ff42e47ec59b5d1955a6c003e6b5ac2f142..29a5464eee0b781e258a7810b849460a891dd163 100644 --- a/src/share/classes/java/util/stream/Collectors.java +++ b/src/share/classes/java/util/stream/Collectors.java @@ -27,6 +27,7 @@ package java.util.stream; import java.util.AbstractMap; import java.util.AbstractSet; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -39,14 +40,16 @@ import java.util.Iterator; import java.util.List; import java.util.LongSummaryStatistics; import java.util.Map; -import java.util.NoSuchElementException; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.StringJoiner; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.BinaryOperator; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; @@ -64,20 +67,21 @@ import java.util.function.ToLongFunction; * mutable reduction tasks: * *

          {@code
          - *     // Accumulate elements into a List
          - *     List list = people.collect(Collectors.toList());
          + *     // Accumulate names into a List
          + *     List list = people.stream().map(Person::getName).collect(Collectors.toList());
            *
          - *     // Accumulate elements into a TreeSet
          - *     List list = people.collect(Collectors.toCollection(TreeSet::new));
          + *     // Accumulate names into a TreeSet
          + *     Set list = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));
            *
            *     // Convert elements to strings and concatenate them, separated by commas
          - *     String joined = stream.map(Object::toString)
          - *                           .collect(Collectors.toStringJoiner(", "))
          - *                           .toString();
          + *     String joined = things.stream()
          + *                           .map(Object::toString)
          + *                           .collect(Collectors.joining(", "));
            *
            *     // Find highest-paid employee
            *     Employee highestPaid = employees.stream()
          - *                                     .collect(Collectors.maxBy(Comparator.comparing(Employee::getSalary)));
          + *                                     .collect(Collectors.maxBy(Comparator.comparing(Employee::getSalary)))
          + *                                     .get();
            *
            *     // Group employees by department
            *     Map> byDept
          @@ -85,7 +89,7 @@ import java.util.function.ToLongFunction;
            *                    .collect(Collectors.groupingBy(Employee::getDepartment));
            *
            *     // Find highest-paid employee by department
          - *     Map highestPaidByDept
          + *     Map> highestPaidByDept
            *         = employees.stream()
            *                    .collect(Collectors.groupingBy(Employee::getDepartment,
            *                                                   Collectors.maxBy(Comparator.comparing(Employee::getSalary))));
          @@ -93,7 +97,7 @@ import java.util.function.ToLongFunction;
            *     // Partition students into passing and failing
            *     Map> passingFailing =
            *         students.stream()
          - *                 .collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD);
          + *                 .collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
            *
            * }
          * @@ -103,15 +107,19 @@ import java.util.function.ToLongFunction; */ public final class Collectors { - private static final Set CH_CONCURRENT + static final Set CH_CONCURRENT_ID + = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.CONCURRENT, + Collector.Characteristics.UNORDERED, + Collector.Characteristics.IDENTITY_FINISH)); + static final Set CH_CONCURRENT_NOID = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.CONCURRENT, - Collector.Characteristics.STRICTLY_MUTATIVE, - Collector.Characteristics.UNORDERED)); - private static final Set CH_STRICT - = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.STRICTLY_MUTATIVE)); - private static final Set CH_STRICT_UNORDERED - = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.STRICTLY_MUTATIVE, Collector.Characteristics.UNORDERED)); + static final Set CH_ID + = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH)); + static final Set CH_UNORDERED_ID + = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.UNORDERED, + Collector.Characteristics.IDENTITY_FINISH)); + static final Set CH_NOID = Collections.emptySet(); private Collectors() { } @@ -124,87 +132,63 @@ public final class Collectors { * * @param the type of input arguments to the merge function * @return a merge function which always throw {@code IllegalStateException} - * - * @see #firstWinsMerger() - * @see #lastWinsMerger() */ - public static BinaryOperator throwingMerger() { + private static BinaryOperator throwingMerger() { return (u,v) -> { throw new IllegalStateException(String.format("Duplicate key %s", u)); }; } - /** - * Returns a merge function, suitable for use in - * {@link Map#merge(Object, Object, BiFunction) Map.merge()} or - * {@link #toMap(Function, Function, BinaryOperator) toMap()}, - * which implements a "first wins" policy. - * - * @param the type of input arguments to the merge function - * @return a merge function which always returns its first argument - * @see #lastWinsMerger() - * @see #throwingMerger() - */ - public static BinaryOperator firstWinsMerger() { - return (u,v) -> u; - } - - /** - * Returns a merge function, suitable for use in - * {@link Map#merge(Object, Object, BiFunction) Map.merge()} or - * {@link #toMap(Function, Function, BinaryOperator) toMap()}, - * which implements a "last wins" policy. - * - * @param the type of input arguments to the merge function - * @return a merge function which always returns its second argument - * @see #firstWinsMerger() - * @see #throwingMerger() - */ - public static BinaryOperator lastWinsMerger() { - return (u,v) -> v; - } - /** * Simple implementation class for {@code Collector}. * * @param the type of elements to be collected * @param the type of the result */ - private static final class CollectorImpl implements Collector { - private final Supplier resultSupplier; - private final BiFunction accumulator; - private final BinaryOperator combiner; + static class CollectorImpl implements Collector { + private final Supplier supplier; + private final BiConsumer accumulator; + private final BinaryOperator combiner; + private final Function finisher; private final Set characteristics; - CollectorImpl(Supplier resultSupplier, - BiFunction accumulator, - BinaryOperator combiner, + CollectorImpl(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Function finisher, Set characteristics) { - this.resultSupplier = resultSupplier; + this.supplier = supplier; this.accumulator = accumulator; this.combiner = combiner; + this.finisher = finisher; this.characteristics = characteristics; } - CollectorImpl(Supplier resultSupplier, - BiFunction accumulator, - BinaryOperator combiner) { - this(resultSupplier, accumulator, combiner, Collections.emptySet()); + CollectorImpl(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Set characteristics) { + this(supplier, accumulator, combiner, i -> (R) i, characteristics); } @Override - public BiFunction accumulator() { + public BiConsumer accumulator() { return accumulator; } @Override - public Supplier resultSupplier() { - return resultSupplier; + public Supplier supplier() { + return supplier; } @Override - public BinaryOperator combiner() { + public BinaryOperator combiner() { return combiner; } + @Override + public Function finisher() { + return finisher; + } + @Override public Set characteristics() { return characteristics; @@ -224,11 +208,10 @@ public final class Collectors { * {@code Collection}, in encounter order */ public static > - Collector toCollection(Supplier collectionFactory) { - return new CollectorImpl<>(collectionFactory, - (r, t) -> { r.add(t); return r; }, + Collector toCollection(Supplier collectionFactory) { + return new CollectorImpl<>(collectionFactory, Collection::add, (r1, r2) -> { r1.addAll(r2); return r1; }, - CH_STRICT); + CH_ID); } /** @@ -241,36 +224,10 @@ public final class Collectors { * {@code List}, in encounter order */ public static - Collector> toList() { - BiFunction, T, List> accumulator = (list, t) -> { - switch (list.size()) { - case 0: - return Collections.singletonList(t); - case 1: - List newList = new ArrayList<>(); - newList.add(list.get(0)); - newList.add(t); - return newList; - default: - list.add(t); - return list; - } - }; - BinaryOperator> combiner = (left, right) -> { - switch (left.size()) { - case 0: - return right; - case 1: - List newList = new ArrayList<>(left.size() + right.size()); - newList.addAll(left); - newList.addAll(right); - return newList; - default: - left.addAll(right); - return left; - } - }; - return new CollectorImpl<>(Collections::emptyList, accumulator, combiner); + Collector> toList() { + return new CollectorImpl<>((Supplier>) ArrayList::new, List::add, + (left, right) -> { left.addAll(right); return left; }, + CH_ID); } /** @@ -286,44 +243,58 @@ public final class Collectors { * {@code Set} */ public static - Collector> toSet() { - return new CollectorImpl<>((Supplier>) HashSet::new, - (r, t) -> { r.add(t); return r; }, - (r1, r2) -> { r1.addAll(r2); return r1; }, - CH_STRICT_UNORDERED); + Collector> toSet() { + return new CollectorImpl<>((Supplier>) HashSet::new, Set::add, + (left, right) -> { left.addAll(right); return left; }, + CH_UNORDERED_ID); } /** * Returns a {@code Collector} that concatenates the input elements into a - * new {@link StringBuilder}. + * {@code String}, in encounter order. * - * @return a {@code Collector} which collects String elements into a - * {@code StringBuilder}, in encounter order + * @return a {@code Collector} that concatenates the input elements into a + * {@code String}, in encounter order */ - public static Collector toStringBuilder() { - return new CollectorImpl<>(StringBuilder::new, - (r, t) -> { r.append(t); return r; }, - (r1, r2) -> { r1.append(r2); return r1; }, - CH_STRICT); + public static Collector joining() { + return new CollectorImpl( + StringBuilder::new, StringBuilder::append, + (r1, r2) -> { r1.append(r2); return r1; }, + StringBuilder::toString, CH_NOID); } /** - * Returns a {@code Collector} that concatenates the input elements into a - * new {@link StringJoiner}, using the specified delimiter. + * Returns a {@code Collector} that concatenates the input elements, + * separated by the specified delimiter, in encounter order. * * @param delimiter the delimiter to be used between each element - * @return A {@code Collector} which collects String elements into a - * {@code StringJoiner}, in encounter order + * @return A {@code Collector} which concatenates CharSequence elements, + * separated by the specified delimiter, in encounter order */ - public static Collector toStringJoiner(CharSequence delimiter) { - BinaryOperator merger = (sj, other) -> { - if (other.length() > 0) - sj.add(other.toString()); - return sj; - }; - return new CollectorImpl<>(() -> new StringJoiner(delimiter), - (r, t) -> { r.add(t); return r; }, - merger, CH_STRICT); + public static Collector joining(CharSequence delimiter) { + return joining(delimiter, "", ""); + } + + /** + * Returns a {@code Collector} that concatenates the input elements, + * separated by the specified delimiter, with the specified prefix and + * suffix, in encounter order. + * + * @param delimiter the delimiter to be used between each element + * @param prefix the sequence of characters to be used at the beginning + * of the joined result + * @param suffix the sequence of characters to be used at the end + * of the joined result + * @return A {@code Collector} which concatenates CharSequence elements, + * separated by the specified delimiter, in encounter order + */ + public static Collector joining(CharSequence delimiter, + CharSequence prefix, + CharSequence suffix) { + return new CollectorImpl<>( + () -> new StringJoiner(delimiter, prefix, suffix), + StringJoiner::add, StringJoiner::merge, + StringJoiner::toString, CH_NOID); } /** @@ -348,12 +319,13 @@ public final class Collectors { } /** - * Adapts a {@code Collector} to a {@code Collector} by applying - * a mapping function to each input element before accumulation. + * Adapts a {@code Collector} accepting elements of type {@code U} to one + * accepting elements of type {@code T} by applying a mapping function to + * each input element before accumulation. * * @apiNote * The {@code mapping()} collectors are most useful when used in a - * multi-level reduction, downstream of {@code groupingBy} or + * multi-level reduction, such as downstream of a {@code groupingBy} or * {@code partitioningBy}. For example, given a stream of * {@code Person}, to accumulate the set of last names in each city: *
          {@code
          @@ -364,23 +336,27 @@ public final class Collectors {
                *
                * @param  the type of the input elements
                * @param  type of elements accepted by downstream collector
          +     * @param  intermediate accumulation type of the downstream collector
                * @param  result type of collector
                * @param mapper a function to be applied to the input elements
                * @param downstream a collector which will accept mapped values
                * @return a collector which applies the mapping function to the input
                * elements and provides the mapped results to the downstream collector
                */
          -    public static  Collector
          -    mapping(Function mapper, Collector downstream) {
          -        BiFunction downstreamAccumulator = downstream.accumulator();
          -        return new CollectorImpl<>(downstream.resultSupplier(),
          -                                   (r, t) -> downstreamAccumulator.apply(r, mapper.apply(t)),
          -                                   downstream.combiner(), downstream.characteristics());
          +    public static 
          +    Collector mapping(Function mapper,
          +                               Collector downstream) {
          +        BiConsumer downstreamAccumulator = downstream.accumulator();
          +        return new CollectorImpl<>(downstream.supplier(),
          +                                   (r, t) -> downstreamAccumulator.accept(r, mapper.apply(t)),
          +                                   downstream.combiner(), downstream.finisher(),
          +                                   downstream.characteristics());
               }
           
               /**
          -     * Returns a {@code Collector} that counts the number of input
          -     * elements.
          +     * Returns a {@code Collector} accepting elements of type {@code T} that
          +     * counts the number of input elements.  If no elements are present, the
          +     * result is 0.
                *
                * @implSpec
                * This produces a result equivalent to:
          @@ -391,14 +367,14 @@ public final class Collectors {
                * @param  the type of the input elements
                * @return a {@code Collector} that counts the input elements
                */
          -    public static  Collector
          +    public static  Collector
               counting() {
                   return reducing(0L, e -> 1L, Long::sum);
               }
           
               /**
          -     * Returns a {@code Collector} that produces the minimal element
          -     * according to a given {@code Comparator}.
          +     * Returns a {@code Collector} that produces the minimal element according
          +     * to a given {@code Comparator}, described as an {@code Optional}.
                *
                * @implSpec
                * This produces a result equivalent to:
          @@ -410,14 +386,14 @@ public final class Collectors {
                * @param comparator a {@code Comparator} for comparing elements
                * @return a {@code Collector} that produces the minimal value
                */
          -    public static  Collector
          +    public static  Collector>
               minBy(Comparator comparator) {
                   return reducing(BinaryOperator.minBy(comparator));
               }
           
               /**
          -     * Returns a {@code Collector} that produces the maximal element
          -     * according to a given {@code Comparator}.
          +     * Returns a {@code Collector} that produces the maximal element according
          +     * to a given {@code Comparator}, described as an {@code Optional}.
                *
                * @implSpec
                * This produces a result equivalent to:
          @@ -429,39 +405,143 @@ public final class Collectors {
                * @param comparator a {@code Comparator} for comparing elements
                * @return a {@code Collector} that produces the maximal value
                */
          -    public static  Collector
          +    public static  Collector>
               maxBy(Comparator comparator) {
                   return reducing(BinaryOperator.maxBy(comparator));
               }
           
               /**
          -     * Returns a {@code Collector} that produces the sum of a
          -     * long-valued function applied to the input element.
          +     * Returns a {@code Collector} that produces the sum of a integer-valued
          +     * function applied to the input elements.  If no elements are present,
          +     * the result is 0.
                *
          -     * @implSpec
          -     * This produces a result equivalent to:
          -     * 
          {@code
          -     *     reducing(0L, mapper, Long::sum)
          -     * }
          + * @param the type of the input elements + * @param mapper a function extracting the property to be summed + * @return a {@code Collector} that produces the sum of a derived property + */ + public static Collector + summingInt(ToIntFunction mapper) { + return new CollectorImpl( + () -> new int[1], + (a, t) -> { a[0] += mapper.applyAsInt(t); }, + (a, b) -> { a[0] += b[0]; return a; }, + a -> a[0], CH_NOID); + } + + /** + * Returns a {@code Collector} that produces the sum of a long-valued + * function applied to the input elements. If no elements are present, + * the result is 0. + * + * @param the type of the input elements + * @param mapper a function extracting the property to be summed + * @return a {@code Collector} that produces the sum of a derived property + */ + public static Collector + summingLong(ToLongFunction mapper) { + return new CollectorImpl( + () -> new long[1], + (a, t) -> { a[0] += mapper.applyAsLong(t); }, + (a, b) -> { a[0] += b[0]; return a; }, + a -> a[0], CH_NOID); + } + + /** + * Returns a {@code Collector} that produces the sum of a double-valued + * function applied to the input elements. If no elements are present, + * the result is 0. + * + *

          The sum returned can vary depending upon the order in which + * values are recorded, due to accumulated rounding error in + * addition of values of differing magnitudes. Values sorted by increasing + * absolute magnitude tend to yield more accurate results. If any recorded + * value is a {@code NaN} or the sum is at any point a {@code NaN} then the + * sum will be {@code NaN}. + * + * @param the type of the input elements + * @param mapper a function extracting the property to be summed + * @return a {@code Collector} that produces the sum of a derived property + */ + public static Collector + summingDouble(ToDoubleFunction mapper) { + return new CollectorImpl( + () -> new double[1], + (a, t) -> { a[0] += mapper.applyAsDouble(t); }, + (a, b) -> { a[0] += b[0]; return a; }, + a -> a[0], CH_NOID); + } + + /** + * Returns a {@code Collector} that produces the arithmetic mean of an integer-valued + * function applied to the input elements. If no elements are present, + * the result is 0. * * @param the type of the input elements * @param mapper a function extracting the property to be summed * @return a {@code Collector} that produces the sum of a derived property */ - public static Collector - sumBy(Function mapper) { - return reducing(0L, mapper, Long::sum); + public static Collector + averagingInt(ToIntFunction mapper) { + return new CollectorImpl( + () -> new long[2], + (a, t) -> { a[0] += mapper.applyAsInt(t); a[1]++; }, + (a, b) -> { a[0] += b[0]; a[1] += b[1]; return a; }, + a -> (a[1] == 0) ? 0.0d : (double) a[0] / a[1], CH_NOID); } /** - * Returns a {@code Collector} which performs a reduction of its - * input elements under a specified {@code BinaryOperator}. + * Returns a {@code Collector} that produces the arithmetic mean of a long-valued + * function applied to the input elements. If no elements are present, + * the result is 0. + * + * @param the type of the input elements + * @param mapper a function extracting the property to be summed + * @return a {@code Collector} that produces the sum of a derived property + */ + public static Collector + averagingLong(ToLongFunction mapper) { + return new CollectorImpl( + () -> new long[2], + (a, t) -> { a[0] += mapper.applyAsLong(t); a[1]++; }, + (a, b) -> { a[0] += b[0]; a[1] += b[1]; return a; }, + a -> (a[1] == 0) ? 0.0d : (double) a[0] / a[1], CH_NOID); + } + + /** + * Returns a {@code Collector} that produces the arithmetic mean of a double-valued + * function applied to the input elements. If no elements are present, + * the result is 0. + * + *

          The average returned can vary depending upon the order in which + * values are recorded, due to accumulated rounding error in + * addition of values of differing magnitudes. Values sorted by increasing + * absolute magnitude tend to yield more accurate results. If any recorded + * value is a {@code NaN} or the sum is at any point a {@code NaN} then the + * average will be {@code NaN}. + * + * @param the type of the input elements + * @param mapper a function extracting the property to be summed + * @return a {@code Collector} that produces the sum of a derived property + */ + public static Collector + averagingDouble(ToDoubleFunction mapper) { + return new CollectorImpl( + () -> new double[2], + (a, t) -> { a[0] += mapper.applyAsDouble(t); a[1]++; }, + (a, b) -> { a[0] += b[0]; a[1] += b[1]; return a; }, + a -> (a[1] == 0) ? 0.0d : a[0] / a[1], CH_NOID); + } + + /** + * Returns a {@code Collector} which performs a reduction of its + * input elements under a specified {@code BinaryOperator} using the + * provided identity. * * @apiNote * The {@code reducing()} collectors are most useful when used in a * multi-level reduction, downstream of {@code groupingBy} or * {@code partitioningBy}. To perform a simple reduction on a stream, - * use {@link Stream#reduce(BinaryOperator)} instead. + * use {@link Stream#reduce(Object, BinaryOperator)}} instead. * * @param element type for the input and output of the reduction * @param identity the identity value for the reduction (also, the value @@ -472,14 +552,25 @@ public final class Collectors { * @see #reducing(BinaryOperator) * @see #reducing(Object, Function, BinaryOperator) */ - public static Collector + public static Collector reducing(T identity, BinaryOperator op) { - return new CollectorImpl<>(() -> identity, (r, t) -> (r == null ? t : op.apply(r, t)), op); + return new CollectorImpl<>( + boxSupplier(identity), + (a, t) -> { a[0] = op.apply(a[0], t); }, + (a, b) -> { a[0] = op.apply(a[0], b[0]); return a; }, + a -> a[0], + CH_NOID); + } + + @SuppressWarnings("unchecked") + private static Supplier boxSupplier(T identity) { + return () -> (T[]) new Object[] { identity }; } /** - * Returns a {@code Collector} which performs a reduction of its - * input elements under a specified {@code BinaryOperator}. + * Returns a {@code Collector} which performs a reduction of its + * input elements under a specified {@code BinaryOperator}. The result + * is described as an {@code Optional}. * * @apiNote * The {@code reducing()} collectors are most useful when used in a @@ -491,15 +582,8 @@ public final class Collectors { * person in each city: *

          {@code
                *     Comparator byHeight = Comparator.comparing(Person::getHeight);
          -     *     BinaryOperator tallerOf = BinaryOperator.greaterOf(byHeight);
                *     Map tallestByCity
          -     *         = people.stream().collect(groupingBy(Person::getCity, reducing(tallerOf)));
          -     * }
          - * - * @implSpec - * The default implementation is equivalent to: - *
          {@code
          -     *     reducing(null, op);
          +     *         = people.stream().collect(groupingBy(Person::getCity, reducing(BinaryOperator.maxBy(byHeight))));
                * }
          * * @param element type for the input and output of the reduction @@ -509,13 +593,32 @@ public final class Collectors { * @see #reducing(Object, BinaryOperator) * @see #reducing(Object, Function, BinaryOperator) */ - public static Collector + public static Collector> reducing(BinaryOperator op) { - return reducing(null, op); + class OptionalBox implements Consumer { + T value = null; + boolean present = false; + + @Override + public void accept(T t) { + if (present) { + value = op.apply(value, t); + } + else { + value = t; + present = true; + } + } + } + + return new CollectorImpl>( + OptionalBox::new, OptionalBox::accept, + (a, b) -> { if (b.present) a.accept(b.value); return a; }, + a -> Optional.ofNullable(a.value), CH_NOID); } /** - * Returns a {@code Collector} which performs a reduction of its + * Returns a {@code Collector} which performs a reduction of its * input elements under a specified mapping function and * {@code BinaryOperator}. This is a generalization of * {@link #reducing(Object, BinaryOperator)} which allows a transformation @@ -524,17 +627,17 @@ public final class Collectors { * @apiNote * The {@code reducing()} collectors are most useful when used in a * multi-level reduction, downstream of {@code groupingBy} or - * {@code partitioningBy}. To perform a simple reduction on a stream, - * use {@link Stream#reduce(BinaryOperator)} instead. + * {@code partitioningBy}. To perform a simple map-reduce on a stream, + * use {@link Stream#map(Function)} and {@link Stream#reduce(Object, BinaryOperator)} + * instead. * *

          For example, given a stream of {@code Person}, to calculate the longest * last name of residents in each city: *

          {@code
                *     Comparator byLength = Comparator.comparing(String::length);
          -     *     BinaryOperator longerOf = BinaryOperator.greaterOf(byLength);
                *     Map longestLastNameByCity
                *         = people.stream().collect(groupingBy(Person::getCity,
          -     *                                              reducing(Person::getLastName, longerOf)));
          +     *                                              reducing(Person::getLastName, BinaryOperator.maxBy(byLength))));
                * }
          * * @param the type of the input elements @@ -549,18 +652,20 @@ public final class Collectors { * @see #reducing(BinaryOperator) */ public static - Collector reducing(U identity, - Function mapper, - BinaryOperator op) { - return new CollectorImpl<>(() -> identity, - (r, t) -> (r == null ? mapper.apply(t) : op.apply(r, mapper.apply(t))), - op); + Collector reducing(U identity, + Function mapper, + BinaryOperator op) { + return new CollectorImpl<>( + boxSupplier(identity), + (a, t) -> { a[0] = op.apply(a[0], mapper.apply(t)); }, + (a, b) -> { a[0] = op.apply(a[0], b[0]); return a; }, + a -> a[0], CH_NOID); } /** * Returns a {@code Collector} implementing a "group by" operation on * input elements of type {@code T}, grouping elements according to a - * classification function. + * classification function, and returning the results in a {@code Map}. * *

          The classification function maps elements to some key type {@code K}. * The collector produces a {@code Map>} whose keys are the @@ -586,9 +691,9 @@ public final class Collectors { * @see #groupingBy(Function, Supplier, Collector) * @see #groupingByConcurrent(Function) */ - public static - Collector>> groupingBy(Function classifier) { - return groupingBy(classifier, HashMap::new, toList()); + public static Collector>> + groupingBy(Function classifier) { + return groupingBy(classifier, toList()); } /** @@ -615,6 +720,7 @@ public final class Collectors { * * @param the type of the input elements * @param the type of the keys + * @param the intermediate accumulation type of the downstream collector * @param the result type of the downstream reduction * @param classifier a classifier function mapping input elements to keys * @param downstream a {@code Collector} implementing the downstream reduction @@ -624,9 +730,9 @@ public final class Collectors { * @see #groupingBy(Function, Supplier, Collector) * @see #groupingByConcurrent(Function, Collector) */ - public static - Collector> groupingBy(Function classifier, - Collector downstream) { + public static + Collector> groupingBy(Function classifier, + Collector downstream) { return groupingBy(classifier, HashMap::new, downstream); } @@ -653,6 +759,7 @@ public final class Collectors { * * @param the type of the input elements * @param the type of the keys + * @param the intermediate accumulation type of the downstream collector * @param the result type of the downstream reduction * @param the type of the resulting {@code Map} * @param classifier a classifier function mapping input elements to keys @@ -665,25 +772,39 @@ public final class Collectors { * @see #groupingBy(Function) * @see #groupingByConcurrent(Function, Supplier, Collector) */ - public static > - Collector groupingBy(Function classifier, - Supplier mapFactory, - Collector downstream) { - Supplier downstreamSupplier = downstream.resultSupplier(); - BiFunction downstreamAccumulator = downstream.accumulator(); - BiFunction accumulator = (m, t) -> { + public static > + Collector groupingBy(Function classifier, + Supplier mapFactory, + Collector downstream) { + Supplier downstreamSupplier = downstream.supplier(); + BiConsumer downstreamAccumulator = downstream.accumulator(); + BiConsumer, T> accumulator = (m, t) -> { K key = Objects.requireNonNull(classifier.apply(t), "element cannot be mapped to a null key"); - D oldContainer = m.computeIfAbsent(key, k -> downstreamSupplier.get()); - D newContainer = downstreamAccumulator.apply(oldContainer, t); - if (newContainer != oldContainer) - m.put(key, newContainer); - return m; + A container = m.computeIfAbsent(key, k -> downstreamSupplier.get()); + downstreamAccumulator.accept(container, t); }; - return new CollectorImpl<>(mapFactory, accumulator, mapMerger(downstream.combiner()), CH_STRICT); + BinaryOperator> merger = Collectors.>mapMerger(downstream.combiner()); + @SuppressWarnings("unchecked") + Supplier> mangledFactory = (Supplier>) mapFactory; + + if (downstream.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)) { + return new CollectorImpl<>(mangledFactory, accumulator, merger, CH_ID); + } + else { + @SuppressWarnings("unchecked") + Function downstreamFinisher = (Function) downstream.finisher(); + Function, M> finisher = intermediate -> { + intermediate.replaceAll((k, v) -> downstreamFinisher.apply(v)); + @SuppressWarnings("unchecked") + M castResult = (M) intermediate; + return castResult; + }; + return new CollectorImpl<>(mangledFactory, accumulator, merger, finisher, CH_NOID); + } } /** - * Returns a {@code Collector} implementing a concurrent "group by" + * Returns a concurrent {@code Collector} implementing a "group by" * operation on input elements of type {@code T}, grouping elements * according to a classification function. * @@ -716,12 +837,13 @@ public final class Collectors { * @see #groupingByConcurrent(Function, Supplier, Collector) */ public static - Collector>> groupingByConcurrent(Function classifier) { + Collector>> + groupingByConcurrent(Function classifier) { return groupingByConcurrent(classifier, ConcurrentHashMap::new, toList()); } /** - * Returns a {@code Collector} implementing a concurrent cascaded "group by" + * Returns a concurrent {@code Collector} implementing a cascaded "group by" * operation on input elements of type {@code T}, grouping elements * according to a classification function, and then performing a reduction * operation on the values associated with a given key using the specified @@ -739,12 +861,13 @@ public final class Collectors { * where the city names are sorted: *

          {@code
                *     ConcurrentMap> namesByCity
          -     *         = people.stream().collect(groupingByConcurrent(Person::getCity, TreeMap::new,
          +     *         = people.stream().collect(groupingByConcurrent(Person::getCity, ConcurrentSkipListMap::new,
                *                                                        mapping(Person::getLastName, toSet())));
                * }
          * * @param the type of the input elements * @param the type of the keys + * @param the intermediate accumulation type of the downstream collector * @param the result type of the downstream reduction * @param classifier a classifier function mapping input elements to keys * @param downstream a {@code Collector} implementing the downstream reduction @@ -754,9 +877,9 @@ public final class Collectors { * @see #groupingByConcurrent(Function) * @see #groupingByConcurrent(Function, Supplier, Collector) */ - public static - Collector> groupingByConcurrent(Function classifier, - Collector downstream) { + public static + Collector> groupingByConcurrent(Function classifier, + Collector downstream) { return groupingByConcurrent(classifier, ConcurrentHashMap::new, downstream); } @@ -787,6 +910,7 @@ public final class Collectors { * * @param the type of the input elements * @param the type of the keys + * @param the intermediate accumulation type of the downstream collector * @param the result type of the downstream reduction * @param the type of the resulting {@code ConcurrentMap} * @param classifier a classifier function mapping input elements to keys @@ -799,51 +923,46 @@ public final class Collectors { * @see #groupingByConcurrent(Function, Collector) * @see #groupingBy(Function, Supplier, Collector) */ - public static > - Collector groupingByConcurrent(Function classifier, - Supplier mapFactory, - Collector downstream) { - Supplier downstreamSupplier = downstream.resultSupplier(); - BiFunction downstreamAccumulator = downstream.accumulator(); - BinaryOperator combiner = mapMerger(downstream.combiner()); + public static > + Collector groupingByConcurrent(Function classifier, + Supplier mapFactory, + Collector downstream) { + Supplier downstreamSupplier = downstream.supplier(); + BiConsumer downstreamAccumulator = downstream.accumulator(); + BinaryOperator> merger = Collectors.>mapMerger(downstream.combiner()); + @SuppressWarnings("unchecked") + Supplier> mangledFactory = (Supplier>) mapFactory; + BiConsumer, T> accumulator; if (downstream.characteristics().contains(Collector.Characteristics.CONCURRENT)) { - BiFunction accumulator = (m, t) -> { + accumulator = (m, t) -> { K key = Objects.requireNonNull(classifier.apply(t), "element cannot be mapped to a null key"); - downstreamAccumulator.apply(m.computeIfAbsent(key, k -> downstreamSupplier.get()), t); - return m; + A resultContainer = m.computeIfAbsent(key, k -> downstreamSupplier.get()); + downstreamAccumulator.accept(resultContainer, t); }; - return new CollectorImpl<>(mapFactory, accumulator, combiner, CH_CONCURRENT); - } else if (downstream.characteristics().contains(Collector.Characteristics.STRICTLY_MUTATIVE)) { - BiFunction accumulator = (m, t) -> { + } + else { + accumulator = (m, t) -> { K key = Objects.requireNonNull(classifier.apply(t), "element cannot be mapped to a null key"); - D resultContainer = m.computeIfAbsent(key, k -> downstreamSupplier.get()); + A resultContainer = m.computeIfAbsent(key, k -> downstreamSupplier.get()); synchronized (resultContainer) { - downstreamAccumulator.apply(resultContainer, t); + downstreamAccumulator.accept(resultContainer, t); } - return m; }; - return new CollectorImpl<>(mapFactory, accumulator, combiner, CH_CONCURRENT); - } else { - BiFunction accumulator = (m, t) -> { - K key = Objects.requireNonNull(classifier.apply(t), "element cannot be mapped to a null key"); - do { - D oldResult = m.computeIfAbsent(key, k -> downstreamSupplier.get()); - if (oldResult == null) { - if (m.putIfAbsent(key, downstreamAccumulator.apply(null, t)) == null) - return m; - } else { - synchronized (oldResult) { - if (m.get(key) != oldResult) - continue; - D newResult = downstreamAccumulator.apply(oldResult, t); - if (oldResult != newResult) - m.put(key, newResult); - return m; - } - } - } while (true); + } + + if (downstream.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)) { + return new CollectorImpl<>(mangledFactory, accumulator, merger, CH_CONCURRENT_ID); + } + else { + @SuppressWarnings("unchecked") + Function downstreamFinisher = (Function) downstream.finisher(); + Function, M> finisher = intermediate -> { + intermediate.replaceAll((k, v) -> downstreamFinisher.apply(v)); + @SuppressWarnings("unchecked") + M castResult = (M) intermediate; + return castResult; }; - return new CollectorImpl<>(mapFactory, accumulator, combiner, CH_CONCURRENT); + return new CollectorImpl<>(mangledFactory, accumulator, merger, finisher, CH_CONCURRENT_NOID); } } @@ -862,7 +981,7 @@ public final class Collectors { * @see #partitioningBy(Predicate, Collector) */ public static - Collector>> partitioningBy(Predicate predicate) { + Collector>> partitioningBy(Predicate predicate) { return partitioningBy(predicate, toList()); } @@ -877,6 +996,7 @@ public final class Collectors { * serializability, or thread-safety of the {@code Map} returned. * * @param the type of the input elements + * @param the intermediate accumulation type of the downstream collector * @param the result type of the downstream reduction * @param predicate a predicate used for classifying input elements * @param downstream a {@code Collector} implementing the downstream @@ -886,52 +1006,43 @@ public final class Collectors { * * @see #partitioningBy(Predicate) */ - public static - Collector> partitioningBy(Predicate predicate, - Collector downstream) { - BiFunction downstreamAccumulator = downstream.accumulator(); - BiFunction, T, Map> accumulator = (result, t) -> { + public static + Collector> partitioningBy(Predicate predicate, + Collector downstream) { + @SuppressWarnings("unchecked") + BiConsumer downstreamAccumulator = (BiConsumer) downstream.accumulator(); + BiConsumer, T> accumulator = (result, t) -> { Partition asPartition = ((Partition) result); - if (predicate.test(t)) { - D newResult = downstreamAccumulator.apply(asPartition.forTrue, t); - if (newResult != asPartition.forTrue) - asPartition.forTrue = newResult; - } else { - D newResult = downstreamAccumulator.apply(asPartition.forFalse, t); - if (newResult != asPartition.forFalse) - asPartition.forFalse = newResult; - } - return result; + downstreamAccumulator.accept(predicate.test(t) ? asPartition.forTrue : asPartition.forFalse, t); }; - return new CollectorImpl<>(() -> new Partition<>(downstream.resultSupplier().get(), - downstream.resultSupplier().get()), - accumulator, partitionMerger(downstream.combiner()), CH_STRICT); - } - - /** - * Merge function for two partitions, given a merge function for the - * elements. - */ - private static BinaryOperator> partitionMerger(BinaryOperator op) { - return (m1, m2) -> { - Partition left = (Partition) m1; - Partition right = (Partition) m2; - if (left.forFalse == null) - left.forFalse = right.forFalse; - else if (right.forFalse != null) - left.forFalse = op.apply(left.forFalse, right.forFalse); - if (left.forTrue == null) - left.forTrue = right.forTrue; - else if (right.forTrue != null) - left.forTrue = op.apply(left.forTrue, right.forTrue); - return left; + BinaryOperator op = downstream.combiner(); + BinaryOperator> merger = (m1, m2) -> { + Partition left = (Partition) m1; + Partition right = (Partition) m2; + return new Partition<>(op.apply(left.forTrue, right.forTrue), + op.apply(left.forFalse, right.forFalse)); }; + Supplier> supplier = () -> new Partition<>(downstream.supplier().get(), + downstream.supplier().get()); + if (downstream.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)) { + return new CollectorImpl<>(supplier, accumulator, merger, CH_ID); + } + else { + Function, Map> finisher = (Map par) -> { + Partition asAPartition = (Partition) par; + return new Partition<>(downstream.finisher().apply(asAPartition.forTrue), + downstream.finisher().apply(asAPartition.forFalse)); + }; + return new CollectorImpl<>(supplier, accumulator, merger, finisher, CH_NOID); + } } /** - * Accumulate elements into a {@code Map} whose keys and values are the - * result of applying mapping functions to the input elements. - * If the mapped keys contains duplicates (according to + * Returns a {@code Collector} that accumulate elements into a + * {@code Map} whose keys and values are the result of applying the provided + * mapping functions to the input elements. + * + *

          If the mapped keys contains duplicates (according to * {@link Object#equals(Object)}), an {@code IllegalStateException} is * thrown when the collection operation is performed. If the mapped keys * may have duplicates, use {@link #toMap(Function, Function, BinaryOperator)} @@ -970,24 +1081,26 @@ public final class Collectors { * @see #toConcurrentMap(Function, Function) */ public static - Collector> toMap(Function keyMapper, - Function valueMapper) { + Collector> toMap(Function keyMapper, + Function valueMapper) { return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new); } /** - * Accumulate elements into a {@code Map} whose keys and values are the - * result of applying mapping functions to the input elements. If the mapped + * Returns a {@code Collector} that accumulate elements into a + * {@code Map} whose keys and values are the result of applying the provided + * mapping functions to the input elements. + * + *

          If the mapped * keys contains duplicates (according to {@link Object#equals(Object)}), * the value mapping function is applied to each equal element, and the * results are merged using the provided merging function. * * @apiNote * There are multiple ways to deal with collisions between multiple elements - * mapping to the same key. There are some predefined merging functions, - * such as {@link #throwingMerger()}, {@link #firstWinsMerger()}, and - * {@link #lastWinsMerger()}, that implement common policies, or you can - * implement custom policies easily. For example, if you have a stream + * mapping to the same key. The other forms of {@code toMap} simply use + * a merge function that throws unconditionally, but you can easily write + * more flexible merge policies. For example, if you have a stream * of {@code Person}, and you want to produce a "phone book" mapping name to * address, but it is possible that two persons have the same name, you can * do as follows to gracefully deals with these collisions, and produce a @@ -1018,15 +1131,18 @@ public final class Collectors { * @see #toConcurrentMap(Function, Function, BinaryOperator) */ public static - Collector> toMap(Function keyMapper, - Function valueMapper, - BinaryOperator mergeFunction) { + Collector> toMap(Function keyMapper, + Function valueMapper, + BinaryOperator mergeFunction) { return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new); } /** - * Accumulate elements into a {@code Map} whose keys and values are the - * result of applying mapping functions to the input elements. If the mapped + * Returns a {@code Collector} that accumulate elements into a + * {@code Map} whose keys and values are the result of applying the provided + * mapping functions to the input elements. + * + *

          If the mapped * keys contains duplicates (according to {@link Object#equals(Object)}), * the value mapping function is applied to each equal element, and the * results are merged using the provided merging function. The {@code Map} @@ -1054,22 +1170,22 @@ public final class Collectors { * @see #toConcurrentMap(Function, Function, BinaryOperator, Supplier) */ public static > - Collector toMap(Function keyMapper, - Function valueMapper, - BinaryOperator mergeFunction, - Supplier mapSupplier) { - BiFunction accumulator - = (map, element) -> { - map.merge(keyMapper.apply(element), valueMapper.apply(element), mergeFunction); - return map; - }; - return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_STRICT); + Collector toMap(Function keyMapper, + Function valueMapper, + BinaryOperator mergeFunction, + Supplier mapSupplier) { + BiConsumer accumulator + = (map, element) -> map.merge(keyMapper.apply(element), + valueMapper.apply(element), mergeFunction); + return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID); } /** - * Accumulate elements into a {@code ConcurrentMap} whose keys and values - * are the result of applying mapping functions to the input elements. - * If the mapped keys contains duplicates (according to + * Returns a {@code Collector} that accumulate elements into a + * {@code ConcurrentMap} whose keys and values are the result of applying + * the provided mapping functions to the input elements. + * + *

          If the mapped keys contains duplicates (according to * {@link Object#equals(Object)}), an {@code IllegalStateException} is * thrown when the collection operation is performed. If the mapped keys * may have duplicates, use @@ -1112,24 +1228,25 @@ public final class Collectors { * @see #toConcurrentMap(Function, Function, BinaryOperator, Supplier) */ public static - Collector> toConcurrentMap(Function keyMapper, - Function valueMapper) { + Collector> toConcurrentMap(Function keyMapper, + Function valueMapper) { return toConcurrentMap(keyMapper, valueMapper, throwingMerger(), ConcurrentHashMap::new); } /** - * Accumulate elements into a {@code ConcurrentMap} whose keys and values - * are the result of applying mapping functions to the input elements. If - * the mapped keys contains duplicates (according to {@link Object#equals(Object)}), + * Returns a {@code Collector} that accumulate elements into a + * {@code ConcurrentMap} whose keys and values are the result of applying + * the provided mapping functions to the input elements. + * + *

          If the mapped keys contains duplicates (according to {@link Object#equals(Object)}), * the value mapping function is applied to each equal element, and the * results are merged using the provided merging function. * * @apiNote * There are multiple ways to deal with collisions between multiple elements - * mapping to the same key. There are some predefined merging functions, - * such as {@link #throwingMerger()}, {@link #firstWinsMerger()}, and - * {@link #lastWinsMerger()}, that implement common policies, or you can - * implement custom policies easily. For example, if you have a stream + * mapping to the same key. The other forms of {@code toConcurrentMap} simply use + * a merge function that throws unconditionally, but you can easily write + * more flexible merge policies. For example, if you have a stream * of {@code Person}, and you want to produce a "phone book" mapping name to * address, but it is possible that two persons have the same name, you can * do as follows to gracefully deals with these collisions, and produce a @@ -1163,16 +1280,19 @@ public final class Collectors { * @see #toMap(Function, Function, BinaryOperator) */ public static - Collector> toConcurrentMap(Function keyMapper, - Function valueMapper, - BinaryOperator mergeFunction) { + Collector> + toConcurrentMap(Function keyMapper, + Function valueMapper, + BinaryOperator mergeFunction) { return toConcurrentMap(keyMapper, valueMapper, mergeFunction, ConcurrentHashMap::new); } /** - * Accumulate elements into a {@code ConcurrentMap} whose keys and values - * are the result of applying mapping functions to the input elements. If - * the mapped keys contains duplicates (according to {@link Object#equals(Object)}), + * Returns a {@code Collector} that accumulate elements into a + * {@code ConcurrentMap} whose keys and values are the result of applying + * the provided mapping functions to the input elements. + * + *

          If the mapped keys contains duplicates (according to {@link Object#equals(Object)}), * the value mapping function is applied to each equal element, and the * results are merged using the provided merging function. The * {@code ConcurrentMap} is created by a provided supplier function. @@ -1202,15 +1322,14 @@ public final class Collectors { * @see #toMap(Function, Function, BinaryOperator, Supplier) */ public static > - Collector toConcurrentMap(Function keyMapper, - Function valueMapper, - BinaryOperator mergeFunction, - Supplier mapSupplier) { - BiFunction accumulator = (map, element) -> { - map.merge(keyMapper.apply(element), valueMapper.apply(element), mergeFunction); - return map; - }; - return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_CONCURRENT); + Collector toConcurrentMap(Function keyMapper, + Function valueMapper, + BinaryOperator mergeFunction, + Supplier mapSupplier) { + BiConsumer accumulator + = (map, element) -> map.merge(keyMapper.apply(element), + valueMapper.apply(element), mergeFunction); + return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_CONCURRENT_ID); } /** @@ -1222,14 +1341,15 @@ public final class Collectors { * @param mapper a mapping function to apply to each element * @return a {@code Collector} implementing the summary-statistics reduction * - * @see #toDoubleSummaryStatistics(ToDoubleFunction) - * @see #toLongSummaryStatistics(ToLongFunction) + * @see #summarizingDouble(ToDoubleFunction) + * @see #summarizingLong(ToLongFunction) */ public static - Collector toIntSummaryStatistics(ToIntFunction mapper) { - return new CollectorImpl<>(IntSummaryStatistics::new, - (r, t) -> { r.accept(mapper.applyAsInt(t)); return r; }, - (l, r) -> { l.combine(r); return l; }, CH_STRICT); + Collector summarizingInt(ToIntFunction mapper) { + return new CollectorImpl( + IntSummaryStatistics::new, + (r, t) -> r.accept(mapper.applyAsInt(t)), + (l, r) -> { l.combine(r); return l; }, CH_ID); } /** @@ -1241,14 +1361,15 @@ public final class Collectors { * @param mapper the mapping function to apply to each element * @return a {@code Collector} implementing the summary-statistics reduction * - * @see #toDoubleSummaryStatistics(ToDoubleFunction) - * @see #toIntSummaryStatistics(ToIntFunction) + * @see #summarizingDouble(ToDoubleFunction) + * @see #summarizingInt(ToIntFunction) */ public static - Collector toLongSummaryStatistics(ToLongFunction mapper) { - return new CollectorImpl<>(LongSummaryStatistics::new, - (r, t) -> { r.accept(mapper.applyAsLong(t)); return r; }, - (l, r) -> { l.combine(r); return l; }, CH_STRICT); + Collector summarizingLong(ToLongFunction mapper) { + return new CollectorImpl( + LongSummaryStatistics::new, + (r, t) -> r.accept(mapper.applyAsLong(t)), + (l, r) -> { l.combine(r); return l; }, CH_ID); } /** @@ -1260,14 +1381,15 @@ public final class Collectors { * @param mapper a mapping function to apply to each element * @return a {@code Collector} implementing the summary-statistics reduction * - * @see #toLongSummaryStatistics(ToLongFunction) - * @see #toIntSummaryStatistics(ToIntFunction) + * @see #summarizingLong(ToLongFunction) + * @see #summarizingInt(ToIntFunction) */ public static - Collector toDoubleSummaryStatistics(ToDoubleFunction mapper) { - return new CollectorImpl<>(DoubleSummaryStatistics::new, - (r, t) -> { r.accept(mapper.applyAsDouble(t)); return r; }, - (l, r) -> { l.combine(r); return l; }, CH_STRICT); + Collector summarizingDouble(ToDoubleFunction mapper) { + return new CollectorImpl( + DoubleSummaryStatistics::new, + (r, t) -> r.accept(mapper.applyAsDouble(t)), + (l, r) -> { l.combine(r); return l; }, CH_ID); } /** @@ -1276,8 +1398,8 @@ public final class Collectors { private static final class Partition extends AbstractMap implements Map { - T forTrue; - T forFalse; + final T forTrue; + final T forFalse; Partition(T forTrue, T forFalse) { this.forTrue = forTrue; @@ -1289,24 +1411,9 @@ public final class Collectors { return new AbstractSet>() { @Override public Iterator> iterator() { - - return new Iterator>() { - int state = 0; - - @Override - public boolean hasNext() { - return state < 2; - } - - @Override - public Map.Entry next() { - if (state >= 2) - throw new NoSuchElementException(); - return (state++ == 0) - ? new SimpleImmutableEntry<>(false, forFalse) - : new SimpleImmutableEntry<>(true, forTrue); - } - }; + Map.Entry falseEntry = new SimpleImmutableEntry<>(false, forFalse); + Map.Entry trueEntry = new SimpleImmutableEntry<>(true, forTrue); + return Arrays.asList(falseEntry, trueEntry).iterator(); } @Override diff --git a/src/share/classes/java/util/stream/DelegatingStream.java b/src/share/classes/java/util/stream/DelegatingStream.java index b3a0002e15c087486fd901b46be865040a290888..2dab1a4430c4e79099fb7e2d64be0423d945c052 100644 --- a/src/share/classes/java/util/stream/DelegatingStream.java +++ b/src/share/classes/java/util/stream/DelegatingStream.java @@ -209,7 +209,7 @@ public class DelegatingStream implements Stream { } @Override - public R collect(Collector collector) { + public R collect(Collector collector) { return delegate.collect(collector); } diff --git a/src/share/classes/java/util/stream/DoublePipeline.java b/src/share/classes/java/util/stream/DoublePipeline.java index 52fd60f4163ab7366a0ad1eb500a949d09bce16c..44c8ff0f5e7a1f8c74e27c0e3e84e4d0dd7678b3 100644 --- a/src/share/classes/java/util/stream/DoublePipeline.java +++ b/src/share/classes/java/util/stream/DoublePipeline.java @@ -147,6 +147,7 @@ abstract class DoublePipeline } @Override + @SuppressWarnings("unchecked") final Spliterator.OfDouble lazySpliterator(Supplier> supplier) { return new StreamSpliterators.DelegatingSpliterator.OfDouble((Supplier) supplier); } @@ -209,6 +210,7 @@ abstract class DoublePipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedDouble(sink) { @Override + @SuppressWarnings("unchecked") public void accept(double t) { downstream.accept(mapper.apply(t)); } diff --git a/src/share/classes/java/util/stream/DoubleStream.java b/src/share/classes/java/util/stream/DoubleStream.java index 50c9666befda8d5c35252cca3386fcb537dea942..93a83991e0b2000a16ff0d748d041212d5391e71 100644 --- a/src/share/classes/java/util/stream/DoubleStream.java +++ b/src/share/classes/java/util/stream/DoubleStream.java @@ -527,7 +527,7 @@ public interface DoubleStream extends BaseStream { long count(); /** - * Returns an {@code OptionalDouble} describing the average of elements of + * Returns an {@code OptionalDouble} describing the arithmetic mean of elements of * this stream, or an empty optional if this stream is empty. The average * returned can vary depending upon the order in which elements are * encountered. This is due to accumulated rounding error in addition of diff --git a/src/share/classes/java/util/stream/FindOps.java b/src/share/classes/java/util/stream/FindOps.java index 6b34b24244d2493ba918e5a4719505b1f6424d64..197d99c08900359060b2023b09172fab6a3efbd9 100644 --- a/src/share/classes/java/util/stream/FindOps.java +++ b/src/share/classes/java/util/stream/FindOps.java @@ -246,6 +246,7 @@ final class FindOps { * @param Output element type from the stream pipeline * @param Result type from the find operation */ + @SuppressWarnings("serial") private static final class FindTask extends AbstractShortCircuitTask> { private final FindOp op; diff --git a/src/share/classes/java/util/stream/ForEachOps.java b/src/share/classes/java/util/stream/ForEachOps.java index 0d9ea6a69c393f25c4c782e3983be2a164723d28..2c343fbc3c121eb9a14c90288ef068963d36c56d 100644 --- a/src/share/classes/java/util/stream/ForEachOps.java +++ b/src/share/classes/java/util/stream/ForEachOps.java @@ -249,6 +249,7 @@ final class ForEachOps { } /** A {@code ForkJoinTask} for performing a parallel for-each operation */ + @SuppressWarnings("serial") static final class ForEachTask extends CountedCompleter { private Spliterator spliterator; private final Sink sink; @@ -314,6 +315,7 @@ final class ForEachOps { * A {@code ForkJoinTask} for performing a parallel for-each operation * which visits the elements in encounter order */ + @SuppressWarnings("serial") static final class ForEachOrderedTask extends CountedCompleter { private final PipelineHelper helper; private Spliterator spliterator; diff --git a/src/share/classes/java/util/stream/IntPipeline.java b/src/share/classes/java/util/stream/IntPipeline.java index 10cfb89071989311a0d9558257c39f70180e122a..d380e4a3bf589c9708f90bdf71f65f192d9c5c11 100644 --- a/src/share/classes/java/util/stream/IntPipeline.java +++ b/src/share/classes/java/util/stream/IntPipeline.java @@ -150,6 +150,7 @@ abstract class IntPipeline } @Override + @SuppressWarnings("unchecked") final Spliterator.OfInt lazySpliterator(Supplier> supplier) { return new StreamSpliterators.DelegatingSpliterator.OfInt((Supplier) supplier); } @@ -190,6 +191,7 @@ abstract class IntPipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedInt(sink) { @Override + @SuppressWarnings("unchecked") public void accept(int t) { downstream.accept((long) t); } @@ -206,6 +208,7 @@ abstract class IntPipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedInt(sink) { @Override + @SuppressWarnings("unchecked") public void accept(int t) { downstream.accept((double) t); } @@ -245,6 +248,7 @@ abstract class IntPipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedInt(sink) { @Override + @SuppressWarnings("unchecked") public void accept(int t) { downstream.accept(mapper.apply(t)); } diff --git a/src/share/classes/java/util/stream/IntStream.java b/src/share/classes/java/util/stream/IntStream.java index ce515e992a6fddf1d6f5ffa9c5bd83cfecc84c0b..883b03cbd3d95e830afc62bad3b0b2d4f1fb0f68 100644 --- a/src/share/classes/java/util/stream/IntStream.java +++ b/src/share/classes/java/util/stream/IntStream.java @@ -517,7 +517,7 @@ public interface IntStream extends BaseStream { long count(); /** - * Returns an {@code OptionalDouble} describing the average of elements of + * Returns an {@code OptionalDouble} describing the arithmetic mean of elements of * this stream, or an empty optional if this stream is empty. This is a * special case of a * reduction. diff --git a/src/share/classes/java/util/stream/LongPipeline.java b/src/share/classes/java/util/stream/LongPipeline.java index e52a5cade168f4757a114a73c567ce10d4c3c970..083f7bb8b2b5fc3107d7592a812666f70536b0cb 100644 --- a/src/share/classes/java/util/stream/LongPipeline.java +++ b/src/share/classes/java/util/stream/LongPipeline.java @@ -148,6 +148,7 @@ abstract class LongPipeline } @Override + @SuppressWarnings("unchecked") final Spliterator.OfLong lazySpliterator(Supplier> supplier) { return new StreamSpliterators.DelegatingSpliterator.OfLong((Supplier) supplier); } @@ -209,6 +210,7 @@ abstract class LongPipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedLong(sink) { @Override + @SuppressWarnings("unchecked") public void accept(long t) { downstream.accept(mapper.applyAsLong(t)); } @@ -226,6 +228,7 @@ abstract class LongPipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedLong(sink) { @Override + @SuppressWarnings("unchecked") public void accept(long t) { downstream.accept(mapper.apply(t)); } @@ -243,6 +246,7 @@ abstract class LongPipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedLong(sink) { @Override + @SuppressWarnings("unchecked") public void accept(long t) { downstream.accept(mapper.applyAsInt(t)); } diff --git a/src/share/classes/java/util/stream/LongStream.java b/src/share/classes/java/util/stream/LongStream.java index 39c4e1bb7bc0ed403103c51853a4e4bed2e9e6bd..8fce0d68d657b5bc2285ef436f853e428653cc8b 100644 --- a/src/share/classes/java/util/stream/LongStream.java +++ b/src/share/classes/java/util/stream/LongStream.java @@ -517,7 +517,7 @@ public interface LongStream extends BaseStream { long count(); /** - * Returns an {@code OptionalDouble} describing the average of elements of + * Returns an {@code OptionalDouble} describing the arithmetic mean of elements of * this stream, or an empty optional if this stream is empty. This is a * special case of a * reduction. diff --git a/src/share/classes/java/util/stream/MatchOps.java b/src/share/classes/java/util/stream/MatchOps.java index 0f9362adfc95b8ecc0de482a935b2b72f39b0d51..cc809e4aceac2b2bf9af4911a3a678c8485f1847 100644 --- a/src/share/classes/java/util/stream/MatchOps.java +++ b/src/share/classes/java/util/stream/MatchOps.java @@ -274,6 +274,7 @@ final class MatchOps { * @param the type of source elements for the pipeline * @param the type of output elements for the pipeline */ + @SuppressWarnings("serial") private static final class MatchTask extends AbstractShortCircuitTask> { private final MatchOp op; diff --git a/src/share/classes/java/util/stream/Nodes.java b/src/share/classes/java/util/stream/Nodes.java index 4edf324a84c61041054b8b7af061e78094371244..687174462b3e9c315c4e9ace46f9219a7e4424a5 100644 --- a/src/share/classes/java/util/stream/Nodes.java +++ b/src/share/classes/java/util/stream/Nodes.java @@ -60,6 +60,7 @@ final class Nodes { */ static final long MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; + @SuppressWarnings("raw") private static final Node EMPTY_NODE = new EmptyNode.OfRef(); private static final Node.OfInt EMPTY_INT_NODE = new EmptyNode.OfInt(); private static final Node.OfLong EMPTY_LONG_NODE = new EmptyNode.OfLong(); @@ -1786,6 +1787,10 @@ final class Nodes { } } + /* + * This and subclasses are not intended to be serializable + */ + @SuppressWarnings("serial") private static abstract class SizedCollectorTask, K extends SizedCollectorTask> extends CountedCompleter @@ -1855,6 +1860,7 @@ final class Nodes { fence = (int) offset + (int) length; } + @SuppressWarnings("serial") static final class OfRef extends SizedCollectorTask, OfRef> implements Sink { @@ -1886,6 +1892,7 @@ final class Nodes { } } + @SuppressWarnings("serial") static final class OfInt extends SizedCollectorTask> implements Sink.OfInt { @@ -1917,6 +1924,7 @@ final class Nodes { } } + @SuppressWarnings("serial") static final class OfLong extends SizedCollectorTask> implements Sink.OfLong { @@ -1948,6 +1956,7 @@ final class Nodes { } } + @SuppressWarnings("serial") static final class OfDouble extends SizedCollectorTask> implements Sink.OfDouble { @@ -1980,6 +1989,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static abstract class ToArrayTask, K extends ToArrayTask> extends CountedCompleter { @@ -2025,6 +2035,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfRef extends ToArrayTask, OfRef> { private final T[] array; @@ -2050,6 +2061,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static class OfPrimitive, T_NODE extends Node.OfPrimitive> @@ -2077,6 +2089,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfInt extends OfPrimitive { private OfInt(Node.OfInt node, int[] array, int offset) { @@ -2084,6 +2097,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfLong extends OfPrimitive { private OfLong(Node.OfLong node, long[] array, int offset) { @@ -2091,6 +2105,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfDouble extends OfPrimitive { private OfDouble(Node.OfDouble node, double[] array, int offset) { @@ -2099,6 +2114,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static class CollectorTask, T_BUILDER extends Node.Builder> extends AbstractTask> { protected final PipelineHelper helper; @@ -2135,12 +2151,13 @@ final class Nodes { } @Override - public void onCompletion(CountedCompleter caller) { + public void onCompletion(CountedCompleter caller) { if (!isLeaf()) setLocalResult(concFactory.apply(leftChild.getLocalResult(), rightChild.getLocalResult())); super.onCompletion(caller); } + @SuppressWarnings("serial") private static final class OfRef extends CollectorTask, Node.Builder> { OfRef(PipelineHelper helper, @@ -2150,6 +2167,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfInt extends CollectorTask { OfInt(PipelineHelper helper, Spliterator spliterator) { @@ -2157,6 +2175,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfLong extends CollectorTask { OfLong(PipelineHelper helper, Spliterator spliterator) { @@ -2164,6 +2183,7 @@ final class Nodes { } } + @SuppressWarnings("serial") private static final class OfDouble extends CollectorTask { OfDouble(PipelineHelper helper, Spliterator spliterator) { diff --git a/src/share/classes/java/util/stream/ReduceOps.java b/src/share/classes/java/util/stream/ReduceOps.java index 5a3361d52887ce8aa437c4a902d693e0bcab53f7..3a0f81a0f72ff6de2ae6a8069159fd09692d7082 100644 --- a/src/share/classes/java/util/stream/ReduceOps.java +++ b/src/share/classes/java/util/stream/ReduceOps.java @@ -43,7 +43,7 @@ import java.util.function.ObjLongConsumer; import java.util.function.Supplier; /** - * Factory for the creating instances of {@code TerminalOp) that implement + * Factory for creating instances of {@code TerminalOp} that implement * reductions. * * @since 1.8 @@ -148,17 +148,17 @@ final class ReduceOps { * reference values. * * @param the type of the input elements - * @param the type of the result + * @param the type of the intermediate reduction result * @param collector a {@code Collector} defining the reduction * @return a {@code ReduceOp} implementing the reduction */ - public static TerminalOp - makeRef(Collector collector) { - Supplier supplier = Objects.requireNonNull(collector).resultSupplier(); - BiFunction accumulator = collector.accumulator(); - BinaryOperator combiner = collector.combiner(); - class ReducingSink extends Box - implements AccumulatingSink { + public static TerminalOp + makeRef(Collector collector) { + Supplier supplier = Objects.requireNonNull(collector).supplier(); + BiConsumer accumulator = collector.accumulator(); + BinaryOperator combiner = collector.combiner(); + class ReducingSink extends Box + implements AccumulatingSink { @Override public void begin(long size) { state = supplier.get(); @@ -166,9 +166,7 @@ final class ReduceOps { @Override public void accept(T t) { - R newResult = accumulator.apply(state, t); - if (state != newResult) - state = newResult; + accumulator.accept(state, t); } @Override @@ -176,7 +174,7 @@ final class ReduceOps { state = combiner.apply(state, other.state); } } - return new ReduceOp(StreamShape.REFERENCE) { + return new ReduceOp(StreamShape.REFERENCE) { @Override public ReducingSink makeSink() { return new ReducingSink(); @@ -720,6 +718,7 @@ final class ReduceOps { /** * A {@code ForkJoinTask} for performing a parallel reduce operation. */ + @SuppressWarnings("serial") private static final class ReduceTask> extends AbstractTask> { @@ -749,7 +748,7 @@ final class ReduceOps { } @Override - public void onCompletion(CountedCompleter caller) { + public void onCompletion(CountedCompleter caller) { if (!isLeaf()) { S leftResult = leftChild.getLocalResult(); leftResult.combine(rightChild.getLocalResult()); diff --git a/src/share/classes/java/util/stream/ReferencePipeline.java b/src/share/classes/java/util/stream/ReferencePipeline.java index 8a86c2d6c3b0cf4c480774c8ea7e0202f71fe424..c201950d88c275ac6c953dadc4ee8a5db20d4170 100644 --- a/src/share/classes/java/util/stream/ReferencePipeline.java +++ b/src/share/classes/java/util/stream/ReferencePipeline.java @@ -170,9 +170,10 @@ abstract class ReferencePipeline } @Override + @SuppressWarnings("unchecked") public void accept(P_OUT u) { if (predicate.test(u)) - downstream.accept(u); + downstream.accept((Object) u); } }; } @@ -180,6 +181,7 @@ abstract class ReferencePipeline } @Override + @SuppressWarnings("unchecked") public final Stream map(Function mapper) { Objects.requireNonNull(mapper); return new StatelessOp(this, StreamShape.REFERENCE, @@ -262,6 +264,7 @@ abstract class ReferencePipeline } @Override + @SuppressWarnings("unchecked") public void accept(P_OUT u) { // We can do better that this too; optimize for depth=0 case and just grab spliterator and forEach it Stream result = mapper.apply(u); @@ -363,6 +366,7 @@ abstract class ReferencePipeline Sink opWrapSink(int flags, Sink sink) { return new Sink.ChainedReference(sink) { @Override + @SuppressWarnings("unchecked") public void accept(P_OUT u) { tee.accept(u); downstream.accept(u); @@ -439,6 +443,7 @@ abstract class ReferencePipeline // The runtime type of U is never checked for equality with the component type of the runtime type of A[]. // Runtime checking will be performed when an element is stored in A[], thus if A is not a // super type of U an ArrayStoreException will be thrown. + @SuppressWarnings("rawtypes") IntFunction rawGenerator = (IntFunction) generator; return (A[]) Nodes.flatten(evaluateToArrayNode(rawGenerator), rawGenerator) .asArray(rawGenerator); @@ -490,16 +495,21 @@ abstract class ReferencePipeline } @Override - public final R collect(Collector collector) { + public final R collect(Collector collector) { + A container; if (isParallel() && (collector.characteristics().contains(Collector.Characteristics.CONCURRENT)) && (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) { - R container = collector.resultSupplier().get(); - BiFunction accumulator = collector.accumulator(); - forEach(u -> accumulator.apply(container, u)); - return container; + container = collector.supplier().get(); + BiConsumer accumulator = collector.accumulator(); + forEach(u -> accumulator.accept(container, u)); + } + else { + container = evaluate(ReduceOps.makeRef(collector)); } - return evaluate(ReduceOps.makeRef(collector)); + return collector.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH) + ? (R) container + : collector.finisher().apply(container); } @Override diff --git a/src/share/classes/java/util/stream/Sink.java b/src/share/classes/java/util/stream/Sink.java index 33e256c7b9b63a12289473648966913c9a17b519..987d0e9efa7abd7f1f6d12ab7b7d8bc137985550 100644 --- a/src/share/classes/java/util/stream/Sink.java +++ b/src/share/classes/java/util/stream/Sink.java @@ -242,6 +242,7 @@ interface Sink extends Consumer { * {@code accept()} method on the downstream {@code Sink}. */ static abstract class ChainedReference implements Sink { + @SuppressWarnings("rawtypes") protected final Sink downstream; public ChainedReference(Sink downstream) { @@ -274,6 +275,7 @@ interface Sink extends Consumer { * {@code accept()} method on the downstream {@code Sink}. */ static abstract class ChainedInt implements Sink.OfInt { + @SuppressWarnings("rawtypes") protected final Sink downstream; public ChainedInt(Sink downstream) { @@ -306,6 +308,7 @@ interface Sink extends Consumer { * {@code accept()} method on the downstream {@code Sink}. */ static abstract class ChainedLong implements Sink.OfLong { + @SuppressWarnings("rawtypes") protected final Sink downstream; public ChainedLong(Sink downstream) { @@ -338,6 +341,7 @@ interface Sink extends Consumer { * {@code accept()} method on the downstream {@code Sink}. */ static abstract class ChainedDouble implements Sink.OfDouble { + @SuppressWarnings("rawtypes") protected final Sink downstream; public ChainedDouble(Sink downstream) { diff --git a/src/share/classes/java/util/stream/SliceOps.java b/src/share/classes/java/util/stream/SliceOps.java index ac538f2d86c3340cf5494a27b5a4caee7c356afe..09e14f637f458f0a75fd32d9f6d7e3de390a5675 100644 --- a/src/share/classes/java/util/stream/SliceOps.java +++ b/src/share/classes/java/util/stream/SliceOps.java @@ -550,6 +550,7 @@ final class SliceOps { * @param Input element type to the stream pipeline * @param Output element type from the stream pipeline */ + @SuppressWarnings("serial") private static final class SliceTask extends AbstractShortCircuitTask, SliceTask> { private final AbstractPipeline op; diff --git a/src/share/classes/java/util/stream/SortedOps.java b/src/share/classes/java/util/stream/SortedOps.java index de02ba8e32f052489968ab6195fe856d78b705d0..047479a645de5f705778a791d24fcb5fdf7c75d9 100644 --- a/src/share/classes/java/util/stream/SortedOps.java +++ b/src/share/classes/java/util/stream/SortedOps.java @@ -209,7 +209,7 @@ final class SortedOps { } @Override - public Sink opWrapSink(int flags, Sink sink) { + public Sink opWrapSink(int flags, Sink sink) { Objects.requireNonNull(sink); if (StreamOpFlag.SORTED.isKnown(flags)) @@ -248,7 +248,7 @@ final class SortedOps { } @Override - public Sink opWrapSink(int flags, Sink sink) { + public Sink opWrapSink(int flags, Sink sink) { Objects.requireNonNull(sink); if (StreamOpFlag.SORTED.isKnown(flags)) @@ -285,7 +285,7 @@ final class SortedOps { private T[] array; private int offset; - SizedRefSortingSink(Sink sink, Comparator comparator) { + SizedRefSortingSink(Sink sink, Comparator comparator) { super(sink); this.comparator = comparator; } @@ -324,7 +324,7 @@ final class SortedOps { private final Comparator comparator; private ArrayList list; - RefSortingSink(Sink sink, Comparator comparator) { + RefSortingSink(Sink sink, Comparator comparator) { super(sink); this.comparator = comparator; } diff --git a/src/share/classes/java/util/stream/SpinedBuffer.java b/src/share/classes/java/util/stream/SpinedBuffer.java index 77c375612ea037ed4eb76fda792ed136ebd7adf9..7312c984a51ff3b5e8dab3244fdc34aef73cf5f3 100644 --- a/src/share/classes/java/util/stream/SpinedBuffer.java +++ b/src/share/classes/java/util/stream/SpinedBuffer.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.PrimitiveIterator; import java.util.Spliterator; import java.util.Spliterators; @@ -317,6 +318,8 @@ class SpinedBuffer @Override public boolean tryAdvance(Consumer consumer) { + Objects.requireNonNull(consumer); + if (splSpineIndex < lastSpineIndex || (splSpineIndex == lastSpineIndex && splElementIndex < lastSpineElementFence)) { consumer.accept(splChunk[splElementIndex++]); @@ -334,6 +337,8 @@ class SpinedBuffer @Override public void forEachRemaining(Consumer consumer) { + Objects.requireNonNull(consumer); + if (splSpineIndex < lastSpineIndex || (splSpineIndex == lastSpineIndex && splElementIndex < lastSpineElementFence)) { int i = splElementIndex; @@ -634,6 +639,8 @@ class SpinedBuffer @Override public boolean tryAdvance(T_CONS consumer) { + Objects.requireNonNull(consumer); + if (splSpineIndex < lastSpineIndex || (splSpineIndex == lastSpineIndex && splElementIndex < lastSpineElementFence)) { arrayForOne(splChunk, splElementIndex++, consumer); @@ -651,6 +658,8 @@ class SpinedBuffer @Override public void forEachRemaining(T_CONS consumer) { + Objects.requireNonNull(consumer); + if (splSpineIndex < lastSpineIndex || (splSpineIndex == lastSpineIndex && splElementIndex < lastSpineElementFence)) { int i = splElementIndex; diff --git a/src/share/classes/java/util/stream/Stream.java b/src/share/classes/java/util/stream/Stream.java index a5f36841f4af4dc7dec3f6bd146febec50a6ba33..59d703b118e7b6b6dceb254272283702aedf14f5 100644 --- a/src/share/classes/java/util/stream/Stream.java +++ b/src/share/classes/java/util/stream/Stream.java @@ -651,12 +651,13 @@ public interface Stream extends BaseStream> { * }

          * * @param the type of the result + * @param the intermediate accumulation type of the {@code Collector} * @param collector the {@code Collector} describing the reduction * @return the result of the reduction * @see #collect(Supplier, BiConsumer, BiConsumer) * @see Collectors */ - R collect(Collector collector); + R collect(Collector collector); /** * Returns the minimum element of this stream according to the provided @@ -827,6 +828,7 @@ public interface Stream extends BaseStream> { * @return the new stream */ @SafeVarargs + @SuppressWarnings("varargs") // Creating a stream from an array is safe public static Stream of(T... values) { return Arrays.stream(values); } diff --git a/src/share/classes/java/util/stream/StreamSpliterators.java b/src/share/classes/java/util/stream/StreamSpliterators.java index d0dc61ed1e09622c187917483f04c3402ea15152..4a62803b56b7fa8b01489bda5cb9ef28b357f196 100644 --- a/src/share/classes/java/util/stream/StreamSpliterators.java +++ b/src/share/classes/java/util/stream/StreamSpliterators.java @@ -25,6 +25,7 @@ package java.util.stream; import java.util.Comparator; +import java.util.Objects; import java.util.Spliterator; import java.util.concurrent.atomic.AtomicLong; import java.util.function.BooleanSupplier; @@ -294,6 +295,7 @@ class StreamSpliterators { @Override public boolean tryAdvance(Consumer consumer) { + Objects.requireNonNull(consumer); boolean hasNext = doAdvance(); if (hasNext) consumer.accept(buffer.get(nextToConsume)); @@ -303,6 +305,7 @@ class StreamSpliterators { @Override public void forEachRemaining(Consumer consumer) { if (buffer == null && !finished) { + Objects.requireNonNull(consumer); init(); ph.wrapAndCopyInto((Sink) consumer::accept, spliterator); @@ -350,6 +353,7 @@ class StreamSpliterators { @Override public boolean tryAdvance(IntConsumer consumer) { + Objects.requireNonNull(consumer); boolean hasNext = doAdvance(); if (hasNext) consumer.accept(buffer.get(nextToConsume)); @@ -359,6 +363,7 @@ class StreamSpliterators { @Override public void forEachRemaining(IntConsumer consumer) { if (buffer == null && !finished) { + Objects.requireNonNull(consumer); init(); ph.wrapAndCopyInto((Sink.OfInt) consumer::accept, spliterator); @@ -406,6 +411,7 @@ class StreamSpliterators { @Override public boolean tryAdvance(LongConsumer consumer) { + Objects.requireNonNull(consumer); boolean hasNext = doAdvance(); if (hasNext) consumer.accept(buffer.get(nextToConsume)); @@ -415,6 +421,7 @@ class StreamSpliterators { @Override public void forEachRemaining(LongConsumer consumer) { if (buffer == null && !finished) { + Objects.requireNonNull(consumer); init(); ph.wrapAndCopyInto((Sink.OfLong) consumer::accept, spliterator); @@ -462,6 +469,7 @@ class StreamSpliterators { @Override public boolean tryAdvance(DoubleConsumer consumer) { + Objects.requireNonNull(consumer); boolean hasNext = doAdvance(); if (hasNext) consumer.accept(buffer.get(nextToConsume)); @@ -471,6 +479,7 @@ class StreamSpliterators { @Override public void forEachRemaining(DoubleConsumer consumer) { if (buffer == null && !finished) { + Objects.requireNonNull(consumer); init(); ph.wrapAndCopyInto((Sink.OfDouble) consumer::accept, spliterator); @@ -696,6 +705,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(Consumer action) { + Objects.requireNonNull(action); + if (sliceOrigin >= fence) return false; @@ -713,6 +724,8 @@ class StreamSpliterators { @Override public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); + if (sliceOrigin >= fence) return; @@ -754,6 +767,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(T_CONS action) { + Objects.requireNonNull(action); + if (sliceOrigin >= fence) return false; @@ -771,6 +786,8 @@ class StreamSpliterators { @Override public void forEachRemaining(T_CONS action) { + Objects.requireNonNull(action); + if (sliceOrigin >= fence) return; @@ -895,7 +912,8 @@ class StreamSpliterators { this.permits = new AtomicLong(limit >= 0 ? skip + limit : skip); } - UnorderedSliceSpliterator(T_SPLITR s, UnorderedSliceSpliterator parent) { + UnorderedSliceSpliterator(T_SPLITR s, + UnorderedSliceSpliterator parent) { this.s = s; this.unlimited = parent.unlimited; this.permits = parent.permits; @@ -974,7 +992,7 @@ class StreamSpliterators { super(s, skip, limit); } - OfRef(Spliterator s, OfRef parent) { + OfRef(Spliterator s, OfRef parent) { super(s, parent); } @@ -985,6 +1003,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(Consumer action) { + Objects.requireNonNull(action); + while (permitStatus() != PermitStatus.NO_MORE) { if (!s.tryAdvance(this)) return false; @@ -999,6 +1019,8 @@ class StreamSpliterators { @Override public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); + ArrayBuffer.OfRef sb = null; PermitStatus permitStatus; while ((permitStatus = permitStatus()) != PermitStatus.NO_MORE) { @@ -1051,6 +1073,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(T_CONS action) { + Objects.requireNonNull(action); + while (permitStatus() != PermitStatus.NO_MORE) { if (!s.tryAdvance((T_CONS) this)) return false; @@ -1066,6 +1090,8 @@ class StreamSpliterators { @Override public void forEachRemaining(T_CONS action) { + Objects.requireNonNull(action); + T_BUFF sb = null; PermitStatus permitStatus; while ((permitStatus = permitStatus()) != PermitStatus.NO_MORE) { @@ -1237,6 +1263,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(Consumer action) { + Objects.requireNonNull(action); + action.accept(s.get()); return true; } @@ -1260,6 +1288,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(IntConsumer action) { + Objects.requireNonNull(action); + action.accept(s.getAsInt()); return true; } @@ -1283,6 +1313,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(LongConsumer action) { + Objects.requireNonNull(action); + action.accept(s.getAsLong()); return true; } @@ -1306,6 +1338,8 @@ class StreamSpliterators { @Override public boolean tryAdvance(DoubleConsumer action) { + Objects.requireNonNull(action); + action.accept(s.getAsDouble()); return true; } diff --git a/src/share/classes/java/util/stream/Streams.java b/src/share/classes/java/util/stream/Streams.java index 7bf3123af65e668cf152af8d9092bb07584193e5..15c3dcae4975e9e2909d12a0c57847de54b7d3cb 100644 --- a/src/share/classes/java/util/stream/Streams.java +++ b/src/share/classes/java/util/stream/Streams.java @@ -25,6 +25,7 @@ package java.util.stream; import java.util.Comparator; +import java.util.Objects; import java.util.Spliterator; import java.util.function.Consumer; import java.util.function.DoubleConsumer; @@ -80,6 +81,8 @@ final class Streams { @Override public boolean tryAdvance(IntConsumer consumer) { + Objects.requireNonNull(consumer); + final int i = from; if (i < upTo) { from++; @@ -96,6 +99,8 @@ final class Streams { @Override public void forEachRemaining(IntConsumer consumer) { + Objects.requireNonNull(consumer); + int i = from; final int hUpTo = upTo; int hLast = last; @@ -199,6 +204,8 @@ final class Streams { @Override public boolean tryAdvance(LongConsumer consumer) { + Objects.requireNonNull(consumer); + final long i = from; if (i < upTo) { from++; @@ -215,6 +222,8 @@ final class Streams { @Override public void forEachRemaining(LongConsumer consumer) { + Objects.requireNonNull(consumer); + long i = from; final long hUpTo = upTo; int hLast = last; @@ -388,6 +397,8 @@ final class Streams { @Override public boolean tryAdvance(Consumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -400,6 +411,8 @@ final class Streams { @Override public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -475,6 +488,8 @@ final class Streams { @Override public boolean tryAdvance(IntConsumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -487,6 +502,8 @@ final class Streams { @Override public void forEachRemaining(IntConsumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -562,6 +579,8 @@ final class Streams { @Override public boolean tryAdvance(LongConsumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -574,6 +593,8 @@ final class Streams { @Override public void forEachRemaining(LongConsumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -649,6 +670,8 @@ final class Streams { @Override public boolean tryAdvance(DoubleConsumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -661,6 +684,8 @@ final class Streams { @Override public void forEachRemaining(DoubleConsumer action) { + Objects.requireNonNull(action); + if (count == -2) { action.accept(first); count = -1; @@ -681,11 +706,9 @@ final class Streams { this.aSpliterator = aSpliterator; this.bSpliterator = bSpliterator; beforeSplit = true; - // The spliterator is unsized before splitting if a and b are - // sized and the sum of the estimates overflows - unsized = aSpliterator.hasCharacteristics(SIZED) - && aSpliterator.hasCharacteristics(SIZED) - && aSpliterator.estimateSize() + bSpliterator.estimateSize() < 0; + // The spliterator is known to be unsized before splitting if the + // sum of the estimates overflows. + unsized = aSpliterator.estimateSize() + bSpliterator.estimateSize() < 0; } @Override diff --git a/src/share/classes/java/util/stream/package-info.java b/src/share/classes/java/util/stream/package-info.java index 39509ffffc6d982a2b946f5095637c727c917c7c..46d033e38cd0b23f53c2c19e88808e20bf74e242 100644 --- a/src/share/classes/java/util/stream/package-info.java +++ b/src/share/classes/java/util/stream/package-info.java @@ -547,7 +547,7 @@ * List l = new ArrayList(Arrays.asList("one", "two")); * Stream sl = l.stream(); * l.add("three"); - * String s = sl.collect(toStringJoiner(" ")).toString(); + * String s = sl.collect(joining(" ")); * } * First a list is created consisting of two strings: "one"; and "two". Then a stream is created from that list. * Next the list is modified by adding a third string: "three". Finally the elements of the stream are collected @@ -557,7 +557,7 @@ *
          {@code
            *     List l = new ArrayList(Arrays.asList("one", "two"));
            *     Stream sl = l.stream();
          - *     String s = sl.peek(s -> l.add("BAD LAMBDA")).collect(toStringJoiner(" ")).toString();
          + *     String s = sl.peek(s -> l.add("BAD LAMBDA")).collect(joining(" "));
            * }
          * then a {@code ConcurrentModificationException} will be thrown since the {@code peek} operation will attempt * to add the string "BAD LAMBDA" to the list after the terminal operation has commenced. diff --git a/src/share/classes/java/util/zip/ZipConstants.java b/src/share/classes/java/util/zip/ZipConstants.java index 79cefbd46e8196d64fd7561f37e78a9a1215bbdb..c91c20ebe1abbd86ba8915112254d4283e245d05 100644 --- a/src/share/classes/java/util/zip/ZipConstants.java +++ b/src/share/classes/java/util/zip/ZipConstants.java @@ -71,10 +71,17 @@ interface ZipConstants { /* * Extra field header ID */ - static final int EXTID_ZIP64 = 0x0001; // Zip64 - static final int EXTID_NTFS = 0x000a; // NTFS - static final int EXTID_UNIX = 0x000d; // UNIX - static final int EXTID_EXTT = 0x5455; // Info-ZIP Extended Timestamp + static final int EXTID_ZIP64 = 0x0001; // Zip64 + static final int EXTID_NTFS = 0x000a; // NTFS + static final int EXTID_UNIX = 0x000d; // UNIX + static final int EXTID_EXTT = 0x5455; // Info-ZIP Extended Timestamp + + /* + * EXTT timestamp flags + */ + static final int EXTT_FLAG_LMT = 0x1; // LastModifiedTime + static final int EXTT_FLAG_LAT = 0x2; // LastAccessTime + static final int EXTT_FLAT_CT = 0x4; // CreationTime /* * Central directory (CEN) header field offsets diff --git a/src/share/classes/java/util/zip/ZipEntry.java b/src/share/classes/java/util/zip/ZipEntry.java index 60d440ebe4608d0d2337b1256de7e6c454c3887b..32a2681a84dd0386ed2b953b35f7bbad99790e3b 100644 --- a/src/share/classes/java/util/zip/ZipEntry.java +++ b/src/share/classes/java/util/zip/ZipEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,11 @@ package java.util.zip; +import static java.util.zip.ZipUtils.*; +import java.nio.file.attribute.FileTime; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + /** * This class is used to represent a ZIP file entry. * @@ -32,8 +37,12 @@ package java.util.zip; */ public class ZipEntry implements ZipConstants, Cloneable { + String name; // entry name - long mtime = -1; // last modification time + long time = -1; // last modification time + FileTime mtime; // last modification time, from extra field data + FileTime atime; // last access time, from extra field data + FileTime ctime; // creation time, from extra field data long crc = -1; // crc-32 of entry data long size = -1; // uncompressed size of entry data long csize = -1; // compressed size of entry data @@ -55,15 +64,15 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Creates a new zip entry with the specified name. * - * @param name the entry name - * @exception NullPointerException if the entry name is null - * @exception IllegalArgumentException if the entry name is longer than - * 0xFFFF bytes + * @param name + * The entry name + * + * @throws NullPointerException if the entry name is null + * @throws IllegalArgumentException if the entry name is longer than + * 0xFFFF bytes */ public ZipEntry(String name) { - if (name == null) { - throw new NullPointerException(); - } + Objects.requireNonNull(name, "name"); if (name.length() > 0xFFFF) { throw new IllegalArgumentException("entry name too long"); } @@ -73,11 +82,19 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Creates a new zip entry with fields taken from the specified * zip entry. - * @param e a zip Entry object + * + * @param e + * A zip Entry object + * + * @throws NullPointerException if the entry object is null */ public ZipEntry(ZipEntry e) { + Objects.requireNonNull(e, "entry"); name = e.name; + time = e.time; mtime = e.mtime; + atime = e.atime; + ctime = e.ctime; crc = e.crc; size = e.size; csize = e.csize; @@ -103,33 +120,178 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Sets the last modification time of the entry. * - * @param time the last modification time of the entry in milliseconds since the epoch + *

          If the entry is output to a ZIP file or ZIP file formatted + * output stream the last modification time set by this method will + * be stored into the {@code date and time fields} of the zip file + * entry and encoded in standard {@code MS-DOS date and time format}. + * The {@link java.util.TimeZone#getDefault() default TimeZone} is + * used to convert the epoch time to the MS-DOS data and time. + * + * @param time + * The last modification time of the entry in milliseconds + * since the epoch + * * @see #getTime() + * @see #getLastModifiedTime() */ public void setTime(long time) { - this.mtime = time; + this.time = time; + this.mtime = null; } /** * Returns the last modification time of the entry. - *

          The last modificatin time may come from zip entry's extensible - * data field {@code NTFS} or {@code Info-ZIP Extended Timestamp}, if - * the entry is read from {@link ZipInputStream} or {@link ZipFile}. * - * @return the last modification time of the entry, or -1 if not specified + *

          If the entry is read from a ZIP file or ZIP file formatted + * input stream, this is the last modification time from the {@code + * date and time fields} of the zip file entry. The + * {@link java.util.TimeZone#getDefault() default TimeZone} is used + * to convert the standard MS-DOS formatted date and time to the + * epoch time. + * + * @return The last modification time of the entry in milliseconds + * since the epoch, or -1 if not specified + * * @see #setTime(long) + * @see #setLastModifiedTime(FileTime) */ public long getTime() { - return mtime; + return time; + } + + /** + * Sets the last modification time of the entry. + * + *

          When output to a ZIP file or ZIP file formatted output stream + * the last modification time set by this method will be stored into + * zip file entry's {@code date and time fields} in {@code standard + * MS-DOS date and time format}), and the extended timestamp fields + * in {@code optional extra data} in UTC time. + * + * @param time + * The last modification time of the entry + * @return This zip entry + * + * @throws NullPointerException if the {@code time} is null + * + * @see #getLastModifiedTime() + * @since 1.8 + */ + public ZipEntry setLastModifiedTime(FileTime time) { + Objects.requireNonNull(name, "time"); + this.mtime = time; + this.time = time.to(TimeUnit.MILLISECONDS); + return this; + } + + /** + * Returns the last modification time of the entry. + * + *

          If the entry is read from a ZIP file or ZIP file formatted + * input stream, this is the last modification time from the zip + * file entry's {@code optional extra data} if the extended timestamp + * fields are present. Otherwise the last modification time is read + * from the entry's {@code date and time fields}, the {@link + * java.util.TimeZone#getDefault() default TimeZone} is used to convert + * the standard MS-DOS formatted date and time to the epoch time. + * + * @return The last modification time of the entry, null if not specified + * + * @see #setLastModifiedTime(FileTime) + * @since 1.8 + */ + public FileTime getLastModifiedTime() { + if (mtime != null) + return mtime; + if (time == -1) + return null; + return FileTime.from(time, TimeUnit.MILLISECONDS); + } + + /** + * Sets the last access time of the entry. + * + *

          If set, the last access time will be stored into the extended + * timestamp fields of entry's {@code optional extra data}, when output + * to a ZIP file or ZIP file formatted stream. + * + * @param time + * The last access time of the entry + * @return This zip entry + * + * @throws NullPointerException if the {@code time} is null + * + * @see #getLastAccessTime() + * @since 1.8 + */ + public ZipEntry setLastAccessTime(FileTime time) { + Objects.requireNonNull(name, "time"); + this.atime = time; + return this; + } + + /** + * Returns the last access time of the entry. + * + *

          The last access time is from the extended timestamp fields + * of entry's {@code optional extra data} when read from a ZIP file + * or ZIP file formatted stream. + * + * @return The last access time of the entry, null if not specified + + * @see #setLastAccessTime(long) + * @since 1.8 + */ + public FileTime getLastAccessTime() { + return atime; + } + + /** + * Sets the creation time of the entry. + * + *

          If set, the creation time will be stored into the extended + * timestamp fields of entry's {@code optional extra data}, when + * output to a ZIP file or ZIP file formatted stream. + * + * @param time + * The creation time of the entry + * @return This zip entry + * + * @throws NullPointerException if the {@code time} is null + * + * @see #getCreationTime() + * @since 1.8 + */ + public ZipEntry setCreationTime(FileTime time) { + Objects.requireNonNull(name, "time"); + this.ctime = time; + return this; + } + + /** + * Returns the creation time of the entry. + * + *

          The creation time is from the extended timestamp fields of + * entry's {@code optional extra data} when read from a ZIP file + * or ZIP file formatted stream. + * + * @return the creation time of the entry, null if not specified + * @see #setCreationTime(FileTime) + * @since 1.8 + */ + public FileTime getCreationTime() { + return ctime; } /** * Sets the uncompressed size of the entry data. + * * @param size the uncompressed size in bytes - * @exception IllegalArgumentException if the specified size is less - * than 0, is greater than 0xFFFFFFFF when - * ZIP64 format is not supported, - * or is less than 0 when ZIP64 is supported + * + * @throws IllegalArgumentException if the specified size is less + * than 0, is greater than 0xFFFFFFFF when + * ZIP64 format is not supported, + * or is less than 0 when ZIP64 is supported * @see #getSize() */ public void setSize(long size) { @@ -140,7 +302,8 @@ class ZipEntry implements ZipConstants, Cloneable { } /** - * Returns the uncompressed size of the entry data, or -1 if not known. + * Returns the uncompressed size of the entry data. + * * @return the uncompressed size of the entry data, or -1 if not known * @see #setSize(long) */ @@ -149,9 +312,11 @@ class ZipEntry implements ZipConstants, Cloneable { } /** - * Returns the size of the compressed entry data, or -1 if not known. - * In the case of a stored entry, the compressed size will be the same + * Returns the size of the compressed entry data. + * + *

          In the case of a stored entry, the compressed size will be the same * as the uncompressed size of the entry. + * * @return the size of the compressed entry data, or -1 if not known * @see #setCompressedSize(long) */ @@ -161,7 +326,9 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Sets the size of the compressed entry data. + * * @param csize the compressed size to set to + * * @see #getCompressedSize() */ public void setCompressedSize(long csize) { @@ -170,9 +337,11 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Sets the CRC-32 checksum of the uncompressed entry data. + * * @param crc the CRC-32 value - * @exception IllegalArgumentException if the specified CRC-32 value is - * less than 0 or greater than 0xFFFFFFFF + * + * @throws IllegalArgumentException if the specified CRC-32 value is + * less than 0 or greater than 0xFFFFFFFF * @see #getCrc() */ public void setCrc(long crc) { @@ -183,10 +352,11 @@ class ZipEntry implements ZipConstants, Cloneable { } /** - * Returns the CRC-32 checksum of the uncompressed entry data, or -1 if - * not known. + * Returns the CRC-32 checksum of the uncompressed entry data. + * * @return the CRC-32 checksum of the uncompressed entry data, or -1 if * not known + * * @see #setCrc(long) */ public long getCrc() { @@ -195,9 +365,11 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Sets the compression method for the entry. + * * @param method the compression method, either STORED or DEFLATED - * @exception IllegalArgumentException if the specified compression - * method is invalid + * + * @throws IllegalArgumentException if the specified compression + * method is invalid * @see #getMethod() */ public void setMethod(int method) { @@ -208,7 +380,8 @@ class ZipEntry implements ZipConstants, Cloneable { } /** - * Returns the compression method of the entry, or -1 if not specified. + * Returns the compression method of the entry. + * * @return the compression method of the entry, or -1 if not specified * @see #setMethod(int) */ @@ -218,21 +391,104 @@ class ZipEntry implements ZipConstants, Cloneable { /** * Sets the optional extra field data for the entry. - * @param extra the extra field data bytes - * @exception IllegalArgumentException if the length of the specified - * extra field data is greater than 0xFFFF bytes + * + *

          Invoking this method may change this entry's last modification + * time, last access time and creation time, if the {@code extra} field + * data includes the extensible timestamp fields, such as {@code NTFS tag + * 0x0001} or {@code Info-ZIP Extended Timestamp}, as specified in + * Info-ZIP + * Application Note 970311. + * + * @param extra + * The extra field data bytes + * + * @throws IllegalArgumentException if the length of the specified + * extra field data is greater than 0xFFFF bytes + * * @see #getExtra() */ public void setExtra(byte[] extra) { - if (extra != null && extra.length > 0xFFFF) { - throw new IllegalArgumentException("invalid extra field length"); + setExtra0(extra, false); + } + + /** + * Sets the optional extra field data for the entry. + * + * @param extra + * the extra field data bytes + * @param doZIP64 + * if true, set size and csize from ZIP64 fields if present + */ + void setExtra0(byte[] extra, boolean doZIP64) { + if (extra != null) { + if (extra.length > 0xFFFF) { + throw new IllegalArgumentException("invalid extra field length"); + } + // extra fields are in "HeaderID(2)DataSize(2)Data... format + int off = 0; + int len = extra.length; + while (off + 4 < len) { + int tag = get16(extra, off); + int sz = get16(extra, off + 2); + off += 4; + if (off + sz > len) // invalid data + break; + switch (tag) { + case EXTID_ZIP64: + if (doZIP64) { + // LOC extra zip64 entry MUST include BOTH original + // and compressed file size fields. + // If invalid zip64 extra fields, simply skip. Even + // it's rare, it's possible the entry size happens to + // be the magic value and it "accidently" has some + // bytes in extra match the id. + if (sz >= 16) { + size = get64(extra, off); + csize = get64(extra, off + 8); + } + } + break; + case EXTID_NTFS: + int pos = off + 4; // reserved 4 bytes + if (get16(extra, pos) != 0x0001 || get16(extra, pos + 2) != 24) + break; + mtime = winTimeToFileTime(get64(extra, pos + 4)); + atime = winTimeToFileTime(get64(extra, pos + 12)); + ctime = winTimeToFileTime(get64(extra, pos + 20)); + break; + case EXTID_EXTT: + int flag = Byte.toUnsignedInt(extra[off]); + int sz0 = 1; + // The CEN-header extra field contains the modification + // time only, or no timestamp at all. 'sz' is used to + // flag its presence or absence. But if mtime is present + // in LOC it must be present in CEN as well. + if ((flag & 0x1) != 0 && (sz0 + 4) <= sz) { + mtime = unixTimeToFileTime(get32(extra, off + sz0)); + sz0 += 4; + } + if ((flag & 0x2) != 0 && (sz0 + 4) <= sz) { + atime = unixTimeToFileTime(get32(extra, off + sz0)); + sz0 += 4; + } + if ((flag & 0x4) != 0 && (sz0 + 4) <= sz) { + ctime = unixTimeToFileTime(get32(extra, off + sz0)); + sz0 += 4; + } + break; + default: + } + off += sz; + } } this.extra = extra; } /** - * Returns the extra field data for the entry, or null if none. + * Returns the extra field data for the entry. + * * @return the extra field data for the entry, or null if none + * * @see #setExtra(byte[]) */ public byte[] getExtra() { @@ -255,8 +511,10 @@ class ZipEntry implements ZipConstants, Cloneable { } /** - * Returns the comment string for the entry, or null if none. + * Returns the comment string for the entry. + * * @return the comment string for the entry, or null if none + * * @see #setComment(String) */ public String getComment() { diff --git a/src/share/classes/java/util/zip/ZipFile.java b/src/share/classes/java/util/zip/ZipFile.java index 6a023f81355d046d049ad5cdbc9e6190653ffe66..12aa0dcfaba1c23a0bb31e37b4c15f9a9c697fff 100644 --- a/src/share/classes/java/util/zip/ZipFile.java +++ b/src/share/classes/java/util/zip/ZipFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -567,44 +567,12 @@ class ZipFile implements ZipConstants, Closeable { e.name = zc.toString(bname, bname.length); } } + e.time = dosToJavaTime(getEntryTime(jzentry)); e.crc = getEntryCrc(jzentry); e.size = getEntrySize(jzentry); - e. csize = getEntryCSize(jzentry); + e.csize = getEntryCSize(jzentry); e.method = getEntryMethod(jzentry); - e.extra = getEntryBytes(jzentry, JZENTRY_EXTRA); - if (e.extra != null) { - byte[] extra = e.extra; - int len = e.extra.length; - int off = 0; - while (off + 4 < len) { - int pos = off; - int tag = get16(extra, pos); - int sz = get16(extra, pos + 2); - pos += 4; - if (pos + sz > len) // invalid data - break; - switch (tag) { - case EXTID_NTFS: - pos += 4; // reserved 4 bytes - if (get16(extra, pos) != 0x0001 || get16(extra, pos + 2) != 24) - break; - e.mtime = winToJavaTime(get64(extra, pos + 4)); - break; - case EXTID_EXTT: - int flag = Byte.toUnsignedInt(extra[pos++]); - if ((flag & 0x1) != 0) { - e.mtime = unixToJavaTime(get32(extra, pos)); - pos += 4; - } - break; - default: // unknown tag - } - off += (sz + 4); - } - } - if (e.mtime == -1) { - e.mtime = dosToJavaTime(getEntryTime(jzentry)); - } + e.setExtra0(getEntryBytes(jzentry, JZENTRY_EXTRA), false); byte[] bcomm = getEntryBytes(jzentry, JZENTRY_COMMENT); if (bcomm == null) { e.comment = null; diff --git a/src/share/classes/java/util/zip/ZipInputStream.java b/src/share/classes/java/util/zip/ZipInputStream.java index fee9f5108d3f8251f7422f3d66944fde77dfd99a..77a598df8185c34d54574404bb0f39530dcddb24 100644 --- a/src/share/classes/java/util/zip/ZipInputStream.java +++ b/src/share/classes/java/util/zip/ZipInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -288,9 +288,9 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants { int len = get16(tmpbuf, LOCNAM); int blen = b.length; if (len > blen) { - do + do { blen = blen * 2; - while (len > blen); + } while (len > blen); b = new byte[blen]; } readFully(b, 0, len); @@ -303,7 +303,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants { throw new ZipException("encrypted ZIP entry not supported"); } e.method = get16(tmpbuf, LOCHOW); - e.mtime = dosToJavaTime(get32(tmpbuf, LOCTIM)); + e.time = dosToJavaTime(get32(tmpbuf, LOCTIM)); if ((flag & 8) == 8) { /* "Data Descriptor" present */ if (e.method != DEFLATED) { @@ -319,49 +319,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants { if (len > 0) { byte[] extra = new byte[len]; readFully(extra, 0, len); - e.setExtra(extra); - // extra fields are in "HeaderID(2)DataSize(2)Data... format - int off = 0; - while (off + 4 < len) { - int pos = off; - int tag = get16(extra, pos); - int sz = get16(extra, pos + 2); - pos += 4; - if (pos + sz > len) // invalid data - break; - switch (tag) { - case EXTID_ZIP64 : - // LOC extra zip64 entry MUST include BOTH original and - // compressed file size fields. - // - // If invalid zip64 extra fields, simply skip. Even it's - // rare, it's possible the entry size happens to be - // the magic value and it "accidently" has some bytes - // in extra match the id. - if (sz >= 16 && (pos + sz) <= len ) { - e.size = get64(extra, pos); - e.csize = get64(extra, pos + 8); - } - break; - case EXTID_NTFS: - pos += 4; // reserved 4 bytes - if (get16(extra, pos) != 0x0001 || get16(extra, pos + 2) != 24) - break; - // override the loc field, NTFS time has 'microsecond' granularity - e.mtime = winToJavaTime(get64(extra, pos + 4)); - break; - case EXTID_EXTT: - int flag = Byte.toUnsignedInt(extra[pos++]); - if ((flag & 0x1) != 0) { - e.mtime = unixToJavaTime(get32(extra, pos)); - pos += 4; - } - break; - default: // unknown tag - } - off += (sz + 4); - } - + e.setExtra0(extra, true); } return e; } diff --git a/src/share/classes/java/util/zip/ZipOutputStream.java b/src/share/classes/java/util/zip/ZipOutputStream.java index 7a2cf852d304e2d7d8000b60681b524476dddc8d..4072fbed52dce26d275f45dde1d9a73dda9e4d8b 100644 --- a/src/share/classes/java/util/zip/ZipOutputStream.java +++ b/src/share/classes/java/util/zip/ZipOutputStream.java @@ -59,8 +59,9 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { "jdk.util.zip.inhibitZip64", "false"))); private static class XEntry { - public final ZipEntry entry; - public final long offset; + final ZipEntry entry; + final long offset; + long dostime; // last modification time in msdos format public XEntry(ZipEntry entry, long offset) { this.entry = entry; this.offset = offset; @@ -191,7 +192,9 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { if (current != null) { closeEntry(); // close previous entry } - if (e.mtime == -1) { + if (e.time == -1) { + // by default, do NOT use extended timestamps in extra + // data, for now. e.setTime(System.currentTimeMillis()); } if (e.method == -1) { @@ -384,25 +387,20 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { ZipEntry e = xentry.entry; int flag = e.flag; boolean hasZip64 = false; - int elen = (e.extra != null) ? e.extra.length : 0; - int eoff = 0; - boolean foundEXTT = false; // if EXTT already present - // do nothing. - while (eoff + 4 < elen) { - int tag = get16(e.extra, eoff); - int sz = get16(e.extra, eoff + 2); - if (tag == EXTID_EXTT) { - foundEXTT = true; - } - eoff += (4 + sz); - } + int elen = getExtraLen(e.extra); + + // keep a copy of dostime for writeCEN(), otherwise the tz + // sensitive local time entries in loc and cen might be + // different if the default tz get changed during writeLOC() + // and writeCEN() + xentry.dostime = javaToDosTime(e.time); + writeInt(LOCSIG); // LOC header signature if ((flag & 8) == 8) { writeShort(version(e)); // version needed to extract writeShort(flag); // general purpose bit flag writeShort(e.method); // compression method - writeInt(javaToDosTime(e.mtime)); // last modification time - + writeInt(xentry.dostime); // last modification time // store size, uncompressed size, and crc-32 in data descriptor // immediately following compressed entry data writeInt(0); @@ -417,7 +415,7 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { } writeShort(flag); // general purpose bit flag writeShort(e.method); // compression method - writeInt(javaToDosTime(e.mtime)); // last modification time + writeInt(xentry.dostime); // last modification time writeInt(e.crc); // crc-32 if (hasZip64) { writeInt(ZIP64_MAGICVAL); @@ -430,8 +428,23 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { } byte[] nameBytes = zc.getBytes(e.name); writeShort(nameBytes.length); - if (!foundEXTT) - elen += 9; // use Info-ZIP's ext time in extra + + int elenEXTT = 0; // info-zip extended timestamp + int flagEXTT = 0; + if (e.mtime != null) { + elenEXTT += 4; + flagEXTT |= EXTT_FLAG_LMT; + } + if (e.atime != null) { + elenEXTT += 4; + flagEXTT |= EXTT_FLAG_LAT; + } + if (e.ctime != null) { + elenEXTT += 4; + flagEXTT |= EXTT_FLAT_CT; + } + if (flagEXTT != 0) + elen += (elenEXTT + 5); // headid(2) + size(2) + flag(1) + data writeShort(elen); writeBytes(nameBytes, 0, nameBytes.length); if (hasZip64) { @@ -440,15 +453,18 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { writeLong(e.size); writeLong(e.csize); } - if (!foundEXTT) { + if (flagEXTT != 0) { writeShort(EXTID_EXTT); - writeShort(5); // size for the folowing data block - writeByte(0x1); // flags byte, mtime only - writeInt(javaToUnixTime(e.mtime)); - } - if (e.extra != null) { - writeBytes(e.extra, 0, e.extra.length); - } + writeShort(elenEXTT + 1); // flag + data + writeByte(flagEXTT); + if (e.mtime != null) + writeInt(fileTimeToUnixTime(e.mtime)); + if (e.atime != null) + writeInt(fileTimeToUnixTime(e.atime)); + if (e.ctime != null) + writeInt(fileTimeToUnixTime(e.ctime)); + } + writeExtra(e.extra); locoff = written; } @@ -506,31 +522,35 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { } writeShort(flag); // general purpose bit flag writeShort(e.method); // compression method - writeInt(javaToDosTime(e.mtime)); // last modification time + // use the copy in xentry, which has been converted + // from e.time in writeLOC() + writeInt(xentry.dostime); // last modification time writeInt(e.crc); // crc-32 writeInt(csize); // compressed size writeInt(size); // uncompressed size byte[] nameBytes = zc.getBytes(e.name); writeShort(nameBytes.length); - int elen = (e.extra != null) ? e.extra.length : 0; - int eoff = 0; - boolean foundEXTT = false; // if EXTT already present - // do nothing. - while (eoff + 4 < elen) { - int tag = get16(e.extra, eoff); - int sz = get16(e.extra, eoff + 2); - if (tag == EXTID_EXTT) { - foundEXTT = true; - } - eoff += (4 + sz); - } + int elen = getExtraLen(e.extra); if (hasZip64) { - // + headid(2) + datasize(2) - elen += (elenZIP64 + 4); + elen += (elenZIP64 + 4);// + headid(2) + datasize(2) + } + // cen info-zip extended timestamp only outputs mtime + // but set the flag for a/ctime, if present in loc + int flagEXTT = 0; + if (e.mtime != null) { + elen += 4; // + mtime(4) + flagEXTT |= EXTT_FLAG_LMT; + } + if (e.atime != null) { + flagEXTT |= EXTT_FLAG_LAT; + } + if (e.ctime != null) { + flagEXTT |= EXTT_FLAT_CT; + } + if (flagEXTT != 0) { + elen += 5; // headid + sz + flag } - if (!foundEXTT) - elen += 9; // Info-ZIP's Extended Timestamp writeShort(elen); byte[] commentBytes; if (e.comment != null) { @@ -545,6 +565,8 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { writeInt(0); // external file attributes (unused) writeInt(offset); // relative offset of local header writeBytes(nameBytes, 0, nameBytes.length); + + // take care of EXTID_ZIP64 and EXTID_EXTT if (hasZip64) { writeShort(ZIP64_EXTID);// Zip64 extra writeShort(elenZIP64); @@ -555,15 +577,18 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { if (offset == ZIP64_MAGICVAL) writeLong(xentry.offset); } - if (!foundEXTT) { + if (flagEXTT != 0) { writeShort(EXTID_EXTT); - writeShort(5); - writeByte(0x1); // flags byte - writeInt(javaToUnixTime(e.mtime)); - } - if (e.extra != null) { - writeBytes(e.extra, 0, e.extra.length); + if (e.mtime != null) { + writeShort(5); // flag + mtime + writeByte(flagEXTT); + writeInt(fileTimeToUnixTime(e.mtime)); + } else { + writeShort(1); // flag only + writeByte(flagEXTT); + } } + writeExtra(e.extra); if (commentBytes != null) { writeBytes(commentBytes, 0, Math.min(commentBytes.length, 0xffff)); } @@ -626,6 +651,47 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { } } + /* + * Returns the length of extra data without EXTT and ZIP64. + */ + private int getExtraLen(byte[] extra) { + if (extra == null) + return 0; + int skipped = 0; + int len = extra.length; + int off = 0; + while (off + 4 <= len) { + int tag = get16(extra, off); + int sz = get16(extra, off + 2); + if (tag == EXTID_EXTT || tag == EXTID_ZIP64) { + skipped += (sz + 4); + } + off += (sz + 4); + } + return len - skipped; + } + + /* + * Writes extra data without EXTT and ZIP64. + * + * Extra timestamp and ZIP64 data is handled/output separately + * in writeLOC and writeCEN. + */ + private void writeExtra(byte[] extra) throws IOException { + if (extra != null) { + int len = extra.length; + int off = 0; + while (off + 4 <= len) { + int tag = get16(extra, off); + int sz = get16(extra, off + 2); + if (tag != EXTID_EXTT && tag != EXTID_ZIP64) { + writeBytes(extra, off, sz + 4); + } + off += (sz + 4); + } + } + } + /* * Writes a 8-bit byte to the output stream. */ diff --git a/src/share/classes/java/util/zip/ZipUtils.java b/src/share/classes/java/util/zip/ZipUtils.java index 2b2dd9a6e4beff4c7d6fb8f826e392f3664c832d..5a5e9a060860d1ddda9d0883b0ab5a0844052b6c 100644 --- a/src/share/classes/java/util/zip/ZipUtils.java +++ b/src/share/classes/java/util/zip/ZipUtils.java @@ -25,42 +25,45 @@ package java.util.zip; +import java.nio.file.attribute.FileTime; import java.util.Date; import java.util.concurrent.TimeUnit; +import static java.util.zip.ZipConstants.*; +import static java.util.zip.ZipConstants64.*; + class ZipUtils { // used to adjust values between Windows and java epoch private static final long WINDOWS_EPOCH_IN_MICROSECONDS = -11644473600000000L; /** - * Converts Windows time (in microseconds, UTC/GMT) time to Java time. + * Converts Windows time (in microseconds, UTC/GMT) time to FileTime. */ - public static final long winToJavaTime(long wtime) { - return TimeUnit.MILLISECONDS.convert( - wtime / 10 + WINDOWS_EPOCH_IN_MICROSECONDS, TimeUnit.MICROSECONDS); + public static final FileTime winTimeToFileTime(long wtime) { + return FileTime.from(wtime / 10 + WINDOWS_EPOCH_IN_MICROSECONDS, + TimeUnit.MICROSECONDS); } /** - * Converts Java time to Windows time. + * Converts FileTime to Windows time. */ - public static final long javaToWinTime(long time) { - return (TimeUnit.MICROSECONDS.convert(time, TimeUnit.MILLISECONDS) - - WINDOWS_EPOCH_IN_MICROSECONDS) * 10; + public static final long fileTimeToWinTime(FileTime ftime) { + return (ftime.to(TimeUnit.MICROSECONDS) - WINDOWS_EPOCH_IN_MICROSECONDS) * 10; } /** - * Converts "standard Unix time"(in seconds, UTC/GMT) to Java time + * Converts "standard Unix time"(in seconds, UTC/GMT) to FileTime */ - public static final long unixToJavaTime(long utime) { - return TimeUnit.MILLISECONDS.convert(utime, TimeUnit.SECONDS); + public static final FileTime unixTimeToFileTime(long utime) { + return FileTime.from(utime, TimeUnit.SECONDS); } /** - * Converts Java time to "standard Unix time". + * Converts FileTime to "standard Unix time". */ - public static final long javaToUnixTime(long time) { - return TimeUnit.SECONDS.convert(time, TimeUnit.MILLISECONDS); + public static final long fileTimeToUnixTime(FileTime ftime) { + return ftime.to(TimeUnit.SECONDS); } /** @@ -92,7 +95,6 @@ class ZipUtils { d.getSeconds() >> 1; } - /** * Fetches unsigned 16-bit value from byte array at specified offset. * The bytes are assumed to be in Intel (little-endian) byte order. @@ -116,5 +118,4 @@ class ZipUtils { public static final long get64(byte b[], int off) { return get32(b, off) | (get32(b, off+4) << 32); } - } diff --git a/src/share/classes/javax/accessibility/Accessible.java b/src/share/classes/javax/accessibility/Accessible.java index 0a22e5578b07c8b96a3205d6fd2239d8160bdac6..c7793715a8464d40a52acd70a7cc505da8f4adbe 100644 --- a/src/share/classes/javax/accessibility/Accessible.java +++ b/src/share/classes/javax/accessibility/Accessible.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ public interface Accessible { * of an object that implements Accessible, and that subclass * is not Accessible, the developer should override the * getAccessibleContext method to return null. + * @return the AccessibleContext associated with this object */ public AccessibleContext getAccessibleContext(); } diff --git a/src/share/classes/javax/accessibility/AccessibleBundle.java b/src/share/classes/javax/accessibility/AccessibleBundle.java index 282cc2afbe053dae14c7273efd43f492dd57e816..65ce81bed6f9806f49d77e1f0842573660cb9d18 100644 --- a/src/share/classes/javax/accessibility/AccessibleBundle.java +++ b/src/share/classes/javax/accessibility/AccessibleBundle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,6 +53,9 @@ public abstract class AccessibleBundle { private final String defaultResourceBundleName = "com.sun.accessibility.internal.resources.accessibility"; + /** + * Construct an {@code AccessibleBundle}. + */ public AccessibleBundle() { } diff --git a/src/share/classes/javax/accessibility/AccessibleExtendedTable.java b/src/share/classes/javax/accessibility/AccessibleExtendedTable.java index 485d68daa59de398be7933915d91f1bd25b37035..87385639db154beab53772325326d71d057ff943 100644 --- a/src/share/classes/javax/accessibility/AccessibleExtendedTable.java +++ b/src/share/classes/javax/accessibility/AccessibleExtendedTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,7 +60,7 @@ public interface AccessibleExtendedTable extends AccessibleTable { */ public int getAccessibleColumn(int index); - /* + /** * Returns the index at a row and column in the table. * * @param r zero-based row of the table diff --git a/src/share/classes/javax/accessibility/AccessibleRelationSet.java b/src/share/classes/javax/accessibility/AccessibleRelationSet.java index d6b0ece3da20a2198d018eb73210867125630e0d..e1409089fb902a869cf81357749b782e84ad2d96 100644 --- a/src/share/classes/javax/accessibility/AccessibleRelationSet.java +++ b/src/share/classes/javax/accessibility/AccessibleRelationSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -163,6 +163,7 @@ public class AccessibleRelationSet { /** * Returns the number of relations in the relation set. + * @return the number of relations in the relation set */ public int size() { if (relations == null) { diff --git a/src/share/classes/javax/accessibility/AccessibleTable.java b/src/share/classes/javax/accessibility/AccessibleTable.java index c1921aa823fe2a9de7b0c036cf9c63b359d2a324..74c7a03dc0d17522aa6986120de9072af7435dd9 100644 --- a/src/share/classes/javax/accessibility/AccessibleTable.java +++ b/src/share/classes/javax/accessibility/AccessibleTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,6 +90,8 @@ public interface AccessibleTable { * Returns the number of rows occupied by the Accessible at * a specified row and column in the table. * + * @param r zero-based row of the table + * @param c zero-based column of the table * @return the number of rows occupied by the Accessible at a * given specified (row, column) */ @@ -99,6 +101,8 @@ public interface AccessibleTable { * Returns the number of columns occupied by the Accessible at * a specified row and column in the table. * + * @param r zero-based row of the table + * @param c zero-based column of the table * @return the number of columns occupied by the Accessible at a * given specified row and column */ diff --git a/src/share/classes/javax/accessibility/AccessibleTableModelChange.java b/src/share/classes/javax/accessibility/AccessibleTableModelChange.java index 43bb28c6bd291aa0ac6d1d59f74bedf409fb95ca..03cdf9ab66675527b70035936f173ce162673e4e 100644 --- a/src/share/classes/javax/accessibility/AccessibleTableModelChange.java +++ b/src/share/classes/javax/accessibility/AccessibleTableModelChange.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,8 +71,8 @@ public interface AccessibleTableModelChange { public static final int DELETE = -1; /** - * Returns the type of event - * + * Returns the type of event. + * @return the type of event * @see #INSERT * @see #UPDATE * @see #DELETE @@ -81,21 +81,25 @@ public interface AccessibleTableModelChange { /** * Returns the first row that changed. + * @return the first row that changed */ public int getFirstRow(); /** * Returns the last row that changed. + * @return the last row that changed */ public int getLastRow(); /** * Returns the first column that changed. + * @return the first column that changed */ public int getFirstColumn(); /** * Returns the last column that changed. + * @return the last column that changed */ public int getLastColumn(); } diff --git a/src/share/classes/javax/accessibility/AccessibleTextSequence.java b/src/share/classes/javax/accessibility/AccessibleTextSequence.java index 58af80b3be5c430daa87de654648327110c80bd2..cc70970af77ab5d3535f55bc837d5fdcd7a91932 100644 --- a/src/share/classes/javax/accessibility/AccessibleTextSequence.java +++ b/src/share/classes/javax/accessibility/AccessibleTextSequence.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ package javax.accessibility; */ public class AccessibleTextSequence { - /* The start index of the text sequence */ + /** The start index of the text sequence */ public int startIndex; /** The end index of the text sequence */ diff --git a/src/share/classes/javax/accessibility/AccessibleValue.java b/src/share/classes/javax/accessibility/AccessibleValue.java index 5108428f9336f76893f9b0d8c06e312fb1ae9671..448eaac4f374304d74cc4c2ff0c685cf46517562 100644 --- a/src/share/classes/javax/accessibility/AccessibleValue.java +++ b/src/share/classes/javax/accessibility/AccessibleValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,7 @@ public interface AccessibleValue { /** * Set the value of this object as a Number. * + * @param n the number to use for the value * @return True if the value was set; else False * @see #getCurrentAccessibleValue */ diff --git a/src/share/classes/javax/management/relation/RelationNotification.java b/src/share/classes/javax/management/relation/RelationNotification.java index a05aa719b1be2ac3d4aa1bc1c365c815646a6474..7edbc895ac229ff7eae2f8ef182c20f32ff6a7fb 100644 --- a/src/share/classes/javax/management/relation/RelationNotification.java +++ b/src/share/classes/javax/management/relation/RelationNotification.java @@ -260,7 +260,7 @@ public class RelationNotification extends Notification { super(notifType, sourceObj, sequence, timeStamp, message); - if (!isValidBasic(notifType,sourceObj,id,typeName) || !isValidCreate(notifType)) { + if (!isValidBasicStrict(notifType,sourceObj,id,typeName) || !isValidCreate(notifType)) { throw new IllegalArgumentException("Invalid parameter."); } @@ -310,7 +310,7 @@ public class RelationNotification extends Notification { super(notifType, sourceObj, sequence, timeStamp, message); - if (!isValidBasic(notifType,sourceObj,id,typeName) || !isValidUpdate(notifType,name,newValue,oldValue)) { + if (!isValidBasicStrict(notifType,sourceObj,id,typeName) || !isValidUpdate(notifType,name,newValue,oldValue)) { throw new IllegalArgumentException("Invalid parameter."); } @@ -457,14 +457,26 @@ public class RelationNotification extends Notification { // - no role old value (for role update) // - no role new value (for role update) + // Despite the fact, that validation in constructor of RelationNotification prohibit + // creation of the class instance with null sourceObj its possible to set it to null later + // by public setSource() method. + // So we should relax validation rules to preserve serialization behavior compatibility. + + private boolean isValidBasicStrict(String notifType, Object sourceObj, String id, String typeName){ + if (sourceObj == null) { + return false; + } + return isValidBasic(notifType,sourceObj,id,typeName); + } + private boolean isValidBasic(String notifType, Object sourceObj, String id, String typeName){ - if (notifType == null || sourceObj == null || - id == null || typeName == null) { + if (notifType == null || id == null || typeName == null) { return false; } - if (!(sourceObj instanceof RelationService) && - !(sourceObj instanceof ObjectName)) { + if (sourceObj != null && ( + !(sourceObj instanceof RelationService) && + !(sourceObj instanceof ObjectName))) { return false; } diff --git a/src/share/classes/javax/sound/midi/MetaMessage.java b/src/share/classes/javax/sound/midi/MetaMessage.java index b7c235565f3b79318de6e6025c0d1d408bbdeb33..6378435acc759428745165d768e8218ce9f4403a 100644 --- a/src/share/classes/javax/sound/midi/MetaMessage.java +++ b/src/share/classes/javax/sound/midi/MetaMessage.java @@ -149,7 +149,7 @@ public class MetaMessage extends MidiMessage { * @param data the data bytes in the MIDI message * @param length the number of bytes in the data * byte array - * @throws InvalidMidiDataException if the + * @throws InvalidMidiDataException if the * parameter values do not specify a valid MIDI meta message */ public void setMessage(int type, byte[] data, int length) throws InvalidMidiDataException { diff --git a/src/share/classes/javax/sound/midi/MidiDevice.java b/src/share/classes/javax/sound/midi/MidiDevice.java index 75d6638f6818b562fabd6fa02f505d2ba87983ad..be950e8aa48cb7cb4679896e0057ba9e5202166b 100644 --- a/src/share/classes/javax/sound/midi/MidiDevice.java +++ b/src/share/classes/javax/sound/midi/MidiDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -86,13 +86,13 @@ import java.util.List; * To detect if a MidiDevice represents a hardware MIDI port, the * following programming technique can be used: * - *

          + * 
          {@code
            * MidiDevice device = ...;
            * if ( ! (device instanceof Sequencer) && ! (device instanceof Synthesizer)) {
            *   // we're now sure that device represents a MIDI port
            *   // ...
            * }
          - * 
          + * }
          * *

          * A MidiDevice includes a {@link MidiDevice.Info} object diff --git a/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java b/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java index 9ea1df7c38e0c829321fda725c78494fed290540..550c7a4ccb815ebb9f4d4d2ce2eb009bf02da54e 100644 --- a/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java +++ b/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,9 @@ package javax.sound.midi; * @since 1.7 */ public interface MidiDeviceReceiver extends Receiver { - /** Obtains a MidiDevice object which is an owner of this Receiver. + /** + * Obtains a MidiDevice object which is an owner of this Receiver. + * @return a MidiDevice object which is an owner of this Receiver */ public MidiDevice getMidiDevice(); } diff --git a/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java b/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java index b6a827188e27e49e9faac7a411cf7d7cf3c6160c..730628c5e8dc02723f2371e3efee57d6d8df11e8 100644 --- a/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java +++ b/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,9 @@ package javax.sound.midi; */ public interface MidiDeviceTransmitter extends Transmitter { - /** Obtains a MidiDevice object which is an owner of this Transmitter. + /** + * Obtains a MidiDevice object which is an owner of this Transmitter. + * @return a MidiDevice object which is an owner of this Transmitter */ public MidiDevice getMidiDevice(); } diff --git a/src/share/classes/javax/sound/midi/MidiFileFormat.java b/src/share/classes/javax/sound/midi/MidiFileFormat.java index 4c399dbbe722d13c3afc7a464f4a0a4872a0d744..1d4669a245890dc00d9c9c31003c8ffd5a2dcb55 100644 --- a/src/share/classes/javax/sound/midi/MidiFileFormat.java +++ b/src/share/classes/javax/sound/midi/MidiFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,6 +50,7 @@ import java.util.Map; * be used in implementations: * * + * * * diff --git a/src/share/classes/javax/sound/midi/MidiMessage.java b/src/share/classes/javax/sound/midi/MidiMessage.java index 244757f27d7234b344e433f71427aa13bcbaa7e9..7cc840bd77583eff7066012134317bdb16d2c7b0 100644 --- a/src/share/classes/javax/sound/midi/MidiMessage.java +++ b/src/share/classes/javax/sound/midi/MidiMessage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,7 +55,7 @@ package javax.sound.midi; * processing MIDI data that originated outside Java Sound and now * is encoded as signed bytes, the bytes can * can be converted to integers using this conversion: - *
          int i = (int)(byte & 0xFF)
          + *
          {@code int i = (int)(byte & 0xFF)}
          *

          * If you simply need to pass a known MIDI byte value as a method parameter, * it can be expressed directly as an integer, using (for example) decimal or @@ -118,6 +118,10 @@ public abstract class MidiMessage implements Cloneable { * method is called by concrete subclasses, which should * ensure that the data array specifies a complete, valid MIDI * message. + * + * @param data the data bytes in the MIDI message + * @param length the number of bytes in the data byte array + * @throws InvalidMidiDataException if the parameter values do not specify a valid MIDI meta message */ protected void setMessage(byte[] data, int length) throws InvalidMidiDataException { if (length < 0 || (length > 0 && length > data.length)) { diff --git a/src/share/classes/javax/sound/midi/MidiSystem.java b/src/share/classes/javax/sound/midi/MidiSystem.java index 9d6763a640622ef33639bf87e85a61fd22900e59..4e390f1199844001ee8fa098e30f456d86ba52f9 100644 --- a/src/share/classes/javax/sound/midi/MidiSystem.java +++ b/src/share/classes/javax/sound/midi/MidiSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -80,6 +80,7 @@ import com.sun.media.sound.MidiDeviceTransmitterEnvelope; * consider them: * *

          MIDI File Format Properties
          Property keyValue type
          + * * * * @@ -425,6 +426,8 @@ public class MidiSystem { * it is used to identify the default sequencer. * For details, refer to the {@link MidiSystem class description}. * + * @param connected whether or not the returned {@code Sequencer} + * is connected to the default {@code Synthesizer} * @return the default sequencer * @throws MidiUnavailableException if the sequencer is not * available due to resource restrictions, diff --git a/src/share/classes/javax/sound/midi/ShortMessage.java b/src/share/classes/javax/sound/midi/ShortMessage.java index f2ccdd23f946f3a1f2ec3ef4abe44776a80da873..1445201f3fec968bc0861f4270b461f161ad0f0a 100644 --- a/src/share/classes/javax/sound/midi/ShortMessage.java +++ b/src/share/classes/javax/sound/midi/ShortMessage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -283,7 +283,7 @@ public class ShortMessage extends MidiMessage { /** * Sets the parameters for a MIDI message that takes no data bytes. * @param status the MIDI status byte - * @throws InvalidMidiDataException if status does not + * @throws InvalidMidiDataException if status does not * specify a valid MIDI status byte for a message that requires no data bytes. * @see #setMessage(int, int, int) * @see #setMessage(int, int, int, int) @@ -307,7 +307,7 @@ public class ShortMessage extends MidiMessage { * @param status the MIDI status byte * @param data1 the first data byte * @param data2 the second data byte - * @throws InvalidMidiDataException if the + * @throws InvalidMidiDataException if the * the status byte, or all data bytes belonging to the message, do * not specify a valid MIDI message. * @see #setMessage(int, int, int, int) @@ -357,7 +357,7 @@ public class ShortMessage extends MidiMessage { * @param channel the channel associated with the message * @param data1 the first data byte * @param data2 the second data byte - * @throws InvalidMidiDataException if the + * @throws InvalidMidiDataException if the * status byte or all data bytes belonging to the message, do * not specify a valid MIDI message * @@ -397,6 +397,7 @@ public class ShortMessage extends MidiMessage { * Obtains the MIDI command associated with this event. This method * assumes that the event is a MIDI channel message; if not, the return * value will not be meaningful. + * @return the MIDI command associated with this event * @see #setMessage(int, int, int, int) */ public int getCommand() { @@ -450,7 +451,7 @@ public class ShortMessage extends MidiMessage { * status byte value. * @param status status byte value, which must represent a short MIDI message * @return data length in bytes (0, 1, or 2) - * @throws InvalidMidiDataException if the + * @throws InvalidMidiDataException if the * status argument does not represent the status byte for any * short message */ diff --git a/src/share/classes/javax/sound/midi/Synthesizer.java b/src/share/classes/javax/sound/midi/Synthesizer.java index f9701c62c4371343fa181a41edad94d58988b530..6740479b3896891d837ecffc8a79ece59b8536b5 100644 --- a/src/share/classes/javax/sound/midi/Synthesizer.java +++ b/src/share/classes/javax/sound/midi/Synthesizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -170,7 +170,7 @@ public interface Synthesizer extends MidiDevice { * already had been), false if the instrument could not be * loaded (for example, if the synthesizer has insufficient * memory to load it) - * @throws IllegalArgumentException if this + * @throws IllegalArgumentException if this * Synthesizer doesn't support the specified instrument's * soundbank * @see #unloadInstrument @@ -186,7 +186,7 @@ public interface Synthesizer extends MidiDevice { /** * Unloads a particular instrument. * @param instrument instrument to unload - * @throws IllegalArgumentException if this + * @throws IllegalArgumentException if this * Synthesizer doesn't support the specified instrument's * soundbank * @see #loadInstrument @@ -214,10 +214,10 @@ public interface Synthesizer extends MidiDevice { * of the old instrument, it should be loaded into the synthesizer * @return true if the instrument succeessfully remapped, * false if feature is not implemented by synthesizer - * @throws IllegalArgumentException if instrument + * @throws IllegalArgumentException if instrument * from or instrument to aren't supported by * synthesizer or if instrument to is not loaded - * @throws NullPointerException if from or + * @throws NullPointerException if from or * to parameters have null value * @see #loadInstrument * @see #loadInstruments diff --git a/src/share/classes/javax/sound/midi/SysexMessage.java b/src/share/classes/javax/sound/midi/SysexMessage.java index c86519bff34e872a667ff2dcec0abcfaa5720c9e..ae4e418e8e683beec7f860b5e55f885037c3fb25 100644 --- a/src/share/classes/javax/sound/midi/SysexMessage.java +++ b/src/share/classes/javax/sound/midi/SysexMessage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -204,6 +204,7 @@ public class SysexMessage extends MidiMessage { * @param data the system exclusive message data * @param length the length of the valid message data in * the array + * @throws InvalidMidiDataException if the status byte is invalid for a sysex message */ public void setMessage(int status, byte[] data, int length) throws InvalidMidiDataException { if ( (status != 0xF0) && (status != 0xF7) ) { diff --git a/src/share/classes/javax/sound/midi/Track.java b/src/share/classes/javax/sound/midi/Track.java index ad1ff52d202b7f4032e8cc9aeea249ae5671b3b2..4e54a8aa3ddf7947c48d1306fb85a551eedce400 100644 --- a/src/share/classes/javax/sound/midi/Track.java +++ b/src/share/classes/javax/sound/midi/Track.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -211,10 +211,11 @@ public class Track { /** * Obtains the event at the specified index. * @param index the location of the desired event in the event vector - * @throws ArrayIndexOutOfBoundsException if the + * @throws ArrayIndexOutOfBoundsException if the * specified index is negative or not less than the current size of * this track. * @see #size + * @return the event at the specified index */ public MidiEvent get(int index) throws ArrayIndexOutOfBoundsException { try { diff --git a/src/share/classes/javax/sound/sampled/AudioFileFormat.java b/src/share/classes/javax/sound/sampled/AudioFileFormat.java index 30fe82be36517bd0001a8cca1c7e69d4b7fb2817..d1216e207a736768790643d03e923ebd796eed88 100644 --- a/src/share/classes/javax/sound/sampled/AudioFileFormat.java +++ b/src/share/classes/javax/sound/sampled/AudioFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,6 +57,7 @@ import java.util.Map; * be used in implementations: * *
          MIDI System Property Keys
          Property KeyInterface
          + * * * * diff --git a/src/share/classes/javax/sound/sampled/AudioFormat.java b/src/share/classes/javax/sound/sampled/AudioFormat.java index 7457f8220eb0deb2f03945dac673a768bb5c83dc..2e679784ea349f59d885db147bf835020af67dc0 100644 --- a/src/share/classes/javax/sound/sampled/AudioFormat.java +++ b/src/share/classes/javax/sound/sampled/AudioFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,6 +85,7 @@ import java.util.Map; * service providers should use, if applicable: * *
          Audio File Format Property Keys
          Property keyValue type
          + * * * * diff --git a/src/share/classes/javax/sound/sampled/AudioSystem.java b/src/share/classes/javax/sound/sampled/AudioSystem.java index cf06ca25741c6350ce9d2cb57ba03b549c07140c..6c8bfaf9f5ea8c9f754f33f0e663ce377c70b97d 100644 --- a/src/share/classes/javax/sound/sampled/AudioSystem.java +++ b/src/share/classes/javax/sound/sampled/AudioSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,6 +75,7 @@ import com.sun.media.sound.JDK13Services; * consider them: * *
          Audio Format Property Keys
          Property keyValue type
          + * * * * diff --git a/src/share/classes/javax/sound/sampled/BooleanControl.java b/src/share/classes/javax/sound/sampled/BooleanControl.java index 047b2f0080334e3d356446edcd69848c457311da..e48e06c339c67eb9f59b0da966a8506bda204f17 100644 --- a/src/share/classes/javax/sound/sampled/BooleanControl.java +++ b/src/share/classes/javax/sound/sampled/BooleanControl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -125,6 +125,7 @@ public abstract class BooleanControl extends Control { /** * Obtains the label for the specified state. + * @param state the state whose label will be returned * @return the label for the specified state, such as "true" or "on" * for true, or "false" or "off" for false. */ diff --git a/src/share/classes/javax/sound/sampled/Mixer.java b/src/share/classes/javax/sound/sampled/Mixer.java index c4d0ccbef03c641fd623cfa179832ef719e8f616..755ab9133422a703d917c26d601a8f3ac708bf85 100644 --- a/src/share/classes/javax/sound/sampled/Mixer.java +++ b/src/share/classes/javax/sound/sampled/Mixer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,6 +133,8 @@ public interface Mixer extends Line { * DataLine. * * @param info describes the desired line + * @return a line that is available for use and that matches the description + * in the specified {@code Line.Info} object * @throws LineUnavailableException if a matching line * is not available due to resource restrictions * @throws IllegalArgumentException if this mixer does diff --git a/src/share/classes/javax/sound/sampled/spi/FormatConversionProvider.java b/src/share/classes/javax/sound/sampled/spi/FormatConversionProvider.java index 194582f17dd9cac0ad719009cfbb91cddfdf5d17..a27184a0b875de521ea3a56456edde5a70120ebb 100644 --- a/src/share/classes/javax/sound/sampled/spi/FormatConversionProvider.java +++ b/src/share/classes/javax/sound/sampled/spi/FormatConversionProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -116,6 +116,7 @@ public abstract class FormatConversionProvider { * given a particular source format. * If no target format encodings are supported for this source format, * an array of length 0 is returned. + * @param sourceFormat format of the incoming data * @return array of supported target format encodings. */ public abstract AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat); @@ -146,6 +147,8 @@ public abstract class FormatConversionProvider { * supported by the format converter * If no target formats with the specified encoding are supported * for this source format, an array of length 0 is returned. + * @param targetEncoding desired encoding of the stream after processing + * @param sourceFormat format of the incoming data * @return array of supported target formats. */ public abstract AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat); diff --git a/src/share/classes/javax/swing/JFileChooser.java b/src/share/classes/javax/swing/JFileChooser.java index d30c69675ae4dbab34baebafc01ffb4bad3fa5d7..e053b7af08182f15439d53c5ae2de33b46945aef 100644 --- a/src/share/classes/javax/swing/JFileChooser.java +++ b/src/share/classes/javax/swing/JFileChooser.java @@ -1149,9 +1149,10 @@ public class JFileChooser extends JComponent implements Accessible { int index = filters.indexOf(f); if (index >= 0) { if(getFileFilter() == f) { - if (isAcceptAllFileFilterUsed()) { + FileFilter aaff = getAcceptAllFileFilter(); + if (isAcceptAllFileFilterUsed() && (aaff != f)) { // choose default filter if it is used - setFileFilter(getAcceptAllFileFilter()); + setFileFilter(aaff); } else if (index > 0) { // choose the first filter, because it is not removed diff --git a/src/share/classes/javax/swing/SwingWorker.java b/src/share/classes/javax/swing/SwingWorker.java index 294808188cd60740371f2586d3264da893f1bb43..f7b343d8e44558961141c3c7e56fee016d9674df 100644 --- a/src/share/classes/javax/swing/SwingWorker.java +++ b/src/share/classes/javax/swing/SwingWorker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -405,6 +405,7 @@ public abstract class SwingWorker implements RunnableFuture { * */ @SafeVarargs + @SuppressWarnings("varargs") // Passing chunks to add is safe protected final void publish(V... chunks) { synchronized (this) { if (doProcess == null) { diff --git a/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java b/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java index f1a9b15f862e59f150dc2a41a9a07520d4e336d5..e1af32f73ef6f794250af795c30e43fa9833e3c6 100644 --- a/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java +++ b/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java @@ -344,7 +344,8 @@ public class SynthTreeUI extends BasicTreeUI configureRenderer(cellContext); while (!done && paintingEnumerator.hasMoreElements()) { path = (TreePath)paintingEnumerator.nextElement(); - if (path != null) { + bounds = getPathBounds(tree, path); + if ((path != null) && (bounds != null)) { isLeaf = treeModel.isLeaf(path.getLastPathComponent()); if (isLeaf) { isExpanded = hasBeenExpanded = false; @@ -353,7 +354,6 @@ public class SynthTreeUI extends BasicTreeUI isExpanded = treeState.getExpandedState(path); hasBeenExpanded = tree.hasBeenExpanded(path); } - bounds = getPathBounds(tree, path); rowBounds.y = bounds.y; rowBounds.height = bounds.height; paintRow(renderer, dtcr, context, cellContext, g, @@ -383,7 +383,8 @@ public class SynthTreeUI extends BasicTreeUI paintingEnumerator = treeState.getVisiblePathsFrom(initialPath); while (!done && paintingEnumerator.hasMoreElements()) { path = (TreePath)paintingEnumerator.nextElement(); - if (path != null) { + bounds = getPathBounds(tree, path); + if ((path != null) && (bounds != null)) { isLeaf = treeModel.isLeaf(path.getLastPathComponent()); if (isLeaf) { isExpanded = hasBeenExpanded = false; @@ -392,7 +393,6 @@ public class SynthTreeUI extends BasicTreeUI isExpanded = treeState.getExpandedState(path); hasBeenExpanded = tree.hasBeenExpanded(path); } - bounds = getPathBounds(tree, path); // See if the vertical line to the parent has been drawn. parentPath = path.getParentPath(); if (parentPath != null) { diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java index 97554e4d200f6fbcaa555746861a1a75e5f6a058..ec6e9c6b72286ad4b2dc5052cc432dbb294b68b1 100644 --- a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java +++ b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java @@ -75,7 +75,10 @@ public abstract class ApacheCanonicalizer extends TransformService { throw new ClassCastException ("context must be of type DOMCryptoContext"); } - if (parent == null || !(parent instanceof javax.xml.crypto.dom.DOMStructure)) { + if (parent == null) { + throw new NullPointerException(); + } + if (!(parent instanceof javax.xml.crypto.dom.DOMStructure)) { throw new ClassCastException("parent must be of type DOMStructure"); } transformElem = (Element) @@ -90,7 +93,10 @@ public abstract class ApacheCanonicalizer extends TransformService { throw new ClassCastException ("context must be of type DOMCryptoContext"); } - if (parent == null || !(parent instanceof javax.xml.crypto.dom.DOMStructure)) { + if (parent == null) { + throw new NullPointerException(); + } + if (!(parent instanceof javax.xml.crypto.dom.DOMStructure)) { throw new ClassCastException("parent must be of type DOMStructure"); } transformElem = (Element) diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java index 7df11e6204a50e341ba2044eb7764f5a49fd2d61..aac051804b0d11ad491f526bddf9858cfdef137f 100644 --- a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java +++ b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java @@ -76,7 +76,10 @@ public abstract class ApacheTransform extends TransformService { throw new ClassCastException ("context must be of type DOMCryptoContext"); } - if (parent == null || !(parent instanceof javax.xml.crypto.dom.DOMStructure)) { + if (parent == null) { + throw new NullPointerException(); + } + if (!(parent instanceof javax.xml.crypto.dom.DOMStructure)) { throw new ClassCastException("parent must be of type DOMStructure"); } transformElem = (Element) @@ -91,7 +94,10 @@ public abstract class ApacheTransform extends TransformService { throw new ClassCastException ("context must be of type DOMCryptoContext"); } - if (parent == null || !(parent instanceof javax.xml.crypto.dom.DOMStructure)) { + if (parent == null) { + throw new NullPointerException(); + } + if (!(parent instanceof javax.xml.crypto.dom.DOMStructure)) { throw new ClassCastException("parent must be of type DOMStructure"); } transformElem = (Element) diff --git a/src/share/classes/sun/font/TrueTypeFont.java b/src/share/classes/sun/font/TrueTypeFont.java index 5a3180e154662663b08aa03d731a7e13040ac964..e5b6ffd48608979efe954ba6372529c96cd6ed26 100644 --- a/src/share/classes/sun/font/TrueTypeFont.java +++ b/src/share/classes/sun/font/TrueTypeFont.java @@ -547,6 +547,17 @@ public class TrueTypeFont extends FileFont { throw new FontFormatException("bad table, tag="+table.tag); } } + + if (getDirectoryEntry(headTag) == null) { + throw new FontFormatException("missing head table"); + } + if (getDirectoryEntry(maxpTag) == null) { + throw new FontFormatException("missing maxp table"); + } + if (getDirectoryEntry(hmtxTag) != null + && getDirectoryEntry(hheaTag) == null) { + throw new FontFormatException("missing hhea table"); + } initNames(); } catch (Exception e) { if (FontUtilities.isLogging()) { diff --git a/src/share/classes/sun/invoke/anon/ConstantPoolPatch.java b/src/share/classes/sun/invoke/anon/ConstantPoolPatch.java index 259d4b2336e5f819225124d275e8ed60bd72a54f..b4fde0550340f988c3eb5ec7762fdae8ed03091f 100644 --- a/src/share/classes/sun/invoke/anon/ConstantPoolPatch.java +++ b/src/share/classes/sun/invoke/anon/ConstantPoolPatch.java @@ -418,7 +418,7 @@ public class ConstantPoolPatch { private static final Map, Byte> CONSTANT_VALUE_CLASS_TAG = new IdentityHashMap, Byte>(); - private static final Class[] CONSTANT_VALUE_CLASS = new Class[16]; + private static final Class[] CONSTANT_VALUE_CLASS = new Class[16]; static { Object[][] values = { {Integer.class, CONSTANT_Integer}, diff --git a/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java b/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java index d2c003ee2bb682cfdbea5d9c0f51eabdbb8d17f4..1ebef35e5929a8207b0c3a9e191e6188e2a7d329 100644 --- a/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java +++ b/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java @@ -37,6 +37,8 @@ import java.net.PasswordAuthentication; public abstract class AuthCacheValue implements Serializable { + static final long serialVersionUID = 735249334068211611L; + public enum Type { Proxy, Server diff --git a/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java b/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java index 23e84ba4462727a9aaca270aa86d553bad5f6823..e44bb3d76e7eddfe5a58a05cf482c867b24841ff 100644 --- a/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java +++ b/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java @@ -51,6 +51,8 @@ import sun.net.www.HeaderParser; public abstract class AuthenticationInfo extends AuthCacheValue implements Cloneable { + static final long serialVersionUID = -2588378268010453259L; + // Constants saying what kind of authroization this is. This determines // the namespace in the hash table lookup. public static final char SERVER_AUTHENTICATION = 's'; diff --git a/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java b/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java index 299db8fd7c4abd942fc1299e051325a8b8f1edb3..83f067a683ce2bfb2bff30f289b3bb3ff80b1d62 100644 --- a/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java +++ b/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java @@ -1031,6 +1031,24 @@ public class ExtendedCharsets "ebcdic-s-871+euro" }); + charset("IBM290", "IBM290", + new String[] { + "cp290", + "ibm290", + "ibm-290", + "csIBM290", + "EBCDIC-JP-kana", + "290" + }); + + charset("x-IBM300", "IBM300", + new String[] { + "cp300", + "ibm300", + "ibm-300", + "300" + }); + // Macintosh MacOS/Apple char encodingd diff --git a/src/share/classes/sun/print/PSPrinterJob.java b/src/share/classes/sun/print/PSPrinterJob.java index 5344ba8bb08c2b37602d440052551a0757c79360..c4bcc23aa0282ed2af946b4b21dbd5d9f1e4087a 100644 --- a/src/share/classes/sun/print/PSPrinterJob.java +++ b/src/share/classes/sun/print/PSPrinterJob.java @@ -59,6 +59,8 @@ import javax.print.PrintService; import javax.print.StreamPrintService; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.PrintServiceAttributeSet; +import javax.print.attribute.standard.PrinterName; import javax.print.attribute.standard.Chromaticity; import javax.print.attribute.standard.Copies; import javax.print.attribute.standard.Destination; @@ -766,8 +768,9 @@ public class PSPrinterJob extends RasterPrinterJob { } } if (mDestType == RasterPrinterJob.PRINTER) { - if (getPrintService() != null) { - mDestination = getPrintService().getName(); + PrintService pServ = getPrintService(); + if (pServ != null) { + mDestination = pServ.getName(); } PrinterSpooler spooler = new PrinterSpooler(); java.security.AccessController.doPrivileged(spooler); diff --git a/src/share/classes/sun/reflect/annotation/AnnotationParser.java b/src/share/classes/sun/reflect/annotation/AnnotationParser.java index 341f2033f643929ba937aa0af1fb694092d55a14..2dc978a4dea4f85a83dd65d0b6293c02eeae2bd7 100644 --- a/src/share/classes/sun/reflect/annotation/AnnotationParser.java +++ b/src/share/classes/sun/reflect/annotation/AnnotationParser.java @@ -88,6 +88,7 @@ public class AnnotationParser { * @param selectAnnotationClasses an array of annotation types to select when parsing */ @SafeVarargs + @SuppressWarnings("varargs") // selectAnnotationClasses is used safely static Map, Annotation> parseSelectAnnotations( byte[] rawAnnotations, ConstantPool constPool, diff --git a/src/share/classes/sun/rmi/runtime/Log.java b/src/share/classes/sun/rmi/runtime/Log.java index 7a1b0982fba9c06016fd22754f5b121f15040e9d..62d03614dfee3887d72ca23210863da4ec9f6119 100644 --- a/src/share/classes/sun/rmi/runtime/Log.java +++ b/src/share/classes/sun/rmi/runtime/Log.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,6 +61,7 @@ import java.util.HashMap; * @author Laird Dornin * @since 1.4 */ +@SuppressWarnings("deprecation") public abstract class Log { /** Logger re-definition of old RMI log values */ diff --git a/src/share/classes/sun/rmi/server/ActivatableRef.java b/src/share/classes/sun/rmi/server/ActivatableRef.java index 6224ff35655e91b5a76ec6fb13273bd37780a38d..7e6668c389e8a88596474ea652fd4791c76408d0 100644 --- a/src/share/classes/sun/rmi/server/ActivatableRef.java +++ b/src/share/classes/sun/rmi/server/ActivatableRef.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ import java.rmi.server.RemoteObjectInvocationHandler; import java.rmi.server.RemoteRef; import java.rmi.server.RemoteStub; +@SuppressWarnings("deprecation") public class ActivatableRef implements RemoteRef { private static final long serialVersionUID = 7579060052569229166L; diff --git a/src/share/classes/sun/rmi/server/Dispatcher.java b/src/share/classes/sun/rmi/server/Dispatcher.java index 947aa4176e2d1b96e66cd78ccf82997ac9bb67ba..a2ec6dcf26464330537711cce13657ac97eabe5d 100644 --- a/src/share/classes/sun/rmi/server/Dispatcher.java +++ b/src/share/classes/sun/rmi/server/Dispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,7 @@ import java.rmi.server.RemoteCall; * The Dispatcher interface allows the transport to make * the upcall to the server side remote reference. */ +@SuppressWarnings("deprecation") public interface Dispatcher { /** diff --git a/src/share/classes/sun/rmi/server/LoaderHandler.java b/src/share/classes/sun/rmi/server/LoaderHandler.java index 7830ed354bb000890c864481654b7505eccb840b..c35da195ad2b28617ddf2a2a2b27bfda86ae3fd3 100644 --- a/src/share/classes/sun/rmi/server/LoaderHandler.java +++ b/src/share/classes/sun/rmi/server/LoaderHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,6 +67,7 @@ import sun.security.action.GetPropertyAction; * @author Peter Jones * @author Laird Dornin */ +@SuppressWarnings("deprecation") public final class LoaderHandler { /** RMI class loader log level */ diff --git a/src/share/classes/sun/rmi/server/UnicastRef.java b/src/share/classes/sun/rmi/server/UnicastRef.java index 3ea4bd34ce5fd47e9cc17cbfd03b37b5d7d53606..9b95724094a2456aedbf86ce6df0696b5feeec65 100644 --- a/src/share/classes/sun/rmi/server/UnicastRef.java +++ b/src/share/classes/sun/rmi/server/UnicastRef.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,8 @@ import sun.security.action.GetBooleanAction; * NOTE: There is a JDK-internal dependency on the existence of this * class's getLiveRef method (as it is inherited by UnicastRef2) in * the implementation of javax.management.remote.rmi.RMIConnector. - **/ + */ +@SuppressWarnings("deprecation") public class UnicastRef implements RemoteRef { /** diff --git a/src/share/classes/sun/rmi/server/UnicastServerRef.java b/src/share/classes/sun/rmi/server/UnicastServerRef.java index b47b4ed6e20892359652b04df294b785fb202251..180a62523042af6b42c0086e75c9fb77fef06aeb 100644 --- a/src/share/classes/sun/rmi/server/UnicastServerRef.java +++ b/src/share/classes/sun/rmi/server/UnicastServerRef.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,6 +67,7 @@ import sun.security.action.GetBooleanAction; * @author Roger Riggs * @author Peter Jones */ +@SuppressWarnings("deprecation") public class UnicastServerRef extends UnicastRef implements ServerRef, Dispatcher { diff --git a/src/share/classes/sun/rmi/server/Util.java b/src/share/classes/sun/rmi/server/Util.java index 0f6c7ddee50ea6fb811d2203c828d6be672408cf..0f82a84c9b180f2d9cd42336f8e8ae72f715b025 100644 --- a/src/share/classes/sun/rmi/server/Util.java +++ b/src/share/classes/sun/rmi/server/Util.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,6 +64,7 @@ import sun.security.action.GetPropertyAction; * A utility class with static methods for creating stubs/proxies and * skeletons for remote objects. */ +@SuppressWarnings("deprecation") public final class Util { /** "server" package log level */ diff --git a/src/share/classes/sun/rmi/transport/DGCImpl.java b/src/share/classes/sun/rmi/transport/DGCImpl.java index b5ce50cacc7ee5724f571823a942ccc538931f24..88ac91b648d6ae505e4333fc2f8f810a172d0893 100644 --- a/src/share/classes/sun/rmi/transport/DGCImpl.java +++ b/src/share/classes/sun/rmi/transport/DGCImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,6 +59,7 @@ import sun.security.action.GetPropertyAction; * * @author Ann Wollrath */ +@SuppressWarnings("deprecation") final class DGCImpl implements DGC { /* dgc system log */ diff --git a/src/share/classes/sun/rmi/transport/StreamRemoteCall.java b/src/share/classes/sun/rmi/transport/StreamRemoteCall.java index 5971405d97043ca942ea9f8912d357a01b8c63e3..915ed6f9262fef84a0ceae554926dabbd1b3e6dc 100644 --- a/src/share/classes/sun/rmi/transport/StreamRemoteCall.java +++ b/src/share/classes/sun/rmi/transport/StreamRemoteCall.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import sun.rmi.transport.tcp.TCPEndpoint; * * @author Ann Wollrath */ +@SuppressWarnings("deprecation") public class StreamRemoteCall implements RemoteCall { private ConnectionInputStream in = null; private ConnectionOutputStream out = null; diff --git a/src/share/classes/sun/rmi/transport/Transport.java b/src/share/classes/sun/rmi/transport/Transport.java index 286682dff8a336c25a481505dbc825e1bc0092b7..217c93682bd1d1ebf365dddde513a0b619c23a97 100644 --- a/src/share/classes/sun/rmi/transport/Transport.java +++ b/src/share/classes/sun/rmi/transport/Transport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import sun.rmi.server.UnicastServerRef; * * @author Ann Wollrath */ +@SuppressWarnings("deprecation") public abstract class Transport { /** "transport" package log level */ diff --git a/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java b/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java index d3dbf6f1da4aadbe51e6a9e177680ecc9b226a74..e77e224597ff01d245a0505165014e04ac857e04 100644 --- a/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java +++ b/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ import sun.security.action.GetLongAction; * connect to the same host will automatically use the same * mechanism. */ +@SuppressWarnings("deprecation") public class RMIMasterSocketFactory extends RMISocketFactory { /** "proxy" package log level */ diff --git a/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java b/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java index b12809a26bfdd6e190480f0f9b4bac0b100b6245..d1b6cbf7e15823226b6c3af079a5864d86dd7fde 100644 --- a/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java +++ b/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ import sun.rmi.runtime.Log; * * @author Peter Jones */ +@SuppressWarnings("deprecation") final class ConnectionMultiplexer { /** "multiplex" log level */ diff --git a/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java b/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java index 54d6d21d9e662c74a1b89ac47094f8b3586936f1..24655c2f0b59a0b9d4e4bcdc3b8c268bf67845ac 100644 --- a/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java +++ b/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -84,6 +84,7 @@ import sun.security.action.GetPropertyAction; * @author Ann Wollrath * @author Peter Jones */ +@SuppressWarnings("deprecation") public class TCPTransport extends Transport { /* tcp package log */ diff --git a/src/share/classes/sun/security/ec/ECDSASignature.java b/src/share/classes/sun/security/ec/ECDSASignature.java index c831259f5add7c8eade48a946c3f264f3df7a9be..1e80694207e9b0c95686f00dae6aa5bc7367a445 100644 --- a/src/share/classes/sun/security/ec/ECDSASignature.java +++ b/src/share/classes/sun/security/ec/ECDSASignature.java @@ -323,6 +323,7 @@ abstract class ECDSASignature extends SignatureSpi { // set parameter, not supported. See JCA doc @Override + @Deprecated protected void engineSetParameter(String param, Object value) throws InvalidParameterException { throw new UnsupportedOperationException("setParameter() not supported"); @@ -330,6 +331,7 @@ abstract class ECDSASignature extends SignatureSpi { // get parameter, not supported. See JCA doc @Override + @Deprecated protected Object engineGetParameter(String param) throws InvalidParameterException { throw new UnsupportedOperationException("getParameter() not supported"); diff --git a/src/share/classes/sun/security/krb5/Credentials.java b/src/share/classes/sun/security/krb5/Credentials.java index bf4d57bb2b6155126c04ba9859fd91dcf1cea4b2..e0037da88464de8d790964aafb8e1738300ea9a6 100644 --- a/src/share/classes/sun/security/krb5/Credentials.java +++ b/src/share/classes/sun/security/krb5/Credentials.java @@ -62,7 +62,9 @@ public class Credentials { private static CredentialsCache cache; static boolean alreadyLoaded = false; private static boolean alreadyTried = false; - private static native Credentials acquireDefaultNativeCreds(); + + // Read native ticket with session key type in the given list + private static native Credentials acquireDefaultNativeCreds(int[] eTypes); public Credentials(Ticket new_ticket, PrincipalName new_client, @@ -373,6 +375,8 @@ public class Credentials { // It assumes that the GSS call has // the privilege to access the default cache file. + // This method is only called on Windows and Mac OS X, the native + // acquireDefaultNativeCreds is also available on these platforms. public static synchronized Credentials acquireDefaultCreds() { Credentials result = null; @@ -416,10 +420,15 @@ public class Credentials { } if (alreadyLoaded) { // There is some native code - if (DEBUG) - System.out.println(">> Acquire default native Credentials"); - result = acquireDefaultNativeCreds(); - // only TGT with DES key will be returned by native method + if (DEBUG) { + System.out.println(">> Acquire default native Credentials"); + } + try { + result = acquireDefaultNativeCreds( + EType.getDefaults("default_tkt_enctypes")); + } catch (KrbException ke) { + // when there is no default_tkt_enctypes. + } } } return result; diff --git a/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java b/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java index 8f75b1ec37e8a7bc2c88a5467248b0abf427f0d0..86bee16a72f5fd4d5ca9e8186526b6b9fecb4630 100644 --- a/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java +++ b/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -96,10 +96,15 @@ final class P11TlsPrfGenerator extends KeyGeneratorSpi { } } - // SecretKeySpec does not allow zero length keys, so we define our own class. + // SecretKeySpec does not allow zero length keys, so we define our + // own class. + // + // As an anonymous class cannot make any guarantees about serialization + // compatibility, it is nonsensical for an anonymous class to define a + // serialVersionUID. Suppress warnings relative to missing serialVersionUID + // field in the anonymous subclass of serializable SecretKey. + @SuppressWarnings("serial") private static final SecretKey NULL_KEY = new SecretKey() { - private static final long serialVersionUID = -8090049519656411362L; - public byte[] getEncoded() { return new byte[0]; } diff --git a/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java b/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java index 32f1da53afa244382e5e60758a541eabe7315724..35564498c0e1dd5f7dc42b82beaa36b2f936d1d6 100644 --- a/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java +++ b/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java @@ -775,7 +775,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi { } } if (params != null) { - if (algorithm.equals(pbes2_OID)) { + if (algorithm.equals((Object)pbes2_OID)) { algParams = AlgorithmParameters.getInstance("PBES2"); } else { algParams = AlgorithmParameters.getInstance("PBE"); @@ -912,7 +912,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi { private static String mapPBEParamsToAlgorithm(ObjectIdentifier algorithm, AlgorithmParameters algParams) throws NoSuchAlgorithmException { // Check for PBES2 algorithms - if (algorithm.equals(pbes2_OID) && algParams != null) { + if (algorithm.equals((Object)pbes2_OID) && algParams != null) { return algParams.toString(); } return algorithm.toString(); @@ -1921,7 +1921,7 @@ public final class PKCS12KeyStore extends KeyStoreSpi { } safeContentsData = safeContents.getData(); - } else if (contentType.equals(ContentInfo.ENCRYPTED_DATA_OID)) { + } else if (contentType.equals((Object)ContentInfo.ENCRYPTED_DATA_OID)) { if (password == null) { continue; } diff --git a/src/share/classes/sun/security/provider/DSAPublicKey.java b/src/share/classes/sun/security/provider/DSAPublicKey.java index a8340f35da99081e2e12ef84a72bfc53c40b4391..883e52bbebe4980049c5f8d0c6513c931d70876d 100644 --- a/src/share/classes/sun/security/provider/DSAPublicKey.java +++ b/src/share/classes/sun/security/provider/DSAPublicKey.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,7 @@ import java.security.interfaces.DSAParams; import sun.security.x509.X509Key; import sun.security.x509.AlgIdDSA; +import sun.security.util.BitArray; import sun.security.util.Debug; import sun.security.util.DerValue; import sun.security.util.DerInputStream; @@ -88,8 +89,9 @@ implements java.security.interfaces.DSAPublicKey, Serializable { algid = new AlgIdDSA(p, q, g); try { - key = new DerValue(DerValue.tag_Integer, + byte[] keyArray = new DerValue(DerValue.tag_Integer, y.toByteArray()).toByteArray(); + setKey(new BitArray(keyArray.length*8, keyArray)); encode(); } catch (IOException e) { throw new InvalidKeyException("could not DER encode y: " + @@ -142,7 +144,7 @@ implements java.security.interfaces.DSAPublicKey, Serializable { protected void parseKeyBits() throws InvalidKeyException { try { - DerInputStream in = new DerInputStream(key); + DerInputStream in = new DerInputStream(getKey().toByteArray()); y = in.getBigInteger(); } catch (IOException e) { throw new InvalidKeyException("Invalid key: y value\n" + diff --git a/src/share/classes/sun/security/rsa/RSAPublicKeyImpl.java b/src/share/classes/sun/security/rsa/RSAPublicKeyImpl.java index d0ef2ebb968378c58ec29efbda7a12c14c3a67fb..52c0d6718d7227ee2a479bf8b8e12196de84cf65 100644 --- a/src/share/classes/sun/security/rsa/RSAPublicKeyImpl.java +++ b/src/share/classes/sun/security/rsa/RSAPublicKeyImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,9 +67,10 @@ public final class RSAPublicKeyImpl extends X509Key implements RSAPublicKey { DerOutputStream out = new DerOutputStream(); out.putInteger(n); out.putInteger(e); - DerValue val = - new DerValue(DerValue.tag_Sequence, out.toByteArray()); - key = val.toByteArray(); + byte[] keyArray = + new DerValue(DerValue.tag_Sequence, + out.toByteArray()).toByteArray(); + setKey(new BitArray(keyArray.length*8, keyArray)); } catch (IOException exc) { // should never occur throw new InvalidKeyException(exc); @@ -104,7 +105,7 @@ public final class RSAPublicKeyImpl extends X509Key implements RSAPublicKey { */ protected void parseKeyBits() throws InvalidKeyException { try { - DerInputStream in = new DerInputStream(key); + DerInputStream in = new DerInputStream(getKey().toByteArray()); DerValue derValue = in.getDerValue(); if (derValue.tag != DerValue.tag_Sequence) { throw new IOException("Not a SEQUENCE"); diff --git a/src/share/classes/sun/security/rsa/RSASignature.java b/src/share/classes/sun/security/rsa/RSASignature.java index 435e283ad2316ef265263a678a679d24accf0644..959700f22cd7620a6d528fbecd1c2aedc6367340 100644 --- a/src/share/classes/sun/security/rsa/RSASignature.java +++ b/src/share/classes/sun/security/rsa/RSASignature.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -244,12 +244,14 @@ public abstract class RSASignature extends SignatureSpi { } // set parameter, not supported. See JCA doc + @Deprecated protected void engineSetParameter(String param, Object value) throws InvalidParameterException { throw new UnsupportedOperationException("setParameter() not supported"); } // get parameter, not supported. See JCA doc + @Deprecated protected Object engineGetParameter(String param) throws InvalidParameterException { throw new UnsupportedOperationException("getParameter() not supported"); diff --git a/src/share/classes/sun/security/ssl/SSLSocketImpl.java b/src/share/classes/sun/security/ssl/SSLSocketImpl.java index ffa8f4528e8028cd584d8c4d13f661dc926ee367..dfe612966e003ce7e5af59cd4d217c064c358073 100644 --- a/src/share/classes/sun/security/ssl/SSLSocketImpl.java +++ b/src/share/classes/sun/security/ssl/SSLSocketImpl.java @@ -169,7 +169,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { /* * Drives the protocol state machine. */ - private int connectionState; + private volatile int connectionState; /* * Flag indicating if the next record we receive MUST be a Finished @@ -1467,7 +1467,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { */ @Override public boolean isClosed() { - return getConnectionState() == cs_APP_CLOSED; + return connectionState == cs_APP_CLOSED; } /** diff --git a/src/share/classes/sun/security/tools/jarsigner/Main.java b/src/share/classes/sun/security/tools/jarsigner/Main.java index c5ed6b1facf914410833df2e6a5335f137f8a0eb..72ce4617bf647e407f798602773e44a35ba840dd 100644 --- a/src/share/classes/sun/security/tools/jarsigner/Main.java +++ b/src/share/classes/sun/security/tools/jarsigner/Main.java @@ -291,7 +291,8 @@ public class Main { String flags = args[n]; String modifier = null; - if (flags.charAt(0) == '-') { + + if (flags.startsWith("-")) { int pos = flags.indexOf(':'); if (pos > 0) { modifier = flags.substring(pos+1); @@ -299,7 +300,14 @@ public class Main { } } - if (collator.compare(flags, "-keystore") == 0) { + if (!flags.startsWith("-")) { + if (jarfile == null) { + jarfile = flags; + } else { + alias = flags; + ckaliases.add(alias); + } + } else if (collator.compare(flags, "-keystore") == 0) { if (++n == args.length) usageNoArg(); keystore = args[n]; } else if (collator.compare(flags, "-storepass") ==0) { @@ -380,18 +388,9 @@ public class Main { collator.compare(flags, "-help") == 0) { fullusage(); } else { - if (!flags.startsWith("-")) { - if (jarfile == null) { - jarfile = flags; - } else { - alias = flags; - ckaliases.add(alias); - } - } else { - System.err.println( - rb.getString("Illegal.option.") + flags); - usage(); - } + System.err.println( + rb.getString("Illegal.option.") + flags); + usage(); } } diff --git a/src/share/classes/sun/security/x509/AlgIdDSA.java b/src/share/classes/sun/security/x509/AlgIdDSA.java index 219ef5c00c7a04c294c16c42aa90210116e2c5f0..20f0d9156c4c02c4056ef617d0ad63bc932e3ebe 100644 --- a/src/share/classes/sun/security/x509/AlgIdDSA.java +++ b/src/share/classes/sun/security/x509/AlgIdDSA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -96,7 +96,7 @@ class AlgIdDSA extends AlgorithmId implements DSAParams * Default constructor. The OID and parameters must be * deserialized before this algorithm ID is used. */ - // XXX deprecated for general use + @Deprecated public AlgIdDSA () {} AlgIdDSA (DerValue val) throws IOException diff --git a/src/share/classes/sun/security/x509/X509Key.java b/src/share/classes/sun/security/x509/X509Key.java index 135aa2e323e1bd4d37b3bd4d47d1efe600dc7a58..789b7b8dca70899930852f52637eff9b7a5a9d7d 100644 --- a/src/share/classes/sun/security/x509/X509Key.java +++ b/src/share/classes/sun/security/x509/X509Key.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,6 +79,7 @@ public class X509Key implements PublicKey { * Added to keep the byte[] key form consistent with the BitArray * form. Can de deleted when byte[] key is deleted. */ + @Deprecated private int unusedBits = 0; /* BitArray form of key */ diff --git a/src/share/classes/sun/swing/AccumulativeRunnable.java b/src/share/classes/sun/swing/AccumulativeRunnable.java index a1712731524411811da4739c16ba076e9fec9918..ac57e6d211587fafec8aec04fa162f323cf0ebf7 100644 --- a/src/share/classes/sun/swing/AccumulativeRunnable.java +++ b/src/share/classes/sun/swing/AccumulativeRunnable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -121,6 +121,7 @@ public abstract class AccumulativeRunnable implements Runnable { * @param args the arguments to accumulate */ @SafeVarargs + @SuppressWarnings("varargs") // Copying args is safe public final synchronized void add(T... args) { boolean isSubmitted = true; if (arguments == null) { diff --git a/src/share/classes/sun/swing/JLightweightFrame.java b/src/share/classes/sun/swing/JLightweightFrame.java index a9ac4371cc131c4c0b35e2616507d9f339e38ab7..36bb1c351b76f56c2b256c7b37e9dfae67e16b2c 100644 --- a/src/share/classes/sun/swing/JLightweightFrame.java +++ b/src/share/classes/sun/swing/JLightweightFrame.java @@ -29,12 +29,18 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; +import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; +import java.awt.event.ComponentListener; +import java.awt.event.ContainerEvent; +import java.awt.event.ContainerListener; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.security.AccessController; import javax.swing.JLayeredPane; @@ -80,6 +86,8 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan private boolean copyBufferEnabled; private int[] copyBuffer; + private PropertyChangeListener layoutSizeListener; + /** * Constructs a new, initially invisible {@code JLightweightFrame} * instance. @@ -94,6 +102,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan if (getGraphicsConfiguration().isTranslucencyCapable()) { setBackground(new Color(0, 0, 0, 0)); } + + layoutSizeListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent e) { + Dimension d = (Dimension)e.getNewValue(); + + if ("preferredSize".equals(e.getPropertyName())) { + content.preferredSizeChanged(d.width, d.height); + + } else if ("maximumSize".equals(e.getPropertyName())) { + content.maximumSizeChanged(d.width, d.height); + + } else if ("minimumSize".equals(e.getPropertyName())) { + content.minimumSizeChanged(d.width, d.height); + } + } + }; } /** @@ -104,10 +129,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan * * @param content the {@link LightweightContent} instance */ - public void setContent(LightweightContent content) { + public void setContent(final LightweightContent content) { + if (content == null) { + System.err.println("JLightweightFrame.setContent: content may not be null!"); + return; + } this.content = content; this.component = content.getComponent(); + Dimension d = this.component.getPreferredSize(); + content.preferredSizeChanged(d.width, d.height); + + d = this.component.getMaximumSize(); + content.maximumSizeChanged(d.width, d.height); + + d = this.component.getMinimumSize(); + content.minimumSizeChanged(d.width, d.height); + initInterior(); } @@ -202,6 +240,25 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan contentPane.setLayout(new BorderLayout()); contentPane.add(component); setContentPane(contentPane); + + contentPane.addContainerListener(new ContainerListener() { + @Override + public void componentAdded(ContainerEvent e) { + Component c = JLightweightFrame.this.component; + if (e.getChild() == c) { + c.addPropertyChangeListener("preferredSize", layoutSizeListener); + c.addPropertyChangeListener("maximumSize", layoutSizeListener); + c.addPropertyChangeListener("minimumSize", layoutSizeListener); + } + } + @Override + public void componentRemoved(ContainerEvent e) { + Component c = JLightweightFrame.this.component; + if (e.getChild() == c) { + c.removePropertyChangeListener(layoutSizeListener); + } + } + }); } @SuppressWarnings("deprecation") diff --git a/src/share/classes/sun/swing/LightweightContent.java b/src/share/classes/sun/swing/LightweightContent.java index 2d443fba23ce1de9f9765df0b6727a56b6c4916e..256262dded1ffa1ac1902e9b99cab4625e695cbc 100644 --- a/src/share/classes/sun/swing/LightweightContent.java +++ b/src/share/classes/sun/swing/LightweightContent.java @@ -161,4 +161,22 @@ public interface LightweightContent { * application that the frame has ungrabbed focus. */ public void focusUngrabbed(); + + /** + * {@code JLightweightFrame} calls this method to notify the client + * application that the content preferred size has changed. + */ + public void preferredSizeChanged(int width, int height); + + /** + * {@code JLightweightFrame} calls this method to notify the client + * application that the content maximum size has changed. + */ + public void maximumSizeChanged(int width, int height); + + /** + * {@code JLightweightFrame} calls this method to notify the client + * application that the content minimum size has changed. + */ + public void minimumSizeChanged(int width, int height); } diff --git a/src/share/classes/sun/text/resources/FormatData.java b/src/share/classes/sun/text/resources/FormatData.java index 960249a8752d43c2d62956e32b0dcce747711a86..971177fd61a93e15350299f64f0a8f28e469119f 100644 --- a/src/share/classes/sun/text/resources/FormatData.java +++ b/src/share/classes/sun/text/resources/FormatData.java @@ -858,6 +858,9 @@ public class FormatData extends ParallelListResourceBundle { } }, { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" }, + + // Workaround for islamic-umalqura name support (JDK-8015986) + { "calendarname.islamic-umalqura", "Islamic Umm al-Qura Calendar" }, }; } } diff --git a/src/share/classes/sun/text/resources/ar/FormatData_ar.java b/src/share/classes/sun/text/resources/ar/FormatData_ar.java index 3be4cd39e6f96420d995addcc52a74edb5cea18a..acb5cb9c409ed051cc8dc4f58671f540ccb32f0e 100644 --- a/src/share/classes/sun/text/resources/ar/FormatData_ar.java +++ b/src/share/classes/sun/text/resources/ar/FormatData_ar.java @@ -264,6 +264,10 @@ public class FormatData_ar extends ParallelListResourceBundle { } }, { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" }, + + // Workaround for islamic-umalqura name support (JDK-8015986) + { "calendarname.islamic-umalqura", + "\u0644\u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0647\u062c\u0631\u064a\u060c \u0623\u0645 \u0627\u0644\u0642\u0631\u0649" }, }; } } diff --git a/src/share/classes/sun/tools/asm/Assembler.java b/src/share/classes/sun/tools/asm/Assembler.java index 1bf406e182ef5a5c492fc940786181329474d755..b4fc8b1d290525b071b4e6b1967cfee0ce07bc9d 100644 --- a/src/share/classes/sun/tools/asm/Assembler.java +++ b/src/share/classes/sun/tools/asm/Assembler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -91,9 +91,9 @@ class Assembler implements Constants { add(new Instruction(where, opc, flagNoCovered)); } - static Vector SourceClassList = new Vector(); + static Vector SourceClassList = new Vector<>(); - static Vector TmpCovTable = new Vector(); + static Vector TmpCovTable = new Vector<>(); static int[] JcovClassCountArray = new int[CT_LAST_KIND + 1]; @@ -177,8 +177,8 @@ class Assembler implements Constants { case opc_lookupswitch: { SwitchData sw = (SwitchData)inst.value; optimize(env, sw.defaultLabel); - for (Enumeration e = sw.tab.elements() ; e.hasMoreElements();) { - optimize(env, (Label)e.nextElement()); + for (Enumeration
          Audio System Property Keys
          Property KeyInterface
          + + + + + + +
          + +
          + + + +

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + img + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http:// + + + mailto: + + + + + + + + + offsite + mailto + local + + + + + + + + + + + + + home + mail + goto + + + + + + +
          +
          +

          + + + + + + + + last modified + + + + + + + + by + + + + + + Jeni Tennison + + +

          +
          +
          + + diff --git a/test/javax/xml/jaxp/parsers/8022548/TestBase.java b/test/javax/xml/jaxp/parsers/8022548/TestBase.java new file mode 100644 index 0000000000000000000000000000000000000000..c395ff472145362ea649c07037beacc5408bbf72 --- /dev/null +++ b/test/javax/xml/jaxp/parsers/8022548/TestBase.java @@ -0,0 +1,73 @@ + +import java.security.Policy; + +/** + * + * + * @author huizhe.wang@oracle.com + */ +public class TestBase { + public String filePath; + boolean hasSM; + String curdir; + Policy origPolicy; + + String testName; + String errMsg; + + int passed = 0, failed = 0; + + /** + * Creates a new instance of StreamReader + */ + public TestBase(String name) { + testName = name; + } + + //junit @Override + protected void setUp() { + if (System.getSecurityManager() != null) { + hasSM = true; + System.setSecurityManager(null); + } + + filePath = System.getProperty("test.src"); + if (filePath == null) { + //current directory + filePath = System.getProperty("user.dir"); + } + origPolicy = Policy.getPolicy(); + + } + + //junit @Override + public void tearDown() { + // turn off security manager and restore policy + System.setSecurityManager(null); + Policy.setPolicy(origPolicy); + if (hasSM) { + System.setSecurityManager(new SecurityManager()); + } + System.out.println("\nNumber of tests passed: " + passed); + System.out.println("Number of tests failed: " + failed + "\n"); + + if (errMsg != null ) { + throw new RuntimeException(errMsg); + } + } + + void fail(String msg) { + if (errMsg == null) { + errMsg = msg; + } else { + errMsg = errMsg + "\n" + msg; + } + failed++; + } + + void success(String msg) { + passed++; + System.out.println(msg); + } + +} diff --git a/test/javax/xml/jaxp/parsers/8022548/XOMParserTest.java b/test/javax/xml/jaxp/parsers/8022548/XOMParserTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4fe26597508afb5f5e5f2655e5c6acf3c76d8982 --- /dev/null +++ b/test/javax/xml/jaxp/parsers/8022548/XOMParserTest.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test @bug 8022548 + * @summary test that a parser can use DTDConfiguration + * @run main XOMParserTest + */ +import com.sun.org.apache.xerces.internal.impl.Constants; +import com.sun.org.apache.xerces.internal.parsers.*; +import java.io.*; +import javax.xml.transform.*; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import org.xml.sax.InputSource; + +/** + *

          Test {@link javax.xml.transform.Transformer} for JDK-8022548: SPECJVM2008 + * has errors introduced in 7u40-b34 + * + * Test XOM is supported after jaxp 1.5

          + * + * @author Joe Wang + * + */ +public class XOMParserTest extends TestBase { + + public XOMParserTest(String name) { + super(name); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + XOMParserTest test = new XOMParserTest("XOM parser test"); + test.setUp(); + test.testTransform(); + test.tearDown(); + } + + public final void testTransform() { + + try { + + String inFilename = filePath + "/JDK8022548.xml"; + String xslFilename = filePath + "/JDK8022548.xsl"; + String outFilename = filePath + "/JDK8022548.out"; + + StringWriter sw = new StringWriter(); + // Create transformer factory + TransformerFactory factory = TransformerFactory.newInstance(); + // set the translet name +// factory.setAttribute("translet-name", "myTranslet"); + + // set the destination directory +// factory.setAttribute("destination-directory", "c:\\temp"); +// factory.setAttribute("generate-translet", Boolean.TRUE); + + // Use the factory to create a template containing the xsl file + Templates template = factory.newTemplates(new StreamSource(new FileInputStream(xslFilename))); + // Use the template to create a transformer + Transformer xformer = template.newTransformer(); + // Prepare the input and output files + Source source = new StreamSource(new FileInputStream(inFilename)); + Result result = new StreamResult(new FileOutputStream(outFilename)); + //Result result = new StreamResult(sw); + // Apply the xsl file to the source file and write the result to the output file + xformer.transform(source, result); + + /** + * String out = sw.toString(); if (out.indexOf("

          ") < 0 ) { + * fail(out); } + */ + String canonicalizedFileName = outFilename + ".canonicalized"; + canonicalize(outFilename, canonicalizedFileName); + } catch (Exception e) { + // unexpected failure + fail(e.getMessage()); + } + } + + public void canonicalize(String inName, String outName) { + try (//FileOutputStream outStream = new FileOutputStream(outName); + FileInputStream inputStream = new FileInputStream(inName);) { + JDK15XML1_0Parser parser = new JDK15XML1_0Parser(); + parser.parse(new InputSource(inputStream)); + success("test passed"); + } catch (Exception e) { + fail(e.getMessage()); + } + + } + + class JDK15XML1_0Parser extends SAXParser { + + JDK15XML1_0Parser() throws org.xml.sax.SAXException { + + super(new DTDConfiguration()); + // workaround for Java 1.5 beta 2 bugs + com.sun.org.apache.xerces.internal.util.SecurityManager manager = + new com.sun.org.apache.xerces.internal.util.SecurityManager(); + setProperty(Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY, manager); + + } + } +} diff --git a/test/jdk/lambda/MethodReferenceTestInstanceMethod.java b/test/jdk/lambda/MethodReferenceTestInstanceMethod.java index 40a64aaf38e1543cdb0d6d4e6177d7bcf7f1dfa6..12faf3900a73924ae5b703ea40e0a63e3c8eaafc 100644 --- a/test/jdk/lambda/MethodReferenceTestInstanceMethod.java +++ b/test/jdk/lambda/MethodReferenceTestInstanceMethod.java @@ -47,7 +47,7 @@ public class MethodReferenceTestInstanceMethod { } public void testStringBuffer() { - String s = generate().collect(Collectors.toStringBuilder()).toString(); + String s = generate().collect(Collectors.joining()); assertEquals(s, "THREEFOURFIVE"); } diff --git a/test/jdk/lambda/separate/TestHarness.java b/test/jdk/lambda/separate/TestHarness.java index 801fa485b3395a67d7275dab2a5dd43b5a37b163..9a4d0676702f41ccf5dbe5793b3b659cff55188d 100644 --- a/test/jdk/lambda/separate/TestHarness.java +++ b/test/jdk/lambda/separate/TestHarness.java @@ -119,7 +119,7 @@ public class TestHarness { Class stub = new Class(specimen.getName(), cm); String params = - Arrays.asList(args).stream().collect(Collectors.toStringJoiner(", ")).toString(); + Arrays.asList(args).stream().collect(Collectors.joining(", ")).toString(); ConcreteMethod sm = new ConcreteMethod( method.getReturnType(), method.getName(), @@ -150,7 +150,7 @@ public class TestHarness { null, Arrays.asList((Method)method)); Class cstub = new Class(specimen.getName()); - String params = Arrays.asList(args).stream().collect(Collectors.toStringJoiner(", ")).toString(); + String params = Arrays.asList(args).stream().collect(Collectors.joining(", ")).toString(); ConcreteMethod sm = new ConcreteMethod( "int", SourceModel.stdMethodName, diff --git a/test/sun/awt/image/ImagingLib/SamePackingTypeTest.java b/test/sun/awt/image/ImagingLib/SamePackingTypeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..75f946b9acd15c18a74fcc93d3b03517c77329b4 --- /dev/null +++ b/test/sun/awt/image/ImagingLib/SamePackingTypeTest.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8019201 + * @summary Test verifies that medialib glue code does not throw + * an ImagingOpException for certain pairs of source and + * destination images. + * + * @run main SamePackingTypeTest + */ + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import static java.awt.image.BufferedImage.TYPE_4BYTE_ABGR; +import static java.awt.image.BufferedImage.TYPE_4BYTE_ABGR_PRE; +import static java.awt.image.BufferedImage.TYPE_INT_ARGB; +import static java.awt.image.BufferedImage.TYPE_INT_ARGB_PRE; +import java.awt.image.BufferedImageOp; +import java.awt.image.ConvolveOp; +import java.awt.image.ImagingOpException; +import java.awt.image.Kernel; +import java.util.Arrays; + + +public class SamePackingTypeTest { + + public static void main(String[] args) { + BufferedImageOp op = createTestOp(); + + try { + System.out.print("Integer-based images... "); + doTest(op, TYPE_INT_ARGB, TYPE_INT_ARGB_PRE); + System.out.println("done."); + + System.out.print("Byte-based images... "); + doTest(op, TYPE_4BYTE_ABGR, TYPE_4BYTE_ABGR_PRE); + System.out.println("done"); + } catch (ImagingOpException e) { + throw new RuntimeException("Test FAILED", e); + } + } + + private static void doTest(BufferedImageOp op, int stype, int dtype) { + final int size = 100; + + final BufferedImage src = new BufferedImage(size, size, stype); + Graphics2D g = src.createGraphics(); + g.setColor(Color.red); + g.fillRect(0, 0, size, size); + g.dispose(); + + + final BufferedImage dst = new BufferedImage(size, size, dtype); + g = dst.createGraphics(); + g.setColor(Color.blue); + g.fillRect(0, 0, size, size); + g.dispose(); + + op.filter(src, dst); + + final int rgb = dst.getRGB(size - 1, size - 1); + System.out.printf("dst: 0x%X ", rgb); + + if (rgb != 0xFFFF0000) { + throw new RuntimeException(String.format("Wrong color in dst: 0x%X", rgb)); + } + } + + private static BufferedImageOp createTestOp() { + final int size = 1; + final float v = 1f / (size * size); + final float[] k_data = new float[size * size]; + Arrays.fill(k_data, v); + + Kernel k = new Kernel(size, size, k_data); + return new ConvolveOp(k); + } +} diff --git a/test/sun/invoke/util/ValueConversionsTest.java b/test/sun/invoke/util/ValueConversionsTest.java index d5255b929536cbd2741a541bd1d238ff70ded432..01fc6de9fa0a5207b727e94654174ec3e6b8ead9 100644 --- a/test/sun/invoke/util/ValueConversionsTest.java +++ b/test/sun/invoke/util/ValueConversionsTest.java @@ -35,7 +35,7 @@ import static org.junit.Assert.*; /* @test * @summary unit tests for value-type conversion utilities - * @ignore This test requires a special compilation environment to access sun.inovke.util. Run by hand. + * @compile -XDignore.symbol.file ValueConversionsTest.java * @run junit/othervm test.sun.invoke.util.ValueConversionsTest * @run junit/othervm * -DValueConversionsTest.MAX_ARITY=255 -DValueConversionsTest.START_ARITY=250 diff --git a/test/sun/security/tools/jarsigner/collator.sh b/test/sun/security/tools/jarsigner/collator.sh new file mode 100644 index 0000000000000000000000000000000000000000..06e21aac5fe841357099ba10428870325e3c9eda --- /dev/null +++ b/test/sun/security/tools/jarsigner/collator.sh @@ -0,0 +1,76 @@ +# +# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @bug 8021789 +# @summary jarsigner parses alias as command line option (depending on locale) +# + +if [ "${TESTJAVA}" = "" ] ; then + JAVAC_CMD=`which javac` + TESTJAVA=`dirname $JAVAC_CMD`/.. +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + Windows_* ) + FS="\\" + ;; + * ) + FS="/" + ;; +esac + +F=collator +KS=collator.jks +JFILE=collator.jar + +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit \ + -keystore $KS" +JAR=$TESTJAVA${FS}bin${FS}jar +JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner -keystore $KS -storepass changeit" + +rm $F $KS $JFILE 2> /dev/null + +echo 12345 > $F +$JAR cvf $JFILE $F + +ERR="" + +$KT -alias debug -dname CN=debug -genkey -validity 300 || ERR="$ERR 1" + +# use "debug" as alias name +$JARSIGNER $JFILE debug || ERR="$ERR 2" + +# use "" as alias name (although there will be a warning) +$JARSIGNER -verify $JFILE "" || ERR="$ERR 3" + +if [ "$ERR" = "" ]; then + exit 0 +else + echo "ERR is $ERR" + exit 1 +fi + + diff --git a/test/sun/util/calendar/zi/tzdata/VERSION b/test/sun/util/calendar/zi/tzdata/VERSION index 8ad1064e0581993ba8e28c93183ba74629d72d86..e50b6f37dccfb56442cc4e985671d77d9841ede3 100644 --- a/test/sun/util/calendar/zi/tzdata/VERSION +++ b/test/sun/util/calendar/zi/tzdata/VERSION @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013c +tzdata2013d diff --git a/test/sun/util/calendar/zi/tzdata/africa b/test/sun/util/calendar/zi/tzdata/africa index 2f5d3c5e3fc95d449a193e43508ba8355d63e8ed..6b19b982c6bf31f71a86e12d3276e68ce3e026a4 100644 --- a/test/sun/util/calendar/zi/tzdata/africa +++ b/test/sun/util/calendar/zi/tzdata/africa @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -875,12 +875,18 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou # announced that year's Ramadan daylight-saving transitions would be # 2012-07-20 and 2012-08-20; see # . -# + +# From Andrew Paprocki (2013-07-02): +# Morocco announced that the year's Ramadan daylight-savings +# transitions would be 2013-07-07 and 2013-08-10; see: +# http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10 + +# From Paul Eggert (2013-07-03): # To estimate what the Moroccan government will do in future years, -# transition dates for 2013 through 2021 were determined by running +# transition dates for 2014 through 2021 were determined by running # the following program under GNU Emacs 24.3: # -# (let ((islamic-year 1434)) +# (let ((islamic-year 1435)) # (while (< islamic-year 1444) # (let ((a # (calendar-gregorian-from-absolute @@ -933,8 +939,8 @@ Rule Morocco 2012 2019 - Apr lastSun 2:00 1:00 S Rule Morocco 2012 max - Sep lastSun 3:00 0 - Rule Morocco 2012 only - Jul 20 3:00 0 - Rule Morocco 2012 only - Aug 20 2:00 1:00 S -Rule Morocco 2013 only - Jul 9 3:00 0 - -Rule Morocco 2013 only - Aug 8 2:00 1:00 S +Rule Morocco 2013 only - Jul 7 3:00 0 - +Rule Morocco 2013 only - Aug 10 2:00 1:00 S Rule Morocco 2014 only - Jun 29 3:00 0 - Rule Morocco 2014 only - Jul 29 2:00 1:00 S Rule Morocco 2015 only - Jun 18 3:00 0 - diff --git a/test/sun/util/calendar/zi/tzdata/antarctica b/test/sun/util/calendar/zi/tzdata/antarctica index daa03ea830c98ebb937e84e87311e003d9887ca6..434432611cac69dadc6ae174323e591acf674735 100644 --- a/test/sun/util/calendar/zi/tzdata/antarctica +++ b/test/sun/util/calendar/zi/tzdata/antarctica @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/test/sun/util/calendar/zi/tzdata/asia b/test/sun/util/calendar/zi/tzdata/asia index 7818c029a60b5db9bd54c3c4677fcae490c4e667..f0931b3264de31c0b47b6a9ef37dca19a3ffd49d 100644 --- a/test/sun/util/calendar/zi/tzdata/asia +++ b/test/sun/util/calendar/zi/tzdata/asia @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -1235,39 +1235,21 @@ Rule Zion 2011 only - Oct 2 2:00 0 S Rule Zion 2012 only - Mar Fri>=26 2:00 1:00 D Rule Zion 2012 only - Sep 23 2:00 0 S -# From Ephraim Silverberg (2012-10-18): -# Yesterday, the Interior Ministry Committee, after more than a year -# past, approved sending the proposed June 2011 changes to the Time -# Decree Law back to the Knesset for second and third (final) votes -# before the upcoming elections on Jan. 22, 2013. Hence, although the -# changes are not yet law, they are expected to be so before February 2013. +# From Ephraim Silverberg (2013-06-27): +# On June 23, 2013, the Israeli government approved changes to the +# Time Decree Law. The next day, the changes passed the First Reading +# in the Knesset. The law is expected to pass the Second and Third +# (final) Readings by the beginning of September 2013. # -# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March. -# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the -# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day -# later (i.e. at 02:00 the first Monday after October 2). -# [Rosh Hashana holidays are factored in until 2100.] - -# From Ephraim Silverberg (2012-11-05): -# The Knesset passed today (in second and final readings) the amendment to the -# Time Decree Law making the changes ... law. +# As of 2013, DST starts at 02:00 on the Friday before the last Sunday +# in March. DST ends at 02:00 on the last Sunday of October. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D -Rule Zion 2013 2026 - Oct Sun>=2 2:00 0 S -Rule Zion 2027 only - Oct Mon>=3 2:00 0 S -Rule Zion 2028 max - Oct Sun>=2 2:00 0 S -# The following rules are commented out for now, as they break older -# versions of zic that support only signed 32-bit timestamps, i.e., -# through 2038-01-19 03:14:07 UTC. -#Rule Zion 2028 2053 - Oct Sun>=2 2:00 0 S -#Rule Zion 2054 only - Oct Mon>=3 2:00 0 S -#Rule Zion 2055 2080 - Oct Sun>=2 2:00 0 S -#Rule Zion 2081 only - Oct Mon>=3 2:00 0 S -#Rule Zion 2082 max - Oct Sun>=2 2:00 0 S +Rule Zion 2013 max - Oct lastSun 2:00 0 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Asia/Jerusalem 2:20:56 - LMT 1880 +Zone Asia/Jerusalem 2:20:54 - LMT 1880 2:20:40 - JMT 1918 # Jerusalem Mean Time? 2:00 Zion I%sT @@ -2570,8 +2552,8 @@ Rule Syria 2006 only - Sep 22 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 +# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or +# rather Midnight between Thursday and Friday. This does make more sense 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... diff --git a/test/sun/util/calendar/zi/tzdata/australasia b/test/sun/util/calendar/zi/tzdata/australasia index db954a81dcd29fa5e9cb76304bbf345b6c57c458..11a3cb97fee8b61483ea9fb2f3ed54ba5682c933 100644 --- a/test/sun/util/calendar/zi/tzdata/australasia +++ b/test/sun/util/calendar/zi/tzdata/australasia @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -253,10 +253,16 @@ Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb # - Macquarie Island will stay on UTC+11 for winter and therefore not # switch back from daylight savings time when other parts of Australia do # on 4 April. +# +# From Arthur David Olson (2013-05-23): +# The 1919 transition is overspecified below so pre-2013 zics +# will produce a binary file with an EST-type as the first 32-bit type; +# this is required for correct handling of times before 1916 by +# pre-2013 versions of localtime. Zone Antarctica/Macquarie 0 - zzz 1899 Nov 10:00 - EST 1916 Oct 1 2:00 10:00 1:00 EST 1917 Feb - 10:00 Aus EST 1919 Apr + 10:00 Aus EST 1919 Apr 1 0:00s 0 - zzz 1948 Mar 25 10:00 Aus EST 1967 10:00 AT EST 2010 Apr 4 3:00 @@ -1498,12 +1504,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # From Paul Eggert (2000-01-08): # IATA SSIM (1999-09) says DST ends 0100 local time. Go with McDow. -# From the BBC World Service (1998-10-31 11:32 UTC): +# From the BBC World Service in +# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC): # The Fijiian government says the main reasons for the time change is to -# improve productivity and reduce road accidents. But correspondents say it -# also hopes the move will boost Fiji's ability to compete with other pacific -# islands in the effort to attract tourists to witness the dawning of the new -# millenium. +# improve productivity and reduce road accidents.... [T]he move is also +# intended to boost Fiji's ability to attract tourists to witness the dawning +# of the new millennium. # http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13) # reports that Fiji has discontinued DST. @@ -1648,7 +1654,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell. # From Eric Ulevik (1999-05-03): -# Tonga's director of tourism, who is also secretary of the National Millenium +# Tonga's director of tourism, who is also secretary of the National Millennium # Committee, has a plan to get Tonga back in front. # He has proposed a one-off move to tropical daylight saving for Tonga from # October to March, which has won approval in principle from the Tongan diff --git a/test/sun/util/calendar/zi/tzdata/backward b/test/sun/util/calendar/zi/tzdata/backward index 4ccea7c7dbe0500166e22193cf6cf34f409fa4b9..ca4c437a15012ba415c11a5f4cccab52eb85cc45 100644 --- a/test/sun/util/calendar/zi/tzdata/backward +++ b/test/sun/util/calendar/zi/tzdata/backward @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/test/sun/util/calendar/zi/tzdata/etcetera b/test/sun/util/calendar/zi/tzdata/etcetera index 609b305493cedfeeb70cbe241e05e2a9edbe7f6a..d557e3033fbc0f6ea648b69a624e4a8fc6734786 100644 --- a/test/sun/util/calendar/zi/tzdata/etcetera +++ b/test/sun/util/calendar/zi/tzdata/etcetera @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/test/sun/util/calendar/zi/tzdata/europe b/test/sun/util/calendar/zi/tzdata/europe index 268504d09839da7328da1739104ac9364e5af5b4..688136c80166c91ed680f4d48d9b665b36693d47 100644 --- a/test/sun/util/calendar/zi/tzdata/europe +++ b/test/sun/util/calendar/zi/tzdata/europe @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. @@ -546,7 +546,7 @@ Rule C-Eur 1944 only - Oct 2 2:00s 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 +# affected are apparently these fictitious zones that translate acronyms # CET and MET: # # Zone CET 1:00 C-Eur CE%sT @@ -2802,9 +2802,9 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. # Ukraine # -# From Igor Karpov, who works for the Ukranian Ministry of Justice, +# From Igor Karpov, who works for the Ukrainian Ministry of Justice, # via Garrett Wollman (2003-01-27): -# BTW, I've found the official document on this matter. It's goverment +# BTW, I've found the official document on this matter. It's government # regulations number 509, May 13, 1996. In my poor translation it says: # "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday # of March at 3am the time is changing to 4am and each last Sunday of @@ -2838,7 +2838,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. # time this year after all. # # From Udo Schwedt (2011-10-18): -# As far as I understand, the recent change to the Ukranian time zone +# As far as I understand, the recent change to the Ukrainian time zone # (Europe/Kiev) to introduce permanent daylight saving time (similar # to Russia) was reverted today: # diff --git a/test/sun/util/calendar/zi/tzdata/factory b/test/sun/util/calendar/zi/tzdata/factory index 53ca3aa5d312a2b6d7d374a89f634b60a5658920..813d99a1f1f95d0ff89095a2abd446b190872cb1 100644 --- a/test/sun/util/calendar/zi/tzdata/factory +++ b/test/sun/util/calendar/zi/tzdata/factory @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. diff --git a/test/sun/util/calendar/zi/tzdata/iso3166.tab b/test/sun/util/calendar/zi/tzdata/iso3166.tab index fee3f33911a85111e35dabb70797c56c6c3c6a39..c6b2d0af3f1fea5659b0c0dae6dd288462b600fa 100644 --- a/test/sun/util/calendar/zi/tzdata/iso3166.tab +++ b/test/sun/util/calendar/zi/tzdata/iso3166.tab @@ -1,39 +1,37 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # -#

          +# ISO 3166 alpha-2 country codes
          +#
           # This file is in the public domain, so clarified as of
           # 2009-05-17 by Arthur David Olson.
          -# ISO 3166 alpha-2 country codes
           #
          -# From Paul Eggert (2006-09-27):
          +# From Paul Eggert (2013-05-27):
           #
           # This file contains a table with the following columns:
           # 1.  ISO 3166-1 alpha-2 country code, current as of
          -#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:
          -#     
          -#     ISO 3166 Maintenance agency (ISO 3166/MA)
          -#     .
          +#     ISO 3166-1 Newsletter VI-15 (2013-05-10).  See: Updates on ISO 3166
          +#   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
           # 2.  The usual English name for the country,
           #     chosen so that alphabetic sorting of subsets produces helpful lists.
           #     This is not the same as the English name in the ISO 3166 tables.
          @@ -43,8 +41,9 @@
           #
           # Lines beginning with `#' are comments.
           #
          -# From Arthur David Olson (2011-08-17):
          -# Resynchronized today with the ISO 3166 site (adding SS for South Sudan).
          +# This table is intended as an aid for users, to help them select time
          +# zone data appropriate for their practical needs.  It is not intended
          +# to take or endorse any position on legal or territorial claims.
           #
           #country-
           #code	country name
          @@ -77,7 +76,7 @@ BL	St Barthelemy
           BM	Bermuda
           BN	Brunei
           BO	Bolivia
          -BQ	Bonaire Sint Eustatius & Saba
          +BQ	Bonaire, St Eustatius & Saba
           BR	Brazil
           BS	Bahamas
           BT	Bhutan
          @@ -258,7 +257,7 @@ SR	Suriname
           SS	South Sudan
           ST	Sao Tome & Principe
           SV	El Salvador
          -SX	Sint Maarten
          +SX	St Maarten (Dutch part)
           SY	Syria
           SZ	Swaziland
           TC	Turks & Caicos Is
          diff --git a/test/sun/util/calendar/zi/tzdata/leapseconds b/test/sun/util/calendar/zi/tzdata/leapseconds
          index ab6720ded58c9f2e86155bbc458e14830dbb4cf7..912801227a2334d8def9f04e6d4c094ad8a1d3f4 100644
          --- a/test/sun/util/calendar/zi/tzdata/leapseconds
          +++ b/test/sun/util/calendar/zi/tzdata/leapseconds
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/northamerica b/test/sun/util/calendar/zi/tzdata/northamerica
          index 858bf811ac9e08c1fa1a8824f860054115016706..43a0b22504bb4f312e284b9e765414565c337dac 100644
          --- a/test/sun/util/calendar/zi/tzdata/northamerica
          +++ b/test/sun/util/calendar/zi/tzdata/northamerica
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/pacificnew b/test/sun/util/calendar/zi/tzdata/pacificnew
          index 7738a48087be6586975d307d416763727c823663..09000c3457a9333a19a8207c57644cfc4d117621 100644
          --- a/test/sun/util/calendar/zi/tzdata/pacificnew
          +++ b/test/sun/util/calendar/zi/tzdata/pacificnew
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/solar87 b/test/sun/util/calendar/zi/tzdata/solar87
          index 46b1d56025f5858a1c155b1d8f7633ff0d9580e0..0512ca410c1079872bd24884ec54f2138120e4a7 100644
          --- a/test/sun/util/calendar/zi/tzdata/solar87
          +++ b/test/sun/util/calendar/zi/tzdata/solar87
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/solar88 b/test/sun/util/calendar/zi/tzdata/solar88
          index 71b60d5d74adb0d63c30f4c330a00a1f59bb79b2..3314cb1d64017729a34a3b56ada60c85106d9e85 100644
          --- a/test/sun/util/calendar/zi/tzdata/solar88
          +++ b/test/sun/util/calendar/zi/tzdata/solar88
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/solar89 b/test/sun/util/calendar/zi/tzdata/solar89
          index ae2bea8876acd1358fb90131f00f89733b51eb78..3aa88cf0893b86a83de1aadfaa9df70bb5568afc 100644
          --- a/test/sun/util/calendar/zi/tzdata/solar89
          +++ b/test/sun/util/calendar/zi/tzdata/solar89
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/southamerica b/test/sun/util/calendar/zi/tzdata/southamerica
          index d1865d3f19b07bb58aa6aff4924fc5c649daf7c4..e7df18ad2c31b64ffaa913ca26c364bec1219953 100644
          --- a/test/sun/util/calendar/zi/tzdata/southamerica
          +++ b/test/sun/util/calendar/zi/tzdata/southamerica
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          @@ -994,7 +994,7 @@ Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
           # adopted by the same states as before.
           Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
           # From Frederico A. C. Neves (2008-09-10):
          -# Acording to this decree
          +# According to this decree
           # 
           # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
           # 
          @@ -1226,7 +1226,7 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
           # http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
           # 
           #
          -# This is not yet reflected in the offical "cambio de hora" site, but
          +# This is not yet reflected in the official "cambio de hora" site, but
           # probably will be soon:
           # 
           # http://www.horaoficial.cl/cambio.htm
          diff --git a/test/sun/util/calendar/zi/tzdata/systemv b/test/sun/util/calendar/zi/tzdata/systemv
          index 0b0a2665654507daa6e5e991001485fefea5d4be..f909f9c76dbd4cfc8f9b8fa9ac1de182dfc61dcc 100644
          --- a/test/sun/util/calendar/zi/tzdata/systemv
          +++ b/test/sun/util/calendar/zi/tzdata/systemv
          @@ -1,22 +1,22 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
          diff --git a/test/sun/util/calendar/zi/tzdata/zone.tab b/test/sun/util/calendar/zi/tzdata/zone.tab
          index cbcdc075bf77a7950240542795b0caa90e3b0c00..aa247c26df84376ab6c38655deee596cce6252c1 100644
          --- a/test/sun/util/calendar/zi/tzdata/zone.tab
          +++ b/test/sun/util/calendar/zi/tzdata/zone.tab
          @@ -1,41 +1,44 @@
           #
           # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
          -#  
          +#
           # This code is free software; you can redistribute it and/or modify it
           # under the terms of the GNU General Public License version 2 only, as
           # published by the Free Software Foundation.  Oracle designates this
           # particular file as subject to the "Classpath" exception as provided
           # by Oracle in the LICENSE file that accompanied this code.
          -#  
          +#
           # This code is distributed in the hope that it will be useful, but WITHOUT
           # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
           # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
           # version 2 for more details (a copy is included in the LICENSE file that
           # accompanied this code).
          -#  
          +#
           # You should have received a copy of the GNU General Public License version
           # 2 along with this work; if not, write to the Free Software Foundation,
           # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
          -#  
          +#
           # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
           # or visit www.oracle.com if you need additional information or have any
           # questions.
           #
          -# 
          +# TZ zone descriptions
          +#
           # This file is in the public domain, so clarified as of
           # 2009-05-17 by Arthur David Olson.
           #
          -# TZ zone descriptions
          -#
          -# From Paul Eggert (1996-08-05):
          +# From Paul Eggert (2013-05-27):
           #
           # This file contains a table with the following columns:
           # 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
          +#     This identifies a country that overlaps the zone.  The country may
          +#     overlap other zones and the zone may overlap other countries.
           # 2.  Latitude and longitude of the zone's principal location
           #     in ISO 6709 sign-degrees-minutes-seconds format,
           #     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
           #     first latitude (+ is north), then longitude (+ is east).
          +#     This location need not lie within the column-1 country.
           # 3.  Zone name used in value of TZ environment variable.
          +#     Please see the 'Theory' file for how zone names are chosen.
           # 4.  Comments; present if and only if the country has multiple rows.
           #
           # Columns are separated by a single tab.
          @@ -45,6 +48,10 @@
           #
           # Lines beginning with `#' are comments.
           #
          +# This table is intended as an aid for users, to help them select time
          +# zone data appropriate for their practical needs.  It is not intended
          +# to take or endorse any position on legal or territorial claims.
          +#
           #country-
           #code	coordinates	TZ			comments
           AD	+4230+00131	Europe/Andorra
          @@ -239,7 +246,7 @@ ID	-0002+10920	Asia/Pontianak	west & central Borneo
           ID	-0507+11924	Asia/Makassar	east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
           ID	-0232+14042	Asia/Jayapura	west New Guinea (Irian Jaya) & Malukus (Moluccas)
           IE	+5320-00615	Europe/Dublin
          -IL	+3146+03514	Asia/Jerusalem
          +IL	+314650+0351326	Asia/Jerusalem
           IM	+5409-00428	Europe/Isle_of_Man
           IN	+2232+08822	Asia/Kolkata
           IO	-0720+07225	Indian/Chagos
          diff --git a/test/tools/pack200/TimeStamp.java b/test/tools/pack200/TimeStamp.java
          index acce4624aab82c026d4a30f64975b1a9dc210ca6..60e69b726b28e679c80b4d090fbc12c39e3e8bb5 100644
          --- a/test/tools/pack200/TimeStamp.java
          +++ b/test/tools/pack200/TimeStamp.java
          @@ -88,6 +88,7 @@ public class TimeStamp {
                   unpackNative(packFile, pstFile);
                   verifyJar(goldenFile, pstFile);
                   pstFile.delete();
          +        Utils.cleanup();
               }
           
               static void unpackNative(File packFile, File outFile) {
          @@ -149,7 +150,6 @@ public class TimeStamp {
                       Utils.close(jf1);
                       Utils.close(jf2);
                   }
          -        Utils.cleanup();
                   if (errors > 0) {
                       throw new RuntimeException("FAIL:" + errors + " error(s) encounted");
                   }