--- a/.hgtags Tue Jul 09 17:05:20 2019 +0530
+++ b/.hgtags Thu Jul 11 15:40:29 2019 +0530
@@ -571,3 +571,4 @@
e64383344f144217c36196c3c8a2df8f588a2af3 jdk-14+3
1e95931e7d8fa7e3899340a9c7cb28dbea50c10c jdk-13+28
19d0b382f0869f72d4381b54fa129f1c74b6e766 jdk-14+4
+0f1e29c77e50c7da11d83df410026392c4d1a28c jdk-14+5
--- a/make/Docs.gmk Tue Jul 09 17:05:20 2019 +0530
+++ b/make/Docs.gmk Thu Jul 11 15:40:29 2019 +0530
@@ -626,7 +626,7 @@
FILTER := $(PANDOC_HTML_MANPAGE_FILTER), \
CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
REPLACEMENTS := @@VERSION_SHORT@@ => $(VERSION_SHORT), \
- OPTIONS := -V include-before='$(SPECS_TOP)' -V include-after='$(SPECS_BOTTOM_1)', \
+ OPTIONS := --toc -V include-before='$(SPECS_TOP)' -V include-after='$(SPECS_BOTTOM_1)', \
POST_PROCESS := $(TOOL_FIXUPPANDOC), \
EXTRA_DEPS := $(PANDOC_HTML_MANPAGE_FILTER) \
$(PANDOC_HTML_MANPAGE_FILTER_JAVASCRIPT), \
--- a/make/autoconf/flags-cflags.m4 Tue Jul 09 17:05:20 2019 +0530
+++ b/make/autoconf/flags-cflags.m4 Thu Jul 11 15:40:29 2019 +0530
@@ -579,8 +579,7 @@
# set -qtbtable=full for a better traceback table/better stacks in hs_err when xlc16 is used
TOOLCHAIN_CFLAGS_JDK="-qtbtable=full -qchars=signed -qfullpath -qsaveopt -qstackprotect" # add on both CFLAGS
TOOLCHAIN_CFLAGS_JVM="-qtbtable=full -qtune=balanced \
- -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \
- -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno -qstackprotect"
+ -qalias=noansi -qstrict -qtls=default -qnortti -qnoeh -qignerrno -qstackprotect"
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
TOOLCHAIN_CFLAGS_JVM="-nologo -MD -MP"
TOOLCHAIN_CFLAGS_JDK="-nologo -MD -Zc:wchar_t-"
--- a/make/data/docs-resources/resources/jdk-default.css Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/docs-resources/resources/jdk-default.css Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -162,3 +162,22 @@
font-style: italic;
font-size: 80%;
}
+
+nav#TOC {
+ border: 1px solid gray;
+ border-radius: 10px;
+ padding: 5px 10px;
+ margin-bottom: 15px;
+}
+
+nav#TOC ul ul {
+ font-size:smaller;
+}
+
+nav#TOC ul ul li {
+ display: inline-block
+}
+
+nav#TOC ul ul li::before {
+ content: " \2022 "
+}
--- a/make/data/tzdata/VERSION Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/VERSION Thu Jul 11 15:40:29 2019 +0530
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2018g
+tzdata2019a
--- a/make/data/tzdata/africa Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/africa Thu Jul 11 15:40:29 2019 +0530
@@ -387,6 +387,11 @@
# See Africa/Lagos.
# Eritrea
+# See Africa/Nairobi.
+
+# Eswatini (formerly Swaziland)
+# See Africa/Johannesburg.
+
# Ethiopia
# See Africa/Nairobi.
#
@@ -870,8 +875,41 @@
# From Mohamed Essedik Najd (2018-10-26):
# Today, a Moroccan government council approved the perpetual addition
# of 60 minutes to the regular Moroccan timezone.
-# From Brian Inglis (2018-10-26):
-# http://www.maroc.ma/fr/actualites/le-conseil-de-gouvernement-adopte-un-projet-de-decret-relatif-lheure-legale-stipulant-le
+# From Matt Johnson (2018-10-28):
+# http://www.sgg.gov.ma/Portals/1/BO/2018/BO_6720-bis_Ar.pdf
+#
+# From Maamar Abdelkader (2018-11-01):
+# We usually move clocks back the previous week end and come back to the +1
+# the week end after.... The government does not announce yet the decision
+# about this temporary change. But it s 99% sure that it will be the case,
+# as in previous years. An unofficial survey was done these days, showing
+# that 64% of asked peopke are ok for moving from +1 to +0 during Ramadan.
+# https://leconomiste.com/article/1035870-enquete-l-economiste-sunergia-64-des-marocains-plebiscitent-le-gmt-pendant-ramadan
+#
+# From Paul Eggert (2018-11-01):
+# For now, guess that Morocco will fall back at 03:00 the last Sunday
+# before Ramadan, and spring forward at 02:00 the first Sunday after
+# Ramadan, as this has been the practice since 2012. To implement this,
+# transition dates for 2019 through 2037 were determined by running the
+# following program under GNU Emacs 26.1.
+# (let ((islamic-year 1440))
+# (require 'cal-islam)
+# (while (< islamic-year 1460)
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+# (sunday 0))
+# (while (/= sunday (mod (setq a (1- a)) 7)))
+# (while (/= sunday (mod b 7))
+# (setq b (1+ b)))
+# (setq a (calendar-gregorian-from-absolute a))
+# (setq b (calendar-gregorian-from-absolute b))
+# (insert
+# (format
+# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t-1:00\t-\n"
+# "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t0\t-\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# (setq islamic-year (+ 1 islamic-year))))
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Morocco 1939 only - Sep 12 0:00 1:00 -
@@ -903,7 +941,7 @@
Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2013 only - Jul 7 3:00 0 -
Rule Morocco 2013 only - Aug 10 2:00 1:00 -
-Rule Morocco 2013 2018 - Oct lastSun 3:00 0 -
+Rule Morocco 2013 2017 - Oct lastSun 3:00 0 -
Rule Morocco 2014 2018 - Mar lastSun 2:00 1:00 -
Rule Morocco 2014 only - Jun 28 3:00 0 -
Rule Morocco 2014 only - Aug 2 2:00 1:00 -
@@ -915,13 +953,53 @@
Rule Morocco 2017 only - Jul 2 2:00 1:00 -
Rule Morocco 2018 only - May 13 3:00 0 -
Rule Morocco 2018 only - Jun 17 2:00 1:00 -
+Rule Morocco 2019 only - May 5 3:00 0 -
+Rule Morocco 2019 only - Jun 9 2:00 1:00 -
+Rule Morocco 2020 only - Apr 19 3:00 0 -
+Rule Morocco 2020 only - May 24 2:00 1:00 -
+Rule Morocco 2021 only - Apr 11 3:00 0 -
+Rule Morocco 2021 only - May 16 2:00 1:00 -
+Rule Morocco 2022 only - Mar 27 3:00 0 -
+Rule Morocco 2022 only - May 8 2:00 1:00 -
+Rule Morocco 2023 only - Mar 19 3:00 0 -
+Rule Morocco 2023 only - Apr 23 2:00 1:00 -
+Rule Morocco 2024 only - Mar 10 3:00 0 -
+Rule Morocco 2024 only - Apr 14 2:00 1:00 -
+Rule Morocco 2025 only - Feb 23 3:00 0 -
+Rule Morocco 2025 only - Apr 6 2:00 1:00 -
+Rule Morocco 2026 only - Feb 15 3:00 0 -
+Rule Morocco 2026 only - Mar 22 2:00 1:00 -
+Rule Morocco 2027 only - Feb 7 3:00 0 -
+Rule Morocco 2027 only - Mar 14 2:00 1:00 -
+Rule Morocco 2028 only - Jan 23 3:00 0 -
+Rule Morocco 2028 only - Feb 27 2:00 1:00 -
+Rule Morocco 2029 only - Jan 14 3:00 0 -
+Rule Morocco 2029 only - Feb 18 2:00 1:00 -
+Rule Morocco 2029 only - Dec 30 3:00 0 -
+Rule Morocco 2030 only - Feb 10 2:00 1:00 -
+Rule Morocco 2030 only - Dec 22 3:00 0 -
+Rule Morocco 2031 only - Jan 26 2:00 1:00 -
+Rule Morocco 2031 only - Dec 14 3:00 0 -
+Rule Morocco 2032 only - Jan 18 2:00 1:00 -
+Rule Morocco 2032 only - Nov 28 3:00 0 -
+Rule Morocco 2033 only - Jan 9 2:00 1:00 -
+Rule Morocco 2033 only - Nov 20 3:00 0 -
+Rule Morocco 2033 only - Dec 25 2:00 1:00 -
+Rule Morocco 2034 only - Nov 5 3:00 0 -
+Rule Morocco 2034 only - Dec 17 2:00 1:00 -
+Rule Morocco 2035 only - Oct 28 3:00 0 -
+Rule Morocco 2035 only - Dec 2 2:00 1:00 -
+Rule Morocco 2036 only - Oct 19 3:00 0 -
+Rule Morocco 2036 only - Nov 23 2:00 1:00 -
+Rule Morocco 2037 only - Oct 4 3:00 0 -
+Rule Morocco 2037 only - Nov 15 2:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
0:00 Morocco +00/+01 1984 Mar 16
1:00 - +01 1986
- 0:00 Morocco +00/+01 2018 Oct 27
- 1:00 - +01
+ 0:00 Morocco +00/+01 2018 Oct 28 3:00
+ 0:00 Morocco +00/+01
# Western Sahara
#
@@ -936,8 +1014,8 @@
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
-1:00 - -01 1976 Apr 14
- 0:00 Morocco +00/+01 2018 Oct 27
- 1:00 - +01
+ 0:00 Morocco +00/+01 2018 Oct 28 3:00
+ 0:00 Morocco +00/+01
# Mozambique
#
@@ -1094,10 +1172,20 @@
# the switch is from 01:00 to 02:00 ... [Decree No. 25/2017]
# http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017
+# From Vadim Nasardinov (2018-12-29):
+# São Tomé and Príncipe is about to do the following on Jan 1, 2019:
+# https://www.stp-press.st/2018/12/05/governo-jesus-ja-decidiu-repor-hora-legal-sao-tomense/
+#
+# From Michael Deckers (2018-12-30):
+# https://www.legis-palop.org/download.jsp?idFile=102818
+# ... [The legal time of the country, which coincides with universal
+# coordinated time, will be restituted at 2 o'clock on day 1 of January, 2019.]
+
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
-0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
0:00 - GMT 2018 Jan 1 01:00
- 1:00 - WAT
+ 1:00 - WAT 2019 Jan 1 02:00
+ 0:00 - GMT
# Senegal
# See Africa/Abidjan.
@@ -1128,7 +1216,7 @@
1:30 - SAST 1903 Mar
2:00 SA SAST
Link Africa/Johannesburg Africa/Maseru # Lesotho
-Link Africa/Johannesburg Africa/Mbabane # Swaziland
+Link Africa/Johannesburg Africa/Mbabane # Eswatini
#
# Marion and Prince Edward Is
# scientific station since 1947
@@ -1170,9 +1258,6 @@
2:00 Sudan CA%sT 2000 Jan 15 12:00
3:00 - EAT
-# Swaziland
-# See Africa/Johannesburg.
-
# Tanzania
# See Africa/Nairobi.
--- a/make/data/tzdata/asia Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/asia Thu Jul 11 15:40:29 2019 +0530
@@ -609,12 +609,82 @@
# obtained from
# http://www.hko.gov.hk/gts/time/Summertime.htm
-# From Arthur David Olson (2009-10-28):
+# From Phake Nick (2018-10-27):
+# According to Singaporean newspaper
+# http://eresources.nlb.gov.sg/newspapers/Digitised/Article/singfreepresswk19041102-1.2.37
+# the day that Hong Kong start using GMT+8 should be Oct 30, 1904.
+#
+# From Paul Eggert (2018-11-17):
+# Hong Kong had a time ball near the Marine Police Station, Tsim Sha Tsui.
+# "The ball was raised manually each day and dropped at exactly 1pm
+# (except on Sundays and Government holidays)."
+# Dyson AD. From Time Ball to Atomic Clock. Hong Kong Government. 1983.
+# <https://www.hko.gov.hk/publica/gen_pub/timeball_atomic_clock.pdf>
+# "From 1904 October 30 the time-ball at Hong Kong has been dropped by order
+# of the Governor of the Colony at 17h 0m 0s G.M.T., which is 23m 18s.14 in
+# advance of 1h 0m 0s of Hong Kong mean time."
+# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
+# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
+#
+# From Joseph Myers (2018-11-18):
+# An astronomer before 1925 referring to GMT would have been using the old
+# astronomical convention where the day started at noon, not midnight.
+#
+# From Steve Allen (2018-11-17):
+# Meteorological Observations made at the Hongkong Observatory in the year 1904
+# page 4 <https://books.google.com/books?id=kgw5AQAAMAAJ&pg=RA4-PA4>
+# ... the log of drop times in Table II shows that on Sunday 1904-10-30 the
+# ball was dropped. So that looks like a special case drop for the sake
+# of broadcasting the new local time.
+#
+# From Phake Nick (2018-11-18):
+# According to The Hong Kong Weekly Press, 1904-10-29, p.324, the
+# governor of Hong Kong at the time stated that "We are further desired to
+# make it known that the change will be effected by firing the gun and by the
+# dropping of the Ball at 23min. 18sec. before one."
+# From Paul Eggert (2018-11-18):
+# See <https://mmis.hkpl.gov.hk> for this; unfortunately Flash is required.
+
+# From Phake Nick (2018-10-26):
+# I went to check microfilm records stored at Hong Kong Public Library....
+# on September 30 1941, according to Ta Kung Pao (Hong Kong edition), it was
+# stated that fallback would occur on the next day (the 1st)'s "03:00 am (Hong
+# Kong Time 04:00 am)" and the clock will fall back for a half hour. (03:00
+# probably refer to the time commonly used in mainland China at the time given
+# the paper's background) ... the sunrise/sunset time given by South China
+# Morning Post for October 1st was indeed moved by half an hour compares to
+# before. After that, in December, the battle to capture Hong Kong started and
+# the library doesn't seems to have any record stored about press during that
+# period of time. Some media resumed publication soon after that within the
+# same month, but there were not much information about time there. Later they
+# started including a radio program guide when they restored radio service,
+# explicitly mentioning it use Tokyo standard time, and later added a note
+# saying it's half an hour ahead of the old Hong Kong standard time, and it
+# also seems to indicate that Hong Kong was not using GMT+8 when it was
+# captured by Japan.
+#
+# Image of related sections on newspaper:
+# * 1941-09-30, Ta Kung Pao (Hong Kong), "Winter Time start tomorrow".
+# https://i.imgur.com/6waY51Z.jpg (Chinese)
+# * 1941-09-29, South China Morning Post, Information on sunrise/sunset
+# time and other things for September 30 and October 1.
+# https://i.imgur.com/kCiUR78.jpg
+# * 1942-02-05. The Hong Kong News, Radio Program Guide.
+# https://i.imgur.com/eVvDMzS.jpg
+# * 1941-06-14. Hong Kong Daily Press, Daylight Saving from 3am Tomorrow.
+# https://i.imgur.com/05KkvtC.png
+# * 1941-09-30, Hong Kong Daily Press, Winter Time Warning.
+# https://i.imgur.com/dge4kFJ.png
+# Also, the Liberation day of Hong Kong after WWII which British rule
+# over the territory resumed was August 30, 1945, which I think should
+# be the termination date for the use of JST in the territory....
+
+# From Paul Eggert (2018-11-17):
# Here are the dates given at
-# http://www.hko.gov.hk/gts/time/Summertime.htm
-# as of 2009-10-28:
+# https://www.hko.gov.hk/gts/time/Summertime.htm
+# as of 2014-06-19:
# Year Period
-# 1941 1 Apr to 30 Sep
+# 1941 15 Jun to 30 Sep
# 1942 Whole year
# 1943 Whole year
# 1944 Whole year
@@ -625,7 +695,7 @@
# 1949 3 Apr to 30 Oct
# 1950 2 Apr to 29 Oct
# 1951 1 Apr to 28 Oct
-# 1952 6 Apr to 25 Oct
+# 1952 6 Apr to 2 Nov
# 1953 5 Apr to 1 Nov
# 1954 21 Mar to 31 Oct
# 1955 20 Mar to 6 Nov
@@ -654,25 +724,25 @@
# 1978 Nil
# 1979 13 May to 21 Oct
# 1980 to Now Nil
-# The page does not give start or end times of day.
-# The page does not give a start date for 1942.
-# The page does not givw an end date for 1945.
-# The Japanese occupation of Hong Kong began on 1941-12-25.
-# The Japanese surrender of Hong Kong was signed 1945-09-15.
-# For lack of anything better, use start of those days as the transition times.
+# The page does not give times of day for transitions,
+# or dates for the 1942 and 1945 transitions.
+# The Japanese occupation of Hong Kong began 1941-12-25.
+# The Japanese surrender of Hong Kong was signed 1945-09-16; see:
+# Heaver S. The days after the Pacific war ended: unsettling times
+# in Hong Kong. Post Magazine. 2016-06-13.
+# https://www.scmp.com/magazines/post-magazine/article/1852990/days-after-pacific-war-ended-unsettling-times-hong-kong
+# For lack of anything better, use start of those days as the
+# transition times.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule HK 1941 only - Apr 1 3:30 1:00 S
-Rule HK 1941 only - Sep 30 3:30 0 -
Rule HK 1946 only - Apr 20 3:30 1:00 S
Rule HK 1946 only - Dec 1 3:30 0 -
Rule HK 1947 only - Apr 13 3:30 1:00 S
Rule HK 1947 only - Dec 30 3:30 0 -
Rule HK 1948 only - May 2 3:30 1:00 S
Rule HK 1948 1951 - Oct lastSun 3:30 0 -
-Rule HK 1952 only - Oct 25 3:30 0 -
+Rule HK 1952 1953 - Nov Sun>=1 3:30 0 -
Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
-Rule HK 1953 only - Nov 1 3:30 0 -
Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
Rule HK 1954 only - Oct 31 3:30 0 -
Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
@@ -682,9 +752,11 @@
Rule HK 1979 only - May Sun>=8 3:30 1:00 S
Rule HK 1979 only - Oct Sun>=16 3:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30
- 8:00 HK HK%sT 1941 Dec 25
- 9:00 - JST 1945 Sep 15
+Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 0:36:42
+ 8:00 - HKT 1941 Jun 15 3:30
+ 8:00 1:00 HKST 1941 Oct 1 4:00
+ 8:30 - HKT 1941 Dec 25
+ 9:00 - JST 1945 Sep 16
8:00 HK HK%sT
###############################################################################
@@ -1080,6 +1152,16 @@
# India
+# British astronomer Henry Park Hollis disliked India Standard Time's offset:
+# "A new time system has been proposed for India, Further India, and Burmah.
+# The scheme suggested is that the times of the meridians 5½ and 6½ hours
+# east of Greenwich should be adopted in these territories. No reason is
+# given why hourly meridians five hours and six hours east should not be
+# chosen; a plan which would bring the time of India into harmony with
+# that of almost the whole of the civilised world."
+# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
+# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
+
# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic
# https://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/
# (2015-12-22):
@@ -1250,12 +1332,65 @@
# leap year calculation involved. There has never been any serious
# plan to change that law....
#
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2018-11-30):
# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
-# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
-# stopping after 2037 when 32-bit time_t's overflow.
-# That cal-persia used Birashk's approximation, which disagrees with the solar
-# calendar predictions for the year 2025, so I corrected those dates by hand.
+# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
+# lines from 2008 through 2087. Emacs 26.1 uses Ed Reingold's
+# cal-persia implementation of Birashk's approximation, which in the
+# 2008-2087 range disagrees with the the astronomical Persian calendar
+# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058),
+# so the following code special-case those years. See Table 15.1, page 264, of:
+# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
+# The Ultimate Edition, Cambridge University Press (2018).
+# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
+# Page 258, footnote 2, of this book says there is some dispute over what will
+# happen in 2091 (and some other years after that), so this code
+# stops in 2087, as 2088 and 2089 agree with the "max" rule below.
+# (cl-loop
+# initially (require 'cal-persia)
+# with first-persian-year = 1387
+# with last-persian-year = 1466
+# ;; Exceptional years in the above range,
+# ;; from Reingold & Dershowitz Table 15.1, page 264:
+# with exceptional-persian-years = '(1404 1437)
+# with range-start = nil
+# for persian-year from first-persian-year to last-persian-year
+# do
+# (let*
+# ((exceptional-year-offset
+# (if (member persian-year exceptional-persian-years) 1 0))
+# (beg-dst-absolute
+# (+ (calendar-persian-to-absolute (list 1 1 persian-year))
+# exceptional-year-offset))
+# (end-dst-absolute
+# (+ (calendar-persian-to-absolute (list 6 30 persian-year))
+# exceptional-year-offset))
+# (next-year-beg-dst-absolute
+# (+ (calendar-persian-to-absolute (list 1 1 (1+ persian-year)))
+# (if (member (1+ persian-year) exceptional-persian-years) 1 0)))
+# (beg-dst (calendar-gregorian-from-absolute beg-dst-absolute))
+# (end-dst (calendar-gregorian-from-absolute end-dst-absolute))
+# (next-year-beg-dst (calendar-gregorian-from-absolute
+# next-year-beg-dst-absolute))
+# (year (calendar-extract-year beg-dst))
+# (range-end (if range-start year "only")))
+# (setq range-start (or range-start year))
+# (when (or (/= (calendar-extract-day beg-dst)
+# (calendar-extract-day next-year-beg-dst))
+# (= persian-year last-persian-year))
+# (insert
+# (format
+# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t1:00\t-\n"
+# range-start range-end
+# (calendar-month-name (calendar-extract-month beg-dst) t)
+# (calendar-extract-day beg-dst)))
+# (insert
+# (format
+# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t0\t-\n"
+# range-start range-end
+# (calendar-month-name (calendar-extract-month end-dst) t)
+# (calendar-extract-day end-dst)))
+# (setq range-start nil))))
#
# From Oscar van Vlijmen (2005-03-30), writing about future
# discrepancies between cal-persia and the Iranian calendar:
@@ -1290,61 +1425,113 @@
# thirtieth day of Shahrivar.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iran 1978 1980 - Mar 21 0:00 1:00 -
-Rule Iran 1978 only - Oct 21 0:00 0 -
-Rule Iran 1979 only - Sep 19 0:00 0 -
-Rule Iran 1980 only - Sep 23 0:00 0 -
-Rule Iran 1991 only - May 3 0:00 1:00 -
-Rule Iran 1992 1995 - Mar 22 0:00 1:00 -
-Rule Iran 1991 1995 - Sep 22 0:00 0 -
-Rule Iran 1996 only - Mar 21 0:00 1:00 -
-Rule Iran 1996 only - Sep 21 0:00 0 -
-Rule Iran 1997 1999 - Mar 22 0:00 1:00 -
-Rule Iran 1997 1999 - Sep 22 0:00 0 -
-Rule Iran 2000 only - Mar 21 0:00 1:00 -
-Rule Iran 2000 only - Sep 21 0:00 0 -
-Rule Iran 2001 2003 - Mar 22 0:00 1:00 -
-Rule Iran 2001 2003 - Sep 22 0:00 0 -
-Rule Iran 2004 only - Mar 21 0:00 1:00 -
-Rule Iran 2004 only - Sep 21 0:00 0 -
-Rule Iran 2005 only - Mar 22 0:00 1:00 -
-Rule Iran 2005 only - Sep 22 0:00 0 -
-Rule Iran 2008 only - Mar 21 0:00 1:00 -
-Rule Iran 2008 only - Sep 21 0:00 0 -
-Rule Iran 2009 2011 - Mar 22 0:00 1:00 -
-Rule Iran 2009 2011 - Sep 22 0:00 0 -
-Rule Iran 2012 only - Mar 21 0:00 1:00 -
-Rule Iran 2012 only - Sep 21 0:00 0 -
-Rule Iran 2013 2015 - Mar 22 0:00 1:00 -
-Rule Iran 2013 2015 - Sep 22 0:00 0 -
-Rule Iran 2016 only - Mar 21 0:00 1:00 -
-Rule Iran 2016 only - Sep 21 0:00 0 -
-Rule Iran 2017 2019 - Mar 22 0:00 1:00 -
-Rule Iran 2017 2019 - Sep 22 0:00 0 -
-Rule Iran 2020 only - Mar 21 0:00 1:00 -
-Rule Iran 2020 only - Sep 21 0:00 0 -
-Rule Iran 2021 2023 - Mar 22 0:00 1:00 -
-Rule Iran 2021 2023 - Sep 22 0:00 0 -
-Rule Iran 2024 only - Mar 21 0:00 1:00 -
-Rule Iran 2024 only - Sep 21 0:00 0 -
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 -
-Rule Iran 2025 2027 - Sep 22 0:00 0 -
-Rule Iran 2028 2029 - Mar 21 0:00 1:00 -
-Rule Iran 2028 2029 - Sep 21 0:00 0 -
-Rule Iran 2030 2031 - Mar 22 0:00 1:00 -
-Rule Iran 2030 2031 - Sep 22 0:00 0 -
-Rule Iran 2032 2033 - Mar 21 0:00 1:00 -
-Rule Iran 2032 2033 - Sep 21 0:00 0 -
-Rule Iran 2034 2035 - Mar 22 0:00 1:00 -
-Rule Iran 2034 2035 - Sep 22 0:00 0 -
+Rule Iran 1978 1980 - Mar 20 24:00 1:00 -
+Rule Iran 1978 only - Oct 20 24:00 0 -
+Rule Iran 1979 only - Sep 18 24:00 0 -
+Rule Iran 1980 only - Sep 22 24:00 0 -
+Rule Iran 1991 only - May 2 24:00 1:00 -
+Rule Iran 1992 1995 - Mar 21 24:00 1:00 -
+Rule Iran 1991 1995 - Sep 21 24:00 0 -
+Rule Iran 1996 only - Mar 20 24:00 1:00 -
+Rule Iran 1996 only - Sep 20 24:00 0 -
+Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
+Rule Iran 1997 1999 - Sep 21 24:00 0 -
+Rule Iran 2000 only - Mar 20 24:00 1:00 -
+Rule Iran 2000 only - Sep 20 24:00 0 -
+Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
+Rule Iran 2001 2003 - Sep 21 24:00 0 -
+Rule Iran 2004 only - Mar 20 24:00 1:00 -
+Rule Iran 2004 only - Sep 20 24:00 0 -
+Rule Iran 2005 only - Mar 21 24:00 1:00 -
+Rule Iran 2005 only - Sep 21 24:00 0 -
+Rule Iran 2008 only - Mar 20 24:00 1:00 -
+Rule Iran 2008 only - Sep 20 24:00 0 -
+Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
+Rule Iran 2009 2011 - Sep 21 24:00 0 -
+Rule Iran 2012 only - Mar 20 24:00 1:00 -
+Rule Iran 2012 only - Sep 20 24:00 0 -
+Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
+Rule Iran 2013 2015 - Sep 21 24:00 0 -
+Rule Iran 2016 only - Mar 20 24:00 1:00 -
+Rule Iran 2016 only - Sep 20 24:00 0 -
+Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
+Rule Iran 2017 2019 - Sep 21 24:00 0 -
+Rule Iran 2020 only - Mar 20 24:00 1:00 -
+Rule Iran 2020 only - Sep 20 24:00 0 -
+Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
+Rule Iran 2021 2023 - Sep 21 24:00 0 -
+Rule Iran 2024 only - Mar 20 24:00 1:00 -
+Rule Iran 2024 only - Sep 20 24:00 0 -
+Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
+Rule Iran 2025 2027 - Sep 21 24:00 0 -
+Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
+Rule Iran 2028 2029 - Sep 20 24:00 0 -
+Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
+Rule Iran 2030 2031 - Sep 21 24:00 0 -
+Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
+Rule Iran 2032 2033 - Sep 20 24:00 0 -
+Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
+Rule Iran 2034 2035 - Sep 21 24:00 0 -
+Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
+Rule Iran 2036 2037 - Sep 20 24:00 0 -
+Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
+Rule Iran 2038 2039 - Sep 21 24:00 0 -
+Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
+Rule Iran 2040 2041 - Sep 20 24:00 0 -
+Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
+Rule Iran 2042 2043 - Sep 21 24:00 0 -
+Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
+Rule Iran 2044 2045 - Sep 20 24:00 0 -
+Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
+Rule Iran 2046 2047 - Sep 21 24:00 0 -
+Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
+Rule Iran 2048 2049 - Sep 20 24:00 0 -
+Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
+Rule Iran 2050 2051 - Sep 21 24:00 0 -
+Rule Iran 2052 2053 - Mar 20 24:00 1:00 -
+Rule Iran 2052 2053 - Sep 20 24:00 0 -
+Rule Iran 2054 2055 - Mar 21 24:00 1:00 -
+Rule Iran 2054 2055 - Sep 21 24:00 0 -
+Rule Iran 2056 2057 - Mar 20 24:00 1:00 -
+Rule Iran 2056 2057 - Sep 20 24:00 0 -
+Rule Iran 2058 2059 - Mar 21 24:00 1:00 -
+Rule Iran 2058 2059 - Sep 21 24:00 0 -
+Rule Iran 2060 2062 - Mar 20 24:00 1:00 -
+Rule Iran 2060 2062 - Sep 20 24:00 0 -
+Rule Iran 2063 only - Mar 21 24:00 1:00 -
+Rule Iran 2063 only - Sep 21 24:00 0 -
+Rule Iran 2064 2066 - Mar 20 24:00 1:00 -
+Rule Iran 2064 2066 - Sep 20 24:00 0 -
+Rule Iran 2067 only - Mar 21 24:00 1:00 -
+Rule Iran 2067 only - Sep 21 24:00 0 -
+Rule Iran 2068 2070 - Mar 20 24:00 1:00 -
+Rule Iran 2068 2070 - Sep 20 24:00 0 -
+Rule Iran 2071 only - Mar 21 24:00 1:00 -
+Rule Iran 2071 only - Sep 21 24:00 0 -
+Rule Iran 2072 2074 - Mar 20 24:00 1:00 -
+Rule Iran 2072 2074 - Sep 20 24:00 0 -
+Rule Iran 2075 only - Mar 21 24:00 1:00 -
+Rule Iran 2075 only - Sep 21 24:00 0 -
+Rule Iran 2076 2078 - Mar 20 24:00 1:00 -
+Rule Iran 2076 2078 - Sep 20 24:00 0 -
+Rule Iran 2079 only - Mar 21 24:00 1:00 -
+Rule Iran 2079 only - Sep 21 24:00 0 -
+Rule Iran 2080 2082 - Mar 20 24:00 1:00 -
+Rule Iran 2080 2082 - Sep 20 24:00 0 -
+Rule Iran 2083 only - Mar 21 24:00 1:00 -
+Rule Iran 2083 only - Sep 21 24:00 0 -
+Rule Iran 2084 2086 - Mar 20 24:00 1:00 -
+Rule Iran 2084 2086 - Sep 20 24:00 0 -
+Rule Iran 2087 only - Mar 21 24:00 1:00 -
+Rule Iran 2087 only - Sep 21 24:00 0 -
#
-# The following rules are approximations starting in the year 2038.
-# These are the best post-2037 approximations available, given the
-# restrictions of a single rule using a Gregorian-based data format.
+# The following rules are approximations starting in the year 2088.
+# These are the best post-2088 approximations available, given the
+# restrictions of a single rule using ordinary Gregorian dates.
# At some point this table will need to be extended, though quite
# possibly Iran will change the rules first.
-Rule Iran 2036 max - Mar 21 0:00 1:00 -
-Rule Iran 2036 max - Sep 21 0:00 0 -
+Rule Iran 2088 max - Mar 20 24:00 1:00 -
+Rule Iran 2088 max - Sep 20 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
@@ -1456,6 +1643,24 @@
Rule Zion 1974 only - Oct 13 0:00 0 S
Rule Zion 1975 only - Apr 20 0:00 1:00 D
Rule Zion 1975 only - Aug 31 0:00 0 S
+
+# From Alois Treindl (2019-03-06):
+# http://www.moin.gov.il/Documents/שעון קיץ/clock-50-years-7-2014.pdf
+# From Isaac Starkman (2019-03-06):
+# Summer time was in that period in 1980 and 1984, see
+# https://www.ynet.co.il/articles/0,7340,L-3951073,00.html
+# You can of course read it in translation.
+# I checked the local newspapers for that years.
+# It started on midnight and end at 01.00 am.
+# From Paul Eggert (2019-03-06):
+# Also see this thread about the moin.gov.il URL:
+# https://mm.icann.org/pipermail/tz/2018-November/027194.html
+Rule Zion 1980 only - Aug 2 0:00 1:00 D
+Rule Zion 1980 only - Sep 13 1:00 0 S
+Rule Zion 1984 only - May 5 0:00 1:00 D
+Rule Zion 1984 only - Aug 25 1:00 0 S
+
+# From Shanks & Pottenger:
Rule Zion 1985 only - Apr 14 0:00 1:00 D
Rule Zion 1985 only - Sep 15 0:00 0 S
Rule Zion 1986 only - May 18 0:00 1:00 D
@@ -1714,7 +1919,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
9:00 Japan J%sT
-# Since 1938, all Japanese possessions have been like Asia/Tokyo.
+# Since 1938, all Japanese possessions have been like Asia/Tokyo,
+# except that Truk (Chuuk), Ponape (Pohnpei), and Jaluit (Kosrae) did not
+# switch from +10 to +09 until 1941-04-01; see the 'australasia' file.
# Jordan
#
@@ -2004,8 +2211,10 @@
# and in Byalokoz) lists Ural river (plus 10 versts on its left bank) in
# the third time belt (before 1930 this means +03).
-# From Paul Eggert (2016-12-06):
-# The tables below reflect Golosunov's remarks, with exceptions as noted.
+# From Alexander Konzurovski (2018-12-20):
+# Qyzyolrda Region (Asia/Qyzylorda) is changing its time zone from
+# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
+# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
@@ -2019,8 +2228,6 @@
6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
6:00 - +06
# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
-# This currently includes Qostanay (aka Kostanay, Kustanay) (KZ-KUS);
-# see comments below.
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
5:00 - +05 1981 Apr 1
@@ -2031,21 +2238,22 @@
5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
+ 6:00 - +06 2018 Dec 21 0:00
+ 5:00 - +05
+#
+# Qostanay (aka Kostanay, Kustanay) (KZ-KUS)
+# The 1991/2 rules are unclear partly because of the 1997 Turgai
+# reorganization.
+Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+ 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
6:00 - +06
-# The following zone is like Asia/Qyzylorda except for being one
-# hour earlier from 1991-09-29 to 1992-03-29. The 1991/2 rules for
-# Qostanay are unclear partly because of the 1997 Turgai
-# reorganization, so this zone is commented out for now.
-#Zone Asia/Qostanay 4:14:20 - LMT 1924 May 2
-# 4:00 - +04 1930 Jun 21
-# 5:00 - +05 1981 Apr 1
-# 5:00 1:00 +06 1981 Oct 1
-# 6:00 - +06 1982 Apr 1
-# 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
-# 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
-# 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
-# 6:00 - +06
-#
+
# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
@@ -2139,21 +2347,43 @@
# started at June 1 in that year. For another example, the article in
# 1988 said that DST started at 2:00 AM in that year.
+# From Phake Nick (2018-10-27):
+# 1. According to official announcement from Korean government, the DST end
+# date in South Korea should be
+# 1955-09-08 without specifying time
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027977557
+# 1956-09-29 without specifying time
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027978341
+# 1957-09-21 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027979690#3
+# 1958-09-20 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027981189
+# 1959-09-19 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027982974#2
+# 1960-09-17 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0028044104
+# ...
+# 2.... https://namu.wiki/w/대한민국%20표준시 ... [says]
+# when Korea was using GMT+8:30 as standard time, the international
+# aviation/marine/meteorological industry in the country refused to
+# follow and continued to use GMT+9:00 for interoperability.
+
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule ROK 1948 only - Jun 1 0:00 1:00 D
-Rule ROK 1948 only - Sep 13 0:00 0 S
-Rule ROK 1949 only - Apr 3 0:00 1:00 D
-Rule ROK 1949 1951 - Sep Sun>=8 0:00 0 S
-Rule ROK 1950 only - Apr 1 0:00 1:00 D
-Rule ROK 1951 only - May 6 0:00 1:00 D
-Rule ROK 1955 only - May 5 0:00 1:00 D
-Rule ROK 1955 only - Sep 9 0:00 0 S
-Rule ROK 1956 only - May 20 0:00 1:00 D
-Rule ROK 1956 only - Sep 30 0:00 0 S
-Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
-Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S
-Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
-Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
+Rule ROK 1948 only - Jun 1 0:00 1:00 D
+Rule ROK 1948 only - Sep 12 24:00 0 S
+Rule ROK 1949 only - Apr 3 0:00 1:00 D
+Rule ROK 1949 1951 - Sep Sat>=7 24:00 0 S
+Rule ROK 1950 only - Apr 1 0:00 1:00 D
+Rule ROK 1951 only - May 6 0:00 1:00 D
+Rule ROK 1955 only - May 5 0:00 1:00 D
+Rule ROK 1955 only - Sep 8 24:00 0 S
+Rule ROK 1956 only - May 20 0:00 1:00 D
+Rule ROK 1956 only - Sep 29 24:00 0 S
+Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
+Rule ROK 1957 1960 - Sep Sat>=17 24:00 0 S
+Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
# From Paul Eggert (2016-08-23):
# The Korean Wikipedia entry gives the following sources for UT offsets:
@@ -2882,9 +3112,15 @@
# the official website, though the decree did not specify the exact
# time of the time shift.
# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
+
+# From Even Scharning (2019-03-23):
+# DST in Palestine will start on 30 March this year, not 23 March as the time
+# zone database predicted.
+# https://ramallah.news/post/123610
#
-# From Paul Eggert (2018-03-16):
-# For 2016 on, predict spring transitions on March's fourth Saturday at 01:00.
+# From Tim Parenti (2019-03-23):
+# Combining this with the rules observed since 2016, adjust our spring
+# transition guess to Mar Sat>=24.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -2915,7 +3151,7 @@
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
-Rule Palestine 2016 max - Mar Sat>=22 1:00 1:00 S
+Rule Palestine 2016 max - Mar Sat>=24 1:00 1:00 S
Rule Palestine 2016 max - Oct lastSat 1:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2943,6 +3179,11 @@
# no information
# Philippines
+
+# From Paul Eggert (2018-11-18):
+# The Spanish initially used American (west-of-Greenwich) time.
+# It is unknown what time Manila kept when the British occupied it from
+# 1762-10-06 through 1764-04; for now assume it kept American time.
# On 1844-08-16, Narciso Clavería, governor-general of the
# Philippines, issued a proclamation announcing that 1844-12-30 was to
# be immediately followed by 1845-01-01; see R.H. van Gent's
@@ -3028,8 +3269,8 @@
# going to run on Higgins Time.' And so, until last year, it did." See:
# Antar E. Dinner at When? Saudi Aramco World, 1969 March/April. 2-3.
# http://archive.aramcoworld.com/issue/196902/dinner.at.when.htm
-# newspapers.com says a similar story about Higgins was published in the Port
-# Angeles (WA) Evening News, 1965-03-10, page 5, but I lack access to the text.
+# Also see: Antar EN. Arabian flying is confusing.
+# Port Angeles (WA) Evening News. 1965-03-10. page 3.
#
# The TZ database cannot represent quasi-solar time; airline time is the best
# we can do. The 1946 foreign air news digest of the U.S. Civil Aeronautics
@@ -3402,5 +3643,17 @@
8:00 - +08 1975 Jun 13
7:00 - +07
+# From Paul Eggert (2019-02-19):
+#
+# The Ho Chi Minh entry suffices for most purposes as it agrees with all of
+# Vietnam since 1975-06-13. Presumably clocks often changed in south Vietnam
+# in the early 1970s as locations changed hands during the war; however the
+# details are unknown and would likely be too voluminous for this database.
+#
+# For timestamps in north Vietnam back to 1970 (the tzdb cutoff),
+# use Asia/Bangkok; see the VN entries in the file zone1970.tab.
+# For timestamps before 1970, see Asia/Hanoi in the file 'backzone'.
+
+
# Yemen
# See Asia/Riyadh.
--- a/make/data/tzdata/australasia Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/australasia Thu Jul 11 15:40:29 2019 +0530
@@ -425,10 +425,44 @@
# it is uninhabited.
# Guam
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+# http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf
+# http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf
+Rule Guam 1959 only - Jun 27 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-61-5-Revocation-of-Daylight-Saving-Time-and-Restoratio.pdf
+Rule Guam 1961 only - Jan 29 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-67-13-Guam-Daylight-Savings-Time.pdf
+Rule Guam 1967 only - Sep 1 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-69-2-Repeal-of-Guam-Daylight-Saving-Time.pdf
+Rule Guam 1969 only - Jan 26 0:01 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-69-10-Guam-Daylight-Saving-Time.pdf
+Rule Guam 1969 only - Jun 22 2:00 1:00 D
+Rule Guam 1969 only - Aug 31 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-70-10-Guam-Daylight-Saving-Time.pdf
+# http://documents.guam.gov/wp-content/uploads/E.O.-70-30-End-of-Guam-Daylight-Saving-Time.pdf
+# http://documents.guam.gov/wp-content/uploads/E.O.-71-5-Guam-Daylight-Savings-Time.pdf
+Rule Guam 1970 1971 - Apr lastSun 2:00 1:00 D
+Rule Guam 1970 1971 - Sep Sun>=1 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-73-28.-Guam-Day-light-Saving-Time.pdf
+Rule Guam 1973 only - Dec 16 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-74-7-Guam-Daylight-Savings-Time-Rescinded.pdf
+Rule Guam 1974 only - Feb 24 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-76-13-Daylight-Savings-Time.pdf
+Rule Guam 1976 only - May 26 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-76-25-Revocation-of-E.O.-76-13.pdf
+Rule Guam 1976 only - Aug 22 2:01 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-77-4-Daylight-Savings-Time.pdf
+Rule Guam 1977 only - Apr 24 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-77-18-Guam-Standard-Time.pdf
+Rule Guam 1977 only - Aug 28 2:00 0 S
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
9:39:00 - LMT 1901 # Agana
- 10:00 - GST 2000 Dec 23 # Guam
+ 10:00 - GST 1941 Dec 10 # Guam
+ 9:00 - +09 1944 Jul 31
+ 10:00 Guam G%sT 2000 Dec 23
10:00 - ChST # Chamorro Standard Time
Link Pacific/Guam Pacific/Saipan # N Mariana Is
@@ -450,31 +484,56 @@
# Marshall Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Majuro 11:24:48 - LMT 1901
- 11:00 - +11 1969 Oct
- 12:00 - +12
-Zone Pacific/Kwajalein 11:09:20 - LMT 1901
- 11:00 - +11 1969 Oct
- -12:00 - -12 1993 Aug 20
- 12:00 - +12
+Zone Pacific/Majuro 11:24:48 - LMT 1901
+ 11:00 - +11 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1944 Jan 30
+ 11:00 - +11 1969 Oct
+ 12:00 - +12
+Zone Pacific/Kwajalein 11:09:20 - LMT 1901
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1944 Feb 6
+ 11:00 - +11 1969 Oct
+ -12:00 - -12 1993 Aug 20 24:00
+ 12:00 - +12
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Chuuk 10:07:08 - LMT 1901
- 10:00 - +10
-Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
- 11:00 - +11
-Zone Pacific/Kosrae 10:51:56 - LMT 1901
- 11:00 - +11 1969 Oct
- 12:00 - +12 1999
- 11:00 - +11
+Zone Pacific/Chuuk -13:52:52 - LMT 1844 Dec 31
+ 10:07:08 - LMT 1901
+ 10:00 - +10 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1945 Aug
+ 10:00 - +10
+Zone Pacific/Pohnpei -13:27:08 - LMT 1844 Dec 31 # Kolonia
+ 10:32:52 - LMT 1901
+ 11:00 - +11 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1945 Aug
+ 11:00 - +11
+Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
+ 10:51:56 - LMT 1901
+ 11:00 - +11 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1945 Aug
+ 11:00 - +11 1969 Oct
+ 12:00 - +12 1999
+ 11:00 - +11
# Nauru
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
- 11:30 - +1130 1942 Mar 15
- 9:00 - +09 1944 Aug 15
- 11:30 - +1130 1979 May
+ 11:30 - +1130 1942 Aug 29
+ 9:00 - +09 1945 Sep 8
+ 11:30 - +1130 1979 Feb 10 2:00
12:00 - +12
# New Caledonia
@@ -575,8 +634,9 @@
# Palau (Belau)
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
- 9:00 - +09
+Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
+ 8:57:56 - LMT 1901
+ 9:00 - +09
# Papua New Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -838,7 +898,7 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2017-02-10):
+# From Paul Eggert (2018-11-18):
#
# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
@@ -863,6 +923,7 @@
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
+# I invented the abbreviation marked "*".
# The following abbreviations are from other sources.
# Corrections are welcome!
# std dst
@@ -870,7 +931,7 @@
# 8:00 AWST AWDT Western Australia
# 9:30 ACST ACDT Central Australia
# 10:00 AEST AEDT Eastern Australia
-# 10:00 GST Guam through 2000
+# 10:00 GST GDT* Guam through 2000
# 10:00 ChST Chamorro
# 11:30 NZMT NZST New Zealand through 1945
# 12:00 NZST NZDT New Zealand 1946-present
@@ -1569,28 +1630,70 @@
# Kwajalein
-# In comp.risks 14.87 (26 August 1993), Peter Neumann writes:
-# I wonder what happened in Kwajalein, where there was NO Friday,
-# 1993-08-20. Thursday night at midnight Kwajalein switched sides with
-# respect to the International Date Line, to rejoin its fellow islands,
-# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink.
+# From an AP article (1993-08-22):
+# "The nearly 3,000 Americans living on this remote Pacific atoll have a good
+# excuse for not remembering Saturday night: there wasn't one. Residents were
+# going to bed Friday night and waking up Sunday morning because at midnight
+# -- 8 A.M. Eastern daylight time on Saturday -- Kwajalein was jumping from
+# one side of the international date line to the other."
+# "In Marshall Islands, Friday is followed by Sunday", NY Times. 1993-08-22.
+# https://www.nytimes.com/1993/08/22/world/in-marshall-islands-friday-is-followed-by-sunday.html
+
+# From Phake Nick (2018-10-27):
+# <https://wiki.suikawiki.org/n/南洋群島の標準時> ... pointed out that
+# currently tzdata say Pacific/Kwajalein switched from GMT+11 to GMT-12 in
+# 1969 October without explanation, however an 1993 article from NYT say it
+# synchorized its day with US mainland about 40 years ago and thus the switch
+# should occur at around 1950s instead.
+#
+# From Paul Eggert (2018-11-18):
+# The NYT (actually, AP) article is vague and possibly wrong about this.
+# The article says the earlier switch was "40 years ago when the United States
+# Army established a missile test range here". However, the Kwajalein Test
+# Center was established on 1960-10-01 and was run by the US Navy. It was
+# transferred to the US Army on 1964-07-01. See "Seize the High Ground"
+# <https://history.army.mil/html/books/070/70-88-1/cmhPub_70-88-1.pdf>.
+# Given that Shanks was right on the money about the 1993 change, I'm inclined
+# to take Shanks's word for the 1969 change unless we find better evidence.
# N Mariana Is, Guam
+# From Phake Nick (2018-10-27):
+# Guam Island was briefly annexed by Japan during ... year 1941-1944 ...
+# however there are no detailed information about what time it use during that
+# period. It would probably be reasonable to assume Guam use GMT+9 during
+# that period of time like the surrounding area.
+
+# From Paul Eggert (2018-11-18):
# Howse writes (p 153) "The Spaniards, on the other hand, reached the
# Philippines and the Ladrones from America," and implies that the Ladrones
# (now called the Marianas) kept American date for quite some time.
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.
-
+#
+# Use 1941-12-10 and 1944-07-31 for Guam WWII transitions, as the rough start
+# and end of Japanese control of Agana. We don't know whether the Northern
+# Marianas followed Guam's DST rules from 1959 through 1977; for now, assume
+# they did as that avoids the need for a separate zone due to our 1970 cutoff.
+#
# US Public Law 106-564 (2000-12-23) made UT +10 the official standard time,
# under the name "Chamorro Standard Time". There is no official abbreviation,
# but Congressman Robert A. Underwood, author of the bill that became law,
# wrote in a press release (2000-12-27) that he will seek the use of "ChST".
+# See also the commentary for Micronesia.
-# Micronesia
+
+# Marshall Is
+# See the commentary for Micronesia.
+
+
+# Micronesia (and nearby)
+
+# From Paul Eggert (2018-11-18):
+# Like the Ladrones (see Guam commentary), assume the Spanish East Indies
+# kept American time until the Philippines switched at the end of 1844.
# Alan Eugene Davis writes (1996-03-16),
# "I am certain, having lived there for the past decade, that 'Truk'
@@ -1606,6 +1709,95 @@
# that Truk and Yap are UT +10, and Ponape and Kosrae are +11.
# We don't know when Kosrae switched from +12; assume January 1 for now.
+# From Phake Nick (2018-10-27):
+#
+# From a Japanese wiki site https://wiki.suikawiki.org/n/南洋群島の標準時
+# ...
+# For "Southern Islands" (modern region of Mariana + Palau + Federation of
+# Micronesia + Marshall Islands):
+#
+# A 1906 Japanese magazine shown the Caroline Islands and Mariana Islands
+# who was occupied by Germany at the time as GMT+10, together with the like
+# of German New Guinea. However there is a marking saying it have not been
+# implemented (yet). No further information after that were found.
+#
+# Japan invaded those islands in 1914, and records shows that they were
+# instructed to use JST at the time.
+#
+# 1915 January telecommunication record on the Jaluit Atoll shows they use
+# the meridian of 170E as standard time (GMT+11:20), which is similar to the
+# longitude of the atoll.
+# 1915 February record say the 170E standard time is to be used until
+# February 9 noon, and after February 9 noon they are to use JST.
+# However these are time used within the Japanese Military at the time and
+# probably does not reflect the time used by local resident at the time (that
+# is if they keep their own time back then)
+#
+# In January 1919 the occupying force issued a command that split the area
+# into three different timezone with meridian of 135E, 150E, 165E (JST+0, +1,
+# +2), and the command was to become effective from February 1 of the same
+# year. Despite the target of the command is still only for the occupying
+# force itself, further publication have described the time as the standard
+# time for the occupied area and thus it can probably be seen as such.
+# * Area that use meridian of 135E: Palau and Yap civil administration area
+# (Southern Islands Western Standard Time)
+# * Area that use meridian of 150E: Truk (Chuuk) and Saipan civil
+# administration area (Southern Islands Central Standard Time)
+# * Area that use meridian of 165E: Ponape (Pohnpei) and Jaluit civil
+# administration area (Southern Islands Eastern Standard Time).
+# * In the next few years Japanese occupation of those islands have been
+# formalized via League of Nation Mandate (South Pacific Mandate) and formal
+# governance structure have been established, these district [become
+# subprefectures] and timezone classification have been inherited as standard
+# time of the area.
+# * Saipan subprefecture include Mariana islands (exclude Guam which was
+# occupied by America at the time), Palau and Yap subprefecture rule the
+# Western Caroline Islands with 137E longitude as border, Truk and Ponape
+# subprefecture rule the Eastern Caroline Islands with 154E as border, Ponape
+# subprefecture also rule part of Marshall Islands to the west of 164E
+# starting from (1918?) and Jaluit subprefecture rule the rest of the
+# Marshall Islands.
+#
+# And then in year 1937, an announcement was made to change the time in the
+# area into 2 timezones:
+# * Area that use meridian of 135E: area administered by Palau, Yap and
+# Saipan subprefecture (Southern Islands Western Standard Time)
+# * Area that use meridian of 150E: area administered by Truk (Chuuk),
+# Ponape (Pohnpei) and Jaluit subprefecture (Southern Islands Eastern
+# Standard Time)
+#
+# Another announcement issued in 1941 say that on April 1 that year,
+# standard time of the Southern Islands would be changed to use the meridian
+# of 135E (GMT+9), and thus abolishing timezone different within the area.
+#
+# Then Pacific theater of WWII started and Japan slowly lose control on the
+# island. The webpage I linked above contain no information during this
+# period of time....
+#
+# After the end of WWII, in 1946 February, a document written by the
+# (former?) Japanese military personnel describe there are 3 hours time
+# different between Caroline islands time/Wake island time and the Chungking
+# time, which would mean the time being used there at the time was GMT+10.
+#
+# After that, the area become Trust Territories of the Pacific Islands
+# under American administration from year 1947. The site listed some
+# American/International books/maps/publications about time used in those
+# area during this period of time but they doesn't seems to be reliable
+# information so it would be the best if someone know where can more reliable
+# information can be found.
+#
+#
+# From Paul Eggert (2018-11-18):
+#
+# For the above, use vague dates like "1914" and "1945" for transitions that
+# plausibly exist but for which the details are not known. The information
+# for Wake is too sketchy to act on.
+#
+# The 1906 GMT+10 info about German-controlled islands might not have been
+# done, so omit it from the data for now.
+#
+# The Jaluit info governs Kwajalein.
+
# Midway
@@ -1623,6 +1815,29 @@
# started DST on June 3. Possibly DST was observed other years
# in Midway, but we have no record of it.
+# Nauru
+
+# From Phake Nick (2018-10-31):
+# Currently, the tz database say Nauru use LMT until 1921, and then
+# switched to GMT+11:30 for the next two decades.
+# However, a number of timezone map published in America/Japan back then
+# showed its timezone as GMT+11 per https://wiki.suikawiki.org/n/ナウルの標準時
+# And it would also be nice if the 1921 transition date could be sourced.
+# ...
+# The "Nauru Standard Time Act 1978 Time Change"
+# http://ronlaw.gov.nr/nauru_lpms/files/gazettes/4b23a17d2030150404db7a5fa5872f52.pdf#page=3
+# based on "Nauru Standard Time Act 1978 Time Change"
+# http://www.paclii.org/nr/legis/num_act/nsta1978207/ defined that "Nauru
+# Alternative Time" (GMT+12) should be in effect from 1979 Feb.
+#
+# From Paul Eggert (2018-11-19):
+# The 1921-01-15 introduction of standard time is in Shanks; it is also in
+# "Standard Time Throughout the World", US National Bureau of Standards (1935),
+# page 3, which does not give the UT offset. In response to a comment by
+# Phake Nick I set the Nauru time of occupation by Japan to
+# 1942-08-29/1945-09-08 by using dates from:
+# https://en.wikipedia.org/wiki/Japanese_occupation_of_Nauru
+
# Norfolk
# From Alexander Krivenyshev (2015-09-23):
@@ -1638,6 +1853,9 @@
# other than in 1974/5. See:
# https://www.timeanddate.com/time/australia/norfolk-island.html
+# Palau
+# See commentary for Micronesia.
+
# Pitcairn
# From Rives McDow (1999-11-08):
@@ -1802,6 +2020,9 @@
# From Paul Eggert (2003-03-23):
# We have no other report of DST in Wake Island, so omit this info for now.
+# See also the commentary for Micronesia.
+
+
###############################################################################
# The International Date Line
--- a/make/data/tzdata/backward Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/backward Thu Jul 11 15:40:29 2019 +0530
@@ -100,6 +100,7 @@
Link America/Havana Cuba
Link Africa/Cairo Egypt
Link Europe/Dublin Eire
+Link Etc/UTC Etc/UCT
Link Europe/London Europe/Belfast
Link Europe/Chisinau Europe/Tiraspol
Link Europe/London GB
@@ -134,7 +135,7 @@
Link Asia/Seoul ROK
Link Asia/Singapore Singapore
Link Europe/Istanbul Turkey
-Link Etc/UCT UCT
+Link Etc/UTC UCT
Link America/Anchorage US/Alaska
Link America/Adak US/Aleutian
Link America/Phoenix US/Arizona
--- a/make/data/tzdata/etcetera Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/etcetera Thu Jul 11 15:40:29 2019 +0530
@@ -42,7 +42,6 @@
Zone Etc/GMT 0 - GMT
Zone Etc/UTC 0 - UTC
-Zone Etc/UCT 0 - UCT
# The following link uses older naming conventions,
# but it belongs here, not in the file 'backward',
--- a/make/data/tzdata/europe Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/europe Thu Jul 11 15:40:29 2019 +0530
@@ -1878,7 +1878,7 @@
1:00 Belgium CE%sT 1977
1:00 EU CE%sT
-# Macedonia
+# North Macedonia
# See Europe/Belgrade.
# Malta
@@ -3382,7 +3382,7 @@
Link Europe/Belgrade Europe/Ljubljana # Slovenia
Link Europe/Belgrade Europe/Podgorica # Montenegro
Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
-Link Europe/Belgrade Europe/Skopje # Macedonia
+Link Europe/Belgrade Europe/Skopje # North Macedonia
Link Europe/Belgrade Europe/Zagreb # Croatia
# Slovakia
--- a/make/data/tzdata/iso3166.tab Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/iso3166.tab Thu Jul 11 15:40:29 2019 +0530
@@ -32,8 +32,8 @@
# All text uses UTF-8 encoding. The columns of the table are as follows:
#
# 1. ISO 3166-1 alpha-2 country code, current as of
-# ISO 3166-1 N905 (2016-11-15). See: Updates on ISO 3166-1
-# http://isotc.iso.org/livelink/livelink/Open/16944257
+# ISO 3166-1 N976 (2018-11-06). See: Updates on ISO 3166-1
+# https://isotc.iso.org/livelink/livelink/Open/16944257
# 2. The usual English name for the coded region,
# chosen so that alphabetic sorting of subsets produces helpful lists.
# This is not the same as the English name in the ISO 3166 tables.
@@ -189,7 +189,7 @@
MF St Martin (French)
MG Madagascar
MH Marshall Islands
-MK Macedonia
+MK North Macedonia
ML Mali
MM Myanmar (Burma)
MN Mongolia
@@ -258,7 +258,7 @@
SV El Salvador
SX St Maarten (Dutch)
SY Syria
-SZ Swaziland
+SZ Eswatini (Swaziland)
TC Turks & Caicos Is
TD Chad
TF French Southern & Antarctic Lands
--- a/make/data/tzdata/leapseconds Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/leapseconds Thu Jul 11 15:40:29 2019 +0530
@@ -42,9 +42,12 @@
# See: Levine J. Coordinated Universal Time and the leap second.
# URSI Radio Sci Bull. 2016;89(4):30-6. doi:10.23919/URSIRSB.2016.7909995
# <https://ieeexplore.ieee.org/document/7909995>.
+
# There were no leap seconds before 1972, because the official mechanism
# accounting for the discrepancy between atomic time and the earth's rotation
-# did not exist.
+# did not exist. The first ("1 Jan 1972") data line in leap-seconds.list
+# does not denote a leap second; it denotes the start of the current definition
+# of UTC.
# The correction (+ or -) is made at the given time, so lines
# will typically look like:
@@ -83,7 +86,7 @@
# POSIX timestamps for the data in this file:
#updated 1467936000
-#expires 1561680000
+#expires 1577491200
-# Updated through IERS Bulletin C56
-# File expires on: 28 June 2019
+# Updated through IERS Bulletin C57
+# File expires on: 28 December 2019
--- a/make/data/tzdata/northamerica Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/northamerica Thu Jul 11 15:40:29 2019 +0530
@@ -622,6 +622,26 @@
# between AKST and AKDT from now on....
# https://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/
+# From Ryan Stanley (2018-11-06):
+# The Metlakatla community in Alaska has decided not to change its
+# clock back an hour starting on November 4th, 2018 (day before yesterday).
+# They will be gmtoff=-28800 year-round.
+# https://www.facebook.com/141055983004923/photos/pb.141055983004923.-2207520000.1541465673./569081370202380/
+
+# From Paul Eggert (2018-12-16):
+# In a 2018-12-11 special election, Metlakatla voted to go back to
+# Alaska time (including daylight saving time) starting next year.
+# https://www.krbd.org/2018/12/12/metlakatla-to-follow-alaska-standard-time-allow-liquor-sales/
+#
+# From Ryan Stanley (2019-01-11):
+# The community will be changing back on the 20th of this month...
+# From Tim Parenti (2019-01-11):
+# Per an announcement on the Metlakatla community's official Facebook page, the
+# "fall back" will be on Sunday 2019-01-20 at 02:00:
+# https://www.facebook.com/141055983004923/photos/607150969728753/
+# So they won't be waiting for Alaska to join them on 2019-03-10, but will
+# rather change their clocks twice in seven weeks.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Juneau 15:02:19 - LMT 1867 Oct 19 15:33:32
-8:57:41 - LMT 1900 Aug 20 12:00
@@ -648,6 +668,8 @@
-8:00 - PST 1969
-8:00 US P%sT 1983 Oct 30 2:00
-8:00 - PST 2015 Nov 1 2:00
+ -9:00 US AK%sT 2018 Nov 4 2:00
+ -8:00 - PST 2019 Jan 20 2:00
-9:00 US AK%sT
Zone America/Yakutat 14:41:05 - LMT 1867 Oct 19 15:12:18
-9:18:55 - LMT 1900 Aug 20 12:00
@@ -808,6 +830,22 @@
# For a map of Indiana's time zone regions, see:
# https://en.wikipedia.org/wiki/Time_in_Indiana
#
+# From Paul Eggert (2018-11-30):
+# A brief but entertaining history of time in Indiana describes a 1949 debate
+# in the Indiana House where city legislators (who favored "fast time")
+# tussled with farm legislators (who didn't) over a bill to outlaw DST:
+# "Lacking enough votes, the city faction tries to filibuster until time runs
+# out on the session at midnight, but rural champion Rep. Herbert Copeland,
+# R-Madison, leans over the gallery railing and forces the official clock
+# back to 9 p.m., breaking it in the process. The clock sticks on 9 as the
+# debate rages on into the night. The filibuster finally dies out and the
+# bill passes, while outside the chamber, clocks read 3:30 a.m. In the end,
+# it doesn't matter which side won. The law has no enforcement powers and
+# is simply ignored by fast-time communities."
+# How Indiana went from 'God's time' to split zones and daylight-saving.
+# Indianapolis Star. 2018-11-27 14:58 -05.
+# https://www.indystar.com/story/news/politics/2018/11/27/indianapolis-indiana-time-zone-history-central-eastern-daylight-savings-time/2126300002/
+#
# From Paul Eggert (2007-08-17):
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
# with the following exceptions:
--- a/make/data/tzdata/zone.tab Tue Jul 09 17:05:20 2019 +0530
+++ b/make/data/tzdata/zone.tab Thu Jul 11 15:40:29 2019 +0530
@@ -262,6 +262,7 @@
KY +1918-08123 America/Cayman
KZ +4315+07657 Asia/Almaty Kazakhstan (most areas)
KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda
+KZ +5312+06337 Asia/Qostanay Qostanay/Kostanay/Kustanay
KZ +5017+05710 Asia/Aqtobe Aqtobe/Aktobe
KZ +4431+05016 Asia/Aqtau Mangghystau/Mankistau
KZ +4707+05156 Asia/Atyrau Atyrau/Atirau/Gur'yev
@@ -355,9 +356,9 @@
RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
-RU +4844+04425 Europe/Volgograd MSK+00 - Volgograd
RU +5836+04939 Europe/Kirov MSK+00 - Kirov
RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
+RU +4844+04425 Europe/Volgograd MSK+01 - Volgograd
RU +5134+04602 Europe/Saratov MSK+01 - Saratov
RU +5420+04824 Europe/Ulyanovsk MSK+01 - Ulyanovsk
RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia
--- a/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java Tue Jul 09 17:05:20 2019 +0530
+++ b/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java Thu Jul 11 15:40:29 2019 +0530
@@ -108,7 +108,7 @@
private static final ResourceBundle.Control defCon =
ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_DEFAULT);
- private static final String[] AVAILABLE_TZIDS = TimeZone.getAvailableIDs();
+ private static Set<String> AVAILABLE_TZIDS;
private static String zoneNameTempFile;
private static String tzDataDir;
private static final Map<String, String> canonicalTZMap = new HashMap<>();
@@ -730,7 +730,7 @@
});
}
- Arrays.stream(AVAILABLE_TZIDS).forEach(tzid -> {
+ getAvailableZoneIds().stream().forEach(tzid -> {
// If the tzid is deprecated, get the data for the replacement id
String tzKey = Optional.ofNullable((String)handlerSupplMeta.get(tzid))
.orElse(tzid);
@@ -1074,8 +1074,20 @@
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
}
+ // This method assumes handlerMetaZones is already initialized
+ private static Set<String> getAvailableZoneIds() {
+ assert handlerMetaZones != null;
+ if (AVAILABLE_TZIDS == null) {
+ AVAILABLE_TZIDS = new HashSet<>(ZoneId.getAvailableZoneIds());
+ AVAILABLE_TZIDS.addAll(handlerMetaZones.keySet());
+ AVAILABLE_TZIDS.remove(MetaZonesParseHandler.NO_METAZONE_KEY);
+ }
+
+ return AVAILABLE_TZIDS;
+ }
+
private static Stream<String> zidMapEntry() {
- return ZoneId.getAvailableZoneIds().stream()
+ return getAvailableZoneIds().stream()
.map(id -> {
String canonId = canonicalTZMap.getOrDefault(id, id);
String meta = handlerMetaZones.get(canonId);
--- a/make/jdk/src/classes/build/tools/fixuppandoc/Main.java Tue Jul 09 17:05:20 2019 +0530
+++ b/make/jdk/src/classes/build/tools/fixuppandoc/Main.java Thu Jul 11 15:40:29 2019 +0530
@@ -81,6 +81,10 @@
*
* Update the content string, to indicate it has been processed by this program.
*
+ * <h2>{@code <nav id="TOC">}</h2>
+ *
+ * Set attribute {@code title="Table Of Contents"}
+ *
*/
public class Main {
/**
@@ -273,6 +277,11 @@
}
// <main> is not permitted within these elements
allowMain = false;
+ if (name.equals("nav") && Objects.equals(attrs.get("id"), "TOC")) {
+ out.write(buffer.toString()
+ .replaceAll(">$", " title=\"Table Of Contents\">"));
+ buffer.setLength(0);
+ }
break;
case "body":
--- a/make/test/JtregNativeHotspot.gmk Tue Jul 09 17:05:20 2019 +0530
+++ b/make/test/JtregNativeHotspot.gmk Thu Jul 11 15:40:29 2019 +0530
@@ -862,12 +862,13 @@
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libredefineClasses := -lpthread
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exeinvoke := -ljvm -lpthread
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exestack-gap := -ljvm -lpthread
+ BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exestack-tls := -ljvm
BUILD_TEST_exeinvoke_exeinvoke.c_OPTIMIZATION := NONE
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exeFPRegs := -ldl
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libAsyncGetCallTraceTest := -ldl
else
BUILD_HOTSPOT_JTREG_EXCLUDE += libtest-rw.c libtest-rwx.c libTestJNI.c \
- exeinvoke.c exestack-gap.c libAsyncGetCallTraceTest.cpp
+ exeinvoke.c exestack-gap.c exestack-tls.c libAsyncGetCallTraceTest.cpp
endif
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
--- a/src/hotspot/cpu/x86/x86_64.ad Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/cpu/x86/x86_64.ad Thu Jul 11 15:40:29 2019 +0530
@@ -5543,7 +5543,7 @@
ins_pipe( pipe_slow );
%}
-instruct maxF_reduction_reg(regF dst, regF a, regF b, regF xmmt, rRegI tmp, rFlagsReg cr) %{
+instruct maxF_reduction_reg(legRegF dst, legRegF a, legRegF b, legRegF xmmt, rRegI tmp, rFlagsReg cr) %{
predicate(UseAVX > 0 && n->is_reduction());
match(Set dst (MaxF a b));
effect(USE a, USE b, TEMP xmmt, TEMP tmp, KILL cr);
@@ -5579,7 +5579,7 @@
ins_pipe( pipe_slow );
%}
-instruct maxD_reduction_reg(regD dst, regD a, regD b, regD xmmt, rRegL tmp, rFlagsReg cr) %{
+instruct maxD_reduction_reg(legRegD dst, legRegD a, legRegD b, legRegD xmmt, rRegL tmp, rFlagsReg cr) %{
predicate(UseAVX > 0 && n->is_reduction());
match(Set dst (MaxD a b));
effect(USE a, USE b, TEMP xmmt, TEMP tmp, KILL cr);
@@ -5615,7 +5615,7 @@
ins_pipe( pipe_slow );
%}
-instruct minF_reduction_reg(regF dst, regF a, regF b, regF xmmt, rRegI tmp, rFlagsReg cr) %{
+instruct minF_reduction_reg(legRegF dst, legRegF a, legRegF b, legRegF xmmt, rRegI tmp, rFlagsReg cr) %{
predicate(UseAVX > 0 && n->is_reduction());
match(Set dst (MinF a b));
effect(USE a, USE b, TEMP xmmt, TEMP tmp, KILL cr);
@@ -5651,7 +5651,7 @@
ins_pipe( pipe_slow );
%}
-instruct minD_reduction_reg(regD dst, regD a, regD b, regD xmmt, rRegL tmp, rFlagsReg cr) %{
+instruct minD_reduction_reg(legRegD dst, legRegD a, legRegD b, legRegD xmmt, rRegL tmp, rFlagsReg cr) %{
predicate(UseAVX > 0 && n->is_reduction());
match(Set dst (MinD a b));
effect(USE a, USE b, TEMP xmmt, TEMP tmp, KILL cr);
--- a/src/hotspot/os/linux/globals_linux.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os/linux/globals_linux.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -64,9 +64,13 @@
\
product(bool, PreferContainerQuotaForCPUCount, true, \
"Calculate the container CPU availability based on the value" \
- " of quotas (if set), when true. Otherwise, use the CPU" \
+ " of quotas (if set), when true. Otherwise, use the CPU" \
" shares value, provided it is less than quota.") \
\
+ product(bool, AdjustStackSizeForTLS, false, \
+ "Increase the thread stack size to include space for glibc " \
+ "static thread-local storage (TLS) if true") \
+ \
diagnostic(bool, DumpPrivateMappingsInCore, true, \
"If true, sets bit 2 of /proc/PID/coredump_filter, thus " \
"resulting in file-backed private mappings of the process to "\
--- a/src/hotspot/os/linux/os_linux.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os/linux/os_linux.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -801,6 +801,73 @@
return 0;
}
+// On Linux, glibc places static TLS blocks (for __thread variables) on
+// the thread stack. This decreases the stack size actually available
+// to threads.
+//
+// For large static TLS sizes, this may cause threads to malfunction due
+// to insufficient stack space. This is a well-known issue in glibc:
+// http://sourceware.org/bugzilla/show_bug.cgi?id=11787.
+//
+// As a workaround, we call a private but assumed-stable glibc function,
+// __pthread_get_minstack() to obtain the minstack size and derive the
+// static TLS size from it. We then increase the user requested stack
+// size by this TLS size.
+//
+// Due to compatibility concerns, this size adjustment is opt-in and
+// controlled via AdjustStackSizeForTLS.
+typedef size_t (*GetMinStack)(const pthread_attr_t *attr);
+
+GetMinStack _get_minstack_func = NULL;
+
+static void get_minstack_init() {
+ _get_minstack_func =
+ (GetMinStack)dlsym(RTLD_DEFAULT, "__pthread_get_minstack");
+ log_info(os, thread)("Lookup of __pthread_get_minstack %s",
+ _get_minstack_func == NULL ? "failed" : "succeeded");
+}
+
+// Returns the size of the static TLS area glibc puts on thread stacks.
+// The value is cached on first use, which occurs when the first thread
+// is created during VM initialization.
+static size_t get_static_tls_area_size(const pthread_attr_t *attr) {
+ size_t tls_size = 0;
+ if (_get_minstack_func != NULL) {
+ // Obtain the pthread minstack size by calling __pthread_get_minstack.
+ size_t minstack_size = _get_minstack_func(attr);
+
+ // Remove non-TLS area size included in minstack size returned
+ // by __pthread_get_minstack() to get the static TLS size.
+ // In glibc before 2.27, minstack size includes guard_size.
+ // In glibc 2.27 and later, guard_size is automatically added
+ // to the stack size by pthread_create and is no longer included
+ // in minstack size. In both cases, the guard_size is taken into
+ // account, so there is no need to adjust the result for that.
+ //
+ // Although __pthread_get_minstack() is a private glibc function,
+ // it is expected to have a stable behavior across future glibc
+ // versions while glibc still allocates the static TLS blocks off
+ // the stack. Following is glibc 2.28 __pthread_get_minstack():
+ //
+ // size_t
+ // __pthread_get_minstack (const pthread_attr_t *attr)
+ // {
+ // return GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN;
+ // }
+ //
+ //
+ // The following 'minstack_size > os::vm_page_size() + PTHREAD_STACK_MIN'
+ // if check is done for precaution.
+ if (minstack_size > (size_t)os::vm_page_size() + PTHREAD_STACK_MIN) {
+ tls_size = minstack_size - os::vm_page_size() - PTHREAD_STACK_MIN;
+ }
+ }
+
+ log_info(os, thread)("Stack size adjustment for TLS is " SIZE_FORMAT,
+ tls_size);
+ return tls_size;
+}
+
bool os::create_thread(Thread* thread, ThreadType thr_type,
size_t req_stack_size) {
assert(thread->osthread() == NULL, "caller responsible");
@@ -826,7 +893,7 @@
// Calculate stack size if it's not specified by caller.
size_t stack_size = os::Posix::get_initial_stack_size(thr_type, req_stack_size);
- // In the Linux NPTL pthread implementation the guard size mechanism
+ // In glibc versions prior to 2.7 the guard size mechanism
// is not implemented properly. The posix standard requires adding
// the size of the guard pages to the stack size, instead Linux
// takes the space out of 'stacksize'. Thus we adapt the requested
@@ -834,17 +901,27 @@
// behaviour. However, be careful not to end up with a size
// of zero due to overflow. Don't add the guard page in that case.
size_t guard_size = os::Linux::default_guard_size(thr_type);
- if (stack_size <= SIZE_MAX - guard_size) {
- stack_size += guard_size;
+ // Configure glibc guard page. Must happen before calling
+ // get_static_tls_area_size(), which uses the guard_size.
+ pthread_attr_setguardsize(&attr, guard_size);
+
+ size_t stack_adjust_size = 0;
+ if (AdjustStackSizeForTLS) {
+ // Adjust the stack_size for on-stack TLS - see get_static_tls_area_size().
+ stack_adjust_size += get_static_tls_area_size(&attr);
+ } else {
+ stack_adjust_size += guard_size;
+ }
+
+ stack_adjust_size = align_up(stack_adjust_size, os::vm_page_size());
+ if (stack_size <= SIZE_MAX - stack_adjust_size) {
+ stack_size += stack_adjust_size;
}
assert(is_aligned(stack_size, os::vm_page_size()), "stack_size not aligned");
int status = pthread_attr_setstacksize(&attr, stack_size);
assert_status(status == 0, status, "pthread_attr_setstacksize");
- // Configure glibc guard page.
- pthread_attr_setguardsize(&attr, os::Linux::default_guard_size(thr_type));
-
ThreadState state;
{
@@ -5145,6 +5222,10 @@
jdk_misc_signal_init();
}
+ if (AdjustStackSizeForTLS) {
+ get_minstack_init();
+ }
+
// Check and sets minimum stack sizes against command line options
if (Posix::set_minimum_stack_sizes() == JNI_ERR) {
return JNI_ERR;
--- a/src/hotspot/os/posix/vmError_posix.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os/posix/vmError_posix.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -132,8 +132,9 @@
// Needed because asserts may happen in error handling too.
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return;
+ }
}
#endif // CAN_SHOW_REGISTERS_ON_ASSERT
--- a/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -279,8 +279,9 @@
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return 1;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return 1;
+ }
}
#endif
--- a/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -301,8 +301,9 @@
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return 1;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return 1;
+ }
}
#endif
--- a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -271,8 +271,9 @@
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return 1;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return 1;
+ }
}
#endif
--- a/src/hotspot/os_cpu/linux_s390/os_linux_s390.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os_cpu/linux_s390/os_linux_s390.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -270,8 +270,9 @@
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return 1;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return 1;
+ }
}
#endif
--- a/src/hotspot/os_cpu/linux_sparc/os_linux_sparc.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os_cpu/linux_sparc/os_linux_sparc.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -514,8 +514,9 @@
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return 1;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return 1;
+ }
}
#endif
--- a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -303,8 +303,9 @@
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
- handle_assert_poison_fault(ucVoid, info->si_addr);
- return 1;
+ if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
+ return 1;
+ }
}
#endif
--- a/src/hotspot/share/ci/ciEnv.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/ci/ciEnv.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -98,7 +98,7 @@
// ------------------------------------------------------------------
// ciEnv::ciEnv
-ciEnv::ciEnv(CompileTask* task, int system_dictionary_modification_counter)
+ciEnv::ciEnv(CompileTask* task)
: _ciEnv_arena(mtCompiler) {
VM_ENTRY_MARK;
@@ -118,7 +118,6 @@
assert(!firstEnv, "not initialized properly");
#endif /* !PRODUCT */
- _system_dictionary_modification_counter = system_dictionary_modification_counter;
_num_inlined_bytecodes = 0;
assert(task == NULL || thread->task() == task, "sanity");
if (task != NULL) {
@@ -183,7 +182,6 @@
firstEnv = false;
#endif /* !PRODUCT */
- _system_dictionary_modification_counter = 0;
_num_inlined_bytecodes = 0;
_task = NULL;
_log = NULL;
@@ -919,17 +917,6 @@
return JavaThread::current()->thread_state() == _thread_in_vm;
}
-bool ciEnv::system_dictionary_modification_counter_changed_locked() {
- assert_locked_or_safepoint(Compile_lock);
- return _system_dictionary_modification_counter != SystemDictionary::number_of_modifications();
-}
-
-bool ciEnv::system_dictionary_modification_counter_changed() {
- VM_ENTRY_MARK;
- MutexLocker ml(Compile_lock, THREAD); // lock with safepoint check
- return system_dictionary_modification_counter_changed_locked();
-}
-
// ------------------------------------------------------------------
// ciEnv::validate_compile_task_dependencies
//
@@ -938,8 +925,7 @@
void ciEnv::validate_compile_task_dependencies(ciMethod* target) {
if (failing()) return; // no need for further checks
- bool counter_changed = system_dictionary_modification_counter_changed_locked();
- Dependencies::DepType result = dependencies()->validate_dependencies(_task, counter_changed);
+ Dependencies::DepType result = dependencies()->validate_dependencies(_task);
if (result != Dependencies::end_marker) {
if (result == Dependencies::call_site_target_value) {
_inc_decompile_count_on_failure = false;
--- a/src/hotspot/share/ci/ciEnv.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/ci/ciEnv.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -51,7 +51,6 @@
private:
Arena* _arena; // Alias for _ciEnv_arena except in init_shared_objects()
Arena _ciEnv_arena;
- int _system_dictionary_modification_counter;
ciObjectFactory* _factory;
OopRecorder* _oop_recorder;
DebugInformationRecorder* _debug_info;
@@ -291,9 +290,6 @@
// Helper routine for determining the validity of a compilation with
// respect to method dependencies (e.g. concurrent class loading).
void validate_compile_task_dependencies(ciMethod* target);
-
- // Call internally when Compile_lock is already held.
- bool system_dictionary_modification_counter_changed_locked();
public:
enum {
MethodCompilable,
@@ -301,7 +297,7 @@
MethodCompilable_never
};
- ciEnv(CompileTask* task, int system_dictionary_modification_counter);
+ ciEnv(CompileTask* task);
// Used only during initialization of the ci
ciEnv(Arena* arena);
~ciEnv();
@@ -456,9 +452,6 @@
CompileLog* log() { return _log; }
void set_log(CompileLog* log) { _log = log; }
- // Check for changes to the system dictionary during compilation
- bool system_dictionary_modification_counter_changed();
-
void record_failure(const char* reason); // Record failure and report later
void report_failure(const char* reason); // Report failure immediately
void record_method_not_compilable(const char* reason, bool all_tiers = true);
--- a/src/hotspot/share/classfile/systemDictionary.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/classfile/systemDictionary.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -98,7 +98,6 @@
SymbolPropertyTable* SystemDictionary::_invoke_method_table = NULL;
ProtectionDomainCacheTable* SystemDictionary::_pd_cache_table = NULL;
-int SystemDictionary::_number_of_modifications = 0;
oop SystemDictionary::_system_loader_lock_obj = NULL;
InstanceKlass* SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT]
@@ -1039,11 +1038,7 @@
// Add to class hierarchy, initialize vtables, and do possible
// deoptimizations.
add_to_hierarchy(k, CHECK_NULL); // No exception, but can block
-
// But, do not add to dictionary.
-
- // compiled code dependencies need to be validated anyway
- notice_modification();
}
// Rewrite and patch constant pool here.
@@ -1880,7 +1875,6 @@
void SystemDictionary::initialize(TRAPS) {
// Allocate arrays
_placeholders = new PlaceholderTable(_placeholder_table_size);
- _number_of_modifications = 0;
_loader_constraints = new LoaderConstraintTable(_loader_constraint_size);
_resolution_errors = new ResolutionErrorTable(_resolution_error_size);
_invoke_method_table = new SymbolPropertyTable(_invoke_method_size);
@@ -2164,8 +2158,6 @@
InstanceKlass* sd_check = find_class(d_hash, name, dictionary);
if (sd_check == NULL) {
dictionary->add_klass(d_hash, name, k);
-
- notice_modification();
}
#ifdef ASSERT
sd_check = find_class(d_hash, name, dictionary);
--- a/src/hotspot/share/classfile/systemDictionary.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/classfile/systemDictionary.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -362,13 +362,6 @@
static void print_on(outputStream* st);
static void dump(outputStream* st, bool verbose);
- // Monotonically increasing counter which grows as classes are
- // loaded or modifications such as hot-swapping or setting/removing
- // of breakpoints are performed
- static inline int number_of_modifications() { assert_locked_or_safepoint(Compile_lock); return _number_of_modifications; }
- // Needed by evolution and breakpoint code
- static inline void notice_modification() { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications; }
-
// Verification
static void verify();
@@ -555,11 +548,6 @@
// Hashtable holding placeholders for classes being loaded.
static PlaceholderTable* _placeholders;
- // Monotonically increasing counter which grows with
- // loading classes as well as hot-swapping and breakpoint setting
- // and removal.
- static int _number_of_modifications;
-
// Lock object for system class loader
static oop _system_loader_lock_obj;
--- a/src/hotspot/share/code/dependencies.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/code/dependencies.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -627,32 +627,10 @@
guarantee(FIRST_TYPE <= dept && dept < TYPE_LIMIT, "invalid dependency type: %d", (int) dept);
}
-Dependencies::DepType Dependencies::validate_dependencies(CompileTask* task, bool counter_changed, char** failure_detail) {
- // First, check non-klass dependencies as we might return early and
- // not check klass dependencies if the system dictionary
- // modification counter hasn't changed (see below).
- for (Dependencies::DepStream deps(this); deps.next(); ) {
- if (deps.is_klass_type()) continue; // skip klass dependencies
- Klass* witness = deps.check_dependency();
- if (witness != NULL) {
- return deps.type();
- }
- }
-
- // Klass dependencies must be checked when the system dictionary
- // changes. If logging is enabled all violated dependences will be
- // recorded in the log. In debug mode check dependencies even if
- // the system dictionary hasn't changed to verify that no invalid
- // dependencies were inserted. Any violated dependences in this
- // case are dumped to the tty.
- if (!counter_changed && !trueInDebug) {
- return end_marker;
- }
-
+Dependencies::DepType Dependencies::validate_dependencies(CompileTask* task, char** failure_detail) {
int klass_violations = 0;
DepType result = end_marker;
for (Dependencies::DepStream deps(this); deps.next(); ) {
- if (!deps.is_klass_type()) continue; // skip non-klass dependencies
Klass* witness = deps.check_dependency();
if (witness != NULL) {
if (klass_violations == 0) {
@@ -667,12 +645,7 @@
}
}
klass_violations++;
- if (!counter_changed) {
- // Dependence failed but counter didn't change. Log a message
- // describing what failed and allow the assert at the end to
- // trigger.
- deps.print_dependency(witness);
- } else if (xtty == NULL) {
+ if (xtty == NULL) {
// If we're not logging then a single violation is sufficient,
// otherwise we want to log all the dependences which were
// violated.
@@ -681,15 +654,6 @@
}
}
- if (klass_violations != 0) {
-#ifdef ASSERT
- if (task != NULL && !counter_changed && !PrintCompilation) {
- // Print out the compile task that failed
- task->print_tty();
- }
-#endif
- assert(counter_changed, "failed dependencies, but counter didn't change");
- }
return result;
}
--- a/src/hotspot/share/code/dependencies.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/code/dependencies.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -476,7 +476,7 @@
void copy_to(nmethod* nm);
- DepType validate_dependencies(CompileTask* task, bool counter_changed, char** failure_detail = NULL);
+ DepType validate_dependencies(CompileTask* task, char** failure_detail = NULL);
void log_all_dependencies();
--- a/src/hotspot/share/compiler/compileBroker.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/compiler/compileBroker.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1595,16 +1595,10 @@
// Final sanity check - the compiler object must exist
guarantee(comp != NULL, "Compiler object must exist");
- int system_dictionary_modification_counter;
- {
- MutexLocker locker(Compile_lock, thread);
- system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
- }
-
{
// Must switch to native to allocate ci_env
ThreadToNativeFromVM ttn(thread);
- ciEnv ci_env(NULL, system_dictionary_modification_counter);
+ ciEnv ci_env((CompileTask*)NULL);
// Cache Jvmti state
ci_env.cache_jvmti_state();
// Cache DTrace flags
@@ -2045,12 +2039,6 @@
bool failure_reason_on_C_heap = false;
const char* retry_message = NULL;
- int system_dictionary_modification_counter;
- {
- MutexLocker locker(Compile_lock, thread);
- system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
- }
-
#if INCLUDE_JVMCI
if (UseJVMCICompiler && comp != NULL && comp->is_jvmci()) {
JVMCICompiler* jvmci = (JVMCICompiler*) comp;
@@ -2064,7 +2052,7 @@
retry_message = "not retryable";
compilable = ciEnv::MethodCompilable_never;
} else {
- JVMCICompileState compile_state(task, system_dictionary_modification_counter);
+ JVMCICompileState compile_state(task);
JVMCIEnv env(thread, &compile_state, __FILE__, __LINE__);
methodHandle method(thread, target_handle);
env.runtime()->compile_method(&env, jvmci, method, osr_bci);
@@ -2090,7 +2078,7 @@
NoHandleMark nhm;
ThreadToNativeFromVM ttn(thread);
- ciEnv ci_env(task, system_dictionary_modification_counter);
+ ciEnv ci_env(task);
if (should_break) {
ci_env.set_break_at_compile(true);
}
--- a/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -27,6 +27,7 @@
#include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
#include "gc/shenandoah/shenandoahHeap.hpp"
#include "gc/shenandoah/shenandoahHeapRegion.hpp"
+#include "gc/shenandoah/shenandoahRuntime.hpp"
#include "gc/shenandoah/shenandoahThreadLocalData.hpp"
#include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
@@ -183,7 +184,21 @@
return;
}
- LIRGenerator *gen = access.gen();
+ LIRGenerator* gen = access.gen();
+
+ DecoratorSet decorators = access.decorators();
+ if ((decorators & IN_NATIVE) != 0) {
+ assert(access.is_oop(), "IN_NATIVE access only for oop values");
+ BarrierSetC1::load_at_resolved(access, result);
+ LIR_OprList* args = new LIR_OprList();
+ args->append(result);
+ BasicTypeList signature;
+ signature.append(T_OBJECT);
+ LIR_Opr call_result = gen->call_runtime(&signature, args, CAST_FROM_FN_PTR(address, ShenandoahRuntime::oop_load_from_native_barrier),
+ objectType, NULL);
+ __ move(call_result, result);
+ return;
+ }
if (ShenandoahLoadRefBarrier) {
LIR_Opr tmp = gen->new_register(T_OBJECT);
@@ -195,7 +210,6 @@
}
if (ShenandoahKeepAliveBarrier) {
- DecoratorSet decorators = access.decorators();
bool is_weak = (decorators & ON_WEAK_OOP_REF) != 0;
bool is_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0;
bool is_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0;
@@ -229,3 +243,10 @@
"shenandoah_pre_barrier_slow",
false, &pre_code_gen_cl);
}
+
+const char* ShenandoahBarrierSetC1::rtcall_name_for_address(address entry) {
+ if (entry == CAST_FROM_FN_PTR(address, ShenandoahRuntime::oop_load_from_native_barrier)) {
+ return "ShenandoahRuntime::oop_load_from_native_barrier";
+ }
+ return NULL;
+}
--- a/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -203,6 +203,7 @@
public:
virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob);
+ virtual const char* rtcall_name_for_address(address entry);
};
#endif // SHARE_GC_SHENANDOAH_C1_SHENANDOAHBARRIERSETC1_HPP
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -472,6 +472,19 @@
return TypeFunc::make(domain, range);
}
+const TypeFunc* ShenandoahBarrierSetC2::oop_load_from_native_barrier_Type() {
+ const Type **fields = TypeTuple::fields(1);
+ fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // original field value
+ const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields);
+
+ // create result type (range)
+ fields = TypeTuple::fields(1);
+ fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL;
+ const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields);
+
+ return TypeFunc::make(domain, range);
+}
+
const TypeFunc* ShenandoahBarrierSetC2::shenandoah_load_reference_barrier_Type() {
const Type **fields = TypeTuple::fields(1);
fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // original field value
@@ -542,6 +555,19 @@
Node* offset = adr->is_AddP() ? adr->in(AddPNode::Offset) : top;
Node* load = BarrierSetC2::load_at_resolved(access, val_type);
+ if ((decorators & IN_NATIVE) != 0) {
+ assert(access.is_oop(), "IN_NATIVE access only for oop values");
+ assert(access.is_parse_access(), "IN_NATIVE access only during parsing");
+ GraphKit* kit = static_cast<C2ParseAccess &>(access).kit();
+ Node* call = kit->make_runtime_call(GraphKit::RC_LEAF,
+ oop_load_from_native_barrier_Type(),
+ CAST_FROM_FN_PTR(address, ShenandoahRuntime::oop_load_from_native_barrier),
+ "ShenandoahRuntime::oop_load_from_native_barrier",
+ NULL, load);
+ Node* proj = kit->gvn().transform(new ProjNode(call, TypeFunc::Parms+0));
+ return kit->gvn().transform(new CheckCastPPNode(kit->control(), proj, load->bottom_type()));
+ }
+
if (access.is_oop()) {
if (ShenandoahLoadRefBarrier) {
load = new ShenandoahLoadReferenceBarrierNode(NULL, load);
@@ -723,7 +749,8 @@
return strcmp(call->_name, "shenandoah_clone_barrier") == 0 ||
strcmp(call->_name, "shenandoah_cas_obj") == 0 ||
- strcmp(call->_name, "shenandoah_wb_pre") == 0;
+ strcmp(call->_name, "shenandoah_wb_pre") == 0 ||
+ strcmp(call->_name, "ShenandoahRuntime::oop_load_from_native_barrier") == 0;
}
Node* ShenandoahBarrierSetC2::step_over_gc_barrier(Node* c) const {
@@ -1155,6 +1182,11 @@
case Op_ShenandoahLoadReferenceBarrier:
conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(ShenandoahLoadReferenceBarrierNode::ValueIn), delayed_worklist);
return true;
+ case Op_CallLeaf:
+ if (strcmp(n->as_CallLeaf()->_name, "ShenandoahRuntime::oop_load_from_native_barrier") == 0) {
+ conn_graph->map_ideal_node(n, conn_graph->phantom_obj);
+ return true;
+ }
default:
// Nothing
break;
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -103,6 +103,7 @@
static const TypeFunc* write_ref_field_pre_entry_Type();
static const TypeFunc* shenandoah_clone_barrier_Type();
static const TypeFunc* shenandoah_load_reference_barrier_Type();
+ static const TypeFunc* oop_load_from_native_barrier_Type();
virtual bool has_load_barriers() const { return true; }
// This is the entry-point for the backend to perform accesses through the Access API.
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -358,3 +358,7 @@
}
}
}
+
+oop ShenandoahBarrierSet::oop_load_from_native_barrier(oop obj) {
+ return load_reference_barrier(obj);
+}
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -83,6 +83,8 @@
void write_ref_field_work(void* v, oop o, bool release = false);
void write_region(MemRegion mr);
+ oop oop_load_from_native_barrier(oop obj);
+
virtual void on_thread_create(Thread* thread);
virtual void on_thread_destroy(Thread* thread);
virtual void on_thread_attach(Thread* thread);
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -65,7 +65,7 @@
template <typename T>
inline oop ShenandoahBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_not_in_heap(T* addr) {
oop value = Raw::oop_load_not_in_heap(addr);
- value = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(value);
+ value = ShenandoahBarrierSet::barrier_set()->oop_load_from_native_barrier(value);
keep_alive_if_weak(decorators, value);
return value;
}
--- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -65,3 +65,7 @@
JRT_LEAF(void, ShenandoahRuntime::shenandoah_clone_barrier(oopDesc* obj))
ShenandoahBarrierSet::barrier_set()->write_region(MemRegion((HeapWord*) obj, obj->size()));
JRT_END
+
+JRT_LEAF(oopDesc*, ShenandoahRuntime::oop_load_from_native_barrier(oopDesc* src))
+ return (oopDesc*) ShenandoahBarrierSet::barrier_set()->oop_load_from_native_barrier(oop(src));
+JRT_END
--- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -39,6 +39,8 @@
static oopDesc* load_reference_barrier_JRT(oopDesc* src);
+ static oopDesc* oop_load_from_native_barrier(oopDesc* src);
+
static void shenandoah_clone_barrier(oopDesc* obj);
};
--- a/src/hotspot/share/interpreter/interpreterRuntime.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1106,7 +1106,7 @@
objects_to_revoke->append(Handle(THREAD, kptr->obj()));
}
}
- BiasedLocking::revoke(objects_to_revoke);
+ BiasedLocking::revoke(objects_to_revoke, thread);
}
}
return osr_nm;
--- a/src/hotspot/share/interpreter/templateInterpreter.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/interpreter/templateInterpreter.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,8 +29,11 @@
#include "interpreter/templateInterpreter.hpp"
#include "interpreter/templateInterpreterGenerator.hpp"
#include "interpreter/templateTable.hpp"
+#include "logging/log.hpp"
#include "memory/resourceArea.hpp"
+#include "runtime/safepoint.hpp"
#include "runtime/timerTrace.hpp"
+#include "utilities/copy.hpp"
#ifndef CC_INTERP
@@ -274,18 +277,28 @@
//------------------------------------------------------------------------------------------------------------------------
-// Safepoint suppport
+// Safepoint support
static inline void copy_table(address* from, address* to, int size) {
- // Copy non-overlapping tables. The copy has to occur word wise for MT safety.
- while (size-- > 0) *to++ = *from++;
+ // Copy non-overlapping tables.
+ if (SafepointSynchronize::is_at_safepoint()) {
+ // Nothing is using the table at a safepoint so skip atomic word copy.
+ Copy::disjoint_words((HeapWord*)from, (HeapWord*)to, (size_t)size);
+ } else {
+ // Use atomic word copy when not at a safepoint for safety.
+ Copy::disjoint_words_atomic((HeapWord*)from, (HeapWord*)to, (size_t)size);
+ }
}
void TemplateInterpreter::notice_safepoints() {
if (!_notice_safepoints) {
+ log_debug(interpreter, safepoint)("switching active_table to safept_table.");
// switch to safepoint dispatch table
_notice_safepoints = true;
copy_table((address*)&_safept_table, (address*)&_active_table, sizeof(_active_table) / sizeof(address));
+ } else {
+ log_debug(interpreter, safepoint)("active_table is already safept_table; "
+ "notice_safepoints() call is no-op.");
}
}
@@ -297,10 +310,17 @@
void TemplateInterpreter::ignore_safepoints() {
if (_notice_safepoints) {
if (!JvmtiExport::should_post_single_step()) {
+ log_debug(interpreter, safepoint)("switching active_table to normal_table.");
// switch to normal dispatch table
_notice_safepoints = false;
copy_table((address*)&_normal_table, (address*)&_active_table, sizeof(_active_table) / sizeof(address));
+ } else {
+ log_debug(interpreter, safepoint)("single stepping is still active; "
+ "ignoring ignore_safepoints() call.");
}
+ } else {
+ log_debug(interpreter, safepoint)("active_table is already normal_table; "
+ "ignore_safepoints() call is no-op.");
}
}
--- a/src/hotspot/share/jvmci/jvmciEnv.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/jvmci/jvmciEnv.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -36,9 +36,8 @@
#include "jvmci/jniAccessMark.inline.hpp"
#include "jvmci/jvmciRuntime.hpp"
-JVMCICompileState::JVMCICompileState(CompileTask* task, int system_dictionary_modification_counter):
+JVMCICompileState::JVMCICompileState(CompileTask* task):
_task(task),
- _system_dictionary_modification_counter(system_dictionary_modification_counter),
_retryable(true),
_failure_reason(NULL),
_failure_reason_on_C_heap(false) {
--- a/src/hotspot/share/jvmci/jvmciEnv.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/jvmci/jvmciEnv.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -90,7 +90,6 @@
friend class JVMCIVMStructs;
private:
CompileTask* _task;
- int _system_dictionary_modification_counter;
// Cache JVMTI state. Defined as bytes so that reading them from Java
// via Unsafe is well defined (the C++ type for bool is implementation
@@ -109,11 +108,10 @@
bool _failure_reason_on_C_heap;
public:
- JVMCICompileState(CompileTask* task, int system_dictionary_modification_counter);
+ JVMCICompileState(CompileTask* task);
CompileTask* task() { return _task; }
- int system_dictionary_modification_counter() { return _system_dictionary_modification_counter; }
bool jvmti_state_changed() const;
bool jvmti_can_hotswap_or_post_breakpoint() const { return _jvmti_can_hotswap_or_post_breakpoint != 0; }
bool jvmti_can_access_local_variables() const { return _jvmti_can_access_local_variables != 0; }
--- a/src/hotspot/share/jvmci/jvmciRuntime.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1327,14 +1327,13 @@
// Dependencies must be checked when the system dictionary changes
// or if we don't know whether it has changed (i.e., compile_state == NULL).
- bool counter_changed = compile_state == NULL || compile_state->system_dictionary_modification_counter() != SystemDictionary::number_of_modifications();
CompileTask* task = compile_state == NULL ? NULL : compile_state->task();
- Dependencies::DepType result = dependencies->validate_dependencies(task, counter_changed, failure_detail);
+ Dependencies::DepType result = dependencies->validate_dependencies(task, failure_detail);
if (result == Dependencies::end_marker) {
return JVMCI::ok;
}
- if (!Dependencies::is_klass_type(result) || counter_changed) {
+ if (!Dependencies::is_klass_type(result) || compile_state == NULL) {
return JVMCI::dependencies_failed;
}
// The dependencies were invalid at the time of installation
--- a/src/hotspot/share/memory/heapInspection.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/memory/heapInspection.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -123,7 +123,7 @@
KlassInfoEntry* KlassInfoBucket::lookup(Klass* const k) {
// Can happen if k is an archived class that we haven't loaded yet.
- if (k->java_mirror() == NULL) {
+ if (k->java_mirror_no_keepalive() == NULL) {
return NULL;
}
@@ -719,7 +719,7 @@
ResourceMark rm;
RecordInstanceClosure ric(cit, filter);
- Universe::heap()->object_iterate(&ric);
+ Universe::heap()->safe_object_iterate(&ric);
return ric.missed_count();
}
@@ -792,8 +792,5 @@
// Iterate over objects in the heap
FindInstanceClosure fic(k, result);
- // If this operation encounters a bad object when using CMS,
- // consider using safe_object_iterate() which avoids metadata
- // objects that may contain bad references.
- Universe::heap()->object_iterate(&fic);
+ Universe::heap()->safe_object_iterate(&fic);
}
--- a/src/hotspot/share/oops/klass.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/oops/klass.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -767,7 +767,7 @@
// Size Statistics
void Klass::collect_statistics(KlassSizeStats *sz) const {
sz->_klass_bytes = sz->count(this);
- sz->_mirror_bytes = sz->count(java_mirror());
+ sz->_mirror_bytes = sz->count(java_mirror_no_keepalive());
sz->_secondary_supers_bytes = sz->count_array(secondary_supers());
sz->_ro_bytes += sz->_secondary_supers_bytes;
--- a/src/hotspot/share/oops/method.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/oops/method.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1920,7 +1920,6 @@
Thread *thread = Thread::current();
*method->bcp_from(_bci) = Bytecodes::_breakpoint;
method->incr_number_of_breakpoints(thread);
- SystemDictionary::notice_modification();
{
// Deoptimize all dependents on this method
HandleMark hm(thread);
--- a/src/hotspot/share/opto/callGenerator.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/opto/callGenerator.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -96,13 +96,6 @@
Parse parser(jvms, method(), _expected_uses);
// Grab signature for matching/allocation
-#ifdef ASSERT
- if (parser.tf() != (parser.depth() == 1 ? C->tf() : tf())) {
- assert(C->env()->system_dictionary_modification_counter_changed(),
- "Must invalidate if TypeFuncs differ");
- }
-#endif
-
GraphKit& exits = parser.exits();
if (C->failing()) {
--- a/src/hotspot/share/opto/parse1.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/opto/parse1.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -523,10 +523,6 @@
#ifdef ASSERT
if (depth() == 1) {
assert(C->is_osr_compilation() == this->is_osr_parse(), "OSR in sync");
- if (C->tf() != tf()) {
- assert(C->env()->system_dictionary_modification_counter_changed(),
- "Must invalidate if TypeFuncs differ");
- }
} else {
assert(!this->is_osr_parse(), "no recursive OSR");
}
@@ -1040,19 +1036,12 @@
const Type* ret_type = tf()->range()->field_at(TypeFunc::Parms);
Node* ret_phi = _gvn.transform( _exits.argument(0) );
if (!_exits.control()->is_top() && _gvn.type(ret_phi)->empty()) {
- // In case of concurrent class loading, the type we set for the
- // ret_phi in build_exits() may have been too optimistic and the
- // ret_phi may be top now.
- // Otherwise, we've encountered an error and have to mark the method as
- // not compilable. Just using an assertion instead would be dangerous
- // as this could lead to an infinite compile loop in non-debug builds.
- {
- if (C->env()->system_dictionary_modification_counter_changed()) {
- C->record_failure(C2Compiler::retry_class_loading_during_parsing());
- } else {
- C->record_method_not_compilable("Can't determine return type.");
- }
- }
+ // If the type we set for the ret_phi in build_exits() is too optimistic and
+ // the ret_phi is top now, there's an extremely small chance that it may be due to class
+ // loading. It could also be due to an error, so mark this method as not compilable because
+ // otherwise this could lead to an infinite compile loop.
+ // In any case, this code path is rarely (and never in my testing) reached.
+ C->record_method_not_compilable("Can't determine return type.");
return;
}
if (ret_type->isa_int()) {
--- a/src/hotspot/share/prims/jvmtiEventController.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/prims/jvmtiEventController.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -264,7 +264,7 @@
VM_ChangeSingleStep::VM_ChangeSingleStep(bool on)
- : _on(on != 0)
+ : _on(on)
{
}
@@ -331,18 +331,20 @@
}
-// This change must always be occur when at a safepoint.
-// Being at a safepoint causes the interpreter to use the
-// safepoint dispatch table which we overload to find single
-// step points. Just to be sure that it has been set, we
-// call notice_safepoints when turning on single stepping.
-// When we leave our current safepoint, should_post_single_step
-// will be checked by the interpreter, and the table kept
-// or changed accordingly.
+// When _on == true, we use the safepoint interpreter dispatch table
+// to allow us to find the single step points. Otherwise, we switch
+// back to the regular interpreter dispatch table.
+// Note: We call Interpreter::notice_safepoints() and ignore_safepoints()
+// in a VM_Operation to safely make the dispatch table switch. We
+// no longer rely on the safepoint mechanism to do any of this work
+// for us.
void VM_ChangeSingleStep::doit() {
+ log_debug(interpreter, safepoint)("changing single step to '%s'", _on ? "on" : "off");
JvmtiEventControllerPrivate::set_should_post_single_step(_on);
if (_on) {
Interpreter::notice_safepoints();
+ } else {
+ Interpreter::ignore_safepoints();
}
}
--- a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -232,9 +232,6 @@
ResolvedMethodTable::adjust_method_entries(&trace_name_printed);
}
- // Disable any dependent concurrent compilations
- SystemDictionary::notice_modification();
-
// Set flag indicating that some invariants are no longer true.
// See jvmtiExport.hpp for detailed explanation.
JvmtiExport::set_has_redefined_a_class();
--- a/src/hotspot/share/runtime/biasedLocking.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/runtime/biasedLocking.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -119,6 +119,7 @@
return _biased_locking_enabled || BiasedLockingStartupDelay == 0;
}
+
// Returns MonitorInfos for all objects locked on this thread in youngest to oldest order
static GrowableArray<MonitorInfo*>* get_or_compute_monitor_info(JavaThread* thread) {
GrowableArray<MonitorInfo*>* info = thread->cached_monitor_info();
@@ -153,9 +154,13 @@
return info;
}
+
// After the call, *biased_locker will be set to obj->mark()->biased_locker() if biased_locker != NULL,
// AND it is a living thread. Otherwise it will not be updated, (i.e. the caller is responsible for initialization).
-static BiasedLocking::Condition revoke_bias(oop obj, bool allow_rebias, bool is_bulk, JavaThread* requesting_thread, JavaThread** biased_locker) {
+BiasedLocking::Condition BiasedLocking::single_revoke_at_safepoint(oop obj, bool allow_rebias, bool is_bulk, JavaThread* requesting_thread, JavaThread** biased_locker) {
+ assert(SafepointSynchronize::is_at_safepoint(), "must be done at safepoint");
+ assert(Thread::current()->is_VM_thread(), "must be VMThread");
+
markOop mark = obj->mark();
if (!mark->has_bias_pattern()) {
if (log_is_enabled(Info, biasedlocking)) {
@@ -168,7 +173,7 @@
obj->klass()->external_name(),
(intptr_t) requesting_thread);
}
- return BiasedLocking::NOT_BIASED;
+ return NOT_BIASED;
}
uint age = mark->age();
@@ -214,7 +219,7 @@
} else {
log_trace(biasedlocking)(" Revoked bias of anonymously-biased object");
}
- return BiasedLocking::BIAS_REVOKED;
+ return BIAS_REVOKED;
}
// Handle case where the thread toward which the object was biased has exited
@@ -239,7 +244,7 @@
log_trace(biasedlocking)(" Revoked bias of object biased toward dead thread ("
PTR_FORMAT ")", p2i(biased_thread));
}
- return BiasedLocking::BIAS_REVOKED;
+ return BIAS_REVOKED;
}
// Log at "info" level if not bulk, else "trace" level
@@ -264,7 +269,7 @@
log_trace(biasedlocking)(" mon_info->owner (" PTR_FORMAT ") == obj (" PTR_FORMAT ")",
p2i((void *) mon_info->owner()),
p2i((void *) obj));
- // Assume recursive case and fix up highest lock later
+ // Assume recursive case and fix up highest lock below
markOop mark = markOopDesc::encode((BasicLock*) NULL);
highest_lock = mon_info->lock();
highest_lock->set_displaced_header(mark);
@@ -279,7 +284,7 @@
// object at it
highest_lock->set_displaced_header(unbiased_prototype);
// Reset object header to point to displaced mark.
- // Must release storing the lock address for platforms without TSO
+ // Must release store the lock address for platforms without TSO
// ordering (e.g. ppc).
obj->release_set_mark(markOopDesc::encode(highest_lock));
assert(!obj->mark()->has_bias_pattern(), "illegal mark state: stack lock used bias bit");
@@ -309,7 +314,7 @@
*biased_locker = biased_thread;
}
- return BiasedLocking::BIAS_REVOKED;
+ return BIAS_REVOKED;
}
@@ -321,7 +326,7 @@
};
-static HeuristicsResult update_heuristics(oop o, bool allow_rebias) {
+static HeuristicsResult update_heuristics(oop o) {
markOop mark = o->mark();
if (!mark->has_bias_pattern()) {
return HR_NOT_BIASED;
@@ -374,11 +379,12 @@
}
-static BiasedLocking::Condition bulk_revoke_or_rebias_at_safepoint(oop o,
+BiasedLocking::Condition BiasedLocking::bulk_revoke_or_rebias_at_safepoint(oop o,
bool bulk_rebias,
bool attempt_rebias_of_object,
JavaThread* requesting_thread) {
assert(SafepointSynchronize::is_at_safepoint(), "must be done at safepoint");
+ assert(Thread::current()->is_VM_thread(), "must be VMThread");
log_info(biasedlocking)("* Beginning bulk revocation (kind == %s) because of object "
INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
@@ -390,7 +396,6 @@
jlong cur_time = os::javaTimeMillis();
o->klass()->set_last_biased_lock_bulk_revocation_time(cur_time);
-
Klass* k_o = o->klass();
Klass* klass = k_o;
@@ -432,7 +437,7 @@
// At this point we're done. All we have to do is potentially
// adjust the header of the given object to revoke its bias.
- revoke_bias(o, attempt_rebias_of_object && klass->prototype_header()->has_bias_pattern(), true, requesting_thread, NULL);
+ single_revoke_at_safepoint(o, attempt_rebias_of_object && klass->prototype_header()->has_bias_pattern(), true, requesting_thread, NULL);
} else {
if (log_is_enabled(Info, biasedlocking)) {
ResourceMark rm;
@@ -454,20 +459,20 @@
oop owner = mon_info->owner();
markOop mark = owner->mark();
if ((owner->klass() == k_o) && mark->has_bias_pattern()) {
- revoke_bias(owner, false, true, requesting_thread, NULL);
+ single_revoke_at_safepoint(owner, false, true, requesting_thread, NULL);
}
}
}
// Must force the bias of the passed object to be forcibly revoked
// as well to ensure guarantees to callers
- revoke_bias(o, false, true, requesting_thread, NULL);
+ single_revoke_at_safepoint(o, false, true, requesting_thread, NULL);
}
} // ThreadsListHandle is destroyed here.
log_info(biasedlocking)("* Ending bulk revocation");
- BiasedLocking::Condition status_code = BiasedLocking::BIAS_REVOKED;
+ BiasedLocking::Condition status_code = BIAS_REVOKED;
if (attempt_rebias_of_object &&
o->mark()->has_bias_pattern() &&
@@ -475,7 +480,7 @@
markOop new_mark = markOopDesc::encode(requesting_thread, o->mark()->age(),
klass->prototype_header()->bias_epoch());
o->set_mark(new_mark);
- status_code = BiasedLocking::BIAS_REVOKED_AND_REBIASED;
+ status_code = BIAS_REVOKED_AND_REBIASED;
log_info(biasedlocking)(" Rebiased object toward thread " INTPTR_FORMAT, (intptr_t) requesting_thread);
}
@@ -487,77 +492,125 @@
}
-static void clean_up_cached_monitor_info() {
- // Walk the thread list clearing out the cached monitors
- for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thr = jtiwh.next(); ) {
- thr->set_cached_monitor_info(NULL);
+static void clean_up_cached_monitor_info(JavaThread* thread = NULL) {
+ if (thread != NULL) {
+ thread->set_cached_monitor_info(NULL);
+ } else {
+ // Walk the thread list clearing out the cached monitors
+ for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thr = jtiwh.next(); ) {
+ thr->set_cached_monitor_info(NULL);
+ }
}
}
-class VM_RevokeBias : public VM_Operation {
-protected:
+class VM_BulkRevokeBias : public VM_Operation {
+private:
Handle* _obj;
- GrowableArray<Handle>* _objs;
JavaThread* _requesting_thread;
+ bool _bulk_rebias;
+ bool _attempt_rebias_of_object;
BiasedLocking::Condition _status_code;
- traceid _biased_locker_id;
uint64_t _safepoint_id;
public:
- VM_RevokeBias(Handle* obj, JavaThread* requesting_thread)
+ VM_BulkRevokeBias(Handle* obj, JavaThread* requesting_thread,
+ bool bulk_rebias,
+ bool attempt_rebias_of_object)
: _obj(obj)
- , _objs(NULL)
, _requesting_thread(requesting_thread)
+ , _bulk_rebias(bulk_rebias)
+ , _attempt_rebias_of_object(attempt_rebias_of_object)
, _status_code(BiasedLocking::NOT_BIASED)
- , _biased_locker_id(0)
- , _safepoint_id(0) {}
-
- VM_RevokeBias(GrowableArray<Handle>* objs, JavaThread* requesting_thread)
- : _obj(NULL)
- , _objs(objs)
- , _requesting_thread(requesting_thread)
- , _status_code(BiasedLocking::NOT_BIASED)
- , _biased_locker_id(0)
, _safepoint_id(0) {}
- virtual VMOp_Type type() const { return VMOp_RevokeBias; }
+ virtual VMOp_Type type() const { return VMOp_BulkRevokeBias; }
+
+ virtual void doit() {
+ _status_code = BiasedLocking::bulk_revoke_or_rebias_at_safepoint((*_obj)(), _bulk_rebias, _attempt_rebias_of_object, _requesting_thread);
+ _safepoint_id = SafepointSynchronize::safepoint_id();
+ clean_up_cached_monitor_info();
+ }
+
+ bool is_bulk_rebias() const {
+ return _bulk_rebias;
+ }
+
+ BiasedLocking::Condition status_code() const {
+ return _status_code;
+ }
+
+ uint64_t safepoint_id() const {
+ return _safepoint_id;
+ }
+};
+
+
+class RevokeOneBias : public ThreadClosure {
+protected:
+ Handle _obj;
+ JavaThread* _requesting_thread;
+ JavaThread* _biased_locker;
+ BiasedLocking::Condition _status_code;
+ traceid _biased_locker_id;
+
+public:
+ RevokeOneBias(Handle obj, JavaThread* requesting_thread, JavaThread* biased_locker)
+ : _obj(obj)
+ , _requesting_thread(requesting_thread)
+ , _biased_locker(biased_locker)
+ , _status_code(BiasedLocking::NOT_BIASED)
+ , _biased_locker_id(0) {}
+
+ void do_thread(Thread* target) {
+ assert(target == _biased_locker, "Wrong thread");
- virtual bool doit_prologue() {
- // Verify that there is actual work to do since the callers just
- // give us locked object(s). If we don't find any biased objects
- // there is nothing to do and we avoid a safepoint.
- if (_obj != NULL) {
- markOop mark = (*_obj)()->mark();
- if (mark->has_bias_pattern()) {
- return true;
+ oop o = _obj();
+ markOop mark = o->mark();
+
+ if (!mark->has_bias_pattern()) {
+ return;
+ }
+
+ markOop prototype = o->klass()->prototype_header();
+ if (!prototype->has_bias_pattern()) {
+ // This object has a stale bias from before the handshake
+ // was requested. If we fail this race, the object's bias
+ // has been revoked by another thread so we simply return.
+ markOop biased_value = mark;
+ mark = o->cas_set_mark(markOopDesc::prototype()->set_age(mark->age()), mark);
+ assert(!o->mark()->has_bias_pattern(), "even if we raced, should still be revoked");
+ if (biased_value == mark) {
+ _status_code = BiasedLocking::BIAS_REVOKED;
}
- } else {
- for ( int i = 0 ; i < _objs->length(); i++ ) {
- markOop mark = (_objs->at(i))()->mark();
- if (mark->has_bias_pattern()) {
- return true;
+ return;
+ }
+
+ if (_biased_locker == mark->biased_locker()) {
+ if (mark->bias_epoch() == prototype->bias_epoch()) {
+ // Epoch is still valid. This means biaser could be currently
+ // synchronized on this object. We must walk its stack looking
+ // for monitor records associated with this object and change
+ // them to be stack locks if any are found.
+ ResourceMark rm;
+ BiasedLocking::walk_stack_and_revoke(o, _biased_locker);
+ _biased_locker->set_cached_monitor_info(NULL);
+ assert(!o->mark()->has_bias_pattern(), "invariant");
+ _biased_locker_id = JFR_THREAD_ID(_biased_locker);
+ _status_code = BiasedLocking::BIAS_REVOKED;
+ return;
+ } else {
+ markOop biased_value = mark;
+ mark = o->cas_set_mark(markOopDesc::prototype()->set_age(mark->age()), mark);
+ if (mark == biased_value || !mark->has_bias_pattern()) {
+ assert(!o->mark()->has_bias_pattern(), "should be revoked");
+ _status_code = (biased_value == mark) ? BiasedLocking::BIAS_REVOKED : BiasedLocking::NOT_BIASED;
+ return;
}
}
}
- return false;
- }
- virtual void doit() {
- if (_obj != NULL) {
- log_info(biasedlocking)("Revoking bias with potentially per-thread safepoint:");
- JavaThread* biased_locker = NULL;
- _status_code = revoke_bias((*_obj)(), false, false, _requesting_thread, &biased_locker);
- if (biased_locker != NULL) {
- _biased_locker_id = JFR_THREAD_ID(biased_locker);
- }
- _safepoint_id = SafepointSynchronize::safepoint_id();
- clean_up_cached_monitor_info();
- return;
- } else {
- log_info(biasedlocking)("Revoking bias with global safepoint:");
- BiasedLocking::revoke_at_safepoint(_objs);
- }
+ _status_code = BiasedLocking::NOT_REVOKED;
}
BiasedLocking::Condition status_code() const {
@@ -567,40 +620,9 @@
traceid biased_locker() const {
return _biased_locker_id;
}
-
- uint64_t safepoint_id() const {
- return _safepoint_id;
- }
};
-class VM_BulkRevokeBias : public VM_RevokeBias {
-private:
- bool _bulk_rebias;
- bool _attempt_rebias_of_object;
-
-public:
- VM_BulkRevokeBias(Handle* obj, JavaThread* requesting_thread,
- bool bulk_rebias,
- bool attempt_rebias_of_object)
- : VM_RevokeBias(obj, requesting_thread)
- , _bulk_rebias(bulk_rebias)
- , _attempt_rebias_of_object(attempt_rebias_of_object) {}
-
- virtual VMOp_Type type() const { return VMOp_BulkRevokeBias; }
- virtual bool doit_prologue() { return true; }
-
- virtual void doit() {
- _status_code = bulk_revoke_or_rebias_at_safepoint((*_obj)(), _bulk_rebias, _attempt_rebias_of_object, _requesting_thread);
- _safepoint_id = SafepointSynchronize::safepoint_id();
- clean_up_cached_monitor_info();
- }
-
- bool is_bulk_rebias() const {
- return _bulk_rebias;
- }
-};
-
static void post_self_revocation_event(EventBiasedLockSelfRevocation* event, Klass* k) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
@@ -609,13 +631,13 @@
event->commit();
}
-static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, VM_RevokeBias* op) {
+static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, RevokeOneBias* op) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(op != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
- event->set_safepointId(op->safepoint_id());
+ event->set_safepointId(0);
event->set_previousOwner(op->biased_locker());
event->commit();
}
@@ -631,141 +653,263 @@
event->commit();
}
-BiasedLocking::Condition BiasedLocking::revoke_and_rebias(Handle obj, bool attempt_rebias, TRAPS) {
- assert(!SafepointSynchronize::is_at_safepoint(), "must not be called while at safepoint");
+
+BiasedLocking::Condition BiasedLocking::single_revoke_with_handshake(Handle obj, JavaThread *requester, JavaThread *biaser) {
+
+ EventBiasedLockRevocation event;
+ if (PrintBiasedLockingStatistics) {
+ Atomic::inc(handshakes_count_addr());
+ }
+ log_info(biasedlocking, handshake)("JavaThread " INTPTR_FORMAT " handshaking JavaThread "
+ INTPTR_FORMAT " to revoke object " INTPTR_FORMAT, p2i(requester),
+ p2i(biaser), p2i(obj()));
- // We can revoke the biases of anonymously-biased objects
- // efficiently enough that we should not cause these revocations to
- // update the heuristics because doing so may cause unwanted bulk
- // revocations (which are expensive) to occur.
- markOop mark = obj->mark();
- if (mark->is_biased_anonymously() && !attempt_rebias) {
- // We are probably trying to revoke the bias of this object due to
- // an identity hash code computation. Try to revoke the bias
- // without a safepoint. This is possible if we can successfully
- // compare-and-exchange an unbiased header into the mark word of
- // the object, meaning that no other thread has raced to acquire
- // the bias of the object.
- markOop biased_value = mark;
- markOop unbiased_prototype = markOopDesc::prototype()->set_age(mark->age());
- markOop res_mark = obj->cas_set_mark(unbiased_prototype, mark);
- if (res_mark == biased_value) {
- return BIAS_REVOKED;
+ RevokeOneBias revoke(obj, requester, biaser);
+ bool executed = Handshake::execute(&revoke, biaser);
+ if (revoke.status_code() == NOT_REVOKED) {
+ return NOT_REVOKED;
+ }
+ if (executed) {
+ log_info(biasedlocking, handshake)("Handshake revocation for object " INTPTR_FORMAT " succeeded. Bias was %srevoked",
+ p2i(obj()), (revoke.status_code() == BIAS_REVOKED ? "" : "already "));
+ if (event.should_commit() && revoke.status_code() == BIAS_REVOKED) {
+ post_revocation_event(&event, obj->klass(), &revoke);
}
- } else if (mark->has_bias_pattern()) {
- Klass* k = obj->klass();
- markOop prototype_header = k->prototype_header();
- if (!prototype_header->has_bias_pattern()) {
- // This object has a stale bias from before the bulk revocation
- // for this data type occurred. It's pointless to update the
- // heuristics at this point so simply update the header with a
- // CAS. If we fail this race, the object's bias has been revoked
- // by another thread so we simply return and let the caller deal
- // with it.
- markOop biased_value = mark;
- markOop res_mark = obj->cas_set_mark(prototype_header, mark);
- assert(!obj->mark()->has_bias_pattern(), "even if we raced, should still be revoked");
- return BIAS_REVOKED;
- } else if (prototype_header->bias_epoch() != mark->bias_epoch()) {
- // The epoch of this biasing has expired indicating that the
- // object is effectively unbiased. Depending on whether we need
- // to rebias or revoke the bias of this object we can do it
- // efficiently enough with a CAS that we shouldn't update the
- // heuristics. This is normally done in the assembly code but we
- // can reach this point due to various points in the runtime
- // needing to revoke biases.
- if (attempt_rebias) {
- assert(THREAD->is_Java_thread(), "");
- markOop biased_value = mark;
- markOop rebiased_prototype = markOopDesc::encode((JavaThread*) THREAD, mark->age(), prototype_header->bias_epoch());
- markOop res_mark = obj->cas_set_mark(rebiased_prototype, mark);
- if (res_mark == biased_value) {
- return BIAS_REVOKED_AND_REBIASED;
+ assert(!obj->mark()->has_bias_pattern(), "invariant");
+ return revoke.status_code();
+ } else {
+ // Thread was not alive.
+ // Grab Threads_lock before manually trying to revoke bias. This avoids race with a newly
+ // created JavaThread (that happens to get the same memory address as biaser) synchronizing
+ // on this object.
+ {
+ MutexLocker ml(Threads_lock);
+ markOop mark = obj->mark();
+ // Check if somebody else was able to revoke it before biased thread exited.
+ if (!mark->has_bias_pattern()) {
+ return NOT_BIASED;
+ }
+ ThreadsListHandle tlh;
+ markOop prototype = obj->klass()->prototype_header();
+ if (!prototype->has_bias_pattern() || (!tlh.includes(biaser) && biaser == mark->biased_locker() &&
+ prototype->bias_epoch() == mark->bias_epoch())) {
+ obj->cas_set_mark(markOopDesc::prototype()->set_age(mark->age()), mark);
+ if (event.should_commit()) {
+ post_revocation_event(&event, obj->klass(), &revoke);
}
- } else {
- markOop biased_value = mark;
- markOop unbiased_prototype = markOopDesc::prototype()->set_age(mark->age());
- markOop res_mark = obj->cas_set_mark(unbiased_prototype, mark);
- if (res_mark == biased_value) {
- return BIAS_REVOKED;
- }
+ assert(!obj->mark()->has_bias_pattern(), "bias should be revoked by now");
+ return BIAS_REVOKED;
}
}
}
- HeuristicsResult heuristics = update_heuristics(obj(), attempt_rebias);
- if (heuristics == HR_NOT_BIASED) {
- return NOT_BIASED;
- } else if (heuristics == HR_SINGLE_REVOKE) {
- Klass *k = obj->klass();
- markOop prototype_header = k->prototype_header();
- if (mark->biased_locker() == THREAD &&
- prototype_header->bias_epoch() == mark->bias_epoch()) {
- // A thread is trying to revoke the bias of an object biased
- // toward it, again likely due to an identity hash code
- // computation. We can again avoid a safepoint in this case
- // since we are only going to walk our own stack. There are no
- // races with revocations occurring in other threads because we
- // reach no safepoints in the revocation path.
- // Also check the epoch because even if threads match, another thread
- // can come in with a CAS to steal the bias of an object that has a
- // stale epoch.
- ResourceMark rm;
- log_info(biasedlocking)("Revoking bias by walking my own stack:");
- EventBiasedLockSelfRevocation event;
- BiasedLocking::Condition cond = revoke_bias(obj(), false, false, (JavaThread*) THREAD, NULL);
- ((JavaThread*) THREAD)->set_cached_monitor_info(NULL);
- assert(cond == BIAS_REVOKED, "why not?");
- if (event.should_commit()) {
- post_self_revocation_event(&event, k);
- }
- return cond;
+ return NOT_REVOKED;
+}
+
+
+// Caller should have instantiated a ResourceMark object before calling this method
+void BiasedLocking::walk_stack_and_revoke(oop obj, JavaThread* biased_locker) {
+ assert(!SafepointSynchronize::is_at_safepoint() || !ThreadLocalHandshakes,
+ "if ThreadLocalHandshakes is enabled this should always be executed outside safepoints");
+ assert(Thread::current() == biased_locker || Thread::current()->is_VM_thread(), "wrong thread");
+
+ markOop mark = obj->mark();
+ assert(mark->biased_locker() == biased_locker &&
+ obj->klass()->prototype_header()->bias_epoch() == mark->bias_epoch(), "invariant");
+
+ log_trace(biasedlocking)("%s(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark "
+ INTPTR_FORMAT ", type %s, prototype header " INTPTR_FORMAT
+ ", biaser " INTPTR_FORMAT " %s",
+ Thread::current()->is_VM_thread() ? "VMThread" : "JavaThread",
+ p2i(Thread::current()),
+ p2i(obj),
+ p2i(mark),
+ obj->klass()->external_name(),
+ p2i(obj->klass()->prototype_header()),
+ p2i(biased_locker),
+ Thread::current()->is_VM_thread() ? "" : "(walking own stack)");
+
+ markOop unbiased_prototype = markOopDesc::prototype()->set_age(obj->mark()->age());
+
+ GrowableArray<MonitorInfo*>* cached_monitor_info = get_or_compute_monitor_info(biased_locker);
+ BasicLock* highest_lock = NULL;
+ for (int i = 0; i < cached_monitor_info->length(); i++) {
+ MonitorInfo* mon_info = cached_monitor_info->at(i);
+ if (oopDesc::equals(mon_info->owner(), obj)) {
+ log_trace(biasedlocking)(" mon_info->owner (" PTR_FORMAT ") == obj (" PTR_FORMAT ")",
+ p2i(mon_info->owner()),
+ p2i(obj));
+ // Assume recursive case and fix up highest lock below
+ markOop mark = markOopDesc::encode((BasicLock*) NULL);
+ highest_lock = mon_info->lock();
+ highest_lock->set_displaced_header(mark);
} else {
- EventBiasedLockRevocation event;
- VM_RevokeBias revoke(&obj, (JavaThread*) THREAD);
- VMThread::execute(&revoke);
- if (event.should_commit() && revoke.status_code() != NOT_BIASED) {
- post_revocation_event(&event, k, &revoke);
- }
- return revoke.status_code();
+ log_trace(biasedlocking)(" mon_info->owner (" PTR_FORMAT ") != obj (" PTR_FORMAT ")",
+ p2i(mon_info->owner()),
+ p2i(obj));
}
}
+ if (highest_lock != NULL) {
+ // Fix up highest lock to contain displaced header and point
+ // object at it
+ highest_lock->set_displaced_header(unbiased_prototype);
+ // Reset object header to point to displaced mark.
+ // Must release store the lock address for platforms without TSO
+ // ordering (e.g. ppc).
+ obj->release_set_mark(markOopDesc::encode(highest_lock));
+ assert(!obj->mark()->has_bias_pattern(), "illegal mark state: stack lock used bias bit");
+ log_info(biasedlocking)(" Revoked bias of currently-locked object");
+ } else {
+ log_info(biasedlocking)(" Revoked bias of currently-unlocked object");
+ // Store the unlocked value into the object's header.
+ obj->set_mark(unbiased_prototype);
+ }
- assert((heuristics == HR_BULK_REVOKE) ||
- (heuristics == HR_BULK_REBIAS), "?");
- EventBiasedLockClassRevocation event;
- VM_BulkRevokeBias bulk_revoke(&obj, (JavaThread*) THREAD,
- (heuristics == HR_BULK_REBIAS),
- attempt_rebias);
- VMThread::execute(&bulk_revoke);
- if (event.should_commit()) {
- post_class_revocation_event(&event, obj->klass(), &bulk_revoke);
- }
- return bulk_revoke.status_code();
+ assert(!obj->mark()->has_bias_pattern(), "must not be biased");
}
-void BiasedLocking::revoke(GrowableArray<Handle>* objs) {
+BiasedLocking::Condition BiasedLocking::revoke_and_rebias(Handle obj, bool attempt_rebias, TRAPS) {
assert(!SafepointSynchronize::is_at_safepoint(), "must not be called while at safepoint");
- if (objs->length() == 0) {
- return;
+
+ while (true) {
+ // We can revoke the biases of anonymously-biased objects
+ // efficiently enough that we should not cause these revocations to
+ // update the heuristics because doing so may cause unwanted bulk
+ // revocations (which are expensive) to occur.
+ markOop mark = obj->mark();
+ if (mark->is_biased_anonymously() && !attempt_rebias) {
+ // We are probably trying to revoke the bias of this object due to
+ // an identity hash code computation. Try to revoke the bias
+ // without a safepoint. This is possible if we can successfully
+ // compare-and-exchange an unbiased header into the mark word of
+ // the object, meaning that no other thread has raced to acquire
+ // the bias of the object.
+ markOop biased_value = mark;
+ markOop unbiased_prototype = markOopDesc::prototype()->set_age(mark->age());
+ markOop res_mark = obj->cas_set_mark(unbiased_prototype, mark);
+ if (res_mark == biased_value) {
+ return BIAS_REVOKED;
+ }
+ mark = res_mark; // Refresh mark with the latest value.
+ } else if (mark->has_bias_pattern()) {
+ Klass* k = obj->klass();
+ markOop prototype_header = k->prototype_header();
+ if (!prototype_header->has_bias_pattern()) {
+ // This object has a stale bias from before the bulk revocation
+ // for this data type occurred. It's pointless to update the
+ // heuristics at this point so simply update the header with a
+ // CAS. If we fail this race, the object's bias has been revoked
+ // by another thread so we simply return and let the caller deal
+ // with it.
+ obj->cas_set_mark(prototype_header->set_age(mark->age()), mark);
+ assert(!obj->mark()->has_bias_pattern(), "even if we raced, should still be revoked");
+ return BIAS_REVOKED;
+ } else if (prototype_header->bias_epoch() != mark->bias_epoch()) {
+ // The epoch of this biasing has expired indicating that the
+ // object is effectively unbiased. Depending on whether we need
+ // to rebias or revoke the bias of this object we can do it
+ // efficiently enough with a CAS that we shouldn't update the
+ // heuristics. This is normally done in the assembly code but we
+ // can reach this point due to various points in the runtime
+ // needing to revoke biases.
+ markOop res_mark;
+ if (attempt_rebias) {
+ assert(THREAD->is_Java_thread(), "");
+ markOop biased_value = mark;
+ markOop rebiased_prototype = markOopDesc::encode((JavaThread*) THREAD, mark->age(), prototype_header->bias_epoch());
+ res_mark = obj->cas_set_mark(rebiased_prototype, mark);
+ if (res_mark == biased_value) {
+ return BIAS_REVOKED_AND_REBIASED;
+ }
+ } else {
+ markOop biased_value = mark;
+ markOop unbiased_prototype = markOopDesc::prototype()->set_age(mark->age());
+ res_mark = obj->cas_set_mark(unbiased_prototype, mark);
+ if (res_mark == biased_value) {
+ return BIAS_REVOKED;
+ }
+ }
+ mark = res_mark; // Refresh mark with the latest value.
+ }
+ }
+
+ HeuristicsResult heuristics = update_heuristics(obj());
+ if (heuristics == HR_NOT_BIASED) {
+ return NOT_BIASED;
+ } else if (heuristics == HR_SINGLE_REVOKE) {
+ JavaThread *blt = mark->biased_locker();
+ assert(blt != NULL, "invariant");
+ if (blt == THREAD) {
+ // A thread is trying to revoke the bias of an object biased
+ // toward it, again likely due to an identity hash code
+ // computation. We can again avoid a safepoint/handshake in this case
+ // since we are only going to walk our own stack. There are no
+ // races with revocations occurring in other threads because we
+ // reach no safepoints in the revocation path.
+ EventBiasedLockSelfRevocation event;
+ ResourceMark rm;
+ walk_stack_and_revoke(obj(), blt);
+ blt->set_cached_monitor_info(NULL);
+ assert(!obj->mark()->has_bias_pattern(), "invariant");
+ if (event.should_commit()) {
+ post_self_revocation_event(&event, obj->klass());
+ }
+ return BIAS_REVOKED;
+ } else {
+ BiasedLocking::Condition cond = single_revoke_with_handshake(obj, (JavaThread*)THREAD, blt);
+ if (cond != NOT_REVOKED) {
+ return cond;
+ }
+ }
+ } else {
+ assert((heuristics == HR_BULK_REVOKE) ||
+ (heuristics == HR_BULK_REBIAS), "?");
+ EventBiasedLockClassRevocation event;
+ VM_BulkRevokeBias bulk_revoke(&obj, (JavaThread*)THREAD,
+ (heuristics == HR_BULK_REBIAS),
+ attempt_rebias);
+ VMThread::execute(&bulk_revoke);
+ if (event.should_commit()) {
+ post_class_revocation_event(&event, obj->klass(), &bulk_revoke);
+ }
+ return bulk_revoke.status_code();
+ }
}
- VM_RevokeBias revoke(objs, JavaThread::current());
- VMThread::execute(&revoke);
+}
+
+// All objects in objs should be locked by biaser
+void BiasedLocking::revoke(GrowableArray<Handle>* objs, JavaThread *biaser) {
+ bool clean_my_cache = false;
+ for (int i = 0; i < objs->length(); i++) {
+ oop obj = (objs->at(i))();
+ markOop mark = obj->mark();
+ if (mark->has_bias_pattern()) {
+ walk_stack_and_revoke(obj, biaser);
+ clean_my_cache = true;
+ }
+ }
+ if (clean_my_cache) {
+ clean_up_cached_monitor_info(biaser);
+ }
}
void BiasedLocking::revoke_at_safepoint(Handle h_obj) {
assert(SafepointSynchronize::is_at_safepoint(), "must only be called while at safepoint");
oop obj = h_obj();
- HeuristicsResult heuristics = update_heuristics(obj, false);
+ HeuristicsResult heuristics = update_heuristics(obj);
if (heuristics == HR_SINGLE_REVOKE) {
- revoke_bias(obj, false, false, NULL, NULL);
+ JavaThread* biased_locker = NULL;
+ single_revoke_at_safepoint(obj, false, false, NULL, &biased_locker);
+ if (biased_locker) {
+ clean_up_cached_monitor_info(biased_locker);
+ }
} else if ((heuristics == HR_BULK_REBIAS) ||
(heuristics == HR_BULK_REVOKE)) {
bulk_revoke_or_rebias_at_safepoint(obj, (heuristics == HR_BULK_REBIAS), false, NULL);
+ clean_up_cached_monitor_info();
}
- clean_up_cached_monitor_info();
}
@@ -774,9 +918,9 @@
int len = objs->length();
for (int i = 0; i < len; i++) {
oop obj = (objs->at(i))();
- HeuristicsResult heuristics = update_heuristics(obj, false);
+ HeuristicsResult heuristics = update_heuristics(obj);
if (heuristics == HR_SINGLE_REVOKE) {
- revoke_bias(obj, false, false, NULL, NULL);
+ single_revoke_at_safepoint(obj, false, false, NULL, NULL);
} else if ((heuristics == HR_BULK_REBIAS) ||
(heuristics == HR_BULK_REVOKE)) {
bulk_revoke_or_rebias_at_safepoint(obj, (heuristics == HR_BULK_REBIAS), false, NULL);
@@ -862,6 +1006,7 @@
int* BiasedLocking::anonymously_biased_lock_entry_count_addr() { return _counters.anonymously_biased_lock_entry_count_addr(); }
int* BiasedLocking::rebiased_lock_entry_count_addr() { return _counters.rebiased_lock_entry_count_addr(); }
int* BiasedLocking::revoked_lock_entry_count_addr() { return _counters.revoked_lock_entry_count_addr(); }
+int* BiasedLocking::handshakes_count_addr() { return _counters.handshakes_count_addr(); }
int* BiasedLocking::fast_path_entry_count_addr() { return _counters.fast_path_entry_count_addr(); }
int* BiasedLocking::slow_path_entry_count_addr() { return _counters.slow_path_entry_count_addr(); }
@@ -885,6 +1030,7 @@
tty->print_cr("# anonymously biased lock entries: %d", _anonymously_biased_lock_entry_count);
tty->print_cr("# rebiased lock entries: %d", _rebiased_lock_entry_count);
tty->print_cr("# revoked lock entries: %d", _revoked_lock_entry_count);
+ tty->print_cr("# handshakes entries: %d", _handshakes_count);
tty->print_cr("# fast path lock entries: %d", _fast_path_entry_count);
tty->print_cr("# slow path lock entries: %d", slow_path_entry_count());
}
--- a/src/hotspot/share/runtime/biasedLocking.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/runtime/biasedLocking.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -76,17 +76,17 @@
// Revocation of the lock's bias is fairly straightforward. We want to
// restore the object's header and stack-based BasicObjectLocks and
// BasicLocks to the state they would have been in had the object been
-// locked by HotSpot's usual fast locking scheme. To do this, we bring
-// the system to a safepoint and walk the stack of the thread toward
-// which the lock is biased. We find all of the lock records on the
-// stack corresponding to this object, in particular the first /
-// "highest" record. We fill in the highest lock record with the
-// object's displaced header (which is a well-known value given that
-// we don't maintain an identity hash nor age bits for the object
-// while it's in the biased state) and all other lock records with 0,
-// the value for recursive locks. When the safepoint is released, the
-// formerly-biased thread and all other threads revert back to
-// HotSpot's CAS-based locking.
+// locked by HotSpot's usual fast locking scheme. To do this, we execute
+// a handshake with the JavaThread that biased the lock. Inside the
+// handshake we walk the biaser stack searching for all of the lock
+// records corresponding to this object, in particular the first / "highest"
+// record. We fill in the highest lock record with the object's displaced
+// header (which is a well-known value given that we don't maintain an
+// identity hash nor age bits for the object while it's in the biased
+// state) and all other lock records with 0, the value for recursive locks.
+// Alternatively, we can revoke the bias of an object inside a safepoint
+// if we are already in one and we detect that we need to perform a
+// revocation.
//
// This scheme can not handle transfers of biases of single objects
// from thread to thread efficiently, but it can handle bulk transfers
@@ -115,6 +115,7 @@
int _anonymously_biased_lock_entry_count;
int _rebiased_lock_entry_count;
int _revoked_lock_entry_count;
+ int _handshakes_count;
int _fast_path_entry_count;
int _slow_path_entry_count;
@@ -125,6 +126,7 @@
_anonymously_biased_lock_entry_count(0),
_rebiased_lock_entry_count(0),
_revoked_lock_entry_count(0),
+ _handshakes_count(0),
_fast_path_entry_count(0),
_slow_path_entry_count(0) {}
@@ -135,6 +137,7 @@
int* anonymously_biased_lock_entry_count_addr() { return &_anonymously_biased_lock_entry_count; }
int* rebiased_lock_entry_count_addr() { return &_rebiased_lock_entry_count; }
int* revoked_lock_entry_count_addr() { return &_revoked_lock_entry_count; }
+ int* handshakes_count_addr() { return &_handshakes_count; }
int* fast_path_entry_count_addr() { return &_fast_path_entry_count; }
int* slow_path_entry_count_addr() { return &_slow_path_entry_count; }
@@ -146,6 +149,9 @@
class BiasedLocking : AllStatic {
+friend class VM_BulkRevokeBias;
+friend class RevokeOneBias;
+
private:
static BiasedLockingCounters _counters;
@@ -155,15 +161,24 @@
static int* anonymously_biased_lock_entry_count_addr();
static int* rebiased_lock_entry_count_addr();
static int* revoked_lock_entry_count_addr();
+ static int* handshakes_count_addr();
static int* fast_path_entry_count_addr();
static int* slow_path_entry_count_addr();
enum Condition {
NOT_BIASED = 1,
BIAS_REVOKED = 2,
- BIAS_REVOKED_AND_REBIASED = 3
+ BIAS_REVOKED_AND_REBIASED = 3,
+ NOT_REVOKED = 4
};
+private:
+ static Condition single_revoke_at_safepoint(oop obj, bool allow_rebias, bool is_bulk, JavaThread* requester, JavaThread** biaser);
+ static Condition bulk_revoke_or_rebias_at_safepoint(oop o, bool bulk_rebias, bool attempt_rebias, JavaThread* requester);
+ static Condition single_revoke_with_handshake(Handle obj, JavaThread *requester, JavaThread *biaser);
+ static void walk_stack_and_revoke(oop obj, JavaThread* biased_locker);
+
+public:
// This initialization routine should only be called once and
// schedules a PeriodicTask to turn on biased locking a few seconds
// into the VM run to avoid startup time regressions
@@ -178,7 +193,7 @@
// These do not allow rebiasing; they are used by deoptimization to
// ensure that monitors on the stack can be migrated
- static void revoke(GrowableArray<Handle>* objs);
+ static void revoke(GrowableArray<Handle>* objs, JavaThread *biaser);
static void revoke_at_safepoint(Handle obj);
static void revoke_at_safepoint(GrowableArray<Handle>* objs);
--- a/src/hotspot/share/runtime/deoptimization.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/runtime/deoptimization.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1432,7 +1432,7 @@
if (SafepointSynchronize::is_at_safepoint()) {
BiasedLocking::revoke_at_safepoint(objects_to_revoke);
} else {
- BiasedLocking::revoke(objects_to_revoke);
+ BiasedLocking::revoke(objects_to_revoke, thread);
}
}
--- a/src/hotspot/share/runtime/handshake.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/runtime/handshake.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -46,11 +46,12 @@
class HandshakeThreadsOperation: public HandshakeOperation {
static Semaphore _done;
ThreadClosure* _thread_cl;
-
+ bool _executed;
public:
- HandshakeThreadsOperation(ThreadClosure* cl) : _thread_cl(cl) {}
+ HandshakeThreadsOperation(ThreadClosure* cl) : _thread_cl(cl), _executed(false) {}
void do_handshake(JavaThread* thread);
bool thread_has_completed() { return _done.trywait(); }
+ bool executed() const { return _executed; }
#ifdef ASSERT
void check_state() {
@@ -109,24 +110,23 @@
class VM_HandshakeOneThread: public VM_Handshake {
JavaThread* _target;
- bool _thread_alive;
public:
VM_HandshakeOneThread(HandshakeThreadsOperation* op, JavaThread* target) :
- VM_Handshake(op), _target(target), _thread_alive(false) {}
+ VM_Handshake(op), _target(target) {}
void doit() {
DEBUG_ONLY(_op->check_state();)
- TraceTime timer("Performing single-target operation (vmoperation doit)", TRACETIME_LOG(Info, handshake));
+ TraceTime timer("Finished executing single-target operation (VM_HandshakeOneThread::doit)", TRACETIME_LOG(Info, handshake));
ThreadsListHandle tlh;
if (tlh.includes(_target)) {
set_handshake(_target);
- _thread_alive = true;
} else {
+ log_trace(handshake)("JavaThread " INTPTR_FORMAT " is not alive", p2i(_target));
return;
}
- log_trace(handshake)("Thread signaled, begin processing by VMThtread");
+ log_trace(handshake)("JavaThread " INTPTR_FORMAT " signaled, begin attempt to process by VMThtread", p2i(_target));
jlong start_time = os::elapsed_counter();
do {
if (handshake_has_timed_out(start_time)) {
@@ -146,7 +146,7 @@
VMOp_Type type() const { return VMOp_HandshakeOneThread; }
- bool thread_alive() const { return _thread_alive; }
+ bool executed() const { return _op->executed(); }
};
class VM_HandshakeAllThreads: public VM_Handshake {
@@ -155,7 +155,7 @@
void doit() {
DEBUG_ONLY(_op->check_state();)
- TraceTime timer("Performing operation (vmoperation doit)", TRACETIME_LOG(Info, handshake));
+ TraceTime timer("Finished executing multi-target operation (VM_HandshakeAllThreads::doit)", TRACETIME_LOG(Info, handshake));
JavaThreadIteratorWithHandle jtiwh;
int number_of_threads_issued = 0;
@@ -211,18 +211,19 @@
ThreadClosure* _thread_cl;
Thread* _target_thread;
bool _all_threads;
- bool _thread_alive;
+ bool _executed;
public:
VM_HandshakeFallbackOperation(ThreadClosure* cl) :
- _thread_cl(cl), _target_thread(NULL), _all_threads(true), _thread_alive(true) {}
+ _thread_cl(cl), _target_thread(NULL), _all_threads(true), _executed(false) {}
VM_HandshakeFallbackOperation(ThreadClosure* cl, Thread* target) :
- _thread_cl(cl), _target_thread(target), _all_threads(false), _thread_alive(false) {}
+ _thread_cl(cl), _target_thread(target), _all_threads(false), _executed(false) {}
void doit() {
+ log_trace(handshake)("VMThread executing VM_HandshakeFallbackOperation");
for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
if (_all_threads || t == _target_thread) {
if (t == _target_thread) {
- _thread_alive = true;
+ _executed = true;
}
_thread_cl->do_thread(t);
}
@@ -230,7 +231,7 @@
}
VMOp_Type type() const { return VMOp_HandshakeFallback; }
- bool thread_alive() const { return _thread_alive; }
+ bool executed() const { return _executed; }
};
void HandshakeThreadsOperation::do_handshake(JavaThread* thread) {
@@ -242,6 +243,7 @@
// Only actually execute the operation for non terminated threads.
if (!thread->is_terminated()) {
_thread_cl->do_thread(thread);
+ _executed = true;
}
// Use the semaphore to inform the VM thread that we have completed the operation
@@ -264,11 +266,11 @@
HandshakeThreadsOperation cto(thread_cl);
VM_HandshakeOneThread handshake(&cto, target);
VMThread::execute(&handshake);
- return handshake.thread_alive();
+ return handshake.executed();
} else {
VM_HandshakeFallbackOperation op(thread_cl, target);
VMThread::execute(&op);
- return op.thread_alive();
+ return op.executed();
}
}
@@ -369,6 +371,7 @@
// getting caught by the semaphore.
if (vmthread_can_process_handshake(target)) {
guarantee(!_semaphore.trywait(), "we should already own the semaphore");
+ log_trace(handshake)("Processing handshake by VMThtread");
_operation->do_handshake(target);
// Disarm after VM thread have executed the operation.
clear_handshake(target);
--- a/src/hotspot/share/runtime/vmOperations.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/runtime/vmOperations.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -77,7 +77,6 @@
template(HandshakeAllThreads) \
template(HandshakeFallback) \
template(EnableBiasedLocking) \
- template(RevokeBias) \
template(BulkRevokeBias) \
template(PopulateDumpSharedSpace) \
template(JNIFunctionTableCopier) \
--- a/src/hotspot/share/runtime/vmStructs.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/runtime/vmStructs.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -840,7 +840,6 @@
/* CI */ \
/************/ \
\
- nonstatic_field(ciEnv, _system_dictionary_modification_counter, int) \
nonstatic_field(ciEnv, _compiler_data, void*) \
nonstatic_field(ciEnv, _failure_reason, const char*) \
nonstatic_field(ciEnv, _factory, ciObjectFactory*) \
--- a/src/hotspot/share/services/memTracker.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/services/memTracker.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -175,6 +175,22 @@
return true;
}
+
+static volatile bool g_final_report_did_run = false;
+void MemTracker::final_report(outputStream* output) {
+ // This function is called during both error reporting and normal VM exit.
+ // However, it should only ever run once. E.g. if the VM crashes after
+ // printing the final report during normal VM exit, it should not print
+ // the final report again. In addition, it should be guarded from
+ // recursive calls in case NMT reporting itself crashes.
+ if (Atomic::cmpxchg(true, &g_final_report_did_run, false) == false) {
+ NMT_TrackingLevel level = tracking_level();
+ if (level >= NMT_summary) {
+ report(level == NMT_summary, output);
+ }
+ }
+}
+
void MemTracker::report(bool summary_only, outputStream* output) {
assert(output != NULL, "No output stream");
MemBaseline baseline;
@@ -186,12 +202,9 @@
MemDetailReporter rpt(baseline, output);
rpt.report();
output->print("Metaspace:");
- // Metadata reporting requires a safepoint, so avoid it if VM is not in good state.
- assert(!VMError::fatal_error_in_progress(), "Do not report metadata in error report");
- VM_PrintMetadata vmop(output, K,
- MetaspaceUtils::rf_show_loaders |
- MetaspaceUtils::rf_break_down_by_spacetype);
- VMThread::execute(&vmop);
+ // The basic metaspace report avoids any locking and should be safe to
+ // be called at any time.
+ MetaspaceUtils::print_basic_report(output, K);
}
}
}
--- a/src/hotspot/share/services/memTracker.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/services/memTracker.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -271,13 +271,7 @@
}
}
- static void final_report(outputStream* output) {
- NMT_TrackingLevel level = tracking_level();
- if (level >= NMT_summary) {
- report(level == NMT_summary, output);
- }
- }
-
+ static void final_report(outputStream* output);
// Stored baseline
static inline MemBaseline& get_baseline() {
--- a/src/hotspot/share/utilities/debug.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/utilities/debug.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -734,6 +734,10 @@
}
}
+void disarm_assert_poison() {
+ g_assert_poison = &g_dummy;
+}
+
static void store_context(const void* context) {
memcpy(&g_stored_assertion_context, context, sizeof(ucontext_t));
#if defined(__linux) && defined(PPC64)
@@ -746,7 +750,14 @@
bool handle_assert_poison_fault(const void* ucVoid, const void* faulting_address) {
if (faulting_address == g_assert_poison) {
// Disarm poison page.
- os::protect_memory((char*)g_assert_poison, os::vm_page_size(), os::MEM_PROT_RWX);
+ if (os::protect_memory((char*)g_assert_poison, os::vm_page_size(), os::MEM_PROT_RWX) == false) {
+#ifdef ASSERT
+ fprintf(stderr, "Assertion poison page cannot be unprotected - mprotect failed with %d (%s)",
+ errno, os::strerror(errno));
+ fflush(stderr);
+#endif
+ return false; // unprotecting memory may fail in OOM situations, as surprising as this sounds.
+ }
// Store Context away.
if (ucVoid) {
const intx my_tid = os::current_thread_id();
--- a/src/hotspot/share/utilities/debug.hpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/utilities/debug.hpp Thu Jul 11 15:40:29 2019 +0530
@@ -37,6 +37,7 @@
extern char* g_assert_poison;
#define TOUCH_ASSERT_POISON (*g_assert_poison) = 'X';
void initialize_assert_poison();
+void disarm_assert_poison();
bool handle_assert_poison_fault(const void* ucVoid, const void* faulting_address);
#else
#define TOUCH_ASSERT_POISON
--- a/src/hotspot/share/utilities/vmError.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/hotspot/share/utilities/vmError.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -1327,6 +1327,12 @@
// File descriptor to the error log file.
static int fd_log = -1;
+#ifdef CAN_SHOW_REGISTERS_ON_ASSERT
+ // Disarm assertion poison page, since from this point on we do not need this mechanism anymore and it may
+ // cause problems in error handling during native OOM, see JDK-8227275.
+ disarm_assert_poison();
+#endif
+
// Use local fdStream objects only. Do not use global instances whose initialization
// relies on dynamic initialization (see JDK-8214975). Do not rely on these instances
// to carry over into recursions or invocations from other threads.
@@ -1523,6 +1529,11 @@
log.set_fd(-1);
}
+ if (PrintNMTStatistics) {
+ fdStream fds(fd_out);
+ MemTracker::final_report(&fds);
+ }
+
static bool skip_replay = ReplayCompiles; // Do not overwrite file during replay
if (DumpReplayDataOnError && _thread && _thread->is_Compiler_thread() && !skip_replay) {
skip_replay = true;
--- a/src/java.base/share/classes/sun/launcher/resources/launcher_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.base/share/classes/sun/launcher/resources/launcher_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
# 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,8 +35,9 @@
\u6307\u5B9A\u3055\u308C\u305F\u6700\u3082\u9069\u5207\u306A\u30B9\u30B1\u30FC\u30EA\u30F3\u30B0\u6E08\u30A4\u30E1\u30FC\u30B8\u304C\u9078\u629E\u3055\u308C\u307E\u3059\n (\u81EA\u52D5\u7684)\u3002\n \u8A73\u7D30\u306F\u3001SplashScreen API\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\n @argument\u30D5\u30A1\u30A4\u30EB\n \u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u542B\u30801\u3064\u4EE5\u4E0A\u306E\u5F15\u6570\u30D5\u30A1\u30A4\u30EB\n -disable-@files\n \u3055\u3089\u306A\u308B\u5F15\u6570\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\n --enable-preview\n \u30AF\u30E9\u30B9\u3092\u3053\u306E\u30EA\u30EA\u30FC\u30B9\u306E\u30D7\u30EC\u30D3\u30E5\u30FC\u6A5F\u80FD\u306B\u4F9D\u5B58\u3055\u305B\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\n\u9577\u3044\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u5F15\u6570\u3092\u6307\u5B9A\u3059\u308B\u5834\u5408\u3001--<name>=<value>\u307E\u305F\u306F\n--<name> <value>\u3092\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002\n
# Translators please note do not translate the options themselves
-java.launcher.X.usage=\n -Xbatch \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7121\u52B9\u306B\u3059\u308B\n -Xbootclasspath/a:<{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304A\u3088\u3073zip/jar\u30D5\u30A1\u30A4\u30EB>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u6700\u5F8C\u306B\u8FFD\u52A0\u3059\u308B\n -Xcheck:jni JNI\u95A2\u6570\u306B\u5BFE\u3059\u308B\u8FFD\u52A0\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3059\u308B\n -Xcomp \u521D\u56DE\u547C\u51FA\u3057\u6642\u306B\u30E1\u30BD\u30C3\u30C9\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u5F37\u5236\u3059\u308B\n -Xdebug \u4E0B\u4F4D\u4E92\u63DB\u6027\u306E\u305F\u3081\u306B\u63D0\u4F9B\n -Xdiag \u8FFD\u52A0\u306E\u8A3A\u65AD\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3059\u308B\n -Xfuture \u5C06\u6765\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u898B\u8D8A\u3057\u3066\u3001\u6700\u3082\u53B3\u5BC6\u306A\u30C1\u30A7\u30C3\u30AF\u3092\u6709\u52B9\u306B\u3059\u308B\n -Xint \u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u30FB\u30E2\u30FC\u30C9\u306E\u5B9F\u884C\u306E\u307F\n -Xinternalversion\n -version\u30AA\u30D7\u30B7\u30E7\u30F3\u3088\u308A\u8A73\u7D30\u306AJVM\u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\n \u8868\u793A\u3059\u308B\n -Xloggc:<file> \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u4ED8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u306BGC\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30ED\u30B0\u3092\u8A18\u9332\u3059\u308B\n -Xmixed \u6DF7\u5408\u30E2\u30FC\u30C9\u306E\u5B9F\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xmn<size> \u82E5\u3044\u4E16\u4EE3(\u30CA\u30FC\u30B5\u30EA)\u306E\u30D2\u30FC\u30D7\u306E\u521D\u671F\u304A\u3088\u3073\u6700\u5927\u30B5\u30A4\u30BA(\u30D0\u30A4\u30C8\u5358\u4F4D)\n \u3092\u8A2D\u5B9A\u3059\u308B\n -Xms<size> Java\u306E\u521D\u671F\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xmx<size> Java\u306E\u6700\u5927\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xnoclassgc \u30AF\u30E9\u30B9\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -Xrs Java/VM\u306B\u3088\u308BOS\u30B7\u30B0\u30CA\u30EB\u306E\u4F7F\u7528\u3092\u524A\u6E1B\u3059\u308B(\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167)\n -Xshare:auto \u53EF\u80FD\u3067\u3042\u308C\u3070\u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xshare:off \u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u3088\u3046\u3068\u3057\u306A\u3044\n -Xshare:on \u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u306E\u4F7F\u7528\u3092\u5FC5\u9808\u306B\u3057\u3001\u3067\u304D\u306A\u3051\u308C\u3070\u5931\u6557\u3059\u308B\u3002\n -XshowSettings \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:all\n \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:locale\n \u3059\u3079\u3066\u306E\u30ED\u30B1\u30FC\u30EB\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:properties\n \u3059\u3079\u3066\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:vm\n \u3059\u3079\u3066\u306EVM\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:system\n (Linux\u306E\u307F) \
-\u30DB\u30B9\u30C8\u30FB\u30B7\u30B9\u30C6\u30E0\u307E\u305F\u306F\u30B3\u30F3\u30C6\u30CA\u306E\n \u69CB\u6210\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -Xss<size> Java\u306E\u30B9\u30EC\u30C3\u30C9\u30FB\u30B9\u30BF\u30C3\u30AF\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xverify \u30D0\u30A4\u30C8\u30B3\u30FC\u30C9\u691C\u8A3C\u6A5F\u80FD\u306E\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3059\u308B\n --add-reads <module>=<target-module>(,<target-module>)*\n \u30E2\u30B8\u30E5\u30FC\u30EB\u5BA3\u8A00\u306B\u95A2\u4FC2\u306A\u304F\u3001<module>\u3092\u66F4\u65B0\u3057\u3066<target-module>\n \u3092\u8AAD\u307F\u53D6\u308B\u3002 \n <target-module>\u3092ALL-UNNAMED\u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001\u3059\u3079\u3066\u306E\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\n \u8AAD\u307F\u53D6\u308C\u307E\u3059\u3002\n --add-exports <module>/<package>=<target-module>(,<target-module>)*\n \u30E2\u30B8\u30E5\u30FC\u30EB\u5BA3\u8A00\u306B\u95A2\u4FC2\u306A\u304F\u3001<module>\u3092\u66F4\u65B0\u3057\u3066<package>\u3092<target-module>\u306B\n \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3059\u308B\u3002\n <target-module>\u3092ALL-UNNAMED\u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001\u3059\u3079\u3066\u306E\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u306B\n \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3067\u304D\u307E\u3059\u3002\n --add-opens <module>/<package>=<target-module>(,<target-module>)*\n \u30E2\u30B8\u30E5\u30FC\u30EB\u5BA3\u8A00\u306B\u95A2\u4FC2\u306A\u304F\u3001<module>\u3092\u66F4\u65B0\u3057\u3066\n <package>\u3092<target-module>\u306B\u958B\u304F\u3002\n --illegal-access=<value>\n \u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\u30B3\u30FC\u30C9\u306B\u3088\u308B\u3001\u540D\u524D\u306E\u3042\u308B\u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\n \u30BF\u30A4\u30D7\u306E\u30E1\u30F3\u30D0\u30FC\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u307E\u305F\u306F\u62D2\u5426\u3059\u308B\u3002\n <value>\u306F"deny"\u3001"permit"\u3001"warn"\u3001"debug"\u306E\u3044\u305A\u308C\u304B\u3067\u3059\n \u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u307E\u3059\u3002\n --limit-modules <module name>[,<module name>...]\n \u53C2\u7167\u53EF\u80FD\u306A\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u9818\u57DF\u3092\u5236\u9650\u3059\u308B\n --patch-module <module>=<file>({0}<file>)*\n JAR\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30EA\u30BD\u30FC\u30B9\u3067\n \u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u307E\u305F\u306F\u62E1\u5F35\u3059\u308B\u3002\n --disable-@files \u3055\u3089\u306A\u308B\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u3092\u7121\u52B9\u306B\u3059\u308B\n --source <version>\n \u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u30FB\u30E2\u30FC\u30C9\u3067\u30BD\u30FC\u30B9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8A2D\u5B9A\u3059\u308B\u3002\n\n\u3053\u308C\u3089\u306F\u8FFD\u52A0\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3042\u308A\u4E88\u544A\u306A\u3057\u306B\u5909\u66F4\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\n
+java.launcher.X.usage=\n -Xbatch \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u30FB\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\n -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u6700\u5F8C\u306B\u8FFD\u52A0\u3057\u307E\u3059\n -Xcheck:jni JNI\u95A2\u6570\u306B\u5BFE\u3059\u308B\u8FFD\u52A0\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3057\u307E\u3059\n -Xcomp \u521D\u56DE\u547C\u51FA\u3057\u6642\u306B\u30E1\u30BD\u30C3\u30C9\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u5F37\u5236\u3057\u307E\u3059\n -Xdebug \u4E0B\u4F4D\u4E92\u63DB\u6027\u306E\u305F\u3081\u306B\u7528\u610F\u3055\u308C\u3066\u3044\u307E\u3059\n -Xdiag \u8FFD\u52A0\u306E\u8A3A\u65AD\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3057\u307E\u3059\n -Xfuture \u5C06\u6765\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u898B\u8D8A\u3057\u3066\u3001\u6700\u3082\u53B3\u5BC6\u306A\u30C1\u30A7\u30C3\u30AF\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\n \u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u975E\u63A8\u5968\u3067\u3042\u308A\u3001\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u308B\n \u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n -Xint \u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u30FB\u30E2\u30FC\u30C9\u306E\u5B9F\u884C\u306E\u307F\n -Xinternalversion\n -version\u30AA\u30D7\u30B7\u30E7\u30F3\u3088\u308A\u8A73\u7D30\u306AJVM\u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\n \u8868\u793A\u3057\u307E\u3059\n -Xlog:<opts> Java Virtual Machine (JVM)\u7D71\u5408\u30ED\u30AE\u30F3\u30B0\u30FB\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3067\u306E\n \u30ED\u30AE\u30F3\u30B0\u3092\u69CB\u6210\u307E\u305F\u306F\u6709\u52B9\u5316\u3057\u307E\u3059\u3002\u8A73\u7D30\u306F\u3001-Xlog:help\u3092\n \u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n -Xloggc:<file> \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u4ED8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u306BGC\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30ED\u30B0\u3092\u8A18\u9332\u3057\u307E\u3059\n -Xmixed \u6DF7\u5408\u30E2\u30FC\u30C9\u306E\u5B9F\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xmn<size> \u82E5\u3044\u4E16\u4EE3(\u30CA\u30FC\u30B5\u30EA)\u306E\u30D2\u30FC\u30D7\u306E\u521D\u671F\u30B5\u30A4\u30BA\u304A\u3088\u3073\u6700\u5927\u30B5\u30A4\u30BA\n (\u30D0\u30A4\u30C8\u5358\u4F4D)\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n -Xms<size> Java\u306E\u521D\u671F\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n -Xmx<size> Java\u306E\u6700\u5927\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n -Xnoclassgc \u30AF\u30E9\u30B9\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\n -Xrs Java/VM\u306B\u3088\u308BOS\u30B7\u30B0\u30CA\u30EB\u306E\u4F7F\u7528\u3092\u524A\u6E1B\u3057\u307E\u3059(\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167)\n -Xshare:auto \u53EF\u80FD\u3067\u3042\u308C\u3070\u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xshare:off \u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u306E\u4F7F\u7528\u3092\u8A66\u307F\u307E\u305B\u3093\n -Xshare:on \u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u306E\u4F7F\u7528\u3092\u5FC5\u9808\u306B\u3057\u3001\u3067\u304D\u306A\u3051\u308C\u3070\u5931\u6557\u3057\u307E\u3059\u3002\n -XshowSettings \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3057\u307E\u3059\n -XshowSettings:all\n \
+ \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3057\u307E\u3059\n -XshowSettings:locale\n \u3059\u3079\u3066\u306E\u30ED\u30B1\u30FC\u30EB\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3057\u307E\u3059\n -XshowSettings:properties\n \u3059\u3079\u3066\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3057\u307E\u3059\n -XshowSettings:vm\n \u3059\u3079\u3066\u306EVM\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3057\u307E\u3059\n -XshowSettings:system\n (Linux\u306E\u307F)\u30DB\u30B9\u30C8\u30FB\u30B7\u30B9\u30C6\u30E0\u307E\u305F\u306F\u30B3\u30F3\u30C6\u30CA\u3092\u8868\u793A\u3057\u307E\u3059\n \u69CB\u6210\u3057\u3066\u7D9A\u884C\u3057\u307E\u3059\n -Xss<size> java\u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n -Xverify \u30D0\u30A4\u30C8\u30B3\u30FC\u30C9\u30FB\u30D9\u30EA\u30D5\u30A1\u30A4\u30A2\u306E\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n \u30AA\u30D7\u30B7\u30E7\u30F3-Xverify:none\u306F\u975E\u63A8\u5968\u306B\u306A\u308A\u3001\n \u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n --add-reads <module>=<target-module>(,<target-module>)*\n \u30E2\u30B8\u30E5\u30FC\u30EB\u5BA3\u8A00\u306B\u95A2\u4FC2\u306A\u304F\u3001<module>\u3092\u66F4\u65B0\u3057\u3066<target-module>\u3092\n \u8AAD\u307F\u53D6\u308A\u307E\u3059\u3002 \n <target-module>\u3092ALL-UNNAMED\u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001\u3059\u3079\u3066\u306E\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\n \u8AAD\u307F\u53D6\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\n --add-exports <module>/<package>=<target-module>(,<target-module>)*\n \u30E2\u30B8\u30E5\u30FC\u30EB\u5BA3\u8A00\u306B\u95A2\u4FC2\u306A\u304F\u3001<module>\u3092\u66F4\u65B0\u3057\u3066<package>\u3092<target-module>\u306B\n \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\n <target-module>\u3092ALL-UNNAMED\u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001\u3059\u3079\u3066\u306E\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u306B\n \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3067\u304D\u307E\u3059\u3002\n --add-opens <module>/<package>=<target-module>(,<target-module>)*\n \u30E2\u30B8\u30E5\u30FC\u30EB\u5BA3\u8A00\u306B\u95A2\u4FC2\u306A\u304F\u3001<module>\u3092\u66F4\u65B0\u3057\u3066<package>\u3092\n <target-module>\u306B\u958B\u304D\u307E\u3059\u3002\n --illegal-access=<value>\n \u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\u30B3\u30FC\u30C9\u306B\u3088\u308B\u3001\u540D\u524D\u306E\u3042\u308B\u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\u30BF\u30A4\u30D7\u306E\u30E1\u30F3\u30D0\u30FC\u3078\u306E\u4E0D\u6B63\u30A2\u30AF\u30BB\u30B9\u3092\n \u8A31\u53EF\u307E\u305F\u306F\u62D2\u5426\u3057\u307E\u3059\u3002\n <value>\u306F"deny"\u3001"permit"\u3001"warn"\u307E\u305F\u306F"debug"\u306E\u3044\u305A\u308C\u304B\u3067\u3059\n \u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u3001\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u308B\u4E88\u5B9A\u3067\u3059\u3002\n --limit-modules <module name>[,<module name>...]\n \u53C2\u7167\u53EF\u80FD\u306A\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u9818\u57DF\u3092\u5236\u9650\u3057\u307E\u3059\n --patch-module <module>=<file>({0}<file>)*\n \
+JAR\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30EA\u30BD\u30FC\u30B9\u3067\n \u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u307E\u305F\u306F\u62E1\u5F35\u3057\u307E\u3059\u3002\n --disable-@files\u306F\u3001\u3055\u3089\u306A\u308B\u5F15\u6570\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\n --source <version>\n \u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u30FB\u30E2\u30FC\u30C9\u3067\u30BD\u30FC\u30B9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002\n\n\u3053\u306E\u8FFD\u52A0\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u4E88\u544A\u306A\u3057\u306B\u5909\u66F4\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\n
# Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\n\u6B21\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306FMac OS X\u56FA\u6709\u3067\u3059:\n -XstartOnFirstThread\n main()\u30E1\u30BD\u30C3\u30C9\u3092\u6700\u521D(AppKit)\u306E\u30B9\u30EC\u30C3\u30C9\u3067\u5B9F\u884C\u3059\u308B\n -Xdock:name=<application name>\n Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u540D\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n -Xdock:icon=<path to icon file>\n Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30A4\u30B3\u30F3\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n\n
@@ -58,4 +59,4 @@
java.launcher.module.error2=\u30A8\u30E9\u30FC: \u30E2\u30B8\u30E5\u30FC\u30EB{1}\u306B\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u3089\u306A\u304B\u3063\u305F\u304B\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
java.launcher.module.error3=\u30A8\u30E9\u30FC: \u30E2\u30B8\u30E5\u30FC\u30EB{1}\u306E\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9{0}\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093\n\t{2}
java.launcher.module.error4={0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
-java.launcher.module.error5=\u30A8\u30E9\u30FC: \u30E2\u30B8\u30E5\u30FC\u30EB{1}\u306E\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9{0}\u3092\u521D\u671F\u5316\u3067\u304D\u307E\u305B\u3093\n\u539F\u56E0: {1}: {2}
+java.launcher.module.error5=\u30A8\u30E9\u30FC: \u30E2\u30B8\u30E5\u30FC\u30EB{1}\u306E\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9{0}\u3092\u521D\u671F\u5316\u3067\u304D\u307E\u305B\u3093\n\u539F\u56E0: {2}: {3}
--- a/src/java.base/share/classes/sun/launcher/resources/launcher_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.base/share/classes/sun/launcher/resources/launcher_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
# 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,8 +34,8 @@
| -enablesystemassertions\n \u542F\u7528\u7CFB\u7EDF\u65AD\u8A00\n -dsa | -disablesystemassertions\n \u7981\u7528\u7CFB\u7EDF\u65AD\u8A00\n -agentlib:<\u5E93\u540D>[=<\u9009\u9879>]\n \u52A0\u8F7D\u672C\u673A\u4EE3\u7406\u5E93 <\u5E93\u540D>, \u4F8B\u5982 -agentlib:jdwp\n \u53E6\u8BF7\u53C2\u9605 -agentlib:jdwp=help\n -agentpath:<\u8DEF\u5F84\u540D>[=<\u9009\u9879>]\n \u6309\u5B8C\u6574\u8DEF\u5F84\u540D\u52A0\u8F7D\u672C\u673A\u4EE3\u7406\u5E93\n -javaagent:<jar \u8DEF\u5F84>[=<\u9009\u9879>]\n \u52A0\u8F7D Java \u7F16\u7A0B\u8BED\u8A00\u4EE3\u7406, \u8BF7\u53C2\u9605 java.lang.instrument\n -splash:<\u56FE\u50CF\u8DEF\u5F84>\n \u4F7F\u7528\u6307\u5B9A\u7684\u56FE\u50CF\u663E\u793A\u542F\u52A8\u5C4F\u5E55\n \u81EA\u52A8\u652F\u6301\u548C\u4F7F\u7528 HiDPI \u7F29\u653E\u56FE\u50CF\n (\u5982\u679C\u53EF\u7528)\u3002\u5E94\u59CB\u7EC8\u5C06\u672A\u7F29\u653E\u7684\u56FE\u50CF\u6587\u4EF6\u540D (\u4F8B\u5982, image.ext)\n \u4F5C\u4E3A\u53C2\u6570\u4F20\u9012\u7ED9 -splash \u9009\u9879\u3002\n \u5C06\u81EA\u52A8\u9009\u53D6\u63D0\u4F9B\u7684\u6700\u5408\u9002\u7684\u7F29\u653E\n \u56FE\u50CF\u3002\n \u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u53C2\u9605 SplashScreen API \u6587\u6863\n @argument \u6587\u4EF6\n \u4E00\u4E2A\u6216\u591A\u4E2A\u5305\u542B\u9009\u9879\u7684\u53C2\u6570\u6587\u4EF6\n -disable-@files\n \u963B\u6B62\u8FDB\u4E00\u6B65\u6269\u5C55\u53C2\u6570\u6587\u4EF6\n --enable-preview\n \u5141\u8BB8\u7C7B\u4F9D\u8D56\u4E8E\u6B64\u53D1\u884C\u7248\u7684\u9884\u89C8\u529F\u80FD\n\u8981\u4E3A\u957F\u9009\u9879\u6307\u5B9A\u53C2\u6570, \u53EF\u4EE5\u4F7F\u7528 --<\u540D\u79F0>=<\u503C> \u6216\n--<\u540D\u79F0> <\u503C>\u3002\n
# Translators please note do not translate the options themselves
-java.launcher.X.usage=\n -Xbatch \u7981\u7528\u540E\u53F0\u7F16\u8BD1\n -Xbootclasspath/a:<\u4EE5 {0} \u5206\u9694\u7684\u76EE\u5F55\u548C zip/jar \u6587\u4EF6>\n \u9644\u52A0\u5728\u5F15\u5BFC\u7C7B\u8DEF\u5F84\u672B\u5C3E\n -Xcheck:jni \u5BF9 JNI \u51FD\u6570\u6267\u884C\u5176\u4ED6\u68C0\u67E5\n -Xcomp \u5728\u9996\u6B21\u8C03\u7528\u65F6\u5F3A\u5236\u7F16\u8BD1\u65B9\u6CD5\n -Xdebug \u4E3A\u5B9E\u73B0\u5411\u540E\u517C\u5BB9\u800C\u63D0\u4F9B\n -Xdiag \u663E\u793A\u9644\u52A0\u8BCA\u65AD\u6D88\u606F\n -Xfuture \u542F\u7528\u6700\u4E25\u683C\u7684\u68C0\u67E5\uFF0C\u9884\u671F\u5C06\u6765\u7684\u9ED8\u8BA4\u503C\n -Xint \u4EC5\u89E3\u91CA\u6A21\u5F0F\u6267\u884C\n -Xinternalversion\n \u663E\u793A\u6BD4 -version \u9009\u9879\u66F4\u8BE6\u7EC6\u7684 JVM\n \u7248\u672C\u4FE1\u606F\n -Xloggc:<\u6587\u4EF6> \u5C06 GC \u72B6\u6001\u8BB0\u5F55\u5728\u6587\u4EF6\u4E2D\uFF08\u5E26\u65F6\u95F4\u6233\uFF09\n -Xmixed \u6DF7\u5408\u6A21\u5F0F\u6267\u884C\uFF08\u9ED8\u8BA4\u503C\uFF09\n -Xmn<\u5927\u5C0F> \u4E3A\u5E74\u8F7B\u4EE3\uFF08\u65B0\u751F\u4EE3\uFF09\u8BBE\u7F6E\u521D\u59CB\u548C\u6700\u5927\u5806\u5927\u5C0F\n \uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\n -Xms<\u5927\u5C0F> \u8BBE\u7F6E\u521D\u59CB Java \u5806\u5927\u5C0F\n -Xmx<\u5927\u5C0F> \u8BBE\u7F6E\u6700\u5927 Java \u5806\u5927\u5C0F\n -Xnoclassgc \u7981\u7528\u7C7B\u5783\u573E\u6536\u96C6\n -Xrs \u51CF\u5C11 Java/VM \u5BF9\u64CD\u4F5C\u7CFB\u7EDF\u4FE1\u53F7\u7684\u4F7F\u7528\uFF08\u8BF7\u53C2\u89C1\u6587\u6863\uFF09\n -Xshare:auto \u5728\u53EF\u80FD\u7684\u60C5\u51B5\u4E0B\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\uFF08\u9ED8\u8BA4\u503C\uFF09\n -Xshare:off \u4E0D\u5C1D\u8BD5\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\n -Xshare:on \u8981\u6C42\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\uFF0C\u5426\u5219\u5C06\u5931\u8D25\u3002\n -XshowSettings \u663E\u793A\u6240\u6709\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:all\n \u663E\u793A\u6240\u6709\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:locale\n \u663E\u793A\u6240\u6709\u4E0E\u533A\u57DF\u8BBE\u7F6E\u76F8\u5173\u7684\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:properties\n \u663E\u793A\u6240\u6709\u5C5E\u6027\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:vm\n \u663E\u793A\u6240\u6709\u4E0E vm \u76F8\u5173\u7684\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:system\n \uFF08\u4EC5 Linux\uFF09\u663E\u793A\u4E3B\u673A\u7CFB\u7EDF\u6216\u5BB9\u5668\n \u914D\u7F6E\u5E76\u7EE7\u7EED\n -Xss<\u5927\u5C0F> \u8BBE\u7F6E Java \u7EBF\u7A0B\u5806\u6808\u5927\u5C0F\n -Xverify \u8BBE\u7F6E\u5B57\u8282\u7801\u9A8C\u8BC1\u5668\u7684\u6A21\u5F0F\n --add-reads <\u6A21\u5757>=<\u76EE\u6807\u6A21\u5757>(,<\u76EE\u6807\u6A21\u5757>)*\n \u66F4\u65B0 <\u6A21\u5757> \u4EE5\u8BFB\u53D6 <\u76EE\u6807\u6A21\u5757>\uFF0C\u800C\u65E0\u8BBA\n \u6A21\u5757\u58F0\u660E\u5982\u4F55\u3002\n <\u76EE\u6807\u6A21\u5757> \u53EF\u4EE5\u662F ALL-UNNAMED \u4EE5\u8BFB\u53D6\u6240\u6709\u672A\u547D\u540D\n \u6A21\u5757\u3002\n --add-exports <\u6A21\u5757>/<\u7A0B\u5E8F\u5305>=<\u76EE\u6807\u6A21\u5757>(,<\u76EE\u6807\u6A21\u5757>)*\n \u66F4\u65B0 <\u6A21\u5757> \u4EE5\u5C06 <\u7A0B\u5E8F\u5305> \u5BFC\u51FA\u5230 <\u76EE\u6807\u6A21\u5757>\uFF0C\n \u800C\u65E0\u8BBA\u6A21\u5757\u58F0\u660E\u5982\u4F55\u3002\n <\u76EE\u6807\u6A21\u5757> \u53EF\u4EE5\u662F ALL-UNNAMED \u4EE5\u5BFC\u51FA\u5230\u6240\u6709\n \
-\u672A\u547D\u540D\u6A21\u5757\u3002\n --add-opens <\u6A21\u5757>/<\u7A0B\u5E8F\u5305>=<\u76EE\u6807\u6A21\u5757>(,<\u76EE\u6807\u6A21\u5757>)*\n \u66F4\u65B0 <\u6A21\u5757> \u4EE5\u5728 <\u76EE\u6807\u6A21\u5757> \u4E2D\u6253\u5F00\n <\u7A0B\u5E8F\u5305>\uFF0C\u800C\u65E0\u8BBA\u6A21\u5757\u58F0\u660E\u5982\u4F55\u3002\n --illegal-access=<\u503C>\n \u5141\u8BB8\u6216\u62D2\u7EDD\u901A\u8FC7\u672A\u547D\u540D\u6A21\u5757\u4E2D\u7684\u4EE3\u7801\u5BF9\u547D\u540D\u6A21\u5757\u4E2D\u7684\n \u7C7B\u578B\u6210\u5458\u8FDB\u884C\u8BBF\u95EE\u3002\n <\u503C> \u4E3A "deny"\u3001"permit"\u3001"warn" \u6216 "debug" \u4E4B\u4E00\n \u6B64\u9009\u9879\u5C06\u5728\u672A\u6765\u53D1\u884C\u7248\u4E2D\u5220\u9664\u3002\n --limit-modules <\u6A21\u5757\u540D>[,<\u6A21\u5757\u540D>...]\n \u9650\u5236\u53EF\u89C2\u5BDF\u6A21\u5757\u7684\u9886\u57DF\n --patch-module <\u6A21\u5757>=<\u6587\u4EF6>({0}<\u6587\u4EF6>)*\n \u4F7F\u7528 JAR \u6587\u4EF6\u6216\u76EE\u5F55\u4E2D\u7684\u7C7B\u548C\u8D44\u6E90\n \u8986\u76D6\u6216\u589E\u5F3A\u6A21\u5757\u3002\n --disable-@files \u7981\u6B62\u8FDB\u4E00\u6B65\u6269\u5C55\u53C2\u6570\u6587\u4EF6\n --source <\u7248\u672C>\n \u8BBE\u7F6E\u6E90\u6587\u4EF6\u6A21\u5F0F\u4E2D\u6E90\u7684\u7248\u672C\u3002\n\n\u8FD9\u4E9B\u989D\u5916\u9009\u9879\u5982\u6709\u66F4\u6539\uFF0C\u6055\u4E0D\u53E6\u884C\u901A\u77E5\u3002\n
+java.launcher.X.usage=\n -Xbatch \u7981\u7528\u540E\u53F0\u7F16\u8BD1\n -Xbootclasspath/a:<\u4EE5 {0} \u5206\u9694\u7684\u76EE\u5F55\u548C zip/jar \u6587\u4EF6>\n \u9644\u52A0\u5728\u5F15\u5BFC\u7C7B\u8DEF\u5F84\u672B\u5C3E\n -Xcheck:jni \u5BF9 JNI \u51FD\u6570\u6267\u884C\u5176\u4ED6\u68C0\u67E5\n -Xcomp \u5F3A\u5236\u5728\u9996\u6B21\u8C03\u7528\u65F6\u7F16\u8BD1\u65B9\u6CD5\n -Xdebug \u4E3A\u5B9E\u73B0\u5411\u540E\u517C\u5BB9\u800C\u63D0\u4F9B\n -Xdiag \u663E\u793A\u9644\u52A0\u8BCA\u65AD\u6D88\u606F\n -Xfuture \u542F\u7528\u6700\u4E25\u683C\u7684\u68C0\u67E5\uFF0C\u9884\u671F\u5C06\u6765\u7684\u9ED8\u8BA4\u503C\n \u6B64\u9009\u9879\u5DF2\u8FC7\u65F6\uFF0C\u53EF\u80FD\u4F1A\u5728\n \u672A\u6765\u53D1\u884C\u7248\u4E2D\u5220\u9664\u3002\n -Xint \u4EC5\u89E3\u91CA\u6A21\u5F0F\u6267\u884C\n -Xinternalversion\n \u663E\u793A\u6BD4 -version \u9009\u9879\u66F4\u8BE6\u7EC6\u7684\n JVM \u7248\u672C\u4FE1\u606F\n -Xlog:<opts> \u914D\u7F6E\u6216\u542F\u7528\u91C7\u7528 Java \u865A\u62DF\n \u673A (Java Virtual Machine, JVM) \u7EDF\u4E00\u8BB0\u5F55\u6846\u67B6\u8FDB\u884C\u4E8B\u4EF6\u8BB0\u5F55\u3002\u4F7F\u7528 -Xlog:help\n \u53EF\u4E86\u89E3\u8BE6\u7EC6\u4FE1\u606F\u3002\n -Xloggc:<file> \u5C06 GC \u72B6\u6001\u8BB0\u5F55\u5728\u6587\u4EF6\u4E2D\uFF08\u5E26\u65F6\u95F4\u6233\uFF09\n -Xmixed \u6DF7\u5408\u6A21\u5F0F\u6267\u884C\uFF08\u9ED8\u8BA4\u503C\uFF09\n -Xmn<size> \u4E3A\u5E74\u8F7B\u4EE3\uFF08\u65B0\u751F\u4EE3\uFF09\u8BBE\u7F6E\u521D\u59CB\u548C\u6700\u5927\u5806\u5927\u5C0F\n \uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\n -Xms<size> \u8BBE\u7F6E\u521D\u59CB Java \u5806\u5927\u5C0F\n -Xmx<size> \u8BBE\u7F6E\u6700\u5927 Java \u5806\u5927\u5C0F\n -Xnoclassgc \u7981\u7528\u7C7B\u5783\u573E\u6536\u96C6\n -Xrs \u51CF\u5C11 Java/VM \u5BF9\u64CD\u4F5C\u7CFB\u7EDF\u4FE1\u53F7\u7684\u4F7F\u7528\uFF08\u8BF7\u53C2\u89C1\u6587\u6863\uFF09\n -Xshare:auto \u5728\u53EF\u80FD\u7684\u60C5\u51B5\u4E0B\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\uFF08\u9ED8\u8BA4\u503C\uFF09\n -Xshare:off \u4E0D\u5C1D\u8BD5\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\n -Xshare:on \u8981\u6C42\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\uFF0C\u5426\u5219\u5C06\u5931\u8D25\u3002\n -XshowSettings \u663E\u793A\u6240\u6709\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:all\n \u663E\u793A\u6240\u6709\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:locale\n \u663E\u793A\u6240\u6709\u4E0E\u533A\u57DF\u8BBE\u7F6E\u76F8\u5173\u7684\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:properties\n \u663E\u793A\u6240\u6709\u5C5E\u6027\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:vm\n \u663E\u793A\u6240\u6709\u4E0E vm \u76F8\u5173\u7684\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n -XshowSettings:system\n \uFF08\u4EC5 Linux\uFF09\u663E\u793A\u4E3B\u673A\u7CFB\u7EDF\u6216\u5BB9\u5668\n \u914D\u7F6E\u5E76\u7EE7\u7EED\n -Xss<size> \u8BBE\u7F6E Java \u7EBF\u7A0B\u5806\u6808\u5927\u5C0F\n -Xverify \u8BBE\u7F6E\u5B57\u8282\u7801\u9A8C\u8BC1\u5668\u7684\u6A21\u5F0F\n \u8BF7\u6CE8\u610F\uFF0C\u9009\u9879 -Xverify:none \u5DF2\u8FC7\u65F6\uFF0C\n \u53EF\u80FD\u4F1A\u5728\u672A\u6765\u53D1\u884C\u7248\u4E2D\u5220\u9664\u3002\n --add-reads <module>=<target-module>(,<target-module>)*\n \u66F4\u65B0 <module> \u4EE5\u8BFB\u53D6 <target-module>\uFF0C\u800C\u65E0\u8BBA\n \u6A21\u5757\u5982\u4F55\u58F0\u660E\u3002 \n <target-module> \u53EF\u4EE5\u662F \
+ALL-UNNAMED\uFF0C\u5C06\u8BFB\u53D6\u6240\u6709\u672A\u547D\u540D\n \u6A21\u5757\u3002\n --add-exports <module>/<package>=<target-module>(,<target-module>)*\n \u66F4\u65B0 <module> \u4EE5\u5C06 <package> \u5BFC\u51FA\u5230 <target-module>\uFF0C\n \u800C\u65E0\u8BBA\u6A21\u5757\u5982\u4F55\u58F0\u660E\u3002\n <target-module> \u53EF\u4EE5\u662F ALL-UNNAMED\uFF0C\u5C06\u5BFC\u51FA\u5230\u6240\u6709\n \u672A\u547D\u540D\u6A21\u5757\u3002\n --add-opens <module>/<package>=<target-module>(,<target-module>)*\n \u66F4\u65B0 <module> \u4EE5\u5728 <target-module> \u4E2D\u6253\u5F00\n <package>\uFF0C\u800C\u65E0\u8BBA\u6A21\u5757\u5982\u4F55\u58F0\u660E\u3002\n --illegal-access=<value>\n \u5141\u8BB8\u6216\u62D2\u7EDD\u901A\u8FC7\u672A\u547D\u540D\u6A21\u5757\u4E2D\u7684\u4EE3\u7801\u5BF9\u547D\u540D\u6A21\u5757\u4E2D\u7684\n \u7C7B\u578B\u6210\u5458\u8FDB\u884C\u8BBF\u95EE\u3002\n <value> \u4E3A "deny"\u3001"permit"\u3001"warn" \u6216 "debug" \u4E4B\u4E00\n \u6B64\u9009\u9879\u5C06\u5728\u672A\u6765\u53D1\u884C\u7248\u4E2D\u5220\u9664\u3002\n --limit-modules <module name>[,<module name>...]\n \u9650\u5236\u53EF\u89C2\u5BDF\u6A21\u5757\u7684\u9886\u57DF\n --patch-module <module>=<file>({0}<file>)*\n \u4F7F\u7528 JAR \u6587\u4EF6\u6216\u76EE\u5F55\u4E2D\u7684\u7C7B\u548C\u8D44\u6E90\n \u8986\u76D6\u6216\u589E\u5F3A\u6A21\u5757\u3002\n --disable-@files \u7981\u6B62\u8FDB\u4E00\u6B65\u6269\u5C55\u53C2\u6570\u6587\u4EF6\n --source <version>\n \u8BBE\u7F6E\u6E90\u6587\u4EF6\u6A21\u5F0F\u4E2D\u6E90\u7684\u7248\u672C\u3002\n\n\u8FD9\u4E9B\u989D\u5916\u9009\u9879\u5982\u6709\u66F4\u6539, \u6055\u4E0D\u53E6\u884C\u901A\u77E5\u3002\n
# Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\n\u4EE5\u4E0B\u9009\u9879\u4E3A Mac OS X \u7279\u5B9A\u7684\u9009\u9879:\n -XstartOnFirstThread\n \u5728\u7B2C\u4E00\u4E2A (AppKit) \u7EBF\u7A0B\u4E0A\u8FD0\u884C main() \u65B9\u6CD5\n -Xdock:name=<\u5E94\u7528\u7A0B\u5E8F\u540D\u79F0>\n \u8986\u76D6\u505C\u9760\u680F\u4E2D\u663E\u793A\u7684\u9ED8\u8BA4\u5E94\u7528\u7A0B\u5E8F\u540D\u79F0\n -Xdock:icon=<\u56FE\u6807\u6587\u4EF6\u7684\u8DEF\u5F84>\n \u8986\u76D6\u505C\u9760\u680F\u4E2D\u663E\u793A\u7684\u9ED8\u8BA4\u56FE\u6807\n\n
@@ -57,4 +57,4 @@
java.launcher.module.error2=\u9519\u8BEF: \u5728\u6A21\u5757 {1} \u4E2D\u627E\u4E0D\u5230\u6216\u65E0\u6CD5\u52A0\u8F7D\u4E3B\u7C7B {0}
java.launcher.module.error3=\u9519\u8BEF: \u65E0\u6CD5\u5C06\u4E3B\u7C7B {0} \u52A0\u8F7D\u5230\u6A21\u5757 {1} \u4E2D\n\t{2}
java.launcher.module.error4=\u627E\u4E0D\u5230{0}
-java.launcher.module.error5=\u9519\u8BEF: \u65E0\u6CD5\u521D\u59CB\u5316\u6A21\u5757 {1} \u4E2D\u7684\u4E3B\u7C7B {0}\n\u539F\u56E0: {1}: {2}
+java.launcher.module.error5=\u9519\u8BEF: \u65E0\u6CD5\u521D\u59CB\u5316\u6A21\u5757 {1} \u4E2D\u7684\u4E3B\u7C7B {0}\n\u539F\u56E0: {2}: {3}
--- a/src/java.base/share/classes/sun/security/tools/keytool/Resources_ja.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Resources_ja.java Thu Jul 11 15:40:29 2019 +0530
@@ -95,6 +95,8 @@
"\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-selfcert
{"Changes.the.store.password.of.a.keystore",
"\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-storepasswd
+ {"showinfo.command.help", "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u95A2\u9023\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059"},
+
// keytool: help: options
{"alias.name.of.the.entry.to.process",
"\u51E6\u7406\u3059\u308B\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D"}, //-alias
@@ -140,6 +142,7 @@
"\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u8868\u793A\u3057\u306A\u3044"}, //-noprompt
{"password.through.protected.mechanism",
"\u4FDD\u8B77\u30E1\u30AB\u30CB\u30BA\u30E0\u306B\u3088\u308B\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-protected
+ {"tls.option.help", "TLS\u69CB\u6210\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059"},
// The following 2 values should span 2 lines, the first for the
// option itself, the second for its -providerArg value.
@@ -250,7 +253,6 @@
{"Keystore.password.is.too.short.must.be.at.least.6.characters",
"\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044"},
{"Unknown.Entry.Type", "\u4E0D\u660E\u306A\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7"},
- {"Too.many.failures.Alias.not.changed", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u5225\u540D\u306F\u5909\u66F4\u3055\u308C\u307E\u305B\u3093"},
{"Entry.for.alias.alias.successfully.imported.",
"\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002"},
{"Entry.for.alias.alias.not.imported.", "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"},
@@ -311,10 +313,6 @@
{"Too.many.failures.Key.entry.not.cloned",
"\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u30AD\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u306F\u4F5C\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"},
{"key.password.for.alias.", "<{0}>\u306E\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"},
- {"Keystore.entry.for.id.getName.already.exists",
- "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
- {"Creating.keystore.entry.for.id.getName.",
- "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u4F5C\u6210\u4E2D..."},
{"No.entries.from.identity.database.added",
"\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u8FFD\u52A0\u3055\u308C\u305F\u30A8\u30F3\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093"},
{"Alias.name.alias", "\u5225\u540D: {0}"},
@@ -352,7 +350,6 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]: "},
{"Trust.this.certificate.no.", "\u3053\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]: "},
- {"YES", "\u306F\u3044"},
{"New.prompt.", "\u65B0\u898F{0}: "},
{"Passwords.must.differ", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7570\u306A\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
{"Re.enter.new.prompt.", "\u65B0\u898F{0}\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
@@ -392,7 +389,6 @@
{"Signer.d.", "\u7F72\u540D\u8005\u756A\u53F7%d:"},
{"Timestamp.", "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7:"},
{"Signature.", "\u7F72\u540D:"},
- {"CRLs.", "CRL:"},
{"Certificate.owner.", "\u8A3C\u660E\u66F8\u306E\u6240\u6709\u8005: "},
{"Not.a.signed.jar.file", "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
{"No.certificate.from.the.SSL.server",
@@ -407,13 +403,10 @@
"\u8A3C\u660E\u66F8\u5FDC\u7B54\u306B\u306F\u3001<{0}>\u306E\u516C\u958B\u30AD\u30FC\u306F\u542B\u307E\u308C\u307E\u305B\u3093"},
{"Incomplete.certificate.chain.in.reply",
"\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u4E0D\u5B8C\u5168\u3067\u3059"},
- {"Certificate.chain.in.reply.does.not.verify.",
- "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093: "},
{"Top.level.certificate.in.reply.",
"\u5FDC\u7B54\u3057\u305F\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306E\u8A3C\u660E\u66F8:\n"},
{".is.not.trusted.", "... \u306F\u4FE1\u983C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 "},
{"Install.reply.anyway.no.", "\u5FDC\u7B54\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "},
- {"NO", "\u3044\u3044\u3048"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"\u5FDC\u7B54\u3057\u305F\u516C\u958B\u30AD\u30FC\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -474,6 +467,8 @@
{"backup.keystore.warning", "\u5143\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\"%1$s\"\u306F\"%3$s\"\u3068\u3057\u3066\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3055\u308C\u307E\u3059..."},
{"importing.keystore.status", "\u30AD\u30FC\u30B9\u30C8\u30A2%1$s\u3092%2$s\u306B\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u3059..."},
{"keyalg.option.1.missing.warning", "-keyalg\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30AD\u30FC\u30FB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0(%s)\u306F\u3001\u65E7\u5F0F\u306E\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3067\u3001\u73FE\u5728\u306F\u63A8\u5968\u3055\u308C\u307E\u305B\u3093\u3002JDK\u306E\u5F8C\u7D9A\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u306F\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u306F\u524A\u9664\u3055\u308C\u308B\u4E88\u5B9A\u3067\u3001-keyalg\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002"},
+
+ {"showinfo.no.option", "-showinfo\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093\u3002\"keytool -showinfo -tls\"\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
};
--- a/src/java.base/share/classes/sun/security/tools/keytool/Resources_zh_CN.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Resources_zh_CN.java Thu Jul 11 15:40:29 2019 +0530
@@ -95,6 +95,8 @@
"\u751F\u6210\u81EA\u7B7E\u540D\u8BC1\u4E66"}, //-selfcert
{"Changes.the.store.password.of.a.keystore",
"\u66F4\u6539\u5BC6\u94A5\u5E93\u7684\u5B58\u50A8\u53E3\u4EE4"}, //-storepasswd
+ {"showinfo.command.help", "\u663E\u793A\u5B89\u5168\u76F8\u5173\u4FE1\u606F"},
+
// keytool: help: options
{"alias.name.of.the.entry.to.process",
"\u8981\u5904\u7406\u7684\u6761\u76EE\u7684\u522B\u540D"}, //-alias
@@ -140,6 +142,7 @@
"\u4E0D\u63D0\u793A"}, //-noprompt
{"password.through.protected.mechanism",
"\u901A\u8FC7\u53D7\u4FDD\u62A4\u7684\u673A\u5236\u7684\u53E3\u4EE4"}, //-protected
+ {"tls.option.help", "\u663E\u793A TLS \u914D\u7F6E\u4FE1\u606F"},
// The following 2 values should span 2 lines, the first for the
// option itself, the second for its -providerArg value.
@@ -250,7 +253,6 @@
{"Keystore.password.is.too.short.must.be.at.least.6.characters",
"\u5BC6\u94A5\u5E93\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
{"Unknown.Entry.Type", "\u672A\u77E5\u6761\u76EE\u7C7B\u578B"},
- {"Too.many.failures.Alias.not.changed", "\u6545\u969C\u592A\u591A\u3002\u672A\u66F4\u6539\u522B\u540D"},
{"Entry.for.alias.alias.successfully.imported.",
"\u5DF2\u6210\u529F\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"},
{"Entry.for.alias.alias.not.imported.", "\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"},
@@ -311,10 +313,6 @@
{"Too.many.failures.Key.entry.not.cloned",
"\u6545\u969C\u592A\u591A\u3002\u672A\u514B\u9686\u5BC6\u94A5\u6761\u76EE"},
{"key.password.for.alias.", "<{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"},
- {"Keystore.entry.for.id.getName.already.exists",
- "<{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE\u5DF2\u7ECF\u5B58\u5728"},
- {"Creating.keystore.entry.for.id.getName.",
- "\u6B63\u5728\u521B\u5EFA <{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE..."},
{"No.entries.from.identity.database.added",
"\u672A\u4ECE\u8EAB\u4EFD\u6570\u636E\u5E93\u4E2D\u6DFB\u52A0\u4EFB\u4F55\u6761\u76EE"},
{"Alias.name.alias", "\u522B\u540D: {0}"},
@@ -352,7 +350,6 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [\u5426]: "},
{"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [\u5426]: "},
- {"YES", "YES"},
{"New.prompt.", "\u65B0{0}: "},
{"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"},
{"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "},
@@ -392,7 +389,6 @@
{"Signer.d.", "\u7B7E\u540D\u8005 #%d:"},
{"Timestamp.", "\u65F6\u95F4\u6233:"},
{"Signature.", "\u7B7E\u540D:"},
- {"CRLs.", "CRL:"},
{"Certificate.owner.", "\u8BC1\u4E66\u6240\u6709\u8005: "},
{"Not.a.signed.jar.file", "\u4E0D\u662F\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"},
{"No.certificate.from.the.SSL.server",
@@ -407,13 +403,10 @@
"\u8BC1\u4E66\u56DE\u590D\u4E2D\u4E0D\u5305\u542B <{0}> \u7684\u516C\u5171\u5BC6\u94A5"},
{"Incomplete.certificate.chain.in.reply",
"\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u4E0D\u5B8C\u6574"},
- {"Certificate.chain.in.reply.does.not.verify.",
- "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1: "},
{"Top.level.certificate.in.reply.",
"\u56DE\u590D\u4E2D\u7684\u9876\u7EA7\u8BC1\u4E66:\n"},
{".is.not.trusted.", "... \u662F\u4E0D\u53EF\u4FE1\u7684\u3002"},
{"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [\u5426]: "},
- {"NO", "NO"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"\u56DE\u590D\u4E2D\u7684\u516C\u5171\u5BC6\u94A5\u4E0E\u5BC6\u94A5\u5E93\u4E0D\u5339\u914D"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -474,6 +467,8 @@
{"backup.keystore.warning", "\u5DF2\u5C06\u539F\u59CB\u5BC6\u94A5\u5E93 \"%1$s\" \u5907\u4EFD\u4E3A \"%3$s\"..."},
{"importing.keystore.status", "\u6B63\u5728\u5C06\u5BC6\u94A5\u5E93 %1$s \u5BFC\u5165\u5230 %2$s..."},
{"keyalg.option.1.missing.warning", "\u65E0 -keyalg \u9009\u9879\u3002\u9ED8\u8BA4\u5BC6\u94A5\u7B97\u6CD5 (%s) \u662F\u4F20\u7EDF\u7B97\u6CD5\uFF0C\u4E0D\u518D\u63A8\u8350\u3002\u5728 JDK \u7684\u540E\u7EED\u53D1\u884C\u7248\u4E2D\uFF0C\u5C06\u5220\u9664\u9ED8\u8BA4\u503C\uFF0C\u60A8\u5FC5\u987B\u6307\u5B9A -keyalg \u9009\u9879\u3002"},
+
+ {"showinfo.no.option", "-showinfo \u7F3A\u5C11\u9009\u9879\u3002\u8BF7\u5C1D\u8BD5\u4F7F\u7528 \"keytool -showinfo -tls\"\u3002"},
};
--- a/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -573,8 +573,12 @@
// we can then pass in the dom = -1, dow > 0 into ZoneInfo
//
// hacking, assume the >=24 is the result of ZRB optimization for
- // "last", it works for now.
- if (dom < 0 || dom >= 24) {
+ // "last", it works for now. From tzdata2019a this hacking
+ // will not work for Asia/Gaza and Asia/Hebron which follow
+ // Palestine DST rules.
+ if (dom < 0 || dom >= 24 &&
+ !(zoneId.equals("Asia/Gaza") ||
+ zoneId.equals("Asia/Hebron"))) {
params[1] = -1;
params[2] = toCalendarDOW[dow];
} else {
--- a/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -370,7 +370,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
@@ -691,6 +691,9 @@
{"Asia/Pontianak", WIT},
{"Asia/Pyongyang", KST},
{"Asia/Qatar", ARAST},
+ {"Asia/Qostanay", new String[] {"Kostanay Standard Time", "QOST",
+ "Kostanay Summer Time", "QOSST",
+ "Kostanay Time", "QOST"}},
{"Asia/Qyzylorda", new String[] {"Qyzylorda Time", "QYZT",
"Qyzylorda Summer Time", "QYZST",
"Qyzylorda Time", "QYZT"}},
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c Thu Jul 11 15:40:29 2019 +0530
@@ -324,8 +324,6 @@
/* GDK */
fp_gdk_get_default_root_window =
dl_symbol("gdk_get_default_root_window");
- fp_gdk_window_get_scale_factor =
- dl_symbol("gdk_window_get_scale_factor");
/* Pixbuf */
fp_gdk_pixbuf_new = dl_symbol("gdk_pixbuf_new");
@@ -400,6 +398,8 @@
} else {
fp_gdk_window_create_similar_image_surface =
dl_symbol("gdk_window_create_similar_image_surface");
+ fp_gdk_window_get_scale_factor =
+ dl_symbol("gdk_window_get_scale_factor");
}
gtk3_version_3_14 = !fp_gtk_check_version(3, 14, 0);
@@ -2890,9 +2890,13 @@
jint *ary;
GdkWindow *root = (*fp_gdk_get_default_root_window)();
- int win_scale = (*fp_gdk_window_get_scale_factor)(root);
- pixbuf = (*fp_gdk_pixbuf_get_from_drawable)(
- root, x, y, (int)(width / (float)win_scale + 0.5), (int)(height / (float)win_scale + 0.5));
+ if (gtk3_version_3_10) {
+ int win_scale = (*fp_gdk_window_get_scale_factor)(root);
+ pixbuf = (*fp_gdk_pixbuf_get_from_drawable)(
+ root, x, y, (int) (width / (float) win_scale + 0.5), (int) (height / (float) win_scale + 0.5));
+ } else {
+ pixbuf = (*fp_gdk_pixbuf_get_from_drawable)(root, x, y, width, height);
+ }
if (pixbuf && scale != 1) {
GdkPixbuf *scaledPixbuf;
--- a/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5Util.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5Util.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -58,82 +58,6 @@
}
/**
- * Retrieve the service ticket for serverPrincipal from caller's Subject
- * or from Subject obtained by logging in, or if not found, via the
- * Ticket Granting Service using the TGT obtained from the Subject.
- *
- * Caller must have permission to:
- * - access and update Subject's private credentials
- * - create LoginContext
- * - read the auth.login.defaultCallbackHandler security property
- *
- * NOTE: This method is used by JSSE Kerberos Cipher Suites
- */
- public static KerberosTicket getTicketFromSubjectAndTgs(GSSCaller caller,
- String clientPrincipal, String serverPrincipal, String tgsPrincipal,
- AccessControlContext acc)
- throws LoginException, KrbException, IOException {
-
- // 1. Try to find service ticket in acc subject
- Subject accSubj = Subject.getSubject(acc);
- KerberosTicket ticket = SubjectComber.find(accSubj,
- serverPrincipal, clientPrincipal, KerberosTicket.class);
-
- if (ticket != null) {
- return ticket; // found it
- }
-
- Subject loginSubj = null;
- if (!GSSUtil.useSubjectCredsOnly(caller)) {
- // 2. Try to get ticket from login
- try {
- loginSubj = GSSUtil.login(caller, GSSUtil.GSS_KRB5_MECH_OID);
- ticket = SubjectComber.find(loginSubj,
- serverPrincipal, clientPrincipal, KerberosTicket.class);
- if (ticket != null) {
- return ticket; // found it
- }
- } catch (LoginException e) {
- // No login entry to use
- // ignore and continue
- }
- }
-
- // Service ticket not found in subject or login
- // Try to get TGT to acquire service ticket
-
- // 3. Try to get TGT from acc subject
- KerberosTicket tgt = SubjectComber.find(accSubj,
- tgsPrincipal, clientPrincipal, KerberosTicket.class);
-
- boolean fromAcc;
- if (tgt == null && loginSubj != null) {
- // 4. Try to get TGT from login subject
- tgt = SubjectComber.find(loginSubj,
- tgsPrincipal, clientPrincipal, KerberosTicket.class);
- fromAcc = false;
- } else {
- fromAcc = true;
- }
-
- // 5. Try to get service ticket using TGT
- if (tgt != null) {
- Credentials tgtCreds = ticketToCreds(tgt);
- Credentials serviceCreds = Credentials.acquireServiceCreds(
- serverPrincipal, tgtCreds);
- if (serviceCreds != null) {
- ticket = credsToTicket(serviceCreds);
-
- // Store service ticket in acc's Subject
- if (fromAcc && accSubj != null && !accSubj.isReadOnly()) {
- accSubj.getPrivateCredentials().add(ticket);
- }
- }
- }
- return ticket;
- }
-
- /**
* Retrieves the ticket corresponding to the client/server principal
* pair from the Subject in the specified AccessControlContext.
* If the ticket can not be found in the Subject, and if
--- a/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsReqBuilder.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsReqBuilder.java Thu Jul 11 15:40:29 2019 +0530
@@ -367,6 +367,8 @@
paList = kerr.getPA(); // Update current paList
} else {
if (referralsState.handleError(ke)) {
+ pakey = null;
+ preAuthFailedOnce = false;
continue;
}
throw ke;
--- a/src/java.security.jgss/share/native/libj2gss/NativeFunc.h Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.security.jgss/share/native/libj2gss/NativeFunc.h Thu Jul 11 15:40:29 2019 +0530
@@ -57,8 +57,8 @@
typedef OM_uint32 (*IMPORT_NAME_FN_PTR)
(OM_uint32 *minor_status,
- const gss_buffer_t input_name_buffer,
- const gss_OID input_name_type,
+ gss_const_buffer_t input_name_buffer,
+ gss_const_OID input_name_type,
gss_name_t *output_name);
typedef OM_uint32 (*COMPARE_NAME_FN_PTR)
@@ -70,7 +70,7 @@
typedef OM_uint32 (*CANONICALIZE_NAME_FN_PTR)
(OM_uint32 *minor_status,
gss_const_name_t input_name,
- const gss_OID mech_type,
+ gss_const_OID mech_type,
gss_name_t *output_name);
typedef OM_uint32 (*EXPORT_NAME_FN_PTR)
@@ -88,7 +88,7 @@
(OM_uint32 *minor_status,
gss_const_name_t desired_name,
OM_uint32 time_req,
- const gss_OID_set desired_mech,
+ gss_const_OID_set desired_mech,
gss_cred_usage_t cred_usage,
gss_cred_id_t *output_cred_handle,
gss_OID_set *actual_mechs,
@@ -108,7 +108,7 @@
typedef OM_uint32 (*IMPORT_SEC_CONTEXT_FN_PTR)
(OM_uint32 *minor_status,
- const gss_buffer_t interprocess_token,
+ gss_const_buffer_t interprocess_token,
gss_ctx_id_t *context_handle);
typedef OM_uint32 (*INIT_SEC_CONTEXT_FN_PTR)
@@ -116,11 +116,11 @@
gss_const_cred_id_t initiator_cred_handle,
gss_ctx_id_t *context_handle,
gss_const_name_t target_name,
- const gss_OID mech_type,
+ gss_const_OID mech_type,
OM_uint32 req_flags,
OM_uint32 time_req,
- const gss_channel_bindings_t input_chan_bindings,
- const gss_buffer_t input_token,
+ gss_const_channel_bindings_t input_chan_bindings,
+ gss_const_buffer_t input_token,
gss_OID *actual_mech_type,
gss_buffer_t output_token,
OM_uint32 *ret_flags,
@@ -130,8 +130,8 @@
(OM_uint32 *minor_status,
gss_ctx_id_t *context_handle,
gss_const_cred_id_t acceptor_cred_handle,
- const gss_buffer_t input_token,
- const gss_channel_bindings_t input_chan_bindings,
+ gss_const_buffer_t input_token,
+ gss_const_channel_bindings_t input_chan_bindings,
gss_name_t *src_name,
gss_OID *mech_type,
gss_buffer_t output_token,
@@ -177,14 +177,14 @@
(OM_uint32 *minor_status,
gss_const_ctx_id_t context_handle,
gss_qop_t qop_req,
- const gss_buffer_t message_buffer,
+ gss_const_buffer_t message_buffer,
gss_buffer_t msg_token);
typedef OM_uint32 (*VERIFY_MIC_FN_PTR)
(OM_uint32 *minor_status,
gss_const_ctx_id_t context_handle,
- const gss_buffer_t message_buffer,
- const gss_buffer_t token_buffer,
+ gss_const_buffer_t message_buffer,
+ gss_const_buffer_t token_buffer,
gss_qop_t *qop_state);
typedef OM_uint32 (*WRAP_FN_PTR)
@@ -192,14 +192,14 @@
gss_const_ctx_id_t context_handle,
int conf_req_flag,
gss_qop_t qop_req,
- const gss_buffer_t input_message_buffer,
+ gss_const_buffer_t input_message_buffer,
int *conf_state,
gss_buffer_t output_message_buffer);
typedef OM_uint32 (*UNWRAP_FN_PTR)
(OM_uint32 *minor_status,
gss_const_ctx_id_t context_handle,
- const gss_buffer_t input_message_buffer,
+ gss_const_buffer_t input_message_buffer,
gss_buffer_t output_message_buffer,
int *conf_state,
gss_qop_t *qop_state);
@@ -210,19 +210,19 @@
typedef OM_uint32 (*INQUIRE_NAMES_FOR_MECH_FN_PTR)
(OM_uint32 *minor_status,
- const gss_OID mechanism,
+ gss_const_OID mechanism,
gss_OID_set *name_types);
typedef OM_uint32 (*ADD_OID_SET_MEMBER_FN_PTR)
(OM_uint32 *minor_status,
- const gss_OID member_oid,
+ gss_const_OID member_oid,
gss_OID_set *oid_set);
typedef OM_uint32 (*DISPLAY_STATUS_FN_PTR)
(OM_uint32 *minor_status,
OM_uint32 status_value,
int status_type,
- const gss_OID mech_type,
+ gss_const_OID mech_type,
OM_uint32 *message_context,
gss_buffer_t status_string);
--- a/src/java.security.jgss/share/native/libj2gss/gssapi.h Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.security.jgss/share/native/libj2gss/gssapi.h Thu Jul 11 15:40:29 2019 +0530
@@ -404,7 +404,7 @@
OM_uint32 *, /* minor_status */
gss_const_name_t, /* desired_name */
OM_uint32, /* time_req */
- const gss_OID_set, /* desired_mechs */
+ gss_const_OID_set, /* desired_mechs */
gss_cred_usage_t, /* cred_usage */
gss_cred_id_t *, /* output_cred_handle */
gss_OID_set *, /* actual_mechs */
@@ -421,11 +421,11 @@
gss_const_cred_id_t, /* claimant_cred_handle */
gss_ctx_id_t *, /* context_handle */
gss_const_name_t, /* target_name */
- const gss_OID, /* mech_type */
+ gss_const_OID, /* mech_type */
OM_uint32, /* req_flags */
OM_uint32, /* time_req */
- const gss_channel_bindings_t, /* input_chan_bindings */
- const gss_buffer_t, /* input_token */
+ gss_const_channel_bindings_t, /* input_chan_bindings */
+ gss_const_buffer_t, /* input_token */
gss_OID *, /* actual_mech_type */
gss_buffer_t, /* output_token */
OM_uint32 *, /* ret_flags */
@@ -436,8 +436,8 @@
OM_uint32 *, /* minor_status */
gss_ctx_id_t *, /* context_handle */
gss_const_cred_id_t, /* acceptor_cred_handle */
- const gss_buffer_t, /* input_token_buffer */
- const gss_channel_bindings_t, /* input_chan_bindings */
+ gss_const_buffer_t, /* input_token_buffer */
+ gss_const_channel_bindings_t, /* input_chan_bindings */
gss_name_t *, /* src_name */
gss_OID *, /* mech_type */
gss_buffer_t, /* output_token */
@@ -449,7 +449,7 @@
GSS_DLLIMP OM_uint32 gss_process_context_token(
OM_uint32 *, /* minor_status */
gss_const_ctx_id_t, /* context_handle */
- const gss_buffer_t /* token_buffer */
+ gss_const_buffer_t /* token_buffer */
);
GSS_DLLIMP OM_uint32 gss_delete_sec_context(
@@ -469,7 +469,7 @@
OM_uint32 *, /* minor_status */
gss_const_ctx_id_t, /* context_handle */
gss_qop_t, /* qop_req */
- const gss_buffer_t, /* message_buffer */
+ gss_const_buffer_t, /* message_buffer */
gss_buffer_t /* message_token */
);
@@ -477,8 +477,8 @@
GSS_DLLIMP OM_uint32 gss_verify_mic(
OM_uint32 *, /* minor_status */
gss_const_ctx_id_t, /* context_handle */
- const gss_buffer_t, /* message_buffer */
- const gss_buffer_t, /* message_token */
+ gss_const_buffer_t, /* message_buffer */
+ gss_const_buffer_t, /* message_token */
gss_qop_t * /* qop_state */
);
@@ -488,7 +488,7 @@
gss_const_ctx_id_t, /* context_handle */
int, /* conf_req_flag */
gss_qop_t, /* qop_req */
- const gss_buffer_t, /* input_message_buffer */
+ gss_const_buffer_t, /* input_message_buffer */
int *, /* conf_state */
gss_buffer_t /* output_message_buffer */
);
@@ -497,7 +497,7 @@
GSS_DLLIMP OM_uint32 gss_unwrap(
OM_uint32 *, /* minor_status */
gss_const_ctx_id_t, /* context_handle */
- const gss_buffer_t, /* input_message_buffer */
+ gss_const_buffer_t, /* input_message_buffer */
gss_buffer_t, /* output_message_buffer */
int *, /* conf_state */
gss_qop_t * /* qop_state */
@@ -507,7 +507,7 @@
OM_uint32 *, /* minor_status */
OM_uint32, /* status_value */
int, /* status_type */
- const gss_OID, /* mech_type (used to be const) */
+ gss_const_OID, /* mech_type (used to be const) */
OM_uint32 *, /* message_context */
gss_buffer_t /* status_string */
);
@@ -533,8 +533,8 @@
GSS_DLLIMP OM_uint32 gss_import_name(
OM_uint32 *, /* minor_status */
- const gss_buffer_t, /* input_name_buffer */
- const gss_OID, /* input_name_type(used to be const) */
+ gss_const_buffer_t, /* input_name_buffer */
+ gss_const_OID, /* input_name_type(used to be const) */
gss_name_t * /* output_name */
);
@@ -590,7 +590,7 @@
OM_uint32 *, /* minor_status */
gss_const_cred_id_t, /* input_cred_handle */
gss_const_name_t, /* desired_name */
- const gss_OID, /* desired_mech */
+ gss_const_OID, /* desired_mech */
gss_cred_usage_t, /* cred_usage */
OM_uint32, /* initiator_time_req */
OM_uint32, /* acceptor_time_req */
@@ -604,7 +604,7 @@
GSS_DLLIMP OM_uint32 gss_inquire_cred_by_mech(
OM_uint32 *, /* minor_status */
gss_const_cred_id_t, /* cred_handle */
- const gss_OID, /* mech_type */
+ gss_const_OID, /* mech_type */
gss_name_t *, /* name */
OM_uint32 *, /* initiator_lifetime */
OM_uint32 *, /* acceptor_lifetime */
@@ -621,7 +621,7 @@
/* New for V2 */
GSS_DLLIMP OM_uint32 gss_import_sec_context(
OM_uint32 *, /* minor_status */
- const gss_buffer_t, /* interprocess_token */
+ gss_const_buffer_t, /* interprocess_token */
gss_ctx_id_t * /* context_handle */
);
@@ -640,22 +640,22 @@
/* New for V2 */
GSS_DLLIMP OM_uint32 gss_add_oid_set_member(
OM_uint32 *, /* minor_status */
- const gss_OID, /* member_oid */
+ gss_const_OID, /* member_oid */
gss_OID_set * /* oid_set */
);
/* New for V2 */
GSS_DLLIMP OM_uint32 gss_test_oid_set_member(
OM_uint32 *, /* minor_status */
- const gss_OID, /* member */
- const gss_OID_set, /* set */
+ gss_const_OID, /* member */
+ gss_const_OID_set, /* set */
int * /* present */
);
/* New for V2 */
GSS_DLLIMP OM_uint32 gss_str_to_oid(
OM_uint32 *, /* minor_status */
- const gss_buffer_t, /* oid_str */
+ gss_const_buffer_t, /* oid_str */
gss_OID * /* oid */
);
@@ -669,7 +669,7 @@
/* New for V2 */
GSS_DLLIMP OM_uint32 gss_inquire_names_for_mech(
OM_uint32 *, /* minor_status */
- const gss_OID, /* mechanism */
+ gss_const_OID, /* mechanism */
gss_OID_set * /* name_types */
);
@@ -691,7 +691,7 @@
GSS_DLLIMP OM_uint32 gss_canonicalize_name(
OM_uint32 *, /* minor_status */
gss_const_name_t, /* input_name */
- const gss_OID, /* mech_type */
+ gss_const_OID, /* mech_type */
gss_name_t * /* output_name */
);
--- a/src/java.security.jgss/windows/native/libsspi_bridge/sspi.cpp Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.security.jgss/windows/native/libsspi_bridge/sspi.cpp Thu Jul 11 15:40:29 2019 +0530
@@ -209,14 +209,14 @@
}
static BOOLEAN
-is_same_oid(gss_OID o2, gss_OID o1)
+is_same_oid(gss_const_OID o2, gss_const_OID o1)
{
return o1 && o2 && o1->length == o2->length
&& !memcmp(o1->elements, o2->elements, o2->length);
}
static BOOLEAN
-has_oid(gss_OID_set set, gss_OID oid)
+has_oid(gss_const_OID_set set, gss_const_OID oid)
{
for (int i = 0; i < set->count; i++) {
if (is_same_oid(&set->elements[i], oid)) {
@@ -227,7 +227,7 @@
}
static void
-get_oid_desc(gss_OID mech)
+show_oid(gss_const_OID mech)
{
if (trace) {
if (is_same_oid(mech, &KRB5_OID)) {
@@ -249,7 +249,7 @@
}
static void
-get_oid_set_desc(gss_OID_set mechs)
+show_oid_set(gss_const_OID_set mechs)
{
if (trace) {
if (mechs == NULL) {
@@ -258,7 +258,7 @@
}
PP("gss_OID_set.count is %d", (int)mechs->count);
for (int i = 0; i < mechs->count; i++) {
- get_oid_desc(&mechs->elements[i]);
+ show_oid(&mechs->elements[i]);
}
}
}
@@ -332,8 +332,8 @@
__declspec(dllexport) OM_uint32
gss_import_name(OM_uint32 *minor_status,
- const gss_buffer_t input_name_buffer,
- const gss_OID input_name_type,
+ gss_const_buffer_t input_name_buffer,
+ gss_const_OID input_name_type,
gss_name_t *output_name)
{
PP(">>>> Calling gss_import_name...");
@@ -344,6 +344,9 @@
LPSTR input = (LPSTR)input_name_buffer->value;
if (input_name_type != NULL
&& is_same_oid(input_name_type, &EXPORT_NAME_OID)) {
+ if (len < 4 || input[0] != 4 || input[1] != 1 || input[2] != 0) {
+ return GSS_S_FAILURE;
+ }
int mechLen = (int)input[3]; /* including 06 len */
len -= mechLen + 8; /* 4 header bytes, and an int32 length after OID */
if (len <= 0) {
@@ -429,15 +432,50 @@
SEC_WCHAR* n1 = name1->name;
SEC_WCHAR* n2 = name2->name;
PP("Comparing %ls and %ls", n1, n2);
+
int l1 = lstrlen(n1);
int l2 = lstrlen(n2);
- if (l1 < l2 && n2[l1] != L'@'
- || l2 < l1 && n1[l2] != L'@') {
+ int r1 = l1; // position of @ or the end if none
+ int r2 = l2;
+ int i;
+
+ for (i = 0; i < l1; i++) {
+ if (n1[i] == L'\\') {
+ i++;
+ continue;
+ }
+ if (n1[i] == L'@') {
+ r1 = i;
+ break;
+ }
+ }
+
+ for (i = 0; i < l2; i++) {
+ if (n2[i] == L'\\') {
+ i++;
+ continue;
+ }
+ if (n2[i] == L'@') {
+ r2 = i;
+ break;
+ }
+ }
+
+ if (l1 < l2 && l1 != r2
+ || l2 < l1 && l2 != l1) {
return GSS_S_COMPLETE; // different
}
+
if (l1 > l2) {
l1 = l2; // choose the smaller one. longer=smaller @ ...
}
+
+ // Two names are equal if they are the same or one has no realm and
+ // one has realm but they have the same name. If both have realm but
+ // different, they are treated different even if the names are the same.
+ // Note: the default name concept is not used here.
+ // Principal names on Windows are case-insensitive, both user name
+ // and service principal name.
if (CompareStringEx(LOCALE_NAME_SYSTEM_DEFAULT, NORM_IGNORECASE,
n1, l1, n2, l1, NULL, NULL, 0) == CSTR_EQUAL) {
*name_equal = 1;
@@ -448,7 +486,7 @@
__declspec(dllexport) OM_uint32
gss_canonicalize_name(OM_uint32 *minor_status,
gss_const_name_t input_name,
- const gss_OID mech_type,
+ gss_const_OID mech_type,
gss_name_t *output_name)
{
PP(">>>> Calling gss_canonicalize_name...");
@@ -456,6 +494,10 @@
CHECK_OID(mech_type)
CHECK_OUTPUT(output_name)
+ if (!is_same_oid(mech_type, &KRB5_OID)) {
+ PP("Cannot canonicalize to non-krb5 OID");
+ return GSS_S_BAD_MECH;
+ }
gss_name_t names2 = new gss_name_struct;
if (names2 == NULL) {
return GSS_S_FAILURE;
@@ -558,7 +600,7 @@
gss_acquire_cred(OM_uint32 *minor_status,
gss_const_name_t desired_name,
OM_uint32 time_req,
- const gss_OID_set desired_mechs,
+ gss_const_OID_set desired_mechs,
gss_cred_usage_t cred_usage,
gss_cred_id_t *output_cred_handle,
gss_OID_set *actual_mechs,
@@ -572,7 +614,7 @@
ts.QuadPart = 0;
cred_usage = 0;
PP("AcquireCredentialsHandle with %d %p", cred_usage, desired_mechs);
- get_oid_set_desc(desired_mechs);
+ show_oid_set(desired_mechs);
BOOLEAN reqKerberos, reqSPNEGO;
@@ -787,7 +829,7 @@
__declspec(dllexport) OM_uint32
gss_import_sec_context(OM_uint32 *minor_status,
- const gss_buffer_t interprocess_token,
+ gss_const_buffer_t interprocess_token,
gss_ctx_id_t *context_handle)
{
// Not transferable, return FAILURE
@@ -801,11 +843,11 @@
gss_const_cred_id_t initiator_cred_handle,
gss_ctx_id_t *context_handle,
gss_const_name_t target_name,
- const gss_OID mech_type,
+ gss_const_OID mech_type,
OM_uint32 req_flags,
OM_uint32 time_req,
- const gss_channel_bindings_t input_chan_bindings,
- const gss_buffer_t input_token,
+ gss_const_channel_bindings_t input_chan_bindings,
+ gss_const_buffer_t input_token,
gss_OID *actual_mech_type,
gss_buffer_t output_token,
OM_uint32 *ret_flags,
@@ -927,7 +969,6 @@
&lifeTime);
if (!SEC_SUCCESS(ss)) {
- // TODO: seems NativeGSSContext has not failed here.
PP("InitializeSecurityContext failed");
goto err;
}
@@ -983,8 +1024,8 @@
gss_accept_sec_context(OM_uint32 *minor_status,
gss_ctx_id_t *context_handle,
gss_const_cred_id_t acceptor_cred_handle,
- const gss_buffer_t input_token,
- const gss_channel_bindings_t input_chan_bindings,
+ gss_const_buffer_t input_token,
+ gss_const_channel_bindings_t input_chan_bindings,
gss_name_t *src_name,
gss_OID *mech_type,
gss_buffer_t output_token,
@@ -1168,13 +1209,13 @@
gss_get_mic(OM_uint32 *minor_status,
gss_const_ctx_id_t context_handle,
gss_qop_t qop_req,
- const gss_buffer_t message_buffer,
+ gss_const_buffer_t message_buffer,
gss_buffer_t msg_token)
{
PP(">>>> Calling gss_get_mic...");
- CHECK_CONTEXT(context_handle);
- CHECK_BUFFER(message_buffer);
- CHECK_OUTPUT(msg_token);
+ CHECK_CONTEXT(context_handle)
+ CHECK_BUFFER(message_buffer)
+ CHECK_OUTPUT(msg_token)
SECURITY_STATUS ss;
SecBufferDesc buffDesc;
@@ -1208,14 +1249,14 @@
__declspec(dllexport) OM_uint32
gss_verify_mic(OM_uint32 *minor_status,
gss_const_ctx_id_t context_handle,
- const gss_buffer_t message_buffer,
- const gss_buffer_t token_buffer,
+ gss_const_buffer_t message_buffer,
+ gss_const_buffer_t token_buffer,
gss_qop_t *qop_state)
{
PP(">>>> Calling gss_verify_mic...");
- CHECK_CONTEXT(context_handle);
- CHECK_BUFFER(message_buffer);
- CHECK_BUFFER(token_buffer);
+ CHECK_CONTEXT(context_handle)
+ CHECK_BUFFER(message_buffer)
+ CHECK_BUFFER(token_buffer)
SECURITY_STATUS ss;
SecBufferDesc buffDesc;
@@ -1253,14 +1294,14 @@
gss_const_ctx_id_t context_handle,
int conf_req_flag,
gss_qop_t qop_req,
- const gss_buffer_t input_message_buffer,
+ gss_const_buffer_t input_message_buffer,
int *conf_state,
gss_buffer_t output_message_buffer)
{
PP(">>>> Calling gss_wrap...");
- CHECK_CONTEXT(context_handle);
- CHECK_BUFFER(input_message_buffer);
- CHECK_OUTPUT(output_message_buffer);
+ CHECK_CONTEXT(context_handle)
+ CHECK_BUFFER(input_message_buffer)
+ CHECK_OUTPUT(output_message_buffer)
SECURITY_STATUS ss;
SecBufferDesc buffDesc;
@@ -1323,15 +1364,15 @@
__declspec(dllexport) OM_uint32
gss_unwrap(OM_uint32 *minor_status,
gss_const_ctx_id_t context_handle,
- const gss_buffer_t input_message_buffer,
+ gss_const_buffer_t input_message_buffer,
gss_buffer_t output_message_buffer,
int *conf_state,
gss_qop_t *qop_state)
{
PP(">>>> Calling gss_unwrap...");
- CHECK_CONTEXT(context_handle);
- CHECK_BUFFER(input_message_buffer);
- CHECK_OUTPUT(output_message_buffer);
+ CHECK_CONTEXT(context_handle)
+ CHECK_BUFFER(input_message_buffer)
+ CHECK_OUTPUT(output_message_buffer)
SECURITY_STATUS ss;
SecBufferDesc buffDesc;
@@ -1417,11 +1458,11 @@
__declspec(dllexport) OM_uint32
gss_inquire_names_for_mech(OM_uint32 *minor_status,
- const gss_OID mechanism,
+ gss_const_OID mechanism,
gss_OID_set *name_types)
{
PP(">>>> Calling gss_inquire_names_for_mech...");
- CHECK_OID(mechanism);
+ CHECK_OID(mechanism)
if (gss_create_empty_oid_set(minor_status, name_types)) {
return GSS_S_FAILURE;
@@ -1445,12 +1486,12 @@
__declspec(dllexport) OM_uint32
gss_add_oid_set_member(OM_uint32 *minor_status,
- const gss_OID member_oid,
+ gss_const_OID member_oid,
gss_OID_set *oid_set)
{
PP(">>>> Calling gss_add_oid_set_member...");
- CHECK_OID(member_oid);
- CHECK_OUTPUT(oid_set);
+ CHECK_OID(member_oid)
+ CHECK_OUTPUT(oid_set)
int count = (int)(*oid_set)->count;
@@ -1490,7 +1531,7 @@
gss_display_status(OM_uint32 *minor_status,
OM_uint32 status_value,
int status_type,
- const gss_OID mech_type,
+ gss_const_OID mech_type,
OM_uint32 *message_context,
gss_buffer_t status_string)
{
@@ -1526,7 +1567,7 @@
gss_OID_set *oid_set)
{
PP(">>>> Calling gss_create_empty_oid_set...");
- CHECK_OUTPUT(oid_set);
+ CHECK_OUTPUT(oid_set)
if (*oid_set = new gss_OID_set_desc) {
memset(*oid_set, 0, sizeof(gss_OID_set_desc));
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -119,25 +119,41 @@
try {
// remembers the nest level of elements to know when we are done.
int depth=0;
+ boolean startedAtDocument = false;
// skip over START_DOCUMENT
int event = staxStreamReader.getEventType();
if (event == XMLStreamConstants.START_DOCUMENT) {
+ startedAtDocument = true;
event = staxStreamReader.next();
}
- // If not a START_ELEMENT (e.g., a DTD), skip to next tag
- if (event != XMLStreamConstants.START_ELEMENT) {
- event = staxStreamReader.nextTag();
- // An error if a START_ELEMENT isn't found now
- if (event != XMLStreamConstants.START_ELEMENT) {
- throw new IllegalStateException("The current event is " +
- "not START_ELEMENT\n but" + event);
+ handleStartDocument();
+
+ // Handle the prolog: http://www.w3.org/TR/REC-xml/#NT-prolog
+ while (event != XMLStreamConstants.START_ELEMENT) {
+ switch (event) {
+ case XMLStreamConstants.CHARACTERS :
+ handleCharacters();
+ break;
+ case XMLStreamConstants.PROCESSING_INSTRUCTION :
+ handlePI();
+ break;
+ case XMLStreamConstants.COMMENT :
+ handleComment();
+ break;
+ case XMLStreamConstants.DTD :
+ handleDTD();
+ break;
+ case XMLStreamConstants.SPACE :
+ handleSpace();
+ break;
+ default :
+ throw new InternalError("processing prolog event: " + event);
}
+ event=staxStreamReader.next();
}
- handleStartDocument();
-
do {
// These are all of the events listed in the javadoc for
// XMLEvent.
@@ -191,6 +207,29 @@
event=staxStreamReader.next();
} while (depth!=0);
+ if (startedAtDocument) {
+ // Handle the Misc (http://www.w3.org/TR/REC-xml/#NT-Misc) that can follow the document element
+ while (event != XMLStreamConstants.END_DOCUMENT) {
+ switch (event) {
+ case XMLStreamConstants.CHARACTERS :
+ handleCharacters();
+ break;
+ case XMLStreamConstants.PROCESSING_INSTRUCTION :
+ handlePI();
+ break;
+ case XMLStreamConstants.COMMENT :
+ handleComment();
+ break;
+ case XMLStreamConstants.SPACE :
+ handleSpace();
+ break;
+ default :
+ throw new InternalError("processing misc event after document element: " + event);
+ }
+ event=staxStreamReader.next();
+ }
+ }
+
handleEndDocument();
} catch (SAXException e) {
throw new XMLStreamException(e);
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,6 @@
cvc-complex-type.2.4.b = cvc-complex-type.2.4.b: \u8981\u7D20''{0}''\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u4E0D\u5B8C\u5168\u3067\u3059\u3002''{1}''\u306E\u3044\u305A\u308C\u304B\u304C\u5FC5\u8981\u3067\u3059\u3002
cvc-complex-type.2.4.c = cvc-complex-type.2.4.c: \u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u306E\u4E00\u81F4\u306F\u53B3\u5BC6\u3067\u3059\u304C\u3001\u8981\u7D20''{0}''\u3067\u5BA3\u8A00\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002
cvc-complex-type.2.4.d = cvc-complex-type.2.4.d: \u8981\u7D20''{0}''\u3067\u59CB\u307E\u308B\u7121\u52B9\u306A\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002\u3053\u3053\u3067\u306F\u5B50\u8981\u7D20\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002
- cvc-complex-type.2.4.d.1 = cvc-complex-type.2.4.d: \u8981\u7D20''{0}''\u3067\u59CB\u307E\u308B\u7121\u52B9\u306A\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002\u3053\u3053\u3067\u306F\u5B50\u8981\u7D20''{1}''\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002
cvc-complex-type.2.4.e = cvc-complex-type.2.4.e: ''{0}''\u306F\u73FE\u5728\u306E\u30B7\u30FC\u30B1\u30F3\u30B9\u3067\u6700\u5927''{2}''\u56DE\u767A\u751F\u3059\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u5236\u9650\u3092\u8D85\u3048\u307E\u3057\u305F\u3002\u3053\u3053\u3067\u306F''{1}''\u306E\u3044\u305A\u308C\u304B\u304C\u5FC5\u8981\u3067\u3059\u3002
cvc-complex-type.2.4.f = cvc-complex-type.2.4.f: ''{0}''\u306F\u73FE\u5728\u306E\u30B7\u30FC\u30B1\u30F3\u30B9\u3067\u6700\u5927''{1}''\u56DE\u767A\u751F\u3059\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u5236\u9650\u3092\u8D85\u3048\u307E\u3057\u305F\u3002\u3053\u3053\u3067\u306F\u5B50\u8981\u7D20\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002
cvc-complex-type.2.4.g = cvc-complex-type.2.4.g: \u8981\u7D20''{0}''\u3067\u59CB\u307E\u308B\u7121\u52B9\u306A\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002''{1}''\u306F\u73FE\u5728\u306E\u30B7\u30FC\u30B1\u30F3\u30B9\u3067\u5C11\u306A\u304F\u3068\u3082''{2}''\u56DE\u767A\u751F\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u5236\u7D04\u3092\u6E80\u305F\u3059\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u304C\u3082\u30461\u3064\u5FC5\u8981\u3067\u3059\u3002
@@ -259,14 +258,14 @@
rcase-MapAndSum.2 = rcase-MapAndSum.2: \u30B0\u30EB\u30FC\u30D7\u306E\u51FA\u73FE\u7BC4\u56F2({0},{1})\u304C\u30D9\u30FC\u30B9\u30FB\u30B0\u30EB\u30FC\u30D7\u306E\u51FA\u73FE\u7BC4\u56F2({2},{3})\u306E\u6709\u52B9\u306A\u5236\u9650\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NameAndTypeOK.1 = rcase-NameAndTypeOK.1: \u8981\u7D20\u306B\u7570\u306A\u308B\u540D\u524D\u3084\u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9\u304C\u542B\u307E\u308C\u307E\u3059: \u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9''{1}''\u306E\u8981\u7D20''{0}''\u304A\u3088\u3073\u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9''{3}''\u306E\u8981\u7D20''{2}''\u3067\u3059\u3002
rcase-NameAndTypeOK.2 = rcase-NameAndTypeOK.2: '{'term'}'\u304C\u8981\u7D20\u5BA3\u8A00''{0}''\u3067\u3042\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u30A8\u30E9\u30FC\u3002\u8981\u7D20\u5BA3\u8A00\u306E'{'nillable'}'\u306Ftrue\u3067\u3059\u304C\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306B\u306F'{'nillable'}'\u304Cfalse\u306E\u8981\u7D20\u5BA3\u8A00\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002
- rcase-NameAndTypeOK.3 = rcase-NameAndTypeOK.3: '{'term'}'\u304C\u8981\u7D20\u5BA3\u8A00''{0}''\u3067\u3042\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u30A8\u30E9\u30FC\u3002\u51FA\u73FE\u7BC4\u56F2({1},{2})\u306F\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u7BC4\u56F2({3},{4}\u306E\u6709\u52B9\u306A\u5236\u9650\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
+ rcase-NameAndTypeOK.3 = rcase-NameAndTypeOK.3: '{'term'}'\u304C\u8981\u7D20\u5BA3\u8A00''{0}''\u3067\u3042\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u30A8\u30E9\u30FC\u3002\u51FA\u73FE\u7BC4\u56F2({1},{2})\u306F\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u7BC4\u56F2({3},{4})\u306E\u6709\u52B9\u306A\u5236\u9650\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NameAndTypeOK.4.a = rcase-NameAndTypeOK.4.a: \u8981\u7D20''{0}''\u306F\u56FA\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u304C\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u8981\u7D20\u306F\u5024''{1}''\u3067\u56FA\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
rcase-NameAndTypeOK.4.b = rcase-NameAndTypeOK.4.b: \u8981\u7D20''{0}''\u306F\u5024''{1}''\u3067\u56FA\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u304C\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u8981\u7D20\u306F\u5024''{2}''\u3067\u56FA\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
rcase-NameAndTypeOK.5 = rcase-NameAndTypeOK.5: \u8981\u7D20''{0}''\u306E\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u5236\u7D04\u304C\u30D9\u30FC\u30B9\u306E\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u5236\u7D04\u306E\u30B5\u30D6\u30BB\u30C3\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NameAndTypeOK.6 = rcase-NameAndTypeOK.6: \u8981\u7D20''{0}''\u306Edisallowed substitutions\u306F\u30D9\u30FC\u30B9\u306Edisallowed substitutions\u306E\u30B9\u30FC\u30D1\u30FC\u30BB\u30C3\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NameAndTypeOK.7 = rcase-NameAndTypeOK.7: \u8981\u7D20''{0}''\u306E\u30BF\u30A4\u30D7''{1}''\u306F\u3001\u30D9\u30FC\u30B9\u8981\u7D20\u306E\u30BF\u30A4\u30D7''{2}''\u304B\u3089\u5C0E\u51FA\u3055\u308C\u305F\u3082\u306E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NSCompat.1 = rcase-NSCompat.1: \u8981\u7D20''{0}''\u306B\u3001\u30D9\u30FC\u30B9\u306E\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u3067\u8A31\u53EF\u3055\u308C\u3066\u3044\u306A\u3044\u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9''{1}''\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002
- rcase-NSCompat.2 = rcase-NSCompat.2: '{'term'}'\u304C\u8981\u7D20\u5BA3\u8A00''{0}''\u3067\u3042\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u30A8\u30E9\u30FC\u3002\u51FA\u73FE\u7BC4\u56F2({1},{2})\u306F\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u7BC4\u56F2({3},{4}\u306E\u6709\u52B9\u306A\u5236\u9650\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
+ rcase-NSCompat.2 = rcase-NSCompat.2: '{'term'}'\u304C\u8981\u7D20\u5BA3\u8A00''{0}''\u3067\u3042\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u30A8\u30E9\u30FC\u3002\u51FA\u73FE\u7BC4\u56F2({1},{2})\u306F\u3001\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7\u306E\u5BFE\u5FDC\u3059\u308B\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u306E\u7BC4\u56F2({3},{4})\u306E\u6709\u52B9\u306A\u5236\u9650\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NSRecurseCheckCardinality.1 = rcase-NSRecurseCheckCardinality.1: \u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u9593\u306B\u5B8C\u5168\u306A\u6A5F\u80FD\u30DE\u30C3\u30D4\u30F3\u30B0\u304C\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NSRecurseCheckCardinality.2 = rcase-NSRecurseCheckCardinality.2: \u30B0\u30EB\u30FC\u30D7\u306E\u51FA\u73FE\u7BC4\u56F2({0},{1})\u304C\u30D9\u30FC\u30B9\u306E\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u306E\u7BC4\u56F2({2},{3})\u306E\u6709\u52B9\u306A\u5236\u9650\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
rcase-NSSubset.1 = rcase-NSSubset.1: \u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u304C\u3001\u30D9\u30FC\u30B9\u306E\u5BFE\u5FDC\u3059\u308B\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u306E\u30B5\u30D6\u30BB\u30C3\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
@@ -311,15 +310,15 @@
EmptyTargetNamespace = EmptyTargetNamespace: \u30B9\u30AD\u30FC\u30DE\u30FB\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8''{0}''\u3067\u306F\u3001''targetNamespace''\u5C5E\u6027\u306E\u5024\u3092\u7A7A\u306E\u6587\u5B57\u5217\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
FacetValueFromBase = FacetValueFromBase: \u30BF\u30A4\u30D7''{0}''\u306E\u5BA3\u8A00\u3067\u306F\u3001\u30D5\u30A1\u30BB\u30C3\u30C8''{2}''\u306E\u5024''{1}''\u306F\u30D9\u30FC\u30B9\u30FB\u30BF\u30A4\u30D7''{3}''\u306E\u5024\u7A7A\u9593\u304B\u3089\u306E\u3082\u306E\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
FixedFacetValue = FixedFacetValue: {3}\u306E\u5B9A\u7FA9\u3067\u306F\u30D5\u30A1\u30BB\u30C3\u30C8''{0}''\u306E\u5024''{1}''\u306F\u7121\u52B9\u3067\u3059\u3002\u3053\u308C\u306F\u3001''{0}''\u306E\u5024\u304C\u7956\u5148\u30BF\u30A4\u30D7\u306E\u3044\u305A\u308C\u304B\u3067''{2}''\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u304A\u308A\u3001'{'fixed'}' = true\u3067\u3042\u308B\u305F\u3081\u3067\u3059\u3002
- InvalidRegex = InvalidRegex: pattern\u306E\u5024''{0}''\u306F\u7121\u52B9\u306A\u6B63\u898F\u8868\u73FE\u3067\u3059\u3002\u5217''{2}''\u3067''{1}''\u30A8\u30E9\u30FC\u304C\u5831\u544A\u3055\u308C\u307E\u3057\u305F\u3002
- MaxOccurLimit = \u73FE\u5728\u306E\u30D1\u30FC\u30B5\u30FC\u306E\u69CB\u6210\u3067\u306F\u3001maxOccurs\u5C5E\u6027\u306B\u5024{0}\u3088\u308A\u5927\u304D\u3044\u5024\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002
+ InvalidRegex = InvalidRegex: pattern\u306E\u5024''{0}''\u306F\u7121\u52B9\u306A\u6B63\u898F\u8868\u73FE\u3067\u3059\u3002\u5831\u544A\u3055\u308C\u305F\u30A8\u30E9\u30FC: ''{1}''\u3002
+ MaxOccurLimit = \u30D1\u30FC\u30B5\u30FC\u306E\u73FE\u5728\u306E\u69CB\u6210\u3067\u306F\u3001{0}\u500B\u3092\u8D85\u3048\u308B\u30CE\u30FC\u30C9\u3092\u542B\u3081\u308B\u305F\u3081\u306B\u8907\u5408\u30BF\u30A4\u30D7\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u30FB\u30E2\u30C7\u30EB\u3092\u62E1\u5F35\u3059\u308B\u3053\u3068\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093\u3002
PublicSystemOnNotation = PublicSystemOnNotation: \u8981\u7D20''notation''\u306B\u306F''public''\u304A\u3088\u3073''system''\u306E\u5C11\u306A\u304F\u3068\u30821\u3064\u304C\u5FC5\u8981\u3067\u3059\u3002
SchemaLocation = SchemaLocation: schemaLocation\u306E\u5024''{0}''\u306B\u306F\u5076\u6570\u500B\u306EURI\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
TargetNamespace.1 = TargetNamespace.1: \u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9''{0}''\u304C\u5FC5\u8981\u3067\u3059\u304C\u3001\u30B9\u30AD\u30FC\u30DE\u30FB\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9\u306F''{1}''\u3067\u3059\u3002
TargetNamespace.2 = TargetNamespace.2: \u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9\u306F\u5FC5\u8981\u3042\u308A\u307E\u305B\u3093\u304C\u3001\u30B9\u30AD\u30FC\u30DE\u30FB\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B''{1}''\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30CD\u30FC\u30E0\u30B9\u30DA\u30FC\u30B9\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002
UndeclaredEntity = UndeclaredEntity: \u30A8\u30F3\u30C6\u30A3\u30C6\u30A3''{0}''\u304C\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
UndeclaredPrefix = UndeclaredPrefix: ''{0}''\u3092QName\u3068\u3057\u3066\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002\u63A5\u982D\u8F9E''{1}''\u304C\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
-
+ FacetsContradict = FacetsContradict: simpleType\u5B9A\u7FA9''{2}''\u3067\u306F\u3001\u5217\u6319\u5024''{0}''\u304C''{1}''\u30D5\u30A1\u30BB\u30C3\u30C8\u306E\u5024\u3068\u77DB\u76FE\u3057\u307E\u3059\u3002
# JAXP 1.2 schema source property errors
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,6 @@
cvc-complex-type.2.4.b = cvc-complex-type.2.4.b: \u5143\u7D20 ''{0}'' \u7684\u5185\u5BB9\u4E0D\u5B8C\u6574\u3002\u5E94\u4E3A ''{1}'' \u4E4B\u4E00\u3002
cvc-complex-type.2.4.c = cvc-complex-type.2.4.c: \u901A\u914D\u7B26\u7684\u5339\u914D\u5F88\u5168\u9762, \u4F46\u65E0\u6CD5\u627E\u5230\u5143\u7D20 ''{0}'' \u7684\u58F0\u660E\u3002
cvc-complex-type.2.4.d = cvc-complex-type.2.4.d: \u53D1\u73B0\u4E86\u4EE5\u5143\u7D20 ''{0}'' \u5F00\u5934\u7684\u65E0\u6548\u5185\u5BB9\u3002\u6B64\u5904\u4E0D\u5E94\u542B\u6709\u5B50\u5143\u7D20\u3002
- cvc-complex-type.2.4.d.1 = cvc-complex-type.2.4.d: \u53D1\u73B0\u4E86\u4EE5\u5143\u7D20 ''{0}'' \u5F00\u5934\u7684\u65E0\u6548\u5185\u5BB9\u3002\u6B64\u5904\u4E0D\u5E94\u542B\u6709\u5B50\u5143\u7D20 ''{1}''\u3002
cvc-complex-type.2.4.e = cvc-complex-type.2.4.e: ''{0}'' \u5728\u5F53\u524D\u5E8F\u5217\u4E2D\u6700\u591A\u53EF\u4EE5\u51FA\u73B0 ''{2}'' \u6B21\u3002\u5DF2\u8D85\u8FC7\u6B64\u9650\u5236\u3002\u6B64\u5904\u9884\u671F\u4E3A ''{1}'' \u4E4B\u4E00\u3002
cvc-complex-type.2.4.f = cvc-complex-type.2.4.f: ''{0}'' \u5728\u5F53\u524D\u5E8F\u5217\u4E2D\u6700\u591A\u53EF\u4EE5\u51FA\u73B0 ''{1}'' \u6B21\u3002\u5DF2\u8D85\u8FC7\u6B64\u9650\u5236\u3002\u6B64\u5904\u9884\u671F\u6CA1\u6709\u5B50\u5143\u7D20\u3002
cvc-complex-type.2.4.g = cvc-complex-type.2.4.g: \u53D1\u73B0\u4E86\u4EE5\u5143\u7D20 ''{0}'' \u5F00\u5934\u7684\u65E0\u6548\u5185\u5BB9\u3002''{1}'' \u9884\u671F\u5728\u5F53\u524D\u5E8F\u5217\u4E2D\u6700\u5C11\u51FA\u73B0 ''{2}'' \u6B21\u3002\u53E6\u5916\u4E00\u4E2A\u5B9E\u4F8B\u5FC5\u987B\u6EE1\u8DB3\u6B64\u7EA6\u675F\u6761\u4EF6\u3002
@@ -259,14 +258,14 @@
rcase-MapAndSum.2 = rcase-MapAndSum.2: \u7EC4\u7684\u53D1\u751F\u8303\u56F4 ({0},{1}) \u4E0D\u5728\u57FA\u7EC4\u7684\u53D1\u751F\u8303\u56F4 ({2},{3}) \u7684\u6709\u6548\u9650\u5236\u4E4B\u5185\u3002
rcase-NameAndTypeOK.1 = rcase-NameAndTypeOK.1: \u5143\u7D20\u7684\u540D\u79F0\u548C\u76EE\u6807\u540D\u79F0\u7A7A\u95F4\u4E0D\u76F8\u540C: \u540D\u79F0\u7A7A\u95F4 ''{1}'' \u4E2D\u7684\u5143\u7D20\u4E3A ''{0}'', \u540D\u79F0\u7A7A\u95F4 ''{3}'' \u4E2D\u7684\u5143\u7D20\u4E3A ''{2}''\u3002
rcase-NameAndTypeOK.2 = rcase-NameAndTypeOK.2: \u5176 '{'term'}' \u4E3A\u5143\u7D20\u58F0\u660E ''{0}'' \u7684\u7C92\u5B50\u9519\u8BEF\u3002\u5143\u7D20\u58F0\u660E\u7684 '{'nillable'}' \u4E3A\u201C\u771F\u201D, \u4F46\u57FA\u7C7B\u578B\u4E2D\u5BF9\u5E94\u7684\u7C92\u5B50\u5177\u6709 '{'nillable'}' \u4E3A\u201C\u5047\u201D\u7684\u5143\u7D20\u58F0\u660E\u3002
- rcase-NameAndTypeOK.3 = rcase-NameAndTypeOK.3: \u5176 '{'term'}' \u4E3A\u5143\u7D20\u58F0\u660E ''{0}'' \u7684\u7C92\u5B50\u9519\u8BEF\u3002\u8BE5\u7C92\u5B50\u7684\u53D1\u751F\u8303\u56F4 ({1},{2}) \u4E0D\u5728\u57FA\u7C7B\u578B\u4E2D\u5BF9\u5E94\u7C92\u5B50\u7684\u8303\u56F4 ({3},{4}) \u7684\u6709\u6548\u9650\u5236\u4E4B\u5185\u3002
+ rcase-NameAndTypeOK.3 = rcase-NameAndTypeOK.3\uFF1A\u5176 '{'term'}' \u4E3A\u5143\u7D20\u58F0\u660E ''{0}'' \u7684\u7C92\u5B50\u9519\u8BEF\u3002\u8BE5\u7C92\u5B50\u7684\u53D1\u751F\u8303\u56F4 ({1},{2}) \u4E0D\u5728\u57FA\u7C7B\u578B\u4E2D\u5BF9\u5E94\u7C92\u5B50\u7684\u8303\u56F4 ({3},{4}) \u7684\u6709\u6548\u9650\u5236\u4E4B\u5185\u3002
rcase-NameAndTypeOK.4.a = rcase-NameAndTypeOK.4.a: \u5143\u7D20 ''{0}'' \u4E0D\u662F\u56FA\u5B9A\u7684, \u4F46\u57FA\u7C7B\u578B\u4E2D\u7684\u5BF9\u5E94\u5143\u7D20\u662F\u56FA\u5B9A\u7684, \u4E14\u503C\u4E3A ''{1}''\u3002
rcase-NameAndTypeOK.4.b = rcase-NameAndTypeOK.4.b: \u5143\u7D20 ''{0}'' \u662F\u56FA\u5B9A\u7684, \u4E14\u503C\u4E3A ''{1}'', \u4F46\u57FA\u7C7B\u578B\u4E2D\u7684\u5BF9\u5E94\u5143\u7D20\u662F\u56FA\u5B9A\u7684, \u4E14\u503C\u4E3A ''{2}''\u3002
rcase-NameAndTypeOK.5 = rcase-NameAndTypeOK.5: \u5143\u7D20 ''{0}'' \u7684\u8EAB\u4EFD\u7EA6\u675F\u6761\u4EF6\u4E0D\u662F\u57FA\u7C7B\u578B\u4E2D\u90A3\u4E9B\u8EAB\u4EFD\u7EA6\u675F\u6761\u4EF6\u7684\u5B50\u96C6\u3002
rcase-NameAndTypeOK.6 = rcase-NameAndTypeOK.6: \u5143\u7D20 ''{0}'' \u7684\u4E0D\u63A5\u53D7\u66FF\u4EE3\u4E0D\u662F\u57FA\u5143\u7D20\u4E2D\u4E0D\u63A5\u53D7\u66FF\u4EE3\u7684\u8D85\u96C6\u3002
rcase-NameAndTypeOK.7 = rcase-NameAndTypeOK.7: \u5143\u7D20 ''{0}'' \u7684\u7C7B\u578B ''{1}'' \u4E0D\u662F\u4ECE\u57FA\u5143\u7D20\u7684\u7C7B\u578B ''{2}'' \u6D3E\u751F\u7684\u3002
rcase-NSCompat.1 = rcase-NSCompat.1: \u5143\u7D20 ''{0}'' \u5177\u6709\u540D\u79F0\u7A7A\u95F4 ''{1}'', \u5728\u57FA\u5143\u7D20\u4E2D, \u901A\u914D\u7B26\u4E0D\u5141\u8BB8\u5177\u6709\u6B64\u540D\u79F0\u7A7A\u95F4\u3002
- rcase-NSCompat.2 = rcase-NSCompat.2: \u5176 '{'term'}' \u4E3A\u5143\u7D20\u58F0\u660E ''{0}'' \u7684\u7C92\u5B50\u9519\u8BEF\u3002\u8BE5\u7C92\u5B50\u7684\u53D1\u751F\u8303\u56F4 ({1},{2}) \u4E0D\u5728\u57FA\u7C7B\u578B\u4E2D\u5BF9\u5E94\u7C92\u5B50\u7684\u8303\u56F4 ({3},{4}) \u7684\u6709\u6548\u9650\u5236\u4E4B\u5185\u3002
+ rcase-NSCompat.2 = rcase-NSCompat.2\uFF1A\u5176 '{'term'}' \u4E3A\u5143\u7D20\u58F0\u660E ''{0}'' \u7684\u7C92\u5B50\u9519\u8BEF\u3002\u8BE5\u7C92\u5B50\u7684\u53D1\u751F\u8303\u56F4 ({1},{2}) \u4E0D\u5728\u57FA\u7C7B\u578B\u4E2D\u5BF9\u5E94\u7C92\u5B50\u7684\u8303\u56F4 ({3},{4}) \u7684\u6709\u6548\u9650\u5236\u4E4B\u5185\u3002
rcase-NSRecurseCheckCardinality.1 = rcase-NSRecurseCheckCardinality.1: \u7C92\u5B50\u4E4B\u95F4\u6CA1\u6709\u5B8C\u6574\u7684\u529F\u80FD\u6620\u5C04\u3002
rcase-NSRecurseCheckCardinality.2 = rcase-NSRecurseCheckCardinality.2: \u7EC4\u7684\u53D1\u751F\u8303\u56F4 ({0},{1}) \u4E0D\u5728\u57FA\u672C\u901A\u914D\u7B26\u8303\u56F4 ({2},{3}) \u7684\u6709\u6548\u9650\u5236\u4E4B\u5185\u3002
rcase-NSSubset.1 = rcase-NSSubset.1: \u901A\u914D\u7B26\u4E0D\u662F\u57FA\u672C\u901A\u914D\u7B26\u4E2D\u5BF9\u5E94\u901A\u914D\u7B26\u7684\u5B50\u96C6\u3002
@@ -311,15 +310,15 @@
EmptyTargetNamespace = EmptyTargetNamespace: \u5728\u65B9\u6848\u6587\u6863 ''{0}'' \u4E2D, ''targetNamespace'' \u5C5E\u6027\u7684\u503C\u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32\u3002
FacetValueFromBase = FacetValueFromBase: \u5728\u7C7B\u578B ''{0}'' \u7684\u58F0\u660E\u4E2D, \u9762 ''{2}'' \u7684\u503C ''{1}'' \u5FC5\u987B\u6765\u81EA\u57FA\u7C7B\u578B\u7684\u503C\u7A7A\u95F4 ''{3}''\u3002
FixedFacetValue = FixedFacetValue: \u5728 {3} \u7684\u5B9A\u4E49\u4E2D, \u9762 ''{0}'' \u7684\u503C ''{1}'' \u65E0\u6548, \u56E0\u4E3A ''{0}'' \u7684\u503C\u5DF2\u5728\u539F\u7EA7\u7C7B\u578B\u4E4B\u4E00\u4E2D\u8BBE\u7F6E\u4E3A ''{2}'', \u5E76\u4E14 '{'fixed'}' = true\u3002
- InvalidRegex = InvalidRegex: \u6A21\u5F0F\u503C ''{0}'' \u4E0D\u662F\u6709\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u3002\u5217 ''{2}'' \u4E0A\u62A5\u544A\u7684\u9519\u8BEF\u4E3A: ''{1}''\u3002
- MaxOccurLimit = \u89E3\u6790\u5668\u7684\u5F53\u524D\u914D\u7F6E\u4E0D\u5141\u8BB8\u5C06 maxOccurs \u5C5E\u6027\u503C\u8BBE\u7F6E\u4E3A\u5927\u4E8E\u503C {0}\u3002
+ InvalidRegex = InvalidRegex\uFF1A\u6A21\u5F0F\u503C ''{0}'' \u4E0D\u662F\u6709\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u3002\u62A5\u544A\u7684\u9519\u8BEF\u4E3A\uFF1A''{1}''\u3002
+ MaxOccurLimit = \u89E3\u6790\u5668\u7684\u5F53\u524D\u914D\u7F6E\u4E0D\u5141\u8BB8\u5C06\u590D\u6742\u7C7B\u578B\u7684\u5185\u5BB9\u6A21\u578B\u6269\u5C55\u5230\u5305\u542B {0} \u4E2A\u4EE5\u4E0A\u8282\u70B9\u3002
PublicSystemOnNotation = PublicSystemOnNotation: \u5143\u7D20 ''notation'' \u4E2D\u5FC5\u987B\u81F3\u5C11\u51FA\u73B0 ''public'' \u548C ''system'' \u4E2D\u7684\u4E00\u4E2A\u3002
SchemaLocation = SchemaLocation: schemaLocation \u503C ''{0}'' \u5FC5\u987B\u5177\u6709\u5076\u6570\u4E2A URI\u3002
TargetNamespace.1 = TargetNamespace.1: \u5E94\u4E3A\u540D\u79F0\u7A7A\u95F4 ''{0}'', \u4F46\u65B9\u6848\u6587\u6863\u7684\u76EE\u6807\u540D\u79F0\u7A7A\u95F4\u4E3A ''{1}''\u3002
TargetNamespace.2 = TargetNamespace.2: \u4E0D\u9700\u8981\u540D\u79F0\u7A7A\u95F4, \u4F46\u6B64\u65B9\u6848\u6587\u6863\u7684\u76EE\u6807\u540D\u79F0\u7A7A\u95F4\u4E3A ''{1}''\u3002
UndeclaredEntity = UndeclaredEntity: \u672A\u58F0\u660E\u5B9E\u4F53 ''{0}''\u3002
UndeclaredPrefix = UndeclaredPrefix: \u65E0\u6CD5\u5C06 ''{0}'' \u89E3\u6790\u4E3A\u9650\u5B9A\u540D: \u672A\u58F0\u660E\u524D\u7F00 ''{1}''\u3002
-
+ FacetsContradict = FacetsContradict\uFF1A\u5BF9\u4E8E simpleType \u5B9A\u4E49 ''{2}''\uFF0C\u679A\u4E3E\u503C ''{0}'' \u4E0E ''{1}'' \u9762\u7684\u503C\u51B2\u7A81\u3002
# JAXP 1.2 schema source property errors
--- a/src/jdk.compiler/share/classes/com/sun/tools/doclint/resources/doclint_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/doclint/resources/doclint_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -63,8 +63,9 @@
dc.tag.a.within.a = <a>\u306B\u5C55\u958B\u3055\u308C\u308B<a>\u5185\u306E{0}\u30BF\u30B0
dc.tag.end.not.permitted = \u7121\u52B9\u306A\u7D42\u4E86\u30BF\u30B0: </{0}>
dc.tag.end.unexpected = \u4E88\u671F\u3057\u306A\u3044\u7D42\u4E86\u30BF\u30B0: </{0}>
-dc.tag.header.sequence.1 = \u30D8\u30C3\u30C0\u30FC\u306E\u6307\u5B9A\u9806\u5E8F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093: <{0}>
-dc.tag.header.sequence.2 = \u30D8\u30C3\u30C0\u30FC\u306E\u6307\u5B9A\u9806\u5E8F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093: <{0}>
+dc.tag.heading.sequence.1 = \u6697\u9ED9\u7684\u306A\u5148\u884C\u898B\u51FA\u3057: <H{1}>\u3068\u306E\u6BD4\u8F03\u3067\u3001\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u898B\u51FA\u3057: <{0}>\u306E\u9806\u5E8F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
+dc.tag.heading.sequence.2 = \u524D\u306E\u898B\u51FA\u3057: <{1}>\u3068\u306E\u6BD4\u8F03\u3067\u3001\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u898B\u51FA\u3057: <{0}>\u306E\u9806\u5E8F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
+dc.tag.heading.sequence.3 = \u6697\u9ED9\u7684\u306A\u5148\u884C\u898B\u51FA\u3057: <H{1}>\u3068\u306E\u6BD4\u8F03\u3067\u3001\u4E88\u671F\u3057\u306A\u3044\u898B\u51FA\u3057: <{0}>\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059
dc.tag.nested.not.allowed=\u30CD\u30B9\u30C8\u3057\u305F\u30BF\u30B0\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093: <{0}>
dc.tag.not.allowed.here = \u3053\u3053\u3067\u306F\u30BF\u30B0\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093: <{0}>
dc.tag.not.allowed = \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u3067\u4F7F\u7528\u3067\u304D\u306A\u3044\u8981\u7D20\u3067\u3059: <{0}>
--- a/src/jdk.compiler/share/classes/com/sun/tools/doclint/resources/doclint_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/doclint/resources/doclint_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -63,8 +63,9 @@
dc.tag.a.within.a = {0} \u6807\u8BB0\uFF0C\u5176\u6269\u5C55\u5230 <a>\uFF0C\u4F4D\u4E8E <a> \u5185
dc.tag.end.not.permitted = \u65E0\u6548\u7684\u7ED3\u675F\u6807\u8BB0: </{0}>
dc.tag.end.unexpected = \u610F\u5916\u7684\u7ED3\u675F\u6807\u8BB0: </{0}>
-dc.tag.header.sequence.1 = \u4F7F\u7528\u7684\u6807\u9898\u8D85\u51FA\u5E8F\u5217: <{0}>
-dc.tag.header.sequence.2 = \u4F7F\u7528\u7684\u6807\u9898\u8D85\u51FA\u5E8F\u5217: <{0}>
+dc.tag.heading.sequence.1 = \u4F7F\u7528\u7684\u6807\u9898\u8D85\u51FA\u5E8F\u5217\uFF1A<{0}>\uFF08\u4E0E\u9690\u5F0F\u524D\u5BFC\u6807\u9898\u76F8\u6BD4\uFF1A<H{1}>\uFF09
+dc.tag.heading.sequence.2 = \u4F7F\u7528\u7684\u6807\u9898\u8D85\u51FA\u5E8F\u5217\uFF1A<{0}>\uFF08\u4E0E\u524D\u4E00\u4E2A\u6807\u9898\u76F8\u6BD4\uFF1A<{1}>\uFF09
+dc.tag.heading.sequence.3 = \u4F7F\u7528\u4E86\u610F\u5916\u7684\u6807\u9898\uFF1A<{0}>\uFF08\u4E0E\u9690\u5F0F\u524D\u5BFC\u6807\u9898\u76F8\u6BD4\uFF1A<H{1}>\uFF09
dc.tag.nested.not.allowed=\u4E0D\u5141\u8BB8\u4F7F\u7528\u5D4C\u5957\u6807\u8BB0: <{0}>
dc.tag.not.allowed.here = \u6B64\u5904\u4E0D\u5141\u8BB8\u4F7F\u7528\u6807\u8BB0: <{0}>
dc.tag.not.allowed = \u6587\u6863\u6CE8\u91CA\u4E2D\u4E0D\u5141\u8BB8\u4F7F\u7528\u5143\u7D20: <{0}>
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java Thu Jul 11 15:40:29 2019 +0530
@@ -28,13 +28,12 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.BreakIterator;
-import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.WeakHashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
@@ -60,9 +59,8 @@
import com.sun.source.doctree.DocCommentTree;
import com.sun.source.doctree.DocTree;
-import com.sun.source.doctree.EndElementTree;
-import com.sun.source.doctree.StartElementTree;
import com.sun.source.tree.CatchTree;
+import com.sun.source.tree.ClassTree;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.Scope;
import com.sun.source.tree.Tree;
@@ -71,13 +69,11 @@
import com.sun.source.util.DocTreeScanner;
import com.sun.source.util.DocTrees;
import com.sun.source.util.JavacTask;
-import com.sun.source.util.SimpleDocTreeVisitor;
import com.sun.source.util.TreePath;
import com.sun.tools.javac.code.Flags;
import com.sun.tools.javac.code.Scope.NamedImportScope;
import com.sun.tools.javac.code.Scope.StarImportScope;
import com.sun.tools.javac.code.Scope.WriteableScope;
-import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Symbol.MethodSymbol;
import com.sun.tools.javac.code.Symbol.ModuleSymbol;
@@ -94,11 +90,13 @@
import com.sun.tools.javac.code.Types.TypeRelation;
import com.sun.tools.javac.comp.Attr;
import com.sun.tools.javac.comp.AttrContext;
+import com.sun.tools.javac.comp.Check;
import com.sun.tools.javac.comp.Enter;
import com.sun.tools.javac.comp.Env;
import com.sun.tools.javac.comp.MemberEnter;
import com.sun.tools.javac.comp.Modules;
import com.sun.tools.javac.comp.Resolve;
+import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.file.BaseFileManager;
import com.sun.tools.javac.model.JavacElements;
import com.sun.tools.javac.parser.DocCommentParser;
@@ -133,6 +131,7 @@
import com.sun.tools.javac.tree.TreeCopier;
import com.sun.tools.javac.tree.TreeInfo;
import com.sun.tools.javac.tree.TreeMaker;
+import com.sun.tools.javac.tree.TreeScanner;
import com.sun.tools.javac.util.Abort;
import com.sun.tools.javac.util.Assert;
import com.sun.tools.javac.util.Context;
@@ -171,6 +170,7 @@
private Log log;
private MemberEnter memberEnter;
private Attr attr;
+ private Check chk;
private TreeMaker treeMaker;
private JavacElements elements;
private JavacTaskImpl javacTaskImpl;
@@ -218,6 +218,7 @@
private void init(Context context) {
modules = Modules.instance(context);
attr = Attr.instance(context);
+ chk = Check.instance(context);
enter = Enter.instance(context);
elements = JavacElements.instance(context);
log = Log.instance(context);
@@ -915,13 +916,13 @@
try {
Assert.check(method.body == tree);
method.body = copier.copy((JCBlock)tree, (JCTree) path.getLeaf());
- env = attribStatToTree(method.body, env, copier.leafCopy);
+ env = attribStatToTree(method.body, env, copier.leafCopy, copier.copiedClasses);
} finally {
method.body = (JCBlock) tree;
}
} else {
JCBlock body = copier.copy((JCBlock)tree, (JCTree) path.getLeaf());
- env = attribStatToTree(body, env, copier.leafCopy);
+ env = attribStatToTree(body, env, copier.leafCopy, copier.copiedClasses);
}
return env;
}
@@ -930,7 +931,7 @@
if (field != null && field.getInitializer() == tree) {
env = memberEnter.getInitEnv(field, env);
JCExpression expr = copier.copy((JCExpression)tree, (JCTree) path.getLeaf());
- env = attribExprToTree(expr, env, copier.leafCopy);
+ env = attribExprToTree(expr, env, copier.leafCopy, copier.copiedClasses);
return env;
}
}
@@ -938,24 +939,137 @@
return (field != null) ? memberEnter.getInitEnv(field, env) : env;
}
- private Env<AttrContext> attribStatToTree(JCTree stat, Env<AttrContext>env, JCTree tree) {
+ private Env<AttrContext> attribStatToTree(JCTree stat, Env<AttrContext>env,
+ JCTree tree, Map<JCClassDecl, JCClassDecl> copiedClasses) {
JavaFileObject prev = log.useSource(env.toplevel.sourcefile);
+ Log.DiagnosticHandler diagHandler = new Log.DiscardDiagnosticHandler(log);
try {
- return attr.attribStatToTree(stat, env, tree);
+ Env<AttrContext> result = attr.attribStatToTree(stat, env, tree);
+
+ enter.unenter(env.toplevel, stat);
+ fixLocalClassNames(copiedClasses, env);
+ return result;
} finally {
+ log.popDiagnosticHandler(diagHandler);
+ log.useSource(prev);
+ }
+ }
+
+ private Env<AttrContext> attribExprToTree(JCExpression expr, Env<AttrContext>env,
+ JCTree tree, Map<JCClassDecl, JCClassDecl> copiedClasses) {
+ JavaFileObject prev = log.useSource(env.toplevel.sourcefile);
+ Log.DiagnosticHandler diagHandler = new Log.DiscardDiagnosticHandler(log);
+ try {
+ Env<AttrContext> result = attr.attribExprToTree(expr, env, tree);
+
+ enter.unenter(env.toplevel, expr);
+ fixLocalClassNames(copiedClasses, env);
+ return result;
+ } finally {
+ log.popDiagnosticHandler(diagHandler);
log.useSource(prev);
}
}
- private Env<AttrContext> attribExprToTree(JCExpression expr, Env<AttrContext>env, JCTree tree) {
- JavaFileObject prev = log.useSource(env.toplevel.sourcefile);
- try {
- return attr.attribExprToTree(expr, env, tree);
- } finally {
- log.useSource(prev);
+ /* Change the flatnames of the local and anonymous classes in the Scope to
+ * the names they would have if the whole file was attributed normally.
+ */
+ private void fixLocalClassNames(Map<JCClassDecl, JCClassDecl> copiedClasses,
+ Env<AttrContext> lastEnv) {
+ Map<JCClassDecl, Name> flatnameForClass = null;
+
+ for (Entry<JCClassDecl, JCClassDecl> e : copiedClasses.entrySet()) {
+ if (e.getKey().sym != null) {
+ Name origName;
+ if (e.getValue().sym != null) {
+ //if the source tree was already attributed, use the flatname
+ //from the source tree's Symbol:
+ origName = e.getValue().sym.flatname;
+ } else {
+ //otherwise, compute the flatnames (for source trees) as
+ //if the full source code would be attributed:
+ if (flatnameForClass == null) {
+ flatnameForClass = prepareFlatnameForClass(lastEnv);
+ }
+ origName = flatnameForClass.get(e.getValue());
+ }
+ if (origName != null) {
+ e.getKey().sym.flatname = origName;
+ }
+ }
}
}
+ /* This method computes and assigns flatnames to trees, as if they would be
+ * normally assigned during attribution of the full source code.
+ */
+ private Map<JCTree.JCClassDecl, Name> prepareFlatnameForClass(Env<AttrContext> env) {
+ Map<JCClassDecl, Name> flatNameForClass = new HashMap<>();
+ Symbol enclClass = env.enclClass.sym;
+
+ if (enclClass != null && (enclClass.flags_field & Flags.UNATTRIBUTED) != 0) {
+ ListBuffer<ClassSymbol> toClear = new ListBuffer<>();
+ new TreeScanner() {
+ Symbol owner;
+ boolean localContext;
+ @Override
+ public void visitClassDef(JCClassDecl tree) {
+ //compute the name (and ClassSymbol) which would be used
+ //for this class for full attribution
+ Symbol prevOwner = owner;
+ try {
+ ClassSymbol c;
+ if (tree.sym != null) {
+ //already entered:
+ c = tree.sym;
+ } else {
+ c = syms.defineClass(tree.name, owner);
+ if (owner.kind != TYP) {
+ //for local classes, assign the flatname
+ c.flatname = chk.localClassName(c);
+ chk.putCompiled(c);
+ toClear.add(c);
+ }
+ flatNameForClass.put(tree, c.flatname);
+ }
+ owner = c;
+ super.visitClassDef(tree);
+ } finally {
+ owner = prevOwner;
+ }
+ }
+
+ @Override
+ public void visitBlock(JCBlock tree) {
+ Symbol prevOwner = owner;
+ try {
+ owner = new MethodSymbol(0, names.empty, Type.noType, owner);
+ super.visitBlock(tree);
+ } finally {
+ owner = prevOwner;
+ }
+ }
+ @Override
+ public void visitVarDef(JCVariableDecl tree) {
+ Symbol prevOwner = owner;
+ try {
+ owner = new MethodSymbol(0, names.empty, Type.noType, owner);
+ super.visitVarDef(tree);
+ } finally {
+ owner = prevOwner;
+ }
+ }
+ }.scan(env.enclClass);
+ //revert changes done by the visitor:
+ toClear.stream().forEach(c -> {
+ chk.clearLocalClassNameIndexes(c);
+ chk.removeCompiled(c);
+ });
+ }
+
+ return flatNameForClass;
+ }
+
static JavaFileObject asJavaFileObject(FileObject fileObject) {
JavaFileObject jfo = null;
@@ -1065,6 +1179,7 @@
**/
protected static class Copier extends TreeCopier<JCTree> {
JCTree leafCopy = null;
+ private Map<JCClassDecl, JCClassDecl> copiedClasses = new HashMap<>();
protected Copier(TreeMaker M) {
super(M);
@@ -1077,6 +1192,14 @@
leafCopy = t2;
return t2;
}
+
+ @Override
+ public JCTree visitClass(ClassTree node, JCTree p) {
+ JCTree nue = super.visitClass(node, p);
+ copiedClasses.put((JCClassDecl) nue, (JCClassDecl) node);
+ return nue;
+ }
+
}
protected Copier createCopier(TreeMaker maker) {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Jul 11 15:40:29 2019 +0530
@@ -407,7 +407,7 @@
* enclClass is the flat name of the enclosing class,
* classname is the simple name of the local class
*/
- Name localClassName(ClassSymbol c) {
+ public Name localClassName(ClassSymbol c) {
Name enclFlatname = c.owner.enclClass().flatname;
String enclFlatnameStr = enclFlatname.toString();
Pair<Name, Name> key = new Pair<>(enclFlatname, c.name);
@@ -422,7 +422,7 @@
}
}
- void clearLocalClassNameIndexes(ClassSymbol c) {
+ public void clearLocalClassNameIndexes(ClassSymbol c) {
if (c.owner != null && c.owner.kind != NIL) {
localClassNameIndexes.remove(new Pair<>(
c.owner.enclClass().flatname, c.name));
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Thu Jul 11 15:40:29 2019 +0530
@@ -41,7 +41,6 @@
import com.sun.tools.javac.util.DefinedBy.Api;
import com.sun.tools.javac.util.GraphUtils.DependencyKind;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
-import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.comp.Attr.ResultInfo;
import com.sun.tools.javac.comp.Resolve.MethodResolutionPhase;
import com.sun.tools.javac.resources.CompilerProperties.Errors;
@@ -501,7 +500,7 @@
attr.attribTree(newTree, speculativeEnv, resultInfo);
return newTree;
} finally {
- new UnenterScanner(env.toplevel.modle).scan(newTree);
+ enter.unenter(env.toplevel, newTree);
log.popDiagnosticHandler(deferredDiagnosticHandler);
if (localCache != null) {
localCache.leave();
@@ -509,29 +508,6 @@
}
}
//where
-
- class UnenterScanner extends TreeScanner {
- private final ModuleSymbol msym;
-
- public UnenterScanner(ModuleSymbol msym) {
- this.msym = msym;
- }
-
- @Override
- public void visitClassDef(JCClassDecl tree) {
- ClassSymbol csym = tree.sym;
- //if something went wrong during method applicability check
- //it is possible that nested expressions inside argument expression
- //are left unchecked - in such cases there's nothing to clean up.
- if (csym == null) return;
- typeEnvs.remove(csym);
- chk.removeCompiled(csym);
- chk.clearLocalClassNameIndexes(csym);
- syms.removeClass(msym, csym.flatname);
- super.visitClassDef(tree);
- }
- }
-
static class DeferredAttrDiagHandler extends Log.DeferredDiagnosticHandler {
static class PosScanner extends TreeScanner {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Thu Jul 11 15:40:29 2019 +0530
@@ -610,4 +610,29 @@
public void newRound() {
typeEnvs.clear();
}
+
+ public void unenter(JCCompilationUnit topLevel, JCTree tree) {
+ new UnenterScanner(topLevel.modle).scan(tree);
+ }
+ class UnenterScanner extends TreeScanner {
+ private final ModuleSymbol msym;
+
+ public UnenterScanner(ModuleSymbol msym) {
+ this.msym = msym;
+ }
+
+ @Override
+ public void visitClassDef(JCClassDecl tree) {
+ ClassSymbol csym = tree.sym;
+ //if something went wrong during method applicability check
+ //it is possible that nested expressions inside argument expression
+ //are left unchecked - in such cases there's nothing to clean up.
+ if (csym == null) return;
+ typeEnvs.remove(csym);
+ chk.removeCompiled(csym);
+ chk.clearLocalClassNameIndexes(csym);
+ syms.removeClass(msym, csym.flatname);
+ super.visitClassDef(tree);
+ }
+ }
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Thu Jul 11 15:40:29 2019 +0530
@@ -1709,8 +1709,9 @@
}
break;
case VARDEF:
- if (((JCVariableDecl)block.tree).sym == sym &&
- sym.owner.kind == MTH) { //only locals are captured
+ if ((((JCVariableDecl)block.tree).sym == sym &&
+ sym.owner.kind == MTH) || //only locals are captured
+ (block.locals != null && block.locals.contains(sym))) {
return currentDepth > depth ? null : block.tree;
}
break;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -159,25 +159,23 @@
compiler.err.break.outside.switch.loop=break\u304Cswitch\u6587\u307E\u305F\u306F\u30EB\u30FC\u30D7\u306E\u5916\u306B\u3042\u308A\u307E\u3059
-compiler.err.break.missing.value=break\u306E\u5024\u304C\u3042\u308A\u307E\u305B\u3093
-
-compiler.err.break.outside.switch.expression=break\u304C\u3001\u56F2\u3093\u3067\u3044\u308Bswitch\u5F0F\u306E\u5916\u306B\u3042\u308A\u307E\u3059
-
-compiler.err.continue.outside.switch.expression=continue\u304C\u3001\u56F2\u3093\u3067\u3044\u308Bswitch\u5F0F\u306E\u5916\u306B\u3042\u308A\u307E\u3059
-
-compiler.err.return.outside.switch.expression=return\u304C\u3001\u56F2\u3093\u3067\u3044\u308Bswitch\u5F0F\u306E\u5916\u306B\u3042\u308A\u307E\u3059
+compiler.err.break.outside.switch.expression=switch\u5F0F\u306E\u5916\u5074\u3067break\u3092\u5B9F\u884C\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059
+
+compiler.err.continue.outside.switch.expression=switch\u5F0F\u306E\u5916\u5074\u3067continue\u3092\u5B9F\u884C\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059
+
+compiler.err.return.outside.switch.expression=switch\u5F0F\u306E\u5916\u5074\u3067return\u3092\u5B9F\u884C\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059
compiler.err.rule.completes.normally=switch\u30EB\u30FC\u30EB\u304C\u5024\u3092\u63D0\u4F9B\u305B\u305A\u306B\u5B8C\u4E86\u3057\u307E\u3057\u305F\n(switch\u5F0F\u306Eswitch\u30EB\u30FC\u30EB\u306F\u5024\u307E\u305F\u306F\u30B9\u30ED\u30FC\u3092\u63D0\u4F9B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059)
compiler.err.switch.expression.completes.normally=switch\u5F0F\u304C\u5024\u3092\u63D0\u4F9B\u305B\u305A\u306B\u5B8C\u4E86\u3057\u307E\u3057\u305F\n(switch\u5F0F\u306F\u3059\u3079\u3066\u306E\u53EF\u80FD\u306A\u5165\u529B\u5024\u306B\u3064\u3044\u3066\u5024\u307E\u305F\u306F\u30B9\u30ED\u30FC\u3092\u63D0\u4F9B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059)
-# 0: name
-compiler.err.break.ambiguous.target=''{0}''\u3078\u306E\u53C2\u7167\u304C\u3042\u3044\u307E\u3044\u3067\u3059\n(''{0}''\u306F\u30E9\u30D9\u30EB\u3068\u5F0F\u306E\u4E21\u65B9\u3067\u3059)
-
-# 0: tree tag
-compiler.err.break.expr.not.immediate=\u5024\u30D6\u30EC\u30FC\u30AF\u306F''{0}''\u3067\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-
-compiler.err.break.complex.value.no.switch.expression=\u4E88\u671F\u3057\u306A\u3044\u5024\u30D6\u30EC\u30FC\u30AF\u3067\u3059
+compiler.err.no.switch.expression =switch\u5F0F\u306E\u5916\u5074\u306Eyield
+
+compiler.err.no.switch.expression.qualify=switch\u5F0F\u306E\u5916\u5074\u306Eyield\n(yield\u3068\u3044\u3046\u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3073\u51FA\u3059\u306B\u306F\u3001yield\u3092\u53D7\u53D6\u308A\u5074\u307E\u305F\u306F\u30BF\u30A4\u30D7\u540D\u3067\u4FEE\u98FE\u3057\u307E\u3059)
+
+compiler.err.invalid.yield=\u5236\u9650\u3055\u308C\u305F\u8B58\u5225\u5B50''yield''\u306E\u4F7F\u7528\u306F\u7121\u52B9\u3067\u3059\n(yield\u3068\u3044\u3046\u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3073\u51FA\u3059\u306B\u306F\u3001yield\u3092\u53D7\u53D6\u308A\u5074\u307E\u305F\u306F\u30BF\u30A4\u30D7\u540D\u3067\u4FEE\u98FE\u3057\u307E\u3059)
+
+compiler.warn.invalid.yield=''yield''\u306F\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u5236\u9650\u3055\u308C\u305F\u8B58\u5225\u5B50\u306B\u306A\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\n(yield\u3068\u3044\u3046\u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3073\u51FA\u3059\u306B\u306F\u3001yield\u3092\u53D7\u53D6\u308A\u5074\u307E\u305F\u306F\u30BF\u30A4\u30D7\u540D\u3067\u4FEE\u98FE\u3057\u307E\u3059)
compiler.err.switch.expression.empty=switch\u5F0F\u306Bcase\u53E5\u304C\u3042\u308A\u307E\u305B\u3093
@@ -185,13 +183,13 @@
compiler.err.call.must.be.first.stmt.in.ctor={0}\u306E\u547C\u51FA\u3057\u306F\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u5148\u982D\u6587\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
# 0: symbol kind, 1: name, 2: list of type or message segment, 3: list of type or message segment, 4: symbol kind, 5: type, 6: message segment
-compiler.err.cant.apply.symbol={4} {5}\u306E{0} {1}\u306F\u6307\u5B9A\u3055\u308C\u305F\u578B\u306B\u9069\u7528\u3067\u304D\u307E\u305B\u3093\u3002\n\u671F\u5F85\u5024: {2}\n\u691C\u51FA\u5024: {3}\n\u7406\u7531: {6}
+compiler.err.cant.apply.symbol={4} {5}\u306E{0} {1}\u306F\u6307\u5B9A\u3055\u308C\u305F\u578B\u306B\u9069\u7528\u3067\u304D\u307E\u305B\u3093\u3002\n\u671F\u5F85\u5024: {2}\n\u691C\u51FA\u5024: {3}\n\u7406\u7531: {6}
# 0: symbol kind, 1: name, 2: list of type
compiler.err.cant.apply.symbols={1}\u306B\u9069\u5207\u306A{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093({2})
# 0: symbol kind, 1: name, 2: list of type or message segment, 3: list of type or message segment, 4: symbol kind, 5: type, 6: message segment
-compiler.misc.cant.apply.symbol={4} {5}\u306E{0} {1}\u306F\u6307\u5B9A\u3055\u308C\u305F\u578B\u306B\u9069\u7528\u3067\u304D\u307E\u305B\u3093\n\u671F\u5F85\u5024: {2}\n\u691C\u51FA\u5024: {3}\n\u7406\u7531: {6}
+compiler.misc.cant.apply.symbol={4} {5}\u306E{0} {1}\u306F\u6307\u5B9A\u3055\u308C\u305F\u578B\u306B\u9069\u7528\u3067\u304D\u307E\u305B\u3093\n\u671F\u5F85\u5024: {2}\n\u691C\u51FA\u5024: {3}\n\u7406\u7531: {6}
# 0: symbol kind, 1: name, 2: list of type
compiler.misc.cant.apply.symbols={1}\u306B\u9069\u5207\u306A{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093({2})
@@ -459,6 +457,12 @@
compiler.err.illegal.line.end.in.char.lit=\u6587\u5B57\u30EA\u30C6\u30E9\u30EB\u306E\u884C\u672B\u304C\u4E0D\u6B63\u3067\u3059
+compiler.err.illegal.text.block.open=\u30C6\u30AD\u30B9\u30C8\u30FB\u30D6\u30ED\u30C3\u30AF\u306E\u958B\u59CB\u533A\u5207\u308A\u6587\u5B57\u306E\u30B7\u30FC\u30B1\u30F3\u30B9\u304C\u7121\u52B9\u3067\u3059\u3002\u884C\u306E\u7D42\u4E86\u6587\u5B57\u304C\u3042\u308A\u307E\u305B\u3093
+
+compiler.warn.inconsistent.white.space.indentation=\u7A7A\u767D\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u4E00\u8CAB\u6027\u304C\u3042\u308A\u307E\u305B\u3093
+
+compiler.warn.trailing.white.space.will.be.removed=\u672B\u5C3E\u306E\u7A7A\u767D\u306F\u9664\u53BB\u3055\u308C\u307E\u3059
+
compiler.err.illegal.nonascii.digit=\u4E0D\u6B63\u306A\u975EASCII\u6570\u5B57\u3067\u3059
compiler.err.illegal.underscore=\u4E0D\u6B63\u306A\u30A2\u30F3\u30C0\u30FC\u30B9\u30B3\u30A2\u3067\u3059
@@ -756,6 +760,9 @@
# 0: string
compiler.err.proc.cant.find.class=''{0}''\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
+# 0: string
+compiler.err.proc.cant.load.class=''{0}''\u304C\u539F\u56E0\u3067\u3001\u30D7\u30ED\u30BB\u30C3\u30B5\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
+
# Print a client-generated error message; assumed to be localized, no translation required
# 0: string
compiler.err.proc.messager={0}
@@ -888,7 +895,7 @@
compiler.err.unclosed.str.lit=\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u304C\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093
-compiler.err.unicode.backtick=RAW\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u306E\u30C7\u30EA\u30DF\u30BF\u3068\u3057\u3066\\u0060\u3092\u4F7F\u7528\u3057\u3088\u3046\u3068\u3057\u307E\u3057\u305F
+compiler.err.unclosed.text.block=\u9589\u3058\u3089\u308C\u3066\u3044\u306A\u3044\u30C6\u30AD\u30B9\u30C8\u30FB\u30D6\u30ED\u30C3\u30AF
# 0: string
compiler.err.unsupported.encoding=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u3067\u3059: {0}
@@ -898,20 +905,32 @@
# 0: name
compiler.err.undef.label=\u30E9\u30D9\u30EB{0}\u306F\u672A\u5B9A\u7FA9\u3067\u3059
-compiler.err.illegal.ref.to.var.type=\u5236\u9650\u3055\u308C\u305F\u578B''var''\u3078\u306E\u7121\u52B9\u306A\u53C2\u7167\u3067\u3059
-
-compiler.err.var.not.allowed=\u3053\u3053\u3067\u306F''var''\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093\n\u30EA\u30EA\u30FC\u30B910\u304B\u3089\u3001''var''\u306F\u5236\u9650\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u578B\u3067\u3042\u308A\u3001\u578B\u306E\u5BA3\u8A00\u306B\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
-
-compiler.warn.var.not.allowed=\u30EA\u30EA\u30FC\u30B910\u304B\u3089\u3001''var''\u306F\u5236\u9650\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u578B\u3067\u3042\u308A\u3001\u578B\u306E\u5BA3\u8A00\u3067\u306E\u4F7F\u7528\u3001\u307E\u305F\u306F\u914D\u5217\u306E\u8981\u7D20\u30BF\u30A4\u30D7\u3068\u3057\u3066\u306E\u4F7F\u7528\u306F\u3067\u304D\u307E\u305B\u3093
+# 0: name
+compiler.err.illegal.ref.to.restricted.type=\u5236\u9650\u3055\u308C\u305F\u578B''{0}''\u3078\u306E\u7121\u52B9\u306A\u53C2\u7167\u3067\u3059
+
+# 0: name
+compiler.warn.illegal.ref.to.restricted.type=\u5236\u9650\u3055\u308C\u305F\u578B''{0}''\u3078\u306E\u7121\u52B9\u306A\u53C2\u7167\u3067\u3059
+
+# 0: name, 1: source
+compiler.err.restricted.type.not.allowed=\u3053\u3053\u3067\u306F''{0}''\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093\n\u30EA\u30EA\u30FC\u30B9{1}\u304B\u3089''{0}''\u306F\u5236\u9650\u3055\u308C\u305F\u578B\u540D\u3067\u3042\u308A\u3001\u578B\u306E\u5BA3\u8A00\u306B\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
+
+# 0: name, 1: source
+compiler.warn.restricted.type.not.allowed=\u30EA\u30EA\u30FC\u30B9{1}\u304B\u3089\u3001''{0}''\u306F\u5236\u9650\u3055\u308C\u305F\u578B\u540D\u3067\u3042\u308A\u3001\u578B\u306E\u5BA3\u8A00\u3067\u306E\u4F7F\u7528\u3001\u307E\u305F\u306F\u914D\u5217\u306E\u8981\u7D20\u30BF\u30A4\u30D7\u3068\u3057\u3066\u306E\u4F7F\u7528\u306F\u3067\u304D\u307E\u305B\u3093
+
+# 0: name, 1: source
+compiler.warn.restricted.type.not.allowed.preview=''{0}''\u306F\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u5236\u9650\u3055\u308C\u305F\u578B\u540D\u306B\u306A\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u3001\u578B\u306E\u5BA3\u8A00\u3067\u306E\u4F7F\u7528\u3001\u307E\u305F\u306F\u914D\u5217\u306E\u8981\u7D20\u30BF\u30A4\u30D7\u3068\u3057\u3066\u306E\u4F7F\u7528\u306F\u3067\u304D\u306A\u304F\u306A\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059
# 0: name (variable), 1: message segment
compiler.err.cant.infer.local.var.type=\u30ED\u30FC\u30AB\u30EB\u5909\u6570{0}\u306E\u578B\u3092\u63A8\u8AD6\u3067\u304D\u307E\u305B\u3093\n({1})
-compiler.err.var.not.allowed.here=\u3053\u3053\u3067\u306F''var''\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
-
-compiler.err.var.not.allowed.array=''var''\u306F\u914D\u5217\u306E\u8981\u7D20\u30BF\u30A4\u30D7\u3068\u3057\u3066\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
-
-compiler.err.var.not.allowed.compound=''var''\u306F\u8907\u5408\u5BA3\u8A00\u3067\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
+# 0: name
+compiler.err.restricted.type.not.allowed.here=''{0}''\u306F\u3053\u3053\u3067\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
+
+# 0: name
+compiler.err.restricted.type.not.allowed.array=''{0}''\u306F\u914D\u5217\u306E\u8981\u7D20\u30BF\u30A4\u30D7\u3068\u3057\u3066\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
+
+# 0: name
+compiler.err.restricted.type.not.allowed.compound=''{0}''\u306F\u8907\u5408\u5BA3\u8A00\u3067\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
# 0: fragment
compiler.err.invalid.lambda.parameter.declaration=\u7121\u52B9\u306A\u30E9\u30E0\u30C0\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF\u5BA3\u8A00\n({0})
@@ -1175,6 +1194,12 @@
# 0: number
compiler.misc.count.error.plural=\u30A8\u30E9\u30FC{0}\u500B
+# 0: number, 1: number
+compiler.misc.count.error.recompile=\u5408\u8A08{1}\u500B\u306E\u3046\u3061\u3001\u6700\u521D\u306E{0}\u500B\u306E\u30A8\u30E9\u30FC\u306E\u307F\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002\u3055\u3089\u306B\u8868\u793A\u3059\u308B\u5834\u5408\u306F\u3001-Xmaxerrs\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
+
+# 0: number, 1: number
+compiler.misc.count.warn.recompile=\u5408\u8A08{1}\u500B\u306E\u3046\u3061\u3001\u6700\u521D\u306E{0}\u500B\u306E\u8B66\u544A\u306E\u307F\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002\u3055\u3089\u306B\u8868\u793A\u3059\u308B\u5834\u5408\u306F\u3001-Xmaxwarns\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
+
# 0: number
compiler.misc.count.warn=\u8B66\u544A{0}\u500B
@@ -1370,6 +1395,15 @@
# 0: source version, 1: string, 2: string
compiler.warn.proc.processor.incompatible.source.version=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5''{1}''\u304B\u3089-source ''{2}''\u3088\u308A\u5C0F\u3055\u3044\u30BD\u30FC\u30B9\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3''{0}''\u304C\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u3059
+# 0: string, 1: string
+compiler.warn.proc.duplicate.option.name=\u91CD\u8907\u3059\u308B\u30B5\u30DD\u30FC\u30C8\u5BFE\u8C61\u30AA\u30D7\u30B7\u30E7\u30F3''{0}''\u304C\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5''{1}''\u306B\u3088\u3063\u3066\u8FD4\u3055\u308C\u307E\u3057\u305F
+
+# 0: string, 1: string
+compiler.warn.proc.duplicate.supported.annotation=\u91CD\u8907\u3059\u308B\u30B5\u30DD\u30FC\u30C8\u5BFE\u8C61\u6CE8\u91C8\u578B''{0}''\u304C\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5''{1}''\u306B\u3088\u3063\u3066\u8FD4\u3055\u308C\u307E\u3057\u305F
+
+# 0: string
+compiler.warn.proc.redundant.types.with.wildcard=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5''{0}''\u306F''*''\u3068\u4ED6\u306E\u6CE8\u91C8\u578B\u3092\u91CD\u8907\u3057\u3066\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059
+
compiler.warn.proc.proc-only.requested.no.procs=\u30B3\u30F3\u30D1\u30A4\u30EB\u306A\u3057\u306E\u6CE8\u91C8\u51E6\u7406\u304C\u30EA\u30AF\u30A8\u30B9\u30C8\u3055\u308C\u307E\u3057\u305F\u304C\u3001\u30D7\u30ED\u30BB\u30C3\u30B5\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
compiler.warn.proc.use.implicit=\u6697\u9ED9\u7684\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306F\u6CE8\u91C8\u51E6\u7406\u306B\u6E21\u3055\u308C\u307E\u305B\u3093\u3002\n-implicit\u3092\u4F7F\u7528\u3057\u6697\u9ED9\u7684\u30B3\u30F3\u30D1\u30A4\u30EB\u306E\u30DD\u30EA\u30B7\u30FC\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
@@ -1405,7 +1439,7 @@
compiler.warn.unchecked.cast.to.type=\u578B{0}\u3078\u306E\u7121\u691C\u67FB\u30AD\u30E3\u30B9\u30C8\u3067\u3059
# 0: kind name, 1: name, 2: object, 3: object, 4: kind name, 5: symbol
-compiler.warn.unchecked.meth.invocation.applied=\u7121\u691C\u67FB\u30E1\u30BD\u30C3\u30C9\u547C\u51FA\u3057: {4} {5}\u306E{0} {1}\u306F\u6307\u5B9A\u3055\u308C\u305F\u578B\u306B\u9069\u7528\u3055\u308C\u307E\u3059\n\u671F\u5F85\u5024: {2}\n\u691C\u51FA\u5024: {3}
+compiler.warn.unchecked.meth.invocation.applied=\u7121\u691C\u67FB\u30E1\u30BD\u30C3\u30C9\u547C\u51FA\u3057: {4} {5}\u306E{0} {1}\u306F\u6307\u5B9A\u3055\u308C\u305F\u578B\u306B\u9069\u7528\u3055\u308C\u307E\u3059\n\u671F\u5F85\u5024: {2}\n\u691C\u51FA\u5024: {3}
# 0: type
compiler.warn.unchecked.generic.array.creation=\u578B{0}\u306E\u53EF\u5909\u5F15\u6570\u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u5BFE\u3059\u308B\u7DCF\u79F0\u578B\u914D\u5217\u306E\u7121\u691C\u67FB\u4F5C\u6210\u3067\u3059
@@ -1424,6 +1458,10 @@
# 0: string
compiler.warn.invalid.path=\u30D5\u30A1\u30A4\u30EB\u540D\u304C\u7121\u52B9\u3067\u3059: {0}
+# 0: string
+compiler.err.invalid.path=\u30D5\u30A1\u30A4\u30EB\u540D\u304C\u7121\u52B9\u3067\u3059: {0}
+
+
# 0: path
compiler.warn.invalid.archive.file=\u30D1\u30B9\u4E0A\u306E\u4E88\u671F\u3057\u306A\u3044\u30D5\u30A1\u30A4\u30EB: {0}
@@ -1550,6 +1588,9 @@
# 0: file name, 1: string (expected constant pool entry type), 2: number (constant pool index)
compiler.misc.bad.const.pool.entry={0}\u306E\u5B9A\u6570\u30D7\u30FC\u30EB\u30FB\u30A8\u30F3\u30C8\u30EA\u304C\u4E0D\u6B63\u3067\u3059\n\u7D22\u5F15{2}\u3067\u306F{1}\u304C\u5FC5\u8981\u3067\u3059
+# 0: file name, 1: number (constant pool index), 2: number (constant pool size)
+compiler.misc.bad.const.pool.index={0}\u306E\u5B9A\u6570\u30D7\u30FC\u30EB\u7D22\u5F15\u304C\u4E0D\u6B63\u3067\u3059\n\u7D22\u5F15{1}\u304C{2}\u306E\u30D7\u30FC\u30EB\u30FB\u30B5\u30A4\u30BA\u5185\u306B\u3042\u308A\u307E\u305B\u3093\u3002
+
# 0: file name, 1: message segment
compiler.misc.bad.class.file.header=\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB{0}\u306F\u4E0D\u6B63\u3067\u3059\n{1}\n\u524A\u9664\u3059\u308B\u304B\u3001\u30AF\u30E9\u30B9\u30D1\u30B9\u306E\u6B63\u3057\u3044\u30B5\u30D6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u3042\u308B\u304B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002
@@ -1876,17 +1917,6 @@
compiler.misc.kindname.instance.init=\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u521D\u671F\u5316\u5B50
-# the following are names of tree kinds:
-compiler.misc.tree.tag.forloop=for
-
-compiler.misc.tree.tag.foreachloop=for
-
-compiler.misc.tree.tag.whileloop=while
-
-compiler.misc.tree.tag.doloop=do
-
-compiler.misc.tree.tag.switch=switch
-
#####
compiler.misc.no.args=\u5F15\u6570\u304C\u3042\u308A\u307E\u305B\u3093
@@ -2017,14 +2047,14 @@
compiler.misc.feature.private.intf.methods=private\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u30FB\u30E1\u30BD\u30C3\u30C9
+compiler.misc.feature.text.blocks=\u30C6\u30AD\u30B9\u30C8\u30FB\u30D6\u30ED\u30C3\u30AF
+
compiler.misc.feature.multiple.case.labels=\u8907\u6570\u306Ecase\u30E9\u30D9\u30EB
compiler.misc.feature.switch.rules=switch\u30EB\u30FC\u30EB
compiler.misc.feature.switch.expressions=switch\u5F0F
-compiler.misc.feature.raw.string.literals=RAW\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB
-
compiler.misc.feature.var.syntax.in.implicit.lambda=\u6697\u9ED9\u30E9\u30E0\u30C0\u306Evar\u69CB\u6587
compiler.warn.underscore.as.identifier=\u30EA\u30EA\u30FC\u30B99\u304B\u3089''_''\u306F\u30AD\u30FC\u30EF\u30FC\u30C9\u306A\u306E\u3067\u8B58\u5225\u5B50\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
@@ -2051,16 +2081,16 @@
compiler.err.cant.type.annotate.scoping=\u30B9\u30B3\u30FC\u30D7\u30FB\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30C8\u3092\u578B\u4F7F\u7528\u6CE8\u91C8\u3067\u6CE8\u91C8\u4ED8\u3051\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093: {0}
# 0: type, 1: type
-compiler.err.incorrect.receiver.name=\u53D7\u53D6\u308A\u5074\u306E\u540D\u524D\u304C\u3001\u5305\u542B\u3059\u308B\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
+compiler.err.incorrect.receiver.name=\u53D7\u53D6\u308A\u5074\u306E\u540D\u524D\u304C\u3001\u5305\u542B\u3059\u308B\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
# 0: type, 1: type
-compiler.err.incorrect.receiver.type=\u53D7\u53D6\u308A\u5074\u306E\u30BF\u30A4\u30D7\u304C\u3001\u5305\u542B\u3059\u308B\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
+compiler.err.incorrect.receiver.type=\u53D7\u53D6\u308A\u5074\u306E\u30BF\u30A4\u30D7\u304C\u3001\u5305\u542B\u3059\u308B\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
# 0: type, 1: type
-compiler.err.incorrect.constructor.receiver.type=\u53D7\u53D6\u308A\u5074\u306E\u30BF\u30A4\u30D7\u304C\u3001\u5305\u542B\u3059\u308B\u5916\u90E8\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
+compiler.err.incorrect.constructor.receiver.type=\u53D7\u53D6\u308A\u5074\u306E\u30BF\u30A4\u30D7\u304C\u3001\u5305\u542B\u3059\u308B\u5916\u90E8\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
# 0: type, 1: type
-compiler.err.incorrect.constructor.receiver.name=\u53D7\u53D6\u308A\u5074\u306E\u540D\u524D\u304C\u3001\u5305\u542B\u3059\u308B\u5916\u90E8\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
+compiler.err.incorrect.constructor.receiver.name=\u53D7\u53D6\u308A\u5074\u306E\u540D\u524D\u304C\u3001\u5305\u542B\u3059\u308B\u5916\u90E8\u30AF\u30E9\u30B9\u30FB\u30BF\u30A4\u30D7\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\n\u5FC5\u9808: {0}\n\u691C\u51FA: {1}
compiler.err.no.annotations.on.dot.class=\u6CE8\u91C8\u306F\u30AF\u30E9\u30B9\u30FB\u30EA\u30C6\u30E9\u30EB\u306E\u30BF\u30A4\u30D7\u3067\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093
@@ -2331,7 +2361,7 @@
# 0: option name, 1: symbol
compiler.warn.module.for.option.not.found={0}\u30AA\u30D7\u30B7\u30E7\u30F3\u5185\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {1}
-compiler.err.addmods.all.module.path.invalid=--add-modules ALL-MODULE-PATH\u306F\u3001\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u6642\u306E\u307F\u4F7F\u7528\u3067\u304D\u307E\u3059
+compiler.err.addmods.all.module.path.invalid=--add-modules ALL-MODULE-PATH\u306F\u3001\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u6642\u307E\u305F\u306F\u81EA\u52D5\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3067\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u6642\u306E\u307F\u4F7F\u7528\u3067\u304D\u307E\u3059
# 0: symbol
compiler.err.add.exports.with.release=\u30B7\u30B9\u30C6\u30E0\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB{0}\u304B\u3089\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u306F--release\u3092\u6307\u5B9A\u3057\u3066\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -159,25 +159,23 @@
compiler.err.break.outside.switch.loop=\u5728 switch \u6216 loop \u5916\u90E8\u4E2D\u65AD
-compiler.err.break.missing.value=\u7F3A\u5C11\u4E2D\u65AD\u503C
-
-compiler.err.break.outside.switch.expression=break \u5728\u95ED\u5408\u7684 switch \u8868\u8FBE\u5F0F\u5916\u90E8
-
-compiler.err.continue.outside.switch.expression=continue \u5728\u95ED\u5408\u7684 switch \u8868\u8FBE\u5F0F\u5916\u90E8
-
-compiler.err.return.outside.switch.expression=return \u5728\u95ED\u5408\u7684 switch \u8868\u8FBE\u5F0F\u5916\u90E8
+compiler.err.break.outside.switch.expression=\u5C1D\u8BD5\u4ECE switch \u8868\u8FBE\u5F0F\u4E2D\u65AD
+
+compiler.err.continue.outside.switch.expression=\u5C1D\u8BD5\u4ECE switch \u8868\u8FBE\u5F0F\u7EE7\u7EED
+
+compiler.err.return.outside.switch.expression=\u5C1D\u8BD5\u4ECE switch \u8868\u8FBE\u5F0F\u8FD4\u56DE
compiler.err.rule.completes.normally=switch \u89C4\u5219\u5B8C\u7ED3\u4F46\u6CA1\u6709\u63D0\u4F9B\u503C\n\uFF08switch \u8868\u8FBE\u5F0F\u4E2D\u7684 switch \u89C4\u5219\u5FC5\u987B\u63D0\u4F9B\u503C\u6216\u629B\u51FA\uFF09
compiler.err.switch.expression.completes.normally=switch \u8868\u8FBE\u5F0F\u5B8C\u7ED3\u4F46\u6CA1\u6709\u63D0\u4F9B\u503C\n\uFF08switch \u8868\u8FBE\u5F0F\u5FC5\u987B\u4E3A\u6240\u6709\u53EF\u80FD\u7684\u8F93\u5165\u503C\u63D0\u4F9B\u503C\u6216\u629B\u51FA\uFF09
-# 0: name
-compiler.err.break.ambiguous.target=\u5BF9 ''{0}'' \u7684\u5F15\u7528\u4E0D\u660E\u786E\n\uFF08''{0}'' \u540C\u65F6\u662F\u6807\u7B7E\u548C\u8868\u8FBE\u5F0F\uFF09
-
-# 0: tree tag
-compiler.err.break.expr.not.immediate=''{0}'' \u4E2D\u4E0D\u652F\u6301\u503C\u4E2D\u65AD
-
-compiler.err.break.complex.value.no.switch.expression=\u610F\u5916\u503C\u4E2D\u65AD
+compiler.err.no.switch.expression =yield \u5728 switch \u8868\u8FBE\u5F0F\u5916\u90E8
+
+compiler.err.no.switch.expression.qualify=yield \u5728 switch \u8868\u8FBE\u5F0F\u5916\u90E8\n\uFF08\u8981\u8C03\u7528\u79F0\u4E3A yield \u7684\u65B9\u6CD5\uFF0C\u8BF7\u901A\u8FC7\u63A5\u6536\u65B9\u6216\u7C7B\u578B\u540D\u79F0\u9650\u5B9A yield\uFF09
+
+compiler.err.invalid.yield=\u53D7\u9650\u6807\u8BC6\u7B26 ''yield'' \u7684\u7528\u6CD5\u65E0\u6548\n\uFF08\u8981\u8C03\u7528\u79F0\u4E3A yield \u7684\u65B9\u6CD5\uFF0C\u8BF7\u901A\u8FC7\u63A5\u6536\u65B9\u6216\u7C7B\u578B\u540D\u79F0\u9650\u5B9A yield\uFF09
+
+compiler.warn.invalid.yield=''yield'' \u5728\u672A\u6765\u53D1\u884C\u7248\u4E2D\u53EF\u80FD\u4F1A\u6210\u4E3A\u53D7\u9650\u6807\u8BC6\u7B26\n\uFF08\u8981\u8C03\u7528\u79F0\u4E3A yield \u7684\u65B9\u6CD5\uFF0C\u8BF7\u901A\u8FC7\u63A5\u6536\u65B9\u6216\u7C7B\u578B\u540D\u79F0\u9650\u5B9A yield\uFF09
compiler.err.switch.expression.empty=switch \u8868\u8FBE\u5F0F\u4E2D\u6CA1\u6709\u4EFB\u4F55 case \u5B50\u53E5
@@ -185,13 +183,13 @@
compiler.err.call.must.be.first.stmt.in.ctor=\u5BF9{0}\u7684\u8C03\u7528\u5FC5\u987B\u662F\u6784\u9020\u5668\u4E2D\u7684\u7B2C\u4E00\u4E2A\u8BED\u53E5
# 0: symbol kind, 1: name, 2: list of type or message segment, 3: list of type or message segment, 4: symbol kind, 5: type, 6: message segment
-compiler.err.cant.apply.symbol=\u65E0\u6CD5\u5C06{4} {5}\u4E2D\u7684{0} {1}\u5E94\u7528\u5230\u7ED9\u5B9A\u7C7B\u578B;\n\u9700\u8981: {2}\n\u627E\u5230: {3}\n\u539F\u56E0: {6}
+compiler.err.cant.apply.symbol=\u65E0\u6CD5\u5C06{4} {5}\u4E2D\u7684{0} {1}\u5E94\u7528\u5230\u7ED9\u5B9A\u7C7B\u578B;\n\u9700\u8981: {2}\n\u627E\u5230: {3}\n\u539F\u56E0: {6}
# 0: symbol kind, 1: name, 2: list of type
compiler.err.cant.apply.symbols=\u5BF9\u4E8E{1}({2}), \u627E\u4E0D\u5230\u5408\u9002\u7684{0}
# 0: symbol kind, 1: name, 2: list of type or message segment, 3: list of type or message segment, 4: symbol kind, 5: type, 6: message segment
-compiler.misc.cant.apply.symbol=\u65E0\u6CD5\u5C06 {4} {5}\u4E2D\u7684 {0} {1}\u5E94\u7528\u5230\u7ED9\u5B9A\u7C7B\u578B\n\u9700\u8981: {2}\n\u627E\u5230: {3}\n\u539F\u56E0: {6}
+compiler.misc.cant.apply.symbol=\u65E0\u6CD5\u5C06 {4} {5}\u4E2D\u7684 {0} {1}\u5E94\u7528\u5230\u7ED9\u5B9A\u7C7B\u578B\n\u9700\u8981: {2}\n\u627E\u5230: {3}\n\u539F\u56E0: {6}
# 0: symbol kind, 1: name, 2: list of type
compiler.misc.cant.apply.symbols=\u5BF9\u4E8E{1}({2}), \u627E\u4E0D\u5230\u5408\u9002\u7684{0}
@@ -459,6 +457,12 @@
compiler.err.illegal.line.end.in.char.lit=\u5B57\u7B26\u6587\u5B57\u7684\u884C\u7ED3\u5C3E\u4E0D\u5408\u6CD5
+compiler.err.illegal.text.block.open=\u6587\u672C\u5757\u8D77\u59CB\u5206\u9694\u7B26\u5E8F\u5217\u975E\u6CD5\uFF0C\u7F3A\u5C11\u884C\u7EC8\u6B62\u7B26
+
+compiler.warn.inconsistent.white.space.indentation=\u7A7A\u683C\u7F29\u8FDB\u4E0D\u4E00\u81F4
+
+compiler.warn.trailing.white.space.will.be.removed=\u5C06\u5220\u9664\u5C3E\u968F\u7A7A\u683C
+
compiler.err.illegal.nonascii.digit=\u975E\u6CD5\u7684\u975E ASCII \u6570\u5B57
compiler.err.illegal.underscore=\u975E\u6CD5\u4E0B\u5212\u7EBF
@@ -756,6 +760,9 @@
# 0: string
compiler.err.proc.cant.find.class=\u627E\u4E0D\u5230 ''{0}'' \u7684\u7C7B\u6587\u4EF6\u3002
+# 0: string
+compiler.err.proc.cant.load.class=\u7531\u4E8E ''{0}''\uFF0C\u65E0\u6CD5\u52A0\u8F7D\u5904\u7406\u5668\u7C7B\u6587\u4EF6\u3002
+
# Print a client-generated error message; assumed to be localized, no translation required
# 0: string
compiler.err.proc.messager={0}
@@ -888,7 +895,7 @@
compiler.err.unclosed.str.lit=\u672A\u7ED3\u675F\u7684\u5B57\u7B26\u4E32\u6587\u5B57
-compiler.err.unicode.backtick=\u5C1D\u8BD5\u5C06 \\u0060 \u7528\u4F5C\u539F\u59CB\u5B57\u7B26\u4E32\u6587\u5B57\u5206\u9694\u7B26
+compiler.err.unclosed.text.block=\u6587\u672C\u5757\u672A\u95ED\u5408
# 0: string
compiler.err.unsupported.encoding=\u4E0D\u652F\u6301\u7684\u7F16\u7801: {0}
@@ -898,20 +905,32 @@
# 0: name
compiler.err.undef.label=\u672A\u5B9A\u4E49\u7684\u6807\u7B7E: {0}
-compiler.err.illegal.ref.to.var.type=\u5BF9\u53D7\u9650\u5236\u7C7B\u578B ''var'' \u7684\u5F15\u7528\u975E\u6CD5
-
-compiler.err.var.not.allowed=\u4ECE\u53D1\u884C\u7248 10 \u5F00\u59CB\uFF0C\n\u6B64\u5904\u4E0D\u5141\u8BB8\u4F7F\u7528 ''var''\uFF0C''var'' \u662F\u53D7\u9650\u5236\u7684\u672C\u5730\u53D8\u91CF\u7C7B\u578B\uFF0C\u65E0\u6CD5\u7528\u4E8E\u7C7B\u578B\u58F0\u660E
-
-compiler.warn.var.not.allowed=\u4ECE\u53D1\u884C\u7248 10 \u5F00\u59CB\uFF0C''var'' \u662F\u53D7\u9650\u5236\u7684\u672C\u5730\u53D8\u91CF\u7C7B\u578B\uFF0C\u65E0\u6CD5\u7528\u4E8E\u7C7B\u578B\u58F0\u660E\uFF0C\u4E5F\u65E0\u6CD5\u7528\u4F5C\u6570\u7EC4\u7684\u5143\u7D20\u7C7B\u578B
+# 0: name
+compiler.err.illegal.ref.to.restricted.type=\u5BF9\u53D7\u9650\u5236\u7C7B\u578B ''{0}'' \u7684\u5F15\u7528\u975E\u6CD5
+
+# 0: name
+compiler.warn.illegal.ref.to.restricted.type=\u5BF9\u53D7\u9650\u5236\u7C7B\u578B ''{0}'' \u7684\u5F15\u7528\u975E\u6CD5
+
+# 0: name, 1: source
+compiler.err.restricted.type.not.allowed=\u6B64\u5904\u4E0D\u5141\u8BB8\u4F7F\u7528 ''{0}''\n\u4ECE\u53D1\u884C\u7248 {1} \u5F00\u59CB\uFF0C''{0}'' \u662F\u53D7\u9650\u7C7B\u578B\u540D\u79F0\uFF0C\u4E0D\u80FD\u7528\u4E8E\u7C7B\u578B\u58F0\u660E
+
+# 0: name, 1: source
+compiler.warn.restricted.type.not.allowed=\u4ECE\u53D1\u884C\u7248 {1} \u5F00\u59CB\uFF0C''{0}'' \u662F\u53D7\u9650\u7C7B\u578B\u540D\u79F0\uFF0C\u4E0D\u80FD\u7528\u4E8E\u7C7B\u578B\u58F0\u660E\uFF0C\u4E5F\u4E0D\u80FD\u7528\u4F5C\u6570\u7EC4\u7684\u5143\u7D20\u7C7B\u578B
+
+# 0: name, 1: source
+compiler.warn.restricted.type.not.allowed.preview=''{0}'' \u5728\u672A\u6765\u53D1\u884C\u7248\u4E2D\u53EF\u80FD\u4F1A\u6210\u4E3A\u53D7\u9650\u7C7B\u578B\u540D\u79F0\uFF0C\u53EF\u80FD\u65E0\u6CD5\u7528\u4E8E\u7C7B\u578B\u58F0\u660E\uFF0C\u4E5F\u4E0D\u80FD\u7528\u4F5C\u6570\u7EC4\u7684\u5143\u7D20\u7C7B\u578B
# 0: name (variable), 1: message segment
compiler.err.cant.infer.local.var.type=\u65E0\u6CD5\u63A8\u65AD\u672C\u5730\u53D8\u91CF {0} \u7684\u7C7B\u578B\n({1})
-compiler.err.var.not.allowed.here=\u6B64\u5904\u4E0D\u5141\u8BB8\u4F7F\u7528 ''var''
-
-compiler.err.var.not.allowed.array=''var'' \u4E0D\u5141\u8BB8\u7528\u4F5C\u6570\u7EC4\u7684\u5143\u7D20\u7C7B\u578B
-
-compiler.err.var.not.allowed.compound=''var'' \u4E0D\u5141\u8BB8\u5728\u590D\u5408\u58F0\u660E\u4E2D\u4F7F\u7528
+# 0: name
+compiler.err.restricted.type.not.allowed.here=\u6B64\u5904\u4E0D\u5141\u8BB8\u4F7F\u7528 ''{0}''
+
+# 0: name
+compiler.err.restricted.type.not.allowed.array=''{0}'' \u4E0D\u5141\u8BB8\u7528\u4F5C\u6570\u7EC4\u7684\u5143\u7D20\u7C7B\u578B
+
+# 0: name
+compiler.err.restricted.type.not.allowed.compound=''{0}'' \u4E0D\u5141\u8BB8\u5728\u590D\u5408\u58F0\u660E\u4E2D\u4F7F\u7528
# 0: fragment
compiler.err.invalid.lambda.parameter.declaration=\u65E0\u6548\u7684 lambda \u53C2\u6570\u58F0\u660E\n({0})
@@ -1175,6 +1194,12 @@
# 0: number
compiler.misc.count.error.plural={0} \u4E2A\u9519\u8BEF
+# 0: number, 1: number
+compiler.misc.count.error.recompile=\u4EC5\u663E\u793A\u524D {0} \u4E2A\u9519\u8BEF\uFF08\u5171 {1} \u4E2A\uFF09\uFF1B\u82E5\u8981\u67E5\u770B\u66F4\u591A\u9519\u8BEF\uFF0C\u8BF7\u4F7F\u7528 -Xmaxerrs
+
+# 0: number, 1: number
+compiler.misc.count.warn.recompile=\u4EC5\u663E\u793A\u524D {0} \u4E2A\u8B66\u544A\uFF08\u5171 {1} \u4E2A\uFF09\uFF1B\u82E5\u8981\u67E5\u770B\u66F4\u591A\u9519\u8BEF\uFF0C\u8BF7\u4F7F\u7528 -Xmaxwarns
+
# 0: number
compiler.misc.count.warn={0} \u4E2A\u8B66\u544A
@@ -1370,6 +1395,15 @@
# 0: source version, 1: string, 2: string
compiler.warn.proc.processor.incompatible.source.version=\u6765\u81EA\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F ''{1}'' \u7684\u53D7\u652F\u6301 source \u7248\u672C ''{0}'' \u4F4E\u4E8E -source ''{2}''
+# 0: string, 1: string
+compiler.warn.proc.duplicate.option.name=\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F ''{1}'' \u8FD4\u56DE\u91CD\u590D\u7684\u652F\u6301\u7684\u9009\u9879 ''{0}''
+
+# 0: string, 1: string
+compiler.warn.proc.duplicate.supported.annotation=\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F ''{1}'' \u8FD4\u56DE\u91CD\u590D\u7684\u652F\u6301\u7684\u6CE8\u91CA\u7C7B\u578B ''{0}''
+
+# 0: string
+compiler.warn.proc.redundant.types.with.wildcard=\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F ''{0}'' \u91CD\u590D\u652F\u6301 ''*'' \u548C\u5176\u4ED6\u6CE8\u91CA\u7C7B\u578B
+
compiler.warn.proc.proc-only.requested.no.procs=\u5728\u672A\u8BF7\u6C42\u7F16\u8BD1\u7684\u60C5\u51B5\u4E0B\u8FDB\u884C\u6CE8\u91CA\u5904\u7406, \u4F46\u627E\u4E0D\u5230\u5904\u7406\u7A0B\u5E8F\u3002
compiler.warn.proc.use.implicit=\u6CE8\u91CA\u5904\u7406\u4E0D\u9002\u7528\u4E8E\u9690\u5F0F\u7F16\u8BD1\u7684\u6587\u4EF6\u3002\n\u4F7F\u7528 -implicit \u6307\u5B9A\u7528\u4E8E\u9690\u5F0F\u7F16\u8BD1\u7684\u7B56\u7565\u3002
@@ -1405,7 +1439,7 @@
compiler.warn.unchecked.cast.to.type=\u5411\u7C7B\u578B{0}\u7684\u8F6C\u6362\u672A\u7ECF\u8FC7\u68C0\u67E5
# 0: kind name, 1: name, 2: object, 3: object, 4: kind name, 5: symbol
-compiler.warn.unchecked.meth.invocation.applied=\u65B9\u6CD5\u8C03\u7528\u672A\u7ECF\u8FC7\u68C0\u67E5: \u5C06{4} {5}\u4E2D\u7684{0} {1}\u5E94\u7528\u5230\u7ED9\u5B9A\u7684\u7C7B\u578B\n\u9700\u8981: {2}\n\u627E\u5230: {3}
+compiler.warn.unchecked.meth.invocation.applied=\u65B9\u6CD5\u8C03\u7528\u672A\u7ECF\u8FC7\u68C0\u67E5: \u5C06{4} {5}\u4E2D\u7684{0} {1}\u5E94\u7528\u5230\u7ED9\u5B9A\u7684\u7C7B\u578B\n\u9700\u8981: {2}\n\u627E\u5230: {3}
# 0: type
compiler.warn.unchecked.generic.array.creation=\u5BF9\u4E8E\u7C7B\u578B\u4E3A{0}\u7684 varargs \u53C2\u6570, \u6CDB\u578B\u6570\u7EC4\u521B\u5EFA\u672A\u7ECF\u8FC7\u68C0\u67E5
@@ -1424,6 +1458,10 @@
# 0: string
compiler.warn.invalid.path=\u65E0\u6548\u6587\u4EF6\u540D: {0}
+# 0: string
+compiler.err.invalid.path=\u65E0\u6548\u6587\u4EF6\u540D: {0}
+
+
# 0: path
compiler.warn.invalid.archive.file=\u4EE5\u4E0B\u8DEF\u5F84\u4E2D\u5B58\u5728\u610F\u5916\u7684\u6587\u4EF6: {0}
@@ -1550,6 +1588,9 @@
# 0: file name, 1: string (expected constant pool entry type), 2: number (constant pool index)
compiler.misc.bad.const.pool.entry={0} \u4E2D\u9519\u8BEF\u7684\u5E38\u91CF\u6C60\u6761\u76EE\n\u9884\u671F\u4E3A\u7D22\u5F15 {2} \u5904\u7684 {1}
+# 0: file name, 1: number (constant pool index), 2: number (constant pool size)
+compiler.misc.bad.const.pool.index={0} \u4E2D\u7684\u5E38\u91CF\u6C60\u7D22\u5F15\u9519\u8BEF\n\u7D22\u5F15 {1} \u4E0D\u5728\u6C60\u5927\u5C0F {2} \u5185\u3002
+
# 0: file name, 1: message segment
compiler.misc.bad.class.file.header=\u9519\u8BEF\u7684\u7C7B\u6587\u4EF6: {0}\n{1}\n\u8BF7\u5220\u9664\u8BE5\u6587\u4EF6\u6216\u786E\u4FDD\u8BE5\u6587\u4EF6\u4F4D\u4E8E\u6B63\u786E\u7684\u7C7B\u8DEF\u5F84\u5B50\u76EE\u5F55\u4E2D\u3002
@@ -1876,17 +1917,6 @@
compiler.misc.kindname.instance.init=\u5B9E\u4F8B\u521D\u59CB\u5316\u7A0B\u5E8F
-# the following are names of tree kinds:
-compiler.misc.tree.tag.forloop=for
-
-compiler.misc.tree.tag.foreachloop=for
-
-compiler.misc.tree.tag.whileloop=while
-
-compiler.misc.tree.tag.doloop=do
-
-compiler.misc.tree.tag.switch=switch
-
#####
compiler.misc.no.args=\u6CA1\u6709\u53C2\u6570
@@ -2017,14 +2047,14 @@
compiler.misc.feature.private.intf.methods=\u79C1\u6709\u63A5\u53E3\u65B9\u6CD5
+compiler.misc.feature.text.blocks=\u6587\u672C\u5757
+
compiler.misc.feature.multiple.case.labels=\u591A\u4E2A case \u6807\u7B7E
compiler.misc.feature.switch.rules=switch \u89C4\u5219
compiler.misc.feature.switch.expressions=switch \u8868\u8FBE\u5F0F
-compiler.misc.feature.raw.string.literals=\u539F\u59CB\u5B57\u7B26\u4E32\u6587\u5B57
-
compiler.misc.feature.var.syntax.in.implicit.lambda=\u9690\u5F0F lambda \u4E2D\u7684 var \u8BED\u6CD5
compiler.warn.underscore.as.identifier=\u4ECE\u53D1\u884C\u7248 9 \u5F00\u59CB, ''_'' \u4E3A\u5173\u952E\u5B57, \u4E0D\u80FD\u7528\u4F5C\u6807\u8BC6\u7B26
@@ -2051,16 +2081,16 @@
compiler.err.cant.type.annotate.scoping=\u65E0\u6CD5\u4F7F\u7528 type-use \u6CE8\u91CA {0} \u6765\u6CE8\u91CA\u786E\u5B9A\u4F5C\u7528\u57DF\u7ED3\u6784
# 0: type, 1: type
-compiler.err.incorrect.receiver.name=\u63A5\u6536\u65B9\u540D\u79F0\u4E0E\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
+compiler.err.incorrect.receiver.name=\u63A5\u6536\u65B9\u540D\u79F0\u4E0E\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
# 0: type, 1: type
-compiler.err.incorrect.receiver.type=\u63A5\u6536\u65B9\u7C7B\u578B\u4E0E\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
+compiler.err.incorrect.receiver.type=\u63A5\u6536\u65B9\u7C7B\u578B\u4E0E\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
# 0: type, 1: type
-compiler.err.incorrect.constructor.receiver.type=\u63A5\u6536\u65B9\u7C7B\u578B\u4E0E\u5916\u90E8\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
+compiler.err.incorrect.constructor.receiver.type=\u63A5\u6536\u65B9\u7C7B\u578B\u4E0E\u5916\u90E8\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
# 0: type, 1: type
-compiler.err.incorrect.constructor.receiver.name=\u63A5\u6536\u65B9\u540D\u79F0\u4E0E\u5916\u90E8\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
+compiler.err.incorrect.constructor.receiver.name=\u63A5\u6536\u65B9\u540D\u79F0\u4E0E\u5916\u90E8\u5C01\u95ED\u7C7B\u7C7B\u578B\u4E0D\u5339\u914D\n\u9700\u8981: {0}\n\u627E\u5230: {1}
compiler.err.no.annotations.on.dot.class=\u7C7B\u6587\u5B57\u7C7B\u578B\u4E2D\u4E0D\u5141\u8BB8\u4F7F\u7528\u4EFB\u4F55\u6CE8\u91CA
@@ -2331,7 +2361,7 @@
# 0: option name, 1: symbol
compiler.warn.module.for.option.not.found=\u627E\u4E0D\u5230 {0} \u9009\u9879\u4E2D\u7684\u6A21\u5757\u540D\u79F0: {1}
-compiler.err.addmods.all.module.path.invalid=--add-modules ALL-MODULE-PATH \u53EA\u80FD\u5728\u7F16\u8BD1\u672A\u547D\u540D\u6A21\u5757\u65F6\u4F7F\u7528
+compiler.err.addmods.all.module.path.invalid=--add-modules ALL-MODULE-PATH \u53EA\u80FD\u5728\u7F16\u8BD1\u672A\u547D\u540D\u6A21\u5757\u6216\u5728\u81EA\u52A8\u6A21\u5757\u7684\u4E0A\u4E0B\u6587\u4E2D\u7F16\u8BD1\u65F6\u4F7F\u7528
# 0: symbol
compiler.err.add.exports.with.release=\u4E0D\u5141\u8BB8\u5728\u4F7F\u7528 --release \u65F6\u4ECE\u7CFB\u7EDF\u6A21\u5757 {0} \u5BFC\u51FA\u7A0B\u5E8F\u5305:
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -52,9 +52,9 @@
javac.opt.J=<flag>\u3092\u5B9F\u884C\u30B7\u30B9\u30C6\u30E0\u306B\u76F4\u63A5\u6E21\u3059
javac.opt.encoding=\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u4F7F\u7528\u3059\u308B\u6587\u5B57\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u3092\u6307\u5B9A\u3059\u308B
javac.opt.profile=\u4F7F\u7528\u3055\u308C\u3066\u3044\u308BAPI\u304C\u6307\u5B9A\u3057\u305F\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3067\u4F7F\u7528\u53EF\u80FD\u304B\u3069\u3046\u304B\u3092\u78BA\u8A8D\u3057\u307E\u3059
-javac.opt.target=\u7279\u5B9A\u306EVM\u30D0\u30FC\u30B8\u30E7\u30F3\u7528\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30D0\u30FC\u30B8\u30E7\u30F3: {0}
-javac.opt.release=\u7279\u5B9A\u306E\u30EA\u30EA\u30FC\u30B9\u7528\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
-javac.opt.source=\u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u4FDD\u6301\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
+javac.opt.target=\u6307\u5B9A\u3055\u308C\u305FJava SE\u30EA\u30EA\u30FC\u30B9\u306B\u9069\u3057\u305F\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
+javac.opt.release=\u6307\u5B9A\u3055\u308C\u305FJava SE\u30EA\u30EA\u30FC\u30B9\u306B\u5BFE\u3057\u3066\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
+javac.opt.source=\u6307\u5B9A\u3055\u308C\u305FJava SE\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u4FDD\u6301\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
javac.opt.Werror=\u8B66\u544A\u304C\u767A\u751F\u3057\u305F\u5834\u5408\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7D42\u4E86\u3059\u308B
javac.opt.A=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u306B\u6E21\u3055\u308C\u308B\u30AA\u30D7\u30B7\u30E7\u30F3
javac.opt.implicit=\u6697\u9ED9\u7684\u306B\u53C2\u7167\u3055\u308C\u308B\u30D5\u30A1\u30A4\u30EB\u306B\u3064\u3044\u3066\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u6307\u5B9A\u3059\u308B
@@ -146,6 +146,8 @@
javac.opt.Xlint.desc.static=\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4F7F\u7528\u3057\u305Fstatic\u30E1\u30F3\u30D0\u30FC\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u306B\u3064\u3044\u3066\u8B66\u544A\u3057\u307E\u3059\u3002
+javac.opt.Xlint.desc.text-blocks=\u30C6\u30AD\u30B9\u30C8\u30FB\u30D6\u30ED\u30C3\u30AF\u30FB\u30A4\u30F3\u30C7\u30F3\u30C8\u5185\u306E\u4E00\u8CAB\u6027\u306E\u306A\u3044\u7A7A\u767D\u6587\u5B57\u306B\u3064\u3044\u3066\u8B66\u544A\u3057\u307E\u3059\u3002
+
javac.opt.Xlint.desc.try=try\u30D6\u30ED\u30C3\u30AF(try-with-resources\u306A\u3069)\u306E\u4F7F\u7528\u306B\u95A2\u3059\u308B\u554F\u984C\u306B\u3064\u3044\u3066\u8B66\u544A\u3057\u307E\u3059\u3002
javac.opt.Xlint.desc.unchecked=\u7121\u691C\u67FB\u64CD\u4F5C\u306B\u3064\u3044\u3066\u8B66\u544A\u3057\u307E\u3059\u3002
@@ -202,7 +204,7 @@
javac.msg.usage.nonstandard.footer=\u3053\u306E\u8FFD\u52A0\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u4E88\u544A\u306A\u3057\u306B\u5909\u66F4\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
-javac.msg.bug=\u30B3\u30F3\u30D1\u30A4\u30E9\u3067\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F({0})\u3002Bug Database (http://bugs.java.com)\u3067\u91CD\u8907\u304C\u306A\u3044\u304B\u3092\u3054\u78BA\u8A8D\u306E\u3046\u3048\u3001Java bug\u30EC\u30DD\u30FC\u30C8\u30FB\u30DA\u30FC\u30B8(http://bugreport.java.com)\u3067Java\u30B3\u30F3\u30D1\u30A4\u30E9\u306B\u5BFE\u3059\u308Bbug\u306E\u767B\u9332\u3092\u304A\u9858\u3044\u3044\u305F\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306B\u306F\u3001\u305D\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3068\u4E0B\u8A18\u306E\u8A3A\u65AD\u5185\u5BB9\u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044\u3002\u3054\u5354\u529B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002
+javac.msg.bug=\u30B3\u30F3\u30D1\u30A4\u30E9\u3067\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F({0})\u3002Bug Database (http://bugs.java.com)\u3067\u91CD\u8907\u304C\u306A\u3044\u304B\u3092\u3054\u78BA\u8A8D\u306E\u3046\u3048\u3001Java bug\u30EC\u30DD\u30FC\u30C8\u30FB\u30DA\u30FC\u30B8(http://bugreport.java.com)\u3067Java\u30B3\u30F3\u30D1\u30A4\u30E9\u306B\u5BFE\u3059\u308Bbug\u306E\u767B\u9332\u3092\u304A\u9858\u3044\u3044\u305F\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306B\u306F\u3001\u305D\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3001\u4E0B\u8A18\u306E\u8A3A\u65AD\u5185\u5BB9\u3001\u304A\u3088\u3073Java\u30B3\u30F3\u30D1\u30A4\u30E9\u306B\u6E21\u3057\u305F\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044\u3002\u3054\u5354\u529B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002
javac.msg.io=\n\n\u5165\u51FA\u529B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\n\u8A73\u7D30\u306F\u6B21\u306E\u30B9\u30BF\u30C3\u30AF\u30C8\u30EC\u30FC\u30B9\u3067\u8ABF\u67FB\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n
@@ -214,3 +216,7 @@
javac.version={0} {1}
javac.fullVersion={0}\u30D5\u30EB\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3"{1}"
+
+javac.msg.parameters.output=javac\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u6B21\u306E\u5834\u6240\u306B\u51FA\u529B\u3057\u3066\u3044\u307E\u3059: {0}
+
+javac.msg.parameters.output.error=javac\u30D1\u30E9\u30E1\u30FC\u30BF\u3092{0}\u306B\u51FA\u529B\u3057\u3088\u3046\u3068\u3057\u305F\u3068\u304D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D1\u30E9\u30E1\u30FC\u30BF\u304C\u7D9A\u304D\u307E\u3059:
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -52,9 +52,9 @@
javac.opt.J=\u76F4\u63A5\u5C06 <\u6807\u8BB0> \u4F20\u9012\u7ED9\u8FD0\u884C\u65F6\u7CFB\u7EDF
javac.opt.encoding=\u6307\u5B9A\u6E90\u6587\u4EF6\u4F7F\u7528\u7684\u5B57\u7B26\u7F16\u7801
javac.opt.profile=\u8BF7\u786E\u4FDD\u4F7F\u7528\u7684 API \u5728\u6307\u5B9A\u7684\u914D\u7F6E\u6587\u4EF6\u4E2D\u53EF\u7528
-javac.opt.target=\u751F\u6210\u9488\u5BF9\u7279\u5B9A VM \u7248\u672C\u7684\u7C7B\u6587\u4EF6\u3002\u652F\u6301\u7684\u7248\u672C\uFF1A{0}
-javac.opt.release=\u9488\u5BF9\u7279\u5B9A\u53D1\u884C\u7248\u8FDB\u884C\u7F16\u8BD1\u3002\u652F\u6301\u7684\u53D1\u884C\u7248\uFF1A{0}
-javac.opt.source=\u63D0\u4F9B\u4E0E\u6307\u5B9A\u53D1\u884C\u7248\u7684\u6E90\u517C\u5BB9\u6027\u3002\u652F\u6301\u7684\u53D1\u884C\u7248\uFF1A{0}
+javac.opt.target=\u751F\u6210\u9002\u5408\u6307\u5B9A\u7684 Java SE \u53D1\u884C\u7248\u7684\u7C7B\u6587\u4EF6\u3002\u652F\u6301\u7684\u53D1\u884C\u7248\uFF1A{0}
+javac.opt.release=\u4E3A\u6307\u5B9A\u7684 Java SE \u53D1\u884C\u7248\u7F16\u8BD1\u3002\u652F\u6301\u7684\u53D1\u884C\u7248\uFF1A{0}
+javac.opt.source=\u63D0\u4F9B\u4E0E\u6307\u5B9A\u7684 Java SE \u53D1\u884C\u7248\u7684\u6E90\u517C\u5BB9\u6027\u3002\u652F\u6301\u7684\u53D1\u884C\u7248\uFF1A{0}
javac.opt.Werror=\u51FA\u73B0\u8B66\u544A\u65F6\u7EC8\u6B62\u7F16\u8BD1
javac.opt.A=\u4F20\u9012\u7ED9\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F\u7684\u9009\u9879
javac.opt.implicit=\u6307\u5B9A\u662F\u5426\u4E3A\u9690\u5F0F\u5F15\u7528\u6587\u4EF6\u751F\u6210\u7C7B\u6587\u4EF6
@@ -146,6 +146,8 @@
javac.opt.Xlint.desc.static=\u6709\u5173\u4F7F\u7528\u5B9E\u4F8B\u6765\u8BBF\u95EE\u9759\u6001\u6210\u5458\u7684\u8B66\u544A\u3002
+javac.opt.Xlint.desc.text-blocks=\u6709\u5173\u6587\u672C\u5757\u7F29\u8FDB\u4E2D\u7684\u7A7A\u683C\u5B57\u7B26\u4E0D\u4E00\u81F4\u7684\u8B66\u544A\u3002
+
javac.opt.Xlint.desc.try=\u6709\u5173\u4E0E\u4F7F\u7528 try \u5757 (\u4F8B\u5982 try-with-resources) \u76F8\u5173\u7684\u95EE\u9898\u7684\u8B66\u544A\u3002
javac.opt.Xlint.desc.unchecked=\u6709\u5173\u672A\u68C0\u67E5\u64CD\u4F5C\u7684\u8B66\u544A\u3002
@@ -202,7 +204,7 @@
javac.msg.usage.nonstandard.footer=\u8FD9\u4E9B\u989D\u5916\u9009\u9879\u5982\u6709\u66F4\u6539, \u6055\u4E0D\u53E6\u884C\u901A\u77E5\u3002
-javac.msg.bug=\u7F16\u8BD1\u5668 ({0}) \u4E2D\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF\u3002\u5982\u679C\u5728 Bug Database (http://bugs.java.com) \u4E2D\u6CA1\u6709\u627E\u5230\u8BE5\u9519\u8BEF, \u8BF7\u901A\u8FC7 Java Bug \u62A5\u544A\u9875 (http://bugreport.java.com) \u5EFA\u7ACB\u8BE5 Java \u7F16\u8BD1\u5668 Bug\u3002\u8BF7\u5728\u62A5\u544A\u4E2D\u9644\u4E0A\u60A8\u7684\u7A0B\u5E8F\u548C\u4EE5\u4E0B\u8BCA\u65AD\u4FE1\u606F\u3002\u8C22\u8C22\u3002
+javac.msg.bug=\u7F16\u8BD1\u5668 ({0}) \u4E2D\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF\u3002\u5982\u679C\u5728 Bug Database (http://bugs.java.com) \u4E2D\u6CA1\u6709\u627E\u5230\u8BE5\u9519\u8BEF\uFF0C\u8BF7\u901A\u8FC7 Java Bug \u62A5\u544A\u9875 (http://bugreport.java.com) \u5EFA\u7ACB\u8BE5 Java \u7F16\u8BD1\u5668 Bug\u3002\u8BF7\u5728\u62A5\u544A\u4E2D\u9644\u4E0A\u60A8\u7684\u7A0B\u5E8F\u3001\u4EE5\u4E0B\u8BCA\u65AD\u4FE1\u606F\u4EE5\u53CA\u4F20\u9012\u5230 Java \u7F16\u8BD1\u5668\u7684\u53C2\u6570\u3002\u8C22\u8C22\u3002
javac.msg.io=\n\n\u53D1\u751F\u8F93\u5165/\u8F93\u51FA\u9519\u8BEF\u3002\n\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u53C2\u9605\u4EE5\u4E0B\u5806\u6808\u8DDF\u8E2A\u3002\n
@@ -214,3 +216,7 @@
javac.version={0} {1}
javac.fullVersion={0}\u5B8C\u6574\u7248\u672C "{1}"
+
+javac.msg.parameters.output=\u6B63\u5728\u5C06 javac \u53C2\u6570\u6253\u5370\u5230\uFF1A{0}
+
+javac.msg.parameters.output.error=\u5C1D\u8BD5\u5C06 javac \u53C2\u6570\u6253\u5370\u5230 {0} \u65F6\u51FA\u9519\uFF0C\u53C2\u6570\u5C06\u91C7\u7528\uFF1A
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java Thu Jul 11 15:40:29 2019 +0530
@@ -46,37 +46,59 @@
}
private static boolean commonHelp(String mode) {
+ return commonHelp(mode, false);
+ }
+
+ private static boolean commonHelpWithConnect(String mode) {
+ return commonHelp(mode, true);
+ }
+
+ private static boolean commonHelp(String mode, boolean canConnectToRemote) {
// --pid <pid>
// --exe <exe>
// --core <core>
- System.out.println(" --pid <pid> \tTo attach to and operate on the given live process.");
- System.out.println(" --core <corefile>\tTo operate on the given core file.");
+ // --connect [<id>@]<host>
+ System.out.println(" --pid <pid> To attach to and operate on the given live process.");
+ System.out.println(" --core <corefile> To operate on the given core file.");
System.out.println(" --exe <executable for corefile>");
+ if (canConnectToRemote) {
+ System.out.println(" --connect [<id>@]<host> To connect to a remote debug server (debugd).");
+ }
System.out.println();
System.out.println(" The --core and --exe options must be set together to give the core");
- System.out.println(" file, and associated executable, to operate on. Otherwise the --pid");
- System.out.println(" option can be set to operate on a live process.");
- System.out.println(" The arguments for --exe and --core can use absolute or relative paths.");
+ System.out.println(" file, and associated executable, to operate on. They can use");
+ System.out.println(" absolute or relative paths.");
+ System.out.println(" The --pid option can be set to operate on a live process.");
+ if (canConnectToRemote) {
+ System.out.println(" The --connect option can be set to connect to a debug server (debugd).");
+ System.out.println(" --core, --pid, and --connect are mutually exclusive.");
+ } else {
+ System.out.println(" --core and --pid are mutually exclusive.");
+ }
System.out.println();
System.out.println(" Examples: jhsdb " + mode + " --pid 1234");
System.out.println(" or jhsdb " + mode + " --core ./core.1234 --exe ./myexe");
+ if (canConnectToRemote) {
+ System.out.println(" or jhsdb " + mode + " --connect debugserver");
+ System.out.println(" or jhsdb " + mode + " --connect id@debugserver");
+ }
return false;
}
private static boolean debugdHelp() {
// [options] <pid> [server-id]
// [options] <executable> <core> [server-id]
- System.out.println(" --serverid <id> \tA unique identifier for this debug server.");
+ System.out.println(" --serverid <id> A unique identifier for this debug server.");
return commonHelp("debugd");
}
private static boolean jinfoHelp() {
// --flags -> -flags
// --sysprops -> -sysprops
- System.out.println(" --flags \tTo print VM flags.");
- System.out.println(" --sysprops \tTo print Java System properties.");
- System.out.println(" <no option> \tTo print both of the above.");
- return commonHelp("jinfo");
+ System.out.println(" --flags To print VM flags.");
+ System.out.println(" --sysprops To print Java System properties.");
+ System.out.println(" <no option> To print both of the above.");
+ return commonHelpWithConnect("jinfo");
}
private static boolean jmapHelp() {
@@ -86,27 +108,27 @@
// --clstats -> -clstats
// --finalizerinfo -> -finalizerinfo
- System.out.println(" <no option> \tTo print same info as Solaris pmap.");
- System.out.println(" --heap \tTo print java heap summary.");
- System.out.println(" --binaryheap \tTo dump java heap in hprof binary format.");
- System.out.println(" --dumpfile <name>\tThe name of the dump file.");
- System.out.println(" --histo \tTo print histogram of java object heap.");
- System.out.println(" --clstats \tTo print class loader statistics.");
- System.out.println(" --finalizerinfo \tTo print information on objects awaiting finalization.");
- return commonHelp("jmap");
+ System.out.println(" <no option> To print same info as Solaris pmap.");
+ System.out.println(" --heap To print java heap summary.");
+ System.out.println(" --binaryheap To dump java heap in hprof binary format.");
+ System.out.println(" --dumpfile <name> The name of the dump file.");
+ System.out.println(" --histo To print histogram of java object heap.");
+ System.out.println(" --clstats To print class loader statistics.");
+ System.out.println(" --finalizerinfo To print information on objects awaiting finalization.");
+ return commonHelpWithConnect("jmap");
}
private static boolean jstackHelp() {
// --locks -> -l
// --mixed -> -m
- System.out.println(" --locks \tTo print java.util.concurrent locks.");
- System.out.println(" --mixed \tTo print both Java and native frames (mixed mode).");
- return commonHelp("jstack");
+ System.out.println(" --locks To print java.util.concurrent locks.");
+ System.out.println(" --mixed To print both Java and native frames (mixed mode).");
+ return commonHelpWithConnect("jstack");
}
private static boolean jsnapHelp() {
- System.out.println(" --all \tTo print all performance counters.");
- return commonHelp("jsnap");
+ System.out.println(" --all To print all performance counters.");
+ return commonHelpWithConnect("jsnap");
}
private static boolean toolHelp(String toolName) {
@@ -134,10 +156,12 @@
return launcherHelp();
}
+ private static final String NO_REMOTE = null;
+
private static void buildAttachArgs(ArrayList<String> newArgs, String pid,
- String exe, String core, boolean allowEmpty) {
- if (!allowEmpty && (pid == null) && (exe == null)) {
- throw new SAGetoptException("You have to set --pid or --exe.");
+ String exe, String core, String remote, boolean allowEmpty) {
+ if (!allowEmpty && (pid == null) && (exe == null) && (remote == NO_REMOTE)) {
+ throw new SAGetoptException("You have to set --pid or --exe or --connect.");
}
if (pid != null) { // Attach to live process
@@ -145,13 +169,17 @@
throw new SAGetoptException("Unnecessary argument: --exe");
} else if (core != null) {
throw new SAGetoptException("Unnecessary argument: --core");
+ } else if (remote != NO_REMOTE) {
+ throw new SAGetoptException("Unnecessary argument: --connect");
} else if (!pid.matches("^\\d+$")) {
throw new SAGetoptException("Invalid pid: " + pid);
}
newArgs.add(pid);
} else if (exe != null) {
- if (exe.length() == 0) {
+ if (remote != NO_REMOTE) {
+ throw new SAGetoptException("Unnecessary argument: --connect");
+ } else if (exe.length() == 0) {
throw new SAGetoptException("You have to set --exe.");
}
@@ -162,6 +190,8 @@
}
newArgs.add(core);
+ } else if (remote != NO_REMOTE) {
+ newArgs.add(remote);
}
}
@@ -190,7 +220,7 @@
}
}
- buildAttachArgs(newArgs, pid, exe, core, true);
+ buildAttachArgs(newArgs, pid, exe, core, NO_REMOTE, true);
CLHSDB.main(newArgs.toArray(new String[newArgs.size()]));
}
@@ -219,19 +249,20 @@
}
}
- buildAttachArgs(newArgs, pid, exe, core, true);
+ buildAttachArgs(newArgs, pid, exe, core, NO_REMOTE, true);
HSDB.main(newArgs.toArray(new String[newArgs.size()]));
}
private static void runJSTACK(String[] oldArgs) {
SAGetopt sg = new SAGetopt(oldArgs);
- String[] longOpts = {"exe=", "core=", "pid=",
+ String[] longOpts = {"exe=", "core=", "pid=", "connect=",
"mixed", "locks"};
ArrayList<String> newArgs = new ArrayList();
String pid = null;
String exe = null;
String core = null;
+ String remote = NO_REMOTE;
String s = null;
while((s = sg.next(null, longOpts)) != null) {
@@ -247,6 +278,10 @@
pid = sg.getOptarg();
continue;
}
+ if (s.equals("connect")) {
+ remote = sg.getOptarg();
+ continue;
+ }
if (s.equals("mixed")) {
newArgs.add("-m");
continue;
@@ -257,20 +292,21 @@
}
}
- buildAttachArgs(newArgs, pid, exe, core, false);
+ buildAttachArgs(newArgs, pid, exe, core, remote, false);
JStack jstack = new JStack(false, false);
jstack.runWithArgs(newArgs.toArray(new String[newArgs.size()]));
}
private static void runJMAP(String[] oldArgs) {
SAGetopt sg = new SAGetopt(oldArgs);
- String[] longOpts = {"exe=", "core=", "pid=",
+ String[] longOpts = {"exe=", "core=", "pid=", "connect=",
"heap", "binaryheap", "dumpfile=", "histo", "clstats", "finalizerinfo"};
ArrayList<String> newArgs = new ArrayList();
String pid = null;
String exe = null;
String core = null;
+ String remote = NO_REMOTE;
String s = null;
String dumpfile = null;
boolean requestHeapdump = false;
@@ -288,6 +324,10 @@
pid = sg.getOptarg();
continue;
}
+ if (s.equals("connect")) {
+ remote = sg.getOptarg();
+ continue;
+ }
if (s.equals("heap")) {
newArgs.add("-heap");
continue;
@@ -325,19 +365,20 @@
}
}
- buildAttachArgs(newArgs, pid, exe, core, false);
+ buildAttachArgs(newArgs, pid, exe, core, remote, false);
JMap.main(newArgs.toArray(new String[newArgs.size()]));
}
private static void runJINFO(String[] oldArgs) {
SAGetopt sg = new SAGetopt(oldArgs);
- String[] longOpts = {"exe=", "core=", "pid=",
+ String[] longOpts = {"exe=", "core=", "pid=", "connect=",
"flags", "sysprops"};
ArrayList<String> newArgs = new ArrayList();
String exe = null;
String pid = null;
String core = null;
+ String remote = NO_REMOTE;
String s = null;
while((s = sg.next(null, longOpts)) != null) {
@@ -353,6 +394,10 @@
pid = sg.getOptarg();
continue;
}
+ if (s.equals("connect")) {
+ remote = sg.getOptarg();
+ continue;
+ }
if (s.equals("flags")) {
newArgs.add("-flags");
continue;
@@ -363,18 +408,19 @@
}
}
- buildAttachArgs(newArgs, pid, exe, core, false);
+ buildAttachArgs(newArgs, pid, exe, core, remote, false);
JInfo.main(newArgs.toArray(new String[newArgs.size()]));
}
private static void runJSNAP(String[] oldArgs) {
SAGetopt sg = new SAGetopt(oldArgs);
- String[] longOpts = {"exe=", "core=", "pid=", "all"};
+ String[] longOpts = {"exe=", "core=", "pid=", "connect=", "all"};
ArrayList<String> newArgs = new ArrayList();
String exe = null;
String pid = null;
String core = null;
+ String remote = NO_REMOTE;
String s = null;
while((s = sg.next(null, longOpts)) != null) {
@@ -390,13 +436,17 @@
pid = sg.getOptarg();
continue;
}
+ if (s.equals("connect")) {
+ remote = sg.getOptarg();
+ continue;
+ }
if (s.equals("all")) {
newArgs.add("-a");
continue;
}
}
- buildAttachArgs(newArgs, pid, exe, core, false);
+ buildAttachArgs(newArgs, pid, exe, core, remote, false);
JSnap.main(newArgs.toArray(new String[newArgs.size()]));
}
@@ -436,7 +486,7 @@
}
}
- buildAttachArgs(newArgs, pid, exe, core, false);
+ buildAttachArgs(newArgs, pid, exe, core, NO_REMOTE, false);
if (serverid != null) {
newArgs.add(serverid);
}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/ci/ciEnv.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/ci/ciEnv.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,14 +50,12 @@
factoryField = type.getAddressField("_factory");
compilerDataField = type.getAddressField("_compiler_data");
taskField = type.getAddressField("_task");
- systemDictionaryModificationCounterField = new CIntField(type.getCIntegerField("_system_dictionary_modification_counter"), 0);
}
private static AddressField dependenciesField;
private static AddressField factoryField;
private static AddressField compilerDataField;
private static AddressField taskField;
- private static CIntField systemDictionaryModificationCounterField;
public ciEnv(Address addr) {
super(addr);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMOps.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMOps.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -59,7 +59,6 @@
G1IncCollectionPause,
G1Concurrent,
EnableBiasedLocking,
- RevokeBias,
BulkRevokeBias,
PopulateDumpSharedSpace,
JNIFunctionTableCopier,
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Thu Jul 11 15:40:29 2019 +0530
@@ -1098,10 +1098,15 @@
private void writeSymbol(Symbol sym) throws IOException {
// If name is already written don't write it again.
if (names.add(sym)) {
- byte[] buf = sym.asString().getBytes("UTF-8");
- writeHeader(HPROF_UTF8, buf.length + OBJ_ID_SIZE);
- writeSymbolID(sym);
- out.write(buf);
+ if(sym != null) {
+ byte[] buf = sym.asString().getBytes("UTF-8");
+ writeHeader(HPROF_UTF8, buf.length + OBJ_ID_SIZE);
+ writeSymbolID(sym);
+ out.write(buf);
+ } else {
+ writeHeader(HPROF_UTF8, 0 + OBJ_ID_SIZE);
+ writeSymbolID(null);
+ }
}
}
@@ -1152,7 +1157,8 @@
private void writeSymbolID(Symbol sym) throws IOException {
assert names.contains(sym);
- writeObjectID(getAddressValue(sym.getAddress()));
+ long address = (sym != null) ? getAddressValue(sym.getAddress()) : getAddressValue(null);
+ writeObjectID(address);
}
private void writeObjectID(long address) throws IOException {
--- a/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpServer.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpServer.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -206,6 +206,10 @@
* '/'. <p>
* The class overview describes how incoming request URIs are <a href="#mapping_description">mapped</a>
* to HttpContext instances.
+ * @apiNote The path should generally, but is not required to, end with '/'. If the path does not
+ * end with '/', eg such as with {@code "/foo"} then this would match requests with a path of
+ * {@code "/foobar"} or {@code "/foo/bar"}.
+ *
* @param path the root URI path to associate the context with
* @param handler the handler to invoke for incoming requests.
* @throws IllegalArgumentException if path is invalid, or if a context
@@ -227,6 +231,10 @@
* '/'. <p>
* The class overview describes how incoming request URIs are <a href="#mapping_description">mapped</a>
* to HttpContext instances.
+ * @apiNote The path should generally, but is not required to, end with '/'. If the path does not
+ * end with '/', eg such as with {@code "/foo"} then this would match requests with a path of
+ * {@code "/foobar"} or {@code "/foo/bar"}.
+ *
* @param path the root URI path to associate the context with
* @throws IllegalArgumentException if path is invalid, or if a context
* already exists for this path
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.api.directives.test/src/org/graalvm/compiler/api/directives/test/ProbabilityDirectiveTest.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.api.directives.test/src/org/graalvm/compiler/api/directives/test/ProbabilityDirectiveTest.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64StringLatin1InflateOp.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64StringLatin1InflateOp.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,11 +29,9 @@
import static jdk.vm.ci.amd64.AMD64.rdi;
import static jdk.vm.ci.amd64.AMD64.rdx;
import static jdk.vm.ci.amd64.AMD64.rsi;
-
import static jdk.vm.ci.code.ValueUtil.asRegister;
import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.REG;
-import jdk.vm.ci.amd64.AMD64;
import org.graalvm.compiler.asm.Label;
import org.graalvm.compiler.asm.amd64.AMD64Address;
import org.graalvm.compiler.asm.amd64.AMD64Assembler;
@@ -44,6 +42,7 @@
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
+import jdk.vm.ci.amd64.AMD64;
import jdk.vm.ci.amd64.AMD64Kind;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.meta.Value;
@@ -52,9 +51,13 @@
public final class AMD64StringLatin1InflateOp extends AMD64LIRInstruction {
public static final LIRInstructionClass<AMD64StringLatin1InflateOp> TYPE = LIRInstructionClass.create(AMD64StringLatin1InflateOp.class);
- @Alive({REG}) private Value rsrc;
- @Alive({REG}) private Value rdst;
- @Alive({REG}) private Value rlen;
+ @Use({REG}) private Value rsrc;
+ @Use({REG}) private Value rdst;
+ @Use({REG}) private Value rlen;
+
+ @Temp({REG}) private Value rsrcTemp;
+ @Temp({REG}) private Value rdstTemp;
+ @Temp({REG}) private Value rlenTemp;
@Temp({REG}) private Value vtmp1;
@Temp({REG}) private Value rtmp2;
@@ -66,9 +69,9 @@
assert asRegister(dst).equals(rdi);
assert asRegister(len).equals(rdx);
- rsrc = src;
- rdst = dst;
- rlen = len;
+ rsrcTemp = rsrc = src;
+ rdstTemp = rdst = dst;
+ rlenTemp = rlen = len;
vtmp1 = tool.newVariable(LIRKind.value(AMD64Kind.V512_BYTE));
rtmp2 = tool.newVariable(LIRKind.value(AMD64Kind.DWORD));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64StringUTF16CompressOp.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64StringUTF16CompressOp.java Thu Jul 11 15:40:29 2019 +0530
@@ -31,12 +31,10 @@
import static jdk.vm.ci.amd64.AMD64.rdi;
import static jdk.vm.ci.amd64.AMD64.rdx;
import static jdk.vm.ci.amd64.AMD64.rsi;
-
import static jdk.vm.ci.amd64.AMD64.rsp;
import static jdk.vm.ci.code.ValueUtil.asRegister;
import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.REG;
-import jdk.vm.ci.amd64.AMD64;
import org.graalvm.compiler.asm.Label;
import org.graalvm.compiler.asm.amd64.AMD64Address;
import org.graalvm.compiler.asm.amd64.AMD64Assembler;
@@ -47,6 +45,7 @@
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
+import jdk.vm.ci.amd64.AMD64;
import jdk.vm.ci.amd64.AMD64Kind;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.meta.Value;
@@ -56,9 +55,13 @@
public static final LIRInstructionClass<AMD64StringUTF16CompressOp> TYPE = LIRInstructionClass.create(AMD64StringUTF16CompressOp.class);
@Def({REG}) private Value rres;
- @Alive({REG}) private Value rsrc;
- @Alive({REG}) private Value rdst;
- @Alive({REG}) private Value rlen;
+ @Use({REG}) private Value rsrc;
+ @Use({REG}) private Value rdst;
+ @Use({REG}) private Value rlen;
+
+ @Temp({REG}) private Value rsrcTemp;
+ @Temp({REG}) private Value rdstTemp;
+ @Temp({REG}) private Value rlenTemp;
@Temp({REG}) private Value vtmp1;
@Temp({REG}) private Value vtmp2;
@@ -75,9 +78,9 @@
assert asRegister(res).equals(rax);
rres = res;
- rsrc = src;
- rdst = dst;
- rlen = len;
+ rsrcTemp = rsrc = src;
+ rdstTemp = rdst = dst;
+ rlenTemp = rlen = len;
LIRKind vkind = LIRKind.value(AMD64Kind.V512_BYTE);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,7 +1,6 @@
doclet.build_version=\u6A19\u6E96Doclet\u30D0\u30FC\u30B8\u30E7\u30F3{0}
doclet.Contents=\u30B3\u30F3\u30C6\u30F3\u30C4
doclet.Overview=\u6982\u8981
-doclet.Window_Overview=\u6982\u8981\u30EA\u30B9\u30C8
doclet.Window_Overview_Summary=\u6982\u8981
doclet.Element=\u8981\u7D20
doclet.Package=\u30D1\u30C3\u30B1\u30FC\u30B8
@@ -93,6 +92,7 @@
doclet.Interfaces=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9
doclet.Enclosing_Class=\u542B\u307E\u308C\u3066\u3044\u308B\u30AF\u30E9\u30B9:
doclet.Enclosing_Interface=\u542B\u307E\u308C\u3066\u3044\u308B\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9:
+doclet.Inheritance_Tree=\u7D99\u627F\u30C4\u30EA\u30FC
doclet.System_Property=\u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3
doclet.Window_Source_title=\u30BD\u30FC\u30B9\u30FB\u30B3\u30FC\u30C9
doclet.Window_Help_title=API\u30D8\u30EB\u30D7
@@ -121,8 +121,6 @@
doclet.help.deprecated.body={0}\u30DA\u30FC\u30B8\u306F\u3001\u63A8\u5968\u3055\u308C\u3066\u3044\u306A\u3044\u3059\u3079\u3066\u306EAPI\u306E\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u3002\u975E\u63A8\u5968API\u3068\u306F\u3001\u6A5F\u80FD\u6539\u826F\u306A\u3069\u306E\u7406\u7531\u304B\u3089\u4F7F\u7528\u3092\u304A\u85A6\u3081\u3067\u304D\u306A\u304F\u306A\u3063\u305FAPI\u306E\u3053\u3068\u3067\u3001\u901A\u5E38\u306F\u305D\u308C\u306B\u4EE3\u308F\u308BAPI\u304C\u63D0\u4F9B\u3055\u308C\u307E\u3059\u3002\u975E\u63A8\u5968API\u306F\u4ECA\u5F8C\u306E\u5B9F\u88C5\u3067\u524A\u9664\u3055\u308C\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002
doclet.help.index.head=\u7D22\u5F15
doclet.help.index.body={0}\u306B\u306F\u3001\u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u3001\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3001\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u3001\u30E1\u30BD\u30C3\u30C9\u304A\u3088\u3073\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8\u9806\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3068\u3001\u3059\u3079\u3066\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u304A\u3088\u3073\u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u306E\u30EA\u30B9\u30C8\u304C\u542B\u307E\u308C\u307E\u3059\u3002
-doclet.help.frames.head=\u30D5\u30EC\u30FC\u30E0/\u30D5\u30EC\u30FC\u30E0\u306A\u3057
-doclet.help.frames.body=\u3053\u308C\u3089\u306E\u30EA\u30F3\u30AF\u306FHTML\u30D5\u30EC\u30FC\u30E0\u306E\u8868\u793A\u3068\u975E\u8868\u793A\u3092\u5207\u308A\u66FF\u3048\u307E\u3059\u3002\u3059\u3079\u3066\u306E\u30DA\u30FC\u30B8\u306F\u30D5\u30EC\u30FC\u30E0\u3042\u308A\u3067\u3082\u3001\u30D5\u30EC\u30FC\u30E0\u306A\u3057\u3067\u3082\u8868\u793A\u3067\u304D\u307E\u3059\u3002
doclet.help.serial_form.body=\u76F4\u5217\u5316\u53EF\u80FD\u307E\u305F\u306F\u5916\u90E8\u5316\u53EF\u80FD\u306A\u5404\u30AF\u30E9\u30B9\u306F\u3001\u76F4\u5217\u5316\u30D5\u30A3\u30FC\u30EB\u30C9\u3068\u30E1\u30BD\u30C3\u30C9\u306E\u8AAC\u660E\u3092\u542B\u307F\u307E\u3059\u3002\u3053\u306E\u60C5\u5831\u306F\u3001API\u3092\u4F7F\u7528\u3059\u308B\u958B\u767A\u8005\u3067\u306F\u306A\u304F\u3001\u518D\u5B9F\u88C5\u3092\u884C\u3046\u62C5\u5F53\u8005\u306B\u5F79\u7ACB\u3061\u307E\u3059\u3002\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u30FB\u30D0\u30FC\u306B\u30EA\u30F3\u30AF\u304C\u306A\u3044\u5834\u5408\u3001\u76F4\u5217\u5316\u3055\u308C\u305F\u30AF\u30E9\u30B9\u306B\u79FB\u52D5\u3057\u3066\u3001\u30AF\u30E9\u30B9\u8A18\u8FF0\u306E\u300C\u95A2\u9023\u9805\u76EE\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u306B\u3042\u308B\u300C\u76F4\u5217\u5316\u3055\u308C\u305F\u5F62\u5F0F\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3053\u3068\u306B\u3088\u308A\u3001\u3053\u306E\u60C5\u5831\u3092\u8868\u793A\u3067\u304D\u307E\u3059\u3002
doclet.help.constants.body={0}\u30DA\u30FC\u30B8\u306B\u306F\u3001static final\u30D5\u30A3\u30FC\u30EB\u30C9\u3068\u305D\u306E\u5024\u306E\u30EA\u30B9\u30C8\u304C\u3042\u308A\u307E\u3059\u3002
doclet.help.footnote=\u3053\u306E\u30D8\u30EB\u30D7\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3001\u6A19\u6E96doclet\u306B\u3088\u3063\u3066\u751F\u6210\u3055\u308C\u305FAPI\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002
@@ -196,9 +194,7 @@
doclet.usage.header.parameters=<html-code>
doclet.usage.header.description=\u5404\u30DA\u30FC\u30B8\u306B\u30D8\u30C3\u30C0\u30FC\u30FB\u30C6\u30AD\u30B9\u30C8\u3092\u542B\u3081\u307E\u3059
-doclet.usage.html4.description=HTML 4.01\u51FA\u529B\u3092\u751F\u6210\u3057\u307E\u3059
-
-doclet.usage.html5.description=HTML 5\u51FA\u529B\u3092\u751F\u6210\u3057\u307E\u3059
+doclet.usage.html5.description=HTML 5\u51FA\u529B\u3092\u751F\u6210\u3057\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u5FC5\u9808\u3067\u306F\u306A\u304F\u306A\u308A\u307E\u3057\u305F\u3002
doclet.usage.footer.parameters=<html-code>
doclet.usage.footer.description=\u5404\u30DA\u30FC\u30B8\u306B\u30D5\u30C3\u30BF\u30FC\u30FB\u30C6\u30AD\u30B9\u30C8\u3092\u542B\u3081\u307E\u3059
@@ -298,8 +294,5 @@
doclet.usage.xdoclint-package.parameters=([-]<packages>)
doclet.usage.xdoclint-package.description=\u7279\u5B9A\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3057\u307E\u3059\u3002<packages>\u306F\n\u30AB\u30F3\u30DE\u3067\u533A\u5207\u3089\u308C\u305F\u30D1\u30C3\u30B1\u30FC\u30B8\u6307\u5B9A\u5B50\u306E\u30EA\u30B9\u30C8\u3067\u3059\u3002\u30D1\u30C3\u30B1\u30FC\u30B8\n\u6307\u5B9A\u5B50\u306F\u3001\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u4FEE\u98FE\u3055\u308C\u305F\u540D\u524D\u3001\u307E\u305F\u306F\u30D1\u30C3\u30B1\u30FC\u30B8\u540D\n\u306E\u63A5\u982D\u8F9E\u306E\u5F8C\u306B.*\u3092\u6307\u5B9A(\u6307\u5B9A\u3057\u305F\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u3059\u3079\u3066\u306E\u30B5\u30D6\u30D1\u30C3\u30B1\u30FC\u30B8\n\u306B\u62E1\u5F35)\u3057\u305F\u3082\u306E\u3067\u3059\u3002\u30D1\u30C3\u30B1\u30FC\u30B8\u6307\u5B9A\u5B50\u306E\u524D\u306B-\u3092\u6307\u5B9A\u3059\u308B\u3068\u3001\n\u6307\u5B9A\u3057\u305F\u30D1\u30C3\u30B1\u30FC\u30B8\u306B\u95A2\u3059\u308B\u30C1\u30A7\u30C3\u30AF\u3092\u7121\u52B9\u306B\u3067\u304D\u307E\u3059\u3002
-# L10N: do not localize the option names -html4 and -html5
-doclet.HTML_4_specified=-html4\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u3066HTML\u30D0\u30FC\u30B8\u30E7\u30F3\u306BHTML 4.01\u3092\u6307\u5B9A\u3057\u307E\u3057\u305F\u3002\n\u30C7\u30D5\u30A9\u30EB\u30C8\u306F\u73FE\u5728HTML5\u3067\u3001HTML 4.01\u306E\u30B5\u30DD\u30FC\u30C8\u306F\u4ECA\u5F8C\u306E\u30EA\u30EA\u30FC\u30B9\u3067\n\u524A\u9664\u3055\u308C\u307E\u3059\u3002\u3053\u306E\u8B66\u544A\u3092\u8868\u793A\u3057\u306A\u3044\u3088\u3046\u306B\u3059\u308B\u306B\u306F\u3001\u30B3\u30E1\u30F3\u30C8\u306EHTML\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30C8\u304C\nHTML5\u3067\u6709\u52B9\u3067\u3042\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3001-html4\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-
-# L10N: do not localize the option names --frames
-doclet.Frames_specified=--frames\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u3066\u3001\u30D5\u30EC\u30FC\u30E0\u306E\u751F\u6210\u3092\u6307\u5B9A\u3057\u307E\u3057\u305F\u3002\n\u73FE\u5728\u3001\u30D5\u30EC\u30FC\u30E0\u3092\u751F\u6210\u3057\u306A\u3044\u306E\u304C\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u3042\u308A\u3001\u30D5\u30EC\u30FC\u30E0\u306E\n\u30B5\u30DD\u30FC\u30C8\u306F\u4ECA\u5F8C\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u307E\u3059\u3002\n\u3053\u306E\u8B66\u544A\u3092\u8868\u793A\u3057\u306A\u3044\u3088\u3046\u306B\u3059\u308B\u306B\u306F\u3001--frames\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u524A\u9664\u3057\u3001\u30D5\u30EC\u30FC\u30E0\u306E\u4F7F\u7528\u3092\u907F\u3051\u3066\u304F\u3060\u3055\u3044\u3002
+# L10N: do not localize the option names --no-frames
+doclet.NoFrames_specified=--no-frames\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u5FC5\u9808\u3067\u306F\u306A\u304F\u306A\u308A\u3001\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\n\u524A\u9664\u3055\u308C\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,7 +1,6 @@
doclet.build_version=\u6807\u51C6 Doclet \u7248\u672C {0}
doclet.Contents=\u76EE\u5F55
doclet.Overview=\u6982\u89C8
-doclet.Window_Overview=\u6982\u89C8\u5217\u8868
doclet.Window_Overview_Summary=\u6982\u89C8
doclet.Element=\u5143\u7D20
doclet.Package=\u7A0B\u5E8F\u5305
@@ -93,6 +92,7 @@
doclet.Interfaces=\u63A5\u53E3
doclet.Enclosing_Class=\u5C01\u95ED\u7C7B:
doclet.Enclosing_Interface=\u5C01\u95ED\u63A5\u53E3:
+doclet.Inheritance_Tree=\u7EE7\u627F\u6811
doclet.System_Property=\u7CFB\u7EDF\u5C5E\u6027
doclet.Window_Source_title=\u6E90\u4EE3\u7801
doclet.Window_Help_title=API \u5E2E\u52A9
@@ -121,8 +121,6 @@
doclet.help.deprecated.body={0} \u9875\u9762\u5217\u51FA\u4E86\u6240\u6709\u5DF2\u8FC7\u65F6\u7684 API\u3002\u4E00\u822C\u7531\u4E8E\u8FDB\u884C\u4E86\u6539\u8FDB\u5E76\u4E14\u901A\u5E38\u63D0\u4F9B\u4E86\u66FF\u4EE3\u7684 API, \u6240\u4EE5\u5EFA\u8BAE\u4E0D\u8981\u4F7F\u7528\u5DF2\u8FC7\u65F6\u7684 API\u3002\u5728\u5C06\u6765\u7684\u5B9E\u73B0\u8FC7\u7A0B\u4E2D, \u53EF\u80FD\u4F1A\u5220\u9664\u5DF2\u8FC7\u65F6\u7684 API\u3002
doclet.help.index.head=\u7D22\u5F15
doclet.help.index.body={0} \u5305\u542B\u6240\u6709\u7C7B\u3001\u63A5\u53E3\u3001\u6784\u9020\u5668\u3001\u65B9\u6CD5\u548C\u5B57\u6BB5\u7684\u6309\u5B57\u6BCD\u987A\u5E8F\u6392\u5217\u7684\u7D22\u5F15\uFF0C\u4EE5\u53CA\u6240\u6709\u7A0B\u5E8F\u5305\u548C\u6240\u6709\u7C7B\u7684\u5217\u8868\u3002
-doclet.help.frames.head=\u6846\u67B6/\u65E0\u6846\u67B6
-doclet.help.frames.body=\u8FD9\u4E9B\u94FE\u63A5\u7528\u4E8E\u663E\u793A\u548C\u9690\u85CF HTML \u6846\u67B6\u3002\u6240\u6709\u9875\u9762\u5747\u5177\u6709\u6709\u6846\u67B6\u548C\u65E0\u6846\u67B6\u4E24\u79CD\u663E\u793A\u65B9\u5F0F\u3002
doclet.help.serial_form.body=\u6BCF\u4E2A\u53EF\u5E8F\u5217\u5316\u6216\u53EF\u5916\u90E8\u5316\u7684\u7C7B\u90FD\u6709\u5176\u5E8F\u5217\u5316\u5B57\u6BB5\u548C\u65B9\u6CD5\u7684\u8BF4\u660E\u3002\u6B64\u4FE1\u606F\u5BF9\u91CD\u65B0\u5B9E\u73B0\u8005\u6709\u7528, \u800C\u5BF9\u4F7F\u7528 API \u7684\u5F00\u53D1\u8005\u5219\u6CA1\u6709\u4EC0\u4E48\u7528\u5904\u3002\u5C3D\u7BA1\u5BFC\u822A\u680F\u4E2D\u6CA1\u6709\u94FE\u63A5, \u4F46\u60A8\u53EF\u4EE5\u901A\u8FC7\u4E0B\u5217\u65B9\u5F0F\u83B7\u53D6\u6B64\u4FE1\u606F: \u8F6C\u81F3\u4EFB\u4F55\u5E8F\u5217\u5316\u7C7B, \u7136\u540E\u5355\u51FB\u7C7B\u8BF4\u660E\u7684 "\u53E6\u8BF7\u53C2\u9605" \u90E8\u5206\u4E2D\u7684 "\u5E8F\u5217\u5316\u8868\u683C"\u3002
doclet.help.constants.body={0}\u9875\u9762\u5217\u51FA\u4E86\u9759\u6001\u6700\u7EC8\u5B57\u6BB5\u53CA\u5176\u503C\u3002
doclet.help.footnote=\u6B64\u5E2E\u52A9\u6587\u4EF6\u9002\u7528\u4E8E\u7531\u6807\u51C6 doclet \u751F\u6210\u7684 API \u6587\u6863\u3002
@@ -196,9 +194,7 @@
doclet.usage.header.parameters=<html-code>
doclet.usage.header.description=\u5305\u542B\u6BCF\u4E2A\u9875\u9762\u7684\u9875\u7709\u6587\u672C
-doclet.usage.html4.description=\u751F\u6210 HTML 4.01 \u8F93\u51FA
-
-doclet.usage.html5.description=\u751F\u6210 HTML 5 \u8F93\u51FA
+doclet.usage.html5.description=\u751F\u6210 HTML 5 \u8F93\u51FA\u3002\u6B64\u9009\u9879\u4E0D\u518D\u662F\u5FC5\u9700\u7684\u3002
doclet.usage.footer.parameters=<html-code>
doclet.usage.footer.description=\u5305\u542B\u6BCF\u4E2A\u9875\u9762\u7684\u9875\u811A\u6587\u672C
@@ -298,8 +294,5 @@
doclet.usage.xdoclint-package.parameters=([-]<packages>)
doclet.usage.xdoclint-package.description=\u5728\u7279\u5B9A\u7684\u7A0B\u5E8F\u5305\u4E2D\u542F\u7528\u6216\u7981\u7528\u68C0\u67E5\u3002<\u7A0B\u5E8F\u5305>\n\u662F\u9017\u53F7\u5206\u9694\u7684\u7A0B\u5E8F\u5305\u8BF4\u660E\u7B26\u5217\u8868\u3002\u7A0B\u5E8F\u5305\n\u8BF4\u660E\u7B26\u662F\u7A0B\u5E8F\u5305\u7684\u9650\u5B9A\u540D\u79F0\u6216\u7A0B\u5E8F\u5305\u540D\u79F0\n\u524D\u7F00\u540E\u8DDF .*, \u5B83\u6269\u5C55\u5230\u7ED9\u5B9A\u7A0B\u5E8F\u5305\u7684\u6240\u6709\n\u5B50\u7A0B\u5E8F\u5305\u3002\u5728\u7A0B\u5E8F\u5305\u8BF4\u660E\u7B26\u524D\u9762\u52A0\u4E0A - \u53EF\u4EE5\n\u4E3A\u6307\u5B9A\u7A0B\u5E8F\u5305\u7981\u7528\u68C0\u67E5\u3002
-# L10N: do not localize the option names -html4 and -html5
-doclet.HTML_4_specified=\u60A8\u5DF2\u4F7F\u7528 -html4 \u9009\u9879\u5C06 HTML \u7248\u672C\u6307\u5B9A\u4E3A HTML 4.01\u3002\n\u9ED8\u8BA4\u503C\u5F53\u524D\u4E3A HTML5\uFF0C\u672A\u6765\u7684\u53D1\u884C\u7248\u4E2D\u5C06\u5220\u9664\u5BF9 \nHTML 4.01 \u7684\u652F\u6301\u3002\u8981\u9690\u85CF\u6B64\u8B66\u544A\uFF0C\u8BF7\u786E\u4FDD\u60A8\u7684\u6CE8\u91CA\u4E2D\u4F7F\u7528\u7684\u4EFB\u4F55 HTML \u7ED3\u6784\n\u5728 HTML5 \u4E2D\u5747\u6709\u6548\u5E76\u5220\u9664 -html4 \u9009\u9879\u3002
-
-# L10N: do not localize the option names --frames
-doclet.Frames_specified=\u60A8\u5DF2\u6307\u5B9A\u901A\u8FC7\u4F7F\u7528 --frames \u9009\u9879\u751F\u6210\u5E27\u3002\n\u9ED8\u8BA4\u8BBE\u7F6E\u5F53\u524D\u4E3A\u4E0D\u751F\u6210\u5E27\uFF0C\u5BF9\u5E27\u7684\u652F\u6301\n\u5C06\u5728\u672A\u6765\u7684\u53D1\u884C\u7248\u4E2D\u5220\u9664\u3002\n\u8981\u9690\u85CF\u6B64\u8B66\u544A\uFF0C\u8BF7\u5220\u9664 --frames \u9009\u9879\u5E76\u907F\u514D\u4F7F\u7528\u5E27\u3002
+# L10N: do not localize the option names --no-frames
+doclet.NoFrames_specified=--no-frames \u9009\u9879\u4E0D\u518D\u662F\u5FC5\u9700\u7684\uFF0C\u53EF\u80FD\n\u4F1A\u5728\u672A\u6765\u53D1\u884C\u7248\u4E2D\u5220\u9664\u6B64\u9009\u9879\u3002
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -47,6 +47,8 @@
doclet.Notice_taglet_conflict_warn=\u6CE8\u610F: \u6A19\u6E96\u30BF\u30B0\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\u53EF\u80FD\u6027\u306E\u3042\u308B\u30AB\u30B9\u30BF\u30E0\u30FB\u30BF\u30B0: {0}\u3002\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3092\u907F\u3051\u308B\u305F\u3081\u306B\u3001\u30AB\u30B9\u30BF\u30E0\u30FB\u30BF\u30B0\u540D\u306E\u4E2D\u306B\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u30D4\u30EA\u30AA\u30C9(.)\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002
doclet.Error_taglet_not_registered=\u30A8\u30E9\u30FC - \u30BF\u30B0\u30EC\u30C3\u30C8{1}\u3092\u767B\u9332\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u3068\u304D\u306B\u3001\u4F8B\u5916{0}\u304C\u30B9\u30ED\u30FC\u3055\u308C\u307E\u3057\u305F...
doclet.Error_invalid_custom_tag_argument=\u30A8\u30E9\u30FC - {0}\u306F-tag\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u5BFE\u3057\u3066\u7121\u52B9\u306A\u5F15\u6570\u3067\u3059...
+doclet.taglet_could_not_set_location = \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D1\u30B9: {0}\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
+doclet.not_standard_file_manager = \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D1\u30B9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002\u30D5\u30A1\u30A4\u30EB\u30FB\u30DE\u30CD\u30FC\u30B8\u30E3\u304CStandardJavaFileManager\u3067\u306F\u3042\u308A\u307E\u305B\u3093
doclet.Author=\u4F5C\u6210\u8005:
doclet.DefaultValue=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024:
doclet.PropertyDescription=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8AAC\u660E:
@@ -85,10 +87,8 @@
doclet.Opened_Packages_Summary=\u30AA\u30FC\u30D7\u30F3
doclet.Concealed_Packages_Summary=\u975E\u8868\u793A
doclet.From=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5143
-doclet.Packages_Summary=\u30D1\u30C3\u30B1\u30FC\u30B8
doclet.Uses_Summary=\u4F7F\u7528
doclet.Provides_Summary=\u63D0\u4F9B
-doclet.Module_Summary=\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u6982\u8981
doclet.Interface_Summary=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u6982\u8981
doclet.Annotation_Types_Summary=\u6CE8\u91C8\u578B\u306E\u6982\u8981
doclet.Enum_Summary=\u5217\u6319\u578B\u306E\u6982\u8981
@@ -111,12 +111,9 @@
doclet.Classes=\u30AF\u30E9\u30B9
doclet.packages=\u30D1\u30C3\u30B1\u30FC\u30B8
doclet.modules=\u30E2\u30B8\u30E5\u30FC\u30EB
-doclet.types=\u30BF\u30A4\u30D7
doclet.All_Classes=\u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9
doclet.All_Superinterfaces=\u3059\u3079\u3066\u306E\u30B9\u30FC\u30D1\u30FC\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9:
doclet.All_Implemented_Interfaces=\u3059\u3079\u3066\u306E\u5B9F\u88C5\u3055\u308C\u305F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9:
-doclet.All_classes_and_interfaces=\u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9(\u975Estatic\u306E\u30CD\u30B9\u30C8\u3055\u308C\u305F\u578B\u3092\u9664\u304F)
-doclet.Package_class_and_interface_descriptions=\u30D1\u30C3\u30B1\u30FC\u30B8\u3001\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u8AAC\u660E
doclet.Interface=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9
doclet.Class=\u30AF\u30E9\u30B9
doclet.AnnotationType=\u6CE8\u91C8\u578B
@@ -157,7 +154,7 @@
doclet.Annotation_Type_Member_Detail=\u8981\u7D20\u306E\u8A73\u7D30
doclet.Enum_Constant_Detail=\u5217\u6319\u578B\u5B9A\u6570\u306E\u8A73\u7D30
doclet.Constants_Summary=\u5B9A\u6570\u30D5\u30A3\u30FC\u30EB\u30C9\u5024
-doclet.Field_Detail=\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u8A73\u7D30
+doclet.Field_Detail=\u30D5\u30A3\u30FC\u30EB\u30C9\u8A73\u7D30
doclet.Property_Detail=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8A73\u7D30
doclet.Method_Detail=\u30E1\u30BD\u30C3\u30C9\u306E\u8A73\u7D30
doclet.Constructor_Detail=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u8A73\u7D30
@@ -170,12 +167,9 @@
doclet.dest_dir_create=\u5B9B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u4F5C\u6210\u4E2D: "{0}"
doclet.in={1}\u306E{0}
doclet.Use_Table_Summary=\u8868\u3001{0}\u306E\u30EA\u30B9\u30C8\u304A\u3088\u3073\u8AAC\u660E\u306E\u4F7F\u7528
-doclet.Constants_Table_Summary={0}\u8868\u3001\u5B9A\u6570\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30EA\u30B9\u30C8\u304A\u3088\u3073\u5024
doclet.Member_Table_Summary={0}\u8868\u3001{1}\u306E\u30EA\u30B9\u30C8\u304A\u3088\u3073\u8AAC\u660E
-doclet.Indirect_Packages_Table_Summary={0}\u8868\u3001{1}\u306E\u30EA\u30B9\u30C8\u304A\u3088\u3073{2}
doclet.fields=\u30D5\u30A3\u30FC\u30EB\u30C9
doclet.Fields=\u30D5\u30A3\u30FC\u30EB\u30C9
-doclet.properties=\u30D7\u30ED\u30D1\u30C6\u30A3
doclet.Properties=\u30D7\u30ED\u30D1\u30C6\u30A3
doclet.constructors=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF
doclet.Constructors=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF
@@ -188,16 +182,11 @@
doclet.Concrete_Methods=concrete\u30E1\u30BD\u30C3\u30C9
doclet.Default_Methods=\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9
doclet.Deprecated_Methods=\u63A8\u5968\u3055\u308C\u3066\u3044\u306A\u3044\u30E1\u30BD\u30C3\u30C9
-doclet.annotation_type_optional_members=\u4EFB\u610F\u8981\u7D20
doclet.Annotation_Type_Optional_Members=\u4EFB\u610F\u8981\u7D20
-doclet.annotation_type_required_members=\u5FC5\u9808\u8981\u7D20
doclet.Annotation_Type_Required_Members=\u5FC5\u9808\u8981\u7D20
doclet.enum_constants=\u5217\u6319\u578B\u5B9A\u6570
doclet.Enum_Constants=\u5217\u6319\u5B9A\u6570
-doclet.nested_classes=\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30AF\u30E9\u30B9
doclet.Nested_Classes=\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30AF\u30E9\u30B9
-doclet.subclasses=\u30B5\u30D6\u30AF\u30E9\u30B9
-doclet.subinterfaces=\u30B5\u30D6\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9
doclet.Modifier=\u4FEE\u98FE\u5B50
doclet.Type=\u30BF\u30A4\u30D7
doclet.Modifier_and_Type=\u4FEE\u98FE\u5B50\u3068\u30BF\u30A4\u30D7
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -47,6 +47,8 @@
doclet.Notice_taglet_conflict_warn=\u6CE8: \u53EF\u80FD\u8986\u76D6\u5C06\u6765\u7684\u6807\u51C6\u6807\u8BB0\u7684\u5B9A\u5236\u6807\u8BB0: {0}\u3002\u4E3A\u4E86\u907F\u514D\u51FA\u73B0\u53EF\u80FD\u7684\u8986\u76D6, \u8BF7\u5728\u5B9A\u5236\u6807\u8BB0\u540D\u79F0\u4E2D\u81F3\u5C11\u4F7F\u7528\u4E00\u4E2A\u53E5\u70B9\u5B57\u7B26 (.)\u3002
doclet.Error_taglet_not_registered=\u9519\u8BEF - \u5C1D\u8BD5\u6CE8\u518C Taglet {1}\u65F6\u629B\u51FA\u5F02\u5E38\u9519\u8BEF{0}...
doclet.Error_invalid_custom_tag_argument=\u9519\u8BEF - \u5BF9\u4E8E -tag \u9009\u9879, {0}\u662F\u65E0\u6548\u53C2\u6570...
+doclet.taglet_could_not_set_location = \u65E0\u6CD5\u8BBE\u7F6E taglet \u8DEF\u5F84\uFF1A{0}
+doclet.not_standard_file_manager = \u65E0\u6CD5\u8BBE\u7F6E taglet \u8DEF\u5F84\uFF1B\u6587\u4EF6\u7BA1\u7406\u5668\u4E0D\u662F StandardJavaFileManager
doclet.Author=\u4F5C\u8005:
doclet.DefaultValue=\u9ED8\u8BA4\u503C:
doclet.PropertyDescription=\u5C5E\u6027\u8BF4\u660E:
@@ -85,10 +87,8 @@
doclet.Opened_Packages_Summary=\u6253\u5F00\u9879
doclet.Concealed_Packages_Summary=\u5DF2\u9690\u85CF
doclet.From=\u4ECE
-doclet.Packages_Summary=\u7A0B\u5E8F\u5305
doclet.Uses_Summary=\u4F7F\u7528
doclet.Provides_Summary=\u63D0\u4F9B
-doclet.Module_Summary=\u6A21\u5757\u6982\u8981
doclet.Interface_Summary=\u63A5\u53E3\u6982\u8981
doclet.Annotation_Types_Summary=\u6CE8\u91CA\u7C7B\u578B\u6982\u8981
doclet.Enum_Summary=\u679A\u4E3E\u6982\u8981
@@ -111,12 +111,9 @@
doclet.Classes=\u7C7B
doclet.packages=\u7A0B\u5E8F\u5305
doclet.modules=\u6A21\u5757
-doclet.types=\u7C7B\u578B
doclet.All_Classes=\u6240\u6709\u7C7B
doclet.All_Superinterfaces=\u6240\u6709\u8D85\u7EA7\u63A5\u53E3:
doclet.All_Implemented_Interfaces=\u6240\u6709\u5DF2\u5B9E\u73B0\u7684\u63A5\u53E3:
-doclet.All_classes_and_interfaces=\u6240\u6709\u7C7B\u548C\u63A5\u53E3 (\u9664\u4E86\u975E\u9759\u6001\u5D4C\u5957\u7C7B\u578B)
-doclet.Package_class_and_interface_descriptions=\u7A0B\u5E8F\u5305, \u7C7B\u548C\u63A5\u53E3\u8BF4\u660E
doclet.Interface=\u63A5\u53E3
doclet.Class=\u7C7B
doclet.AnnotationType=\u6CE8\u91CA\u7C7B\u578B
@@ -158,7 +155,7 @@
doclet.Enum_Constant_Detail=\u679A\u4E3E\u5E38\u91CF\u8BE6\u7EC6\u8D44\u6599
doclet.Constants_Summary=\u5E38\u91CF\u5B57\u6BB5\u503C
doclet.Field_Detail=\u5B57\u6BB5\u8BE6\u7EC6\u8D44\u6599
-doclet.Property_Detail=\u5C5E\u6027\u8BE6\u7EC6\u4FE1\u606F
+doclet.Property_Detail=\u5C5E\u6027\u8BE6\u7EC6\u8D44\u6599
doclet.Method_Detail=\u65B9\u6CD5\u8BE6\u7EC6\u8D44\u6599
doclet.Constructor_Detail=\u6784\u9020\u5668\u8BE6\u7EC6\u8D44\u6599
doclet.Deprecated=\u5DF2\u8FC7\u65F6\u3002
@@ -170,12 +167,9 @@
doclet.dest_dir_create=\u6B63\u5728\u521B\u5EFA\u76EE\u6807\u76EE\u5F55: "{0}"
doclet.in={1}\u4E2D\u7684{0}
doclet.Use_Table_Summary=\u4F7F\u7528\u8868, \u5217\u8868{0}\u548C\u89E3\u91CA
-doclet.Constants_Table_Summary={0}\u8868, \u5217\u8868\u5E38\u91CF\u5B57\u6BB5\u548C\u503C
doclet.Member_Table_Summary={0}\u8868, \u5217\u8868{1}\u548C\u89E3\u91CA
-doclet.Indirect_Packages_Table_Summary={0} \u8868, \u5176\u4E2D\u5217\u51FA {1} \u548C {2}
doclet.fields=\u5B57\u6BB5
doclet.Fields=\u5B57\u6BB5
-doclet.properties=\u5C5E\u6027
doclet.Properties=\u5C5E\u6027
doclet.constructors=\u6784\u9020\u5668
doclet.Constructors=\u6784\u9020\u5668
@@ -188,16 +182,11 @@
doclet.Concrete_Methods=\u5177\u4F53\u65B9\u6CD5
doclet.Default_Methods=\u9ED8\u8BA4\u65B9\u6CD5
doclet.Deprecated_Methods=\u5DF2\u8FC7\u65F6\u7684\u65B9\u6CD5
-doclet.annotation_type_optional_members=\u53EF\u9009\u5143\u7D20
doclet.Annotation_Type_Optional_Members=\u53EF\u9009\u5143\u7D20
-doclet.annotation_type_required_members=\u5FC5\u9700\u7684\u5143\u7D20
doclet.Annotation_Type_Required_Members=\u6240\u9700\u5143\u7D20
doclet.enum_constants=\u679A\u4E3E\u5E38\u91CF
doclet.Enum_Constants=\u679A\u4E3E\u5E38\u91CF
-doclet.nested_classes=\u5D4C\u5957\u7C7B
doclet.Nested_Classes=\u5D4C\u5957\u7C7B
-doclet.subclasses=\u5B50\u7C7B
-doclet.subinterfaces=\u5B50\u63A5\u53E3
doclet.Modifier=\u9650\u5B9A\u7B26
doclet.Type=\u7C7B\u578B
doclet.Modifier_and_Type=\u4FEE\u9970\u7B26\u548C\u7C7B\u578B
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -187,8 +187,7 @@
main.internal.error=\u5185\u90E8\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
main.unexpected.exception=\u4E88\u671F\u3057\u306A\u3044\u4F8B\u5916\u304C\u6355\u6349\u3055\u308C\u307E\u3057\u305F: {0}
doclet.internal.report.bug=Bug Database (http://bugs.java.com)\u3067\u91CD\u8907\u304C\u306A\u3044\u304B\u3092\u3054\u78BA\u8A8D\u306E\u3046\u3048\u3001Java bug\u30EC\u30DD\u30FC\u30C8\u30FB\u30DA\u30FC\u30B8\n(http://bugreport.java.com)\u3067javadoc\u30C4\u30FC\u30EB\u306B\u5BFE\u3059\u308Bbug\u306E\u767B\u9332\u3092\u304A\u9858\u3044\u3044\u305F\u3057\u307E\u3059\u3002\n\u30EC\u30DD\u30FC\u30C8\u306B\u306F\u3001\u30A8\u30E9\u30FC\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u6B21\u306E\u8A3A\u65AD\u5185\u5BB9\u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044\u3002\u3054\u5354\u529B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002
-main.legacy_api=\u30D1\u30C3\u30B1\u30FC\u30B8com.sun.javadoc\u3001com.sun.tools.doclets\u304A\u3088\u3073\n\u305D\u308C\u3089\u306E\u5B9F\u88C5\u5185\u306E\u53E4\u3044Doclet\u304A\u3088\u3073Taglet API\u306F\u3001\n\u4ECA\u5F8C\u306EJDK\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u308B\u4E88\u5B9A\u3067\u3059\u3002\u3053\u308C\u3089\u306E\n\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306Fjdk.javadoc.doclet\u306E\u65B0\u3057\u3044API\u306B\u3088\u3063\u3066\u7F6E\u304D\u63DB\u3048\u3089\u308C\u307E\u3057\u305F\u3002\n\u30E6\u30FC\u30B6\u30FC\u306B\u306F\u65B0\u3057\u3044API\u306B\u79FB\u884C\u3059\u308B\u3053\u3068\u3092\u5F37\u304F\u304A\u85A6\u3081\u3057\u307E\u3059\u3002\n
-
+main.not_a_doclet=\u30AF\u30E9\u30B9{0}\u306F\u6709\u52B9\u306A\u30C9\u30C3\u30AF\u30EC\u30C3\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n\u6CE8\u610F: JDK 13\u304B\u3089\u3001com.sun.javadoc API\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u306A\u304F\u306A\u308A\u307E\u3057\u305F\u3002
javadoc.class_not_found=\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002
javadoc.error=\u30A8\u30E9\u30FC
javadoc.warning=\u8B66\u544A
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -187,8 +187,7 @@
main.internal.error=\u51FA\u73B0\u5185\u90E8\u9519\u8BEF
main.unexpected.exception=\u6355\u83B7\u5230\u610F\u5916\u7684\u5F02\u5E38\u9519\u8BEF: {0}
doclet.internal.report.bug=\u5982\u679C\u5728 Bug Database (http://bugs.java.com) \u4E2D\u6CA1\u6709\u627E\u5230\u91CD\u590D\u9879, \n\u8BF7\u901A\u8FC7 Java Bug \u62A5\u544A\u9875 (http://bugreport.java.com) \u9488\u5BF9\u8BE5 \njavadoc \u5DE5\u5177\u5EFA\u7ACB Bug\u3002\u8BF7\u5728\u62A5\u544A\u4E2D\u9644\u4E0A\u9519\u8BEF\u6D88\u606F\u548C\u4EE5\u4E0B\u8BCA\u65AD\u4FE1\u606F\u3002\u8C22\u8C22\u3002
-main.legacy_api=\u5DF2\u8BA1\u5212\u5728\u672A\u6765\u7684 JDK \u53D1\u884C\u7248\u4E2D\u5220\u9664\u7A0B\u5E8F\u5305\ncom.sun.javadoc, com.sun.tools.doclets\n\u53CA\u5176\u5B9E\u73B0\u4E2D\u7684\u65E7 Doclet \u548C Taglet API\u3002\n\u8FD9\u4E9B\u7EC4\u4EF6\u5728 jdk.javadoc.doclet \u4E2D\u5DF2\u7531\u65B0 API \u53D6\u4EE3\u3002\n\u5F3A\u70C8\u5EFA\u8BAE\u7528\u6237\u8FC1\u79FB\u5230\u65B0 API\u3002\n
-
+main.not_a_doclet=\u7C7B {0} \u4E0D\u662F\u6709\u6548 doclet\u3002\n\u6CE8\u610F\uFF1A\u4ECE JDK 13 \u5F00\u59CB\uFF0C\u4E0D\u518D\u652F\u6301 com.sun.javadoc API\u3002
javadoc.class_not_found=\u627E\u4E0D\u5230\u7C7B{0}\u3002
javadoc.error=\u9519\u8BEF
javadoc.warning=\u8B66\u544A
--- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -68,9 +68,11 @@
main.opt.module_path=\ --module-path <path> \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u691C\u7D22\u3059\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B
+main.opt.multi_release=\ --multi-release <version> \u30DE\u30EB\u30C1\u30EA\u30EA\u30FC\u30B9JAR\u30D5\u30A1\u30A4\u30EB\u3067\u4F7F\u7528\u3059\u308B\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u6307\u5B9A\u3057\u307E\u3059
+
main.opt.constants=\ -constants final\u5B9A\u6570\u3092\u8868\u793A\u3059\u308B
-main.opt.sysinfo=\ -sysinfo \u51E6\u7406\u3057\u3066\u3044\u308B\u30AF\u30E9\u30B9\u306E\u30B7\u30B9\u30C6\u30E0\u60C5\u5831(\u30D1\u30B9\u3001\u30B5\u30A4\u30BA\u3001\u65E5\u4ED8\u3001MD5\u30CF\u30C3\u30B7\u30E5)\n \u3092\u8868\u793A\u3059\u308B
+main.opt.sysinfo=\ -sysinfo \u51E6\u7406\u3057\u3066\u3044\u308B\u30AF\u30E9\u30B9\u306E\u30B7\u30B9\u30C6\u30E0\u60C5\u5831(\u30D1\u30B9\u3001\u30B5\u30A4\u30BA\u3001\u65E5\u4ED8\u3001SHA-256\u30CF\u30C3\u30B7\u30E5)\n \u3092\u8868\u793A\u3057\u307E\u3059
main.opt.module=\ --module <module>\u3001-m <module> \u9006\u30A2\u30BB\u30F3\u30D6\u30EB\u3055\u308C\u308B\u30AF\u30E9\u30B9\u3092\u542B\u3080\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6307\u5B9A\u3059\u308B
--- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -68,9 +68,11 @@
main.opt.module_path=\ --module-path <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u5E94\u7528\u7A0B\u5E8F\u6A21\u5757\u7684\u4F4D\u7F6E
+main.opt.multi_release=\ --multi-release <version> \u6307\u5B9A\u8981\u5728\u591A\u53D1\u884C\u7248 JAR \u6587\u4EF6\u4E2D\u4F7F\u7528\u7684\u7248\u672C
+
main.opt.constants=\ -constants \u663E\u793A\u6700\u7EC8\u5E38\u91CF
-main.opt.sysinfo=\ -sysinfo \u663E\u793A\u6B63\u5728\u5904\u7406\u7684\u7C7B\u7684\n \u7CFB\u7EDF\u4FE1\u606F (\u8DEF\u5F84, \u5927\u5C0F, \u65E5\u671F, MD5 \u6563\u5217)
+main.opt.sysinfo=\ -sysinfo \u663E\u793A\u6B63\u5728\u5904\u7406\u7684\u7C7B\u7684\n \u7CFB\u7EDF\u4FE1\u606F\uFF08\u8DEF\u5F84\u3001\u5927\u5C0F\u3001\u65E5\u671F\u3001SHA-256 \u6563\u5217\uFF09
main.opt.module=\ --module <\u6A21\u5757>, -m <\u6A21\u5757> \u6307\u5B9A\u5305\u542B\u8981\u53CD\u6C47\u7F16\u7684\u7C7B\u7684\u6A21\u5757
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources_ja.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources_ja.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -107,6 +107,7 @@
{"Current thread isnt suspended.", "\u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
{"Current thread not set.", "\u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
{"dbgtrace flag value must be an integer:", "dbgtrace\u30D5\u30E9\u30B0\u5024\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059: {0}"},
+ {"dbgtrace command value must be an integer:", "dbgtrace\u30B3\u30DE\u30F3\u30C9\u5024\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059: {0}"},
{"Deferring.", "\u9045\u5EF6\u3057\u305F{0}\u3002\n\u30AF\u30E9\u30B9\u304C\u30ED\u30FC\u30C9\u3055\u308C\u305F\u5F8C\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002"},
{"End of stack.", "\u30B9\u30BF\u30C3\u30AF\u306E\u7D42\u308F\u308A\u3002"},
{"Error popping frame", "\u30D5\u30EC\u30FC\u30E0\u306E\u30DD\u30C3\u30D7\u4E2D\u306E\u30A8\u30E9\u30FC - {0}"},
@@ -119,12 +120,14 @@
{"Exception occurred caught", "\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0} (\u6355\u6349\u3055\u308C\u308B\u5834\u6240: {1})"},
{"Exception occurred uncaught", "\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0} (\u6355\u6349\u3055\u308C\u306A\u3044)"},
{"Exceptions caught:", "\u6B21\u306E\u4F8B\u5916\u304C\u767A\u751F\u3057\u305F\u3068\u304D\u306B\u30D6\u30EC\u30FC\u30AF:"},
+ {"Expected at, in, or an integer <thread_id>:", "\"at\"\u3001\"in\"\u307E\u305F\u306F\u6574\u6570\u306E<thread_id>\u304C\u5FC5\u8981\u3067\u3059: {0}"},
{"expr is null", "{0} = null"},
{"expr is value", "{0} = {1}"},
{"expr is value <collected>", " {0} = {1} <collected>"},
{"Expression cannot be void", "\u5F0F\u306Fvoid\u578B\u306B\u3067\u304D\u307E\u305B\u3093"},
{"Expression must evaluate to an object", "\u5F0F\u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u8A55\u4FA1\u3055\u308C\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
{"extends:", "\u62E1\u5F35\u3057\u307E\u3059: {0}"},
+ {"Extra tokens after breakpoint location", "\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u306E\u5834\u6240\u306E\u5F8C\u306E\u8FFD\u52A0\u30C8\u30FC\u30AF\u30F3"},
{"Failed reading output", "\u5B50\u306Ejava\u30A4\u30F3\u30BF\u30FC\u30D7\u30EA\u30BF\u306E\u51FA\u529B\u306E\u8AAD\u53D6\u308A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"},
{"Fatal error", "\u81F4\u547D\u7684\u30A8\u30E9\u30FC:"},
{"Field access encountered before after", "\u30D5\u30A3\u30FC\u30EB\u30C9({0})\u306F{1}\u3067\u3001{2}\u306B\u306A\u308A\u307E\u3059: "},
@@ -153,11 +156,14 @@
{"Invalid connect type", "\u63A5\u7D9A\u578B\u304C\u7121\u52B9\u3067\u3059"},
{"Invalid consecutive invocations", "\u9023\u7D9A\u547C\u51FA\u3057\u304C\u7121\u52B9\u3067\u3059"},
{"Invalid exception object", "\u4F8B\u5916\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u7121\u52B9\u3067\u3059"},
- {"Invalid method specification:", "\u7121\u52B9\u306A\u30E1\u30BD\u30C3\u30C9\u6307\u5B9A: {0}"},
+ {"Invalid line number specified", "\u7121\u52B9\u306A\u884C\u756A\u53F7\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
+ {"Invalid <method_name> specification:", "\u7121\u52B9\u306A<method_name>\u6307\u5B9A: {0}"},
{"Invalid option on class command", "class\u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u3067\u3059"},
{"invalid option", "\u7121\u52B9\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"},
{"Invalid thread status.", "\u30B9\u30EC\u30C3\u30C9\u72B6\u614B\u304C\u7121\u52B9\u3067\u3059\u3002"},
+ {"Invalid <thread_id>:", "\u7121\u52B9\u306A<thread_id>: {0}"},
{"Invalid transport name:", "\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u540D\u304C\u7121\u52B9\u3067\u3059: {0}"},
+ {"Invalid <class>.<method_name> specification", "\u7121\u52B9\u306A<class>.<method_name>\u6307\u5B9A"},
{"I/O exception occurred:", "\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0}"},
{"is an ambiguous method name in", "\"{0}\"\u306F\"{1}\"\u306E\u3042\u3044\u307E\u3044\u306A\u30E1\u30BD\u30C3\u30C9\u540D\u3067\u3059"},
{"is an invalid line number for", "{0,number,integer}\u306F{1}\u306E\u7121\u52B9\u306A\u884C\u756A\u53F7\u3067\u3059"},
@@ -190,6 +196,7 @@
{"Method exitedValue:", "\u30E1\u30BD\u30C3\u30C9\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F: \u623B\u308A\u5024= {0}, "},
{"Method is overloaded; specify arguments", "\u30E1\u30BD\u30C3\u30C9{0}\u304C\u30AA\u30FC\u30D0\u30FC\u30ED\u30FC\u30C9\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u5F15\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
{"minus version", "\u3053\u308C\u306F{0}\u30D0\u30FC\u30B8\u30E7\u30F3{1,number,integer}.{2,number,integer} (Java SE\u30D0\u30FC\u30B8\u30E7\u30F3{3})\u3067\u3059"},
+ {"Missing at or in", "\"at\"\u307E\u305F\u306F\"in\"\u304C\u3042\u308A\u307E\u305B\u3093"},
{"Monitor information for thread", "\u30B9\u30EC\u30C3\u30C9{0}\u306E\u60C5\u5831\u306E\u30E2\u30CB\u30BF\u30FC:"},
{"Monitor information for expr", "{0} ({1})\u306E\u60C5\u5831\u306E\u30E2\u30CB\u30BF\u30FC:"},
{"More than one class named", "\u540D\u524D''{0}''\u306E\u30AF\u30E9\u30B9\u304C\u8907\u6570\u3042\u308A\u307E\u3059"},
@@ -234,13 +241,16 @@
{"Not owned", " \u6240\u6709\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
{"Not waiting for a monitor", " \u30E2\u30CB\u30BF\u30FC\u3092\u5F85\u6A5F\u3057\u3066\u3044\u307E\u305B\u3093"},
{"Nothing suspended.", "\u4F55\u3082\u4E2D\u65AD\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
- {"object description and hex id", "({0}){1}"},
+ {"object description and id", "({0}){1}"},
{"Operation is not supported on the target VM", "\u64CD\u4F5C\u306F\u30BF\u30FC\u30B2\u30C3\u30C8VM\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
{"operation not yet supported", "\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u64CD\u4F5C"},
{"Owned by:", " \u6240\u6709\u8005: {0}\u3001\u30A8\u30F3\u30C8\u30EA\u6570: {1,number,integer}"},
{"Owned monitor:", " \u6240\u6709\u3055\u308C\u3066\u3044\u308B\u30E2\u30CB\u30BF\u30FC: {0}"},
{"Parse exception:", "\u4F8B\u5916\u306E\u89E3\u6790: {0}"},
- {"printbreakpointcommandusage", "\u4F7F\u7528\u65B9\u6CD5: {0} <class>:<line_number>\u307E\u305F\u306F\n {1} <class>.<method_name>[(argument_type,...)]"},
+ {"printclearcommandusage", "\u4F7F\u7528\u65B9\u6CD5 clear <class>:<line_number>\u307E\u305F\u306F\n clear <class>.<method_name>[(argument_type,...)]"},
+ {"printstopcommandusage",
+ "\u4F7F\u7528\u65B9\u6CD5: stop [go|thread] [<thread_id>] <at|in> <location>\n \"go\"\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u505C\u6B62\u5F8C\u3059\u3050\u306B\u518D\u958B\u3057\u307E\u3059\n \"thread\"\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u505C\u6B62\u3057\u305F\u30B9\u30EC\u30C3\u30C9\u306E\u307F\u4E2D\u65AD\u3057\u307E\u3059\n \"go\"\u3082\"thread\"\u3082\u6307\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306F\u3001\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059\n \u6574\u6570\u306E<thread_id>\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u6307\u5B9A\u3055\u308C\u305F\u30B9\u30EC\u30C3\u30C9\u3067\u306E\u307F\u505C\u6B62\u3057\u307E\u3059\n \"at\"\u3068\"in\"\u306F\u540C\u3058\u610F\u5473\u3092\u6301\u3061\u307E\u3059\n <location>\u306F\u884C\u756A\u53F7\u307E\u305F\u306F\u30E1\u30BD\u30C3\u30C9\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059:\n <class_id>:<line_number>\n <class_id>.<method>[(argument_type,...)]"
+ },
{"Removed:", "{0}\u306F\u524A\u9664\u3055\u308C\u307E\u3057\u305F"},
{"Requested stack frame is no longer active:", "\u30EA\u30AF\u30A8\u30B9\u30C8\u3055\u308C\u305F\u30B9\u30BF\u30C3\u30AF\u30FB\u30D5\u30EC\u30FC\u30E0\u306F\u73FE\u5728\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3042\u308A\u307E\u305B\u3093: {0,number,integer}"},
{"run <args> command is valid only with launched VMs", "'run <args>'\u30B3\u30DE\u30F3\u30C9\u306F\u8D77\u52D5\u6E08\u306EVM\u3067\u306E\u307F\u6709\u52B9\u3067\u3059"},
@@ -289,6 +299,8 @@
{"Thread not suspended", "\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u3066\u3044\u307E\u305B\u3093"},
{"thread group number description name", "{0,number,integer}. {1} {2}"},
{"Threadgroup name not specified.", "\u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u540D\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
+ {"<thread_id> option not valid until the VM is started with the run command",
+ "<thread_id>\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u3001VM\u304Crun\u30B3\u30DE\u30F3\u30C9\u3067\u958B\u59CB\u3055\u308C\u308B\u307E\u3067\u7121\u52B9\u3067\u3059"},
{"Threads must be suspended", "\u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
{"trace method exit in effect for", "{0}\u306B\u5BFE\u3057\u3066\u6709\u52B9\u306A\u30E1\u30BD\u30C3\u30C9\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9"},
{"trace method exits in effect", "\u6709\u52B9\u306A\u30E1\u30BD\u30C3\u30C9\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9"},
@@ -315,7 +327,6 @@
{"Usage: unmonitor <monitor#>", "\u4F7F\u7528\u65B9\u6CD5: unmonitor <monitor#>"},
{"Usage: up [n frames]", "\u4F7F\u7528\u65B9\u6CD5: up [n frames]"},
{"Use java minus X to see", "\u4F7F\u7528\u53EF\u80FD\u306A\u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8868\u793A\u3059\u308B\u306B\u306F'java -X'\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
- {"Use stop at to set a breakpoint at a line number", "\u884C\u756A\u53F7\u306B\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u8A2D\u5B9A\u3059\u308B\u306B\u306F'stop at'\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
{"VM already running. use cont to continue after events.", "VM\u306F\u3059\u3067\u306B\u5B9F\u884C\u4E2D\u3067\u3059\u3002\u30A4\u30D9\u30F3\u30C8\u5F8C\u306B\u7D9A\u884C\u3059\u308B\u306B\u306F'cont'\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
{"VM Started:", "VM\u304C\u958B\u59CB\u3055\u308C\u307E\u3057\u305F: "},
{"vmstartexception", "VM\u304C\u4F8B\u5916\u3092\u958B\u59CB\u3057\u307E\u3057\u305F: {0}"},
@@ -324,7 +335,7 @@
{"watch accesses of", "{0}.{1}\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u30A6\u30A9\u30C3\u30C1"},
{"watch modification of", "{0}.{1}\u306E\u5909\u66F4\u306E\u30A6\u30A9\u30C3\u30C1"},
{"zz help text",
- "** \u30B3\u30DE\u30F3\u30C9\u30FB\u30EA\u30B9\u30C8 **\nconnectors -- \u3053\u306EVM\u5185\u306E\u4F7F\u7528\u53EF\u80FD\u306A\u30B3\u30CD\u30AF\u30BF\u3068\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\n\nrun [class [args]] -- \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9\u306E\u5B9F\u884C\u3092\u958B\u59CB\u3057\u307E\u3059\n\nthreads [threadgroup] -- \u30B9\u30EC\u30C3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nthread <thread id> -- \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30B9\u30EC\u30C3\u30C9\u3092\u8A2D\u5B9A\u3057\u307E\u3059\nsuspend [thread id(s)] -- \u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8: \u3059\u3079\u3066)\nresume [thread id(s)] -- \u30B9\u30EC\u30C3\u30C9\u3092\u518D\u958B\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8: \u3059\u3079\u3066)\nwhere [<thread id> | all] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u30C0\u30F3\u30D7\u3057\u307E\u3059\nwherei [<thread id> | all]-- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092pc\u60C5\u5831\u3068\u3068\u3082\u306B\u30C0\u30F3\u30D7\u3057\u307E\u3059\nup [n frames] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u4E0A\u306B\u79FB\u52D5\u3057\u307E\u3059\ndown [n frames] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u4E0B\u306B\u79FB\u52D5\u3057\u307E\u3059\nkill <thread id> <expr> -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u30B9\u30EC\u30C3\u30C9\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059\ninterrupt <thread id> -- \u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059\n\nprint <expr> -- \u5F0F\u306E\u5024\u3092\u51FA\u529B\u3057\u307E\u3059\ndump <expr> -- \u3059\u3079\u3066\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\neval <expr> -- \u5F0F\u3092\u8A55\u4FA1\u3057\u307E\u3059(print\u3068\u540C\u3058)\nset <lvalue> = <expr> -- \u65B0\u3057\u3044\u5024\u3092\u30D5\u30A3\u30FC\u30EB\u30C9/\u5909\u6570/\u914D\u5217\u8981\u7D20\u306B\u4EE3\u5165\u3057\u307E\u3059\nlocals -- \u73FE\u5728\u306E\u30B9\u30BF\u30C3\u30AF\u30FB\u30D5\u30EC\u30FC\u30E0\u5185\u306E\u3059\u3079\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u51FA\u529B\u3057\u307E\u3059\n\nclasses -- \u73FE\u5728\u65E2\u77E5\u306E\u30AF\u30E9\u30B9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nclass <class id> -- \u6307\u5B9A\u3057\u305F\u30AF\u30E9\u30B9\u306E\u8A73\u7D30\u3092\u8868\u793A\u3057\u307E\u3059\nmethods <class id> -- \u30AF\u30E9\u30B9\u306E\u30E1\u30BD\u30C3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nfields <class id> -- \u30AF\u30E9\u30B9\u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\n\nthreadgroups -- \u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nthreadgroup <name> -- \u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n\nstop in <class id>.<method>[(argument_type,...)]\n -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30E1\u30BD\u30C3\u30C9\u5185\u306B\u8A2D\u5B9A\u3057\u307E\u3059\nstop at <class id>:<line> -- \u884C\u306B\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u8A2D\u5B9A\u3057\u307E\u3059\nclear <class id>.<method>[(argument_type,...)]\n -- \u30E1\u30BD\u30C3\u30C9\u5185\u306E\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30AF\u30EA\u30A2\u3057\u307E\u3059\nclear <class id>:<line> -- \u884C\u306E\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30AF\u30EA\u30A2\u3057\u307E\u3059\nclear -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\ncatch [uncaught|caught|all] <class id>|<class pattern>\n -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u304C\u767A\u751F\u3057\u305F\u3068\u304D\u306B\u30D6\u30EC\u30FC\u30AF\u3057\u307E\u3059\nignore [uncaught|caught|all] <class id>|<class pattern>\n -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u306E'catch'\u3092\u53D6\u308A\u6D88\u3057\u307E\u3059\nwatch [access|all] <class id>.<field name>\n -- \u30D5\u30A3\u30FC\u30EB\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5909\u66F4\u3092\u30A6\u30A9\u30C3\u30C1\u3057\u307E\u3059\nunwatch [access|all] <class id>.<field name>\n -- \u30D5\u30A3\u30FC\u30EB\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5909\u66F4\u306E\u30A6\u30A9\u30C3\u30C1\u3092\u4E2D\u6B62\u3057\u307E\u3059\ntrace [go] methods [thread]\n -- \u30E1\u30BD\u30C3\u30C9\u306E\u5165\u308A\u53E3\u3068\u51FA\u53E3\u3092\u30C8\u30EC\u30FC\u30B9\u3057\u307E\u3059\u3002\n -- 'go'\u304C\u6307\u5B9A\u3055\u308C\u308B\u307E\u3067\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u307E\u3059\ntrace [go] method exit | exits [thread]\n -- \u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u306E\u51FA\u53E3\u307E\u305F\u306F\u3059\u3079\u3066\u306E\u30E1\u30BD\u30C3\u30C9\u306E\u51FA\u53E3\u3092\u30C8\u30EC\u30FC\u30B9\u3057\u307E\u3059\n -- 'go'\u304C\u6307\u5B9A\u3055\u308C\u308B\u307E\u3067\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u307E\u3059\nuntrace [methods] -- \u30E1\u30BD\u30C3\u30C9\u306E\u958B\u59CB\u307E\u305F\u306F\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9\u3092\u505C\u6B62\u3057\u307E\u3059\nstep -- \u73FE\u5728\u306E\u884C\u3092\u5B9F\u884C\u3057\u307E\u3059\nstep up -- \u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u304C\u30E1\u30BD\u30C3\u30C9\u306E\u547C\u51FA\u3057\u5143\u306B\u623B\u308B\u307E\u3067\u5B9F\u884C\u3057\u307E\u3059\nstepi -- \u73FE\u5728\u306E\u547D\u4EE4\u3092\u5B9F\u884C\u3057\u307E\u3059\nnext -- 1\u884C\u3092\u30B9\u30C6\u30C3\u30D7\u5B9F\u884C\u3057\u307E\u3059(\u547C\u51FA\u3057\u3092\u30B9\u30C6\u30C3\u30D7\u30AA\u30FC\u30D0\u30FC)\ncont -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u304B\u3089\u5B9F\u884C\u3092\u7D9A\u884C\u3057\u307E\u3059\n\nlist [line number|method] -- \u30BD\u30FC\u30B9\u30FB\u30B3\u30FC\u30C9\u3092\u51FA\u529B\u3057\u307E\u3059\nuse (or sourcepath) [source file path]\n -- \u30BD\u30FC\u30B9\u30FB\u30D1\u30B9\u3092\u8868\u793A\u307E\u305F\u306F\u5909\u66F4\u3057\u307E\u3059\nexclude [<class pattern>, ... | \"none\"]\n -- \u6307\u5B9A\u3057\u305F\u30AF\u30E9\u30B9\u306E\u30B9\u30C6\u30C3\u30D7\u3084\u30E1\u30BD\u30C3\u30C9\u30FB\u30A4\u30D9\u30F3\u30C8\u3092\u5831\u544A\u3057\u307E\u305B\u3093\nclasspath -- \u30BF\u30FC\u30B2\u30C3\u30C8VM\u304B\u3089\u30AF\u30E9\u30B9\u30D1\u30B9\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\n\nmonitor <command> -- \u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u505C\u6B62\u3059\u308B\u305F\u3073\u306B\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u307E\u3059\nmonitor -- \u30E2\u30CB\u30BF\u30FC\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nunmonitor <monitor#> -- \u30E2\u30CB\u30BF\u30FC\u3092\u524A\u9664\u3057\u307E\u3059\nread <filename> -- \u30B3\u30DE\u30F3\u30C9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u3063\u3066\u5B9F\u884C\u3057\u307E\u3059\n\nlock <expr> -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30ED\u30C3\u30AF\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\nthreadlocks [thread id] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30ED\u30C3\u30AF\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\n\npop -- \u73FE\u5728\u306E\u30D5\u30EC\u30FC\u30E0\u307E\u3067\u306E\u3059\u3079\u3066\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u30DD\u30C3\u30D7\u3057\u307E\u3059\nreenter -- pop\u3068\u540C\u3058\u3067\u3059\u304C\u3001\u73FE\u5728\u306E\u30D5\u30EC\u30FC\u30E0\u304C\u518D\u5165\u529B\u3055\u308C\u307E\u3059\nredefine <class id> <class file name>\n -- \u30AF\u30E9\u30B9\u306E\u30B3\u30FC\u30C9\u3092\u518D\u5B9A\u7FA9\u3057\u307E\u3059\n\ndisablegc <expr> -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u6291\u5236\u3057\u307E\u3059\nenablegc <expr> -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u8A31\u53EF\u3057\u307E\u3059\n\n!! -- \u6700\u5F8C\u306E\u30B3\u30DE\u30F3\u30C9\u3092\u7E70\u308A\u8FD4\u3057\u307E\u3059\n<n> <command> -- \u30B3\u30DE\u30F3\u30C9\u3092n\u56DE\u7E70\u308A\u8FD4\u3057\u307E\u3059\n# <command> -- \u7834\u68C4\u3057\u307E\u3059(\u64CD\u4F5C\u306A\u3057)\nhelp (\u307E\u305F\u306F?) -- \u30B3\u30DE\u30F3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nversion -- \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\nexit (\u307E\u305F\u306Fquit) -- \u30C7\u30D0\u30C3\u30AC\u3092\u7D42\u4E86\u3057\u307E\u3059\n\n<class id>: \u30D1\u30C3\u30B1\u30FC\u30B8\u4FEE\u98FE\u5B50\u3092\u542B\u3080\u5B8C\u5168\u30AF\u30E9\u30B9\u540D\n<class pattern>: \u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306E\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9('*')\u3092\u542B\u3080\u30AF\u30E9\u30B9\u540D\n<thread id>: 'threads'\u30B3\u30DE\u30F3\u30C9\u3067\u5831\u544A\u3055\u308C\u308B\u30B9\u30EC\u30C3\u30C9\u756A\u53F7\n<expr>: Java(TM)\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u306E\u5F0F\u3002\n\u307B\u3068\u3093\u3069\u306E\u4E00\u822C\u7684\u306A\u69CB\u6587\u304C\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n\n\u8D77\u52D5\u30B3\u30DE\u30F3\u30C9\u306F\u3001\"jdb.ini\"\u307E\u305F\u306F\".jdbrc\"\u306B\u914D\u7F6E\u3067\u304D\u307E\u3059\n(user.home\u307E\u305F\u306Fuser.dir\u5185)"},
+ "** \u30B3\u30DE\u30F3\u30C9\u30FB\u30EA\u30B9\u30C8 **\nconnectors -- \u3053\u306EVM\u5185\u306E\u4F7F\u7528\u53EF\u80FD\u306A\u30B3\u30CD\u30AF\u30BF\u3068\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\n\nrun [class [args]] -- \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9\u306E\u5B9F\u884C\u3092\u958B\u59CB\u3057\u307E\u3059\n\nthreads [threadgroup] -- \u30B9\u30EC\u30C3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nthread <thread id> -- \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30B9\u30EC\u30C3\u30C9\u3092\u8A2D\u5B9A\u3057\u307E\u3059\nsuspend [thread id(s)] -- \u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8: \u3059\u3079\u3066)\nresume [thread id(s)] -- \u30B9\u30EC\u30C3\u30C9\u3092\u518D\u958B\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8: \u3059\u3079\u3066)\nwhere [<thread id> | all] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u30C0\u30F3\u30D7\u3057\u307E\u3059\nwherei [<thread id> | all]-- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092pc\u60C5\u5831\u3068\u3068\u3082\u306B\u30C0\u30F3\u30D7\u3057\u307E\u3059\nup [n frames] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u4E0A\u306B\u79FB\u52D5\u3057\u307E\u3059\ndown [n frames] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u4E0B\u306B\u79FB\u52D5\u3057\u307E\u3059\nkill <thread id> <expr> -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u30B9\u30EC\u30C3\u30C9\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059\ninterrupt <thread id> -- \u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059\n\nprint <expr> -- \u5F0F\u306E\u5024\u3092\u51FA\u529B\u3057\u307E\u3059\ndump <expr> -- \u3059\u3079\u3066\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\neval <expr> -- \u5F0F\u3092\u8A55\u4FA1\u3057\u307E\u3059(print\u3068\u540C\u3058)\nset <lvalue> = <expr> -- \u65B0\u3057\u3044\u5024\u3092\u30D5\u30A3\u30FC\u30EB\u30C9/\u5909\u6570/\u914D\u5217\u8981\u7D20\u306B\u4EE3\u5165\u3057\u307E\u3059\nlocals -- \u73FE\u5728\u306E\u30B9\u30BF\u30C3\u30AF\u30FB\u30D5\u30EC\u30FC\u30E0\u5185\u306E\u3059\u3079\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u51FA\u529B\u3057\u307E\u3059\n\nclasses -- \u73FE\u5728\u65E2\u77E5\u306E\u30AF\u30E9\u30B9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nclass <class id> -- \u6307\u5B9A\u3057\u305F\u30AF\u30E9\u30B9\u306E\u8A73\u7D30\u3092\u8868\u793A\u3057\u307E\u3059\nmethods <class id> -- \u30AF\u30E9\u30B9\u306E\u30E1\u30BD\u30C3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nfields <class id> -- \u30AF\u30E9\u30B9\u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\n\nthreadgroups -- \u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nthreadgroup <name> -- \u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n\nstop [go|thread] [<thread_id>] <at|in> <location>\n -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n -- \u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306F\u3001\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u306E\u73FE\u5728\u306E\u30EA\u30B9\u30C8\u304C\u51FA\u529B\u3055\u308C\u307E\u3059\n -- \"go\"\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u505C\u6B62\u5F8C\u3059\u3050\u306B\u518D\u958B\u3057\u307E\u3059\n -- \"thread\"\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u505C\u6B62\u3057\u305F\u30B9\u30EC\u30C3\u30C9\u306E\u307F\u4E2D\u65AD\u3057\u307E\u3059\n -- \"go\"\u3082\"thread\"\u3082\u6307\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306F\u3001\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059\n -- \u6574\u6570\u306E<thread_id>\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u6307\u5B9A\u3055\u308C\u305F\u30B9\u30EC\u30C3\u30C9\u3067\u306E\u307F\u505C\u6B62\u3057\u307E\u3059\n -- \"at\"\u3068\"in\"\u306F\u540C\u3058\u610F\u5473\u3092\u6301\u3061\u307E\u3059\n -- <location>\u306F\u884C\u756A\u53F7\u307E\u305F\u306F\u30E1\u30BD\u30C3\u30C9\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059:\n -- <class_id>:<line_number>\n -- <class_id>.<method>[(argument_type,...)]\nclear <class id>.<method>[(argument_type,...)]\n -- \u30E1\u30BD\u30C3\u30C9\u5185\u306E\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30AF\u30EA\u30A2\u3057\u307E\u3059\nclear <class id>:<line> -- \u884C\u306E\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30AF\u30EA\u30A2\u3057\u307E\u3059\nclear -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\ncatch [uncaught|caught|all] <class id>|<class pattern>\n -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u304C\u767A\u751F\u3057\u305F\u3068\u304D\u306B\u30D6\u30EC\u30FC\u30AF\u3057\u307E\u3059\nignore [uncaught|caught|all] <class id>|<class pattern>\n -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u306E'catch'\u3092\u53D6\u308A\u6D88\u3057\u307E\u3059\nwatch [access|all] <class id>.<field name>\n -- \u30D5\u30A3\u30FC\u30EB\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5909\u66F4\u3092\u30A6\u30A9\u30C3\u30C1\u3057\u307E\u3059\nunwatch [access|all] <class id>.<field name>\n -- \u30D5\u30A3\u30FC\u30EB\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5909\u66F4\u306E\u30A6\u30A9\u30C3\u30C1\u3092\u4E2D\u6B62\u3057\u307E\u3059\ntrace [go] methods [thread]\n -- \u30E1\u30BD\u30C3\u30C9\u306E\u5165\u308A\u53E3\u3068\u51FA\u53E3\u3092\u30C8\u30EC\u30FC\u30B9\u3057\u307E\u3059\u3002\n -- 'go'\u304C\u6307\u5B9A\u3055\u308C\u308B\u307E\u3067\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u307E\u3059\ntrace [go] method exit | exits [thread]\n -- \u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u306E\u51FA\u53E3\u307E\u305F\u306F\u3059\u3079\u3066\u306E\u30E1\u30BD\u30C3\u30C9\u306E\u51FA\u53E3\u3092\u30C8\u30EC\u30FC\u30B9\u3057\u307E\u3059\n -- 'go'\u304C\u6307\u5B9A\u3055\u308C\u308B\u307E\u3067\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u307E\u3059\nuntrace [methods] -- \u30E1\u30BD\u30C3\u30C9\u306E\u958B\u59CB\u307E\u305F\u306F\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9\u3092\u505C\u6B62\u3057\u307E\u3059\nstep -- \u73FE\u5728\u306E\u884C\u3092\u5B9F\u884C\u3057\u307E\u3059\nstep up -- \u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u304C\u30E1\u30BD\u30C3\u30C9\u306E\u547C\u51FA\u3057\u5143\u306B\u623B\u308B\u307E\u3067\u5B9F\u884C\u3057\u307E\u3059\nstepi -- \u73FE\u5728\u306E\u547D\u4EE4\u3092\u5B9F\u884C\u3057\u307E\u3059\nnext -- 1\u884C\u3092\u30B9\u30C6\u30C3\u30D7\u5B9F\u884C\u3057\u307E\u3059(\u547C\u51FA\u3057\u3092\u30B9\u30C6\u30C3\u30D7\u30AA\u30FC\u30D0\u30FC)\ncont -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u304B\u3089\u5B9F\u884C\u3092\u7D9A\u884C\u3057\u307E\u3059\n\nlist [line number|method] -- \u30BD\u30FC\u30B9\u30FB\u30B3\u30FC\u30C9\u3092\u51FA\u529B\u3057\u307E\u3059\nuse (or sourcepath) [source file path]\n -- \u30BD\u30FC\u30B9\u30FB\u30D1\u30B9\u3092\u8868\u793A\u307E\u305F\u306F\u5909\u66F4\u3057\u307E\u3059\nexclude [<class pattern>, ... | \"none\"]\n -- \u6307\u5B9A\u3057\u305F\u30AF\u30E9\u30B9\u306E\u30B9\u30C6\u30C3\u30D7\u3084\u30E1\u30BD\u30C3\u30C9\u30FB\u30A4\u30D9\u30F3\u30C8\u3092\u5831\u544A\u3057\u307E\u305B\u3093\nclasspath -- \u30BF\u30FC\u30B2\u30C3\u30C8VM\u304B\u3089\u30AF\u30E9\u30B9\u30D1\u30B9\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\n\nmonitor <command> -- \u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u505C\u6B62\u3059\u308B\u305F\u3073\u306B\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u307E\u3059\nmonitor -- \u30E2\u30CB\u30BF\u30FC\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nunmonitor <monitor#> -- \u30E2\u30CB\u30BF\u30FC\u3092\u524A\u9664\u3057\u307E\u3059\nread <filename> -- \u30B3\u30DE\u30F3\u30C9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u3063\u3066\u5B9F\u884C\u3057\u307E\u3059\n\nlock <expr> -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30ED\u30C3\u30AF\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\nthreadlocks [thread id] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30ED\u30C3\u30AF\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\n\npop -- \u73FE\u5728\u306E\u30D5\u30EC\u30FC\u30E0\u307E\u3067\u306E\u3059\u3079\u3066\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u30DD\u30C3\u30D7\u3057\u307E\u3059\nreenter -- pop\u3068\u540C\u3058\u3067\u3059\u304C\u3001\u73FE\u5728\u306E\u30D5\u30EC\u30FC\u30E0\u304C\u518D\u5165\u529B\u3055\u308C\u307E\u3059\nredefine <class id> <class file name>\n -- \u30AF\u30E9\u30B9\u306E\u30B3\u30FC\u30C9\u3092\u518D\u5B9A\u7FA9\u3057\u307E\u3059\n\ndisablegc <expr> -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u6291\u5236\u3057\u307E\u3059\nenablegc <expr> -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u8A31\u53EF\u3057\u307E\u3059\n\n!! -- \u6700\u5F8C\u306E\u30B3\u30DE\u30F3\u30C9\u3092\u7E70\u308A\u8FD4\u3057\u307E\u3059\n<n> <command> -- \u30B3\u30DE\u30F3\u30C9\u3092n\u56DE\u7E70\u308A\u8FD4\u3057\u307E\u3059\n# <command> -- \u7834\u68C4\u3057\u307E\u3059(\u64CD\u4F5C\u306A\u3057)\nhelp (\u307E\u305F\u306F?) -- \u30B3\u30DE\u30F3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\ndbgtrace [flag] -- dbgtrace\u30B3\u30DE\u30F3\u30C9\u30FB\u30E9\u30A4\u30F3\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3\u3068\u540C\u3058\u3067\u3059\nversion -- \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\nexit (\u307E\u305F\u306Fquit) -- \u30C7\u30D0\u30C3\u30AC\u3092\u7D42\u4E86\u3057\u307E\u3059\n\n<class id>: \u30D1\u30C3\u30B1\u30FC\u30B8\u4FEE\u98FE\u5B50\u3092\u542B\u3080\u5B8C\u5168\u30AF\u30E9\u30B9\u540D\n<class pattern>: \u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306E\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9('*')\u3092\u542B\u3080\u30AF\u30E9\u30B9\u540D\n<thread id>: 'threads'\u30B3\u30DE\u30F3\u30C9\u3067\u5831\u544A\u3055\u308C\u308B\u30B9\u30EC\u30C3\u30C9\u756A\u53F7\n<expr>: Java(TM)\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u306E\u5F0F\u3002\n\u307B\u3068\u3093\u3069\u306E\u4E00\u822C\u7684\u306A\u69CB\u6587\u304C\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n\n\u8D77\u52D5\u30B3\u30DE\u30F3\u30C9\u306F\u3001\"jdb.ini\"\u307E\u305F\u306F\".jdbrc\"\u306B\u914D\u7F6E\u3067\u304D\u307E\u3059\n(user.home\u307E\u305F\u306Fuser.dir\u5185)"},
{"zz usage text",
"\u4F7F\u7528\u65B9\u6CD5: {0} <options> <class> <arguments>\n\n\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u6B21\u306E\u3068\u304A\u308A\u3067\u3059:\n -? -h --help -help \u3053\u306E\u30D8\u30EB\u30D7\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B\n -sourcepath <directories separated by \"{1}\">\n \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\n -attach <address>\n \u6A19\u6E96\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u6307\u5B9A\u3055\u308C\u305F\u30A2\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\u4E2D\u306EVM\u306B\u63A5\u7D9A\u3059\u308B\n -listen <address>\n \u6A19\u6E96\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u6307\u5B9A\u3055\u308C\u305F\u30A2\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\u4E2D\u306EVM\u306E\u63A5\u7D9A\u3092\u5F85\u6A5F\u3059\u308B\n -listenany\n \u6A19\u6E96\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u4F7F\u7528\u53EF\u80FD\u306A\u4EFB\u610F\u306E\u30A2\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\u4E2D\u306EVM\u306E\u63A5\u7D9A\u3092\u5F85\u6A5F\u3059\u308B\n -launch\n ''run''\u30B3\u30DE\u30F3\u30C9\u3092\u5F85\u6A5F\u305B\u305A\u306BVM\u3092\u5373\u6642\u306B\u8D77\u52D5\u3059\u308B\n -listconnectors \u3053\u306EVM\u3067\u4F7F\u7528\u53EF\u80FD\u306A\u30B3\u30CD\u30AF\u30BF\u3092\u30EA\u30B9\u30C8\u3059\u308B\n -connect <connector-name>:<name1>=<value1>,...\n \u6307\u5B9A\u3055\u308C\u305F\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u30EA\u30B9\u30C8\u3055\u308C\u305F\u5F15\u6570\u5024\u3067\u30BF\u30FC\u30B2\u30C3\u30C8VM\u306B\u63A5\u7D9A\u3059\u308B\n -dbgtrace [flags] {0}\u306E\u30C7\u30D0\u30C3\u30B0\u306E\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B\n -tclient \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092HotSpot(TM) Client Compiler\u3067\u5B9F\u884C\u3059\u308B\n -tserver \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092HotSpot(TM) Server Compiler\u3067\u5B9F\u884C\u3059\u308B\n\n\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u8EE2\u9001\u3055\u308C\u307E\u3059:\n -v -verbose[:class|gc|jni]\n \u8A73\u7D30\u30E2\u30FC\u30C9\u3092\u30AA\u30F3\u306B\u3059\u308B\n -D<name>=<value> \u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3059\u308B\n -classpath <directories separated by \"{1}\">\n \u30AF\u30E9\u30B9\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u30EA\u30B9\u30C8\u3059\u308B\n -X<option> \u975E\u6A19\u6E96\u306E\u30BF\u30FC\u30B2\u30C3\u30C8VM\u30AA\u30D7\u30B7\u30E7\u30F3\n\n<class>\u306F\u30C7\u30D0\u30C3\u30B0\u3092\u958B\u59CB\u3059\u308B\u30AF\u30E9\u30B9\u306E\u540D\u524D\u3067\u3059\n<arguments>\u306F<class>\u306Emain()\u30E1\u30BD\u30C3\u30C9\u306B\u6E21\u3055\u308C\u308B\u5F15\u6570\u3067\u3059\n\n\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u306B\u3064\u3044\u3066\u306F{0}\u30D7\u30ED\u30F3\u30D7\u30C8\u3067''help''\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"},
// END OF MATERIAL TO LOCALIZE
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources_zh_CN.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources_zh_CN.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -107,6 +107,7 @@
{"Current thread isnt suspended.", "\u5F53\u524D\u7EBF\u7A0B\u672A\u6302\u8D77\u3002"},
{"Current thread not set.", "\u5F53\u524D\u7EBF\u7A0B\u672A\u8BBE\u7F6E\u3002"},
{"dbgtrace flag value must be an integer:", "dbgtrace \u6807\u8BB0\u503C\u5FC5\u987B\u4E3A\u6574\u6570: {0}"},
+ {"dbgtrace command value must be an integer:", "dbgtrace \u547D\u4EE4\u503C\u5FC5\u987B\u4E3A\u6574\u6570\uFF1A{0}"},
{"Deferring.", "\u6B63\u5728\u5EF6\u8FDF{0}\u3002\n\u5C06\u5728\u52A0\u8F7D\u7C7B\u540E\u8BBE\u7F6E\u3002"},
{"End of stack.", "\u5806\u6808\u7ED3\u675F\u3002"},
{"Error popping frame", "\u4F7F\u5E27\u51FA\u6808\u65F6\u51FA\u9519 - {0}"},
@@ -119,12 +120,14 @@
{"Exception occurred caught", "\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF: {0} (\u5C06\u5728\u4EE5\u4E0B\u4F4D\u7F6E\u6355\u83B7: {1})"},
{"Exception occurred uncaught", "\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF: {0} (\u672A\u6355\u83B7)"},
{"Exceptions caught:", "\u51FA\u73B0\u8FD9\u4E9B\u5F02\u5E38\u9519\u8BEF\u65F6\u4E2D\u65AD:"},
+ {"Expected at, in, or an integer <thread_id>:", "\u5E94\u4E3A \"at\"\u3001\"in\" \u6216\u4EE5\u6574\u6570\u8868\u793A\u7684 <thread_id>\uFF1A{0}"},
{"expr is null", "{0} = \u7A7A\u503C"},
{"expr is value", "{0} = {1}"},
{"expr is value <collected>", " {0} = {1} <\u5DF2\u6536\u96C6>"},
{"Expression cannot be void", "\u8868\u8FBE\u5F0F\u4E0D\u80FD\u4E3A\u7A7A"},
{"Expression must evaluate to an object", "\u8868\u8FBE\u5F0F\u7684\u8BA1\u7B97\u7ED3\u679C\u5FC5\u987B\u4E3A\u5BF9\u8C61"},
{"extends:", "\u6269\u5C55: {0}"},
+ {"Extra tokens after breakpoint location", "\u7AEF\u70B9\u4F4D\u7F6E\u540E\u9762\u6709\u989D\u5916\u7684\u6807\u8BB0"},
{"Failed reading output", "\u65E0\u6CD5\u8BFB\u53D6\u5B50 Java \u89E3\u91CA\u5668\u7684\u8F93\u51FA\u3002"},
{"Fatal error", "\u81F4\u547D\u9519\u8BEF:"},
{"Field access encountered before after", "\u5B57\u6BB5 ({0}) \u4E3A{1}, \u5C06\u4E3A{2}: "},
@@ -153,11 +156,14 @@
{"Invalid connect type", "\u8FDE\u63A5\u7C7B\u578B\u65E0\u6548"},
{"Invalid consecutive invocations", "\u8FDE\u7EED\u8C03\u7528\u65E0\u6548"},
{"Invalid exception object", "\u5F02\u5E38\u9519\u8BEF\u5BF9\u8C61\u65E0\u6548"},
- {"Invalid method specification:", "\u65B9\u6CD5\u89C4\u8303\u65E0\u6548: {0}"},
+ {"Invalid line number specified", "\u6307\u5B9A\u7684\u884C\u53F7\u65E0\u6548"},
+ {"Invalid <method_name> specification:", "<method_name> \u89C4\u8303\u65E0\u6548\uFF1A{0}"},
{"Invalid option on class command", "\u7C7B\u547D\u4EE4\u7684\u9009\u9879\u65E0\u6548"},
{"invalid option", "\u9009\u9879\u65E0\u6548: {0}"},
{"Invalid thread status.", "\u7EBF\u7A0B\u72B6\u6001\u65E0\u6548\u3002"},
+ {"Invalid <thread_id>:", "<thread_id> \u65E0\u6548\uFF1A{0}"},
{"Invalid transport name:", "\u4F20\u8F93\u540D\u79F0\u65E0\u6548: {0}"},
+ {"Invalid <class>.<method_name> specification", "<class>.<method_name> \u89C4\u8303\u65E0\u6548"},
{"I/O exception occurred:", "\u51FA\u73B0 I/O \u5F02\u5E38\u9519\u8BEF: {0}"},
{"is an ambiguous method name in", "\"{0}\" \u5728 \"{1}\" \u4E2D\u662F\u4E0D\u660E\u786E\u7684\u65B9\u6CD5\u540D\u79F0"},
{"is an invalid line number for", "{0,number,integer} \u662F{1}\u7684\u65E0\u6548\u884C\u53F7"},
@@ -190,6 +196,7 @@
{"Method exitedValue:", "\u5DF2\u9000\u51FA\u65B9\u6CD5: \u8FD4\u56DE\u503C = {0}, "},
{"Method is overloaded; specify arguments", "\u5DF2\u91CD\u8F7D\u65B9\u6CD5{0}; \u8BF7\u6307\u5B9A\u53C2\u6570"},
{"minus version", "\u8FD9\u662F{0}\u7248\u672C {1,number,integer}.{2,number,integer} (Java SE \u7248\u672C {3})"},
+ {"Missing at or in", "\u7F3A\u5C11 \"at\" \u6216 \"in\""},
{"Monitor information for thread", "\u76D1\u89C6\u7EBF\u7A0B{0}\u7684\u4FE1\u606F:"},
{"Monitor information for expr", "\u76D1\u89C6{0} ({1}) \u7684\u4FE1\u606F:"},
{"More than one class named", "\u591A\u4E2A\u7C7B\u7684\u540D\u79F0\u4E3A: ''{0}''"},
@@ -234,13 +241,16 @@
{"Not owned", " \u4E0D\u62E5\u6709"},
{"Not waiting for a monitor", " \u672A\u7B49\u5F85\u76D1\u89C6\u5668"},
{"Nothing suspended.", "\u672A\u6302\u8D77\u4EFB\u4F55\u5BF9\u8C61\u3002"},
- {"object description and hex id", "({0}){1}"},
+ {"object description and id", "({0}){1}"},
{"Operation is not supported on the target VM", "\u76EE\u6807 VM \u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C"},
{"operation not yet supported", "\u5C1A\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C"},
{"Owned by:", " \u62E5\u6709\u8005: {0}, \u6761\u76EE\u8BA1\u6570: {1,number,integer}"},
{"Owned monitor:", " \u62E5\u6709\u7684\u76D1\u89C6\u5668: {0}"},
{"Parse exception:", "\u8BED\u6CD5\u5206\u6790\u5F02\u5E38\u9519\u8BEF: {0}"},
- {"printbreakpointcommandusage", "\u7528\u6CD5: {0} <class>:<line_number> \u6216\n {1} <class>.<method_name>[(argument_type,...)]"},
+ {"printclearcommandusage", "\u7528\u6CD5\uFF1Aclear <class>:<line_number> \u6216\n clear <class>.<method_name>[(argument_type,...)]"},
+ {"printstopcommandusage",
+ "\u7528\u6CD5\uFF1Astop [go|thread] [<thread_id>] <at|in> <location>\n \u5982\u679C\u6307\u5B9A \"go\"\uFF0C\u5219\u5728\u505C\u6B62\u540E\u7ACB\u5373\u6062\u590D\n \u5982\u679C\u6307\u5B9A \"thread\"\uFF0C\u5219\u4EC5\u6302\u8D77\u5728\u5176\u4E2D\u505C\u6B62\u7684\u7EBF\u7A0B\n \u5982\u679C\u65E2\u672A\u6307\u5B9A \"go\" \u4E5F\u672A\u6307\u5B9A \"thread\"\uFF0C\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\n \u5982\u679C\u6307\u5B9A\u4EE5\u6574\u6570\u8868\u793A\u7684 <thread_id>\uFF0C\u5219\u4EC5\u5728\u6307\u5B9A\u7684\u7EBF\u7A0B\u4E2D\u505C\u6B62\n \"at\" \u548C \"in\" \u7684\u542B\u4E49\u76F8\u540C\n <location> \u53EF\u4EE5\u662F\u884C\u53F7\u6216\u65B9\u6CD5\uFF1A\n <class_id>:<line_number>\n <class_id>.<method>[(argument_type,...)]"
+ },
{"Removed:", "\u5DF2\u5220\u9664: {0}"},
{"Requested stack frame is no longer active:", "\u8BF7\u6C42\u7684\u5806\u6808\u5E27\u4E0D\u518D\u6709\u6548: {0,number,integer}"},
{"run <args> command is valid only with launched VMs", "'run <args>' \u547D\u4EE4\u4EC5\u5BF9\u542F\u52A8\u7684 VM \u6709\u6548"},
@@ -289,6 +299,8 @@
{"Thread not suspended", "\u672A\u6302\u8D77\u7EBF\u7A0B"},
{"thread group number description name", "{0,number,integer}\u3002{1} {2}"},
{"Threadgroup name not specified.", "\u672A\u6307\u5B9A\u7EBF\u7A0B\u7EC4\u540D\u3002"},
+ {"<thread_id> option not valid until the VM is started with the run command",
+ "\u5728\u4F7F\u7528 run \u547D\u4EE4\u542F\u52A8 VM \u524D\uFF0C<thread_id> \u9009\u9879\u65E0\u6548"},
{"Threads must be suspended", "\u5FC5\u987B\u6302\u8D77\u7EBF\u7A0B"},
{"trace method exit in effect for", "\u6B63\u5728\u5BF9{0}\u5B9E\u884C trace method exit"},
{"trace method exits in effect", "\u6B63\u5728\u5B9E\u884C trace method exits"},
@@ -315,7 +327,6 @@
{"Usage: unmonitor <monitor#>", "\u7528\u6CD5: unmonitor <monitor#>"},
{"Usage: up [n frames]", "\u7528\u6CD5: up [n frames]"},
{"Use java minus X to see", "\u4F7F\u7528 'java -X' \u53EF\u4EE5\u67E5\u770B\u53EF\u7528\u7684\u975E\u6807\u51C6\u9009\u9879"},
- {"Use stop at to set a breakpoint at a line number", "\u4F7F\u7528 'stop at' \u53EF\u4EE5\u5728\u884C\u53F7\u5904\u8BBE\u7F6E\u65AD\u70B9"},
{"VM already running. use cont to continue after events.", "VM \u5DF2\u5728\u8FD0\u884C\u3002\u8BF7\u4F7F\u7528 'cont' \u4EE5\u5728\u4E8B\u4EF6\u7ED3\u675F\u540E\u7EE7\u7EED\u3002"},
{"VM Started:", "VM \u5DF2\u542F\u52A8: "},
{"vmstartexception", "VM \u542F\u52A8\u5F02\u5E38\u9519\u8BEF: {0}"},
@@ -324,7 +335,7 @@
{"watch accesses of", "\u76D1\u89C6{0}.{1}\u7684\u8BBF\u95EE"},
{"watch modification of", "\u76D1\u89C6{0}.{1}\u7684\u4FEE\u6539"},
{"zz help text",
- "** \u547D\u4EE4\u5217\u8868 **\nconnectors -- \u5217\u51FA\u6B64 VM \u4E2D\u53EF\u7528\u7684\u8FDE\u63A5\u5668\u548C\u4F20\u8F93\n\nrun [class [args]] -- \u5F00\u59CB\u6267\u884C\u5E94\u7528\u7A0B\u5E8F\u7684\u4E3B\u7C7B\n\nthreads [threadgroup] -- \u5217\u51FA\u7EBF\u7A0B\nthread <thread id> -- \u8BBE\u7F6E\u9ED8\u8BA4\u7EBF\u7A0B\nsuspend [thread id(s)] -- \u6302\u8D77\u7EBF\u7A0B (\u9ED8\u8BA4\u503C: all)\nresume [thread id(s)] -- \u6062\u590D\u7EBF\u7A0B (\u9ED8\u8BA4\u503C: all)\nwhere [<thread id> | all] -- \u8F6C\u50A8\u7EBF\u7A0B\u7684\u5806\u6808\nwherei [<thread id> | all]-- \u8F6C\u50A8\u7EBF\u7A0B\u7684\u5806\u6808, \u4EE5\u53CA pc \u4FE1\u606F\nup [n frames] -- \u4E0A\u79FB\u7EBF\u7A0B\u7684\u5806\u6808\ndown [n frames] -- \u4E0B\u79FB\u7EBF\u7A0B\u7684\u5806\u6808\nkill <thread id> <expr> -- \u7EC8\u6B62\u5177\u6709\u7ED9\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF\u5BF9\u8C61\u7684\u7EBF\u7A0B\ninterrupt <thread id> -- \u4E2D\u65AD\u7EBF\u7A0B\n\nprint <expr> -- \u8F93\u51FA\u8868\u8FBE\u5F0F\u7684\u503C\ndump <expr> -- \u8F93\u51FA\u6240\u6709\u5BF9\u8C61\u4FE1\u606F\neval <expr> -- \u5BF9\u8868\u8FBE\u5F0F\u6C42\u503C (\u4E0E print \u76F8\u540C)\nset <lvalue> = <expr> -- \u5411\u5B57\u6BB5/\u53D8\u91CF/\u6570\u7EC4\u5143\u7D20\u5206\u914D\u65B0\u503C\nlocals -- \u8F93\u51FA\u5F53\u524D\u5806\u6808\u5E27\u4E2D\u7684\u6240\u6709\u672C\u5730\u53D8\u91CF\n\nclasses -- \u5217\u51FA\u5F53\u524D\u5DF2\u77E5\u7684\u7C7B\nclass <class id> -- \u663E\u793A\u5DF2\u547D\u540D\u7C7B\u7684\u8BE6\u7EC6\u8D44\u6599\nmethods <class id> -- \u5217\u51FA\u7C7B\u7684\u65B9\u6CD5\nfields <class id> -- \u5217\u51FA\u7C7B\u7684\u5B57\u6BB5\n\nthreadgroups -- \u5217\u51FA\u7EBF\u7A0B\u7EC4\nthreadgroup <name> -- \u8BBE\u7F6E\u5F53\u524D\u7EBF\u7A0B\u7EC4\n\nstop in <class id>.<method>[(argument_type,...)]\n -- \u5728\u65B9\u6CD5\u4E2D\u8BBE\u7F6E\u65AD\u70B9\nstop at <class id>:<line> -- \u5728\u884C\u4E2D\u8BBE\u7F6E\u65AD\u70B9\nclear <class id>.<method>[(argument_type,...)]\n -- \u6E05\u9664\u65B9\u6CD5\u4E2D\u7684\u65AD\u70B9\nclear <class id>:<line> -- \u6E05\u9664\u884C\u4E2D\u7684\u65AD\u70B9\nclear -- \u5217\u51FA\u65AD\u70B9\ncatch [uncaught|caught|all] <class id>|<class pattern>\n -- \u51FA\u73B0\u6307\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF\u65F6\u4E2D\u65AD\nignore [uncaught|caught|all] <class id>|<class pattern>\n -- \u5BF9\u4E8E\u6307\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF, \u53D6\u6D88 'catch'\nwatch [access|all] <class id>.<field name>\n -- \u76D1\u89C6\u5BF9\u5B57\u6BB5\u7684\u8BBF\u95EE/\u4FEE\u6539\nunwatch [access|all] <class id>.<field name>\n -- \u505C\u6B62\u76D1\u89C6\u5BF9\u5B57\u6BB5\u7684\u8BBF\u95EE/\u4FEE\u6539\ntrace [go] methods [thread]\n -- \u8DDF\u8E2A\u65B9\u6CD5\u8FDB\u5165\u548C\u9000\u51FA\u3002\n -- \u9664\u975E\u6307\u5B9A 'go', \u5426\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\ntrace [go] method exit | exits [thread]\n -- \u8DDF\u8E2A\u5F53\u524D\u65B9\u6CD5\u7684\u9000\u51FA, \u6216\u8005\u6240\u6709\u65B9\u6CD5\u7684\u9000\u51FA\n -- \u9664\u975E\u6307\u5B9A 'go', \u5426\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\nuntrace [methods] -- \u505C\u6B62\u8DDF\u8E2A\u65B9\u6CD5\u8FDB\u5165\u548C/\u6216\u9000\u51FA\nstep -- \u6267\u884C\u5F53\u524D\u884C\nstep up -- \u4E00\u76F4\u6267\u884C, \u76F4\u5230\u5F53\u524D\u65B9\u6CD5\u8FD4\u56DE\u5230\u5176\u8C03\u7528\u65B9\nstepi -- \u6267\u884C\u5F53\u524D\u6307\u4EE4\n\u4E0B\u4E00\u6B65 -- \u6B65\u8FDB\u4E00\u884C (\u6B65\u8FC7\u8C03\u7528)\ncont -- \u4ECE\u65AD\u70B9\u5904\u7EE7\u7EED\u6267\u884C\n\nlist [line number|method] -- \u8F93\u51FA\u6E90\u4EE3\u7801\nuse (\u6216 sourcepath) [source file path]\n -- \u663E\u793A\u6216\u66F4\u6539\u6E90\u8DEF\u5F84\nexclude [<class pattern>, ... | \"none\"]\n -- \u5BF9\u4E8E\u6307\u5B9A\u7684\u7C7B, \u4E0D\u62A5\u544A\u6B65\u9AA4\u6216\u65B9\u6CD5\u4E8B\u4EF6\nclasspath -- \u4ECE\u76EE\u6807 VM \u8F93\u51FA\u7C7B\u8DEF\u5F84\u4FE1\u606F\n\nmonitor <command> -- \u6BCF\u6B21\u7A0B\u5E8F\u505C\u6B62\u65F6\u6267\u884C\u547D\u4EE4\nmonitor -- \u5217\u51FA\u76D1\u89C6\u5668\nunmonitor <monitor#> -- \u5220\u9664\u76D1\u89C6\u5668\nread <filename> -- \u8BFB\u53D6\u5E76\u6267\u884C\u547D\u4EE4\u6587\u4EF6\n\nlock <expr> -- \u8F93\u51FA\u5BF9\u8C61\u7684\u9501\u4FE1\u606F\nthreadlocks [thread id] -- \u8F93\u51FA\u7EBF\u7A0B\u7684\u9501\u4FE1\u606F\n\npop -- \u901A\u8FC7\u5F53\u524D\u5E27\u51FA\u6808, \u4E14\u5305\u542B\u5F53\u524D\u5E27\nreenter -- \u4E0E pop \u76F8\u540C, \u4F46\u91CD\u65B0\u8FDB\u5165\u5F53\u524D\u5E27\nredefine <class id> <class file name>\n -- \u91CD\u65B0\u5B9A\u4E49\u7C7B\u7684\u4EE3\u7801\n\ndisablegc <expr> -- \u7981\u6B62\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\nenablegc <expr> -- \u5141\u8BB8\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\n\n!! -- \u91CD\u590D\u6267\u884C\u6700\u540E\u4E00\u4E2A\u547D\u4EE4\n<n> <command> -- \u5C06\u547D\u4EE4\u91CD\u590D\u6267\u884C n \u6B21\n# <command> -- \u653E\u5F03 (\u65E0\u64CD\u4F5C)\nhelp (\u6216 ?) -- \u5217\u51FA\u547D\u4EE4\nversion -- \u8F93\u51FA\u7248\u672C\u4FE1\u606F\nexit (\u6216 quit) -- \u9000\u51FA\u8C03\u8BD5\u5668\n\n<class id>: \u5E26\u6709\u7A0B\u5E8F\u5305\u9650\u5B9A\u7B26\u7684\u5B8C\u6574\u7C7B\u540D\n<class pattern>: \u5E26\u6709\u524D\u5BFC\u6216\u5C3E\u968F\u901A\u914D\u7B26 ('*') \u7684\u7C7B\u540D\n<thread id>: 'threads' \u547D\u4EE4\u4E2D\u62A5\u544A\u7684\u7EBF\u7A0B\u7F16\u53F7\n<expr>: Java(TM) \u7F16\u7A0B\u8BED\u8A00\u8868\u8FBE\u5F0F\u3002\n\u652F\u6301\u5927\u591A\u6570\u5E38\u89C1\u8BED\u6CD5\u3002\n\n\u53EF\u4EE5\u5C06\u542F\u52A8\u547D\u4EE4\u7F6E\u4E8E \"jdb.ini\" \u6216 \".jdbrc\" \u4E2D\n\u4F4D\u4E8E user.home \u6216 user.dir \u4E2D"},
+ "** \u547D\u4EE4\u5217\u8868 **\nconnectors -- \u5217\u51FA\u6B64 VM \u4E2D\u53EF\u7528\u7684\u8FDE\u63A5\u5668\u548C\u4F20\u8F93\n\nrun [class [args]] -- \u5F00\u59CB\u6267\u884C\u5E94\u7528\u7A0B\u5E8F\u7684\u4E3B\u7C7B\n\nthreads [threadgroup] -- \u5217\u51FA\u7EBF\u7A0B\nthread <thread id> -- \u8BBE\u7F6E\u9ED8\u8BA4\u7EBF\u7A0B\nsuspend [thread id(s)] -- \u6302\u8D77\u7EBF\u7A0B (\u9ED8\u8BA4\u503C: all)\nresume [thread id(s)] -- \u6062\u590D\u7EBF\u7A0B (\u9ED8\u8BA4\u503C: all)\nwhere [<thread id> | all] -- \u8F6C\u50A8\u7EBF\u7A0B\u7684\u5806\u6808\nwherei [<thread id> | all]-- \u8F6C\u50A8\u7EBF\u7A0B\u7684\u5806\u6808, \u4EE5\u53CA pc \u4FE1\u606F\nup [n frames] -- \u4E0A\u79FB\u7EBF\u7A0B\u7684\u5806\u6808\ndown [n frames] -- \u4E0B\u79FB\u7EBF\u7A0B\u7684\u5806\u6808\nkill <thread id> <expr> -- \u7EC8\u6B62\u5177\u6709\u7ED9\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF\u5BF9\u8C61\u7684\u7EBF\u7A0B\ninterrupt <thread id> -- \u4E2D\u65AD\u7EBF\u7A0B\n\nprint <expr> -- \u8F93\u51FA\u8868\u8FBE\u5F0F\u7684\u503C\ndump <expr> -- \u8F93\u51FA\u6240\u6709\u5BF9\u8C61\u4FE1\u606F\neval <expr> -- \u5BF9\u8868\u8FBE\u5F0F\u6C42\u503C (\u4E0E print \u76F8\u540C)\nset <lvalue> = <expr> -- \u5411\u5B57\u6BB5/\u53D8\u91CF/\u6570\u7EC4\u5143\u7D20\u5206\u914D\u65B0\u503C\nlocals -- \u8F93\u51FA\u5F53\u524D\u5806\u6808\u5E27\u4E2D\u7684\u6240\u6709\u672C\u5730\u53D8\u91CF\n\nclasses -- \u5217\u51FA\u5F53\u524D\u5DF2\u77E5\u7684\u7C7B\nclass <class id> -- \u663E\u793A\u5DF2\u547D\u540D\u7C7B\u7684\u8BE6\u7EC6\u8D44\u6599\nmethods <class id> -- \u5217\u51FA\u7C7B\u7684\u65B9\u6CD5\nfields <class id> -- \u5217\u51FA\u7C7B\u7684\u5B57\u6BB5\n\nthreadgroups -- \u5217\u51FA\u7EBF\u7A0B\u7EC4\nthreadgroup <name> -- \u8BBE\u7F6E\u5F53\u524D\u7EBF\u7A0B\u7EC4\n\nstop [go|thread] [<thread_id>] <at|in> <location>\n -- \u8BBE\u7F6E\u65AD\u70B9\n -- \u5982\u679C\u672A\u63D0\u4F9B\u4EFB\u4F55\u9009\u9879\uFF0C\u5219\u5C06\u6253\u5370\u5F53\u524D\u65AD\u70B9\u5217\u8868\n -- \u5982\u679C\u6307\u5B9A \"go\"\uFF0C\u5219\u5728\u505C\u6B62\u540E\u7ACB\u5373\u6062\u590D\n -- \u5982\u679C\u6307\u5B9A \"thread\"\uFF0C\u5219\u4EC5\u6302\u8D77\u5728\u5176\u4E2D\u505C\u6B62\u7684\u7EBF\u7A0B\n -- \u5982\u679C\u65E2\u672A\u6307\u5B9A \"go\" \u4E5F\u672A\u6307\u5B9A \"thread\"\uFF0C\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\n -- \u5982\u679C\u6307\u5B9A\u4EE5\u6574\u6570\u8868\u793A\u7684 <thread_id>\uFF0C\u5219\u4EC5\u5728\u6307\u5B9A\u7684\u7EBF\u7A0B\u4E2D\u505C\u6B62\n -- \"at\" \u548C \"in\" \u7684\u542B\u4E49\u76F8\u540C\n -- <location> \u53EF\u4EE5\u662F\u884C\u53F7\u6216\u65B9\u6CD5\uFF1A\n -- <class_id>:<line_number>\n -- <class_id>.<method>[(argument_type,...)]\nclear <class id>.<method>[(argument_type,...)]\n -- \u6E05\u9664\u65B9\u6CD5\u4E2D\u7684\u65AD\u70B9\nclear <class id>:<line> -- \u6E05\u9664\u884C\u4E2D\u7684\u65AD\u70B9\nclear -- \u5217\u51FA\u65AD\u70B9\ncatch [uncaught|caught|all] <class id>|<class pattern>\n -- \u51FA\u73B0\u6307\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF\u65F6\u4E2D\u65AD\nignore [uncaught|caught|all] <class id>|<class pattern>\n -- \u5BF9\u4E8E\u6307\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF, \u53D6\u6D88 'catch'\nwatch [access|all] <class id>.<field name>\n -- \u76D1\u89C6\u5BF9\u5B57\u6BB5\u7684\u8BBF\u95EE/\u4FEE\u6539\nunwatch [access|all] <class id>.<field name>\n -- \u505C\u6B62\u76D1\u89C6\u5BF9\u5B57\u6BB5\u7684\u8BBF\u95EE/\u4FEE\u6539\ntrace [go] methods [thread]\n -- \u8DDF\u8E2A\u65B9\u6CD5\u8FDB\u5165\u548C\u9000\u51FA\u3002\n -- \u9664\u975E\u6307\u5B9A 'go', \u5426\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\ntrace [go] method exit | exits [thread]\n -- \u8DDF\u8E2A\u5F53\u524D\u65B9\u6CD5\u7684\u9000\u51FA, \u6216\u8005\u6240\u6709\u65B9\u6CD5\u7684\u9000\u51FA\n -- \u9664\u975E\u6307\u5B9A 'go', \u5426\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\nuntrace [methods] -- \u505C\u6B62\u8DDF\u8E2A\u65B9\u6CD5\u8FDB\u5165\u548C/\u6216\u9000\u51FA\nstep -- \u6267\u884C\u5F53\u524D\u884C\nstep up -- \u4E00\u76F4\u6267\u884C, \u76F4\u5230\u5F53\u524D\u65B9\u6CD5\u8FD4\u56DE\u5230\u5176\u8C03\u7528\u65B9\nstepi -- \u6267\u884C\u5F53\u524D\u6307\u4EE4\n\u4E0B\u4E00\u6B65 -- \u6B65\u8FDB\u4E00\u884C (\u6B65\u8FC7\u8C03\u7528)\ncont -- \u4ECE\u65AD\u70B9\u5904\u7EE7\u7EED\u6267\u884C\n\nlist [line number|method] -- \u8F93\u51FA\u6E90\u4EE3\u7801\nuse (\u6216 sourcepath) [source file path]\n -- \u663E\u793A\u6216\u66F4\u6539\u6E90\u8DEF\u5F84\nexclude [<class pattern>, ... | \"none\"]\n -- \u5BF9\u4E8E\u6307\u5B9A\u7684\u7C7B, \u4E0D\u62A5\u544A\u6B65\u9AA4\u6216\u65B9\u6CD5\u4E8B\u4EF6\nclasspath -- \u4ECE\u76EE\u6807 VM \u8F93\u51FA\u7C7B\u8DEF\u5F84\u4FE1\u606F\n\nmonitor <command> -- \u6BCF\u6B21\u7A0B\u5E8F\u505C\u6B62\u65F6\u6267\u884C\u547D\u4EE4\nmonitor -- \u5217\u51FA\u76D1\u89C6\u5668\nunmonitor <monitor#> -- \u5220\u9664\u76D1\u89C6\u5668\nread <filename> -- \u8BFB\u53D6\u5E76\u6267\u884C\u547D\u4EE4\u6587\u4EF6\n\nlock <expr> -- \u8F93\u51FA\u5BF9\u8C61\u7684\u9501\u4FE1\u606F\nthreadlocks [thread id] -- \u8F93\u51FA\u7EBF\u7A0B\u7684\u9501\u4FE1\u606F\n\npop -- \u901A\u8FC7\u5F53\u524D\u5E27\u51FA\u6808, \u4E14\u5305\u542B\u5F53\u524D\u5E27\nreenter -- \u4E0E pop \u76F8\u540C, \u4F46\u91CD\u65B0\u8FDB\u5165\u5F53\u524D\u5E27\nredefine <class id> <class file name>\n -- \u91CD\u65B0\u5B9A\u4E49\u7C7B\u7684\u4EE3\u7801\n\ndisablegc <expr> -- \u7981\u6B62\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\nenablegc <expr> -- \u5141\u8BB8\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\n\n!! -- \u91CD\u590D\u6267\u884C\u6700\u540E\u4E00\u4E2A\u547D\u4EE4\n<n> <command> -- \u5C06\u547D\u4EE4\u91CD\u590D\u6267\u884C n \u6B21\n# <command> -- \u653E\u5F03 (\u65E0\u64CD\u4F5C)\nhelp (\u6216 ?) -- \u5217\u51FA\u547D\u4EE4\ndbgtrace [flag] -- \u4E0E dbgtrace \u547D\u4EE4\u884C\u9009\u9879\u76F8\u540C\nversion -- \u8F93\u51FA\u7248\u672C\u4FE1\u606F\nexit (\u6216 quit) -- \u9000\u51FA\u8C03\u8BD5\u5668\n\n<class id>: \u5E26\u6709\u7A0B\u5E8F\u5305\u9650\u5B9A\u7B26\u7684\u5B8C\u6574\u7C7B\u540D\n<class pattern>: \u5E26\u6709\u524D\u5BFC\u6216\u5C3E\u968F\u901A\u914D\u7B26 ('*') \u7684\u7C7B\u540D\n<thread id>: 'threads' \u547D\u4EE4\u4E2D\u62A5\u544A\u7684\u7EBF\u7A0B\u7F16\u53F7\n<expr>: Java(TM) \u7F16\u7A0B\u8BED\u8A00\u8868\u8FBE\u5F0F\u3002\n\u652F\u6301\u5927\u591A\u6570\u5E38\u89C1\u8BED\u6CD5\u3002\n\n\u53EF\u4EE5\u5C06\u542F\u52A8\u547D\u4EE4\u7F6E\u4E8E \"jdb.ini\" \u6216 \".jdbrc\" \u4E2D\n\u4F4D\u4E8E user.home \u6216 user.dir \u4E2D"},
{"zz usage text",
"\u7528\u6CD5\uFF1A{0} <\u9009\u9879> <\u7C7B> <\u53C2\u6570>\n\n\u5176\u4E2D\uFF0C\u9009\u9879\u5305\u62EC\uFF1A\n -? -h --help -help \u8F93\u51FA\u6B64\u6D88\u606F\u5E76\u9000\u51FA\n -sourcepath <\u7531 \"{1}\" \u5206\u9694\u7684\u76EE\u5F55>\n \u8981\u5728\u5176\u4E2D\u67E5\u627E\u6E90\u6587\u4EF6\u7684\u76EE\u5F55\n -attach <\u5730\u5740>\n \u4F7F\u7528\u6807\u51C6\u8FDE\u63A5\u5668\u9644\u52A0\u5230\u6307\u5B9A\u5730\u5740\u5904\u6B63\u5728\u8FD0\u884C\u7684 VM\n -listen <\u5730\u5740>\n \u7B49\u5F85\u6B63\u5728\u8FD0\u884C\u7684 VM \u4F7F\u7528\u6807\u51C6\u8FDE\u63A5\u5668\u5728\u6307\u5B9A\u5730\u5740\u5904\u8FDE\u63A5\n -listenany\n \u7B49\u5F85\u6B63\u5728\u8FD0\u884C\u7684 VM \u4F7F\u7528\u6807\u51C6\u8FDE\u63A5\u5668\u5728\u4EFB\u4F55\u53EF\u7528\u5730\u5740\u5904\u8FDE\u63A5\n -launch\n \u7ACB\u5373\u542F\u52A8 VM \u800C\u4E0D\u662F\u7B49\u5F85 ''run'' \u547D\u4EE4\n -listconnectors \u5217\u51FA\u6B64 VM \u4E2D\u7684\u53EF\u7528\u8FDE\u63A5\u5668\n -connect <\u8FDE\u63A5\u5668\u540D\u79F0>:<\u540D\u79F0 1>=<\u503C 1>,...\n \u4F7F\u7528\u6240\u5217\u53C2\u6570\u503C\u901A\u8FC7\u6307\u5B9A\u7684\u8FDE\u63A5\u5668\u8FDE\u63A5\u5230\u76EE\u6807 VM\n -dbgtrace [flags] \u8F93\u51FA\u8C03\u8BD5 {0} \u7684\u4FE1\u606F\n -tclient \u5728 HotSpot(TM) \u5BA2\u6237\u673A\u7F16\u8BD1\u5668\u4E2D\u8FD0\u884C\u5E94\u7528\u7A0B\u5E8F\n -tserver \u5728 HotSpot(TM) \u670D\u52A1\u5668\u7F16\u8BD1\u5668\u4E2D\u8FD0\u884C\u5E94\u7528\u7A0B\u5E8F\n\n\u8F6C\u53D1\u5230\u88AB\u8C03\u8BD5\u8FDB\u7A0B\u7684\u9009\u9879\uFF1A\n -v -verbose[:class|gc|jni]\n \u542F\u7528\u8BE6\u7EC6\u6A21\u5F0F\n -D<\u540D\u79F0>=<\u503C> \u8BBE\u7F6E\u7CFB\u7EDF\u5C5E\u6027\n -classpath <\u7531 \"{1}\" \u5206\u9694\u7684\u76EE\u5F55>\n \u5217\u51FA\u8981\u5728\u5176\u4E2D\u67E5\u627E\u7C7B\u7684\u76EE\u5F55\n -X<\u9009\u9879> \u975E\u6807\u51C6\u76EE\u6807 VM \u9009\u9879\n\n<\u7C7B> \u662F\u8981\u5F00\u59CB\u8C03\u8BD5\u7684\u7C7B\u7684\u540D\u79F0\n<\u53C2\u6570> \u662F\u4F20\u9012\u5230 <\u7C7B> \u7684 main() \u65B9\u6CD5\u7684\u53C2\u6570\n\n\u8981\u83B7\u5F97\u547D\u4EE4\u7684\u5E2E\u52A9\uFF0C\u8BF7\u5728 {0} \u63D0\u793A\u4E0B\u952E\u5165 ''help''"},
// END OF MATERIAL TO LOCALIZE
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/FormatData_ja.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/FormatData_ja.java Thu Jul 11 15:40:29 2019 +0530
@@ -97,6 +97,10 @@
"\u6c11\u56fd\u524d",
"\u6c11\u56fd",
};
+ final String[] gregoryEras = {
+ "\u7d00\u5143\u524d",
+ "\u897f\u66a6",
+ };
return new Object[][] {
{ "MonthNames",
new String[] {
@@ -171,12 +175,8 @@
"\u5348\u5f8c" // pm marker
}
},
- { "Eras",
- new String[] { // era strings for GregorianCalendar
- "\u7d00\u5143\u524d",
- "\u897f\u66a6"
- }
- },
+ { "Eras", gregoryEras },
+ { "short.Eras", gregoryEras },
{ "buddhist.Eras",
new String[] { // era strings for Thai Buddhist calendar
"\u7d00\u5143\u524d", // Kigenzen
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/FormatData_zh.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/FormatData_zh.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -88,6 +88,10 @@
"\u6c11\u56fd\u524d",
"\u6c11\u56fd",
};
+ final String[] gregoryEras = {
+ "\u516c\u5143\u524d",
+ "\u516c\u5143",
+ };
return new Object[][] {
{ "MonthNames",
new String[] {
@@ -263,12 +267,8 @@
"\u4e0b\u5348" // pm marker
}
},
- { "Eras",
- new String[] { // era strings
- "\u516c\u5143\u524d",
- "\u516c\u5143"
- }
- },
+ { "Eras", gregoryEras },
+ { "short.Eras", gregoryEras },
{ "buddhist.Eras",
new String[] {
"BC",
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/FormatData_zh_TW.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/FormatData_zh_TW.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -88,13 +88,13 @@
"\u6c11\u570b\u524d",
"\u6c11\u570b",
};
+ final String[] gregoryEras = {
+ "\u897f\u5143\u524d",
+ "\u897f\u5143",
+ };
return new Object[][] {
- { "Eras",
- new String[] { // era strings
- "\u897f\u5143\u524d",
- "\u897f\u5143"
- }
- },
+ { "Eras", gregoryEras },
+ { "short.Eras", gregoryEras },
{ "standalone.MonthAbbreviations",
new String[] {
"1\u6708",
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_de.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_de.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_es.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_es.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_fr.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_fr.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_it.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_it.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ja.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ja.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ko.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ko.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_pt_BR.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_pt_BR.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_sv.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_sv.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_CN.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_CN.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_TW.java Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_TW.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -371,7 +371,7 @@
{"Africa/Nouakchott", GMT},
{"Africa/Ouagadougou", GMT},
{"Africa/Porto-Novo", WAT},
- {"Africa/Sao_Tome", WAT},
+ {"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
{"Africa/Tripoli", EET},
{"Africa/Tunis", CET},
--- a/src/jdk.rmic/share/classes/sun/rmi/rmic/resources/rmic_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.rmic/share/classes/sun/rmi/rmic/resources/rmic_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,6 +1,6 @@
#
#
-# Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -108,4 +108,4 @@
rmic.must.implement.remote.directly=\u30B9\u30BF\u30D6\u3092\u5FC5\u8981\u3068\u3059\u308B\u306E\u306Fjava.rmi.Remote\u3092\u62E1\u5F35\u3059\u308B\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3092\u76F4\u63A5\u5B9F\u88C5\u3059\u308B\u30AF\u30E9\u30B9\u306E\u307F\u3067\u3059\u3002\u30AF\u30E9\u30B9{0}\u306F\u30EA\u30E2\u30FC\u30C8\u30FB\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3092\u76F4\u63A5\u306B\u306F\u5B9F\u88C5\u3057\u307E\u305B\u3093\u3002
rmic.must.throw.remoteexception={0}\u306F\u4E0D\u6B63\u306A\u30EA\u30E2\u30FC\u30C8\u30FB\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3067\u3059\u3002\u30E1\u30BD\u30C3\u30C9{1}\u306Fjava.rmi.RemoteException\u3092\u30B9\u30ED\u30FC\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
rmic.must.only.throw.exception=\u30E1\u30BD\u30C3\u30C9{0}\u306F{1}\u3092\u30B9\u30ED\u30FC\u3059\u308B\u306E\u3067\u4E0D\u6B63\u306A\u30EA\u30E2\u30FC\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9\u5B9F\u88C5\u3067\u3059\u3002\u30EA\u30E2\u30FC\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9\u306E\u5B9F\u88C5\u304C\u30B9\u30ED\u30FC\u3059\u308B\u306E\u306Fjava.lang.Exception\u304B\u305D\u306E\u30B5\u30D6\u30AF\u30E9\u30B9\u306E\u307F\u3067\u3059\u3002
-rmic.jrmp.stubs.deprecated=\u8B66\u544A: JRMP\u306E\u30B9\u30B1\u30EB\u30C8\u30F3\u3068static\u30B9\u30BF\u30D6\u306E\u751F\u6210\u3068\u4F7F\u7528\u306F\n\u975E\u63A8\u5968\u3067\u3059\u3002\u30B9\u30B1\u30EB\u30C8\u30F3\u306F\u4E0D\u8981\u3067\u3001static\u30B9\u30BF\u30D6\u306F\n\u52D5\u7684\u306B\u751F\u6210\u3055\u308C\u308B\u30B9\u30BF\u30D6\u306B\u5DEE\u3057\u66FF\u3048\u3089\u308C\u307E\u3057\u305F\u3002\u30E6\u30FC\u30B6\u30FC\u306F\n\u30B9\u30B1\u30EB\u30C8\u30F3\u3068static\u30B9\u30BF\u30D6\u3092\u751F\u6210\u3059\u308B\u305F\u3081\u306B{0}\u3092\u4F7F\u7528\u305B\u305A\u306B\u79FB\u884C\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\njava.rmi.server.UnicastRemoteObject\u306B\u95A2\u3059\u308B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
+rmic.jrmp.stubs.deprecated=\u8B66\u544A: {0}\u306F\u975E\u63A8\u5968\u306B\u306A\u308A\u3001\u5C06\u6765\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u524A\u9664\u3055\u308C\u307E\u3059\u3002\nJRMP\u306E\u30B9\u30B1\u30EB\u30C8\u30F3\u3068static\u30B9\u30BF\u30D6\u306E\u751F\u6210\u3068\u4F7F\u7528\u306F\n\u975E\u63A8\u5968\u3067\u3059\u3002\u30B9\u30B1\u30EB\u30C8\u30F3\u306F\u4E0D\u8981\u3067\u3001static\u30B9\u30BF\u30D6\u306F\n\u52D5\u7684\u306B\u751F\u6210\u3055\u308C\u308B\u30B9\u30BF\u30D6\u306B\u5DEE\u3057\u66FF\u3048\u3089\u308C\u307E\u3057\u305F\u3002\u30E6\u30FC\u30B6\u30FC\u306F\n\u30B9\u30B1\u30EB\u30C8\u30F3\u3068static\u30B9\u30BF\u30D6\u3092\u751F\u6210\u3059\u308B\u305F\u3081\u306B\u3053\u306E\u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u305B\u305A\u306B\u79FB\u884C\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\njava.rmi.server.UnicastRemoteObject\u306B\u95A2\u3059\u308B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
--- a/src/jdk.rmic/share/classes/sun/rmi/rmic/resources/rmic_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.rmic/share/classes/sun/rmi/rmic/resources/rmic_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,6 +1,6 @@
#
#
-# Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -108,4 +108,4 @@
rmic.must.implement.remote.directly=\u4EC5\u76F4\u63A5\u5B9E\u73B0\u6269\u5C55 java.rmi.Remote \u7684\u63A5\u53E3\u7684\u7C7B\u9700\u8981\u5B58\u6839; \u7C7B{0}\u4E0D\u76F4\u63A5\u5B9E\u73B0\u8FDC\u7A0B\u63A5\u53E3\u3002
rmic.must.throw.remoteexception={0}\u4E0D\u662F\u6709\u6548\u8FDC\u7A0B\u63A5\u53E3: \u65B9\u6CD5{1}\u5FC5\u987B\u629B\u51FA java.rmi.RemoteException\u3002
rmic.must.only.throw.exception=\u65B9\u6CD5{0}\u4E0D\u662F\u6709\u6548\u7684\u8FDC\u7A0B\u65B9\u6CD5\u5B9E\u73B0, \u56E0\u4E3A\u5B83\u629B\u51FA\u4E86{1}; \u8FDC\u7A0B\u65B9\u6CD5\u5B9E\u73B0\u53EA\u53EF\u80FD\u629B\u51FA java.lang.Exception \u6216\u5176\u5B50\u7C7B\u3002
-rmic.jrmp.stubs.deprecated=\u8B66\u544A: \u4E3A JRMP \u751F\u6210\u548C\u4F7F\u7528\u9AA8\u67B6\u53CA\u9759\u6001\u5B58\u6839\n\u5DF2\u8FC7\u65F6\u3002\u9AA8\u67B6\u4E0D\u518D\u5FC5\u8981, \u800C\u9759\u6001\u5B58\u6839\n\u5DF2\u7531\u52A8\u6001\u751F\u6210\u7684\u5B58\u6839\u53D6\u4EE3\u3002\u5EFA\u8BAE\u7528\u6237\n\u4E0D\u518D\u4F7F\u7528{0}\u6765\u751F\u6210\u9AA8\u67B6\u548C\u9759\u6001\u5B58\u6839\u3002\n\u8BF7\u53C2\u9605 java.rmi.server.UnicastRemoteObject \u7684\u6587\u6863\u3002
+rmic.jrmp.stubs.deprecated=\u8B66\u544A\uFF1A{0} \u5DF2\u8FC7\u65F6\uFF0C\u5C06\u4ECE\u672A\u6765\u53D1\u884C\u7248\u4E2D\u5220\u9664\u3002\n\u4E3A JRMP \u751F\u6210\u548C\u4F7F\u7528\u9AA8\u67B6\u53CA\u9759\u6001\u5B58\u6839\u5DF2\u8FC7\u65F6\u3002\n\u9AA8\u67B6\u4E0D\u518D\u5FC5\u8981\uFF0C\u800C\u9759\u6001\u5B58\u6839\u5DF2\u7531\u52A8\u6001\u751F\u6210\u7684\u5B58\u6839\u53D6\u4EE3\u3002\n\u5EFA\u8BAE\u7528\u6237\u4E0D\u518D\u4F7F\u7528\u6B64\u5DE5\u5177\u6765\u751F\u6210\u9AA8\u67B6\u548C\u9759\u6001\u5B58\u6839\u3002\n\u8BF7\u53C2\u9605\u6709\u5173 java.rmi.server.UnicastRemoteObject \n\u7684\u6587\u6863\u3002
--- a/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac_ja.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac_ja.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -286,6 +286,7 @@
#
javac.err.version.too.old=\u30E1\u30B8\u30E3\u30FC\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3''{0}''\u306F\u53E4\u3044\u305F\u3081\u3001\u3053\u306E\u30C4\u30FC\u30EB\u3067\u306F\u8A8D\u8B58\u3067\u304D\u307E\u305B\u3093\u3002
javac.err.version.too.recent=\u30E1\u30B8\u30E3\u30FC.\u30DE\u30A4\u30CA\u30FC\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3''{0}''\u306F\u65B0\u3057\u3044\u305F\u3081\u3001\u3053\u306E\u30C4\u30FC\u30EB\u3067\u306F\u8A8D\u8B58\u3067\u304D\u307E\u305B\u3093\u3002
+javac.err.version.preview=\u30E1\u30B8\u30E3\u30FC.\u30DE\u30A4\u30CA\u30FC\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3''{0}''\u306F\u3001\u3053\u306E\u30C4\u30FC\u30EB\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30D7\u30EC\u30D3\u30E5\u30FC\u6A5F\u80FD\u3092\u6709\u52B9\u306B\u3057\u3066\u30AF\u30E9\u30B9\u304C\u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u305F\u3053\u3068\u3092\u793A\u3057\u307E\u3059\u3002
#
benv.parsed_in=[{0}\u3092{1}\u30DF\u30EA\u79D2\u3067\u69CB\u6587\u89E3\u6790\u3057\u307E\u3057\u305F]
benv.loaded_in=[{0}\u3092{1}\u30DF\u30EA\u79D2\u3067\u8AAD\u307F\u8FBC\u307F\u307E\u3057\u305F]
--- a/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac_zh_CN.properties Tue Jul 09 17:05:20 2019 +0530
+++ b/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac_zh_CN.properties Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -286,6 +286,7 @@
#
javac.err.version.too.old=\u4E3B\u7248\u672C ''{0}'' \u592A\u65E7, \u6B64\u5DE5\u5177\u65E0\u6CD5\u8BC6\u522B\u3002
javac.err.version.too.recent=major.minor \u7248\u672C ''{0}'' \u592A\u65B0, \u6B64\u5DE5\u5177\u65E0\u6CD5\u8BC6\u522B\u3002
+javac.err.version.preview=major.minor \u7248\u672C ''{0}'' \u6307\u793A\u8BE5\u7C7B\u662F\u5728\u542F\u7528\u9884\u89C8\u529F\u80FD\u7684\u60C5\u51B5\u4E0B\u7F16\u8BD1\u7684\uFF0C\u4F46\u6B64\u5DE5\u5177\u4E0D\u652F\u6301\u3002
#
benv.parsed_in=[\u5DF2\u5728 {1} \u6BEB\u79D2\u5185\u5BF9{0}\u8FDB\u884C\u8BED\u6CD5\u5206\u6790]
benv.loaded_in=[\u5DF2\u5728 {1} \u6BEB\u79D2\u5185\u52A0\u8F7D{0}]
--- a/test/hotspot/jtreg/ProblemList-graal.txt Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/ProblemList-graal.txt Thu Jul 11 15:40:29 2019 +0530
@@ -38,8 +38,6 @@
compiler/compilercontrol/mixed/RandomValidCommandsTest.java 8181753 generic-all
compiler/compilercontrol/mixed/RandomCommandsTest.java 8181753 generic-all
-compiler/graalunit/HotspotJdk9Test.java 8223807 generic-all
-compiler/jsr292/InvokerSignatureMismatch.java 8223807 generic-all
compiler/graalunit/JttThreadsTest.java 8207757 generic-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/arguments/GCArguments.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package gc.arguments;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import jdk.test.lib.Platform;
+import jdk.test.lib.process.ProcessTools;
+
+/**
+ * Helper class for adding options to child processes that should be
+ * used by all of the argument tests in this package. The default
+ * options are added at the front, to allow them to be overridden by
+ * explicit options from any particular test.
+ */
+
+public final class GCArguments {
+
+ // Avoid excessive execution time.
+ static private void disableZapUnusedHeapArea(List<String> arguments) {
+ // Develop option, only available in debug builds.
+ if (Platform.isDebugBuild()) {
+ arguments.add("-XX:-ZapUnusedHeapArea");
+ }
+ }
+
+ // Avoid excessive execution time.
+ static private void disableVerifyBeforeExit(List<String> arguments) {
+ // Diagnostic option, default enabled in debug builds.
+ if (Platform.isDebugBuild()) {
+ arguments.add("-XX:-VerifyBeforeExit");
+ }
+ }
+
+ static private void addDefaults(List<String> arguments) {
+ disableZapUnusedHeapArea(arguments);
+ disableVerifyBeforeExit(arguments);
+ }
+
+ static private String[] withDefaults(String[] arguments) {
+ List<String> augmented = new ArrayList<String>();
+ addDefaults(augmented);
+ Collections.addAll(augmented, arguments);
+ return augmented.toArray(new String[augmented.size()]);
+ }
+
+ static public ProcessBuilder createJavaProcessBuilder(String... arguments) {
+ return createJavaProcessBuilder(false, arguments);
+ }
+
+ static public ProcessBuilder createJavaProcessBuilder(boolean addTestVmAndJavaOptions,
+ String... arguments) {
+ return ProcessTools.createJavaProcessBuilder(addTestVmAndJavaOptions,
+ withDefaults(arguments));
+ }
+
+}
--- a/test/hotspot/jtreg/gc/arguments/TestAggressiveHeap.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestAggressiveHeap.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @requires vm.gc.Parallel
* @summary Test argument processing for -XX:+AggressiveHeap.
* @library /test/lib
+ * @library /
* @modules java.base java.management
* @run driver gc.arguments.TestAggressiveHeap
*/
@@ -66,7 +67,7 @@
" *bool +UseParallelGC *= *true +\\{product\\} *\\{command line\\}";
private static void testFlag() throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
option, heapSizeOption, "-XX:+PrintFlagsFinal", "-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
--- a/test/hotspot/jtreg/gc/arguments/TestArrayAllocatorMallocLimit.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestArrayAllocatorMallocLimit.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @bug 8054823
* @key gc
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run driver gc.arguments.TestArrayAllocatorMallocLimit
@@ -52,7 +53,7 @@
private static final String printFlagsFinalPattern = " *size_t *" + flagName + " *:?= *(\\d+) *\\{experimental\\} *";
public static void testDefaultValue() throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
"-XX:+UnlockExperimentalVMOptions", "-XX:+PrintFlagsFinal", "-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
@@ -78,7 +79,7 @@
public static void testSetValue() throws Exception {
long flagValue = 2048;
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
"-XX:+UnlockExperimentalVMOptions", "-XX:" + flagName + "=" + flagValue, "-XX:+PrintFlagsFinal", "-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
--- a/test/hotspot/jtreg/gc/arguments/TestCompressedClassFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestCompressedClassFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -33,6 +33,7 @@
* @summary Tests that VM prints a warning when -XX:CompressedClassSpaceSize
* is used together with -XX:-UseCompressedClassPointers
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestCompressedClassFlags
@@ -50,7 +51,7 @@
}
private static OutputAnalyzer runJava(String ... args) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(args);
return new OutputAnalyzer(pb.start());
}
}
--- a/test/hotspot/jtreg/gc/arguments/TestDisableDefaultGC.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestDisableDefaultGC.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,7 @@
* @bug 8068579
* @key gc
* @library /test/lib
+ * @library /
* @requires vm.gc=="null"
* @modules java.base/jdk.internal.misc
* java.management
@@ -41,14 +42,14 @@
public class TestDisableDefaultGC {
public static void main(String[] args) throws Exception {
// Start VM, disabling all possible default GCs
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:-UseSerialGC",
- "-XX:-UseParallelGC",
- "-XX:-UseG1GC",
- "-XX:-UseConcMarkSweepGC",
- "-XX:+UnlockExperimentalVMOptions",
- "-XX:-UseShenandoahGC",
- "-XX:-UseZGC",
- "-version");
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder("-XX:-UseSerialGC",
+ "-XX:-UseParallelGC",
+ "-XX:-UseG1GC",
+ "-XX:-UseConcMarkSweepGC",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:-UseShenandoahGC",
+ "-XX:-UseZGC",
+ "-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldMatch("Garbage collector not selected");
output.shouldHaveExitValue(1);
--- a/test/hotspot/jtreg/gc/arguments/TestG1ConcMarkStepDurationMillis.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestG1ConcMarkStepDurationMillis.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,7 @@
* @requires vm.gc.G1
* @summary Tests argument processing for double type flag, G1ConcMarkStepDurationMillis
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestG1ConcMarkStepDurationMillis
@@ -79,7 +80,7 @@
Collections.addAll(vmOpts, "-XX:+UseG1GC", "-XX:G1ConcMarkStepDurationMillis="+expectedValue, "-XX:+PrintFlagsFinal", "-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(expectedResult == PASS ? 0 : 1);
--- a/test/hotspot/jtreg/gc/arguments/TestG1ConcRefinementThreads.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestG1ConcRefinementThreads.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @requires vm.gc.G1
* @summary Tests argument processing for G1ConcRefinementThreads
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestG1ConcRefinementThreads
@@ -70,7 +71,7 @@
}
Collections.addAll(vmOpts, "-XX:+UseG1GC", "-XX:+PrintFlagsFinal", "-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
--- a/test/hotspot/jtreg/gc/arguments/TestG1HeapRegionSize.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestG1HeapRegionSize.java Thu Jul 11 15:40:29 2019 +0530
@@ -32,6 +32,7 @@
* @modules java.base/jdk.internal.misc
* @modules java.management/sun.management
* @library /test/lib
+ * @library /
* @run main gc.arguments.TestG1HeapRegionSize
*/
@@ -53,7 +54,7 @@
flagList.add("-XX:+PrintFlagsFinal");
flagList.add("-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flagList.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(flagList.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(exitValue);
--- a/test/hotspot/jtreg/gc/arguments/TestG1PercentageOptions.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestG1PercentageOptions.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @requires vm.gc.G1
* @summary Test argument processing of various percentage options
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run driver gc.arguments.TestG1PercentageOptions
@@ -65,7 +66,7 @@
private static void check(String flag, boolean is_valid) throws Exception {
String[] flags = new String[] { "-XX:+UseG1GC", flag, "-version" };
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(flags);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
if (is_valid) {
output.shouldHaveExitValue(0);
--- a/test/hotspot/jtreg/gc/arguments/TestHeapFreeRatio.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestHeapFreeRatio.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,7 @@
* @bug 8025661
* @summary Test parsing of -Xminf and -Xmaxf
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main/othervm gc.arguments.TestHeapFreeRatio
@@ -48,7 +49,7 @@
}
private static void testMinMaxFreeRatio(String min, String max, Validation type) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
"-Xminf" + min,
"-Xmaxf" + max,
"-version");
--- a/test/hotspot/jtreg/gc/arguments/TestInitialTenuringThreshold.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestInitialTenuringThreshold.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @requires vm.gc.Parallel
* @summary Tests argument processing for initial tenuring threshold
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main/othervm gc.arguments.TestInitialTenuringThreshold
@@ -42,7 +43,7 @@
public class TestInitialTenuringThreshold {
public static void runWithThresholds(int initial, int max, boolean shouldfail) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
"-XX:+UseParallelGC",
"-XX:InitialTenuringThreshold=" + String.valueOf(initial),
"-XX:MaxTenuringThreshold=" + String.valueOf(max),
@@ -59,7 +60,7 @@
public static void main(String args[]) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
// some value below the default value of InitialTenuringThreshold of 7
"-XX:MaxTenuringThreshold=1",
"-version"
--- a/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java Thu Jul 11 15:40:29 2019 +0530
@@ -116,7 +116,7 @@
}
private static void getNewOldSize(String gcflag, long[] values) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(gcflag,
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(gcflag,
"-XX:+PrintFlagsFinal", "-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
@@ -135,7 +135,8 @@
expectError(new String[] { gcflag, "-XX:InitialHeapSize=1023K", "-version" });
expectError(new String[] { gcflag, "-Xms64M", "-XX:InitialHeapSize=32M", "-version" });
expectError(new String[] { gcflag, "-XX:MinHeapSize=1023K", "-version" });
- expectError(new String[] { gcflag, "-Xms4M", "-XX:MinHeapSize=8M", "-version" });
+ // Note: MinHeapSize values get aligned up by HeapAlignment which is 32M with 64k pages.
+ expectError(new String[] { gcflag, "-Xms4M", "-XX:MinHeapSize=64M", "-version" });
expectError(new String[] { gcflag, "-XX:MinHeapSize=8M -XX:InitialHeapSize=4m" });
}
@@ -219,7 +220,7 @@
finalargs.add(classname);
finalargs.addAll(Arrays.asList(arguments));
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(finalargs.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
@@ -319,7 +320,7 @@
}
private static void expect(String[] flags, boolean hasWarning, boolean hasError, int errorcode) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(flags);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
shouldContainOrNot(output, hasWarning, "Warning");
shouldContainOrNot(output, hasError, "Error");
--- a/test/hotspot/jtreg/gc/arguments/TestMaxMinHeapFreeRatioFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxMinHeapFreeRatioFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -100,7 +100,7 @@
Boolean.toString(shrinkHeapInSteps)
);
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(0);
}
@@ -125,7 +125,7 @@
"--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",
"-version"
);
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(1);
analyzer.shouldContain("Error: Could not create the Java Virtual Machine.");
--- a/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java Thu Jul 11 15:40:29 2019 +0530
@@ -31,6 +31,7 @@
* processing.
* @requires vm.gc.Serial
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestMaxNewSize -XX:+UseSerialGC
@@ -45,6 +46,7 @@
* processing.
* @requires vm.gc.Parallel
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestMaxNewSize -XX:+UseParallelGC
@@ -59,6 +61,7 @@
* processing.
* @requires vm.gc.G1
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestMaxNewSize -XX:+UseG1GC
@@ -72,6 +75,7 @@
* @comment Graal does not support CMS
* @requires vm.gc.ConcMarkSweep & !vm.graal.enabled
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main gc.arguments.TestMaxNewSize -XX:+UseConcMarkSweepGC
@@ -104,7 +108,7 @@
finalargs.addAll(Arrays.asList(flags));
finalargs.add("-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(finalargs.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldContain("Initial young gen size set larger than the maximum young gen size");
}
@@ -127,7 +131,7 @@
finalargs.add("-XX:+PrintFlagsFinal");
finalargs.add("-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(finalargs.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
String stdout = output.getStdout();
--- a/test/hotspot/jtreg/gc/arguments/TestMaxRAMFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxRAMFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -64,7 +64,7 @@
args.add("-XX:+PrintFlagsFinal");
args.add("-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(args.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
String stdout = output.getStdout();
@@ -87,7 +87,7 @@
args.add("-XX:+PrintFlagsFinal");
args.add("-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(args.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
String stdout = output.getStdout();
--- a/test/hotspot/jtreg/gc/arguments/TestMinAndInitialSurvivorRatioFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestMinAndInitialSurvivorRatioFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -104,7 +104,7 @@
Boolean.toString(useAdaptiveSizePolicy)
);
vmOptions.removeIf((String p) -> p.isEmpty());
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(0);
}
--- a/test/hotspot/jtreg/gc/arguments/TestNewRatioFlag.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestNewRatioFlag.java Thu Jul 11 15:40:29 2019 +0530
@@ -84,7 +84,7 @@
Integer.toString(ratio)
);
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(0);
System.out.println(analyzer.getOutput());
--- a/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -168,7 +168,7 @@
Long.toString(maxHeapSize)
);
vmOptions.removeIf(String::isEmpty);
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
return analyzer;
}
--- a/test/hotspot/jtreg/gc/arguments/TestNewSizeThreadIncrease.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestNewSizeThreadIncrease.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,7 @@
* @bug 8144527
* @summary Tests argument processing for NewSizeThreadIncrease
* @library /test/lib
+ * @library /
* @requires vm.gc.Serial
* @modules java.base/jdk.internal.misc
* java.management
@@ -67,13 +68,13 @@
}
static void runNewSizeThreadIncreaseTest(String expectedValue, boolean isNewsizeChanged) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseSerialGC",
- "-Xms96M",
- "-Xmx128M",
- "-XX:NewRatio=2",
- "-Xlog:gc+heap+ergo=debug",
- "-XX:NewSizeThreadIncrease="+expectedValue,
- GCTest.class.getName());
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder("-XX:+UseSerialGC",
+ "-Xms96M",
+ "-Xmx128M",
+ "-XX:NewRatio=2",
+ "-Xlog:gc+heap+ergo=debug",
+ "-XX:NewSizeThreadIncrease="+expectedValue,
+ GCTest.class.getName());
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
--- a/test/hotspot/jtreg/gc/arguments/TestObjectTenuringFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestObjectTenuringFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -163,7 +163,7 @@
}
Collections.addAll(vmOpts, "-XX:+UseParallelGC", "-XX:+PrintFlagsFinal", "-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
if (shouldFail) {
--- a/test/hotspot/jtreg/gc/arguments/TestParallelGCThreads.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestParallelGCThreads.java Thu Jul 11 15:40:29 2019 +0530
@@ -58,7 +58,7 @@
private static final String printFlagsFinalPattern = " *uint *" + flagName + " *:?= *(\\d+) *\\{product\\} *";
public static void testDefaultValue() throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
"-XX:+UnlockExperimentalVMOptions", "-XX:+PrintFlagsFinal", "-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
@@ -101,7 +101,7 @@
// Make sure the VM does not allow ParallelGCThreads set to 0
String[] flags = new String[] {"-XX:+Use" + gc + "GC", "-XX:ParallelGCThreads=0", "-XX:+PrintFlagsFinal", "-version"};
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(flags);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(1);
@@ -124,7 +124,7 @@
}
public static long getParallelGCThreadCount(String flags[]) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(flags);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
String stdout = output.getStdout();
--- a/test/hotspot/jtreg/gc/arguments/TestParallelRefProc.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestParallelRefProc.java Thu Jul 11 15:40:29 2019 +0530
@@ -28,6 +28,7 @@
* @key gc
* @summary Test defaults processing for -XX:+ParallelRefProcEnabled.
* @library /test/lib
+ * @library /
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.arguments.TestParallelRefProc
@@ -80,7 +81,7 @@
result.addAll(Arrays.asList(args));
result.add("-XX:+PrintFlagsFinal");
result.add("-version");
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(result.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(result.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
--- a/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,7 @@
* @bug 8068582
* @key gc
* @library /test/lib
+ * @library /
* @requires vm.gc.Serial & vm.gc.G1
* @modules java.base/jdk.internal.misc
* java.management
@@ -52,7 +53,7 @@
};
// Start VM without specifying GC
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(args);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
--- a/test/hotspot/jtreg/gc/arguments/TestSmallInitialHeapWithLargePageAndNUMA.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestSmallInitialHeapWithLargePageAndNUMA.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @requires vm.gc.Parallel
* @summary Check large pages and NUMA are working together via the output message.
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* @modules java.management/sun.management
* @build TestSmallInitialHeapWithLargePageAndNUMA
@@ -67,7 +68,7 @@
"-XX:+PrintFlagsFinal",
"-version"};
- ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(vmArgs);
+ ProcessBuilder pb_enabled = GCArguments.createJavaProcessBuilder(vmArgs);
OutputAnalyzer analyzer = new OutputAnalyzer(pb_enabled.start());
if (largePageOrNumaEnabled(analyzer)) {
--- a/test/hotspot/jtreg/gc/arguments/TestSoftMaxHeapSizeFlag.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestSoftMaxHeapSizeFlag.java Thu Jul 11 15:40:29 2019 +0530
@@ -35,8 +35,9 @@
import jdk.test.lib.process.ProcessTools;
public class TestSoftMaxHeapSizeFlag {
- private static final long Xms = 200 * 1024 * 1024;
- private static final long Xmx = 300 * 1024 * 1024;
+ // Note: Xms and Xmx values get aligned up by HeapAlignment which is 32M with 64k pages.
+ private static final long Xms = 224 * 1024 * 1024;
+ private static final long Xmx = 320 * 1024 * 1024;
private static final long greaterThanXmx = Xmx + 1;
private static final long betweenXmsAndXmx = (Xms + Xmx) / 2;
--- a/test/hotspot/jtreg/gc/arguments/TestSurvivorRatioFlag.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestSurvivorRatioFlag.java Thu Jul 11 15:40:29 2019 +0530
@@ -89,7 +89,7 @@
Integer.toString(ratio)
);
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(0);
}
--- a/test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java Thu Jul 11 15:40:29 2019 +0530
@@ -119,7 +119,7 @@
vmOptions.add("-XX:TargetSurvivorRatio=" + ratio);
vmOptions.add("-version");
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(1);
@@ -154,7 +154,7 @@
Integer.toString(ratio)
);
- ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
+ ProcessBuilder procBuilder = GCArguments.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(0);
--- a/test/hotspot/jtreg/gc/arguments/TestUnrecognizedVMOptionsHandling.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestUnrecognizedVMOptionsHandling.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,7 @@
* @bug 8017611
* @summary Tests handling unrecognized VM options
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run main/othervm gc.arguments.TestUnrecognizedVMOptionsHandling
@@ -41,7 +42,7 @@
public static void main(String args[]) throws Exception {
// The first two JAVA processes are expected to fail, but with a correct VM option suggestion
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(
"-XX:+UseDynamicNumberOfGcThreads",
"-version"
);
@@ -51,7 +52,7 @@
throw new RuntimeException("Not expected to get exit value 0");
}
- pb = ProcessTools.createJavaProcessBuilder(
+ pb = GCArguments.createJavaProcessBuilder(
"-XX:MaxiumHeapSize=500m",
"-version"
);
@@ -62,7 +63,7 @@
}
// The last JAVA process should run successfully for the purpose of sanity check
- pb = ProcessTools.createJavaProcessBuilder(
+ pb = GCArguments.createJavaProcessBuilder(
"-XX:+UseDynamicNumberOfGCThreads",
"-version"
);
--- a/test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgoTools.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestUseCompressedOopsErgoTools.java Thu Jul 11 15:40:29 2019 +0530
@@ -105,7 +105,7 @@
finalargs.add(classname);
finalargs.addAll(Arrays.asList(arguments));
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(finalargs.toArray(new String[0]));
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
return output;
@@ -169,7 +169,7 @@
}
private static String expect(String[] flags, boolean hasWarning, boolean hasError, int errorcode) throws Exception {
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(flags);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(errorcode);
return output.getStdout();
--- a/test/hotspot/jtreg/gc/arguments/TestUseNUMAInterleaving.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestUseNUMAInterleaving.java Thu Jul 11 15:40:29 2019 +0530
@@ -30,6 +30,7 @@
* @bug 8059614
* @key gc
* @library /test/lib
+ * @library /
* @modules java.base/jdk.internal.misc
* java.management
* @run driver gc.arguments.TestUseNUMAInterleaving
@@ -45,7 +46,7 @@
"-XX:+PrintFlagsFinal",
"-version"
};
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, vmargs);
+ ProcessBuilder pb = GCArguments.createJavaProcessBuilder(true, vmargs);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
boolean isNUMAEnabled
--- a/test/hotspot/jtreg/gc/arguments/TestVerifyBeforeAndAfterGCFlags.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/hotspot/jtreg/gc/arguments/TestVerifyBeforeAndAfterGCFlags.java Thu Jul 11 15:40:29 2019 +0530
@@ -34,6 +34,7 @@
* @modules java.base/jdk.internal.misc
* @modules java.management
* @library /test/lib
+ * @library /
* @run driver gc.arguments.TestVerifyBeforeAndAfterGCFlags
*/
@@ -76,7 +77,6 @@
if (opts != null && (opts.length > 0)) {
Collections.addAll(vmOpts, opts);
}
-
Collections.addAll(vmOpts, new String[] {
"-Xlog:gc+verify=debug",
"-Xmx5m",
@@ -89,8 +89,8 @@
: "-XX:-VerifyAfterGC"),
GarbageProducer.class.getName() });
ProcessBuilder procBuilder =
- ProcessTools.createJavaProcessBuilder(vmOpts.toArray(
- new String[vmOpts.size()]));
+ GCArguments.createJavaProcessBuilder(vmOpts.toArray(
+ new String[vmOpts.size()]));
OutputAnalyzer analyzer = new OutputAnalyzer(procBuilder.start());
analyzer.shouldHaveExitValue(0);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/TLS/T.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2019, Google Inc. All rights reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.lang.ProcessBuilder;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class T {
+ public static boolean run() {
+ boolean res = false;
+ String echoInput = "foo";
+ ProcessBuilder pb = new ProcessBuilder("echo", echoInput);
+
+ try {
+ // Starting a ProcessBuilder causes the process reaper thread to be
+ // created. The process reaper thread has small stack size. In JDK
+ // 13, the REAPER_DEFAULT_STACKSIZE is 128K. With JDK 8, it is 32K.
+ // Using the process reaper thread can demonstrate the TLS problem.
+ // The reaper thread can fail with StackOverflow in one of the
+ // failure mode with certain TLS sizes. In another observed
+ // failure mode the VM fails to create a thread with error message
+ // 'Failed to start thread - pthread_create failed'.
+ System.out.println("Starting a new process ...");
+ Process process = pb.start();
+ process.waitFor();
+ String echoOutput = output(process.getInputStream());
+ System.out.println("Echo Output: " + echoOutput);
+ if (echoOutput.equals(echoInput)) {
+ res = true;
+ } else {
+ // 'res' is false, fail
+ System.out.println("Unexpected Echo output: " + echoOutput +
+ ", expects: " + echoInput);
+ }
+ } catch (Exception e) {
+ System.out.println(e.toString());
+ e.printStackTrace();
+ }
+ return res;
+ }
+
+ private static String output(InputStream inputStream) throws IOException {
+ String s = "";
+ try (BufferedReader br =
+ new BufferedReader(new InputStreamReader(inputStream))) {
+ s = br.readLine();
+ }
+ return s;
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/TLS/exestack-tls.c Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2019, Google Inc. All rights reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <jni.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+// Declare the thread local variable(s) in the main executable. This can be
+// used to demonstrate the issues associated with the on-stack static TLS blocks
+// that may cause insufficient stack space. The dynamic TLS blocks for shared
+// objects (such as a JNI library) loaded via dlopen are not allocated on stack.
+__thread int tls[128 * 1024];
+
+JNIEnv* create_vm(JavaVM **jvm, char* argTLS) {
+ JNIEnv* env;
+ JavaVMInitArgs args;
+ JavaVMOption options[3];
+ args.version = JNI_VERSION_1_8;
+ args.nOptions = 3;
+ char classpath[4096];
+ snprintf(classpath, sizeof classpath,
+ "-Djava.class.path=%s", getenv("CLASSPATH"));
+ options[0].optionString = classpath;
+ options[1].optionString = "-Xlog:os+thread=info";
+ options[2].optionString = argTLS;
+ args.options = &options[0];
+ args.ignoreUnrecognized = 0;
+ int rv;
+ rv = JNI_CreateJavaVM(jvm, (void**)&env, &args);
+ if (rv < 0) return NULL;
+ return env;
+}
+
+int run(jboolean addTLS) {
+ JavaVM *jvm;
+ jclass testClass;
+ jmethodID runMethod;
+ char* argTLS;
+ int res = -1;
+
+ if (addTLS) {
+ argTLS = "-XX:+AdjustStackSizeForTLS";
+ } else {
+ argTLS = "-XX:-AdjustStackSizeForTLS"; // default
+ }
+ printf("Running test with %s ...\n", argTLS);
+ JNIEnv *env = create_vm(&jvm, argTLS);
+
+ // Run T.run() and check result:
+ // - Expect T.run() to return 'true' when stack size is adjusted for TLS,
+ // return 0 if so
+ // - Expect T.run() to return 'false' if stack size is not adjusted for
+ // TLS, return 0 if so
+ // Return -1 (fail) for other cases
+ testClass = (*env)->FindClass(env, "T");
+ runMethod = (*env)->GetStaticMethodID(env, testClass, "run", "()Z");
+ if ((*env)->CallStaticBooleanMethod(env, testClass, runMethod, NULL)) {
+ if (addTLS) {
+ // expect T.run() to return 'true'
+ res = 0;
+ }
+ } else {
+ if (!addTLS) {
+ // expect T.run() to return 'false'
+ res = 0;
+ }
+ }
+
+ if (res == 0) {
+ printf("Test passed with %s\n", argTLS);
+ } else {
+ printf("Test failed with %s\n", argTLS);
+ }
+ return res;
+}
+
+int main(int argc, char **argv) {
+ if (argc == 2 && strcmp(argv[1], "-add_tls") == 0) {
+ return run(JNI_TRUE);
+ } else {
+ return run(JNI_FALSE);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/TLS/testtls.sh Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,47 @@
+# Copyright (c) 2019, Google Inc. All rights reserved.
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# 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.
+#!/bin/sh
+
+#
+# @test testtls.sh
+# @summary Test with extra TLS size.
+# @requires os.family == "linux"
+# @compile T.java
+# @run shell testtls.sh
+#
+
+if [ "${TESTSRC}" = "" ]
+then
+ TESTSRC=${PWD}
+ echo "TESTSRC not set. Using "${TESTSRC}" as default"
+fi
+echo "TESTSRC=${TESTSRC}"
+## Adding common setup Variables for running shell tests.
+. ${TESTSRC}/../../test_env.sh
+
+LD_LIBRARY_PATH=.:${TESTJAVA}/lib/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH
+
+# Test 1) Run with stack size adjusted for TLS
+${TESTNATIVEPATH}/stack-tls -add_tls || exit $?
+# Test 2) Run with no stack size adjustment
+${TESTNATIVEPATH}/stack-tls || exit $?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdConnectTest.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8209790
+ * @summary Checks ability for connecting to debug server (jstack, jmap, jinfo, jsnap)
+ * @requires vm.hasSAandCanAttach
+ * @requires os.family != "windows"
+ * @modules java.base/jdk.internal.misc
+ * @library /test/lib
+ *
+ * @run main/othervm DebugdConnectTest
+ */
+
+import java.io.IOException;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.apps.LingeredApp;
+import jdk.test.lib.process.OutputAnalyzer;
+
+
+public class DebugdConnectTest {
+
+ private static OutputAnalyzer runJHSDB(String command, String id) throws IOException, InterruptedException {
+ JDKToolLauncher jhsdbLauncher = JDKToolLauncher.createUsingTestJDK("jhsdb");
+ jhsdbLauncher.addToolArg(command);
+ jhsdbLauncher.addToolArg("--connect");
+ if (id != null) {
+ jhsdbLauncher.addToolArg(id + "@localhost");
+ } else {
+ jhsdbLauncher.addToolArg("localhost");
+ }
+
+ Process jhsdb = (new ProcessBuilder(jhsdbLauncher.getCommand())).start();
+ OutputAnalyzer out = new OutputAnalyzer(jhsdb);
+
+ jhsdb.waitFor();
+
+ System.out.println(out.getStdout());
+ System.err.println(out.getStderr());
+
+ return out;
+ }
+
+ private static void runJSTACK(String id) throws IOException, InterruptedException {
+ OutputAnalyzer out = runJHSDB("jstack", id);
+
+ out.shouldContain("LingeredApp");
+ out.stderrShouldBeEmpty();
+ out.shouldHaveExitValue(0);
+ }
+
+ private static void runJMAP(String id) throws IOException, InterruptedException {
+ OutputAnalyzer out = runJHSDB("jmap", id);
+
+ out.shouldContain("JVM version is");
+ out.stderrShouldBeEmpty();
+ out.shouldHaveExitValue(0);
+ }
+
+ private static void runJINFO(String id) throws IOException, InterruptedException {
+ OutputAnalyzer out = runJHSDB("jinfo", id);
+
+ out.shouldContain("Java System Properties:");
+ out.stderrShouldBeEmpty();
+ out.shouldHaveExitValue(0);
+ }
+
+ private static void runJSNAP(String id) throws IOException, InterruptedException {
+ OutputAnalyzer out = runJHSDB("jsnap", id);
+
+ out.shouldContain("java.vm.name=");
+ out.stderrShouldBeEmpty();
+ out.shouldHaveExitValue(0);
+ }
+
+ private static void runTests(String id, long debuggeePid) throws IOException, InterruptedException {
+ DebugdUtils debugd = new DebugdUtils(id);
+ debugd.attach(debuggeePid);
+
+ try {
+ runJSTACK(id);
+ runJMAP(id);
+ runJINFO(id);
+ runJSNAP(id);
+ } finally {
+ debugd.detach();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ LingeredApp app = null;
+
+ try {
+ app = LingeredApp.startApp();
+ System.out.println("Started LingeredApp with pid " + app.getPid());
+
+ System.out.println("debugd connection test with server id:");
+ runTests("test", app.getPid());
+
+ System.out.println("debugd connection test without server id:");
+ runTests(null, app.getPid());
+ } finally {
+ LingeredApp.stopApp(app);
+ }
+
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdUtils.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+
+import jdk.test.lib.JDKToolLauncher;
+
+
+public class DebugdUtils {
+
+ private static final String GOLDEN = "Debugger attached";
+
+ private final String id;
+
+ private Process debugdProcess;
+
+ public DebugdUtils(String id) {
+ this.id = id;
+ debugdProcess = null;
+ }
+
+ public void attach(long pid) throws IOException {
+ JDKToolLauncher jhsdbLauncher = JDKToolLauncher.createUsingTestJDK("jhsdb");
+ jhsdbLauncher.addToolArg("debugd");
+ jhsdbLauncher.addToolArg("--pid");
+ jhsdbLauncher.addToolArg(Long.toString(pid));
+ if (id != null) {
+ jhsdbLauncher.addToolArg("--serverid");
+ jhsdbLauncher.addToolArg(id);
+ }
+ debugdProcess = (new ProcessBuilder(jhsdbLauncher.getCommand())).start();
+
+ // Wait until debug server attached
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(debugdProcess.getErrorStream()))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (line.contains(GOLDEN)) {
+ break;
+ }
+ }
+ }
+ }
+
+ public void detach() throws InterruptedException {
+ if (debugdProcess != null) {
+ debugdProcess.destroy();
+ debugdProcess.waitFor();
+ }
+ }
+}
--- a/test/jaxp/javax/xml/jaxp/unittest/transform/StAXSourceTest.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/StAXSourceTest.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
package transform;
+import java.io.ByteArrayInputStream;
import static jaxp.library.JAXPTestUtilities.setSystemProperty;
import java.io.StringReader;
import java.io.StringWriter;
@@ -33,6 +34,8 @@
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
@@ -41,14 +44,16 @@
import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
import org.testng.Assert;
+import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
/*
* @test
- * @bug 8152530 8202426
+ * @bug 8152530 8202426 7148925
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
* @modules java.xml
* @modules java.xml/com.sun.org.apache.xerces.internal.impl
@@ -62,6 +67,100 @@
*/
@Listeners({jaxp.library.JAXPTestPolicy.class})
public class StAXSourceTest {
+ @DataProvider(name = "xml")
+ public Object[][] getData() throws Exception {
+ // from 6715417, all other data were from 7148925
+ String xmlDT = "<?xml version=\"1.0\" encoding=\"utf-8\"?> "
+ + "<!DOCTYPE bookstore [ "
+ + "<!ELEMENT bookstore (book)*> "
+ + "<!ELEMENT book (title,author,price)> "
+ + "<!ATTLIST book genre CDATA #REQUIRED> "
+ + "<!ELEMENT title (#PCDATA)> "
+ + "<!ELEMENT author (#PCDATA)> "
+ + "<!ELEMENT price (#PCDATA)> ]> "
+ + "<bookstore> "
+ + "<book genre=\"fantasy\" > "
+ + "<title>Oberon's Legacy</title> "
+ + "<author>Corets, Eva</author> "
+ + "<price>5.95</price> "
+ + "</book> "
+ + "</bookstore>";
+ return new Object[][]{
+ {"<root/>"},
+ {"<!DOCTYPE root [<!ENTITY et 'Come Home'>]><root et='&et;'/>"},
+ {"<?xml-stylesheet href='show.xsl' type='text/html'?><root/>"},
+ {"<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><root/>"},
+ {"<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?>"
+ + "<!DOCTYPE root><root/>"},
+ {"<?xml version='1.0'?><!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]><root/>"},
+ {"<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?>"
+ + "<!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]><root/>"},
+ {xmlDT},
+ };
+ }
+
+ /**
+ * @bug 7148925 6715417
+ *
+ * Verifies that the transformation is successful with a StreamSource.
+ *
+ * @param xml the xml
+ * @throws Exception if the test fails
+ */
+ @Test(dataProvider = "xml")
+ public void parseStreamSource(String xml) throws Exception {
+ Source source = new StreamSource(new StringReader(xml));
+ transform(source, xml);
+ }
+
+ /**
+ * @bug 7148925 6715417
+ *
+ * Verifies that the transformation is successful with a StAXSource created
+ * out of a StreamReader.
+ *
+ * Note that the patch fixes the Exception, but does not include any improvement
+ * over the current. The result may differ from that of StreamSource.
+ *
+ * @param xml the xml
+ * @throws Exception if the test fails
+ */
+ @Test(dataProvider = "xml")
+ public void parseSSSR(String xml) throws Exception {
+ XMLInputFactory xif = XMLInputFactory.newDefaultFactory();
+ XMLStreamReader sr = xif.createXMLStreamReader(new StringReader(xml));
+ StAXSource source = new StAXSource(sr);
+ transform(source, xml);
+ }
+
+ /**
+ * @bug 7148925 6715417
+ *
+ * Verifies that the transformation is successful with a StAXSource created
+ * out of an EventReader.
+ *
+ * Note that the patch fixes the Exception, but does not include any improvement
+ * over the current. The result may differ from that of StreamSource.
+ *
+ * @param xml the xml
+ * @throws Exception if the test fails
+ */
+ @Test(dataProvider = "xml")
+ public void parseSSER(String xml) throws Exception {
+ XMLInputFactory xif = XMLInputFactory.newDefaultFactory();
+ XMLEventReader er = xif.createXMLEventReader(new StringReader(xml));
+ StAXSource source = new StAXSource(er);
+ transform(source, xml);
+ }
+
+ private void transform(Source source, String sourceXml) throws Exception{
+ StringWriter sw = new StringWriter();
+ Result result = new StreamResult(sw);
+ TransformerFactory tf = TransformerFactory.newInstance();
+ tf.newTransformer().transform(source, result);
+ System.out.printf("%n%s:%nSource: %s%nResult: %s%n", source.getClass().getSimpleName(), sourceXml, sw);
+ }
+
/**
* @bug 8202426
* Verifies that a null Attribute type is handled. NPE was thrown before the fix.
--- a/test/jdk/java/net/HttpURLConnection/HttpResponseCode.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/HttpURLConnection/HttpResponseCode.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,10 +24,14 @@
/**
* @test
* @bug 4473092
+ * @library /test/lib
* @summary Method throws IOException when object should be returned
+ * @run main HttpResponseCode
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true HttpResponseCode
*/
import java.net.*;
import java.io.*;
+import jdk.test.lib.net.URIBuilder;
public class HttpResponseCode implements Runnable {
ServerSocket ss;
@@ -61,14 +65,19 @@
HttpResponseCode() throws Exception {
/* start the server */
- ss = new ServerSocket(0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
(new Thread(this)).start();
/* establish http connection to server */
- String url = "http://localhost:" +
- Integer.toString(ss.getLocalPort()) +
- "/missing.nothtml";
- URLConnection uc = new URL(url).openConnection();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(ss.getLocalPort())
+ .path("/missing.nothtml")
+ .toURL();
+ URLConnection uc = url.openConnection(Proxy.NO_PROXY);
int respCode1 = ((HttpURLConnection)uc).getResponseCode();
((HttpURLConnection)uc).disconnect();
int respCode2 = ((HttpURLConnection)uc).getResponseCode();
--- a/test/jdk/java/net/HttpURLConnection/HttpURLConWithProxy.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/HttpURLConnection/HttpURLConWithProxy.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,10 +24,12 @@
/*
* @test
* @bug 8161016
+ * @library /test/lib
* @summary When proxy is set HttpURLConnection should not use DIRECT connection.
* @run main/othervm HttpURLConWithProxy
*/
import java.io.IOException;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
@@ -38,10 +40,11 @@
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
+import jdk.test.lib.net.URIBuilder;
public class HttpURLConWithProxy {
- public static void main(String... arg) {
+ public static void main(String... arg) throws Exception {
// Remove the default nonProxyHosts to use localhost for testing
System.setProperty("http.nonProxyHosts", "");
@@ -51,11 +54,18 @@
ServerSocket ss;
URL url;
URLConnection con;
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ InetSocketAddress address = new InetSocketAddress(loopback, 0);
// Test1: using Proxy set by System Property:
try {
- ss = new ServerSocket(0);
- url = new URL("http://localhost:" + ss.getLocalPort());
+ ss = new ServerSocket();
+ ss.bind(address);
+ url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(ss.getLocalPort())
+ .toURL();
con = url.openConnection();
con.setConnectTimeout(10 * 1000);
con.connect();
@@ -69,8 +79,13 @@
MyProxySelector myProxySel = new MyProxySelector();
ProxySelector.setDefault(myProxySel);
try {
- ss = new ServerSocket(0);
- url = new URL("http://localhost:" + ss.getLocalPort());
+ ss = new ServerSocket();
+ ss.bind(address);
+ url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(ss.getLocalPort())
+ .toURL();
con = url.openConnection();
con.setConnectTimeout(10 * 1000);
con.connect();
--- a/test/jdk/java/net/Inet6Address/B6558853.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Inet6Address/B6558853.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,11 @@
/*
* @test
+ * @key intermittent
* @bug 6558853
* @summary getHostAddress() on connections using IPv6 link-local addrs should have zone id
+ * This test needs to bind to the wildcard address and as such is succeptible to
+ * fail intermittently because of port reuse issues.
* @library /test/lib
* @build jdk.test.lib.NetworkConfiguration
* jdk.test.lib.Platform
--- a/test/jdk/java/net/InetAddress/CheckJNI.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/InetAddress/CheckJNI.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,7 +74,7 @@
}
static void testSocket(InetAddress ia) throws Exception {
- ServerSocket server = new ServerSocket(0);
+ ServerSocket server = new ServerSocket(0, 0, ia);
Socket s = new Socket(ia, server.getLocalPort());
s.close();
server.close();
--- a/test/jdk/java/net/MulticastSocket/NoLoopbackPackets.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/MulticastSocket/NoLoopbackPackets.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,6 +40,7 @@
return osname.contains("Windows");
}
+ private static final String MESSAGE = "hello world (" + System.nanoTime() + ")";
public static void main(String[] args) throws Exception {
if (isWindows()) {
System.out.println("The test only run on non-Windows OS. Bye.");
@@ -49,6 +50,7 @@
MulticastSocket msock = null;
List<SocketAddress> failedGroups = new ArrayList<SocketAddress>();
Sender sender = null;
+ Thread senderThread = null;
try {
msock = new MulticastSocket();
int port = msock.getLocalPort();
@@ -69,7 +71,8 @@
}
sender = new Sender(groups);
- new Thread(sender).start();
+ senderThread = new Thread(sender);
+ senderThread.start();
// Now try to receive multicast packets. we should not see any of them
// since we disable loopback mode.
@@ -77,20 +80,41 @@
msock.setSoTimeout(5000); // 5 seconds
byte[] buf = new byte[1024];
+ for (int i = 0; i < buf.length; i++) {
+ buf[i] = (byte) 'z';
+ }
DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);
+ byte[] expected = MESSAGE.getBytes();
+ assert expected.length <= buf.length;
for (SocketAddress group : groups) {
+ System.out.println("joining group: " + group);
msock.joinGroup(group, null);
try {
- msock.receive(packet);
+ do {
+ for (int i = 0; i < buf.length; i++) {
+ buf[i] = (byte) 'a';
+ }
+ msock.receive(packet);
+ byte[] data = packet.getData();
+ int len = packet.getLength();
- // it is an error if we receive something
- failedGroups.add(group);
+ if (expected(data, len, expected)) {
+ failedGroups.add(group);
+ break;
+ } else {
+ System.err.println("WARNING: Unexpected packet received from "
+ + group + ": "
+ + len + " bytes");
+ System.err.println("\t as text: " + new String(data, 0, len));
+ }
+ } while (true);
} catch (SocketTimeoutException e) {
// we expect this
+ System.out.println("Received expected exception from " + group + ": " + e);
+ } finally {
+ msock.leaveGroup(group, null);
}
-
- msock.leaveGroup(group, null);
}
} finally {
if (msock != null) try { msock.close(); } catch (Exception e) {}
@@ -98,13 +122,26 @@
sender.stop();
}
}
+ try {
+ if (failedGroups.size() > 0) {
+ System.out.println("We should not receive anything from following groups, but we did:");
+ for (SocketAddress group : failedGroups)
+ System.out.println(group);
+ throw new RuntimeException("test failed.");
+ }
+ } finally {
+ if (senderThread != null) {
+ senderThread.join();
+ }
+ }
+ }
- if (failedGroups.size() > 0) {
- System.out.println("We should not receive anything from following groups, but we did:");
- for (SocketAddress group : failedGroups)
- System.out.println(group);
- throw new RuntimeException("test failed.");
+ static boolean expected(byte[] data, int len, byte[] expected) {
+ if (len != expected.length) return false;
+ for (int i = 0; i < len; i++) {
+ if (data[i] != expected[i]) return false;
}
+ return true;
}
static class Sender implements Runnable {
@@ -116,16 +153,15 @@
}
public void run() {
- byte[] buf = "hello world".getBytes();
+ byte[] buf = MESSAGE.getBytes();
List<DatagramPacket> packets = new ArrayList<DatagramPacket>();
- try {
+ try (MulticastSocket msock = new MulticastSocket()) {
for (SocketAddress group : sendToGroups) {
DatagramPacket packet = new DatagramPacket(buf, buf.length, group);
packets.add(packet);
}
- MulticastSocket msock = new MulticastSocket();
msock.setLoopbackMode(true); // disable loopback mode
while (!stop) {
for (DatagramPacket packet : packets) {
--- a/test/jdk/java/net/Socket/AsyncShutdown.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/AsyncShutdown.java Thu Jul 11 15:40:29 2019 +0530
@@ -29,6 +29,8 @@
*/
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
@@ -123,7 +125,7 @@
{
Socket s1 = null;
Socket s2 = null;
- try (ServerSocket ss = new ServerSocket(0)) {
+ try (ServerSocket ss = createBoundServer()) {
s1 = new Socket();
s1.connect(ss.getLocalSocketAddress());
s2 = ss.accept();
@@ -134,4 +136,12 @@
}
}
+ static ServerSocket createBoundServer() throws IOException {
+ ServerSocket ss = new ServerSocket();
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ InetSocketAddress address = new InetSocketAddress(loopback, 0);
+ ss.bind(address);
+ return ss;
+ }
+
}
--- a/test/jdk/java/net/Socket/B6210227.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/B6210227.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,13 +25,17 @@
* @test
* @bug 6210227
* @library /test/lib
- * @summary REGRESSION: Socket.getLocalAddress() returns address of 0.0.0.0 on outbound TCP
+ * @summary REGRESSION: Socket.getLocalAddress() returns address of 0.0.0.0 on outbound TCP.
+ * This test requires binding to the wildcard address.
* @run main B6210227
* @run main/othervm -Djava.net.preferIPv4Stack=true B6210227
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B6210227
*/
import java.util.*;
import java.net.*;
+import java.util.stream.IntStream;
+import java.util.stream.Collectors;
import jdk.test.lib.net.IPSupport;
public class B6210227 {
@@ -42,15 +46,21 @@
ServerSocket ss = new ServerSocket(0);
int port = ss.getLocalPort();
- byte[] bad = {0,0,0,0};
try {
InetSocketAddress isa = new InetSocketAddress(InetAddress.getLocalHost(), port);
Socket s = new Socket();
s.connect( isa, 1000 );
- InetAddress iaLocal = s.getLocalAddress(); // if this comes back as 0.0. 0.0 this would demonstrate issue
+ InetAddress iaLocal = s.getLocalAddress(); // if this comes back as 0.0.0.0 this would demonstrate issue
String sLocalHostname = iaLocal.getHostName();
- if (Arrays.equals (iaLocal.getAddress(), bad)) {
- throw new RuntimeException ("0.0.0.0 returned");
+ byte[] address = iaLocal.getAddress();
+ if (isWildcard(address)) {
+ if (iaLocal instanceof Inet6Address) {
+ String msg = IntStream.range(0, address.length)
+ .mapToObj(i -> "0").collect(Collectors.joining(":"));
+ throw new RuntimeException(msg + " returned");
+ } else {
+ throw new RuntimeException ("0.0.0.0 returned");
+ }
}
System.out.println("local hostname is "+sLocalHostname );
} catch(Exception e) {
@@ -60,5 +70,11 @@
ss.close();
}
}
+
+ private static boolean isWildcard(byte[] bytes) {
+ for (int i = 0; i < bytes.length ; i++) {
+ if (bytes[i] != 0) return false;
+ }
+ return true;
+ }
}
-
--- a/test/jdk/java/net/Socket/InheritTimeout.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/InheritTimeout.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,10 +56,11 @@
}
InheritTimeout() throws Exception {
- ServerSocket ss = new ServerSocket(0);
+ InetAddress ia = InetAddress.getLocalHost();
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(ia, 0));
ss.setSoTimeout(1000);
- InetAddress ia = InetAddress.getLocalHost();
InetSocketAddress isa =
new InetSocketAddress(ia, ss.getLocalPort());
--- a/test/jdk/java/net/Socket/LinkLocal.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/LinkLocal.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,8 @@
* Create ServerSocket on wildcard address and then
* try to connect Socket to link-local address.
*/
- ServerSocket ss = new ServerSocket(0);
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(ia, 0));
Socket s = new Socket();
try {
@@ -87,7 +88,7 @@
}
DatagramSocket ds1 = new DatagramSocket();
- DatagramSocket ds2 = new DatagramSocket();
+ DatagramSocket ds2 = new DatagramSocket(0, ia);
try {
byte b[] = "Hello".getBytes();
--- a/test/jdk/java/net/Socket/ReadTimeout.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/ReadTimeout.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,7 +47,8 @@
int tout = 1000;
sin = InetAddress.getLocalHost();
- srv = new ServerSocket(port);
+ srv = new ServerSocket();
+ srv.bind(new InetSocketAddress(sin, 0));
port = srv.getLocalPort();
soc = new Socket(sin, port);
soc1 = srv.accept();
--- a/test/jdk/java/net/Socket/ShutdownInput.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/ShutdownInput.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,9 +47,9 @@
public static void main(String args[]) throws Exception {
IPSupport.throwSkippedExceptionIfNonOperational();
- InetAddress iaddr = InetAddress.getLocalHost();
+ InetAddress iaddr = InetAddress.getLoopbackAddress();
- try ( ServerSocket ss = new ServerSocket(0);
+ try (ServerSocket ss = new ServerSocket(0, 0, iaddr);
Socket s1 = new Socket(iaddr, ss.getLocalPort());
Socket s2 = ss.accept() ) {
@@ -57,7 +57,8 @@
}
// check the NIO socket adapter
- try (ServerSocketChannel sc = ServerSocketChannel.open().bind(null);
+ InetSocketAddress socketAddress = new InetSocketAddress(iaddr, 0);
+ try (ServerSocketChannel sc = ServerSocketChannel.open().bind(socketAddress);
SocketChannel s1 = SocketChannel.open(
new InetSocketAddress(iaddr, sc.socket().getLocalPort()));
SocketChannel s2 = sc.accept() ) {
--- a/test/jdk/java/net/Socket/asyncClose/BrokenPipe.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/Socket/asyncClose/BrokenPipe.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -57,7 +57,7 @@
public static void main(String[] args) throws Exception {
IPSupport.throwSkippedExceptionIfNonOperational();
- ServerSocket ss = new ServerSocket(0);
+ ServerSocket ss = new ServerSocket(0, 0, InetAddress.getLocalHost());
Socket client = new Socket(InetAddress.getLocalHost(),
ss.getLocalPort());
Socket server = ss.accept();
--- a/test/jdk/java/net/SocketInputStream/SocketTimeout.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/SocketInputStream/SocketTimeout.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,8 @@
ServerSocket srv = null;
int port = 0;
- srv = new ServerSocket(0);
+ srv = new ServerSocket();
+ srv.bind(new InetSocketAddress(sin, 0));
port = srv.getLocalPort();
soc = new Socket(sin, port);
soc1 = srv.accept();
--- a/test/jdk/java/net/URLConnection/ChunkedEncoding.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/URLConnection/ChunkedEncoding.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,9 +22,10 @@
*/
/**
- *
+ * @test
* @bug 4333920
* @bug 4394548
+ * @library /test/lib
* @summary Check that chunked encoding response doesn't cause
* getInputStream to block until last chunk arrives.
* Also regression against NPE in ChunkedInputStream.
@@ -32,6 +33,7 @@
import java.net.*;
import java.io.*;
import java.util.Random;
+import jdk.test.lib.net.URIBuilder;
public class ChunkedEncoding implements Runnable {
@@ -115,6 +117,11 @@
out.print("\r\n");
out.flush();
+ /*
+ * Sleep added to avoid connection reset
+ * on the client side
+ */
+ Thread.sleep(1000);
s.close();
ss.close();
} catch (Exception e) {
@@ -125,15 +132,17 @@
ChunkedEncoding() throws Exception {
/* start the server */
- ss = new ServerSocket(0);
+ ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0));
(new Thread(this)).start();
-
/* establish http connection to server */
- String uri = "http://localhost:" +
- Integer.toString(ss.getLocalPort()) +
- "/foo";
- URL url = new URL(uri);
- HttpURLConnection http = (HttpURLConnection)url.openConnection();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(ss.getLocalPort())
+ .path("/foo")
+ .toURL();
+ HttpURLConnection http = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
/*
* Server should only send headers if TE:trailers
--- a/test/jdk/java/net/URLConnection/GetResponseCode.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/URLConnection/GetResponseCode.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,14 +22,17 @@
*/
/**
- *
+ * @test
* @bug 4191815
+ * @library /test/lib
* @summary Check that getResponseCode doesn't throw exception if http
* respone code is >= 400.
*/
import java.net.*;
import java.io.*;
+import jdk.test.lib.net.URIBuilder;
+
public class GetResponseCode implements Runnable {
ServerSocket ss;
@@ -56,6 +59,11 @@
out.print("</HTML>");
out.flush();
+ /*
+ * Sleep added to avoid connection reset
+ * on the client side
+ */
+ Thread.sleep(1000);
s.close();
ss.close();
} catch (Exception e) {
@@ -66,16 +74,19 @@
GetResponseCode() throws Exception {
/* start the server */
- ss = new ServerSocket(0);
+ ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0));
(new Thread(this)).start();
/* establish http connection to server */
- String uri = "http://localhost:" +
- Integer.toString(ss.getLocalPort()) +
- "/missing.nothtml";
- URL url = new URL(uri);
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(ss.getLocalPort())
+ .path("/missing.nohtml")
+ .toURL();
- HttpURLConnection http = (HttpURLConnection)url.openConnection();
+ HttpURLConnection http = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
int respCode = http.getResponseCode();
--- a/test/jdk/java/net/URLConnection/SetIfModifiedSince.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/URLConnection/SetIfModifiedSince.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
/* @test
* @bug 4397096
+ * @library /test/lib
* @run main/othervm SetIfModifiedSince
* @summary setIfModifiedSince() of HttpURLConnection sets invalid date of default locale
*/
@@ -31,7 +32,10 @@
import java.io.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
+
public class SetIfModifiedSince {
+ static volatile boolean successfulHeaderCheck = false;
static class XServer extends Thread {
ServerSocket srv;
@@ -66,28 +70,42 @@
break;
}
}
+ successfulHeaderCheck = true;
s.close ();
srv.close (); // or else the HTTPURLConnection will retry
} catch (IOException e) {}
}
}
- public static void main (String[] args) {
+ public static void main(String[] args) throws Exception {
Locale reservedLocale = Locale.getDefault();
try {
Locale.setDefault(Locale.JAPAN);
- ServerSocket serversocket = new ServerSocket (0);
+ ServerSocket serversocket = new ServerSocket();
+ serversocket.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0));
int port = serversocket.getLocalPort ();
XServer server = new XServer (serversocket);
server.start ();
Thread.sleep (2000);
- URL url = new URL ("http://localhost:"+port+"/index.html");
- URLConnection urlc = url.openConnection ();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .path("/index.html")
+ .toURLUnchecked();
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
urlc.setIfModifiedSince (10000000);
InputStream is = urlc.getInputStream ();
- int i=0, c;
- Thread.sleep (5000);
- } catch (Exception e) {
+ int i = 0, c;
+ Thread.sleep(5000);
+ if (!successfulHeaderCheck) {
+ throw new RuntimeException("Header check was unsuccessful");
+ }
+ } catch (SocketException ce) {
+ if (!successfulHeaderCheck) {
+ throw ce;
+ }
+ System.out.println("ConnectionException expected on successful check of If-modified-since header");
} finally {
// restore the reserved locale
Locale.setDefault(reservedLocale);
--- a/test/jdk/java/net/ipv6tests/B6521014.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/java/net/ipv6tests/B6521014.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,7 +71,7 @@
}
static void test1(Inet6Address sin) throws Exception {
- try (ServerSocket ssock = new ServerSocket(0);
+ try (ServerSocket ssock = createBoundServer(sin);
Socket sock = new Socket()) {
int port = ssock.getLocalPort();
sock.connect(new InetSocketAddress(sin, port), 100);
@@ -82,7 +82,7 @@
}
static void test2(Inet6Address sin) throws Exception {
- try (ServerSocket ssock = new ServerSocket(0);
+ try (ServerSocket ssock = createBoundServer(sin);
Socket sock = new Socket()) {
int port = ssock.getLocalPort();
ssock.setSoTimeout(100);
@@ -94,6 +94,13 @@
}
}
+ static ServerSocket createBoundServer(Inet6Address sin) throws IOException {
+ ServerSocket ss = new ServerSocket();
+ InetSocketAddress address = new InetSocketAddress(sin, 0);
+ ss.bind(address);
+ return ss;
+ }
+
public static void main(String[] args) throws Exception {
Optional<Inet6Address> oaddr = getLocalAddr();
if (!oaddr.isPresent()) {
--- a/test/jdk/jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -264,7 +264,6 @@
Recording recording = new Recording();
- recording.enable(EventNames.BiasedLockRevocation);
recording.enable(EventNames.BiasedLockClassRevocation);
recording.enable(EventNames.ExecuteVMOperation);
recording.start();
@@ -274,8 +273,7 @@
recording.stop();
List<RecordedEvent> events = Events.fromRecording(recording);
- // Determine which safepoints included single and bulk revocation VM operations
- Set<Long> vmOperationsSingle = new HashSet<>();
+ // Determine which safepoints included bulk revocation VM operations
Set<Long> vmOperationsBulk = new HashSet<>();
for (RecordedEvent event : events) {
@@ -283,27 +281,17 @@
String operation = event.getValue("operation");
Long safepointId = event.getValue("safepointId");
- if (operation.equals("RevokeBias")) {
- vmOperationsSingle.add(safepointId);
- } else if (operation.equals("BulkRevokeBias")) {
+ if (operation.equals("BulkRevokeBias")) {
vmOperationsBulk.add(safepointId);
}
}
}
- int revokeCount = 0;
int bulkRevokeCount = 0;
// Match all revoke events to a corresponding VMOperation event
for (RecordedEvent event : events) {
- if (event.getEventType().getName().equals(EventNames.BiasedLockRevocation)) {
- Long safepointId = event.getValue("safepointId");
- String lockClass = ((RecordedClass)event.getValue("lockClass")).getName();
- if (lockClass.equals(MyLock.class.getName())) {
- Asserts.assertTrue(vmOperationsSingle.contains(safepointId));
- revokeCount++;
- }
- } else if (event.getEventType().getName().equals(EventNames.BiasedLockClassRevocation)) {
+ if (event.getEventType().getName().equals(EventNames.BiasedLockClassRevocation)) {
Long safepointId = event.getValue("safepointId");
String lockClass = ((RecordedClass)event.getValue("revokedClass")).getName();
if (lockClass.toString().equals(MyLock.class.getName())) {
@@ -314,6 +302,5 @@
}
Asserts.assertGT(bulkRevokeCount, 0);
- Asserts.assertGT(revokeCount, bulkRevokeCount);
}
}
--- a/test/jdk/sun/net/www/protocol/http/NoCache.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/net/www/protocol/http/NoCache.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,11 @@
* @test
* @bug 7133367
* @modules jdk.httpserver
+ * @library /test/lib
* @summary ResponseCache.put should not be called when setUseCaches(false)
*/
+
import java.net.*;
import java.io.IOException;
import java.util.List;
@@ -35,6 +37,7 @@
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
+import jdk.test.lib.net.URIBuilder;
public class NoCache
{
@@ -43,9 +46,13 @@
HttpServer server = startHttpServer();
try {
- URL url = new URL("http://" + InetAddress.getLocalHost().getHostAddress()
- + ":" + server.getAddress().getPort() + "/NoCache/");
- URLConnection uc = url.openConnection();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .host(server.getAddress().getAddress())
+ .port(server.getAddress().getPort())
+ .path("/NoCache/")
+ .toURLUnchecked();
+ URLConnection uc = url.openConnection(Proxy.NO_PROXY);
uc.setUseCaches(false);
uc.getInputStream().close();
} finally {
@@ -70,7 +77,7 @@
// HTTP Server
static HttpServer startHttpServer() throws IOException {
- HttpServer httpServer = HttpServer.create(new InetSocketAddress(0), 0);
+ HttpServer httpServer = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 0), 0);
httpServer.createContext("/NoCache/", new SimpleHandler());
httpServer.start();
return httpServer;
--- a/test/jdk/sun/net/www/protocol/https/HttpsURLConnection/HttpsSocketFacTest.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/net/www/protocol/https/HttpsURLConnection/HttpsSocketFacTest.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,6 +26,7 @@
* @bug 6614957
* @summary HttpsURLConnection not using the set SSLSocketFactory for creating all its Sockets
* @modules jdk.httpserver
+ * @library /test/lib
* @run main/othervm HttpsSocketFacTest
*
* SunJSSE does not support dynamic system properties, no way to re-use
@@ -38,11 +39,12 @@
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
-import java.security.NoSuchAlgorithmException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URL;
+import java.net.Proxy;
+import java.security.NoSuchAlgorithmException;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.IOException;
@@ -50,6 +52,7 @@
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpsConfigurator;
+import jdk.test.lib.net.URIBuilder;
/*
* This class tests that the HTTPS protocol handler is using its socket factory for
@@ -103,10 +106,15 @@
void doClient() throws IOException {
InetSocketAddress address = httpsServer.getAddress();
- URL url = new URL("https://localhost:" + address.getPort() + "/test6614957/");
+ URL url = URIBuilder.newBuilder()
+ .scheme("https")
+ .loopback()
+ .port(address.getPort())
+ .path("/test6614957/")
+ .toURLUnchecked();
System.out.println("trying to connect to " + url + "...");
- HttpsURLConnection uc = (HttpsURLConnection) url.openConnection();
+ HttpsURLConnection uc = (HttpsURLConnection) url.openConnection(Proxy.NO_PROXY);
SimpleSSLSocketFactory sssf = new SimpleSSLSocketFactory();
uc.setSSLSocketFactory(sssf);
uc.setHostnameVerifier(new AllHostnameVerifier());
@@ -129,7 +137,8 @@
* Https Server
*/
public void startHttpsServer() throws IOException, NoSuchAlgorithmException {
- httpsServer = com.sun.net.httpserver.HttpsServer.create(new InetSocketAddress(0), 0);
+ httpsServer = com.sun.net.httpserver.HttpsServer
+ .create(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0);
httpsServer.createContext("/test6614957/", new MyHandler());
httpsServer.setHttpsConfigurator(new HttpsConfigurator(SSLContext.getDefault()));
httpsServer.start();
--- a/test/jdk/sun/security/tools/keytool/DefaultSignatureAlgorithm.java Tue Jul 09 17:05:20 2019 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * 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 8138766
- * @key intermittent
- * @summary New default -sigalg for keytool
- * @modules java.base/sun.security.tools.keytool
- * @modules jdk.crypto.ec
- * @run main/othervm DefaultSignatureAlgorithm RSA 1024 SHA256withRSA
- * @run main/othervm DefaultSignatureAlgorithm RSA 3072 SHA256withRSA
- * @run main/othervm DefaultSignatureAlgorithm RSA 3073 SHA384withRSA
- * @run main/othervm DefaultSignatureAlgorithm DSA 1024 SHA256withDSA
- * @run main/othervm/timeout=700 DefaultSignatureAlgorithm DSA 3072
- * SHA256withDSA
- * @run main/othervm DefaultSignatureAlgorithm EC 192 SHA256withECDSA
- * @run main/othervm DefaultSignatureAlgorithm EC 384 SHA384withECDSA
- * @run main/othervm DefaultSignatureAlgorithm EC 571 SHA512withECDSA
- * @run main/othervm DefaultSignatureAlgorithm EC 571 SHA256withECDSA
- * SHA256withECDSA
- */
-
-import sun.security.tools.keytool.Main;
-
-import java.io.File;
-import java.security.KeyStore;
-import java.security.cert.X509Certificate;
-
-public class DefaultSignatureAlgorithm {
-
- public static void main(String[] args) throws Exception {
- if(args == null || args.length < 3) {
- throw new RuntimeException("Invalid arguments provided.");
- }
- String sigAlg = (args.length == 4) ? args[3] : null;
- run(args[0], Integer.valueOf(args[1]), args[2], sigAlg);
- }
-
- private static void run(String keyAlg, int keySize,
- String expectedSigAlg, String sigAlg) throws Exception {
- String alias = keyAlg + keySize + System.currentTimeMillis();
- String cmd = "-keystore ks -storepass changeit" +
- " -keypass changeit -alias " + alias +
- " -keyalg " + keyAlg + " -keysize " + keySize +
- " -genkeypair -dname CN=" + alias + " -debug";
- if (sigAlg != null) {
- cmd += " -sigalg " + sigAlg;
- }
- Main.main(cmd.split(" "));
-
- KeyStore ks = KeyStore.getInstance(
- new File("ks"), "changeit".toCharArray());
- X509Certificate cert = (X509Certificate)ks.getCertificate(alias);
- String actualSigAlg = cert.getSigAlgName();
- if (!actualSigAlg.equals(expectedSigAlg)) {
- throw new Exception("Failure at " + alias + ": expected "
- + expectedSigAlg + ", actually " + actualSigAlg);
- }
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/fakegen/DefaultSignatureAlgorithm.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8138766 8227059
+ * @summary New default -sigalg for keytool
+ * @library /test/lib
+ * @build java.base/sun.security.rsa.RSAKeyPairGenerator
+ * java.base/sun.security.provider.DSAKeyPairGenerator
+ * jdk.crypto.ec/sun.security.ec.ECKeyPairGenerator
+ * @run main DefaultSignatureAlgorithm
+ * @modules jdk.crypto.ec
+ */
+
+import jdk.test.lib.Asserts;
+import jdk.test.lib.SecurityTools;
+import jdk.test.lib.process.OutputAnalyzer;
+
+import java.io.File;
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+
+public class DefaultSignatureAlgorithm {
+
+ static int pos = 0;
+
+ public static void main(String[] args) throws Exception {
+ check("RSA", 1024, null, "SHA256withRSA");
+ check("RSA", 3072, null, "SHA256withRSA");
+ check("RSA", 3073, null, "SHA384withRSA");
+ check("RSA", 7680, null, "SHA384withRSA");
+ check("RSA", 7681, null, "SHA512withRSA");
+
+ check("DSA", 1024, null, "SHA256withDSA");
+ check("DSA", 3072, null, "SHA256withDSA");
+
+ check("EC", 192, null, "SHA256withECDSA");
+ check("EC", 384, null, "SHA384withECDSA");
+ check("EC", 571, null, "SHA512withECDSA");
+
+ check("EC", 571, "SHA256withECDSA", "SHA256withECDSA");
+ }
+
+ private static void check(String keyAlg, int keySize,
+ String requestedSigAlg, String expectedSigAlg)
+ throws Exception {
+ String alias = keyAlg + keySize + "-" + pos++;
+ String sigAlgParam = requestedSigAlg == null
+ ? ""
+ : (" -sigalg " + requestedSigAlg);
+ genkeypair(alias,
+ "-keyalg " + keyAlg + " -keysize " + keySize + sigAlgParam)
+ .shouldHaveExitValue(0);
+
+ KeyStore ks = KeyStore.getInstance(
+ new File("ks"), "changeit".toCharArray());
+ X509Certificate cert = (X509Certificate)ks.getCertificate(alias);
+ Asserts.assertEQ(cert.getPublicKey().getAlgorithm(), keyAlg);
+ Asserts.assertEQ(cert.getSigAlgName(), expectedSigAlg);
+ }
+
+ static OutputAnalyzer genkeypair(String alias, String options)
+ throws Exception {
+ String patchArg = "-J--patch-module=java.base="
+ + System.getProperty("test.classes")
+ + File.separator + "patches" + File.separator + "java.base"
+ + " -J--patch-module=jdk.crypto.ec="
+ + System.getProperty("test.classes")
+ + File.separator + "patches" + File.separator + "jdk.crypto.ec";;
+ return kt(patchArg + " -genkeypair -alias " + alias
+ + " -dname CN=" + alias + " " + options);
+ }
+
+ static OutputAnalyzer kt(String cmd)
+ throws Exception {
+ return SecurityTools.keytool("-storepass changeit -keypass changeit "
+ + "-keystore ks " + cmd);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/fakegen/PSS.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8215694 8222987 8225257
+ * @summary keytool cannot generate RSASSA-PSS certificates
+ * @library /test/lib
+ * @build java.base/sun.security.rsa.RSAKeyPairGenerator
+ * @modules java.base/sun.security.util
+ * java.base/sun.security.x509
+ * @requires os.family != "solaris"
+ * @run main PSS
+ */
+
+// This test is excluded from Solaris because the 8192-bit RSA key pair
+// generator is extremely slow there.
+
+import jdk.test.lib.Asserts;
+import jdk.test.lib.SecurityTools;
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.security.DerUtils;
+import sun.security.util.ObjectIdentifier;
+import sun.security.x509.AlgorithmId;
+
+import java.io.File;
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+
+public class PSS {
+
+ public static void main(String[] args) throws Exception {
+
+ genkeypair("p", "-keyalg RSASSA-PSS -sigalg RSASSA-PSS")
+ .shouldHaveExitValue(0);
+
+ genkeypair("a", "-keyalg RSA -sigalg RSASSA-PSS -keysize 2048")
+ .shouldHaveExitValue(0);
+
+ genkeypair("b", "-keyalg RSA -sigalg RSASSA-PSS -keysize 4096")
+ .shouldHaveExitValue(0);
+
+ genkeypair("c", "-keyalg RSA -sigalg RSASSA-PSS -keysize 8192")
+ .shouldHaveExitValue(0);
+
+ KeyStore ks = KeyStore.getInstance(
+ new File("ks"), "changeit".toCharArray());
+
+ check((X509Certificate)ks.getCertificate("p"), "RSASSA-PSS",
+ AlgorithmId.SHA256_oid);
+
+ check((X509Certificate)ks.getCertificate("a"), "RSA",
+ AlgorithmId.SHA256_oid);
+
+ check((X509Certificate)ks.getCertificate("b"), "RSA",
+ AlgorithmId.SHA384_oid);
+
+ check((X509Certificate)ks.getCertificate("c"), "RSA",
+ AlgorithmId.SHA512_oid);
+
+ // More commands
+ kt("-certreq -alias p -sigalg RSASSA-PSS -file p.req")
+ .shouldHaveExitValue(0);
+
+ kt("-gencert -alias a -sigalg RSASSA-PSS -infile p.req -outfile p.cert")
+ .shouldHaveExitValue(0);
+
+ kt("-importcert -alias p -file p.cert")
+ .shouldHaveExitValue(0);
+
+ kt("-selfcert -alias p -sigalg RSASSA-PSS")
+ .shouldHaveExitValue(0);
+ }
+
+ static OutputAnalyzer genkeypair(String alias, String options)
+ throws Exception {
+ String patchArg = "-J--patch-module=java.base=" + System.getProperty("test.classes")
+ + File.separator + "patches" + File.separator + "java.base";
+ return kt(patchArg + " -genkeypair -alias " + alias
+ + " -dname CN=" + alias + " " + options);
+ }
+
+ static OutputAnalyzer kt(String cmd)
+ throws Exception {
+ return SecurityTools.keytool("-storepass changeit -keypass changeit "
+ + "-keystore ks " + cmd);
+ }
+
+ static void check(X509Certificate cert, String expectedKeyAlg,
+ ObjectIdentifier expectedMdAlg) throws Exception {
+ Asserts.assertEQ(cert.getPublicKey().getAlgorithm(), expectedKeyAlg);
+ Asserts.assertEQ(cert.getSigAlgName(), "RSASSA-PSS");
+ DerUtils.checkAlg(cert.getSigAlgParams(), "000", expectedMdAlg);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/fakegen/java.base/sun/security/provider/DSAKeyPairGenerator.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import java.math.BigInteger;
+
+import java.security.*;
+import java.security.SecureRandom;
+import java.security.spec.AlgorithmParameterSpec;
+
+/**
+ * A fake DSA key pair generator
+ */
+class DSAKeyPairGenerator extends KeyPairGenerator {
+
+ private int plen;
+
+ DSAKeyPairGenerator(int defaultKeySize) {
+ super("DSA");
+ this.plen = defaultKeySize;
+ }
+
+ public void initialize(int modlen, SecureRandom random) {
+ this.plen = modlen;
+ }
+
+ public void initialize(AlgorithmParameterSpec params, SecureRandom random) {
+ throw new UnsupportedOperationException();
+ }
+
+ public KeyPair generateKeyPair() {
+ BigInteger p, q, g, x, y;
+ switch (plen) {
+ case 1024:
+ p = new BigInteger("178011905478542266528237562450159990145232"
+ + "156369120674273274450314442865788737020770612695252"
+ + "123463079567156784778466449970650770920727857050009"
+ + "668388144034129745221171818506047231150039301079959"
+ + "358067395348717066319802262019714966524135060945913"
+ + "707594956514672855690606794135837542707371727429551"
+ + "343320695239");
+ q = new BigInteger("864205495604807476120572616017955259175325"
+ + "408501");
+ g = new BigInteger("174068207532402095185811980123523436538604"
+ + "490794561350978495831040599953488455823147851597408"
+ + "940950725307797094915759492368300574252438761037084"
+ + "473467180148876118103083043754985190983472601550494"
+ + "691329488083395492313850000361646482644608492304078"
+ + "721818959999056496097769368017749273708962006689187"
+ + "956744210730");
+ x = new BigInteger("442684721233431748836258763370873041965448"
+ + "305045");
+ y = new BigInteger("123777377875361061959303516913138943002334"
+ + "907914087825062123737715425120688699041350157178201"
+ + "400875613890444051801751930684745642628053940339973"
+ + "838660880918443284038995141330502246221730915504106"
+ + "313025753680709037893119973285385498869618080832350"
+ + "844717549458284541384384444940685082987448444197127"
+ + "109727215326");
+ break;
+ case 3072:
+ p = new BigInteger("532424770282957507167558442446475365039221"
+ + "865310725601984444684810811113744209961033785957055"
+ + "545569814329215072178264469737927701168579964248618"
+ + "212671015750272795670312875451455848633455356647610"
+ + "802537682630581977793580392148938495801039643027210"
+ + "168055234243089546290868853109011307872303192870862"
+ + "928522910714047973751079687063489704904165319118754"
+ + "414656318529199596549052269402875554159175957058778"
+ + "440558421673575502884909440510567191072050738584727"
+ + "120524174557883883057055053123583287619621138916493"
+ + "103747092870334536468061850120264153241617645557971"
+ + "369719361654590867807897284715299844320510777830158"
+ + "726099043158186232574541934847234927190558272654504"
+ + "899757279197741136733127726856995584055651857157703"
+ + "730144527174175430693903863066052387871964460507889"
+ + "647358151911550149297202134918108185581732063173116"
+ + "923323722454275514471399056679497166381315291238166"
+ + "678637058042047687405023560967657729197010282296512"
+ + "1019243318222397");
+ q = new BigInteger("890750162030504407723769200757822201430799"
+ + "34855896740921457815099167207156753");
+ g = new BigInteger("151817606774376623890824510431247991418389"
+ + "715779225250508738780526725946562383344295250350988"
+ + "771843988677909140611473778208677098146023000408394"
+ + "159085130929460916510001933636711147155614261913281"
+ + "024881629605746742555704817858764668833915862917006"
+ + "598838541275997577579609978297421111961935816027196"
+ + "483840098753346970227821715342000582711792748060856"
+ + "726896896804543780217869880654497603605897208724113"
+ + "159746510357451233393865294043543249227656881945445"
+ + "911394836487973565655780621125471620102365417701222"
+ + "942700788591992318925980959657031578942777920589286"
+ + "616050851348109471636081284309144953091734152913609"
+ + "446411782660994503265873790796828974300693496175976"
+ + "687169380996928285288177682058646187108156643041984"
+ + "849723272840833108573298006600021948389582796433112"
+ + "947515654733901137745000270350091408182905439114222"
+ + "789179830877253611946986888461931792357280552721443"
+ + "254779196196933589018709692301251250169609249601817"
+ + "4795480503442737");
+ x = new BigInteger("837184725379267020693579006510066460977336"
+ + "11851797067505263114214549968402803");
+ y = new BigInteger("395340495486576955293430186860596538887519"
+ + "532234445217156133155957480616804094258448364164620"
+ + "019669119585215430588435624960233328621409901309332"
+ + "192899527076171337665680476899693664056285881110265"
+ + "747619109873269836751712303602309960796986216520795"
+ + "801714761851172570535758859846766099312622783018124"
+ + "479033035974495130498276693342256396509951099944860"
+ + "886247767918456849069941054372775951688384599525157"
+ + "707186634084399395289878437457318095050730531728857"
+ + "772445883395712924633196197942869159234956079072812"
+ + "033713932103618702222793066673087288841096282175640"
+ + "243353943285718935517693389945339235110435667386410"
+ + "827568246083609394541667076709869892137539964277111"
+ + "881671381034966060604088870102183420000265271778711"
+ + "380501229707440889595235145225482336904915838699846"
+ + "941323450568220944649213026904670943083185766542427"
+ + "196471392765688014947830444837953042683779059773143"
+ + "877079141940001705246446188097009313372159366032655"
+ + "5436444354063312");
+ break;
+ default:
+ throw new AssertionError("Unknown keySize " + plen);
+ }
+
+ try {
+ return new KeyPair(new DSAPublicKeyImpl(y, p, q, g),
+ new DSAPrivateKey(x, p, q, g));
+ } catch (InvalidKeyException e) {
+ throw new ProviderException(e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/fakegen/java.base/sun/security/rsa/RSAKeyPairGenerator.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,449 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.rsa;
+
+import java.math.BigInteger;
+
+import java.security.*;
+import java.security.spec.AlgorithmParameterSpec;
+import java.security.spec.RSAKeyGenParameterSpec;
+
+import sun.security.x509.AlgorithmId;
+import static sun.security.rsa.RSAUtil.KeyType;
+
+/**
+ * A fake RSA keypair generation.
+ */
+public abstract class RSAKeyPairGenerator extends KeyPairGeneratorSpi {
+
+ // public exponent to use
+ private BigInteger publicExponent;
+
+ // size of the key to generate, >= RSAKeyFactory.MIN_MODLEN
+ private int keySize;
+
+ private final KeyType type;
+ private AlgorithmId rsaId;
+
+ RSAKeyPairGenerator(KeyType type, int defKeySize) {
+ this.type = type;
+ // initialize to default in case the app does not call initialize()
+ initialize(defKeySize, null);
+ }
+
+ // initialize the generator. See JCA doc
+ public void initialize(int keySize, SecureRandom random) {
+ try {
+ initialize(new RSAKeyGenParameterSpec(keySize,
+ RSAKeyGenParameterSpec.F4), random);
+ } catch (InvalidAlgorithmParameterException iape) {
+ throw new InvalidParameterException(iape.getMessage());
+ }
+ }
+
+ // second initialize method. See JCA doc.
+ public void initialize(AlgorithmParameterSpec params, SecureRandom random)
+ throws InvalidAlgorithmParameterException {
+ if (params instanceof RSAKeyGenParameterSpec == false) {
+ throw new InvalidAlgorithmParameterException
+ ("Params must be instance of RSAKeyGenParameterSpec");
+ }
+
+ RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec)params;
+ int tmpKeySize = rsaSpec.getKeysize();
+ BigInteger tmpPublicExponent = rsaSpec.getPublicExponent();
+ AlgorithmParameterSpec tmpParams = rsaSpec.getKeyParams();
+
+ if (tmpPublicExponent == null) {
+ tmpPublicExponent = RSAKeyGenParameterSpec.F4;
+ } else {
+ if (tmpPublicExponent.compareTo(RSAKeyGenParameterSpec.F0) < 0) {
+ throw new InvalidAlgorithmParameterException
+ ("Public exponent must be 3 or larger");
+ }
+ if (tmpPublicExponent.bitLength() > tmpKeySize) {
+ throw new InvalidAlgorithmParameterException
+ ("Public exponent must be smaller than key size");
+ }
+ }
+
+ // do not allow unreasonably large key sizes, probably user error
+ try {
+ RSAKeyFactory.checkKeyLengths(tmpKeySize, tmpPublicExponent,
+ 512, 64 * 1024);
+ } catch (InvalidKeyException e) {
+ throw new InvalidAlgorithmParameterException(
+ "Invalid key sizes", e);
+ }
+
+ try {
+ this.rsaId = RSAUtil.createAlgorithmId(type, tmpParams);
+ } catch (ProviderException e) {
+ throw new InvalidAlgorithmParameterException(
+ "Invalid key parameters", e);
+ }
+
+ this.keySize = tmpKeySize;
+ this.publicExponent = tmpPublicExponent;
+ }
+
+ // generate the keypair. See JCA doc
+ public KeyPair generateKeyPair() {
+
+ // accommodate odd key sizes in case anybody wants to use them
+ BigInteger e = publicExponent;
+ if (!e.equals(RSAKeyGenParameterSpec.F4)) {
+ throw new AssertionError("Only support F4 now");
+ }
+ BigInteger p, q, n;
+
+ // Pre-calculated p and q for e == RSAKeyGenParameterSpec.F4
+ switch (keySize) {
+ case 1024:
+ p = new BigInteger("1220491537800192366196661816910427"
+ + "2375185130493819649338056226264568132442590"
+ + "2306195110391300298681932797393339089272174"
+ + "24490645345596103420476757417659909");
+
+ q = new BigInteger("8480533592205316739308384508307319"
+ + "3310632635895778398980504245932789486455154"
+ + "4265220956952343855842030266079089174423047"
+ + "7382175514060777025691485728713063");
+ break;
+ case 2048:
+ p = new BigInteger("1600840041787354447543653385760927"
+ + "2642568308955833364523274045522752644800599"
+ + "8669541532595690224703734511692014533312515"
+ + "1867029838883431415692353449578487671384896"
+ + "6611685764860941767986520897595108597563035"
+ + "4023785639802607792535812062420427283857665"
+ + "9883578590844700707106157871508280052743363"
+ + "65749456332400771");
+ q = new BigInteger("1303880717101677622201474394769850"
+ + "7257196073324816341282215626935164930077468"
+ + "5999131251387556761167658937349436378464220"
+ + "4831804147777472146628148336776639855791417"
+ + "3849903041999943901924899580268176393595653"
+ + "7357080543898614581363167420619163047562600"
+ + "6155574020606891195960345238780709194499010"
+ + "43652862954645301");
+ break;
+ case 3072:
+ p = new BigInteger("2403380417344527161525447148950543"
+ + "9379802436047502603774623852967909282895900"
+ + "7474251859703715384817150107392592636129366"
+ + "5680725148417789414447073716354703692160825"
+ + "9910929198523923851672957013786423746474670"
+ + "5285365870313877239114930859096040034848729"
+ + "0251735848703378313724697081522892607625120"
+ + "0765531003751468146539682665307123591367928"
+ + "1883284784295069877414057796300484015307336"
+ + "5167008365209621810307777651197826810474895"
+ + "858836606799546054179898997210174885200767");
+ q = new BigInteger("2046511893459993309772203642844931"
+ + "1853027469856467052942666265372903000702193"
+ + "7794121141028918655144044411085405243565188"
+ + "8318027937964509940322691121105328104450287"
+ + "0400405975394764523022670537180050051646095"
+ + "3320242109876620452477757629185501504625999"
+ + "8487187901577781067325277853462587849063313"
+ + "5364789330253471096755661110557598411108366"
+ + "1566266965711522070909440716658568303529454"
+ + "8075296935907088988560548322049196321207173"
+ + "136436923455192617031129191723631954025427");
+ break;
+ case 3073:
+ p = new BigInteger("358024230418365680745725628188289"
+ + "996969857993064124357766607077169315932503"
+ + "907030633492082868150575329278637502167157"
+ + "345572819552678004302525872656665704012432"
+ + "644868036964802792468216554458209893873320"
+ + "297608885231998895441396822219845215463819"
+ + "216163684222596923153702349718019538798623"
+ + "793830598445085650304217449539016339429747"
+ + "385490484982419227549804698120223647408926"
+ + "021549912791440569127641517442362359166673"
+ + "430151753277549861070074076802118983202554"
+ + "7683523973");
+ q = new BigInteger("169752169194244078720180277210205"
+ + "255207796420396114596943944148158798629671"
+ + "789863988428383183103705641694331073747120"
+ + "522505020908219489265190380712941311249155"
+ + "156834674079165492105570443486536740756291"
+ + "314279877766807786397193023304245520017295"
+ + "969248707516367324340822062886043618371887"
+ + "320492710434958863952407959935025922006108"
+ + "282752473898685457767312430894004833959025"
+ + "415996648289919841900071076314309778495245"
+ + "505026665971431792707247787031811654193145"
+ + "1044952887");
+ break;
+ case 4096:
+ p = new BigInteger("2985635754414679487171962796211911"
+ + "1563710734938215274736352092606404045130913"
+ + "2477365484439939846705721840432140066578525"
+ + "0762327458086280430118434094733412377416194"
+ + "8736124795243564050755767519346747209606612"
+ + "5835460937739428885308798309679495432910469"
+ + "0294757621321446003970767164933974474924664"
+ + "1513767092845098947552598109657871041666676"
+ + "2945573325433283821164032766425479703026349"
+ + "9433641551427112483593214628620450175257586"
+ + "4350119143877183562692754400346175237007314"
+ + "7121580349193179272551363894896336921717843"
+ + "3734726842184251708799134654802475890197293"
+ + "9094908310578403843742664173424031260840446"
+ + "591633359364559754200663");
+ q = new BigInteger("2279248439141087793789384816271625"
+ + "1304008816573950275844533962181244003563987"
+ + "6638461665174020058827698592331066726709304"
+ + "9231319346136709972639455506783245161859951"
+ + "6191872757335765533547033659834427437142631"
+ + "3801232751161907082392011429712327250253948"
+ + "6012497852063361866175243227579880020724881"
+ + "9393797645220239009219998518884396282407710"
+ + "7199202450846395844337846503427790307364624"
+ + "5124871273035872938616425951596065309519651"
+ + "1519189356431513094684173807318945903212527"
+ + "7712469749366620048658571121822171067675915"
+ + "5479178304648399924549334007222294762969503"
+ + "5341584429803583589276956979963609078497238"
+ + "760757619468018224491053");
+ break;
+ case 7680:
+ p = new BigInteger("7034022146817764608206409206476311"
+ + "1371065855827199565170055133179419153145313"
+ + "9446295819321510144417300286482767498463255"
+ + "3370362723164324606829434617977090251035572"
+ + "4237546099249090966627372485629853471350368"
+ + "1497807044971675189990783927066958945388379"
+ + "4004871857862380913954692362042250112646330"
+ + "0515873693830575810241740671573357342073942"
+ + "4924331206670599086552994426505996651481869"
+ + "2750320309695596383830444337180596058381417"
+ + "7804256675894755482917598033151085120879826"
+ + "5373459707672000040090469058320463160804122"
+ + "8041026671361647347262771363754358441620179"
+ + "3861076191970047581401830740749715862725492"
+ + "5750077182986169592435996668282677192000592"
+ + "8019204141383012670399208092972174321639234"
+ + "6398779487064860458178135981700487728919191"
+ + "2418625085287791733119321378648688730352488"
+ + "6446800847442687530322927871063574241918202"
+ + "1883228799435533794167861499482410970370569"
+ + "6964781912514810444018313637829915454156777"
+ + "4591735979781496237582756842195362757823524"
+ + "2054367976655738752756266147542536910268553"
+ + "7448833810249238249431673425245843356607647"
+ + "4372260685985882252621076435844355190011754"
+ + "0656637395317040751098009821385816878380790"
+ + "9017022563392158510700243843871343995665725"
+ + "9447");
+ q = new BigInteger("7006097449483280289139842436346899"
+ + "9530483972793167261845287040200424598484519"
+ + "0516644904497480849788319004016685820778949"
+ + "8514891188272714344395538114013074460410497"
+ + "8359325044727263936454825245761418873141623"
+ + "2797767712619624879346520836103128457266811"
+ + "0175147598232556414901292143389437071453369"
+ + "4867355570712858957689566849950544938172174"
+ + "9136345403774445991224311311204082279382451"
+ + "1977673518543939329498617563049052032259503"
+ + "1057378839061411322975567618416093845144604"
+ + "4563500271329350225709899627798126176885843"
+ + "9953695524756659384424971651654225913916902"
+ + "7087953078966988666226779422822854729725410"
+ + "1118666318953891716194309185187152294057704"
+ + "2509582485250984938518224243061447485603856"
+ + "0197517312286511585545481984194518805766300"
+ + "7351141154720653351520788558277866920369211"
+ + "9269193267018615410395030712426882576851775"
+ + "9240726416572698143674385203349496226355950"
+ + "0327319442530888807531774734409411628435155"
+ + "6449625936156829175453919098709371623972260"
+ + "4090598351878256110255744263233419699486705"
+ + "3658219936031243191809689036438631617494147"
+ + "8183898954195399872571907981872765548994005"
+ + "0754996819683869837696561316479950526914796"
+ + "3613549619563212818369365543951734053135086"
+ + "8593");
+ break;
+ case 7681:
+ p = new BigInteger("1051422012172516922972337796421710"
+ + "1479918158427421377774284533124281583092508"
+ + "4961153980854679659383249048667658521370629"
+ + "6404078819943386006431233653506112030196761"
+ + "7596078830067404622117784094070983115834842"
+ + "0487926993058767148294211654032287322495894"
+ + "1733666341539644761909820700670130074920230"
+ + "0423405253327351685101039824822997870642295"
+ + "8176417666723292317903368285439828460328413"
+ + "9578515412811253729224087502906626189200448"
+ + "4062549581079444644685394008569377879899377"
+ + "0578136407363616816108795867392262638913436"
+ + "2041457188733948013731661456602199370852579"
+ + "2394583215214266552642082043674873685065171"
+ + "9053703728689139119006448644148961706358756"
+ + "0498696516029596534138345596800696824976461"
+ + "8461070371773003241093580622731426623849732"
+ + "8737707046931934781383331589291927520571138"
+ + "2759511573966362005294438252298268405782746"
+ + "9642105075721912120520774388679358659061825"
+ + "8867415333830751976884165265610029632416351"
+ + "6666642762305875140340531095190000199307531"
+ + "2186952558457690950270489966695323839026041"
+ + "0797018634946454573060304991245539422899112"
+ + "9312288231966690989900334936215870198735213"
+ + "6745631923445509394027128331099748294658904"
+ + "6303809606943116678969915369410846798143779"
+ + "89187");
+ q = new BigInteger("8160183444544784072886152354850963"
+ + "2507221530634202707531181684048014518183560"
+ + "4586261698204521358487995639975786964316103"
+ + "5861955444259138806900123878887948650444640"
+ + "7062365744302695074634248387572850855758081"
+ + "9074631976865727985289995811413472254074432"
+ + "4751574514329862821405069035713821908598155"
+ + "5436571566703295992717666421591959121774983"
+ + "5913798632992394695663301960139778059658979"
+ + "4944466598070019481108421780314115410201334"
+ + "2925668957166258484312039121420100795544341"
+ + "5372918969907063685116069321551182817324799"
+ + "3347159610063964281388144113123539915925090"
+ + "2692309096312451442405059120315891913678403"
+ + "4977738880336169371406947347468157606390086"
+ + "3381587148478097717352225924672548657441771"
+ + "3887371520215341151934095945869956390140929"
+ + "3098286281540595154062683214111934217839063"
+ + "3309526631019699109621050440794920159910038"
+ + "3248965999877529393614116991972153758910967"
+ + "1712258745878268303349611893651932564447696"
+ + "9601760120187828039923387985032881949408596"
+ + "0689784023540256749586591441103043888423326"
+ + "3078541569639917739590630101701573133092711"
+ + "6157430583592378472242178997833136144409256"
+ + "3558220277370179546822023437190315852529873"
+ + "0831890147323301322699740037060134979740963"
+ + "4289");
+ break;
+ case 8192:
+ p = new BigInteger("9821669838446774374944535804569858"
+ + "0553278885576950130485823829973470553571905"
+ + "3014418421996241500307589880457361653957913"
+ + "9176499436767288125182942994089196450118944"
+ + "8701794862752733776161684616570463744619126"
+ + "4981622564763630694110472008409561205704867"
+ + "0221819623405201369630462487520858670679048"
+ + "5854008441429858453634949980424333056803703"
+ + "1205609490778445762604050796894221725977551"
+ + "1428887194691696420765173256600200430067305"
+ + "4364524177041858044598166859757042904625691"
+ + "4292728453597609683799189454690202563236931"
+ + "8171122071288244573793276051041975005528757"
+ + "0228306442708182141334279133965507583927772"
+ + "9244311696220253059281524393613278272067808"
+ + "7017494446447670799055720358621918361716353"
+ + "5018317015764698318012095108914870478138809"
+ + "8204738169777192718869484177321870413838036"
+ + "8149216482968887382371881239714335470844573"
+ + "1862934371951394070111726593305334971041399"
+ + "5517260339034138718517336990212463882142363"
+ + "9154412320743552301967162100734381046548816"
+ + "3883737645359595416600487444018399886391071"
+ + "3777667222706059170707223589163679915863781"
+ + "4662302526078720977228426750718207481384357"
+ + "7918717041190413457052439016978578217755022"
+ + "7370720979516554707297685239584071755267452"
+ + "6021894842754355160100506065457679069228273"
+ + "95209345267367982516553449135291473361");
+ q = new BigInteger("7902448465953646210110784092684896"
+ + "0265474424590294110174550047938700740921014"
+ + "1981650823416127449143596912363210790070524"
+ + "2903784112701128957948996730263815210531364"
+ + "0489145287401377007608600217628773627723381"
+ + "1194123533939872283952535576847014977682278"
+ + "9332064706645169741712060131540562788886577"
+ + "3762235020990267901959745687867018811088495"
+ + "3716021011509120447248882358515954471433808"
+ + "2782236662758287959413069553620728137831579"
+ + "2321174813204514354999978428741310035945405"
+ + "0226661395731921098764192439072425262100813"
+ + "9732949866553839713092238096261034339815187"
+ + "2832617055364163276140160068136296115910569"
+ + "9466440903693740716929166334256441926903849"
+ + "1082968246155177124035336609654226388424434"
+ + "5775783323612758615407928446164631651292743"
+ + "8428509642959278732826297890909454571009075"
+ + "7836191622138731918099379467912681177757761"
+ + "6141378131042432093843778753846726589215845"
+ + "7402160146427434508515156204064224022904659"
+ + "8645441448874409852211668374267341177082462"
+ + "7341410218867175406105046487057429530801973"
+ + "0931082058719258230993681115780999537424968"
+ + "2385515792331573549935317407789344892257264"
+ + "7464569110078675090194686816764429827739815"
+ + "0566036514181547634372488184242167294602000"
+ + "8232780963578241583529875079397308150506597"
+ + "37190564909892937290776929541076192569");
+ break;
+ default:
+ throw new AssertionError("Unknown keySize " + keySize);
+ }
+
+ n = p.multiply(q);
+
+ // phi = (p - 1) * (q - 1) must be relative prime to e
+ // otherwise RSA just won't work ;-)
+ BigInteger p1 = p.subtract(BigInteger.ONE);
+ BigInteger q1 = q.subtract(BigInteger.ONE);
+ BigInteger phi = p1.multiply(q1);
+ // generate new p and q until they work. typically
+ // the first try will succeed when using F4
+ if (e.gcd(phi).equals(BigInteger.ONE) == false) {
+ throw new AssertionError("Should not happen");
+ }
+
+ // private exponent d is the inverse of e mod phi
+ BigInteger d = e.modInverse(phi);
+
+ // 1st prime exponent pe = d mod (p - 1)
+ BigInteger pe = d.mod(p1);
+ // 2nd prime exponent qe = d mod (q - 1)
+ BigInteger qe = d.mod(q1);
+
+ // crt coefficient coeff is the inverse of q mod p
+ BigInteger coeff = q.modInverse(p);
+
+ try {
+ PublicKey publicKey = new RSAPublicKeyImpl(rsaId, n, e);
+ PrivateKey privateKey = new RSAPrivateCrtKeyImpl(
+ rsaId, n, e, d, p, q, pe, qe, coeff);
+ return new KeyPair(publicKey, privateKey);
+ } catch (InvalidKeyException exc) {
+ // invalid key exception only thrown for keys < 512 bit,
+ // will not happen here
+ throw new RuntimeException(exc);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/fakegen/jdk.crypto.ec/sun/security/ec/ECKeyPairGenerator.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.ec;
+
+import java.math.BigInteger;
+import java.security.*;
+import java.security.spec.AlgorithmParameterSpec;
+import java.security.spec.ECParameterSpec;
+import java.security.spec.ECPoint;
+
+import sun.security.util.ECUtil;
+import static sun.security.util.SecurityProviderConstants.DEF_EC_KEY_SIZE;
+
+/**
+ * A fake EC keypair generator.
+ */
+public final class ECKeyPairGenerator extends KeyPairGeneratorSpi {
+
+ private int keySize;
+
+ public ECKeyPairGenerator() {
+ initialize(DEF_EC_KEY_SIZE, null);
+ }
+
+ @Override
+ public void initialize(int keySize, SecureRandom random) {
+ this.keySize = keySize;
+ }
+
+ @Override
+ public void initialize(AlgorithmParameterSpec params, SecureRandom random)
+ throws InvalidAlgorithmParameterException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public KeyPair generateKeyPair() {
+ BigInteger s, x, y;
+ switch (keySize) {
+ case 192:
+ s = new BigInteger("144089953963995451666433763881605261867377"
+ + "0287449914970417");
+ x = new BigInteger("527580219290493448707803038403444129676461"
+ + "560927008883862");
+ y = new BigInteger("171489247081620145247240656640887886126295"
+ + "376102134763235");
+ break;
+ case 384:
+ s = new BigInteger("230878276322370828604837367594276033697165"
+ + "328633328282930557390817326627704675451851870430805"
+ + "90262886393892128915463");
+ x = new BigInteger("207573127814711182089888821916296502977037"
+ + "557291394001491584185306092085745595207966563387890"
+ + "64848861531410731137896");
+ y = new BigInteger("272903686539605964684771543637437742229808"
+ + "792287657810480793861620950159864617021540168828129"
+ + "97920015041145259782242");
+ break;
+ case 571:
+ s = new BigInteger("102950007413729156017516513076331886543538"
+ + "947044937190140406420556321983301533699021909556189"
+ + "150601557539520495361099574425100081169640300555562"
+ + "4280643194744140660275077121");
+ x = new BigInteger("640598847385582251482893323029655037929442"
+ + "593800810090252942944624854811134311418807076811195"
+ + "132373308708007447666896675761104237802118413642543"
+ + "8277858107132017492037336593");
+ y = new BigInteger("254271270803422773271985083014247202480077"
+ + "131823713050110789460550383275777195766342550786766"
+ + "080401402424961690914429074822281551140068729472439"
+ + "477216613432839953714415981");
+ break;
+ default:
+ throw new AssertionError("Unsupported keysize " + keySize);
+ }
+ ECParameterSpec ecParams = ECUtil.getECParameterSpec(null, keySize);
+ try {
+ return new KeyPair(new ECPublicKeyImpl(new ECPoint(x, y), ecParams),
+ new ECPrivateKeyImpl(s, ecParams));
+ } catch (Exception ex) {
+ throw new ProviderException(ex);
+ }
+ }
+}
--- a/test/jdk/sun/security/tools/keytool/pss/PSS.java Tue Jul 09 17:05:20 2019 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
- * 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 8215694 8222987 8225257
- * @summary keytool cannot generate RSASSA-PSS certificates
- * @library /test/lib
- * @build java.base/sun.security.rsa.RSAKeyPairGenerator
- * @modules java.base/sun.security.util
- * java.base/sun.security.x509
- * @requires os.family != "solaris"
- * @run main PSS
- */
-
-// This test is excluded from Solaris because the 8192-bit RSA key pair
-// generator is extremely slow there.
-
-import jdk.test.lib.Asserts;
-import jdk.test.lib.SecurityTools;
-import jdk.test.lib.process.OutputAnalyzer;
-import jdk.test.lib.security.DerUtils;
-import sun.security.util.ObjectIdentifier;
-import sun.security.x509.AlgorithmId;
-
-import java.io.File;
-import java.security.KeyStore;
-import java.security.cert.X509Certificate;
-
-public class PSS {
-
- public static void main(String[] args) throws Exception {
-
- genkeypair("p", "-keyalg RSASSA-PSS -sigalg RSASSA-PSS")
- .shouldHaveExitValue(0);
-
- genkeypair("a", "-keyalg RSA -sigalg RSASSA-PSS -keysize 2048")
- .shouldHaveExitValue(0);
-
- genkeypair("b", "-keyalg RSA -sigalg RSASSA-PSS -keysize 4096")
- .shouldHaveExitValue(0);
-
- genkeypair("c", "-keyalg RSA -sigalg RSASSA-PSS -keysize 8192")
- .shouldHaveExitValue(0);
-
- KeyStore ks = KeyStore.getInstance(
- new File("ks"), "changeit".toCharArray());
-
- check((X509Certificate)ks.getCertificate("p"), "RSASSA-PSS",
- AlgorithmId.SHA256_oid);
-
- check((X509Certificate)ks.getCertificate("a"), "RSA",
- AlgorithmId.SHA256_oid);
-
- check((X509Certificate)ks.getCertificate("b"), "RSA",
- AlgorithmId.SHA384_oid);
-
- check((X509Certificate)ks.getCertificate("c"), "RSA",
- AlgorithmId.SHA512_oid);
-
- // More commands
- kt("-certreq -alias p -sigalg RSASSA-PSS -file p.req")
- .shouldHaveExitValue(0);
-
- kt("-gencert -alias a -sigalg RSASSA-PSS -infile p.req -outfile p.cert")
- .shouldHaveExitValue(0);
-
- kt("-importcert -alias p -file p.cert")
- .shouldHaveExitValue(0);
-
- kt("-selfcert -alias p -sigalg RSASSA-PSS")
- .shouldHaveExitValue(0);
- }
-
- static OutputAnalyzer genkeypair(String alias, String options)
- throws Exception {
- String patchArg = "-J--patch-module=java.base=" + System.getProperty("test.classes")
- + File.separator + "patches" + File.separator + "java.base";
- return kt(patchArg + " -genkeypair -alias " + alias
- + " -dname CN=" + alias + " " + options);
- }
-
- static OutputAnalyzer kt(String cmd)
- throws Exception {
- return SecurityTools.keytool("-storepass changeit -keypass changeit "
- + "-keystore ks " + cmd);
- }
-
- static void check(X509Certificate cert, String expectedKeyAlg,
- ObjectIdentifier expectedMdAlg) throws Exception {
- Asserts.assertEQ(cert.getPublicKey().getAlgorithm(), expectedKeyAlg);
- Asserts.assertEQ(cert.getSigAlgName(), "RSASSA-PSS");
- DerUtils.checkAlg(cert.getSigAlgParams(), "000", expectedMdAlg);
- }
-}
--- a/test/jdk/sun/security/tools/keytool/pss/java.base/sun/security/rsa/RSAKeyPairGenerator.java Tue Jul 09 17:05:20 2019 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.rsa;
-
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.RSAKeyGenParameterSpec;
-
-import sun.security.jca.JCAUtil;
-import sun.security.x509.AlgorithmId;
-import static sun.security.rsa.RSAUtil.KeyType;
-
-/**
- * Fake RSA keypair generation.
- */
-public abstract class RSAKeyPairGenerator extends KeyPairGeneratorSpi {
-
- // public exponent to use
- private BigInteger publicExponent;
-
- // size of the key to generate, >= RSAKeyFactory.MIN_MODLEN
- private int keySize;
-
- private final KeyType type;
- private AlgorithmId rsaId;
-
- RSAKeyPairGenerator(KeyType type, int defKeySize) {
- this.type = type;
- // initialize to default in case the app does not call initialize()
- initialize(defKeySize, null);
- }
-
- // initialize the generator. See JCA doc
- public void initialize(int keySize, SecureRandom random) {
- try {
- initialize(new RSAKeyGenParameterSpec(keySize,
- RSAKeyGenParameterSpec.F4), random);
- } catch (InvalidAlgorithmParameterException iape) {
- throw new InvalidParameterException(iape.getMessage());
- }
- }
-
- // second initialize method. See JCA doc.
- public void initialize(AlgorithmParameterSpec params, SecureRandom random)
- throws InvalidAlgorithmParameterException {
- if (params instanceof RSAKeyGenParameterSpec == false) {
- throw new InvalidAlgorithmParameterException
- ("Params must be instance of RSAKeyGenParameterSpec");
- }
-
- RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec)params;
- int tmpKeySize = rsaSpec.getKeysize();
- BigInteger tmpPublicExponent = rsaSpec.getPublicExponent();
- AlgorithmParameterSpec tmpParams = rsaSpec.getKeyParams();
-
- if (tmpPublicExponent == null) {
- tmpPublicExponent = RSAKeyGenParameterSpec.F4;
- } else {
- if (tmpPublicExponent.compareTo(RSAKeyGenParameterSpec.F0) < 0) {
- throw new InvalidAlgorithmParameterException
- ("Public exponent must be 3 or larger");
- }
- if (tmpPublicExponent.bitLength() > tmpKeySize) {
- throw new InvalidAlgorithmParameterException
- ("Public exponent must be smaller than key size");
- }
- }
-
- // do not allow unreasonably large key sizes, probably user error
- try {
- RSAKeyFactory.checkKeyLengths(tmpKeySize, tmpPublicExponent,
- 512, 64 * 1024);
- } catch (InvalidKeyException e) {
- throw new InvalidAlgorithmParameterException(
- "Invalid key sizes", e);
- }
-
- try {
- this.rsaId = RSAUtil.createAlgorithmId(type, tmpParams);
- } catch (ProviderException e) {
- throw new InvalidAlgorithmParameterException(
- "Invalid key parameters", e);
- }
-
- this.keySize = tmpKeySize;
- this.publicExponent = tmpPublicExponent;
- }
-
- // generate the keypair. See JCA doc
- public KeyPair generateKeyPair() {
-
- // accommodate odd key sizes in case anybody wants to use them
- BigInteger e = publicExponent;
- if (!e.equals(RSAKeyGenParameterSpec.F4)) {
- throw new AssertionError("Only support F4 now");
- }
- BigInteger p, q, n;
-
- // Pre-calculated p and q for e == RSAKeyGenParameterSpec.F4
- switch (keySize) {
- case 2048:
- p = new BigInteger("1600840041787354447543653385760927"
- + "2642568308955833364523274045522752644800599"
- + "8669541532595690224703734511692014533312515"
- + "1867029838883431415692353449578487671384896"
- + "6611685764860941767986520897595108597563035"
- + "4023785639802607792535812062420427283857665"
- + "9883578590844700707106157871508280052743363"
- + "65749456332400771");
- q = new BigInteger("1303880717101677622201474394769850"
- + "7257196073324816341282215626935164930077468"
- + "5999131251387556761167658937349436378464220"
- + "4831804147777472146628148336776639855791417"
- + "3849903041999943901924899580268176393595653"
- + "7357080543898614581363167420619163047562600"
- + "6155574020606891195960345238780709194499010"
- + "43652862954645301");
- break;
- case 4096:
- p = new BigInteger("2985635754414679487171962796211911"
- + "1563710734938215274736352092606404045130913"
- + "2477365484439939846705721840432140066578525"
- + "0762327458086280430118434094733412377416194"
- + "8736124795243564050755767519346747209606612"
- + "5835460937739428885308798309679495432910469"
- + "0294757621321446003970767164933974474924664"
- + "1513767092845098947552598109657871041666676"
- + "2945573325433283821164032766425479703026349"
- + "9433641551427112483593214628620450175257586"
- + "4350119143877183562692754400346175237007314"
- + "7121580349193179272551363894896336921717843"
- + "3734726842184251708799134654802475890197293"
- + "9094908310578403843742664173424031260840446"
- + "591633359364559754200663");
- q = new BigInteger("2279248439141087793789384816271625"
- + "1304008816573950275844533962181244003563987"
- + "6638461665174020058827698592331066726709304"
- + "9231319346136709972639455506783245161859951"
- + "6191872757335765533547033659834427437142631"
- + "3801232751161907082392011429712327250253948"
- + "6012497852063361866175243227579880020724881"
- + "9393797645220239009219998518884396282407710"
- + "7199202450846395844337846503427790307364624"
- + "5124871273035872938616425951596065309519651"
- + "1519189356431513094684173807318945903212527"
- + "7712469749366620048658571121822171067675915"
- + "5479178304648399924549334007222294762969503"
- + "5341584429803583589276956979963609078497238"
- + "760757619468018224491053");
- break;
- case 8192:
- p = new BigInteger("9821669838446774374944535804569858"
- + "0553278885576950130485823829973470553571905"
- + "3014418421996241500307589880457361653957913"
- + "9176499436767288125182942994089196450118944"
- + "8701794862752733776161684616570463744619126"
- + "4981622564763630694110472008409561205704867"
- + "0221819623405201369630462487520858670679048"
- + "5854008441429858453634949980424333056803703"
- + "1205609490778445762604050796894221725977551"
- + "1428887194691696420765173256600200430067305"
- + "4364524177041858044598166859757042904625691"
- + "4292728453597609683799189454690202563236931"
- + "8171122071288244573793276051041975005528757"
- + "0228306442708182141334279133965507583927772"
- + "9244311696220253059281524393613278272067808"
- + "7017494446447670799055720358621918361716353"
- + "5018317015764698318012095108914870478138809"
- + "8204738169777192718869484177321870413838036"
- + "8149216482968887382371881239714335470844573"
- + "1862934371951394070111726593305334971041399"
- + "5517260339034138718517336990212463882142363"
- + "9154412320743552301967162100734381046548816"
- + "3883737645359595416600487444018399886391071"
- + "3777667222706059170707223589163679915863781"
- + "4662302526078720977228426750718207481384357"
- + "7918717041190413457052439016978578217755022"
- + "7370720979516554707297685239584071755267452"
- + "6021894842754355160100506065457679069228273"
- + "95209345267367982516553449135291473361");
- q = new BigInteger("7902448465953646210110784092684896"
- + "0265474424590294110174550047938700740921014"
- + "1981650823416127449143596912363210790070524"
- + "2903784112701128957948996730263815210531364"
- + "0489145287401377007608600217628773627723381"
- + "1194123533939872283952535576847014977682278"
- + "9332064706645169741712060131540562788886577"
- + "3762235020990267901959745687867018811088495"
- + "3716021011509120447248882358515954471433808"
- + "2782236662758287959413069553620728137831579"
- + "2321174813204514354999978428741310035945405"
- + "0226661395731921098764192439072425262100813"
- + "9732949866553839713092238096261034339815187"
- + "2832617055364163276140160068136296115910569"
- + "9466440903693740716929166334256441926903849"
- + "1082968246155177124035336609654226388424434"
- + "5775783323612758615407928446164631651292743"
- + "8428509642959278732826297890909454571009075"
- + "7836191622138731918099379467912681177757761"
- + "6141378131042432093843778753846726589215845"
- + "7402160146427434508515156204064224022904659"
- + "8645441448874409852211668374267341177082462"
- + "7341410218867175406105046487057429530801973"
- + "0931082058719258230993681115780999537424968"
- + "2385515792331573549935317407789344892257264"
- + "7464569110078675090194686816764429827739815"
- + "0566036514181547634372488184242167294602000"
- + "8232780963578241583529875079397308150506597"
- + "37190564909892937290776929541076192569");
- break;
- default:
- throw new AssertionError("Unknown keySize " + keySize);
- }
-
- n = p.multiply(q);
-
- // phi = (p - 1) * (q - 1) must be relative prime to e
- // otherwise RSA just won't work ;-)
- BigInteger p1 = p.subtract(BigInteger.ONE);
- BigInteger q1 = q.subtract(BigInteger.ONE);
- BigInteger phi = p1.multiply(q1);
- // generate new p and q until they work. typically
- // the first try will succeed when using F4
- if (e.gcd(phi).equals(BigInteger.ONE) == false) {
- throw new AssertionError("Should not happen");
- }
-
- // private exponent d is the inverse of e mod phi
- BigInteger d = e.modInverse(phi);
-
- // 1st prime exponent pe = d mod (p - 1)
- BigInteger pe = d.mod(p1);
- // 2nd prime exponent qe = d mod (q - 1)
- BigInteger qe = d.mod(q1);
-
- // crt coefficient coeff is the inverse of q mod p
- BigInteger coeff = q.modInverse(p);
-
- try {
- PublicKey publicKey = new RSAPublicKeyImpl(rsaId, n, e);
- PrivateKey privateKey = new RSAPrivateCrtKeyImpl(
- rsaId, n, e, d, p, q, pe, qe, coeff);
- return new KeyPair(publicKey, privateKey);
- } catch (InvalidKeyException exc) {
- // invalid key exception only thrown for keys < 512 bit,
- // will not happen here
- throw new RuntimeException(exc);
- }
- }
-}
--- a/test/jdk/sun/text/resources/LocaleData Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/text/resources/LocaleData Thu Jul 11 15:40:29 2019 +0530
@@ -8322,7 +8322,15 @@
# bug #8208746
CurrencyNames//ves=Venezuelan Bol\u00edvar Soberano
-# bug# 8206879
+# bug #8206879
# For Peru decimal separator is changed to dot(.) and grouping separator is changed to comma(,)
FormatData/es_PE/NumberElements/0=.
FormatData/es_PE/NumberElements/1=,
+
+# bug #8227127
+FormatData/ja/short.Eras/0=\u7d00\u5143\u524d
+FormatData/ja/short.Eras/1=\u897f\u66a6
+FormatData/zh/short.Eras/0=\u516c\u5143\u524d
+FormatData/zh/short.Eras/1=\u516c\u5143
+FormatData/zh_TW/short.Eras/0=\u897f\u5143\u524d
+FormatData/zh_TW/short.Eras/1=\u897f\u5143
--- a/test/jdk/sun/text/resources/LocaleDataTest.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/text/resources/LocaleDataTest.java Thu Jul 11 15:40:29 2019 +0530
@@ -39,7 +39,7 @@
* 8017142 8037343 8055222 8042126 8074791 8075173 8080774 8129361 8134916
* 8145136 8145952 8164784 8037111 8081643 7037368 8178872 8185841 8190918
* 8187946 8195478 8181157 8179071 8193552 8202026 8204269 8202537 8208746
- * 8209775 8221432
+ * 8209775 8221432 8227127
* @summary Verify locale data
* @modules java.base/sun.util.resources
* @modules jdk.localedata
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/tools/jhsdb/JShellHeapDumpTest.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8225715
+ * @requires vm.hasSAandCanAttach
+ * @library /test/lib
+ * @compile JShellHeapDumpTest.java
+ * @run main/timeout=240 JShellHeapDumpTest
+ */
+
+import static jdk.test.lib.Asserts.assertTrue;
+
+import java.io.IOException;
+import java.io.File;
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.hprof.parser.HprofReader;
+
+import jdk.jshell.JShell;
+
+public class JShellHeapDumpTest {
+
+ protected static Process process;
+
+ private static long pid;
+
+ public static void launch(String expectedMessage, List<String> toolArgs)
+ throws IOException {
+
+ try {
+ launchJshell();
+
+ System.out.println("Starting " + toolArgs.get(0) + " against " + pid);
+ JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jhsdb");
+
+ for (String cmd : toolArgs) {
+ launcher.addToolArg(cmd);
+ }
+
+ launcher.addToolArg("--pid=" + Long.toString(pid));
+
+ ProcessBuilder processBuilder = new ProcessBuilder(launcher.getCommand());
+ processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
+ OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
+ System.out.println("stdout:");
+ System.out.println(output.getStdout());
+ System.out.println("stderr:");
+ System.out.println(output.getStderr());
+ output.shouldNotContain("null");
+ output.shouldHaveExitValue(0);
+ } catch (Exception ex) {
+ throw new RuntimeException("Test ERROR " + ex, ex);
+ } finally {
+ if (process.isAlive()) {
+ process.destroy();
+ }
+ }
+ }
+
+ public static void launch(String expectedMessage, String... toolArgs)
+ throws IOException {
+
+ launch(expectedMessage, Arrays.asList(toolArgs));
+ }
+
+ public static void printStackTraces(String file) throws IOException {
+ try {
+ String output = HprofReader.getStack(file, 0);
+ if (!output.contains("JShellToolProvider")) {
+ throw new RuntimeException("'JShellToolProvider' missing from stdout/stderr");
+ }
+ } catch (Exception ex) {
+ throw new RuntimeException("Test ERROR " + ex, ex);
+ }
+ }
+
+ public static void testHeapDump() throws IOException {
+ File dump = new File("jhsdb.jmap.heap." +
+ System.currentTimeMillis() + ".hprof");
+ if (dump.exists()) {
+ dump.delete();
+ }
+
+ launch("heap written to", "jmap",
+ "--binaryheap", "--dumpfile=" + dump.getAbsolutePath());
+
+ assertTrue(dump.exists() && dump.isFile(),
+ "Could not create dump file " + dump.getAbsolutePath());
+
+ printStackTraces(dump.getAbsolutePath());
+
+ dump.delete();
+ }
+
+ public static void launchJshell() throws IOException {
+ System.out.println("Starting Jshell");
+ String jdkPath = System.getProperty("test.jdk");
+ if (jdkPath == null) {
+ // we are not under jtreg, try env
+ Map<String, String> env = System.getenv();
+ jdkPath = env.get("TESTJAVA");
+ }
+ if (jdkPath == null) {
+ throw new RuntimeException("Can't determine jdk path neither test.jdk property no TESTJAVA env are set");
+ }
+ String osname = System.getProperty("os.name");
+ String jshell = jdkPath + ((osname.startsWith("window")) ? "/bin/jshell.exe" : "/bin/jshell");
+ process = Runtime.getRuntime().exec(jshell);
+ pid = process.pid();
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ testHeapDump();
+
+ // The test throws RuntimeException on error.
+ // IOException is thrown if Jshell can't start because of some bad
+ // environment condition
+ System.out.println("Test PASSED");
+ }
+}
--- a/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java Thu Jul 11 15:40:29 2019 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8007572 8008161 8157792
+ * @bug 8007572 8008161 8157792 8224560
* @summary Test whether the TimeZone generated from JSR310 tzdb is the same
* as the one from the tz data from javazic
* @modules java.base/sun.util.calendar:+open
@@ -170,6 +170,15 @@
for (String zid : zids_new) {
ZoneInfoOld zi = toZoneInfoOld(TimeZone.getTimeZone(zid));
ZoneInfoOld ziOLD = (ZoneInfoOld)ZoneInfoOld.getTimeZone(zid);
+ /*
+ * Temporary ignoring the failing TimeZones which are having zone
+ * rules defined till year 2037 and/or above and have negative DST
+ * save time in IANA tzdata. This bug is tracked via JDK-8223388.
+ */
+ if (zid.equals("Africa/Casablanca") || zid.equals("Africa/El_Aaiun")
+ || zid.equals("Asia/Tehran") || zid.equals("Iran")) {
+ continue;
+ }
if (! zi.equalsTo(ziOLD)) {
System.out.println(zi.diffsTo(ziOLD));
throw new RuntimeException(" FAILED: " + zid);
--- a/test/jdk/sun/util/calendar/zi/tzdata/VERSION Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/VERSION Thu Jul 11 15:40:29 2019 +0530
@@ -19,4 +19,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2018g
+tzdata2019a
--- a/test/jdk/sun/util/calendar/zi/tzdata/africa Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/africa Thu Jul 11 15:40:29 2019 +0530
@@ -385,6 +385,11 @@
# See Africa/Lagos.
# Eritrea
+# See Africa/Nairobi.
+
+# Eswatini (formerly Swaziland)
+# See Africa/Johannesburg.
+
# Ethiopia
# See Africa/Nairobi.
#
@@ -868,8 +873,41 @@
# From Mohamed Essedik Najd (2018-10-26):
# Today, a Moroccan government council approved the perpetual addition
# of 60 minutes to the regular Moroccan timezone.
-# From Brian Inglis (2018-10-26):
-# http://www.maroc.ma/fr/actualites/le-conseil-de-gouvernement-adopte-un-projet-de-decret-relatif-lheure-legale-stipulant-le
+# From Matt Johnson (2018-10-28):
+# http://www.sgg.gov.ma/Portals/1/BO/2018/BO_6720-bis_Ar.pdf
+#
+# From Maamar Abdelkader (2018-11-01):
+# We usually move clocks back the previous week end and come back to the +1
+# the week end after.... The government does not announce yet the decision
+# about this temporary change. But it s 99% sure that it will be the case,
+# as in previous years. An unofficial survey was done these days, showing
+# that 64% of asked peopke are ok for moving from +1 to +0 during Ramadan.
+# https://leconomiste.com/article/1035870-enquete-l-economiste-sunergia-64-des-marocains-plebiscitent-le-gmt-pendant-ramadan
+#
+# From Paul Eggert (2018-11-01):
+# For now, guess that Morocco will fall back at 03:00 the last Sunday
+# before Ramadan, and spring forward at 02:00 the first Sunday after
+# Ramadan, as this has been the practice since 2012. To implement this,
+# transition dates for 2019 through 2037 were determined by running the
+# following program under GNU Emacs 26.1.
+# (let ((islamic-year 1440))
+# (require 'cal-islam)
+# (while (< islamic-year 1460)
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+# (sunday 0))
+# (while (/= sunday (mod (setq a (1- a)) 7)))
+# (while (/= sunday (mod b 7))
+# (setq b (1+ b)))
+# (setq a (calendar-gregorian-from-absolute a))
+# (setq b (calendar-gregorian-from-absolute b))
+# (insert
+# (format
+# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t-1:00\t-\n"
+# "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t0\t-\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# (setq islamic-year (+ 1 islamic-year))))
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Morocco 1939 only - Sep 12 0:00 1:00 -
@@ -901,7 +939,7 @@
Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2013 only - Jul 7 3:00 0 -
Rule Morocco 2013 only - Aug 10 2:00 1:00 -
-Rule Morocco 2013 2018 - Oct lastSun 3:00 0 -
+Rule Morocco 2013 2017 - Oct lastSun 3:00 0 -
Rule Morocco 2014 2018 - Mar lastSun 2:00 1:00 -
Rule Morocco 2014 only - Jun 28 3:00 0 -
Rule Morocco 2014 only - Aug 2 2:00 1:00 -
@@ -913,13 +951,53 @@
Rule Morocco 2017 only - Jul 2 2:00 1:00 -
Rule Morocco 2018 only - May 13 3:00 0 -
Rule Morocco 2018 only - Jun 17 2:00 1:00 -
+Rule Morocco 2019 only - May 5 3:00 0 -
+Rule Morocco 2019 only - Jun 9 2:00 1:00 -
+Rule Morocco 2020 only - Apr 19 3:00 0 -
+Rule Morocco 2020 only - May 24 2:00 1:00 -
+Rule Morocco 2021 only - Apr 11 3:00 0 -
+Rule Morocco 2021 only - May 16 2:00 1:00 -
+Rule Morocco 2022 only - Mar 27 3:00 0 -
+Rule Morocco 2022 only - May 8 2:00 1:00 -
+Rule Morocco 2023 only - Mar 19 3:00 0 -
+Rule Morocco 2023 only - Apr 23 2:00 1:00 -
+Rule Morocco 2024 only - Mar 10 3:00 0 -
+Rule Morocco 2024 only - Apr 14 2:00 1:00 -
+Rule Morocco 2025 only - Feb 23 3:00 0 -
+Rule Morocco 2025 only - Apr 6 2:00 1:00 -
+Rule Morocco 2026 only - Feb 15 3:00 0 -
+Rule Morocco 2026 only - Mar 22 2:00 1:00 -
+Rule Morocco 2027 only - Feb 7 3:00 0 -
+Rule Morocco 2027 only - Mar 14 2:00 1:00 -
+Rule Morocco 2028 only - Jan 23 3:00 0 -
+Rule Morocco 2028 only - Feb 27 2:00 1:00 -
+Rule Morocco 2029 only - Jan 14 3:00 0 -
+Rule Morocco 2029 only - Feb 18 2:00 1:00 -
+Rule Morocco 2029 only - Dec 30 3:00 0 -
+Rule Morocco 2030 only - Feb 10 2:00 1:00 -
+Rule Morocco 2030 only - Dec 22 3:00 0 -
+Rule Morocco 2031 only - Jan 26 2:00 1:00 -
+Rule Morocco 2031 only - Dec 14 3:00 0 -
+Rule Morocco 2032 only - Jan 18 2:00 1:00 -
+Rule Morocco 2032 only - Nov 28 3:00 0 -
+Rule Morocco 2033 only - Jan 9 2:00 1:00 -
+Rule Morocco 2033 only - Nov 20 3:00 0 -
+Rule Morocco 2033 only - Dec 25 2:00 1:00 -
+Rule Morocco 2034 only - Nov 5 3:00 0 -
+Rule Morocco 2034 only - Dec 17 2:00 1:00 -
+Rule Morocco 2035 only - Oct 28 3:00 0 -
+Rule Morocco 2035 only - Dec 2 2:00 1:00 -
+Rule Morocco 2036 only - Oct 19 3:00 0 -
+Rule Morocco 2036 only - Nov 23 2:00 1:00 -
+Rule Morocco 2037 only - Oct 4 3:00 0 -
+Rule Morocco 2037 only - Nov 15 2:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
0:00 Morocco +00/+01 1984 Mar 16
1:00 - +01 1986
- 0:00 Morocco +00/+01 2018 Oct 27
- 1:00 - +01
+ 0:00 Morocco +00/+01 2018 Oct 28 3:00
+ 0:00 Morocco +00/+01
# Western Sahara
#
@@ -934,8 +1012,8 @@
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
-1:00 - -01 1976 Apr 14
- 0:00 Morocco +00/+01 2018 Oct 27
- 1:00 - +01
+ 0:00 Morocco +00/+01 2018 Oct 28 3:00
+ 0:00 Morocco +00/+01
# Mozambique
#
@@ -1092,10 +1170,20 @@
# the switch is from 01:00 to 02:00 ... [Decree No. 25/2017]
# http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017
+# From Vadim Nasardinov (2018-12-29):
+# São Tomé and Príncipe is about to do the following on Jan 1, 2019:
+# https://www.stp-press.st/2018/12/05/governo-jesus-ja-decidiu-repor-hora-legal-sao-tomense/
+#
+# From Michael Deckers (2018-12-30):
+# https://www.legis-palop.org/download.jsp?idFile=102818
+# ... [The legal time of the country, which coincides with universal
+# coordinated time, will be restituted at 2 o'clock on day 1 of January, 2019.]
+
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
-0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
0:00 - GMT 2018 Jan 1 01:00
- 1:00 - WAT
+ 1:00 - WAT 2019 Jan 1 02:00
+ 0:00 - GMT
# Senegal
# See Africa/Abidjan.
@@ -1126,7 +1214,7 @@
1:30 - SAST 1903 Mar
2:00 SA SAST
Link Africa/Johannesburg Africa/Maseru # Lesotho
-Link Africa/Johannesburg Africa/Mbabane # Swaziland
+Link Africa/Johannesburg Africa/Mbabane # Eswatini
#
# Marion and Prince Edward Is
# scientific station since 1947
@@ -1168,9 +1256,6 @@
2:00 Sudan CA%sT 2000 Jan 15 12:00
3:00 - EAT
-# Swaziland
-# See Africa/Johannesburg.
-
# Tanzania
# See Africa/Nairobi.
--- a/test/jdk/sun/util/calendar/zi/tzdata/asia Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/asia Thu Jul 11 15:40:29 2019 +0530
@@ -607,12 +607,82 @@
# obtained from
# http://www.hko.gov.hk/gts/time/Summertime.htm
-# From Arthur David Olson (2009-10-28):
+# From Phake Nick (2018-10-27):
+# According to Singaporean newspaper
+# http://eresources.nlb.gov.sg/newspapers/Digitised/Article/singfreepresswk19041102-1.2.37
+# the day that Hong Kong start using GMT+8 should be Oct 30, 1904.
+#
+# From Paul Eggert (2018-11-17):
+# Hong Kong had a time ball near the Marine Police Station, Tsim Sha Tsui.
+# "The ball was raised manually each day and dropped at exactly 1pm
+# (except on Sundays and Government holidays)."
+# Dyson AD. From Time Ball to Atomic Clock. Hong Kong Government. 1983.
+# <https://www.hko.gov.hk/publica/gen_pub/timeball_atomic_clock.pdf>
+# "From 1904 October 30 the time-ball at Hong Kong has been dropped by order
+# of the Governor of the Colony at 17h 0m 0s G.M.T., which is 23m 18s.14 in
+# advance of 1h 0m 0s of Hong Kong mean time."
+# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
+# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
+#
+# From Joseph Myers (2018-11-18):
+# An astronomer before 1925 referring to GMT would have been using the old
+# astronomical convention where the day started at noon, not midnight.
+#
+# From Steve Allen (2018-11-17):
+# Meteorological Observations made at the Hongkong Observatory in the year 1904
+# page 4 <https://books.google.com/books?id=kgw5AQAAMAAJ&pg=RA4-PA4>
+# ... the log of drop times in Table II shows that on Sunday 1904-10-30 the
+# ball was dropped. So that looks like a special case drop for the sake
+# of broadcasting the new local time.
+#
+# From Phake Nick (2018-11-18):
+# According to The Hong Kong Weekly Press, 1904-10-29, p.324, the
+# governor of Hong Kong at the time stated that "We are further desired to
+# make it known that the change will be effected by firing the gun and by the
+# dropping of the Ball at 23min. 18sec. before one."
+# From Paul Eggert (2018-11-18):
+# See <https://mmis.hkpl.gov.hk> for this; unfortunately Flash is required.
+
+# From Phake Nick (2018-10-26):
+# I went to check microfilm records stored at Hong Kong Public Library....
+# on September 30 1941, according to Ta Kung Pao (Hong Kong edition), it was
+# stated that fallback would occur on the next day (the 1st)'s "03:00 am (Hong
+# Kong Time 04:00 am)" and the clock will fall back for a half hour. (03:00
+# probably refer to the time commonly used in mainland China at the time given
+# the paper's background) ... the sunrise/sunset time given by South China
+# Morning Post for October 1st was indeed moved by half an hour compares to
+# before. After that, in December, the battle to capture Hong Kong started and
+# the library doesn't seems to have any record stored about press during that
+# period of time. Some media resumed publication soon after that within the
+# same month, but there were not much information about time there. Later they
+# started including a radio program guide when they restored radio service,
+# explicitly mentioning it use Tokyo standard time, and later added a note
+# saying it's half an hour ahead of the old Hong Kong standard time, and it
+# also seems to indicate that Hong Kong was not using GMT+8 when it was
+# captured by Japan.
+#
+# Image of related sections on newspaper:
+# * 1941-09-30, Ta Kung Pao (Hong Kong), "Winter Time start tomorrow".
+# https://i.imgur.com/6waY51Z.jpg (Chinese)
+# * 1941-09-29, South China Morning Post, Information on sunrise/sunset
+# time and other things for September 30 and October 1.
+# https://i.imgur.com/kCiUR78.jpg
+# * 1942-02-05. The Hong Kong News, Radio Program Guide.
+# https://i.imgur.com/eVvDMzS.jpg
+# * 1941-06-14. Hong Kong Daily Press, Daylight Saving from 3am Tomorrow.
+# https://i.imgur.com/05KkvtC.png
+# * 1941-09-30, Hong Kong Daily Press, Winter Time Warning.
+# https://i.imgur.com/dge4kFJ.png
+# Also, the Liberation day of Hong Kong after WWII which British rule
+# over the territory resumed was August 30, 1945, which I think should
+# be the termination date for the use of JST in the territory....
+
+# From Paul Eggert (2018-11-17):
# Here are the dates given at
-# http://www.hko.gov.hk/gts/time/Summertime.htm
-# as of 2009-10-28:
+# https://www.hko.gov.hk/gts/time/Summertime.htm
+# as of 2014-06-19:
# Year Period
-# 1941 1 Apr to 30 Sep
+# 1941 15 Jun to 30 Sep
# 1942 Whole year
# 1943 Whole year
# 1944 Whole year
@@ -623,7 +693,7 @@
# 1949 3 Apr to 30 Oct
# 1950 2 Apr to 29 Oct
# 1951 1 Apr to 28 Oct
-# 1952 6 Apr to 25 Oct
+# 1952 6 Apr to 2 Nov
# 1953 5 Apr to 1 Nov
# 1954 21 Mar to 31 Oct
# 1955 20 Mar to 6 Nov
@@ -652,25 +722,25 @@
# 1978 Nil
# 1979 13 May to 21 Oct
# 1980 to Now Nil
-# The page does not give start or end times of day.
-# The page does not give a start date for 1942.
-# The page does not givw an end date for 1945.
-# The Japanese occupation of Hong Kong began on 1941-12-25.
-# The Japanese surrender of Hong Kong was signed 1945-09-15.
-# For lack of anything better, use start of those days as the transition times.
+# The page does not give times of day for transitions,
+# or dates for the 1942 and 1945 transitions.
+# The Japanese occupation of Hong Kong began 1941-12-25.
+# The Japanese surrender of Hong Kong was signed 1945-09-16; see:
+# Heaver S. The days after the Pacific war ended: unsettling times
+# in Hong Kong. Post Magazine. 2016-06-13.
+# https://www.scmp.com/magazines/post-magazine/article/1852990/days-after-pacific-war-ended-unsettling-times-hong-kong
+# For lack of anything better, use start of those days as the
+# transition times.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule HK 1941 only - Apr 1 3:30 1:00 S
-Rule HK 1941 only - Sep 30 3:30 0 -
Rule HK 1946 only - Apr 20 3:30 1:00 S
Rule HK 1946 only - Dec 1 3:30 0 -
Rule HK 1947 only - Apr 13 3:30 1:00 S
Rule HK 1947 only - Dec 30 3:30 0 -
Rule HK 1948 only - May 2 3:30 1:00 S
Rule HK 1948 1951 - Oct lastSun 3:30 0 -
-Rule HK 1952 only - Oct 25 3:30 0 -
+Rule HK 1952 1953 - Nov Sun>=1 3:30 0 -
Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
-Rule HK 1953 only - Nov 1 3:30 0 -
Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
Rule HK 1954 only - Oct 31 3:30 0 -
Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
@@ -680,9 +750,11 @@
Rule HK 1979 only - May Sun>=8 3:30 1:00 S
Rule HK 1979 only - Oct Sun>=16 3:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30
- 8:00 HK HK%sT 1941 Dec 25
- 9:00 - JST 1945 Sep 15
+Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 0:36:42
+ 8:00 - HKT 1941 Jun 15 3:30
+ 8:00 1:00 HKST 1941 Oct 1 4:00
+ 8:30 - HKT 1941 Dec 25
+ 9:00 - JST 1945 Sep 16
8:00 HK HK%sT
###############################################################################
@@ -1078,6 +1150,16 @@
# India
+# British astronomer Henry Park Hollis disliked India Standard Time's offset:
+# "A new time system has been proposed for India, Further India, and Burmah.
+# The scheme suggested is that the times of the meridians 5½ and 6½ hours
+# east of Greenwich should be adopted in these territories. No reason is
+# given why hourly meridians five hours and six hours east should not be
+# chosen; a plan which would bring the time of India into harmony with
+# that of almost the whole of the civilised world."
+# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
+# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
+
# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic
# https://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/
# (2015-12-22):
@@ -1248,12 +1330,65 @@
# leap year calculation involved. There has never been any serious
# plan to change that law....
#
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2018-11-30):
# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
-# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
-# stopping after 2037 when 32-bit time_t's overflow.
-# That cal-persia used Birashk's approximation, which disagrees with the solar
-# calendar predictions for the year 2025, so I corrected those dates by hand.
+# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
+# lines from 2008 through 2087. Emacs 26.1 uses Ed Reingold's
+# cal-persia implementation of Birashk's approximation, which in the
+# 2008-2087 range disagrees with the the astronomical Persian calendar
+# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058),
+# so the following code special-case those years. See Table 15.1, page 264, of:
+# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
+# The Ultimate Edition, Cambridge University Press (2018).
+# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
+# Page 258, footnote 2, of this book says there is some dispute over what will
+# happen in 2091 (and some other years after that), so this code
+# stops in 2087, as 2088 and 2089 agree with the "max" rule below.
+# (cl-loop
+# initially (require 'cal-persia)
+# with first-persian-year = 1387
+# with last-persian-year = 1466
+# ;; Exceptional years in the above range,
+# ;; from Reingold & Dershowitz Table 15.1, page 264:
+# with exceptional-persian-years = '(1404 1437)
+# with range-start = nil
+# for persian-year from first-persian-year to last-persian-year
+# do
+# (let*
+# ((exceptional-year-offset
+# (if (member persian-year exceptional-persian-years) 1 0))
+# (beg-dst-absolute
+# (+ (calendar-persian-to-absolute (list 1 1 persian-year))
+# exceptional-year-offset))
+# (end-dst-absolute
+# (+ (calendar-persian-to-absolute (list 6 30 persian-year))
+# exceptional-year-offset))
+# (next-year-beg-dst-absolute
+# (+ (calendar-persian-to-absolute (list 1 1 (1+ persian-year)))
+# (if (member (1+ persian-year) exceptional-persian-years) 1 0)))
+# (beg-dst (calendar-gregorian-from-absolute beg-dst-absolute))
+# (end-dst (calendar-gregorian-from-absolute end-dst-absolute))
+# (next-year-beg-dst (calendar-gregorian-from-absolute
+# next-year-beg-dst-absolute))
+# (year (calendar-extract-year beg-dst))
+# (range-end (if range-start year "only")))
+# (setq range-start (or range-start year))
+# (when (or (/= (calendar-extract-day beg-dst)
+# (calendar-extract-day next-year-beg-dst))
+# (= persian-year last-persian-year))
+# (insert
+# (format
+# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t1:00\t-\n"
+# range-start range-end
+# (calendar-month-name (calendar-extract-month beg-dst) t)
+# (calendar-extract-day beg-dst)))
+# (insert
+# (format
+# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t0\t-\n"
+# range-start range-end
+# (calendar-month-name (calendar-extract-month end-dst) t)
+# (calendar-extract-day end-dst)))
+# (setq range-start nil))))
#
# From Oscar van Vlijmen (2005-03-30), writing about future
# discrepancies between cal-persia and the Iranian calendar:
@@ -1288,61 +1423,113 @@
# thirtieth day of Shahrivar.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iran 1978 1980 - Mar 21 0:00 1:00 -
-Rule Iran 1978 only - Oct 21 0:00 0 -
-Rule Iran 1979 only - Sep 19 0:00 0 -
-Rule Iran 1980 only - Sep 23 0:00 0 -
-Rule Iran 1991 only - May 3 0:00 1:00 -
-Rule Iran 1992 1995 - Mar 22 0:00 1:00 -
-Rule Iran 1991 1995 - Sep 22 0:00 0 -
-Rule Iran 1996 only - Mar 21 0:00 1:00 -
-Rule Iran 1996 only - Sep 21 0:00 0 -
-Rule Iran 1997 1999 - Mar 22 0:00 1:00 -
-Rule Iran 1997 1999 - Sep 22 0:00 0 -
-Rule Iran 2000 only - Mar 21 0:00 1:00 -
-Rule Iran 2000 only - Sep 21 0:00 0 -
-Rule Iran 2001 2003 - Mar 22 0:00 1:00 -
-Rule Iran 2001 2003 - Sep 22 0:00 0 -
-Rule Iran 2004 only - Mar 21 0:00 1:00 -
-Rule Iran 2004 only - Sep 21 0:00 0 -
-Rule Iran 2005 only - Mar 22 0:00 1:00 -
-Rule Iran 2005 only - Sep 22 0:00 0 -
-Rule Iran 2008 only - Mar 21 0:00 1:00 -
-Rule Iran 2008 only - Sep 21 0:00 0 -
-Rule Iran 2009 2011 - Mar 22 0:00 1:00 -
-Rule Iran 2009 2011 - Sep 22 0:00 0 -
-Rule Iran 2012 only - Mar 21 0:00 1:00 -
-Rule Iran 2012 only - Sep 21 0:00 0 -
-Rule Iran 2013 2015 - Mar 22 0:00 1:00 -
-Rule Iran 2013 2015 - Sep 22 0:00 0 -
-Rule Iran 2016 only - Mar 21 0:00 1:00 -
-Rule Iran 2016 only - Sep 21 0:00 0 -
-Rule Iran 2017 2019 - Mar 22 0:00 1:00 -
-Rule Iran 2017 2019 - Sep 22 0:00 0 -
-Rule Iran 2020 only - Mar 21 0:00 1:00 -
-Rule Iran 2020 only - Sep 21 0:00 0 -
-Rule Iran 2021 2023 - Mar 22 0:00 1:00 -
-Rule Iran 2021 2023 - Sep 22 0:00 0 -
-Rule Iran 2024 only - Mar 21 0:00 1:00 -
-Rule Iran 2024 only - Sep 21 0:00 0 -
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 -
-Rule Iran 2025 2027 - Sep 22 0:00 0 -
-Rule Iran 2028 2029 - Mar 21 0:00 1:00 -
-Rule Iran 2028 2029 - Sep 21 0:00 0 -
-Rule Iran 2030 2031 - Mar 22 0:00 1:00 -
-Rule Iran 2030 2031 - Sep 22 0:00 0 -
-Rule Iran 2032 2033 - Mar 21 0:00 1:00 -
-Rule Iran 2032 2033 - Sep 21 0:00 0 -
-Rule Iran 2034 2035 - Mar 22 0:00 1:00 -
-Rule Iran 2034 2035 - Sep 22 0:00 0 -
+Rule Iran 1978 1980 - Mar 20 24:00 1:00 -
+Rule Iran 1978 only - Oct 20 24:00 0 -
+Rule Iran 1979 only - Sep 18 24:00 0 -
+Rule Iran 1980 only - Sep 22 24:00 0 -
+Rule Iran 1991 only - May 2 24:00 1:00 -
+Rule Iran 1992 1995 - Mar 21 24:00 1:00 -
+Rule Iran 1991 1995 - Sep 21 24:00 0 -
+Rule Iran 1996 only - Mar 20 24:00 1:00 -
+Rule Iran 1996 only - Sep 20 24:00 0 -
+Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
+Rule Iran 1997 1999 - Sep 21 24:00 0 -
+Rule Iran 2000 only - Mar 20 24:00 1:00 -
+Rule Iran 2000 only - Sep 20 24:00 0 -
+Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
+Rule Iran 2001 2003 - Sep 21 24:00 0 -
+Rule Iran 2004 only - Mar 20 24:00 1:00 -
+Rule Iran 2004 only - Sep 20 24:00 0 -
+Rule Iran 2005 only - Mar 21 24:00 1:00 -
+Rule Iran 2005 only - Sep 21 24:00 0 -
+Rule Iran 2008 only - Mar 20 24:00 1:00 -
+Rule Iran 2008 only - Sep 20 24:00 0 -
+Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
+Rule Iran 2009 2011 - Sep 21 24:00 0 -
+Rule Iran 2012 only - Mar 20 24:00 1:00 -
+Rule Iran 2012 only - Sep 20 24:00 0 -
+Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
+Rule Iran 2013 2015 - Sep 21 24:00 0 -
+Rule Iran 2016 only - Mar 20 24:00 1:00 -
+Rule Iran 2016 only - Sep 20 24:00 0 -
+Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
+Rule Iran 2017 2019 - Sep 21 24:00 0 -
+Rule Iran 2020 only - Mar 20 24:00 1:00 -
+Rule Iran 2020 only - Sep 20 24:00 0 -
+Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
+Rule Iran 2021 2023 - Sep 21 24:00 0 -
+Rule Iran 2024 only - Mar 20 24:00 1:00 -
+Rule Iran 2024 only - Sep 20 24:00 0 -
+Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
+Rule Iran 2025 2027 - Sep 21 24:00 0 -
+Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
+Rule Iran 2028 2029 - Sep 20 24:00 0 -
+Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
+Rule Iran 2030 2031 - Sep 21 24:00 0 -
+Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
+Rule Iran 2032 2033 - Sep 20 24:00 0 -
+Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
+Rule Iran 2034 2035 - Sep 21 24:00 0 -
+Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
+Rule Iran 2036 2037 - Sep 20 24:00 0 -
+Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
+Rule Iran 2038 2039 - Sep 21 24:00 0 -
+Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
+Rule Iran 2040 2041 - Sep 20 24:00 0 -
+Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
+Rule Iran 2042 2043 - Sep 21 24:00 0 -
+Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
+Rule Iran 2044 2045 - Sep 20 24:00 0 -
+Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
+Rule Iran 2046 2047 - Sep 21 24:00 0 -
+Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
+Rule Iran 2048 2049 - Sep 20 24:00 0 -
+Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
+Rule Iran 2050 2051 - Sep 21 24:00 0 -
+Rule Iran 2052 2053 - Mar 20 24:00 1:00 -
+Rule Iran 2052 2053 - Sep 20 24:00 0 -
+Rule Iran 2054 2055 - Mar 21 24:00 1:00 -
+Rule Iran 2054 2055 - Sep 21 24:00 0 -
+Rule Iran 2056 2057 - Mar 20 24:00 1:00 -
+Rule Iran 2056 2057 - Sep 20 24:00 0 -
+Rule Iran 2058 2059 - Mar 21 24:00 1:00 -
+Rule Iran 2058 2059 - Sep 21 24:00 0 -
+Rule Iran 2060 2062 - Mar 20 24:00 1:00 -
+Rule Iran 2060 2062 - Sep 20 24:00 0 -
+Rule Iran 2063 only - Mar 21 24:00 1:00 -
+Rule Iran 2063 only - Sep 21 24:00 0 -
+Rule Iran 2064 2066 - Mar 20 24:00 1:00 -
+Rule Iran 2064 2066 - Sep 20 24:00 0 -
+Rule Iran 2067 only - Mar 21 24:00 1:00 -
+Rule Iran 2067 only - Sep 21 24:00 0 -
+Rule Iran 2068 2070 - Mar 20 24:00 1:00 -
+Rule Iran 2068 2070 - Sep 20 24:00 0 -
+Rule Iran 2071 only - Mar 21 24:00 1:00 -
+Rule Iran 2071 only - Sep 21 24:00 0 -
+Rule Iran 2072 2074 - Mar 20 24:00 1:00 -
+Rule Iran 2072 2074 - Sep 20 24:00 0 -
+Rule Iran 2075 only - Mar 21 24:00 1:00 -
+Rule Iran 2075 only - Sep 21 24:00 0 -
+Rule Iran 2076 2078 - Mar 20 24:00 1:00 -
+Rule Iran 2076 2078 - Sep 20 24:00 0 -
+Rule Iran 2079 only - Mar 21 24:00 1:00 -
+Rule Iran 2079 only - Sep 21 24:00 0 -
+Rule Iran 2080 2082 - Mar 20 24:00 1:00 -
+Rule Iran 2080 2082 - Sep 20 24:00 0 -
+Rule Iran 2083 only - Mar 21 24:00 1:00 -
+Rule Iran 2083 only - Sep 21 24:00 0 -
+Rule Iran 2084 2086 - Mar 20 24:00 1:00 -
+Rule Iran 2084 2086 - Sep 20 24:00 0 -
+Rule Iran 2087 only - Mar 21 24:00 1:00 -
+Rule Iran 2087 only - Sep 21 24:00 0 -
#
-# The following rules are approximations starting in the year 2038.
-# These are the best post-2037 approximations available, given the
-# restrictions of a single rule using a Gregorian-based data format.
+# The following rules are approximations starting in the year 2088.
+# These are the best post-2088 approximations available, given the
+# restrictions of a single rule using ordinary Gregorian dates.
# At some point this table will need to be extended, though quite
# possibly Iran will change the rules first.
-Rule Iran 2036 max - Mar 21 0:00 1:00 -
-Rule Iran 2036 max - Sep 21 0:00 0 -
+Rule Iran 2088 max - Mar 20 24:00 1:00 -
+Rule Iran 2088 max - Sep 20 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
@@ -1454,6 +1641,24 @@
Rule Zion 1974 only - Oct 13 0:00 0 S
Rule Zion 1975 only - Apr 20 0:00 1:00 D
Rule Zion 1975 only - Aug 31 0:00 0 S
+
+# From Alois Treindl (2019-03-06):
+# http://www.moin.gov.il/Documents/שעון קיץ/clock-50-years-7-2014.pdf
+# From Isaac Starkman (2019-03-06):
+# Summer time was in that period in 1980 and 1984, see
+# https://www.ynet.co.il/articles/0,7340,L-3951073,00.html
+# You can of course read it in translation.
+# I checked the local newspapers for that years.
+# It started on midnight and end at 01.00 am.
+# From Paul Eggert (2019-03-06):
+# Also see this thread about the moin.gov.il URL:
+# https://mm.icann.org/pipermail/tz/2018-November/027194.html
+Rule Zion 1980 only - Aug 2 0:00 1:00 D
+Rule Zion 1980 only - Sep 13 1:00 0 S
+Rule Zion 1984 only - May 5 0:00 1:00 D
+Rule Zion 1984 only - Aug 25 1:00 0 S
+
+# From Shanks & Pottenger:
Rule Zion 1985 only - Apr 14 0:00 1:00 D
Rule Zion 1985 only - Sep 15 0:00 0 S
Rule Zion 1986 only - May 18 0:00 1:00 D
@@ -1712,7 +1917,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
9:00 Japan J%sT
-# Since 1938, all Japanese possessions have been like Asia/Tokyo.
+# Since 1938, all Japanese possessions have been like Asia/Tokyo,
+# except that Truk (Chuuk), Ponape (Pohnpei), and Jaluit (Kosrae) did not
+# switch from +10 to +09 until 1941-04-01; see the 'australasia' file.
# Jordan
#
@@ -2002,8 +2209,10 @@
# and in Byalokoz) lists Ural river (plus 10 versts on its left bank) in
# the third time belt (before 1930 this means +03).
-# From Paul Eggert (2016-12-06):
-# The tables below reflect Golosunov's remarks, with exceptions as noted.
+# From Alexander Konzurovski (2018-12-20):
+# Qyzyolrda Region (Asia/Qyzylorda) is changing its time zone from
+# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
+# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
@@ -2017,8 +2226,6 @@
6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
6:00 - +06
# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
-# This currently includes Qostanay (aka Kostanay, Kustanay) (KZ-KUS);
-# see comments below.
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
5:00 - +05 1981 Apr 1
@@ -2029,21 +2236,22 @@
5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
+ 6:00 - +06 2018 Dec 21 0:00
+ 5:00 - +05
+#
+# Qostanay (aka Kostanay, Kustanay) (KZ-KUS)
+# The 1991/2 rules are unclear partly because of the 1997 Turgai
+# reorganization.
+Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+ 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
6:00 - +06
-# The following zone is like Asia/Qyzylorda except for being one
-# hour earlier from 1991-09-29 to 1992-03-29. The 1991/2 rules for
-# Qostanay are unclear partly because of the 1997 Turgai
-# reorganization, so this zone is commented out for now.
-#Zone Asia/Qostanay 4:14:20 - LMT 1924 May 2
-# 4:00 - +04 1930 Jun 21
-# 5:00 - +05 1981 Apr 1
-# 5:00 1:00 +06 1981 Oct 1
-# 6:00 - +06 1982 Apr 1
-# 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
-# 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
-# 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
-# 6:00 - +06
-#
+
# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
@@ -2137,21 +2345,43 @@
# started at June 1 in that year. For another example, the article in
# 1988 said that DST started at 2:00 AM in that year.
+# From Phake Nick (2018-10-27):
+# 1. According to official announcement from Korean government, the DST end
+# date in South Korea should be
+# 1955-09-08 without specifying time
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027977557
+# 1956-09-29 without specifying time
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027978341
+# 1957-09-21 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027979690#3
+# 1958-09-20 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027981189
+# 1959-09-19 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027982974#2
+# 1960-09-17 24 o'clock
+# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0028044104
+# ...
+# 2.... https://namu.wiki/w/대한민국%20표준시 ... [says]
+# when Korea was using GMT+8:30 as standard time, the international
+# aviation/marine/meteorological industry in the country refused to
+# follow and continued to use GMT+9:00 for interoperability.
+
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule ROK 1948 only - Jun 1 0:00 1:00 D
-Rule ROK 1948 only - Sep 13 0:00 0 S
-Rule ROK 1949 only - Apr 3 0:00 1:00 D
-Rule ROK 1949 1951 - Sep Sun>=8 0:00 0 S
-Rule ROK 1950 only - Apr 1 0:00 1:00 D
-Rule ROK 1951 only - May 6 0:00 1:00 D
-Rule ROK 1955 only - May 5 0:00 1:00 D
-Rule ROK 1955 only - Sep 9 0:00 0 S
-Rule ROK 1956 only - May 20 0:00 1:00 D
-Rule ROK 1956 only - Sep 30 0:00 0 S
-Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
-Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S
-Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
-Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
+Rule ROK 1948 only - Jun 1 0:00 1:00 D
+Rule ROK 1948 only - Sep 12 24:00 0 S
+Rule ROK 1949 only - Apr 3 0:00 1:00 D
+Rule ROK 1949 1951 - Sep Sat>=7 24:00 0 S
+Rule ROK 1950 only - Apr 1 0:00 1:00 D
+Rule ROK 1951 only - May 6 0:00 1:00 D
+Rule ROK 1955 only - May 5 0:00 1:00 D
+Rule ROK 1955 only - Sep 8 24:00 0 S
+Rule ROK 1956 only - May 20 0:00 1:00 D
+Rule ROK 1956 only - Sep 29 24:00 0 S
+Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
+Rule ROK 1957 1960 - Sep Sat>=17 24:00 0 S
+Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
# From Paul Eggert (2016-08-23):
# The Korean Wikipedia entry gives the following sources for UT offsets:
@@ -2880,9 +3110,15 @@
# the official website, though the decree did not specify the exact
# time of the time shift.
# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
+
+# From Even Scharning (2019-03-23):
+# DST in Palestine will start on 30 March this year, not 23 March as the time
+# zone database predicted.
+# https://ramallah.news/post/123610
#
-# From Paul Eggert (2018-03-16):
-# For 2016 on, predict spring transitions on March's fourth Saturday at 01:00.
+# From Tim Parenti (2019-03-23):
+# Combining this with the rules observed since 2016, adjust our spring
+# transition guess to Mar Sat>=24.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -2913,7 +3149,7 @@
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
-Rule Palestine 2016 max - Mar Sat>=22 1:00 1:00 S
+Rule Palestine 2016 max - Mar Sat>=24 1:00 1:00 S
Rule Palestine 2016 max - Oct lastSat 1:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2941,6 +3177,11 @@
# no information
# Philippines
+
+# From Paul Eggert (2018-11-18):
+# The Spanish initially used American (west-of-Greenwich) time.
+# It is unknown what time Manila kept when the British occupied it from
+# 1762-10-06 through 1764-04; for now assume it kept American time.
# On 1844-08-16, Narciso Clavería, governor-general of the
# Philippines, issued a proclamation announcing that 1844-12-30 was to
# be immediately followed by 1845-01-01; see R.H. van Gent's
@@ -3026,8 +3267,8 @@
# going to run on Higgins Time.' And so, until last year, it did." See:
# Antar E. Dinner at When? Saudi Aramco World, 1969 March/April. 2-3.
# http://archive.aramcoworld.com/issue/196902/dinner.at.when.htm
-# newspapers.com says a similar story about Higgins was published in the Port
-# Angeles (WA) Evening News, 1965-03-10, page 5, but I lack access to the text.
+# Also see: Antar EN. Arabian flying is confusing.
+# Port Angeles (WA) Evening News. 1965-03-10. page 3.
#
# The TZ database cannot represent quasi-solar time; airline time is the best
# we can do. The 1946 foreign air news digest of the U.S. Civil Aeronautics
@@ -3400,5 +3641,17 @@
8:00 - +08 1975 Jun 13
7:00 - +07
+# From Paul Eggert (2019-02-19):
+#
+# The Ho Chi Minh entry suffices for most purposes as it agrees with all of
+# Vietnam since 1975-06-13. Presumably clocks often changed in south Vietnam
+# in the early 1970s as locations changed hands during the war; however the
+# details are unknown and would likely be too voluminous for this database.
+#
+# For timestamps in north Vietnam back to 1970 (the tzdb cutoff),
+# use Asia/Bangkok; see the VN entries in the file zone1970.tab.
+# For timestamps before 1970, see Asia/Hanoi in the file 'backzone'.
+
+
# Yemen
# See Asia/Riyadh.
--- a/test/jdk/sun/util/calendar/zi/tzdata/australasia Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/australasia Thu Jul 11 15:40:29 2019 +0530
@@ -423,10 +423,44 @@
# it is uninhabited.
# Guam
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+# http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf
+# http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf
+Rule Guam 1959 only - Jun 27 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-61-5-Revocation-of-Daylight-Saving-Time-and-Restoratio.pdf
+Rule Guam 1961 only - Jan 29 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-67-13-Guam-Daylight-Savings-Time.pdf
+Rule Guam 1967 only - Sep 1 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-69-2-Repeal-of-Guam-Daylight-Saving-Time.pdf
+Rule Guam 1969 only - Jan 26 0:01 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-69-10-Guam-Daylight-Saving-Time.pdf
+Rule Guam 1969 only - Jun 22 2:00 1:00 D
+Rule Guam 1969 only - Aug 31 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-70-10-Guam-Daylight-Saving-Time.pdf
+# http://documents.guam.gov/wp-content/uploads/E.O.-70-30-End-of-Guam-Daylight-Saving-Time.pdf
+# http://documents.guam.gov/wp-content/uploads/E.O.-71-5-Guam-Daylight-Savings-Time.pdf
+Rule Guam 1970 1971 - Apr lastSun 2:00 1:00 D
+Rule Guam 1970 1971 - Sep Sun>=1 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-73-28.-Guam-Day-light-Saving-Time.pdf
+Rule Guam 1973 only - Dec 16 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-74-7-Guam-Daylight-Savings-Time-Rescinded.pdf
+Rule Guam 1974 only - Feb 24 2:00 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-76-13-Daylight-Savings-Time.pdf
+Rule Guam 1976 only - May 26 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-76-25-Revocation-of-E.O.-76-13.pdf
+Rule Guam 1976 only - Aug 22 2:01 0 S
+# http://documents.guam.gov/wp-content/uploads/E.O.-77-4-Daylight-Savings-Time.pdf
+Rule Guam 1977 only - Apr 24 2:00 1:00 D
+# http://documents.guam.gov/wp-content/uploads/E.O.-77-18-Guam-Standard-Time.pdf
+Rule Guam 1977 only - Aug 28 2:00 0 S
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
9:39:00 - LMT 1901 # Agana
- 10:00 - GST 2000 Dec 23 # Guam
+ 10:00 - GST 1941 Dec 10 # Guam
+ 9:00 - +09 1944 Jul 31
+ 10:00 Guam G%sT 2000 Dec 23
10:00 - ChST # Chamorro Standard Time
Link Pacific/Guam Pacific/Saipan # N Mariana Is
@@ -448,31 +482,56 @@
# Marshall Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Majuro 11:24:48 - LMT 1901
- 11:00 - +11 1969 Oct
- 12:00 - +12
-Zone Pacific/Kwajalein 11:09:20 - LMT 1901
- 11:00 - +11 1969 Oct
- -12:00 - -12 1993 Aug 20
- 12:00 - +12
+Zone Pacific/Majuro 11:24:48 - LMT 1901
+ 11:00 - +11 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1944 Jan 30
+ 11:00 - +11 1969 Oct
+ 12:00 - +12
+Zone Pacific/Kwajalein 11:09:20 - LMT 1901
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1944 Feb 6
+ 11:00 - +11 1969 Oct
+ -12:00 - -12 1993 Aug 20 24:00
+ 12:00 - +12
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Chuuk 10:07:08 - LMT 1901
- 10:00 - +10
-Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
- 11:00 - +11
-Zone Pacific/Kosrae 10:51:56 - LMT 1901
- 11:00 - +11 1969 Oct
- 12:00 - +12 1999
- 11:00 - +11
+Zone Pacific/Chuuk -13:52:52 - LMT 1844 Dec 31
+ 10:07:08 - LMT 1901
+ 10:00 - +10 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1945 Aug
+ 10:00 - +10
+Zone Pacific/Pohnpei -13:27:08 - LMT 1844 Dec 31 # Kolonia
+ 10:32:52 - LMT 1901
+ 11:00 - +11 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1945 Aug
+ 11:00 - +11
+Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
+ 10:51:56 - LMT 1901
+ 11:00 - +11 1914 Oct
+ 9:00 - +09 1919 Feb 1
+ 11:00 - +11 1937
+ 10:00 - +10 1941 Apr 1
+ 9:00 - +09 1945 Aug
+ 11:00 - +11 1969 Oct
+ 12:00 - +12 1999
+ 11:00 - +11
# Nauru
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
- 11:30 - +1130 1942 Mar 15
- 9:00 - +09 1944 Aug 15
- 11:30 - +1130 1979 May
+ 11:30 - +1130 1942 Aug 29
+ 9:00 - +09 1945 Sep 8
+ 11:30 - +1130 1979 Feb 10 2:00
12:00 - +12
# New Caledonia
@@ -573,8 +632,9 @@
# Palau (Belau)
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
- 9:00 - +09
+Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
+ 8:57:56 - LMT 1901
+ 9:00 - +09
# Papua New Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -836,7 +896,7 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2017-02-10):
+# From Paul Eggert (2018-11-18):
#
# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
@@ -861,6 +921,7 @@
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
+# I invented the abbreviation marked "*".
# The following abbreviations are from other sources.
# Corrections are welcome!
# std dst
@@ -868,7 +929,7 @@
# 8:00 AWST AWDT Western Australia
# 9:30 ACST ACDT Central Australia
# 10:00 AEST AEDT Eastern Australia
-# 10:00 GST Guam through 2000
+# 10:00 GST GDT* Guam through 2000
# 10:00 ChST Chamorro
# 11:30 NZMT NZST New Zealand through 1945
# 12:00 NZST NZDT New Zealand 1946-present
@@ -1567,28 +1628,70 @@
# Kwajalein
-# In comp.risks 14.87 (26 August 1993), Peter Neumann writes:
-# I wonder what happened in Kwajalein, where there was NO Friday,
-# 1993-08-20. Thursday night at midnight Kwajalein switched sides with
-# respect to the International Date Line, to rejoin its fellow islands,
-# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink.
+# From an AP article (1993-08-22):
+# "The nearly 3,000 Americans living on this remote Pacific atoll have a good
+# excuse for not remembering Saturday night: there wasn't one. Residents were
+# going to bed Friday night and waking up Sunday morning because at midnight
+# -- 8 A.M. Eastern daylight time on Saturday -- Kwajalein was jumping from
+# one side of the international date line to the other."
+# "In Marshall Islands, Friday is followed by Sunday", NY Times. 1993-08-22.
+# https://www.nytimes.com/1993/08/22/world/in-marshall-islands-friday-is-followed-by-sunday.html
+
+# From Phake Nick (2018-10-27):
+# <https://wiki.suikawiki.org/n/南洋群島の標準時> ... pointed out that
+# currently tzdata say Pacific/Kwajalein switched from GMT+11 to GMT-12 in
+# 1969 October without explanation, however an 1993 article from NYT say it
+# synchorized its day with US mainland about 40 years ago and thus the switch
+# should occur at around 1950s instead.
+#
+# From Paul Eggert (2018-11-18):
+# The NYT (actually, AP) article is vague and possibly wrong about this.
+# The article says the earlier switch was "40 years ago when the United States
+# Army established a missile test range here". However, the Kwajalein Test
+# Center was established on 1960-10-01 and was run by the US Navy. It was
+# transferred to the US Army on 1964-07-01. See "Seize the High Ground"
+# <https://history.army.mil/html/books/070/70-88-1/cmhPub_70-88-1.pdf>.
+# Given that Shanks was right on the money about the 1993 change, I'm inclined
+# to take Shanks's word for the 1969 change unless we find better evidence.
# N Mariana Is, Guam
+# From Phake Nick (2018-10-27):
+# Guam Island was briefly annexed by Japan during ... year 1941-1944 ...
+# however there are no detailed information about what time it use during that
+# period. It would probably be reasonable to assume Guam use GMT+9 during
+# that period of time like the surrounding area.
+
+# From Paul Eggert (2018-11-18):
# Howse writes (p 153) "The Spaniards, on the other hand, reached the
# Philippines and the Ladrones from America," and implies that the Ladrones
# (now called the Marianas) kept American date for quite some time.
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.
-
+#
+# Use 1941-12-10 and 1944-07-31 for Guam WWII transitions, as the rough start
+# and end of Japanese control of Agana. We don't know whether the Northern
+# Marianas followed Guam's DST rules from 1959 through 1977; for now, assume
+# they did as that avoids the need for a separate zone due to our 1970 cutoff.
+#
# US Public Law 106-564 (2000-12-23) made UT +10 the official standard time,
# under the name "Chamorro Standard Time". There is no official abbreviation,
# but Congressman Robert A. Underwood, author of the bill that became law,
# wrote in a press release (2000-12-27) that he will seek the use of "ChST".
+# See also the commentary for Micronesia.
-# Micronesia
+
+# Marshall Is
+# See the commentary for Micronesia.
+
+
+# Micronesia (and nearby)
+
+# From Paul Eggert (2018-11-18):
+# Like the Ladrones (see Guam commentary), assume the Spanish East Indies
+# kept American time until the Philippines switched at the end of 1844.
# Alan Eugene Davis writes (1996-03-16),
# "I am certain, having lived there for the past decade, that 'Truk'
@@ -1604,6 +1707,95 @@
# that Truk and Yap are UT +10, and Ponape and Kosrae are +11.
# We don't know when Kosrae switched from +12; assume January 1 for now.
+# From Phake Nick (2018-10-27):
+#
+# From a Japanese wiki site https://wiki.suikawiki.org/n/南洋群島の標準時
+# ...
+# For "Southern Islands" (modern region of Mariana + Palau + Federation of
+# Micronesia + Marshall Islands):
+#
+# A 1906 Japanese magazine shown the Caroline Islands and Mariana Islands
+# who was occupied by Germany at the time as GMT+10, together with the like
+# of German New Guinea. However there is a marking saying it have not been
+# implemented (yet). No further information after that were found.
+#
+# Japan invaded those islands in 1914, and records shows that they were
+# instructed to use JST at the time.
+#
+# 1915 January telecommunication record on the Jaluit Atoll shows they use
+# the meridian of 170E as standard time (GMT+11:20), which is similar to the
+# longitude of the atoll.
+# 1915 February record say the 170E standard time is to be used until
+# February 9 noon, and after February 9 noon they are to use JST.
+# However these are time used within the Japanese Military at the time and
+# probably does not reflect the time used by local resident at the time (that
+# is if they keep their own time back then)
+#
+# In January 1919 the occupying force issued a command that split the area
+# into three different timezone with meridian of 135E, 150E, 165E (JST+0, +1,
+# +2), and the command was to become effective from February 1 of the same
+# year. Despite the target of the command is still only for the occupying
+# force itself, further publication have described the time as the standard
+# time for the occupied area and thus it can probably be seen as such.
+# * Area that use meridian of 135E: Palau and Yap civil administration area
+# (Southern Islands Western Standard Time)
+# * Area that use meridian of 150E: Truk (Chuuk) and Saipan civil
+# administration area (Southern Islands Central Standard Time)
+# * Area that use meridian of 165E: Ponape (Pohnpei) and Jaluit civil
+# administration area (Southern Islands Eastern Standard Time).
+# * In the next few years Japanese occupation of those islands have been
+# formalized via League of Nation Mandate (South Pacific Mandate) and formal
+# governance structure have been established, these district [become
+# subprefectures] and timezone classification have been inherited as standard
+# time of the area.
+# * Saipan subprefecture include Mariana islands (exclude Guam which was
+# occupied by America at the time), Palau and Yap subprefecture rule the
+# Western Caroline Islands with 137E longitude as border, Truk and Ponape
+# subprefecture rule the Eastern Caroline Islands with 154E as border, Ponape
+# subprefecture also rule part of Marshall Islands to the west of 164E
+# starting from (1918?) and Jaluit subprefecture rule the rest of the
+# Marshall Islands.
+#
+# And then in year 1937, an announcement was made to change the time in the
+# area into 2 timezones:
+# * Area that use meridian of 135E: area administered by Palau, Yap and
+# Saipan subprefecture (Southern Islands Western Standard Time)
+# * Area that use meridian of 150E: area administered by Truk (Chuuk),
+# Ponape (Pohnpei) and Jaluit subprefecture (Southern Islands Eastern
+# Standard Time)
+#
+# Another announcement issued in 1941 say that on April 1 that year,
+# standard time of the Southern Islands would be changed to use the meridian
+# of 135E (GMT+9), and thus abolishing timezone different within the area.
+#
+# Then Pacific theater of WWII started and Japan slowly lose control on the
+# island. The webpage I linked above contain no information during this
+# period of time....
+#
+# After the end of WWII, in 1946 February, a document written by the
+# (former?) Japanese military personnel describe there are 3 hours time
+# different between Caroline islands time/Wake island time and the Chungking
+# time, which would mean the time being used there at the time was GMT+10.
+#
+# After that, the area become Trust Territories of the Pacific Islands
+# under American administration from year 1947. The site listed some
+# American/International books/maps/publications about time used in those
+# area during this period of time but they doesn't seems to be reliable
+# information so it would be the best if someone know where can more reliable
+# information can be found.
+#
+#
+# From Paul Eggert (2018-11-18):
+#
+# For the above, use vague dates like "1914" and "1945" for transitions that
+# plausibly exist but for which the details are not known. The information
+# for Wake is too sketchy to act on.
+#
+# The 1906 GMT+10 info about German-controlled islands might not have been
+# done, so omit it from the data for now.
+#
+# The Jaluit info governs Kwajalein.
+
# Midway
@@ -1621,6 +1813,29 @@
# started DST on June 3. Possibly DST was observed other years
# in Midway, but we have no record of it.
+# Nauru
+
+# From Phake Nick (2018-10-31):
+# Currently, the tz database say Nauru use LMT until 1921, and then
+# switched to GMT+11:30 for the next two decades.
+# However, a number of timezone map published in America/Japan back then
+# showed its timezone as GMT+11 per https://wiki.suikawiki.org/n/ナウルの標準時
+# And it would also be nice if the 1921 transition date could be sourced.
+# ...
+# The "Nauru Standard Time Act 1978 Time Change"
+# http://ronlaw.gov.nr/nauru_lpms/files/gazettes/4b23a17d2030150404db7a5fa5872f52.pdf#page=3
+# based on "Nauru Standard Time Act 1978 Time Change"
+# http://www.paclii.org/nr/legis/num_act/nsta1978207/ defined that "Nauru
+# Alternative Time" (GMT+12) should be in effect from 1979 Feb.
+#
+# From Paul Eggert (2018-11-19):
+# The 1921-01-15 introduction of standard time is in Shanks; it is also in
+# "Standard Time Throughout the World", US National Bureau of Standards (1935),
+# page 3, which does not give the UT offset. In response to a comment by
+# Phake Nick I set the Nauru time of occupation by Japan to
+# 1942-08-29/1945-09-08 by using dates from:
+# https://en.wikipedia.org/wiki/Japanese_occupation_of_Nauru
+
# Norfolk
# From Alexander Krivenyshev (2015-09-23):
@@ -1636,6 +1851,9 @@
# other than in 1974/5. See:
# https://www.timeanddate.com/time/australia/norfolk-island.html
+# Palau
+# See commentary for Micronesia.
+
# Pitcairn
# From Rives McDow (1999-11-08):
@@ -1800,6 +2018,9 @@
# From Paul Eggert (2003-03-23):
# We have no other report of DST in Wake Island, so omit this info for now.
+# See also the commentary for Micronesia.
+
+
###############################################################################
# The International Date Line
--- a/test/jdk/sun/util/calendar/zi/tzdata/backward Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/backward Thu Jul 11 15:40:29 2019 +0530
@@ -98,6 +98,7 @@
Link America/Havana Cuba
Link Africa/Cairo Egypt
Link Europe/Dublin Eire
+Link Etc/UTC Etc/UCT
Link Europe/London Europe/Belfast
Link Europe/Chisinau Europe/Tiraspol
Link Europe/London GB
@@ -132,7 +133,7 @@
Link Asia/Seoul ROK
Link Asia/Singapore Singapore
Link Europe/Istanbul Turkey
-Link Etc/UCT UCT
+Link Etc/UTC UCT
Link America/Anchorage US/Alaska
Link America/Adak US/Aleutian
Link America/Phoenix US/Arizona
--- a/test/jdk/sun/util/calendar/zi/tzdata/etcetera Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/etcetera Thu Jul 11 15:40:29 2019 +0530
@@ -40,7 +40,6 @@
Zone Etc/GMT 0 - GMT
Zone Etc/UTC 0 - UTC
-Zone Etc/UCT 0 - UCT
# The following link uses older naming conventions,
# but it belongs here, not in the file 'backward',
--- a/test/jdk/sun/util/calendar/zi/tzdata/europe Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/europe Thu Jul 11 15:40:29 2019 +0530
@@ -1876,7 +1876,7 @@
1:00 Belgium CE%sT 1977
1:00 EU CE%sT
-# Macedonia
+# North Macedonia
# See Europe/Belgrade.
# Malta
@@ -3380,7 +3380,7 @@
Link Europe/Belgrade Europe/Ljubljana # Slovenia
Link Europe/Belgrade Europe/Podgorica # Montenegro
Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
-Link Europe/Belgrade Europe/Skopje # Macedonia
+Link Europe/Belgrade Europe/Skopje # North Macedonia
Link Europe/Belgrade Europe/Zagreb # Croatia
# Slovakia
--- a/test/jdk/sun/util/calendar/zi/tzdata/iso3166.tab Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/iso3166.tab Thu Jul 11 15:40:29 2019 +0530
@@ -30,8 +30,8 @@
# All text uses UTF-8 encoding. The columns of the table are as follows:
#
# 1. ISO 3166-1 alpha-2 country code, current as of
-# ISO 3166-1 N905 (2016-11-15). See: Updates on ISO 3166-1
-# http://isotc.iso.org/livelink/livelink/Open/16944257
+# ISO 3166-1 N976 (2018-11-06). See: Updates on ISO 3166-1
+# https://isotc.iso.org/livelink/livelink/Open/16944257
# 2. The usual English name for the coded region,
# chosen so that alphabetic sorting of subsets produces helpful lists.
# This is not the same as the English name in the ISO 3166 tables.
@@ -187,7 +187,7 @@
MF St Martin (French)
MG Madagascar
MH Marshall Islands
-MK Macedonia
+MK North Macedonia
ML Mali
MM Myanmar (Burma)
MN Mongolia
@@ -256,7 +256,7 @@
SV El Salvador
SX St Maarten (Dutch)
SY Syria
-SZ Swaziland
+SZ Eswatini (Swaziland)
TC Turks & Caicos Is
TD Chad
TF French Southern & Antarctic Lands
--- a/test/jdk/sun/util/calendar/zi/tzdata/leapseconds Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/leapseconds Thu Jul 11 15:40:29 2019 +0530
@@ -40,9 +40,12 @@
# See: Levine J. Coordinated Universal Time and the leap second.
# URSI Radio Sci Bull. 2016;89(4):30-6. doi:10.23919/URSIRSB.2016.7909995
# <https://ieeexplore.ieee.org/document/7909995>.
+
# There were no leap seconds before 1972, because the official mechanism
# accounting for the discrepancy between atomic time and the earth's rotation
-# did not exist.
+# did not exist. The first ("1 Jan 1972") data line in leap-seconds.list
+# does not denote a leap second; it denotes the start of the current definition
+# of UTC.
# The correction (+ or -) is made at the given time, so lines
# will typically look like:
@@ -81,7 +84,7 @@
# POSIX timestamps for the data in this file:
#updated 1467936000
-#expires 1561680000
+#expires 1577491200
-# Updated through IERS Bulletin C56
-# File expires on: 28 June 2019
+# Updated through IERS Bulletin C57
+# File expires on: 28 December 2019
--- a/test/jdk/sun/util/calendar/zi/tzdata/northamerica Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/northamerica Thu Jul 11 15:40:29 2019 +0530
@@ -620,6 +620,26 @@
# between AKST and AKDT from now on....
# https://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/
+# From Ryan Stanley (2018-11-06):
+# The Metlakatla community in Alaska has decided not to change its
+# clock back an hour starting on November 4th, 2018 (day before yesterday).
+# They will be gmtoff=-28800 year-round.
+# https://www.facebook.com/141055983004923/photos/pb.141055983004923.-2207520000.1541465673./569081370202380/
+
+# From Paul Eggert (2018-12-16):
+# In a 2018-12-11 special election, Metlakatla voted to go back to
+# Alaska time (including daylight saving time) starting next year.
+# https://www.krbd.org/2018/12/12/metlakatla-to-follow-alaska-standard-time-allow-liquor-sales/
+#
+# From Ryan Stanley (2019-01-11):
+# The community will be changing back on the 20th of this month...
+# From Tim Parenti (2019-01-11):
+# Per an announcement on the Metlakatla community's official Facebook page, the
+# "fall back" will be on Sunday 2019-01-20 at 02:00:
+# https://www.facebook.com/141055983004923/photos/607150969728753/
+# So they won't be waiting for Alaska to join them on 2019-03-10, but will
+# rather change their clocks twice in seven weeks.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Juneau 15:02:19 - LMT 1867 Oct 19 15:33:32
-8:57:41 - LMT 1900 Aug 20 12:00
@@ -646,6 +666,8 @@
-8:00 - PST 1969
-8:00 US P%sT 1983 Oct 30 2:00
-8:00 - PST 2015 Nov 1 2:00
+ -9:00 US AK%sT 2018 Nov 4 2:00
+ -8:00 - PST 2019 Jan 20 2:00
-9:00 US AK%sT
Zone America/Yakutat 14:41:05 - LMT 1867 Oct 19 15:12:18
-9:18:55 - LMT 1900 Aug 20 12:00
@@ -806,6 +828,22 @@
# For a map of Indiana's time zone regions, see:
# https://en.wikipedia.org/wiki/Time_in_Indiana
#
+# From Paul Eggert (2018-11-30):
+# A brief but entertaining history of time in Indiana describes a 1949 debate
+# in the Indiana House where city legislators (who favored "fast time")
+# tussled with farm legislators (who didn't) over a bill to outlaw DST:
+# "Lacking enough votes, the city faction tries to filibuster until time runs
+# out on the session at midnight, but rural champion Rep. Herbert Copeland,
+# R-Madison, leans over the gallery railing and forces the official clock
+# back to 9 p.m., breaking it in the process. The clock sticks on 9 as the
+# debate rages on into the night. The filibuster finally dies out and the
+# bill passes, while outside the chamber, clocks read 3:30 a.m. In the end,
+# it doesn't matter which side won. The law has no enforcement powers and
+# is simply ignored by fast-time communities."
+# How Indiana went from 'God's time' to split zones and daylight-saving.
+# Indianapolis Star. 2018-11-27 14:58 -05.
+# https://www.indystar.com/story/news/politics/2018/11/27/indianapolis-indiana-time-zone-history-central-eastern-daylight-savings-time/2126300002/
+#
# From Paul Eggert (2007-08-17):
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
# with the following exceptions:
--- a/test/jdk/sun/util/calendar/zi/tzdata/zone.tab Tue Jul 09 17:05:20 2019 +0530
+++ b/test/jdk/sun/util/calendar/zi/tzdata/zone.tab Thu Jul 11 15:40:29 2019 +0530
@@ -260,6 +260,7 @@
KY +1918-08123 America/Cayman
KZ +4315+07657 Asia/Almaty Kazakhstan (most areas)
KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda
+KZ +5312+06337 Asia/Qostanay Qostanay/Kostanay/Kustanay
KZ +5017+05710 Asia/Aqtobe Aqtobe/Aktobe
KZ +4431+05016 Asia/Aqtau Mangghystau/Mankistau
KZ +4707+05156 Asia/Atyrau Atyrau/Atirau/Gur'yev
@@ -353,9 +354,9 @@
RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
-RU +4844+04425 Europe/Volgograd MSK+00 - Volgograd
RU +5836+04939 Europe/Kirov MSK+00 - Kirov
RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
+RU +4844+04425 Europe/Volgograd MSK+01 - Volgograd
RU +5134+04602 Europe/Saratov MSK+01 - Saratov
RU +5420+04824 Europe/Ulyanovsk MSK+01 - Ulyanovsk
RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/api/TestGetScopeBinaryNames.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,291 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8223443
+ * @summary Verify binary names are not changed and are correct
+ * when using Trees.getScope
+ * @modules jdk.compiler
+ */
+
+import com.sun.source.tree.ClassTree;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.element.NestingKind;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.Elements;
+import javax.tools.JavaCompiler;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.ToolProvider;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.Scope;
+import com.sun.source.tree.Tree;
+import com.sun.source.tree.Tree.Kind;
+import com.sun.source.util.JavacTask;
+import com.sun.source.util.TaskEvent;
+import com.sun.source.util.TaskListener;
+import com.sun.source.util.TreePath;
+import com.sun.source.util.TreePathScanner;
+import com.sun.source.util.Trees;
+
+import static javax.tools.JavaFileObject.Kind.SOURCE;
+
+public class TestGetScopeBinaryNames {
+ public static void main(String... args) throws IOException {
+ new TestGetScopeBinaryNames().run();
+ }
+
+ public void run() throws IOException {
+ class EnclosingDesc {
+ final String code;
+ final boolean supportsLocal;
+ public EnclosingDesc(String code, boolean supportsLocal) {
+ this.code = code;
+ this.supportsLocal = supportsLocal;
+ }
+ }
+ List<EnclosingDesc> enclosingEnvs = List.of(
+ new EnclosingDesc("class Test {" +
+ " void test() {" +
+ " $" +
+ " }" +
+ "}",
+ true),
+ new EnclosingDesc("class Test {" +
+ " {" +
+ " $" +
+ " }" +
+ "}",
+ true),
+ new EnclosingDesc("class Test {" +
+ " static {" +
+ " $" +
+ " }" +
+ "}",
+ true),
+ new EnclosingDesc("class Test {" +
+ " Object I = $" +
+ "}",
+ true)
+ );
+ class LocalDesc {
+ final String localCode;
+ final boolean isLocalClass;
+ public LocalDesc(String localCode, boolean isLocalClass) {
+ this.localCode = localCode;
+ this.isLocalClass = isLocalClass;
+ }
+ }
+ List<LocalDesc> locals = List.of(
+ new LocalDesc("new A() {" +
+ " class AI extends B {" +
+ " class AII extends C {" +
+ " private void t() {" +
+ " new D() { class DI extends E {} };" +
+ " }" +
+ " }" +
+ " private void t() { new F() {}; }" +
+ " }" +
+ " private void t() { new G() {}; }" +
+ "};",
+ false),
+ new LocalDesc("class AA extends A {" +
+ " class AI extends B {" +
+ " class AII extends C {" +
+ " private void t() {" +
+ " new D() { class DI extends E {} };" +
+ " }" +
+ " }" +
+ " private void t() { new F() {}; }" +
+ " }" +
+ " private void t() { new G() {}; }" +
+ "}",
+ false)
+ );
+ String markerClasses = "class A {} class B {} class C {}" +
+ "class D {} class E {} class F {}" +
+ "class G {}";
+ for (EnclosingDesc enclosing : enclosingEnvs) {
+ for (LocalDesc local : locals) {
+ if (!local.isLocalClass || enclosing.supportsLocal) {
+ doTest(enclosing.code.replace("$", local.localCode) +
+ markerClasses);
+ }
+ }
+ }
+ }
+
+ void doTest(String code, String... expected) throws IOException {
+ Map<String, String> name2BinaryName = new HashMap<>();
+ Map<String, String> name2QualifiedName = new HashMap<>();
+
+ computeNames(code, name2BinaryName, name2QualifiedName);
+
+ JavaCompiler c = ToolProvider.getSystemJavaCompiler();
+ JavacTask t = (JavacTask) c.getTask(null, null, null, null, null,
+ List.of(new MyFileObject(code)));
+ CompilationUnitTree cut = t.parse().iterator().next();
+ Trees trees = Trees.instance(t);
+
+ t.addTaskListener(new TaskListener() {
+ @Override
+ public void finished(TaskEvent e) {
+ if (e.getKind() == TaskEvent.Kind.ENTER) {
+ new TreePathScanner<Void, Void>() {
+ @Override
+ public Void scan(Tree tree, Void p) {
+ if (tree != null &&
+ !isInExtendsClause(getCurrentPath(), tree)) {
+ TreePath path =
+ new TreePath(getCurrentPath(), tree);
+ Scope scope = trees.getScope(path);
+ checkScope(t.getElements(), scope,
+ name2BinaryName, name2QualifiedName);
+ }
+ return super.scan(tree, p);
+ }
+ }.scan(cut, null);
+ }
+ }
+ });
+
+ t.analyze();
+
+ new TreePathScanner<Void, Void>() {
+ @Override
+ public Void visitClass(ClassTree node, Void p) {
+ TypeElement type =
+ (TypeElement) trees.getElement(getCurrentPath());
+ checkClass(t.getElements(), type,
+ name2BinaryName, name2QualifiedName);
+ return super.visitClass(node, p);
+ }
+ }.scan(cut, null);
+
+ new TreePathScanner<Void, Void>() {
+ @Override
+ public Void scan(Tree tree, Void p) {
+ if (tree != null &&
+ !isInExtendsClause(getCurrentPath(), tree)) {
+ TreePath path =
+ new TreePath(getCurrentPath(), tree);
+ Scope scope = trees.getScope(path);
+ checkScope(t.getElements(), scope,
+ name2BinaryName, name2QualifiedName);
+ }
+ return super.scan(tree, p);
+ }
+ }.scan(cut, null);
+ }
+
+ void computeNames(String code,
+ Map<String, String> name2BinaryName,
+ Map<String, String> name2QualifiedName) throws IOException {
+ JavaCompiler c = ToolProvider.getSystemJavaCompiler();
+ JavacTask t = (JavacTask) c.getTask(null, null, null, null, null,
+ List.of(new MyFileObject(code)));
+ CompilationUnitTree cut = t.parse().iterator().next();
+
+ t.analyze();
+
+ new TreePathScanner<Void, Void>() {
+ Trees trees = Trees.instance(t);
+ Elements els = t.getElements();
+ @Override
+ public Void visitClass(ClassTree node, Void p) {
+ TypeElement type =
+ (TypeElement) trees.getElement(getCurrentPath());
+ String key = type.getSuperclass().toString();
+
+ name2BinaryName.put(key, els.getBinaryName(type).toString());
+ name2QualifiedName.put(key, type.getQualifiedName().toString());
+ return super.visitClass(node, p);
+ }
+ }.scan(cut, null);
+ }
+
+ boolean isInExtendsClause(TreePath clazz, Tree toCheck) {
+ return clazz != null &&
+ clazz.getLeaf().getKind() == Kind.CLASS &&
+ ((ClassTree) clazz.getLeaf()).getExtendsClause() == toCheck;
+ }
+
+ void checkClass(Elements els, TypeElement type,
+ Map<String, String> name2BinaryName,
+ Map<String, String> name2QualifiedName) {
+ if (type.getNestingKind() == NestingKind.TOP_LEVEL ||
+ type.getNestingKind() == NestingKind.MEMBER) {
+ return ;
+ }
+
+ String binaryName = name2BinaryName.get(type.getSuperclass().toString());
+
+ if (!els.getBinaryName(type).contentEquals(binaryName)) {
+ throw new AssertionError("Unexpected: " + els.getBinaryName(type));
+ }
+
+ String qualifiedName = name2QualifiedName.get(type.getSuperclass().toString());
+
+ if (qualifiedName != null) {
+ if (!type.getQualifiedName().contentEquals(qualifiedName)) {
+ throw new AssertionError("Unexpected: " + type.getQualifiedName() +
+ ", expected: " + qualifiedName);
+ }
+ }
+ }
+
+ void checkScope(Elements els, Scope scope,
+ Map<String, String> name2BinaryName,
+ Map<String, String> name2QualifiedName) {
+ while (scope != null) {
+ for (Element el : scope.getLocalElements()) {
+ if (el.getKind().isClass()) {
+ checkClass(els, (TypeElement) el,
+ name2BinaryName, name2QualifiedName);
+ }
+ }
+ scope = scope.getEnclosingScope();
+ }
+ }
+
+ class MyFileObject extends SimpleJavaFileObject {
+ private final String code;
+
+ MyFileObject(String code) {
+ super(URI.create("myfo:///Test.java"), SOURCE);
+ this.code = code;
+ }
+ @Override
+ public String getCharContent(boolean ignoreEncodingErrors) {
+ return code;
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/api/TestGetScopeErrors.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8223443
+ * @summary Verify errors are not reported when computing Scopes.
+ * @modules jdk.compiler
+ */
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.tools.Diagnostic;
+import javax.tools.DiagnosticListener;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.ToolProvider;
+
+import static javax.tools.JavaFileObject.Kind.SOURCE;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.Tree;
+import com.sun.source.util.JavacTask;
+import com.sun.source.util.TaskEvent;
+import com.sun.source.util.TaskListener;
+import com.sun.source.util.TreePath;
+import com.sun.source.util.TreePathScanner;
+import com.sun.source.util.Trees;
+
+public class TestGetScopeErrors {
+ public static void main(String... args) throws IOException {
+ new TestGetScopeErrors().run();
+ }
+
+ void run() throws IOException {
+ JavaCompiler c = ToolProvider.getSystemJavaCompiler();
+ String code =
+ "public class Test {" +
+ " private Object obj = new Object() {" +
+ " private Unresolvable u;" +
+ " };" +
+ " void test() {" +
+ " new Object() {" +
+ " private Unresolvable u;" +
+ " };" +
+ " }" +
+ "}";
+ class MyFileObject extends SimpleJavaFileObject {
+ MyFileObject() {
+ super(URI.create("myfo:///Test.java"), SOURCE);
+ }
+ @Override
+ public String getCharContent(boolean ignoreEncodingErrors) {
+ return code;
+ }
+ }
+ AtomicBoolean enterDone = new AtomicBoolean();
+ List<String> errors = new ArrayList<>();
+ DiagnosticListener<JavaFileObject> noErrors = d -> {
+ if (!enterDone.get() && d.getKind() == Diagnostic.Kind.ERROR) {
+ throw new AssertionError(d.toString());
+ }
+ errors.add(d.getSource().getName() + ":" +
+ d.getPosition() + ":" +
+ d.getCode());
+ };
+ JavacTask t =
+ (JavacTask) c.getTask(null, null, noErrors,
+ Arrays.asList("-XDrawDiagnostics"),
+ null, List.of(new MyFileObject()));
+ CompilationUnitTree cut = t.parse().iterator().next();
+ Trees trees = Trees.instance(t);
+ t.addTaskListener(new TaskListener() {
+ @Override
+ public void finished(TaskEvent e) {
+ if (e.getKind() == TaskEvent.Kind.ENTER) {
+ new TreePathScanner<Void, Void>() {
+ @Override
+ public Void scan(Tree tree, Void p) {
+ if (tree != null) {
+ TreePath path =
+ new TreePath(getCurrentPath(), tree);
+ trees.getScope(path);
+ }
+ return super.scan(tree, p);
+ }
+ }.scan(cut, null);
+ enterDone.set(true);
+ }
+ }
+ });
+
+ t.analyze();
+
+ List<String> expectedErrors = List.of(
+ "/Test.java:74:compiler.err.cant.resolve",
+ "/Test.java:154:compiler.err.cant.resolve"
+ );
+
+ if (!expectedErrors.equals(errors)) {
+ throw new IllegalStateException("Unexpected errors: " + errors);
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/switchexpr/LambdaCapture.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * 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 8220041
+ * @summary Verify variable capture works inside switch expressions which are
+ * inside variable declarations
+ * @compile --enable-preview -source ${jdk.version} LambdaCapture.java
+ */
+
+import java.util.Objects;
+
+public class LambdaCapture {
+ public static void main(String... args) {
+ new LambdaCapture().run();
+ }
+
+ void run() {
+ assertEquals("00", lambdaCapture1(0).t());
+ assertEquals("12", lambdaCapture1(1).t());
+ assertEquals("D", lambdaCapture1(2).t());
+ assertEquals("D", lambdaCapture1(3).t());
+ assertEquals("00", lambdaCapture2(0).t());
+ assertEquals("12", lambdaCapture2(1).t());
+ assertEquals("D", lambdaCapture2(2).t());
+ assertEquals("D", lambdaCapture2(3).t());
+ }
+
+ I<String> lambdaCapture1(int i) {
+ int j = i + 1;
+ I<String> r = switch (i) {
+ case 0 -> () -> "0" + i; //capture parameter
+ case 1 -> () -> "1" + j; //capture local variable
+ default -> {
+ String k = "D";
+ yield () -> k; //capture local from the switch expr.
+ }
+ };
+
+ return r;
+ }
+
+ I<String> lambdaCapture2(int i) {
+ int j = i + 1;
+
+ return switch (i) {
+ case 0 -> () -> "0" + i; //capture parameter
+ case 1 -> () -> "1" + j; //capture local variable
+ default -> {
+ String k = "D";
+ yield () -> k; //capture local from the switch expr.
+ }
+ };
+ }
+
+ {
+ int j1 = 1;
+ I<String> r1 = switch (j1) {
+ case 1 -> () -> "1" + j1; //capture local variable
+ default -> {
+ String k = "D";
+ yield () -> k; //capture local from the switch expr.
+ }
+ };
+ assertEquals("11", r1.t());
+
+ int j2 = 2;
+ I<String> r2 = switch (j2) {
+ case 1 -> () -> "1" + j2; //capture local variable
+ default -> {
+ String k = "D";
+ yield () -> k; //capture local from the switch expr.
+ }
+ };
+ assertEquals("D", r2.t());
+ }
+
+ private void assertEquals(Object expected, Object actual) {
+ if (!Objects.equals(expected, actual)) {
+ throw new AssertionError("Unexpected value: " + actual);
+ }
+ }
+
+ interface I<T> {
+ public T t();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/micro/org/openjdk/bench/vm/compiler/TypeVectorOperations.java Thu Jul 11 15:40:29 2019 +0530
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.bench.vm.compiler;
+
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.*;
+
+import java.util.concurrent.TimeUnit;
+import java.util.Random;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@State(Scope.Thread)
+public abstract class TypeVectorOperations {
+ @Param({"512","1024", "2048"})
+ public int COUNT;
+
+ private byte[] bytesA;
+ private byte[] bytesB;
+ private byte[] resB;
+ private short[] shorts;
+ private short[] resS;
+ private int[] ints;
+ private int[] resI;
+ private long[] longs;
+ private long[] resL;
+ private double[] doubles;
+ private double[] resD;
+ private float[] floats;
+ private float[] resF;
+
+ @Param("0")
+ private int seed;
+ private Random r = new Random(seed);
+
+ @Setup
+ public void init() {
+ bytesA = new byte[COUNT];
+ bytesB = new byte[COUNT];
+ resB = new byte[COUNT];
+ shorts = new short[COUNT];
+ resS = new short[COUNT];
+ ints = new int[COUNT];
+ resI = new int[COUNT];
+ longs = new long[COUNT];
+ resL = new long[COUNT];
+ doubles = new double[COUNT];
+ resD = new double[COUNT];
+ floats = new float[COUNT];
+ resF = new float[COUNT];
+
+ for (int i = 0; i < COUNT; i++) {
+ shorts[i] = (short) r.nextInt(Short.MAX_VALUE + 1);
+ ints[i] = r.nextInt();
+ longs[i] = r.nextLong();
+ floats[i] = r.nextFloat();
+ doubles[i] = r.nextDouble();
+ }
+
+ r.nextBytes(bytesA);
+ r.nextBytes(bytesB);
+
+ }
+
+ @Benchmark
+ public void absB() {
+ for (int i = 0; i < COUNT; i++) {
+ byte a = bytesA[i];
+ resB[i] = (byte) (Math.abs((byte) a));
+ }
+ }
+
+ @Benchmark
+ public void mulB() {
+ for (int i = 0; i < COUNT; i++) {
+ byte a = bytesA[i];
+ byte b = bytesB[i];
+ resI[i] = a * b;
+ }
+ }
+
+ @Benchmark
+ public void lShiftB() {
+ for (int i = 0; i < COUNT; i++) {
+ resB[i] = (byte) (bytesA[i] << 3);
+ }
+ }
+
+ @Benchmark
+ public void rShiftB() {
+ for (int i = 0; i < COUNT; i++) {
+ resB[i] = (byte) (bytesA[i] >> 3);
+ }
+ }
+
+ @Benchmark
+ public void urShiftB() {
+ for (int i = 0; i < COUNT; i++) {
+ resB[i] = (byte) (bytesA[i] >>> 3);
+ }
+ }
+
+ @Benchmark
+ public void absS() {
+ for (int i = 0; i < COUNT; i++) {
+ short a = shorts[i];
+ resS[i] = (short) (Math.abs((short) a));
+ }
+ }
+
+ @Benchmark
+ public void absI() {
+ for (int i = 0; i < COUNT; i++) {
+ int a = ints[i];
+ resI[i] = Math.abs(a);
+ }
+ }
+
+ @Benchmark
+ public void mulI() {
+ for (int i = 0; i < COUNT; i++) {
+ resI[i] = (ints[i] * ints[i]);
+ }
+ }
+
+ @Benchmark
+ public void mulL() {
+ for (int i = 0; i < COUNT; i++) {
+ resL[i] = (longs[i] * longs[i]);
+ }
+ }
+
+ @Benchmark
+ public void absL() {
+ for (int i = 0; i < COUNT; i++) {
+ long a = longs[i];
+ resL[i] = (long) (Math.abs((long) a));
+ }
+ }
+
+ @Benchmark
+ public void rShiftL() {
+ for (int i = 0; i < COUNT; i++) {
+ resL[i] = longs[i] >> 3;
+ }
+ }
+
+ @Benchmark
+ public void absF() {
+ for (int i = 0; i < COUNT; i++) {
+ float a = floats[i];
+ resF[i] = (float) (Math.abs(a));
+ }
+ }
+
+ @Benchmark
+ public void negF() {
+ for (int i = 0; i < COUNT; i++) {
+ resF[i] = -floats[i];
+ }
+ }
+
+ @Benchmark
+ public void absD() {
+ for (int i = 0; i < COUNT; i++) {
+ double a = doubles[i];
+ resD[i] = (double) (Math.abs(a));
+ }
+ }
+
+ @Benchmark
+ public void negD() {
+ for (int i = 0; i < COUNT; i++) {
+ resD[i] = -doubles[i];
+ }
+ }
+
+ @Fork(value = 1, jvmArgsPrepend = {
+ "-XX:+UseSuperWord"
+ })
+ public static class TypeVectorOperationsSuperWord extends TypeVectorOperations {
+
+ }
+
+ @Fork(value = 1, jvmArgsPrepend = {
+ "-XX:-UseSuperWord"
+ })
+ public static class TypeVectorOperationsNonSuperWord extends TypeVectorOperations {
+ }
+
+}