--- a/.hgtags Tue Jun 18 21:40:50 2019 -0700
+++ b/.hgtags Fri Jun 21 09:05:45 2019 -0700
@@ -562,3 +562,8 @@
181986c5476468bc2dd4532af49599003ee8af37 jdk-13+22
b034d2dee5fc93d42a81b65e58ce3f91e42586ff jdk-13+23
7e2238451585029680f126ccbb46d01f2ff5607f jdk-13+24
+22b3b7983adab54e318f75aeb94471f7a4429c1e jdk-14+0
+22b3b7983adab54e318f75aeb94471f7a4429c1e jdk-13+25
+2f4e214781a1d597ed36bf5a36f20928c6c82996 jdk-14+1
+0692b67f54621991ba7afbf23e55b788f3555e69 jdk-13+26
+43627549a488b7d0b4df8fad436e36233df89877 jdk-14+2
--- a/doc/building.md Tue Jun 18 21:40:50 2019 -0700
+++ b/doc/building.md Fri Jun 21 09:05:45 2019 -0700
@@ -871,6 +871,7 @@
* `CONF_CHECK`
* `COMPARE_BUILD`
* `JDK_FILTER`
+ * `SPEC_FILTER`
## Running Tests
--- a/make/Docs.gmk Tue Jun 18 21:40:50 2019 -0700
+++ b/make/Docs.gmk Fri Jun 21 09:05:45 2019 -0700
@@ -487,11 +487,25 @@
################################################################################
+# Use this variable to control which spec files are included in the output.
+# Format: space-delimited list of names, including at most one '%' as a
+# wildcard. Spec source files match if their filename or any enclosing folder
+# name matches one of the items in SPEC_FILTER.
+SPEC_FILTER := %
+
+ApplySpecFilter = \
+ $(strip $(foreach file, $(1), \
+ $(eval searchkeys := $(subst /, ,$(subst $(WORKSPACE_ROOT),,$(file)))) \
+ $(if $(filter $(SPEC_FILTER), $(searchkeys)), \
+ $(file) \
+ ) \
+ ))
+
# Copy the global resources, including the top-level redirect index.html
-GLOBAL_SPECS_RESOURCES_DIR := $(TOPDIR)/make/data/docs-resources/
+GLOBAL_SPECS_RESOURCES_DIR := $(TOPDIR)/make/data/docs-resources
$(eval $(call SetupCopyFiles, COPY_GLOBAL_RESOURCES, \
SRC := $(GLOBAL_SPECS_RESOURCES_DIR), \
- FILES := $(call FindFiles, $(GLOBAL_SPECS_RESOURCES_DIR)), \
+ FILES := $(call ApplySpecFilter, $(call FindFiles, $(GLOBAL_SPECS_RESOURCES_DIR))), \
DEST := $(DOCS_OUTPUTDIR), \
))
JDK_INDEX_TARGETS += $(COPY_GLOBAL_RESOURCES)
@@ -499,7 +513,7 @@
# Copy the legal notices distributed with the docs bundle
$(eval $(call SetupCopyFiles, COPY_DOCS_LEGAL_NOTICES, \
SRC := $(TOPDIR)/src/jdk.javadoc/share/legal, \
- FILES := $(wildcard $(TOPDIR)/src/jdk.javadoc/share/legal/*), \
+ FILES := $(call ApplySpecFilter, $(wildcard $(TOPDIR)/src/jdk.javadoc/share/legal/*)), \
DEST := $(DOCS_OUTPUTDIR)/legal, \
))
JDK_INDEX_TARGETS += $(COPY_DOCS_LEGAL_NOTICES)
@@ -516,10 +530,10 @@
$(foreach m, $(ALL_MODULES), \
$(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \
$(foreach d, $(SPECS_$m), \
- $(if $(filter $(COPY_SPEC_FILTER), $(call FindFiles, $d)), \
+ $(if $(call ApplySpecFilter, $(filter $(COPY_SPEC_FILTER), $(call FindFiles, $d))), \
$(eval $(call SetupCopyFiles, COPY_$m, \
SRC := $d, \
- FILES := $(filter $(COPY_SPEC_FILTER), $(call FindFiles, $d)), \
+ FILES := $(call ApplySpecFilter, $(filter $(COPY_SPEC_FILTER), $(call FindFiles, $d))), \
DEST := $(DOCS_OUTPUTDIR)/specs/, \
)) \
$(eval JDK_SPECS_TARGETS += $(COPY_$m)) \
@@ -527,31 +541,27 @@
) \
)
-# Create copyright footer files that can be provided as input to pandoc. We
-# need different files for different relative paths to the copyright.html
-# file. The number 0-2 below represent how many extra directory levels down
-# below the specs dir the specs html file is located. Each file name is
-# stored in a variable SPECS_BOTTOM_FILE_$n where $n is 0, 1 or 2.
-SPECS_BOTTOM = <hr/>$(COPYRIGHT_BOTTOM)
+# Create copyright footer variables. We need different variables for different
+# relative paths to the copyright.html file. The number 0-2 below represent how
+# many extra directory levels down below the specs dir the specs html file is
+# located.
+SPECS_BOTTOM = <footer class="legal-footer"><hr/>$(COPYRIGHT_BOTTOM)</footer>
# The legal dir is one ../ below the specs dir, so start with one ../.
specs_bottom_rel_path := ../
$(foreach n, 0 1 2, \
- $(eval SPECS_BOTTOM_FILE_$n := $(SUPPORT_OUTPUTDIR)/docs/full-specs-bottom-$n.txt) \
$(eval SPECS_BOTTOM_$n := $(call SPECS_BOTTOM,$(specs_bottom_rel_path))) \
- $(eval $(SPECS_BOTTOM_FILE_$n): \
- $(call DependOnVariable, SPECS_BOTTOM_$n) ; \
- $(PRINTF) '$(SPECS_BOTTOM_$n)' > $$@ \
- ) \
$(eval specs_bottom_rel_path := $(specs_bottom_rel_path)../) \
)
+SPECS_TOP := $(if $(filter true, $(IS_DRAFT)), <div class="draft-header">$(DRAFT_TEXT)</div>)
+
# For all html files in $module/share/specs directories, copy and add the
# copyright footer.
$(foreach m, $(ALL_MODULES), \
$(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \
$(foreach d, $(SPECS_$m), \
- $(foreach f, $(filter %.html, $(call FindFiles, $d)), \
+ $(foreach f, $(call ApplySpecFilter, $(filter %.html, $(call FindFiles, $d))), \
$(eval $m_$f_NOF_SUBDIRS := $(words $(subst /, $(SPACE), $(subst $d, , $(dir $f))))) \
$(eval $m_$f_NAME := PROCESS_HTML_$m_$(strip $(call RelativePath, $f, $(TOPDIR)))) \
$(eval $(call SetupTextFileProcessing, $($m_$f_NAME), \
@@ -559,6 +569,7 @@
SOURCE_BASE_DIR := $d, \
OUTPUT_DIR := $(DOCS_OUTPUTDIR)/specs/, \
REPLACEMENTS := \
+ <body> => <body>$(SPECS_TOP) ; \
</body> => $(SPECS_BOTTOM_$($m_$f_NOF_SUBDIRS))</body>, \
)) \
$(eval JDK_SPECS_TARGETS += $($($m_$f_NAME))) \
@@ -575,17 +586,16 @@
$(foreach m, $(ALL_MODULES), \
$(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \
$(foreach d, $(SPECS_$m), \
- $(foreach f, $(filter %.md, $(call FindFiles, $d)), \
+ $(foreach f, $(call ApplySpecFilter, $(filter %.md, $(call FindFiles, $d))), \
$(eval $m_$f_NOF_SUBDIRS := $(words $(subst /, $(SPACE), $(subst $d, , $(dir $f))))) \
- $(eval $m_$f_BOTTOM_FILE := $(SPECS_BOTTOM_FILE_$($m_$f_NOF_SUBDIRS))) \
$(eval $m_$f_NAME := SPECS_TO_HTML_$m_$(strip $(call RelativePath, $f, $(TOPDIR)))) \
$(eval $(call SetupProcessMarkdown, $($m_$f_NAME), \
SRC := $d, \
FILES := $f, \
DEST := $(DOCS_OUTPUTDIR)/specs/, \
CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
- OPTIONS := -A $($m_$f_BOTTOM_FILE), \
- EXTRA_DEPS := $($m_$f_BOTTOM_FILE), \
+ OPTIONS := -V include-before='$(SPECS_TOP)' -V include-after='$(SPECS_BOTTOM_$($m_$f_NOF_SUBDIRS))', \
+ REPLACEMENTS := @@VERSION_STRING@@ => $(VERSION_STRING), \
POST_PROCESS := $(TOOL_FIXUPPANDOC), \
)) \
$(eval JDK_SPECS_TARGETS += $($($m_$f_NAME))) \
@@ -607,7 +617,7 @@
$(foreach m, $(ALL_MODULES), \
$(eval MAN_$m := $(call FindModuleManDirs, $m)) \
$(foreach d, $(MAN_$m), \
- $(foreach f, $(filter %.md, $(call FindFiles, $d)), \
+ $(foreach f, $(call ApplySpecFilter, $(filter %.md, $(call FindFiles, $d))), \
$(eval $m_$f_NAME := MAN_TO_HTML_$m_$(strip $(call RelativePath, $f, $(TOPDIR)))) \
$(eval $(call SetupProcessMarkdown, $($m_$f_NAME), \
SRC := $d, \
@@ -616,11 +626,10 @@
FILTER := $(PANDOC_HTML_MANPAGE_FILTER), \
CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
REPLACEMENTS := @@VERSION_SHORT@@ => $(VERSION_SHORT), \
- OPTIONS := -A $(SPECS_BOTTOM_FILE_1), \
+ OPTIONS := -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) \
- $(SPECS_BOTTOM_FILE_1), \
+ $(PANDOC_HTML_MANPAGE_FILTER_JAVASCRIPT), \
)) \
$(eval JDK_SPECS_TARGETS += $($($m_$f_NAME))) \
) \
@@ -634,23 +643,29 @@
# Special treatment for generated documentation
JDWP_PROTOCOL := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/jdwp-protocol.html
-$(eval $(call SetupTextFileProcessing, PROCESS_JDWP_PROTOCOL, \
- SOURCE_FILES := $(JDWP_PROTOCOL), \
- OUTPUT_DIR := $(DOCS_OUTPUTDIR)/specs/jdwp, \
- REPLACEMENTS := \
- </body> => $(SPECS_BOTTOM_1)</body>, \
-))
-JDK_SPECS_TARGETS += $(PROCESS_JDWP_PROTOCOL)
+ifneq ($(call ApplySpecFilter, $(JDWP_PROTOCOL)), )
+ $(eval $(call SetupTextFileProcessing, PROCESS_JDWP_PROTOCOL, \
+ SOURCE_FILES := $(JDWP_PROTOCOL), \
+ OUTPUT_DIR := $(DOCS_OUTPUTDIR)/specs/jdwp, \
+ REPLACEMENTS := \
+ <body> => <body>$(SPECS_TOP) ; \
+ </body> => $(SPECS_BOTTOM_1)</body>, \
+ ))
+ JDK_SPECS_TARGETS += $(PROCESS_JDWP_PROTOCOL)
+endif
# Get jvmti.html from the main jvm variant (all variants' jvmti.html are identical).
JVMTI_HTML ?= $(HOTSPOT_OUTPUTDIR)/variant-$(JVM_VARIANT_MAIN)/gensrc/jvmtifiles/jvmti.html
-$(eval $(call SetupTextFileProcessing, PROCESS_JVMTI_HTML, \
- SOURCE_FILES := $(JVMTI_HTML), \
- OUTPUT_DIR := $(DOCS_OUTPUTDIR)/specs/, \
- REPLACEMENTS := \
- </body> => $(SPECS_BOTTOM_0)</body>, \
-))
-JDK_SPECS_TARGETS += $(PROCESS_JVMTI_HTML)
+ifneq ($(call ApplySpecFilter, $(JVMTI_HTML)), )
+ $(eval $(call SetupTextFileProcessing, PROCESS_JVMTI_HTML, \
+ SOURCE_FILES := $(JVMTI_HTML), \
+ OUTPUT_DIR := $(DOCS_OUTPUTDIR)/specs/, \
+ REPLACEMENTS := \
+ <body> => <body>$(SPECS_TOP) ; \
+ </body> => $(SPECS_BOTTOM_0)</body>, \
+ ))
+ JDK_SPECS_TARGETS += $(PROCESS_JVMTI_HTML)
+endif
################################################################################
# Optional target which bundles all generated javadocs into a zip archive.
@@ -672,6 +687,20 @@
$(eval $(call IncludeCustomExtension, Docs-post.gmk))
################################################################################
+# Bundles all generated specs into a zip archive, skipping javadocs.
+
+SPECS_ZIP_NAME := jdk-$(VERSION_STRING)-specs.zip
+SPECS_ZIP_FILE := $(OUTPUTDIR)/bundles/$(SPECS_ZIP_NAME)
+
+$(eval $(call SetupZipArchive, BUILD_SPECS_ZIP, \
+ SRC := $(DOCS_OUTPUTDIR), \
+ ZIP := $(SPECS_ZIP_FILE), \
+ EXTRA_DEPS := $(JDK_SPECS_TARGETS), \
+))
+
+SPECS_ZIP_TARGETS += $(BUILD_SPECS_ZIP)
+
+################################################################################
docs-jdk-api-javadoc: $(JDK_API_JAVADOC_TARGETS) $(JDK_API_CUSTOM_TARGETS)
@@ -691,11 +720,14 @@
docs-zip: $(ZIP_TARGETS)
+docs-specs-zip: $(SPECS_ZIP_TARGETS)
+
all: docs-jdk-api-javadoc docs-jdk-api-modulegraph docs-javase-api-javadoc \
docs-javase-api-modulegraph docs-reference-api-javadoc \
- docs-reference-api-modulegraph docs-jdk-specs docs-jdk-index docs-zip
+ docs-reference-api-modulegraph docs-jdk-specs docs-jdk-index docs-zip \
+ docs-specs-zip
.PHONY: default all docs-jdk-api-javadoc docs-jdk-api-modulegraph \
docs-javase-api-javadoc docs-javase-api-modulegraph \
docs-reference-api-javadoc docs-reference-api-modulegraph docs-jdk-specs \
- docs-jdk-index docs-zip
+ docs-jdk-index docs-zip docs-specs-zip
--- a/make/InitSupport.gmk Tue Jun 18 21:40:50 2019 -0700
+++ b/make/InitSupport.gmk Fri Jun 21 09:05:45 2019 -0700
@@ -53,7 +53,7 @@
COMPARE_BUILD JTREG GTEST MICRO TEST_OPTS TEST_VM_OPTS
# All known make control variables
- MAKE_CONTROL_VARIABLES := $(INIT_CONTROL_VARIABLES) TEST JDK_FILTER
+ MAKE_CONTROL_VARIABLES := $(INIT_CONTROL_VARIABLES) TEST JDK_FILTER SPEC_FILTER
# Define a simple reverse function.
# Should maybe move to MakeBase.gmk, but we can't include that file now.
--- a/make/Main.gmk Tue Jun 18 21:40:50 2019 -0700
+++ b/make/Main.gmk Fri Jun 21 09:05:45 2019 -0700
@@ -427,6 +427,9 @@
docs-zip:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-zip)
+docs-specs-zip:
+ +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-specs-zip)
+
update-build-docs:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f UpdateBuildDocs.gmk)
@@ -436,7 +439,7 @@
ALL_TARGETS += docs-jdk-api-javadoc docs-jdk-api-modulegraph \
docs-javase-api-javadoc docs-javase-api-modulegraph \
docs-reference-api-javadoc docs-reference-api-modulegraph docs-jdk-specs \
- docs-jdk-index docs-zip update-build-docs update-x11wrappers
+ docs-jdk-index docs-zip docs-specs-zip update-build-docs update-x11wrappers
################################################################################
# Cross compilation support
@@ -885,6 +888,8 @@
docs-zip: docs-jdk
+ docs-specs-zip: docs-jdk-specs
+
# Tests
test: jdk-image test-image
--- a/make/autoconf/bootcycle-spec.gmk.in Tue Jun 18 21:40:50 2019 -0700
+++ b/make/autoconf/bootcycle-spec.gmk.in Fri Jun 21 09:05:45 2019 -0700
@@ -62,3 +62,7 @@
endif
# The bootcycle JVM arguments may differ from the original boot jdk.
JAVA_FLAGS_BIG := @BOOTCYCLE_JVM_ARGS_BIG@
+# Any CDS settings generated for the bootjdk are invalid in the bootcycle build.
+# By filtering out those JVM args, the bootcycle JVM will use its default
+# settings for CDS.
+JAVA_FLAGS := $(filter-out -XX:SharedArchiveFile% -Xshare%, $(JAVA_FLAGS))
--- a/make/autoconf/build-aux/config.guess Tue Jun 18 21:40:50 2019 -0700
+++ b/make/autoconf/build-aux/config.guess Fri Jun 21 09:05:45 2019 -0700
@@ -63,7 +63,7 @@
# Test and fix wsl
echo $OUT | grep x86_64-unknown-linux-gnu > /dev/null 2> /dev/null
if test $? = 0; then
- uname -r | grep Microsoft > /dev/null 2> /dev/null
+ uname -r | grep -i microsoft > /dev/null 2> /dev/null
if test $? = 0; then
OUT="x86_64-pc-wsl"
fi
--- a/make/autoconf/hotspot.m4 Tue Jun 18 21:40:50 2019 -0700
+++ b/make/autoconf/hotspot.m4 Fri Jun 21 09:05:45 2019 -0700
@@ -350,7 +350,8 @@
# Only enable ZGC on supported platforms
AC_MSG_CHECKING([if zgc can be built])
- if test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+ if (test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64") || \
+ (test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xaarch64"); then
AC_MSG_RESULT([yes])
else
DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc"
--- a/make/autoconf/version-numbers Tue Jun 18 21:40:50 2019 -0700
+++ b/make/autoconf/version-numbers Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -25,18 +25,18 @@
# Default version numbers to use unless overridden by configure
-DEFAULT_VERSION_FEATURE=13
+DEFAULT_VERSION_FEATURE=14
DEFAULT_VERSION_INTERIM=0
DEFAULT_VERSION_UPDATE=0
DEFAULT_VERSION_PATCH=0
DEFAULT_VERSION_EXTRA1=0
DEFAULT_VERSION_EXTRA2=0
DEFAULT_VERSION_EXTRA3=0
-DEFAULT_VERSION_DATE=2019-09-17
-DEFAULT_VERSION_CLASSFILE_MAJOR=57 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
+DEFAULT_VERSION_DATE=2020-03-17
+DEFAULT_VERSION_CLASSFILE_MAJOR=58 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
DEFAULT_VERSION_CLASSFILE_MINOR=0
-DEFAULT_ACCEPTABLE_BOOT_VERSIONS="12 13"
-DEFAULT_JDK_SOURCE_TARGET_VERSION=13
+DEFAULT_ACCEPTABLE_BOOT_VERSIONS="12 13 14"
+DEFAULT_JDK_SOURCE_TARGET_VERSION=14
DEFAULT_PROMOTED_VERSION_PRE=ea
LAUNCHER_NAME=openjdk
--- a/make/conf/jib-profiles.js Tue Jun 18 21:40:50 2019 -0700
+++ b/make/conf/jib-profiles.js Fri Jun 21 09:05:45 2019 -0700
@@ -1041,7 +1041,7 @@
// build_number: "b07",
// file: "bundles/jcov-3_0.zip",
organization: common.organization,
- revision: "3.0-57-support+1.0",
+ revision: "3.0-58-support+1.0",
ext: "zip",
environment_name: "JCOV_HOME",
},
--- a/make/data/docs-resources/resources/jdk-default.css Tue Jun 18 21:40:50 2019 -0700
+++ b/make/data/docs-resources/resources/jdk-default.css Fri Jun 21 09:05:45 2019 -0700
@@ -25,7 +25,7 @@
body {
margin: 2em 2em;
- font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica;
+ font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica, sans-serif;
font-size: 10pt;
line-height: 1.4;
}
@@ -68,12 +68,23 @@
margin: 1.5ex 0pt 1ex 0pt;
}
-h4 {
+h4, h5 {
+ font-size: 100%;
font-weight: bold;
padding: 0pt;
margin: 1.5ex 0pt 1ex 0pt;
}
+.subtitle {
+ font-style: italic;
+ font-weight: bold;
+ margin-bottom: 1em;
+}
+
+h1.title + .subtitle {
+ margin-top: -1em;
+}
+
a:link {
color: #4A6782;
}
@@ -138,3 +149,16 @@
.centered {
text-align: center;
}
+
+.draft-header {
+ text-align: center;
+ font-size: 80%;
+ padding: 6px;
+ margin: -2.5em -2.5em 2.5em -2.5em;
+ background-color: #CBDAE4;
+}
+
+.legal-footer {
+ font-style: italic;
+ font-size: 80%;
+}
--- a/make/data/jdwp/jdwp.spec Tue Jun 18 21:40:50 2019 -0700
+++ b/make/data/jdwp/jdwp.spec Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -602,7 +602,7 @@
(Command Signature=1
"Returns the JNI signature of a reference type. "
"JNI signature formats are described in the "
- "<a href=\"http://java.sun.com/products/jdk/1.2/docs/guide/jni/index.html\">Java Native Inteface Specification</a>"
+ "<a href=\"../jni/index.html\">Java Native Interface Specification</a>"
"<p>
"For primitive classes "
"the returned signature is the signature of the corresponding primitive "
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.base-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,638 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/io/ObjectInputStream
+header extends java/io/InputStream implements java/io/ObjectInput,java/io/ObjectStreamConstants nestMembers java/io/ObjectInputStream$GetField flags 21
+innerclass innerClass java/io/ObjectInputFilter$Config outerClass java/io/ObjectInputFilter innerClassName Config flags 19
+innerclass innerClass java/io/ObjectInputFilter$FilterInfo outerClass java/io/ObjectInputFilter innerClassName FilterInfo flags 609
+innerclass innerClass java/io/ObjectInputFilter$Status outerClass java/io/ObjectInputFilter innerClassName Status flags 4019
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/CharSequence
+header extends java/lang/Object flags 601
+innerclass innerClass java/util/PrimitiveIterator$OfInt outerClass java/util/PrimitiveIterator innerClassName OfInt flags 609
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/Character
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable nestMembers java/lang/Character$UnicodeScript,java/lang/Character$UnicodeBlock,java/lang/Character$Subset flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/Character;>;
+innerclass innerClass java/lang/Character$UnicodeBlock outerClass java/lang/Character innerClassName UnicodeBlock flags 19
+innerclass innerClass java/lang/Character$UnicodeScript outerClass java/lang/Character innerClassName UnicodeScript flags 4019
+innerclass innerClass java/lang/Character$Subset outerClass java/lang/Character innerClassName Subset flags 9
+
+class name java/lang/Character$UnicodeBlock
+header extends java/lang/Character$Subset nestHost java/lang/Character flags 31
+innerclass innerClass java/lang/Character$Subset outerClass java/lang/Character innerClassName Subset flags 9
+innerclass innerClass java/lang/Character$UnicodeBlock outerClass java/lang/Character innerClassName UnicodeBlock flags 19
+field name ELYMAIC descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name NANDINAGARI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name TAMIL_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SMALL_KANA_EXTENSION descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name NYIAKENG_PUACHUE_HMONG descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name WANCHO descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name OTTOMAN_SIYAQ_NUMBERS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+
+class name java/lang/Character$UnicodeScript
+field name ELYMAIC descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name NANDINAGARI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name NYIAKENG_PUACHUE_HMONG descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name WANCHO descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+
+class name java/lang/Math
+-method name abs descriptor (I)I
+-method name abs descriptor (J)J
+-method name abs descriptor (F)F
+-method name max descriptor (FF)F
+-method name max descriptor (DD)D
+-method name min descriptor (FF)F
+-method name min descriptor (DD)D
+method name abs descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name abs descriptor (J)J flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name abs descriptor (F)F flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name max descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name max descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name min descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name min descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+
+class name java/lang/Process
+header extends java/lang/Object flags 421
+innerclass innerClass java/util/concurrent/ForkJoinPool$ManagedBlocker outerClass java/util/concurrent/ForkJoinPool innerClassName ManagedBlocker flags 609
+innerclass innerClass java/lang/ProcessHandle$Info outerClass java/lang/ProcessHandle innerClassName Info flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/StrictMath
+-method name max descriptor (FF)F
+-method name max descriptor (DD)D
+-method name min descriptor (FF)F
+-method name min descriptor (DD)D
+method name max descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name max descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name min descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+method name min descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/HotSpotIntrinsicCandidate;
+
+class name java/lang/String
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable,java/lang/CharSequence,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/String;>;Ljava/lang/CharSequence;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/System
+header extends java/lang/Object nestMembers java/lang/System$LoggerFinder,java/lang/System$Logger,java/lang/System$Logger$Level flags 31
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$LoggerFinder outerClass java/lang/System innerClassName LoggerFinder flags 409
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/constant/DynamicConstantDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 421 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/lang/constant/MethodTypeDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/constant/ClassDesc;Ljava/lang/constant/MethodTypeDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/MethodType
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/invoke/TypeDescriptor$OfMethod,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/Class<*>;Ljava/lang/invoke/MethodType;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/TypeDescriptor$OfMethod
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;M::Ljava/lang/invoke/TypeDescriptor$OfMethod<TF;TM;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+
+class name java/lang/invoke/VarHandle
+header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode flags 421
+innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+
+class name java/lang/module/ModuleDescriptor
+header extends java/lang/Object implements java/lang/Comparable nestMembers java/lang/module/ModuleDescriptor$Builder,java/lang/module/ModuleDescriptor$Version,java/lang/module/ModuleDescriptor$Provides,java/lang/module/ModuleDescriptor$Opens,java/lang/module/ModuleDescriptor$Opens$Modifier,java/lang/module/ModuleDescriptor$Exports,java/lang/module/ModuleDescriptor$Exports$Modifier,java/lang/module/ModuleDescriptor$Requires,java/lang/module/ModuleDescriptor$Requires$Modifier,java/lang/module/ModuleDescriptor$Modifier flags 21 signature Ljava/lang/Object;Ljava/lang/Comparable<Ljava/lang/module/ModuleDescriptor;>;
+innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Modifier outerClass java/lang/module/ModuleDescriptor innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Builder outerClass java/lang/module/ModuleDescriptor innerClassName Builder flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Provides outerClass java/lang/module/ModuleDescriptor innerClassName Provides flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens outerClass java/lang/module/ModuleDescriptor innerClassName Opens flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports outerClass java/lang/module/ModuleDescriptor innerClassName Exports flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires outerClass java/lang/module/ModuleDescriptor innerClassName Requires flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens$Modifier outerClass java/lang/module/ModuleDescriptor$Opens innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports$Modifier outerClass java/lang/module/ModuleDescriptor$Exports innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerClass java/lang/module/ModuleDescriptor$Requires innerClassName Modifier flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/module/ModuleDescriptor$Builder
+header extends java/lang/Object nestHost java/lang/module/ModuleDescriptor flags 31
+innerclass innerClass java/lang/module/ModuleDescriptor$Builder outerClass java/lang/module/ModuleDescriptor innerClassName Builder flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Modifier outerClass java/lang/module/ModuleDescriptor innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires outerClass java/lang/module/ModuleDescriptor innerClassName Requires flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerClass java/lang/module/ModuleDescriptor$Requires innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports outerClass java/lang/module/ModuleDescriptor innerClassName Exports flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens outerClass java/lang/module/ModuleDescriptor innerClassName Opens flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Provides outerClass java/lang/module/ModuleDescriptor innerClassName Provides flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports$Modifier outerClass java/lang/module/ModuleDescriptor$Exports innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens$Modifier outerClass java/lang/module/ModuleDescriptor$Opens innerClassName Modifier flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/module/ModuleDescriptor$Requires
+header extends java/lang/Object implements java/lang/Comparable nestHost java/lang/module/ModuleDescriptor flags 31 signature Ljava/lang/Object;Ljava/lang/Comparable<Ljava/lang/module/ModuleDescriptor$Requires;>;
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires outerClass java/lang/module/ModuleDescriptor innerClassName Requires flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerClass java/lang/module/ModuleDescriptor$Requires innerClassName Modifier flags 4019
+
+class name java/net/Socket
+header extends java/lang/Object implements java/io/Closeable flags 21
+innerclass innerClass java/net/Proxy$Type outerClass java/net/Proxy innerClassName Type flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/net/SocketImpl
+header extends java/lang/Object implements java/net/SocketOptions flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/net/URL
+header extends java/lang/Object implements java/io/Serializable flags 31
+innerclass innerClass java/net/Proxy$Type outerClass java/net/Proxy innerClassName Type flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/nio/Buffer
+method name slice descriptor (II)Ljava/nio/Buffer; flags 401
+
+class name java/nio/ByteBuffer
+method name slice descriptor (II)Ljava/nio/ByteBuffer; flags 401
+method name get descriptor (I[BII)Ljava/nio/ByteBuffer; flags 1
+method name get descriptor (I[B)Ljava/nio/ByteBuffer; flags 1
+method name put descriptor (I[BII)Ljava/nio/ByteBuffer; flags 1
+method name put descriptor (I[B)Ljava/nio/ByteBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/CharBuffer
+method name slice descriptor (II)Ljava/nio/CharBuffer; flags 401
+method name get descriptor (I[CII)Ljava/nio/CharBuffer; flags 1
+method name get descriptor (I[C)Ljava/nio/CharBuffer; flags 1
+method name put descriptor (I[CII)Ljava/nio/CharBuffer; flags 1
+method name put descriptor (I[C)Ljava/nio/CharBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/DoubleBuffer
+method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 401
+method name get descriptor (I[DII)Ljava/nio/DoubleBuffer; flags 1
+method name get descriptor (I[D)Ljava/nio/DoubleBuffer; flags 1
+method name put descriptor (I[DII)Ljava/nio/DoubleBuffer; flags 1
+method name put descriptor (I[D)Ljava/nio/DoubleBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/FloatBuffer
+method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 401
+method name get descriptor (I[FII)Ljava/nio/FloatBuffer; flags 1
+method name get descriptor (I[F)Ljava/nio/FloatBuffer; flags 1
+method name put descriptor (I[FII)Ljava/nio/FloatBuffer; flags 1
+method name put descriptor (I[F)Ljava/nio/FloatBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/IntBuffer
+method name slice descriptor (II)Ljava/nio/IntBuffer; flags 401
+method name get descriptor (I[III)Ljava/nio/IntBuffer; flags 1
+method name get descriptor (I[I)Ljava/nio/IntBuffer; flags 1
+method name put descriptor (I[III)Ljava/nio/IntBuffer; flags 1
+method name put descriptor (I[I)Ljava/nio/IntBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/LongBuffer
+method name slice descriptor (II)Ljava/nio/LongBuffer; flags 401
+method name get descriptor (I[JII)Ljava/nio/LongBuffer; flags 1
+method name get descriptor (I[J)Ljava/nio/LongBuffer; flags 1
+method name put descriptor (I[JII)Ljava/nio/LongBuffer; flags 1
+method name put descriptor (I[J)Ljava/nio/LongBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/MappedByteBuffer
+method name force descriptor (II)Ljava/nio/MappedByteBuffer; flags 11
+
+class name java/nio/ShortBuffer
+method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 401
+method name get descriptor (I[SII)Ljava/nio/ShortBuffer; flags 1
+method name get descriptor (I[S)Ljava/nio/ShortBuffer; flags 1
+method name put descriptor (I[SII)Ljava/nio/ShortBuffer; flags 1
+method name put descriptor (I[S)Ljava/nio/ShortBuffer; flags 1
+method name slice descriptor (II)Ljava/nio/Buffer; flags 1041
+
+class name java/nio/file/FileSystems
+method name newFileSystem descriptor (Ljava/nio/file/Path;Ljava/util/Map;)Ljava/nio/file/FileSystem; thrownTypes java/io/IOException flags 9 signature (Ljava/nio/file/Path;Ljava/util/Map<Ljava/lang/String;*>;)Ljava/nio/file/FileSystem;
+method name newFileSystem descriptor (Ljava/nio/file/Path;)Ljava/nio/file/FileSystem; thrownTypes java/io/IOException flags 9
+method name newFileSystem descriptor (Ljava/nio/file/Path;Ljava/util/Map;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem; thrownTypes java/io/IOException flags 9 signature (Ljava/nio/file/Path;Ljava/util/Map<Ljava/lang/String;*>;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;
+
+class name java/nio/file/Path
+header extends java/lang/Object implements java/lang/Comparable,java/lang/Iterable,java/nio/file/Watchable flags 601 signature Ljava/lang/Object;Ljava/lang/Comparable<Ljava/nio/file/Path;>;Ljava/lang/Iterable<Ljava/nio/file/Path;>;Ljava/nio/file/Watchable;
+innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609
+innerclass innerClass java/nio/file/WatchEvent$Kind outerClass java/nio/file/WatchEvent innerClassName Kind flags 609
+
+class name java/security/DomainLoadStoreParameter
+header extends java/lang/Object implements java/security/KeyStore$LoadStoreParameter flags 31
+innerclass innerClass java/security/KeyStore$LoadStoreParameter outerClass java/security/KeyStore innerClassName LoadStoreParameter flags 609
+innerclass innerClass java/security/KeyStore$ProtectionParameter outerClass java/security/KeyStore innerClassName ProtectionParameter flags 609
+
+class name java/security/DrbgParameters
+header extends java/lang/Object nestMembers java/security/DrbgParameters$Reseed,java/security/DrbgParameters$NextBytes,java/security/DrbgParameters$Instantiation,java/security/DrbgParameters$Capability flags 21
+innerclass innerClass java/security/DrbgParameters$Instantiation outerClass java/security/DrbgParameters innerClassName Instantiation flags 19
+innerclass innerClass java/security/DrbgParameters$Capability outerClass java/security/DrbgParameters innerClassName Capability flags 4019
+innerclass innerClass java/security/DrbgParameters$NextBytes outerClass java/security/DrbgParameters innerClassName NextBytes flags 19
+innerclass innerClass java/security/DrbgParameters$Reseed outerClass java/security/DrbgParameters innerClassName Reseed flags 19
+
+class name java/security/DrbgParameters$Instantiation
+header extends java/lang/Object implements java/security/SecureRandomParameters nestHost java/security/DrbgParameters flags 31
+innerclass innerClass java/security/DrbgParameters$Instantiation outerClass java/security/DrbgParameters innerClassName Instantiation flags 19
+innerclass innerClass java/security/DrbgParameters$Capability outerClass java/security/DrbgParameters innerClassName Capability flags 4019
+
+class name java/security/KeyStore
+header extends java/lang/Object nestMembers java/security/KeyStore$Builder,java/security/KeyStore$TrustedCertificateEntry,java/security/KeyStore$SecretKeyEntry,java/security/KeyStore$PrivateKeyEntry,java/security/KeyStore$Entry,java/security/KeyStore$Entry$Attribute,java/security/KeyStore$CallbackHandlerProtection,java/security/KeyStore$PasswordProtection,java/security/KeyStore$ProtectionParameter,java/security/KeyStore$LoadStoreParameter flags 21
+innerclass innerClass java/security/KeyStore$LoadStoreParameter outerClass java/security/KeyStore innerClassName LoadStoreParameter flags 609
+innerclass innerClass java/security/KeyStore$ProtectionParameter outerClass java/security/KeyStore innerClassName ProtectionParameter flags 609
+innerclass innerClass java/security/KeyStore$Entry outerClass java/security/KeyStore innerClassName Entry flags 609
+innerclass innerClass java/security/KeyStore$Builder outerClass java/security/KeyStore innerClassName Builder flags 409
+innerclass innerClass java/security/KeyStore$TrustedCertificateEntry outerClass java/security/KeyStore innerClassName TrustedCertificateEntry flags 19
+innerclass innerClass java/security/KeyStore$SecretKeyEntry outerClass java/security/KeyStore innerClassName SecretKeyEntry flags 19
+innerclass innerClass java/security/KeyStore$PrivateKeyEntry outerClass java/security/KeyStore innerClassName PrivateKeyEntry flags 19
+innerclass innerClass java/security/KeyStore$CallbackHandlerProtection outerClass java/security/KeyStore innerClassName CallbackHandlerProtection flags 9
+innerclass innerClass java/security/KeyStore$PasswordProtection outerClass java/security/KeyStore innerClassName PasswordProtection flags 9
+innerclass innerClass java/security/KeyStore$Entry$Attribute outerClass java/security/KeyStore$Entry innerClassName Attribute flags 609
+
+class name java/security/KeyStore$LoadStoreParameter
+header extends java/lang/Object nestHost java/security/KeyStore flags 601
+innerclass innerClass java/security/KeyStore$LoadStoreParameter outerClass java/security/KeyStore innerClassName LoadStoreParameter flags 609
+innerclass innerClass java/security/KeyStore$ProtectionParameter outerClass java/security/KeyStore innerClassName ProtectionParameter flags 609
+
+class name java/security/KeyStore$PrivateKeyEntry
+header extends java/lang/Object implements java/security/KeyStore$Entry nestHost java/security/KeyStore flags 31
+innerclass innerClass java/security/KeyStore$PrivateKeyEntry outerClass java/security/KeyStore innerClassName PrivateKeyEntry flags 19
+innerclass innerClass java/security/KeyStore$Entry outerClass java/security/KeyStore innerClassName Entry flags 609
+innerclass innerClass java/security/KeyStore$Entry$Attribute outerClass java/security/KeyStore$Entry innerClassName Attribute flags 609
+
+class name java/security/KeyStore$SecretKeyEntry
+header extends java/lang/Object implements java/security/KeyStore$Entry nestHost java/security/KeyStore flags 31
+innerclass innerClass java/security/KeyStore$SecretKeyEntry outerClass java/security/KeyStore innerClassName SecretKeyEntry flags 19
+innerclass innerClass java/security/KeyStore$Entry outerClass java/security/KeyStore innerClassName Entry flags 609
+innerclass innerClass java/security/KeyStore$Entry$Attribute outerClass java/security/KeyStore$Entry innerClassName Attribute flags 609
+
+class name java/security/KeyStore$TrustedCertificateEntry
+header extends java/lang/Object implements java/security/KeyStore$Entry nestHost java/security/KeyStore flags 31
+innerclass innerClass java/security/KeyStore$TrustedCertificateEntry outerClass java/security/KeyStore innerClassName TrustedCertificateEntry flags 19
+innerclass innerClass java/security/KeyStore$Entry outerClass java/security/KeyStore innerClassName Entry flags 609
+innerclass innerClass java/security/KeyStore$Entry$Attribute outerClass java/security/KeyStore$Entry innerClassName Attribute flags 609
+
+class name java/security/KeyStoreSpi
+header extends java/lang/Object flags 421
+innerclass innerClass java/security/KeyStore$LoadStoreParameter outerClass java/security/KeyStore innerClassName LoadStoreParameter flags 609
+innerclass innerClass java/security/KeyStore$ProtectionParameter outerClass java/security/KeyStore innerClassName ProtectionParameter flags 609
+innerclass innerClass java/security/KeyStore$PasswordProtection outerClass java/security/KeyStore innerClassName PasswordProtection flags 9
+innerclass innerClass java/security/KeyStore$CallbackHandlerProtection outerClass java/security/KeyStore innerClassName CallbackHandlerProtection flags 9
+innerclass innerClass java/security/KeyStore$TrustedCertificateEntry outerClass java/security/KeyStore innerClassName TrustedCertificateEntry flags 19
+innerclass innerClass java/security/KeyStore$PrivateKeyEntry outerClass java/security/KeyStore innerClassName PrivateKeyEntry flags 19
+innerclass innerClass java/security/KeyStore$SecretKeyEntry outerClass java/security/KeyStore innerClassName SecretKeyEntry flags 19
+innerclass innerClass java/security/KeyStore$Entry outerClass java/security/KeyStore innerClassName Entry flags 609
+
+class name java/security/Permissions
+header extends java/security/PermissionCollection implements java/io/Serializable flags 31
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/security/PrivilegedAction
+header extends java/lang/Object flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+
+class name java/security/PrivilegedExceptionAction
+header extends java/lang/Object flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+
+class name java/security/Provider
+header extends java/util/Properties nestMembers java/security/Provider$Service flags 421
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9
+
+class name java/security/cert/PKIXRevocationChecker
+header extends java/security/cert/PKIXCertPathChecker nestMembers java/security/cert/PKIXRevocationChecker$Option flags 421
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/security/cert/PKIXRevocationChecker$Option outerClass java/security/cert/PKIXRevocationChecker innerClassName Option flags 4019
+
+class name java/text/AttributedString
+header extends java/lang/Object flags 21
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+
+class name java/text/CompactNumberFormat
+header extends java/text/NumberFormat flags 31
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+
+class name java/text/DateFormat
+header extends java/text/Format nestMembers java/text/DateFormat$Field flags 421
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9
+
+class name java/text/DecimalFormat
+header extends java/text/NumberFormat flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+
+class name java/text/DecimalFormatSymbols
+header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/text/Format
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable nestMembers java/text/Format$Field flags 421
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+
+class name java/text/Format$Field
+header extends java/text/AttributedCharacterIterator$Attribute nestHost java/text/Format flags 21
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+
+class name java/text/MessageFormat
+header extends java/text/Format nestMembers java/text/MessageFormat$Field flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/MessageFormat$Field outerClass java/text/MessageFormat innerClassName Field flags 9
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+
+class name java/text/MessageFormat$Field
+header extends java/text/Format$Field nestHost java/text/MessageFormat flags 21
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/text/MessageFormat$Field outerClass java/text/MessageFormat innerClassName Field flags 9
+
+class name java/text/NumberFormat
+header extends java/text/Format nestMembers java/text/NumberFormat$Style,java/text/NumberFormat$Field flags 421
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+
+class name java/text/NumberFormat$Field
+header extends java/text/Format$Field nestHost java/text/NumberFormat flags 21
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+
+class name java/text/SimpleDateFormat
+header extends java/text/DateFormat flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+
+class name java/time/chrono/JapaneseEra
+field name REIWA descriptor Ljava/time/chrono/JapaneseEra; flags 19
+
+class name java/util/AbstractMap
+header extends java/lang/Object implements java/util/Map nestMembers java/util/AbstractMap$SimpleImmutableEntry,java/util/AbstractMap$SimpleEntry flags 421 signature <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Map<TK;TV;>;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/util/AbstractMap$SimpleImmutableEntry outerClass java/util/AbstractMap innerClassName SimpleImmutableEntry flags 9
+innerclass innerClass java/util/AbstractMap$SimpleEntry outerClass java/util/AbstractMap innerClassName SimpleEntry flags 9
+
+class name java/util/Base64
+header extends java/lang/Object nestMembers java/util/Base64$Decoder,java/util/Base64$Encoder flags 21
+innerclass innerClass java/util/Base64$Encoder outerClass java/util/Base64 innerClassName Encoder flags 9
+innerclass innerClass java/util/Base64$Decoder outerClass java/util/Base64 innerClassName Decoder flags 9
+
+class name java/util/Calendar
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable,java/lang/Comparable nestMembers java/util/Calendar$Builder flags 421 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Cloneable;Ljava/lang/Comparable<Ljava/util/Calendar;>;
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/util/Calendar$Builder outerClass java/util/Calendar innerClassName Builder flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/Formatter
+header extends java/lang/Object implements java/io/Closeable,java/io/Flushable nestMembers java/util/Formatter$BigDecimalLayoutForm flags 31
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/util/Formatter$BigDecimalLayoutForm outerClass java/util/Formatter innerClassName BigDecimalLayoutForm flags 4019
+
+class name java/util/Locale
+header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable nestMembers java/util/Locale$LanguageRange,java/util/Locale$FilteringMode,java/util/Locale$Builder,java/util/Locale$Category,java/util/Locale$IsoCountryCode flags 31
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+innerclass innerClass java/util/Locale$IsoCountryCode outerClass java/util/Locale innerClassName IsoCountryCode flags 4409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/util/Locale$FilteringMode outerClass java/util/Locale innerClassName FilteringMode flags 4019
+innerclass innerClass java/util/Locale$LanguageRange outerClass java/util/Locale innerClassName LanguageRange flags 19
+innerclass innerClass java/util/Locale$Builder outerClass java/util/Locale innerClassName Builder flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/Random
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+
+class name java/util/Spliterators
+header extends java/lang/Object nestMembers java/util/Spliterators$AbstractDoubleSpliterator,java/util/Spliterators$AbstractLongSpliterator,java/util/Spliterators$AbstractIntSpliterator,java/util/Spliterators$AbstractSpliterator flags 31
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfInt outerClass java/util/PrimitiveIterator innerClassName OfInt flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfLong outerClass java/util/PrimitiveIterator innerClassName OfLong flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfDouble outerClass java/util/PrimitiveIterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/Spliterators$AbstractDoubleSpliterator outerClass java/util/Spliterators innerClassName AbstractDoubleSpliterator flags 409
+innerclass innerClass java/util/Spliterators$AbstractLongSpliterator outerClass java/util/Spliterators innerClassName AbstractLongSpliterator flags 409
+innerclass innerClass java/util/Spliterators$AbstractIntSpliterator outerClass java/util/Spliterators innerClassName AbstractIntSpliterator flags 409
+innerclass innerClass java/util/Spliterators$AbstractSpliterator outerClass java/util/Spliterators innerClassName AbstractSpliterator flags 409
+
+class name java/util/Spliterators$AbstractDoubleSpliterator
+header extends java/lang/Object implements java/util/Spliterator$OfDouble nestHost java/util/Spliterators flags 421
+innerclass innerClass java/util/Spliterators$AbstractSpliterator outerClass java/util/Spliterators innerClassName AbstractSpliterator flags 409
+innerclass innerClass java/util/Spliterators$AbstractDoubleSpliterator outerClass java/util/Spliterators innerClassName AbstractDoubleSpliterator flags 409
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/Spliterator$OfPrimitive outerClass java/util/Spliterator innerClassName OfPrimitive flags 609
+
+class name java/util/Spliterators$AbstractIntSpliterator
+header extends java/lang/Object implements java/util/Spliterator$OfInt nestHost java/util/Spliterators flags 421
+innerclass innerClass java/util/Spliterators$AbstractSpliterator outerClass java/util/Spliterators innerClassName AbstractSpliterator flags 409
+innerclass innerClass java/util/Spliterators$AbstractIntSpliterator outerClass java/util/Spliterators innerClassName AbstractIntSpliterator flags 409
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/Spliterator$OfPrimitive outerClass java/util/Spliterator innerClassName OfPrimitive flags 609
+
+class name java/util/Spliterators$AbstractLongSpliterator
+header extends java/lang/Object implements java/util/Spliterator$OfLong nestHost java/util/Spliterators flags 421
+innerclass innerClass java/util/Spliterators$AbstractSpliterator outerClass java/util/Spliterators innerClassName AbstractSpliterator flags 409
+innerclass innerClass java/util/Spliterators$AbstractLongSpliterator outerClass java/util/Spliterators innerClassName AbstractLongSpliterator flags 409
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/Spliterator$OfPrimitive outerClass java/util/Spliterator innerClassName OfPrimitive flags 609
+
+class name java/util/concurrent/CompletableFuture
+header extends java/lang/Object implements java/util/concurrent/Future,java/util/concurrent/CompletionStage nestMembers java/util/concurrent/CompletableFuture$AsynchronousCompletionTask flags 21 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/concurrent/Future<TT;>;Ljava/util/concurrent/CompletionStage<TT;>;
+innerclass innerClass java/util/concurrent/ForkJoinPool$ManagedBlocker outerClass java/util/concurrent/ForkJoinPool innerClassName ManagedBlocker flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/concurrent/CompletableFuture$AsynchronousCompletionTask outerClass java/util/concurrent/CompletableFuture innerClassName AsynchronousCompletionTask flags 609
+
+class name java/util/concurrent/ConcurrentHashMap
+header extends java/util/AbstractMap implements java/util/concurrent/ConcurrentMap,java/io/Serializable nestMembers java/util/concurrent/ConcurrentHashMap$KeySetView,java/util/concurrent/ConcurrentHashMap$CollectionView flags 21 signature <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/concurrent/ConcurrentMap<TK;TV;>;Ljava/io/Serializable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 9
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/util/AbstractMap$SimpleImmutableEntry outerClass java/util/AbstractMap innerClassName SimpleImmutableEntry flags 9
+innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408
+
+class name java/util/concurrent/ConcurrentHashMap$KeySetView
+header extends java/util/concurrent/ConcurrentHashMap$CollectionView implements java/util/Set,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap flags 21 signature <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/concurrent/ConcurrentHashMap$CollectionView<TK;TV;TK;>;Ljava/util/Set<TK;>;Ljava/io/Serializable;
+innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408
+innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 9
+
+class name java/util/concurrent/Flow$Processor
+header extends java/lang/Object implements java/util/concurrent/Flow$Subscriber,java/util/concurrent/Flow$Publisher nestHost java/util/concurrent/Flow flags 601 signature <T:Ljava/lang/Object;R:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/concurrent/Flow$Subscriber<TT;>;Ljava/util/concurrent/Flow$Publisher<TR;>;
+innerclass innerClass java/util/concurrent/Flow$Processor outerClass java/util/concurrent/Flow innerClassName Processor flags 609
+innerclass innerClass java/util/concurrent/Flow$Subscriber outerClass java/util/concurrent/Flow innerClassName Subscriber flags 609
+innerclass innerClass java/util/concurrent/Flow$Publisher outerClass java/util/concurrent/Flow innerClassName Publisher flags 609
+
+class name java/util/concurrent/Flow$Publisher
+header extends java/lang/Object nestHost java/util/concurrent/Flow flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/concurrent/Flow$Publisher outerClass java/util/concurrent/Flow innerClassName Publisher flags 609
+innerclass innerClass java/util/concurrent/Flow$Subscriber outerClass java/util/concurrent/Flow innerClassName Subscriber flags 609
+
+class name java/util/concurrent/Flow$Subscriber
+header extends java/lang/Object nestHost java/util/concurrent/Flow flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass java/util/concurrent/Flow$Subscriber outerClass java/util/concurrent/Flow innerClassName Subscriber flags 609
+innerclass innerClass java/util/concurrent/Flow$Subscription outerClass java/util/concurrent/Flow innerClassName Subscription flags 609
+
+class name java/util/concurrent/ForkJoinPool
+header extends java/util/concurrent/AbstractExecutorService nestMembers java/util/concurrent/ForkJoinPool$ManagedBlocker,java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory flags 21
+innerclass innerClass java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory outerClass java/util/concurrent/ForkJoinPool innerClassName ForkJoinWorkerThreadFactory flags 609
+innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609
+innerclass innerClass java/lang/Thread$State outerClass java/lang/Thread innerClassName State flags 4019
+innerclass innerClass java/util/concurrent/ForkJoinPool$ManagedBlocker outerClass java/util/concurrent/ForkJoinPool innerClassName ManagedBlocker flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/Phaser
+header extends java/lang/Object flags 21
+innerclass innerClass java/util/concurrent/ForkJoinPool$ManagedBlocker outerClass java/util/concurrent/ForkJoinPool innerClassName ManagedBlocker flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/ThreadLocalRandom
+header extends java/util/Random flags 21
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+
+class name java/util/concurrent/ThreadPoolExecutor
+header extends java/util/concurrent/AbstractExecutorService nestMembers java/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy,java/util/concurrent/ThreadPoolExecutor$DiscardPolicy,java/util/concurrent/ThreadPoolExecutor$AbortPolicy,java/util/concurrent/ThreadPoolExecutor$CallerRunsPolicy flags 21
+innerclass innerClass java/lang/Thread$State outerClass java/lang/Thread innerClassName State flags 4019
+innerclass innerClass java/util/concurrent/ThreadPoolExecutor$AbortPolicy outerClass java/util/concurrent/ThreadPoolExecutor innerClassName AbortPolicy flags 9
+innerclass innerClass java/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy outerClass java/util/concurrent/ThreadPoolExecutor innerClassName DiscardOldestPolicy flags 9
+innerclass innerClass java/util/concurrent/ThreadPoolExecutor$DiscardPolicy outerClass java/util/concurrent/ThreadPoolExecutor innerClassName DiscardPolicy flags 9
+innerclass innerClass java/util/concurrent/ThreadPoolExecutor$CallerRunsPolicy outerClass java/util/concurrent/ThreadPoolExecutor innerClassName CallerRunsPolicy flags 9
+
+class name java/util/concurrent/locks/ReentrantReadWriteLock
+header extends java/lang/Object implements java/util/concurrent/locks/ReadWriteLock,java/io/Serializable nestMembers java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock,java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock flags 21
+innerclass innerClass java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock outerClass java/util/concurrent/locks/ReentrantReadWriteLock innerClassName ReadLock flags 9
+innerclass innerClass java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock outerClass java/util/concurrent/locks/ReentrantReadWriteLock innerClassName WriteLock flags 9
+innerclass innerClass java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject outerClass java/util/concurrent/locks/AbstractQueuedSynchronizer innerClassName ConditionObject flags 1
+
+class name java/util/jar/Pack200
+header extends java/lang/Object nestMembers java/util/jar/Pack200$Unpacker,java/util/jar/Pack200$Packer flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="11")
+innerclass innerClass java/util/jar/Pack200$Packer outerClass java/util/jar/Pack200 innerClassName Packer flags 609
+innerclass innerClass java/util/jar/Pack200$Unpacker outerClass java/util/jar/Pack200 innerClassName Unpacker flags 609
+
+class name java/util/stream/DoubleStream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/DoubleStream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream<Ljava/lang/Double;Ljava/util/stream/DoubleStream;>;
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfDouble outerClass java/util/PrimitiveIterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/stream/DoubleStream$Builder outerClass java/util/stream/DoubleStream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/IntStream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/IntStream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream<Ljava/lang/Integer;Ljava/util/stream/IntStream;>;
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfInt outerClass java/util/PrimitiveIterator innerClassName OfInt flags 609
+innerclass innerClass java/util/stream/IntStream$Builder outerClass java/util/stream/IntStream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/LongStream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/LongStream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream<Ljava/lang/Long;Ljava/util/stream/LongStream;>;
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfLong outerClass java/util/PrimitiveIterator innerClassName OfLong flags 609
+innerclass innerClass java/util/stream/LongStream$Builder outerClass java/util/stream/LongStream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/net/ssl/HandshakeCompletedEvent
+-method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate;
+method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate; thrownTypes javax/net/ssl/SSLPeerUnverifiedException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/net/ssl/SSLContext
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name getDefault descriptor ()Ljavax/net/ssl/SSLContext;
+-method name setDefault descriptor (Ljavax/net/ssl/SSLContext;)V
+method name getDefault descriptor ()Ljavax/net/ssl/SSLContext; thrownTypes java/security/NoSuchAlgorithmException flags 9
+method name setDefault descriptor (Ljavax/net/ssl/SSLContext;)V flags 9
+
+class name javax/net/ssl/SSLEngineResult
+header extends java/lang/Object nestMembers javax/net/ssl/SSLEngineResult$HandshakeStatus,javax/net/ssl/SSLEngineResult$Status flags 21
+innerclass innerClass javax/net/ssl/SSLEngineResult$Status outerClass javax/net/ssl/SSLEngineResult innerClassName Status flags 4019
+innerclass innerClass javax/net/ssl/SSLEngineResult$HandshakeStatus outerClass javax/net/ssl/SSLEngineResult innerClassName HandshakeStatus flags 4019
+
+class name javax/net/ssl/SSLServerSocketFactory
+-method name getDefault descriptor ()Ljavax/net/ServerSocketFactory;
+method name getDefault descriptor ()Ljavax/net/ServerSocketFactory; flags 9
+
+class name javax/net/ssl/SSLSession
+-method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate;
+method name getPeerCertificateChain descriptor ()[Ljavax/security/cert/X509Certificate; thrownTypes javax/net/ssl/SSLPeerUnverifiedException flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/net/ssl/SSLSocketFactory
+-method name getDefault descriptor ()Ljavax/net/SocketFactory;
+method name getDefault descriptor ()Ljavax/net/SocketFactory; flags 9
+
+class name javax/security/cert/Certificate
+header extends java/lang/Object flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/security/cert/CertificateEncodingException
+header extends javax/security/cert/CertificateException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/security/cert/CertificateException
+header extends java/lang/Exception flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/security/cert/CertificateExpiredException
+header extends javax/security/cert/CertificateException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/security/cert/CertificateNotYetValidException
+header extends javax/security/cert/CertificateException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/security/cert/CertificateParsingException
+header extends javax/security/cert/CertificateException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name javax/security/cert/X509Certificate
+header extends javax/security/cert/Certificate flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.compiler-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,107 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/annotation/processing/ProcessingEnvironment
+method name isPreviewEnabled descriptor ()Z flags 1
+
+class name javax/lang/model/SourceVersion
+header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum<Ljavax/lang/model/SourceVersion;>;
+innerclass innerClass java/lang/Runtime$Version outerClass java/lang/Runtime innerClassName Version flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+field name RELEASE_13 descriptor Ljavax/lang/model/SourceVersion; flags 4019
+
+class name javax/lang/model/element/ExecutableElement
+method name asType descriptor ()Ljavax/lang/model/type/TypeMirror; flags 401
+
+class name javax/lang/model/element/ModuleElement
+method name asType descriptor ()Ljavax/lang/model/type/TypeMirror; flags 401
+
+class name javax/lang/model/element/ModuleElement$Directive
+header extends java/lang/Object nestHost javax/lang/model/element/ModuleElement flags 601
+innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609
+innerclass innerClass javax/lang/model/element/ModuleElement$DirectiveKind outerClass javax/lang/model/element/ModuleElement innerClassName DirectiveKind flags 4019
+innerclass innerClass javax/lang/model/element/ModuleElement$DirectiveVisitor outerClass javax/lang/model/element/ModuleElement innerClassName DirectiveVisitor flags 609
+
+class name javax/lang/model/element/PackageElement
+method name asType descriptor ()Ljavax/lang/model/type/TypeMirror; flags 401
+
+class name javax/lang/model/element/TypeElement
+method name asType descriptor ()Ljavax/lang/model/type/TypeMirror; flags 401
+
+class name javax/lang/model/element/TypeParameterElement
+method name asType descriptor ()Ljavax/lang/model/type/TypeMirror; flags 401
+
+class name javax/lang/model/element/VariableElement
+method name asType descriptor ()Ljavax/lang/model/type/TypeMirror; flags 401
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor9
+header extends javax/lang/model/util/AbstractAnnotationValueVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/AbstractElementVisitor9
+header extends javax/lang/model/util/AbstractElementVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/AbstractTypeVisitor9
+header extends javax/lang/model/util/AbstractTypeVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/ElementFilter
+header extends java/lang/Object flags 21
+innerclass innerClass javax/lang/model/element/ModuleElement$DirectiveKind outerClass javax/lang/model/element/ModuleElement innerClassName DirectiveKind flags 4019
+innerclass innerClass javax/lang/model/element/ModuleElement$ExportsDirective outerClass javax/lang/model/element/ModuleElement innerClassName ExportsDirective flags 609
+innerclass innerClass javax/lang/model/element/ModuleElement$OpensDirective outerClass javax/lang/model/element/ModuleElement innerClassName OpensDirective flags 609
+innerclass innerClass javax/lang/model/element/ModuleElement$ProvidesDirective outerClass javax/lang/model/element/ModuleElement innerClassName ProvidesDirective flags 609
+innerclass innerClass javax/lang/model/element/ModuleElement$RequiresDirective outerClass javax/lang/model/element/ModuleElement innerClassName RequiresDirective flags 609
+innerclass innerClass javax/lang/model/element/ModuleElement$UsesDirective outerClass javax/lang/model/element/ModuleElement innerClassName UsesDirective flags 609
+innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609
+
+class name javax/lang/model/util/ElementKindVisitor9
+header extends javax/lang/model/util/ElementKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/ElementScanner9
+header extends javax/lang/model/util/ElementScanner8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementScanner8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor9
+header extends javax/lang/model/util/SimpleAnnotationValueVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/SimpleElementVisitor9
+header extends javax/lang/model/util/SimpleElementVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/SimpleTypeVisitor9
+header extends javax/lang/model/util/SimpleTypeVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/lang/model/util/TypeKindVisitor9
+header extends javax/lang/model/util/TypeKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/TypeKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_13;)
+
+class name javax/tools/StandardJavaFileManager
+header extends java/lang/Object implements javax/tools/JavaFileManager nestMembers javax/tools/StandardJavaFileManager$PathFactory flags 601
+innerclass innerClass javax/tools/JavaFileManager$Location outerClass javax/tools/JavaFileManager innerClassName Location flags 609
+innerclass innerClass javax/tools/StandardJavaFileManager$PathFactory outerClass javax/tools/StandardJavaFileManager innerClassName PathFactory flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name getJavaFileObjectsFromPaths descriptor (Ljava/lang/Iterable;)Ljava/lang/Iterable;
+method name getJavaFileObjectsFromPaths descriptor (Ljava/util/Collection;)Ljava/lang/Iterable; flags 1 signature (Ljava/util/Collection<+Ljava/nio/file/Path;>;)Ljava/lang/Iterable<+Ljavax/tools/JavaFileObject;>;
+method name getJavaFileObjectsFromPaths descriptor (Ljava/lang/Iterable;)Ljava/lang/Iterable; flags 1 deprecated true signature (Ljava/lang/Iterable<+Ljava/nio/file/Path;>;)Ljava/lang/Iterable<+Ljavax/tools/JavaFileObject;>; runtimeAnnotations @Ljava/lang/Deprecated;(since="13")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.desktop-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,1402 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/awt/Component
+header extends java/lang/Object implements java/awt/image/ImageObserver,java/awt/MenuContainer,java/io/Serializable nestMembers java/awt/Component$AccessibleAWTComponent,java/awt/Component$AccessibleAWTComponent$AccessibleAWTFocusHandler,java/awt/Component$AccessibleAWTComponent$AccessibleAWTComponentHandler,java/awt/Component$BltBufferStrategy,java/awt/Component$FlipBufferStrategy,java/awt/Component$BaselineResizeBehavior flags 421
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass java/awt/BufferCapabilities$FlipContents outerClass java/awt/BufferCapabilities innerClassName FlipContents flags 19
+innerclass innerClass java/awt/Component$BltBufferStrategy outerClass java/awt/Component innerClassName BltBufferStrategy flags 4
+innerclass innerClass java/awt/Component$FlipBufferStrategy outerClass java/awt/Component innerClassName FlipBufferStrategy flags 4
+innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019
+innerclass innerClass java/awt/Component$AccessibleAWTComponent outerClass java/awt/Component innerClassName AccessibleAWTComponent flags 404
+innerclass innerClass java/awt/Component$AccessibleAWTComponent$AccessibleAWTFocusHandler outerClass java/awt/Component$AccessibleAWTComponent innerClassName AccessibleAWTFocusHandler flags 4
+innerclass innerClass java/awt/Component$AccessibleAWTComponent$AccessibleAWTComponentHandler outerClass java/awt/Component$AccessibleAWTComponent innerClassName AccessibleAWTComponentHandler flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Component$AccessibleAWTComponent
+header extends javax/accessibility/AccessibleContext implements java/io/Serializable,javax/accessibility/AccessibleComponent nestHost java/awt/Component flags 421
+innerclass innerClass java/awt/Component$AccessibleAWTComponent outerClass java/awt/Component innerClassName AccessibleAWTComponent flags 404
+innerclass innerClass java/awt/Component$AccessibleAWTComponent$AccessibleAWTComponentHandler outerClass java/awt/Component$AccessibleAWTComponent innerClassName AccessibleAWTComponentHandler flags 4
+innerclass innerClass java/awt/Component$AccessibleAWTComponent$AccessibleAWTFocusHandler outerClass java/awt/Component$AccessibleAWTComponent innerClassName AccessibleAWTFocusHandler flags 4
+
+class name java/awt/Container
+header extends java/awt/Component nestMembers java/awt/Container$AccessibleAWTContainer,java/awt/Container$AccessibleAWTContainer$AccessibleContainerHandler flags 21
+innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/awt/Container$AccessibleAWTContainer outerClass java/awt/Container innerClassName AccessibleAWTContainer flags 4
+innerclass innerClass java/awt/Container$AccessibleAWTContainer$AccessibleContainerHandler outerClass java/awt/Container$AccessibleAWTContainer innerClassName AccessibleContainerHandler flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Container$AccessibleAWTContainer
+header extends java/awt/Component$AccessibleAWTComponent nestHost java/awt/Container flags 21
+innerclass innerClass java/awt/Container$AccessibleAWTContainer outerClass java/awt/Container innerClassName AccessibleAWTContainer flags 4
+innerclass innerClass java/awt/Component$AccessibleAWTComponent outerClass java/awt/Component innerClassName AccessibleAWTComponent flags 404
+innerclass innerClass java/awt/Container$AccessibleAWTContainer$AccessibleContainerHandler outerClass java/awt/Container$AccessibleAWTContainer innerClassName AccessibleContainerHandler flags 4
+
+class name java/awt/Dialog
+header extends java/awt/Window nestMembers java/awt/Dialog$AccessibleAWTDialog,java/awt/Dialog$ModalExclusionType,java/awt/Dialog$ModalityType flags 21
+innerclass innerClass java/awt/Dialog$ModalityType outerClass java/awt/Dialog innerClassName ModalityType flags 4019
+innerclass innerClass java/awt/Dialog$ModalExclusionType outerClass java/awt/Dialog innerClassName ModalExclusionType flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/awt/Dialog$AccessibleAWTDialog outerClass java/awt/Dialog innerClassName AccessibleAWTDialog flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/JobAttributes
+header extends java/lang/Object implements java/lang/Cloneable nestMembers java/awt/JobAttributes$SidesType,java/awt/JobAttributes$MultipleDocumentHandlingType,java/awt/JobAttributes$DialogType,java/awt/JobAttributes$DestinationType,java/awt/JobAttributes$DefaultSelectionType flags 31
+innerclass innerClass java/awt/JobAttributes$DefaultSelectionType outerClass java/awt/JobAttributes innerClassName DefaultSelectionType flags 19
+innerclass innerClass java/awt/JobAttributes$DestinationType outerClass java/awt/JobAttributes innerClassName DestinationType flags 19
+innerclass innerClass java/awt/JobAttributes$DialogType outerClass java/awt/JobAttributes innerClassName DialogType flags 19
+innerclass innerClass java/awt/JobAttributes$MultipleDocumentHandlingType outerClass java/awt/JobAttributes innerClassName MultipleDocumentHandlingType flags 19
+innerclass innerClass java/awt/JobAttributes$SidesType outerClass java/awt/JobAttributes innerClassName SidesType flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/LinearGradientPaint
+header extends java/awt/MultipleGradientPaint flags 31
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/awt/MultipleGradientPaint$CycleMethod outerClass java/awt/MultipleGradientPaint innerClassName CycleMethod flags 4019
+innerclass innerClass java/awt/MultipleGradientPaint$ColorSpaceType outerClass java/awt/MultipleGradientPaint innerClassName ColorSpaceType flags 4019
+innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9
+
+class name java/awt/List$AccessibleAWTList
+header extends java/awt/Component$AccessibleAWTComponent implements javax/accessibility/AccessibleSelection,java/awt/event/ItemListener,java/awt/event/ActionListener nestHost java/awt/List flags 21
+innerclass innerClass java/awt/List$AccessibleAWTList outerClass java/awt/List innerClassName AccessibleAWTList flags 4
+innerclass innerClass java/awt/Component$AccessibleAWTComponent outerClass java/awt/Component innerClassName AccessibleAWTComponent flags 404
+innerclass innerClass java/awt/List$AccessibleAWTList$AccessibleAWTListChild outerClass java/awt/List$AccessibleAWTList innerClassName AccessibleAWTListChild flags 4
+
+class name java/awt/PageAttributes
+header extends java/lang/Object implements java/lang/Cloneable nestMembers java/awt/PageAttributes$PrintQualityType,java/awt/PageAttributes$OriginType,java/awt/PageAttributes$OrientationRequestedType,java/awt/PageAttributes$MediaType,java/awt/PageAttributes$ColorType flags 31
+innerclass innerClass java/awt/PageAttributes$ColorType outerClass java/awt/PageAttributes innerClassName ColorType flags 19
+innerclass innerClass java/awt/PageAttributes$OriginType outerClass java/awt/PageAttributes innerClassName OriginType flags 19
+innerclass innerClass java/awt/PageAttributes$MediaType outerClass java/awt/PageAttributes innerClassName MediaType flags 19
+innerclass innerClass java/awt/PageAttributes$OrientationRequestedType outerClass java/awt/PageAttributes innerClassName OrientationRequestedType flags 19
+innerclass innerClass java/awt/PageAttributes$PrintQualityType outerClass java/awt/PageAttributes innerClassName PrintQualityType flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/RadialGradientPaint
+header extends java/awt/MultipleGradientPaint flags 31
+innerclass innerClass java/awt/MultipleGradientPaint$CycleMethod outerClass java/awt/MultipleGradientPaint innerClassName CycleMethod flags 4019
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/awt/MultipleGradientPaint$ColorSpaceType outerClass java/awt/MultipleGradientPaint innerClassName ColorSpaceType flags 4019
+innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9
+
+class name java/awt/ScrollPane
+header extends java/awt/Container implements javax/accessibility/Accessible nestMembers java/awt/ScrollPane$AccessibleAWTScrollPane flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/awt/ScrollPane$AccessibleAWTScrollPane outerClass java/awt/ScrollPane innerClassName AccessibleAWTScrollPane flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Taskbar
+header extends java/lang/Object nestMembers java/awt/Taskbar$State,java/awt/Taskbar$Feature flags 21
+innerclass innerClass java/awt/Taskbar$Feature outerClass java/awt/Taskbar innerClassName Feature flags 4019
+innerclass innerClass java/awt/Taskbar$State outerClass java/awt/Taskbar innerClassName State flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Window
+header extends java/awt/Container implements javax/accessibility/Accessible nestMembers java/awt/Window$AccessibleAWTWindow,java/awt/Window$Type flags 21
+innerclass innerClass java/awt/Window$Type outerClass java/awt/Window innerClassName Type flags 4019
+innerclass innerClass java/awt/Dialog$ModalExclusionType outerClass java/awt/Dialog innerClassName ModalExclusionType flags 4019
+innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/awt/Window$AccessibleAWTWindow outerClass java/awt/Window innerClassName AccessibleAWTWindow flags 4
+innerclass innerClass java/awt/GraphicsDevice$WindowTranslucency outerClass java/awt/GraphicsDevice innerClassName WindowTranslucency flags 4019
+innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9
+innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/dnd/DropTarget
+header extends java/lang/Object implements java/awt/dnd/DropTargetListener,java/io/Serializable nestMembers java/awt/dnd/DropTarget$DropTargetAutoScroller flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/awt/dnd/DropTarget$DropTargetAutoScroller outerClass java/awt/dnd/DropTarget innerClassName DropTargetAutoScroller flags c
+
+class name java/awt/font/TextLayout
+header extends java/lang/Object implements java/lang/Cloneable nestMembers java/awt/font/TextLayout$CaretPolicy flags 31
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+innerclass innerClass java/awt/font/TextLayout$CaretPolicy outerClass java/awt/font/TextLayout innerClassName CaretPolicy flags 9
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/geom/Arc2D
+header extends java/awt/geom/RectangularShape nestMembers java/awt/geom/Arc2D$Double,java/awt/geom/Arc2D$Float flags 421
+innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+innerclass innerClass java/awt/geom/Arc2D$Double outerClass java/awt/geom/Arc2D innerClassName Double flags 9
+innerclass innerClass java/awt/geom/Arc2D$Float outerClass java/awt/geom/Arc2D innerClassName Float flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/geom/Line2D
+header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable nestMembers java/awt/geom/Line2D$Double,java/awt/geom/Line2D$Float flags 421
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+innerclass innerClass java/awt/geom/Line2D$Double outerClass java/awt/geom/Line2D innerClassName Double flags 9
+innerclass innerClass java/awt/geom/Line2D$Float outerClass java/awt/geom/Line2D innerClassName Float flags 9
+
+class name java/awt/image/AffineTransformOp
+header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/beancontext/BeanContextServicesSupport
+header extends java/beans/beancontext/BeanContextSupport implements java/beans/beancontext/BeanContextServices nestMembers java/beans/beancontext/BeanContextServicesSupport$BCSSProxyServiceProvider,java/beans/beancontext/BeanContextServicesSupport$BCSSServiceProvider,java/beans/beancontext/BeanContextServicesSupport$BCSSChild flags 21
+innerclass innerClass java/beans/beancontext/BeanContextServicesSupport$BCSSChild outerClass java/beans/beancontext/BeanContextServicesSupport innerClassName BCSSChild flags 4
+innerclass innerClass java/beans/beancontext/BeanContextServicesSupport$BCSSServiceProvider outerClass java/beans/beancontext/BeanContextServicesSupport innerClassName BCSSServiceProvider flags c
+innerclass innerClass java/beans/beancontext/BeanContextServicesSupport$BCSSProxyServiceProvider outerClass java/beans/beancontext/BeanContextServicesSupport innerClassName BCSSProxyServiceProvider flags 4
+innerclass innerClass java/beans/beancontext/BeanContextSupport$BCSIterator outerClass java/beans/beancontext/BeanContextSupport innerClassName BCSIterator flags 1c
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/beans/beancontext/BeanContextSupport$BCSChild outerClass java/beans/beancontext/BeanContextSupport innerClassName BCSChild flags 4
+
+class name java/beans/beancontext/BeanContextServicesSupport$BCSSChild
+header extends java/beans/beancontext/BeanContextSupport$BCSChild nestHost java/beans/beancontext/BeanContextServicesSupport flags 21
+innerclass innerClass java/beans/beancontext/BeanContextServicesSupport$BCSSChild outerClass java/beans/beancontext/BeanContextServicesSupport innerClassName BCSSChild flags 4
+innerclass innerClass java/beans/beancontext/BeanContextSupport$BCSChild outerClass java/beans/beancontext/BeanContextSupport innerClassName BCSChild flags 4
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/beans/beancontext/BeanContextServicesSupport$BCSSProxyServiceProvider
+header extends java/lang/Object implements java/beans/beancontext/BeanContextServiceProvider,java/beans/beancontext/BeanContextServiceRevokedListener nestHost java/beans/beancontext/BeanContextServicesSupport flags 21
+innerclass innerClass java/beans/beancontext/BeanContextServicesSupport$BCSSProxyServiceProvider outerClass java/beans/beancontext/BeanContextServicesSupport innerClassName BCSSProxyServiceProvider flags 4
+innerclass innerClass java/beans/beancontext/BeanContextServicesSupport$BCSSChild outerClass java/beans/beancontext/BeanContextServicesSupport innerClassName BCSSChild flags 4
+innerclass innerClass java/beans/beancontext/BeanContextSupport$BCSChild outerClass java/beans/beancontext/BeanContextSupport innerClassName BCSChild flags 4
+
+class name java/beans/beancontext/BeanContextSupport
+header extends java/beans/beancontext/BeanContextChildSupport implements java/beans/beancontext/BeanContext,java/io/Serializable,java/beans/PropertyChangeListener,java/beans/VetoableChangeListener nestMembers java/beans/beancontext/BeanContextSupport$BCSChild,java/beans/beancontext/BeanContextSupport$BCSIterator flags 21
+innerclass innerClass java/beans/beancontext/BeanContextSupport$BCSIterator outerClass java/beans/beancontext/BeanContextSupport innerClassName BCSIterator flags 1c
+innerclass innerClass java/beans/beancontext/BeanContextSupport$BCSChild outerClass java/beans/beancontext/BeanContextSupport innerClassName BCSChild flags 4
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name javax/accessibility/AccessibleBundle
+header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4)
+
+class name javax/print/attribute/standard/MediaSize
+header extends javax/print/attribute/Size2DSyntax implements javax/print/attribute/Attribute nestMembers javax/print/attribute/standard/MediaSize$Other,javax/print/attribute/standard/MediaSize$Engineering,javax/print/attribute/standard/MediaSize$NA,javax/print/attribute/standard/MediaSize$JIS,javax/print/attribute/standard/MediaSize$ISO flags 21
+innerclass innerClass javax/print/attribute/standard/MediaSize$ISO outerClass javax/print/attribute/standard/MediaSize innerClassName ISO flags 19
+innerclass innerClass javax/print/attribute/standard/MediaSize$JIS outerClass javax/print/attribute/standard/MediaSize innerClassName JIS flags 19
+innerclass innerClass javax/print/attribute/standard/MediaSize$NA outerClass javax/print/attribute/standard/MediaSize innerClassName NA flags 19
+innerclass innerClass javax/print/attribute/standard/MediaSize$Engineering outerClass javax/print/attribute/standard/MediaSize innerClassName Engineering flags 19
+innerclass innerClass javax/print/attribute/standard/MediaSize$Other outerClass javax/print/attribute/standard/MediaSize innerClassName Other flags 19
+
+class name javax/sound/sampled/AudioSystem
+header extends java/lang/Object flags 21
+innerclass innerClass javax/sound/sampled/Mixer$Info outerClass javax/sound/sampled/Mixer innerClassName Info flags 9
+innerclass innerClass javax/sound/sampled/Line$Info outerClass javax/sound/sampled/Line innerClassName Info flags 9
+innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9
+innerclass innerClass javax/sound/sampled/DataLine$Info outerClass javax/sound/sampled/DataLine innerClassName Info flags 9
+innerclass innerClass javax/sound/sampled/AudioFileFormat$Type outerClass javax/sound/sampled/AudioFileFormat innerClassName Type flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/sampled/BooleanControl
+header extends javax/sound/sampled/Control nestMembers javax/sound/sampled/BooleanControl$Type flags 421
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/BooleanControl$Type outerClass javax/sound/sampled/BooleanControl innerClassName Type flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/sampled/BooleanControl$Type
+header extends javax/sound/sampled/Control$Type nestHost javax/sound/sampled/BooleanControl flags 21
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/BooleanControl$Type outerClass javax/sound/sampled/BooleanControl innerClassName Type flags 9
+
+class name javax/sound/sampled/CompoundControl
+header extends javax/sound/sampled/Control nestMembers javax/sound/sampled/CompoundControl$Type flags 421
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/CompoundControl$Type outerClass javax/sound/sampled/CompoundControl innerClassName Type flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/sampled/CompoundControl$Type
+header extends javax/sound/sampled/Control$Type nestHost javax/sound/sampled/CompoundControl flags 21
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/CompoundControl$Type outerClass javax/sound/sampled/CompoundControl innerClassName Type flags 9
+
+class name javax/sound/sampled/DataLine$Info
+header extends javax/sound/sampled/Line$Info nestHost javax/sound/sampled/DataLine flags 21
+innerclass innerClass javax/sound/sampled/Line$Info outerClass javax/sound/sampled/Line innerClassName Info flags 9
+innerclass innerClass javax/sound/sampled/DataLine$Info outerClass javax/sound/sampled/DataLine innerClassName Info flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/sampled/EnumControl
+header extends javax/sound/sampled/Control nestMembers javax/sound/sampled/EnumControl$Type flags 421
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/EnumControl$Type outerClass javax/sound/sampled/EnumControl innerClassName Type flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/sampled/EnumControl$Type
+header extends javax/sound/sampled/Control$Type nestHost javax/sound/sampled/EnumControl flags 21
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/EnumControl$Type outerClass javax/sound/sampled/EnumControl innerClassName Type flags 9
+
+class name javax/sound/sampled/FloatControl
+header extends javax/sound/sampled/Control nestMembers javax/sound/sampled/FloatControl$Type flags 421
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/FloatControl$Type outerClass javax/sound/sampled/FloatControl innerClassName Type flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/sampled/FloatControl$Type
+header extends javax/sound/sampled/Control$Type nestHost javax/sound/sampled/FloatControl flags 21
+innerclass innerClass javax/sound/sampled/Control$Type outerClass javax/sound/sampled/Control innerClassName Type flags 9
+innerclass innerClass javax/sound/sampled/FloatControl$Type outerClass javax/sound/sampled/FloatControl innerClassName Type flags 9
+
+class name javax/sound/sampled/Line$Info
+header extends java/lang/Object nestHost javax/sound/sampled/Line flags 21
+innerclass innerClass javax/sound/sampled/Line$Info outerClass javax/sound/sampled/Line innerClassName Info flags 9
+
+class name javax/sound/sampled/Port$Info
+header extends javax/sound/sampled/Line$Info nestHost javax/sound/sampled/Port flags 21
+innerclass innerClass javax/sound/sampled/Line$Info outerClass javax/sound/sampled/Line innerClassName Info flags 9
+innerclass innerClass javax/sound/sampled/Port$Info outerClass javax/sound/sampled/Port innerClassName Info flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/AbstractButton$AccessibleAbstractButton
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleAction,javax/accessibility/AccessibleValue,javax/accessibility/AccessibleText,javax/accessibility/AccessibleExtendedComponent nestHost javax/swing/AbstractButton flags 421
+innerclass innerClass javax/swing/AbstractButton$AccessibleAbstractButton outerClass javax/swing/AbstractButton innerClassName AccessibleAbstractButton flags 404
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+
+class name javax/swing/Box
+header extends javax/swing/JComponent implements javax/accessibility/Accessible nestMembers javax/swing/Box$AccessibleBox,javax/swing/Box$Filler,javax/swing/Box$Filler$AccessibleBoxFiller flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="accessibleContext")
+innerclass innerClass javax/swing/Box$Filler outerClass javax/swing/Box innerClassName Filler flags 9
+innerclass innerClass javax/swing/Box$AccessibleBox outerClass javax/swing/Box innerClassName AccessibleBox flags 4
+innerclass innerClass javax/swing/Box$Filler$AccessibleBoxFiller outerClass javax/swing/Box$Filler innerClassName AccessibleBoxFiller flags 4
+
+class name javax/swing/DefaultListCellRenderer
+header extends javax/swing/JLabel implements javax/swing/ListCellRenderer,java/io/Serializable nestMembers javax/swing/DefaultListCellRenderer$UIResource flags 21 signature Ljavax/swing/JLabel;Ljavax/swing/ListCellRenderer<Ljava/lang/Object;>;Ljava/io/Serializable;
+innerclass innerClass javax/swing/JList$DropLocation outerClass javax/swing/JList innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/DefaultListCellRenderer$UIResource outerClass javax/swing/DefaultListCellRenderer innerClassName UIResource flags 9
+
+class name javax/swing/GroupLayout
+header extends java/lang/Object implements java/awt/LayoutManager2 nestMembers javax/swing/GroupLayout$ParallelGroup,javax/swing/GroupLayout$SequentialGroup,javax/swing/GroupLayout$Group,javax/swing/GroupLayout$Spring,javax/swing/GroupLayout$Alignment flags 21
+innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019
+innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1
+innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401
+innerclass innerClass javax/swing/GroupLayout$SequentialGroup outerClass javax/swing/GroupLayout innerClassName SequentialGroup flags 1
+innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 402
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/GroupLayout$Group
+header extends javax/swing/GroupLayout$Spring nestHost javax/swing/GroupLayout flags 421
+innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401
+innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 402
+
+class name javax/swing/GroupLayout$ParallelGroup
+header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout flags 21
+innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1
+innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401
+innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019
+innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 402
+
+class name javax/swing/GroupLayout$SequentialGroup
+header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout flags 21
+innerclass innerClass javax/swing/GroupLayout$SequentialGroup outerClass javax/swing/GroupLayout innerClassName SequentialGroup flags 1
+innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401
+innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 402
+innerclass innerClass javax/swing/LayoutStyle$ComponentPlacement outerClass javax/swing/LayoutStyle innerClassName ComponentPlacement flags 4019
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+
+class name javax/swing/JCheckBoxMenuItem
+header extends javax/swing/JMenuItem implements javax/swing/SwingConstants,javax/accessibility/Accessible nestMembers javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;menu\u005C;u0020;item\u005C;u0020;which\u005C;u0020;can\u005C;u0020;be\u005C;u0020;selected\u005C;u0020;or\u005C;u0020;deselected.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JToggleButton$ToggleButtonModel outerClass javax/swing/JToggleButton innerClassName ToggleButtonModel flags 9
+innerclass innerClass javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem outerClass javax/swing/JCheckBoxMenuItem innerClassName AccessibleJCheckBoxMenuItem flags 4
+
+class name javax/swing/JComboBox
+header extends javax/swing/JComponent implements java/awt/ItemSelectable,javax/swing/event/ListDataListener,java/awt/event/ActionListener,javax/accessibility/Accessible nestMembers javax/swing/JComboBox$AccessibleJComboBox,javax/swing/JComboBox$KeySelectionManager flags 21 signature <E:Ljava/lang/Object;>Ljavax/swing/JComponent;Ljava/awt/ItemSelectable;Ljavax/swing/event/ListDataListener;Ljava/awt/event/ActionListener;Ljavax/accessibility/Accessible; runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;combination\u005C;u0020;of\u005C;u0020;a\u005C;u0020;text\u005C;u0020;field\u005C;u0020;and\u005C;u0020;a\u005C;u0020;drop-down\u005C;u0020;list.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JComboBox$KeySelectionManager outerClass javax/swing/JComboBox innerClassName KeySelectionManager flags 609
+innerclass innerClass javax/swing/JComboBox$AccessibleJComboBox outerClass javax/swing/JComboBox innerClassName AccessibleJComboBox flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JComponent
+header extends java/awt/Container implements java/io/Serializable,javax/swing/TransferHandler$HasGetTransferHandler nestMembers javax/swing/JComponent$AccessibleJComponent,javax/swing/JComponent$AccessibleJComponent$AccessibleFocusHandler,javax/swing/JComponent$AccessibleJComponent$AccessibleContainerHandler flags 421 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UIClassID")
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/TransferHandler$HasGetTransferHandler outerClass javax/swing/TransferHandler innerClassName HasGetTransferHandler flags 608
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent$AccessibleFocusHandler outerClass javax/swing/JComponent$AccessibleJComponent innerClassName AccessibleFocusHandler flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent$AccessibleContainerHandler outerClass javax/swing/JComponent$AccessibleJComponent innerClassName AccessibleContainerHandler flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JComponent$AccessibleJComponent
+header extends java/awt/Container$AccessibleAWTContainer implements javax/accessibility/AccessibleExtendedComponent nestHost javax/swing/JComponent flags 421
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass java/awt/Container$AccessibleAWTContainer outerClass java/awt/Container innerClassName AccessibleAWTContainer flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent$AccessibleFocusHandler outerClass javax/swing/JComponent$AccessibleJComponent innerClassName AccessibleFocusHandler flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent$AccessibleContainerHandler outerClass javax/swing/JComponent$AccessibleJComponent innerClassName AccessibleContainerHandler flags 4
+
+class name javax/swing/JDesktopPane
+header extends javax/swing/JLayeredPane implements javax/accessibility/Accessible nestMembers javax/swing/JDesktopPane$AccessibleJDesktopPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI")
+innerclass innerClass javax/swing/JInternalFrame$JDesktopIcon outerClass javax/swing/JInternalFrame innerClassName JDesktopIcon flags 9
+innerclass innerClass javax/swing/JDesktopPane$AccessibleJDesktopPane outerClass javax/swing/JDesktopPane innerClassName AccessibleJDesktopPane flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JDialog
+header extends java/awt/Dialog implements javax/swing/WindowConstants,javax/accessibility/Accessible,javax/swing/RootPaneContainer,javax/swing/TransferHandler$HasGetTransferHandler nestMembers javax/swing/JDialog$AccessibleJDialog flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="JMenuBar",description="A\u005C;u0020;toplevel\u005C;u0020;window\u005C;u0020;for\u005C;u0020;creating\u005C;u0020;dialog\u005C;u0020;boxes.")@Ljavax/swing/SwingContainer;(delegate="getContentPane")
+innerclass innerClass java/awt/Dialog$ModalityType outerClass java/awt/Dialog innerClassName ModalityType flags 4019
+innerclass innerClass javax/swing/JDialog$AccessibleJDialog outerClass javax/swing/JDialog innerClassName AccessibleJDialog flags 4
+innerclass innerClass javax/swing/TransferHandler$HasGetTransferHandler outerClass javax/swing/TransferHandler innerClassName HasGetTransferHandler flags 608
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JEditorPane
+header extends javax/swing/text/JTextComponent nestMembers javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport,javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink,javax/swing/JEditorPane$AccessibleJEditorPaneHTML,javax/swing/JEditorPane$AccessibleJEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UIClassID",description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;to\u005C;u0020;edit\u005C;u0020;various\u005C;u0020;types\u005C;u0020;of\u005C;u0020;content.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTMLDocument$Iterator outerClass javax/swing/text/html/HTMLDocument innerClassName Iterator flags 409
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/JEditorPane$AccessibleJEditorPaneHTML outerClass javax/swing/JEditorPane innerClassName AccessibleJEditorPaneHTML flags 4
+innerclass innerClass javax/swing/JEditorPane$AccessibleJEditorPane outerClass javax/swing/JEditorPane innerClassName AccessibleJEditorPane flags 4
+innerclass innerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport outerClass javax/swing/JEditorPane innerClassName JEditorPaneAccessibleHypertextSupport flags 4
+innerclass innerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink outerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport innerClassName HTMLLink flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JEditorPane$AccessibleJEditorPaneHTML
+header extends javax/swing/JEditorPane$AccessibleJEditorPane nestHost javax/swing/JEditorPane flags 21
+innerclass innerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport outerClass javax/swing/JEditorPane innerClassName JEditorPaneAccessibleHypertextSupport flags 4
+innerclass innerClass javax/swing/JEditorPane$AccessibleJEditorPaneHTML outerClass javax/swing/JEditorPane innerClassName AccessibleJEditorPaneHTML flags 4
+innerclass innerClass javax/swing/JEditorPane$AccessibleJEditorPane outerClass javax/swing/JEditorPane innerClassName AccessibleJEditorPane flags 4
+
+class name javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport
+header extends javax/swing/JEditorPane$AccessibleJEditorPane implements javax/accessibility/AccessibleHypertext nestHost javax/swing/JEditorPane flags 21
+innerclass innerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport outerClass javax/swing/JEditorPane innerClassName JEditorPaneAccessibleHypertextSupport flags 4
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink outerClass javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport innerClassName HTMLLink flags 1
+innerclass innerClass javax/swing/JEditorPane$AccessibleJEditorPane outerClass javax/swing/JEditorPane innerClassName AccessibleJEditorPane flags 4
+
+class name javax/swing/JFileChooser
+header extends javax/swing/JComponent implements javax/accessibility/Accessible nestMembers javax/swing/JFileChooser$AccessibleJFileChooser flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;which\u005C;u0020;allows\u005C;u0020;for\u005C;u0020;the\u005C;u0020;interactive\u005C;u0020;selection\u005C;u0020;of\u005C;u0020;a\u005C;u0020;file.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/JFileChooser$AccessibleJFileChooser outerClass javax/swing/JFileChooser innerClassName AccessibleJFileChooser flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JFormattedTextField
+header extends javax/swing/JTextField nestMembers javax/swing/JFormattedTextField$AbstractFormatter,javax/swing/JFormattedTextField$AbstractFormatterFactory flags 21 runtimeAnnotations @Ljava/beans/JavaBean;
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatterFactory outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatterFactory flags 409
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatter outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatter flags 409
+
+class name javax/swing/JLabel$AccessibleJLabel
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleText,javax/accessibility/AccessibleExtendedComponent nestHost javax/swing/JLabel flags 21
+innerclass innerClass javax/swing/JLabel$AccessibleJLabel outerClass javax/swing/JLabel innerClassName AccessibleJLabel flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+
+class name javax/swing/JList
+header extends javax/swing/JComponent implements javax/swing/Scrollable,javax/accessibility/Accessible nestMembers javax/swing/JList$AccessibleJList,javax/swing/JList$AccessibleJList$AccessibleJListChild,javax/swing/JList$DropLocation flags 21 signature <E:Ljava/lang/Object;>Ljavax/swing/JComponent;Ljavax/swing/Scrollable;Ljavax/accessibility/Accessible; runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;which\u005C;u0020;allows\u005C;u0020;for\u005C;u0020;the\u005C;u0020;selection\u005C;u0020;of\u005C;u0020;one\u005C;u0020;or\u005C;u0020;more\u005C;u0020;objects\u005C;u0020;from\u005C;u0020;a\u005C;u0020;list.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JList$DropLocation outerClass javax/swing/JList innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/JList$AccessibleJList outerClass javax/swing/JList innerClassName AccessibleJList flags 4
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JList$AccessibleJList$AccessibleJListChild outerClass javax/swing/JList$AccessibleJList innerClassName AccessibleJListChild flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JList$AccessibleJList
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleSelection,java/beans/PropertyChangeListener,javax/swing/event/ListSelectionListener,javax/swing/event/ListDataListener nestHost javax/swing/JList flags 21
+innerclass innerClass javax/swing/JList$AccessibleJList outerClass javax/swing/JList innerClassName AccessibleJList flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass javax/swing/JList$AccessibleJList$AccessibleJListChild outerClass javax/swing/JList$AccessibleJList innerClassName AccessibleJListChild flags 4
+
+class name javax/swing/JList$DropLocation
+header extends javax/swing/TransferHandler$DropLocation nestHost javax/swing/JList flags 31
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JList$DropLocation outerClass javax/swing/JList innerClassName DropLocation flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JMenu
+header extends javax/swing/JMenuItem implements javax/accessibility/Accessible,javax/swing/MenuElement nestMembers javax/swing/JMenu$AccessibleJMenu,javax/swing/JMenu$WinListener flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;popup\u005C;u0020;window\u005C;u0020;containing\u005C;u0020;menu\u005C;u0020;items\u005C;u0020;displayed\u005C;u0020;in\u005C;u0020;a\u005C;u0020;menu\u005C;u0020;bar.")@Ljavax/swing/SwingContainer;
+innerclass innerClass javax/swing/JMenu$WinListener outerClass javax/swing/JMenu innerClassName WinListener flags 4
+innerclass innerClass javax/swing/JPopupMenu$Separator outerClass javax/swing/JPopupMenu innerClassName Separator flags 9
+innerclass innerClass javax/swing/JMenu$AccessibleJMenu outerClass javax/swing/JMenu innerClassName AccessibleJMenu flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JOptionPane
+header extends javax/swing/JComponent implements javax/accessibility/Accessible nestMembers javax/swing/JOptionPane$AccessibleJOptionPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;which\u005C;u0020;implements\u005C;u0020;standard\u005C;u0020;dialog\u005C;u0020;box\u005C;u0020;controls.")@Ljavax/swing/SwingContainer;
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/JOptionPane$AccessibleJOptionPane outerClass javax/swing/JOptionPane innerClassName AccessibleJOptionPane flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JRadioButtonMenuItem
+header extends javax/swing/JMenuItem implements javax/accessibility/Accessible nestMembers javax/swing/JRadioButtonMenuItem$AccessibleJRadioButtonMenuItem flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;component\u005C;u0020;within\u005C;u0020;a\u005C;u0020;group\u005C;u0020;of\u005C;u0020;menu\u005C;u0020;items\u005C;u0020;which\u005C;u0020;can\u005C;u0020;be\u005C;u0020;selected.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JToggleButton$ToggleButtonModel outerClass javax/swing/JToggleButton innerClassName ToggleButtonModel flags 9
+innerclass innerClass javax/swing/JRadioButtonMenuItem$AccessibleJRadioButtonMenuItem outerClass javax/swing/JRadioButtonMenuItem innerClassName AccessibleJRadioButtonMenuItem flags 4
+
+class name javax/swing/JRootPane
+header extends javax/swing/JComponent implements javax/accessibility/Accessible nestMembers javax/swing/JRootPane$AccessibleJRootPane,javax/swing/JRootPane$RootLayout flags 21
+innerclass innerClass javax/swing/JRootPane$RootLayout outerClass javax/swing/JRootPane innerClassName RootLayout flags 4
+innerclass innerClass javax/swing/JRootPane$AccessibleJRootPane outerClass javax/swing/JRootPane innerClassName AccessibleJRootPane flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JScrollPane
+header extends javax/swing/JComponent implements javax/swing/ScrollPaneConstants,javax/accessibility/Accessible nestMembers javax/swing/JScrollPane$AccessibleJScrollPane,javax/swing/JScrollPane$ScrollBar flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;specialized\u005C;u0020;container\u005C;u0020;that\u005C;u0020;manages\u005C;u0020;a\u005C;u0020;viewport,\u005C;u0020;optional\u005C;u0020;scrollbars\u005C;u0020;and\u005C;u0020;headers")@Ljavax/swing/SwingContainer;(delegate="getViewport")
+innerclass innerClass javax/swing/ScrollPaneLayout$UIResource outerClass javax/swing/ScrollPaneLayout innerClassName UIResource flags 9
+innerclass innerClass javax/swing/JScrollPane$ScrollBar outerClass javax/swing/JScrollPane innerClassName ScrollBar flags 4
+innerclass innerClass javax/swing/JScrollPane$AccessibleJScrollPane outerClass javax/swing/JScrollPane innerClassName AccessibleJScrollPane flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JSpinner
+header extends javax/swing/JComponent implements javax/accessibility/Accessible nestMembers javax/swing/JSpinner$AccessibleJSpinner,javax/swing/JSpinner$ListEditor,javax/swing/JSpinner$NumberEditor,javax/swing/JSpinner$DateEditor,javax/swing/JSpinner$DefaultEditor flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;single\u005C;u0020;line\u005C;u0020;input\u005C;u0020;field\u005C;u0020;that\u005C;u0020;lets\u005C;u0020;the\u005C;u0020;user\u005C;u0020;select\u005C;u0020;a\u005C;u0020;number\u005C;u0020;or\u005C;u0020;an\u005C;u0020;object\u005C;u0020;value\u005C;u0020;from\u005C;u0020;an\u005C;u0020;ordered\u005C;u0020;set.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JSpinner$DateEditor outerClass javax/swing/JSpinner innerClassName DateEditor flags 9
+innerclass innerClass javax/swing/JSpinner$ListEditor outerClass javax/swing/JSpinner innerClassName ListEditor flags 9
+innerclass innerClass javax/swing/JSpinner$NumberEditor outerClass javax/swing/JSpinner innerClassName NumberEditor flags 9
+innerclass innerClass javax/swing/JSpinner$DefaultEditor outerClass javax/swing/JSpinner innerClassName DefaultEditor flags 9
+innerclass innerClass javax/swing/JSpinner$AccessibleJSpinner outerClass javax/swing/JSpinner innerClassName AccessibleJSpinner flags 4
+
+class name javax/swing/JSpinner$AccessibleJSpinner
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleValue,javax/accessibility/AccessibleAction,javax/accessibility/AccessibleText,javax/accessibility/AccessibleEditableText,javax/swing/event/ChangeListener nestHost javax/swing/JSpinner flags 21
+innerclass innerClass javax/swing/JSpinner$AccessibleJSpinner outerClass javax/swing/JSpinner innerClassName AccessibleJSpinner flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass javax/swing/JSpinner$DefaultEditor outerClass javax/swing/JSpinner innerClassName DefaultEditor flags 9
+
+class name javax/swing/JSpinner$ListEditor
+header extends javax/swing/JSpinner$DefaultEditor nestHost javax/swing/JSpinner flags 21
+innerclass innerClass javax/swing/JSpinner$DefaultEditor outerClass javax/swing/JSpinner innerClassName DefaultEditor flags 9
+innerclass innerClass javax/swing/JSpinner$ListEditor outerClass javax/swing/JSpinner innerClassName ListEditor flags 9
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatter outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatter flags 409
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatterFactory outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatterFactory flags 409
+
+class name javax/swing/JTabbedPane
+header extends javax/swing/JComponent implements java/io/Serializable,javax/accessibility/Accessible,javax/swing/SwingConstants nestMembers javax/swing/JTabbedPane$AccessibleJTabbedPane,javax/swing/JTabbedPane$ModelListener flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;which\u005C;u0020;provides\u005C;u0020;a\u005C;u0020;tab\u005C;u0020;folder\u005C;u0020;metaphor\u005C;u0020;for\u005C;u0020;displaying\u005C;u0020;one\u005C;u0020;component\u005C;u0020;from\u005C;u0020;a\u005C;u0020;set\u005C;u0020;of\u005C;u0020;components.")@Ljavax/swing/SwingContainer;
+innerclass innerClass javax/swing/JTabbedPane$ModelListener outerClass javax/swing/JTabbedPane innerClassName ModelListener flags 4
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/JTabbedPane$AccessibleJTabbedPane outerClass javax/swing/JTabbedPane innerClassName AccessibleJTabbedPane flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JTable
+header extends javax/swing/JComponent implements javax/swing/event/TableModelListener,javax/swing/Scrollable,javax/swing/event/TableColumnModelListener,javax/swing/event/ListSelectionListener,javax/swing/event/CellEditorListener,javax/accessibility/Accessible,javax/swing/event/RowSorterListener nestMembers javax/swing/JTable$AccessibleJTable,javax/swing/JTable$AccessibleJTable$AccessibleJTableCell,javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange,javax/swing/JTable$DropLocation,javax/swing/JTable$PrintMode flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;which\u005C;u0020;displays\u005C;u0020;data\u005C;u0020;in\u005C;u0020;a\u005C;u0020;two\u005C;u0020;dimensional\u005C;u0020;grid.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JTable$DropLocation outerClass javax/swing/JTable innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/event/RowSorterEvent$Type outerClass javax/swing/event/RowSorterEvent innerClassName Type flags 4019
+innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/JTable$PrintMode outerClass javax/swing/JTable innerClassName PrintMode flags 4019
+innerclass innerClass javax/swing/JTable$AccessibleJTable outerClass javax/swing/JTable innerClassName AccessibleJTable flags 4
+innerclass innerClass javax/swing/table/DefaultTableCellRenderer$UIResource outerClass javax/swing/table/DefaultTableCellRenderer innerClassName UIResource flags 9
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JTable$AccessibleJTable$AccessibleJTableCell outerClass javax/swing/JTable$AccessibleJTable innerClassName AccessibleJTableCell flags 4
+innerclass innerClass javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange outerClass javax/swing/JTable$AccessibleJTable innerClassName AccessibleJTableModelChange flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JTable$AccessibleJTable
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleSelection,javax/swing/event/ListSelectionListener,javax/swing/event/TableModelListener,javax/swing/event/TableColumnModelListener,javax/swing/event/CellEditorListener,java/beans/PropertyChangeListener,javax/accessibility/AccessibleExtendedTable nestHost javax/swing/JTable flags 21
+innerclass innerClass javax/swing/JTable$AccessibleJTable outerClass javax/swing/JTable innerClassName AccessibleJTable flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange outerClass javax/swing/JTable$AccessibleJTable innerClassName AccessibleJTableModelChange flags 4
+innerclass innerClass javax/swing/JTable$AccessibleJTable$AccessibleJTableCell outerClass javax/swing/JTable$AccessibleJTable innerClassName AccessibleJTableCell flags 4
+
+class name javax/swing/JTable$DropLocation
+header extends javax/swing/TransferHandler$DropLocation nestHost javax/swing/JTable flags 31
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JTable$DropLocation outerClass javax/swing/JTable innerClassName DropLocation flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JToggleButton
+header extends javax/swing/AbstractButton implements javax/accessibility/Accessible nestMembers javax/swing/JToggleButton$AccessibleJToggleButton,javax/swing/JToggleButton$ToggleButtonModel flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UIClassID",description="An\u005C;u0020;implementation\u005C;u0020;of\u005C;u0020;a\u005C;u0020;two-state\u005C;u0020;button.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JToggleButton$ToggleButtonModel outerClass javax/swing/JToggleButton innerClassName ToggleButtonModel flags 9
+innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019
+innerclass innerClass javax/swing/JToggleButton$AccessibleJToggleButton outerClass javax/swing/JToggleButton innerClassName AccessibleJToggleButton flags 4
+
+class name javax/swing/JToolBar
+header extends javax/swing/JComponent implements javax/swing/SwingConstants,javax/accessibility/Accessible nestMembers javax/swing/JToolBar$AccessibleJToolBar,javax/swing/JToolBar$Separator flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;which\u005C;u0020;displays\u005C;u0020;commonly\u005C;u0020;used\u005C;u0020;controls\u005C;u0020;or\u005C;u0020;Actions.")@Ljavax/swing/SwingContainer;
+innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9
+innerclass innerClass javax/swing/JToolBar$AccessibleJToolBar outerClass javax/swing/JToolBar innerClassName AccessibleJToolBar flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JTree
+header extends javax/swing/JComponent implements javax/swing/Scrollable,javax/accessibility/Accessible nestMembers javax/swing/JTree$AccessibleJTree,javax/swing/JTree$AccessibleJTree$AccessibleJTreeNode,javax/swing/JTree$DynamicUtilTreeNode,javax/swing/JTree$TreeModelHandler,javax/swing/JTree$TreeSelectionRedirector,javax/swing/JTree$EmptySelectionModel,javax/swing/JTree$DropLocation flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI",description="A\u005C;u0020;component\u005C;u0020;that\u005C;u0020;displays\u005C;u0020;a\u005C;u0020;set\u005C;u0020;of\u005C;u0020;hierarchical\u005C;u0020;data\u005C;u0020;as\u005C;u0020;an\u005C;u0020;outline.")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/JTree$DynamicUtilTreeNode outerClass javax/swing/JTree innerClassName DynamicUtilTreeNode flags 9
+innerclass innerClass javax/swing/JTree$AccessibleJTree outerClass javax/swing/JTree innerClassName AccessibleJTree flags 4
+innerclass innerClass javax/swing/JTree$DropLocation outerClass javax/swing/JTree innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/JTree$EmptySelectionModel outerClass javax/swing/JTree innerClassName EmptySelectionModel flags c
+innerclass innerClass javax/swing/JTree$TreeSelectionRedirector outerClass javax/swing/JTree innerClassName TreeSelectionRedirector flags 4
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/JTree$TreeModelHandler outerClass javax/swing/JTree innerClassName TreeModelHandler flags 4
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JTree$AccessibleJTree$AccessibleJTreeNode outerClass javax/swing/JTree$AccessibleJTree innerClassName AccessibleJTreeNode flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JTree$AccessibleJTree
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleSelection,javax/swing/event/TreeSelectionListener,javax/swing/event/TreeModelListener,javax/swing/event/TreeExpansionListener nestHost javax/swing/JTree flags 21
+innerclass innerClass javax/swing/JTree$AccessibleJTree outerClass javax/swing/JTree innerClassName AccessibleJTree flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass javax/swing/JTree$AccessibleJTree$AccessibleJTreeNode outerClass javax/swing/JTree$AccessibleJTree innerClassName AccessibleJTreeNode flags 4
+
+class name javax/swing/JTree$DropLocation
+header extends javax/swing/TransferHandler$DropLocation nestHost javax/swing/JTree flags 31
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/JTree$DropLocation outerClass javax/swing/JTree innerClassName DropLocation flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/JViewport
+header extends javax/swing/JComponent implements javax/accessibility/Accessible nestMembers javax/swing/JViewport$AccessibleJViewport,javax/swing/JViewport$ViewListener flags 21
+innerclass innerClass javax/swing/JViewport$ViewListener outerClass javax/swing/JViewport innerClassName ViewListener flags 4
+innerclass innerClass javax/swing/JViewport$AccessibleJViewport outerClass javax/swing/JViewport innerClassName AccessibleJViewport flags 4
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/RowFilter
+header extends java/lang/Object nestMembers javax/swing/RowFilter$Entry,javax/swing/RowFilter$ComparisonType flags 421 signature <M:Ljava/lang/Object;I:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass javax/swing/RowFilter$ComparisonType outerClass javax/swing/RowFilter innerClassName ComparisonType flags 4019
+innerclass innerClass javax/swing/RowFilter$Entry outerClass javax/swing/RowFilter innerClassName Entry flags 409
+
+class name javax/swing/RowSorter
+header extends java/lang/Object nestMembers javax/swing/RowSorter$SortKey flags 421 signature <M:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass javax/swing/event/RowSorterEvent$Type outerClass javax/swing/event/RowSorterEvent innerClassName Type flags 4019
+innerclass innerClass javax/swing/RowSorter$SortKey outerClass javax/swing/RowSorter innerClassName SortKey flags 9
+
+class name javax/swing/ToolTipManager
+header extends java/awt/event/MouseAdapter implements java/awt/event/MouseMotionListener nestMembers javax/swing/ToolTipManager$stillInsideTimerAction,javax/swing/ToolTipManager$outsideTimerAction,javax/swing/ToolTipManager$insideTimerAction flags 21
+innerclass innerClass javax/swing/ToolTipManager$insideTimerAction outerClass javax/swing/ToolTipManager innerClassName insideTimerAction flags 4
+innerclass innerClass javax/swing/ToolTipManager$outsideTimerAction outerClass javax/swing/ToolTipManager innerClassName outsideTimerAction flags 4
+innerclass innerClass javax/swing/ToolTipManager$stillInsideTimerAction outerClass javax/swing/ToolTipManager innerClassName stillInsideTimerAction flags 4
+
+class name javax/swing/TransferHandler$TransferSupport
+header extends java/lang/Object nestHost javax/swing/TransferHandler flags 31
+innerclass innerClass javax/swing/TransferHandler$TransferSupport outerClass javax/swing/TransferHandler innerClassName TransferSupport flags 19
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/UIDefaults
+header extends java/util/Hashtable nestMembers javax/swing/UIDefaults$LazyInputMap,javax/swing/UIDefaults$ProxyLazyValue,javax/swing/UIDefaults$ActiveValue,javax/swing/UIDefaults$LazyValue flags 21 signature Ljava/util/Hashtable<Ljava/lang/Object;Ljava/lang/Object;>;
+innerclass innerClass javax/swing/UIDefaults$ActiveValue outerClass javax/swing/UIDefaults innerClassName ActiveValue flags 609
+innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609
+innerclass innerClass javax/swing/UIDefaults$LazyInputMap outerClass javax/swing/UIDefaults innerClassName LazyInputMap flags 9
+innerclass innerClass javax/swing/UIDefaults$ProxyLazyValue outerClass javax/swing/UIDefaults innerClassName ProxyLazyValue flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/border/StrokeBorder
+header extends javax/swing/border/AbstractBorder flags 21
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+
+class name javax/swing/border/TitledBorder
+header extends javax/swing/border/AbstractBorder flags 21
+innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/plaf/BorderUIResource
+header extends java/lang/Object implements javax/swing/border/Border,javax/swing/plaf/UIResource,java/io/Serializable nestMembers javax/swing/plaf/BorderUIResource$TitledBorderUIResource,javax/swing/plaf/BorderUIResource$MatteBorderUIResource,javax/swing/plaf/BorderUIResource$EtchedBorderUIResource,javax/swing/plaf/BorderUIResource$BevelBorderUIResource,javax/swing/plaf/BorderUIResource$LineBorderUIResource,javax/swing/plaf/BorderUIResource$EmptyBorderUIResource,javax/swing/plaf/BorderUIResource$CompoundBorderUIResource flags 21
+innerclass innerClass javax/swing/plaf/BorderUIResource$EtchedBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName EtchedBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$BevelBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName BevelBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$LineBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName LineBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$TitledBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName TitledBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$MatteBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName MatteBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$EmptyBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName EmptyBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$CompoundBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName CompoundBorderUIResource flags 9
+
+class name javax/swing/plaf/basic/BasicBorders
+header extends java/lang/Object nestMembers javax/swing/plaf/basic/BasicBorders$SplitPaneBorder,javax/swing/plaf/basic/BasicBorders$FieldBorder,javax/swing/plaf/basic/BasicBorders$MarginBorder,javax/swing/plaf/basic/BasicBorders$MenuBarBorder,javax/swing/plaf/basic/BasicBorders$RadioButtonBorder,javax/swing/plaf/basic/BasicBorders$ToggleButtonBorder,javax/swing/plaf/basic/BasicBorders$ButtonBorder,javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder flags 21
+innerclass innerClass javax/swing/plaf/BorderUIResource$CompoundBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName CompoundBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$MarginBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName MarginBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$RadioButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName RadioButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ToggleButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ToggleButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$MenuBarBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName MenuBarBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$SplitPaneBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName SplitPaneBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$FieldBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName FieldBorder flags 9
+innerclass innerClass javax/swing/plaf/BorderUIResource$LineBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName LineBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName RolloverButtonBorder flags 9
+
+class name javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
+header extends javax/swing/plaf/basic/BasicBorders$ButtonBorder nestHost javax/swing/plaf/basic/BasicBorders flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$RadioButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName RadioButtonBorder flags 9
+
+class name javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder
+header extends javax/swing/plaf/basic/BasicBorders$ButtonBorder nestHost javax/swing/plaf/basic/BasicBorders flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName RolloverButtonBorder flags 9
+
+class name javax/swing/plaf/basic/BasicBorders$ToggleButtonBorder
+header extends javax/swing/plaf/basic/BasicBorders$ButtonBorder nestHost javax/swing/plaf/basic/BasicBorders flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ToggleButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ToggleButtonBorder flags 9
+
+class name javax/swing/plaf/basic/BasicComboBoxUI
+header extends javax/swing/plaf/ComboBoxUI nestMembers javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager,javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicComboBoxUI$ItemHandler,javax/swing/plaf/basic/BasicComboBoxUI$ListDataHandler,javax/swing/plaf/basic/BasicComboBoxUI$FocusHandler,javax/swing/plaf/basic/BasicComboBoxUI$KeyHandler flags 21
+innerclass innerClass javax/swing/JComboBox$KeySelectionManager outerClass javax/swing/JComboBox innerClassName KeySelectionManager flags 609
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource outerClass javax/swing/plaf/basic/BasicComboBoxRenderer innerClassName UIResource flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxEditor$UIResource outerClass javax/swing/plaf/basic/BasicComboBoxEditor innerClassName UIResource flags 9
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager outerClass javax/swing/plaf/basic/BasicComboBoxUI innerClassName ComboBoxLayoutManager flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicComboBoxUI innerClassName PropertyChangeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxUI$ItemHandler outerClass javax/swing/plaf/basic/BasicComboBoxUI innerClassName ItemHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxUI$ListDataHandler outerClass javax/swing/plaf/basic/BasicComboBoxUI innerClassName ListDataHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxUI$FocusHandler outerClass javax/swing/plaf/basic/BasicComboBoxUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicComboBoxUI$KeyHandler outerClass javax/swing/plaf/basic/BasicComboBoxUI innerClassName KeyHandler flags 1
+
+class name javax/swing/plaf/basic/BasicDesktopIconUI
+header extends javax/swing/plaf/DesktopIconUI nestMembers javax/swing/plaf/basic/BasicDesktopIconUI$MouseInputHandler flags 21
+innerclass innerClass javax/swing/JInternalFrame$JDesktopIcon outerClass javax/swing/JInternalFrame innerClassName JDesktopIcon flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicDesktopIconUI$MouseInputHandler outerClass javax/swing/plaf/basic/BasicDesktopIconUI innerClassName MouseInputHandler flags 1
+
+class name javax/swing/plaf/basic/BasicFileChooserUI
+header extends javax/swing/plaf/FileChooserUI nestMembers javax/swing/plaf/basic/BasicFileChooserUI$BasicFileView,javax/swing/plaf/basic/BasicFileChooserUI$AcceptAllFileFilter,javax/swing/plaf/basic/BasicFileChooserUI$UpdateAction,javax/swing/plaf/basic/BasicFileChooserUI$CancelSelectionAction,javax/swing/plaf/basic/BasicFileChooserUI$ApproveSelectionAction,javax/swing/plaf/basic/BasicFileChooserUI$ChangeToParentDirectoryAction,javax/swing/plaf/basic/BasicFileChooserUI$GoHomeAction,javax/swing/plaf/basic/BasicFileChooserUI$NewFolderAction,javax/swing/plaf/basic/BasicFileChooserUI$SelectionListener,javax/swing/plaf/basic/BasicFileChooserUI$DoubleClickListener flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$ApproveSelectionAction outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName ApproveSelectionAction flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$CancelSelectionAction outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName CancelSelectionAction flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$UpdateAction outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName UpdateAction flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$GoHomeAction outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName GoHomeAction flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$ChangeToParentDirectoryAction outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName ChangeToParentDirectoryAction flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$AcceptAllFileFilter outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName AcceptAllFileFilter flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$BasicFileView outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName BasicFileView flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$NewFolderAction outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName NewFolderAction flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$SelectionListener outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName SelectionListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicFileChooserUI$DoubleClickListener outerClass javax/swing/plaf/basic/BasicFileChooserUI innerClassName DoubleClickListener flags 4
+
+class name javax/swing/plaf/basic/BasicInternalFrameTitlePane
+header extends javax/swing/JComponent nestMembers javax/swing/plaf/basic/BasicInternalFrameTitlePane$SystemMenuBar,javax/swing/plaf/basic/BasicInternalFrameTitlePane$SizeAction,javax/swing/plaf/basic/BasicInternalFrameTitlePane$MoveAction,javax/swing/plaf/basic/BasicInternalFrameTitlePane$RestoreAction,javax/swing/plaf/basic/BasicInternalFrameTitlePane$IconifyAction,javax/swing/plaf/basic/BasicInternalFrameTitlePane$MaximizeAction,javax/swing/plaf/basic/BasicInternalFrameTitlePane$CloseAction,javax/swing/plaf/basic/BasicInternalFrameTitlePane$TitlePaneLayout,javax/swing/plaf/basic/BasicInternalFrameTitlePane$PropertyChangeHandler flags 21
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$MaximizeAction outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName MaximizeAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$IconifyAction outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName IconifyAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$CloseAction outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName CloseAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$RestoreAction outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName RestoreAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$MoveAction outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName MoveAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$SizeAction outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName SizeAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$SystemMenuBar outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName SystemMenuBar flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$TitlePaneLayout outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName TitlePaneLayout flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicInternalFrameTitlePane innerClassName PropertyChangeHandler flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/plaf/basic/BasicInternalFrameUI
+header extends javax/swing/plaf/InternalFrameUI nestMembers javax/swing/plaf/basic/BasicInternalFrameUI$BasicInternalFrameListener,javax/swing/plaf/basic/BasicInternalFrameUI$GlassPaneDispatcher,javax/swing/plaf/basic/BasicInternalFrameUI$ComponentHandler,javax/swing/plaf/basic/BasicInternalFrameUI$BorderListener,javax/swing/plaf/basic/BasicInternalFrameUI$InternalFrameLayout,javax/swing/plaf/basic/BasicInternalFrameUI$InternalFramePropertyChangeListener flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameUI$BorderListener outerClass javax/swing/plaf/basic/BasicInternalFrameUI innerClassName BorderListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameUI$BasicInternalFrameListener outerClass javax/swing/plaf/basic/BasicInternalFrameUI innerClassName BasicInternalFrameListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameUI$GlassPaneDispatcher outerClass javax/swing/plaf/basic/BasicInternalFrameUI innerClassName GlassPaneDispatcher flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameUI$ComponentHandler outerClass javax/swing/plaf/basic/BasicInternalFrameUI innerClassName ComponentHandler flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameUI$InternalFrameLayout outerClass javax/swing/plaf/basic/BasicInternalFrameUI innerClassName InternalFrameLayout flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicInternalFrameUI$InternalFramePropertyChangeListener outerClass javax/swing/plaf/basic/BasicInternalFrameUI innerClassName InternalFramePropertyChangeListener flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/plaf/basic/BasicListUI
+header extends javax/swing/plaf/ListUI nestMembers javax/swing/plaf/basic/BasicListUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicListUI$ListDataHandler,javax/swing/plaf/basic/BasicListUI$ListSelectionHandler,javax/swing/plaf/basic/BasicListUI$FocusHandler,javax/swing/plaf/basic/BasicListUI$MouseInputHandler flags 21
+innerclass innerClass javax/swing/JList$DropLocation outerClass javax/swing/JList innerClassName DropLocation flags 19
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/plaf/basic/BasicListUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicListUI innerClassName PropertyChangeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicListUI$ListDataHandler outerClass javax/swing/plaf/basic/BasicListUI innerClassName ListDataHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicListUI$ListSelectionHandler outerClass javax/swing/plaf/basic/BasicListUI innerClassName ListSelectionHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicListUI$FocusHandler outerClass javax/swing/plaf/basic/BasicListUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicListUI$MouseInputHandler outerClass javax/swing/plaf/basic/BasicListUI innerClassName MouseInputHandler flags 1
+
+class name javax/swing/plaf/basic/BasicOptionPaneUI
+header extends javax/swing/plaf/OptionPaneUI nestMembers javax/swing/plaf/basic/BasicOptionPaneUI$ButtonActionListener,javax/swing/plaf/basic/BasicOptionPaneUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicOptionPaneUI$ButtonAreaLayout flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicOptionPaneUI$ButtonAreaLayout outerClass javax/swing/plaf/basic/BasicOptionPaneUI innerClassName ButtonAreaLayout flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicOptionPaneUI$ButtonActionListener outerClass javax/swing/plaf/basic/BasicOptionPaneUI innerClassName ButtonActionListener flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicOptionPaneUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicOptionPaneUI innerClassName PropertyChangeHandler flags 1
+
+class name javax/swing/plaf/basic/BasicProgressBarUI
+header extends javax/swing/plaf/ProgressBarUI nestMembers javax/swing/plaf/basic/BasicProgressBarUI$ChangeHandler flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/plaf/basic/BasicProgressBarUI$ChangeHandler outerClass javax/swing/plaf/basic/BasicProgressBarUI innerClassName ChangeHandler flags 1
+
+class name javax/swing/plaf/basic/BasicScrollBarUI
+header extends javax/swing/plaf/ScrollBarUI implements java/awt/LayoutManager,javax/swing/SwingConstants nestMembers javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener,javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener,javax/swing/plaf/basic/BasicScrollBarUI$TrackListener,javax/swing/plaf/basic/BasicScrollBarUI$ModelListener flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicScrollBarUI$TrackListener outerClass javax/swing/plaf/basic/BasicScrollBarUI innerClassName TrackListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener outerClass javax/swing/plaf/basic/BasicScrollBarUI innerClassName ArrowButtonListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicScrollBarUI$ModelListener outerClass javax/swing/plaf/basic/BasicScrollBarUI innerClassName ModelListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener outerClass javax/swing/plaf/basic/BasicScrollBarUI innerClassName ScrollListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicScrollBarUI innerClassName PropertyChangeHandler flags 1
+
+class name javax/swing/plaf/basic/BasicScrollPaneUI
+header extends javax/swing/plaf/ScrollPaneUI implements javax/swing/ScrollPaneConstants nestMembers javax/swing/plaf/basic/BasicScrollPaneUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicScrollPaneUI$MouseWheelHandler,javax/swing/plaf/basic/BasicScrollPaneUI$VSBChangeListener,javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener,javax/swing/plaf/basic/BasicScrollPaneUI$ViewportChangeHandler flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName PropertyChangeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$MouseWheelHandler outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName MouseWheelHandler flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$VSBChangeListener outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName VSBChangeListener flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName HSBChangeListener flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$ViewportChangeHandler outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName ViewportChangeHandler flags 1
+
+class name javax/swing/plaf/basic/BasicSliderUI
+header extends javax/swing/plaf/SliderUI nestMembers javax/swing/plaf/basic/BasicSliderUI$ActionScroller,javax/swing/plaf/basic/BasicSliderUI$FocusHandler,javax/swing/plaf/basic/BasicSliderUI$ComponentHandler,javax/swing/plaf/basic/BasicSliderUI$ScrollListener,javax/swing/plaf/basic/BasicSliderUI$TrackListener,javax/swing/plaf/basic/BasicSliderUI$ChangeHandler,javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$TrackListener outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName TrackListener flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$ScrollListener outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName ScrollListener flags 1
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$ActionScroller outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName ActionScroller flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$FocusHandler outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$ComponentHandler outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName ComponentHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$ChangeHandler outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName ChangeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName PropertyChangeHandler flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/plaf/basic/BasicSpinnerUI
+header extends javax/swing/plaf/SpinnerUI flags 21
+innerclass innerClass javax/swing/JSpinner$DefaultEditor outerClass javax/swing/JSpinner innerClassName DefaultEditor flags 9
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+
+class name javax/swing/plaf/basic/BasicSplitPaneDivider
+header extends java/awt/Container implements java/beans/PropertyChangeListener nestMembers javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout,javax/swing/plaf/basic/BasicSplitPaneDivider$VerticalDragController,javax/swing/plaf/basic/BasicSplitPaneDivider$DragController,javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout outerClass javax/swing/plaf/basic/BasicSplitPaneDivider innerClassName DividerLayout flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler outerClass javax/swing/plaf/basic/BasicSplitPaneDivider innerClassName MouseHandler flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneDivider$VerticalDragController outerClass javax/swing/plaf/basic/BasicSplitPaneDivider innerClassName VerticalDragController flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneDivider$DragController outerClass javax/swing/plaf/basic/BasicSplitPaneDivider innerClassName DragController flags 4
+
+class name javax/swing/plaf/basic/BasicSplitPaneUI
+header extends javax/swing/plaf/SplitPaneUI nestMembers javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager,javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager,javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardResizeToggleHandler,javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardEndHandler,javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardHomeHandler,javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardDownRightHandler,javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardUpLeftHandler,javax/swing/plaf/basic/BasicSplitPaneUI$FocusHandler,javax/swing/plaf/basic/BasicSplitPaneUI$PropertyHandler flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicHorizontalLayoutManager flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardUpLeftHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName KeyboardUpLeftHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardDownRightHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName KeyboardDownRightHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardHomeHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName KeyboardHomeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardEndHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName KeyboardEndHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardResizeToggleHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName KeyboardResizeToggleHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicVerticalLayoutManager flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$FocusHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$PropertyHandler outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName PropertyHandler flags 1
+
+class name javax/swing/plaf/basic/BasicTabbedPaneUI
+header extends javax/swing/plaf/TabbedPaneUI implements javax/swing/SwingConstants nestMembers javax/swing/plaf/basic/BasicTabbedPaneUI$FocusHandler,javax/swing/plaf/basic/BasicTabbedPaneUI$MouseHandler,javax/swing/plaf/basic/BasicTabbedPaneUI$TabSelectionHandler,javax/swing/plaf/basic/BasicTabbedPaneUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout outerClass javax/swing/plaf/basic/BasicTabbedPaneUI innerClassName TabbedPaneLayout flags 1
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/plaf/basic/BasicTabbedPaneUI$FocusHandler outerClass javax/swing/plaf/basic/BasicTabbedPaneUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTabbedPaneUI$MouseHandler outerClass javax/swing/plaf/basic/BasicTabbedPaneUI innerClassName MouseHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTabbedPaneUI$TabSelectionHandler outerClass javax/swing/plaf/basic/BasicTabbedPaneUI innerClassName TabSelectionHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTabbedPaneUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicTabbedPaneUI innerClassName PropertyChangeHandler flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/plaf/basic/BasicTableUI
+header extends javax/swing/plaf/TableUI nestMembers javax/swing/plaf/basic/BasicTableUI$MouseInputHandler,javax/swing/plaf/basic/BasicTableUI$FocusHandler,javax/swing/plaf/basic/BasicTableUI$KeyHandler flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/JTable$PrintMode outerClass javax/swing/JTable innerClassName PrintMode flags 4019
+innerclass innerClass javax/swing/JTable$DropLocation outerClass javax/swing/JTable innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/plaf/basic/BasicTableUI$MouseInputHandler outerClass javax/swing/plaf/basic/BasicTableUI innerClassName MouseInputHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTableUI$FocusHandler outerClass javax/swing/plaf/basic/BasicTableUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTableUI$KeyHandler outerClass javax/swing/plaf/basic/BasicTableUI innerClassName KeyHandler flags 1
+
+class name javax/swing/plaf/basic/BasicTextUI
+header extends javax/swing/plaf/TextUI implements javax/swing/text/ViewFactory nestMembers javax/swing/plaf/basic/BasicTextUI$BasicHighlighter,javax/swing/plaf/basic/BasicTextUI$BasicCaret flags 421
+innerclass innerClass javax/swing/plaf/basic/BasicTextUI$BasicCaret outerClass javax/swing/plaf/basic/BasicTextUI innerClassName BasicCaret flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicTextUI$BasicHighlighter outerClass javax/swing/plaf/basic/BasicTextUI innerClassName BasicHighlighter flags 9
+innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$InsertBreakAction outerClass javax/swing/text/DefaultEditorKit innerClassName InsertBreakAction flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/plaf/basic/BasicToolBarUI
+header extends javax/swing/plaf/ToolBarUI implements javax/swing/SwingConstants nestMembers javax/swing/plaf/basic/BasicToolBarUI$DragWindow,javax/swing/plaf/basic/BasicToolBarUI$DockingListener,javax/swing/plaf/basic/BasicToolBarUI$PropertyListener,javax/swing/plaf/basic/BasicToolBarUI$ToolBarFocusListener,javax/swing/plaf/basic/BasicToolBarUI$ToolBarContListener,javax/swing/plaf/basic/BasicToolBarUI$FrameListener flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$DragWindow outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName DragWindow flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName RolloverButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$ButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$RadioButtonBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName RadioButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$FrameListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName FrameListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$DockingListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName DockingListener flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$PropertyListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName PropertyListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$ToolBarFocusListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName ToolBarFocusListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$ToolBarContListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName ToolBarContListener flags 4
+
+class name javax/swing/plaf/basic/BasicTreeUI
+header extends javax/swing/plaf/TreeUI nestMembers javax/swing/plaf/basic/BasicTreeUI$MouseInputHandler,javax/swing/plaf/basic/BasicTreeUI$TreeCancelEditingAction,javax/swing/plaf/basic/BasicTreeUI$TreeToggleAction,javax/swing/plaf/basic/BasicTreeUI$TreeHomeAction,javax/swing/plaf/basic/BasicTreeUI$TreeIncrementAction,javax/swing/plaf/basic/BasicTreeUI$TreePageAction,javax/swing/plaf/basic/BasicTreeUI$TreeTraverseAction,javax/swing/plaf/basic/BasicTreeUI$SelectionModelPropertyChangeHandler,javax/swing/plaf/basic/BasicTreeUI$PropertyChangeHandler,javax/swing/plaf/basic/BasicTreeUI$MouseHandler,javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler,javax/swing/plaf/basic/BasicTreeUI$FocusHandler,javax/swing/plaf/basic/BasicTreeUI$KeyHandler,javax/swing/plaf/basic/BasicTreeUI$CellEditorHandler,javax/swing/plaf/basic/BasicTreeUI$TreeSelectionHandler,javax/swing/plaf/basic/BasicTreeUI$TreeModelHandler,javax/swing/plaf/basic/BasicTreeUI$ComponentHandler,javax/swing/plaf/basic/BasicTreeUI$TreeExpansionHandler flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName NodeDimensionsHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$ComponentHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName ComponentHandler flags 1
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass javax/swing/JTree$DropLocation outerClass javax/swing/JTree innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/tree/AbstractLayoutCache$NodeDimensions outerClass javax/swing/tree/AbstractLayoutCache innerClassName NodeDimensions flags 409
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$MouseInputHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName MouseInputHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeCancelEditingAction outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeCancelEditingAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeToggleAction outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeToggleAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeHomeAction outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeHomeAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeIncrementAction outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeIncrementAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreePageAction outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreePageAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeTraverseAction outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeTraverseAction flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$SelectionModelPropertyChangeHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName SelectionModelPropertyChangeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$PropertyChangeHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName PropertyChangeHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$MouseHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName MouseHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$FocusHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName FocusHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$KeyHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName KeyHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$CellEditorHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName CellEditorHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeSelectionHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeSelectionHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeModelHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeModelHandler flags 1
+innerclass innerClass javax/swing/plaf/basic/BasicTreeUI$TreeExpansionHandler outerClass javax/swing/plaf/basic/BasicTreeUI innerClassName TreeExpansionHandler flags 1
+
+class name javax/swing/plaf/metal/MetalBorders
+header extends java/lang/Object nestMembers javax/swing/plaf/metal/MetalBorders$TableHeaderBorder,javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder,javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder,javax/swing/plaf/metal/MetalBorders$TextFieldBorder,javax/swing/plaf/metal/MetalBorders$ToolBarBorder,javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder,javax/swing/plaf/metal/MetalBorders$PopupMenuBorder,javax/swing/plaf/metal/MetalBorders$MenuItemBorder,javax/swing/plaf/metal/MetalBorders$MenuBarBorder,javax/swing/plaf/metal/MetalBorders$OptionDialogBorder,javax/swing/plaf/metal/MetalBorders$PaletteBorder,javax/swing/plaf/metal/MetalBorders$InternalFrameBorder,javax/swing/plaf/metal/MetalBorders$ButtonBorder,javax/swing/plaf/metal/MetalBorders$Flush3DBorder flags 21
+innerclass innerClass javax/swing/plaf/BorderUIResource$CompoundBorderUIResource outerClass javax/swing/plaf/BorderUIResource innerClassName CompoundBorderUIResource flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/basic/BasicBorders$MarginBorder outerClass javax/swing/plaf/basic/BasicBorders innerClassName MarginBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$Flush3DBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName Flush3DBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$TextFieldBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName TextFieldBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ToggleButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName RolloverButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$TableHeaderBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName TableHeaderBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ScrollPaneBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ToolBarBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ToolBarBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$PopupMenuBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName PopupMenuBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$MenuItemBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName MenuItemBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$MenuBarBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName MenuBarBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$OptionDialogBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName OptionDialogBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$PaletteBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName PaletteBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$InternalFrameBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName InternalFrameBorder flags 9
+
+class name javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
+header extends javax/swing/plaf/metal/MetalBorders$ButtonBorder nestHost javax/swing/plaf/metal/MetalBorders flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName RolloverButtonBorder flags 9
+
+class name javax/swing/plaf/metal/MetalBorders$TextFieldBorder
+header extends javax/swing/plaf/metal/MetalBorders$Flush3DBorder nestHost javax/swing/plaf/metal/MetalBorders flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$Flush3DBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName Flush3DBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$TextFieldBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName TextFieldBorder flags 9
+
+class name javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
+header extends javax/swing/plaf/metal/MetalBorders$ButtonBorder nestHost javax/swing/plaf/metal/MetalBorders flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ButtonBorder flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder outerClass javax/swing/plaf/metal/MetalBorders innerClassName ToggleButtonBorder flags 9
+
+class name javax/swing/plaf/metal/MetalComboBoxUI
+header extends javax/swing/plaf/basic/BasicComboBoxUI nestMembers javax/swing/plaf/metal/MetalComboBoxUI$MetalComboPopup,javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager,javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalComboBoxEditor$UIResource outerClass javax/swing/plaf/metal/MetalComboBoxEditor innerClassName UIResource flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener outerClass javax/swing/plaf/metal/MetalComboBoxUI innerClassName MetalPropertyChangeListener flags 1
+innerclass innerClass javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager outerClass javax/swing/plaf/metal/MetalComboBoxUI innerClassName MetalComboBoxLayoutManager flags 1
+innerclass innerClass javax/swing/plaf/metal/MetalComboBoxUI$MetalComboPopup outerClass javax/swing/plaf/metal/MetalComboBoxUI innerClassName MetalComboPopup flags 1
+
+class name javax/swing/plaf/metal/MetalFileChooserUI
+header extends javax/swing/plaf/basic/BasicFileChooserUI nestMembers javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxAction,javax/swing/plaf/metal/MetalFileChooserUI$FilterComboBoxModel,javax/swing/plaf/metal/MetalFileChooserUI$FilterComboBoxRenderer,javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxModel,javax/swing/plaf/metal/MetalFileChooserUI$FileRenderer,javax/swing/plaf/metal/MetalFileChooserUI$SingleClickListener flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxAction outerClass javax/swing/plaf/metal/MetalFileChooserUI innerClassName DirectoryComboBoxAction flags 4
+innerclass innerClass javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxModel outerClass javax/swing/plaf/metal/MetalFileChooserUI innerClassName DirectoryComboBoxModel flags 4
+innerclass innerClass javax/swing/plaf/metal/MetalFileChooserUI$FilterComboBoxModel outerClass javax/swing/plaf/metal/MetalFileChooserUI innerClassName FilterComboBoxModel flags 4
+innerclass innerClass javax/swing/plaf/metal/MetalFileChooserUI$FilterComboBoxRenderer outerClass javax/swing/plaf/metal/MetalFileChooserUI innerClassName FilterComboBoxRenderer flags 1
+innerclass innerClass javax/swing/plaf/metal/MetalFileChooserUI$FileRenderer outerClass javax/swing/plaf/metal/MetalFileChooserUI innerClassName FileRenderer flags 4
+innerclass innerClass javax/swing/plaf/metal/MetalFileChooserUI$SingleClickListener outerClass javax/swing/plaf/metal/MetalFileChooserUI innerClassName SingleClickListener flags 4
+
+class name javax/swing/plaf/metal/MetalIconFactory
+header extends java/lang/Object implements java/io/Serializable nestMembers javax/swing/plaf/metal/MetalIconFactory$TreeControlIcon,javax/swing/plaf/metal/MetalIconFactory$TreeLeafIcon,javax/swing/plaf/metal/MetalIconFactory$FileIcon16,javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon,javax/swing/plaf/metal/MetalIconFactory$FolderIcon16,javax/swing/plaf/metal/MetalIconFactory$PaletteCloseIcon flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName TreeFolderIcon flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$TreeLeafIcon outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName TreeLeafIcon flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$TreeControlIcon outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName TreeControlIcon flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$FileIcon16 outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName FileIcon16 flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$FolderIcon16 outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName FolderIcon16 flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$PaletteCloseIcon outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName PaletteCloseIcon flags 9
+
+class name javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
+header extends javax/swing/plaf/metal/MetalIconFactory$FolderIcon16 nestHost javax/swing/plaf/metal/MetalIconFactory flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$FolderIcon16 outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName FolderIcon16 flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName TreeFolderIcon flags 9
+
+class name javax/swing/plaf/metal/MetalIconFactory$TreeLeafIcon
+header extends javax/swing/plaf/metal/MetalIconFactory$FileIcon16 nestHost javax/swing/plaf/metal/MetalIconFactory flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$FileIcon16 outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName FileIcon16 flags 9
+innerclass innerClass javax/swing/plaf/metal/MetalIconFactory$TreeLeafIcon outerClass javax/swing/plaf/metal/MetalIconFactory innerClassName TreeLeafIcon flags 9
+
+class name javax/swing/plaf/metal/MetalSliderUI
+header extends javax/swing/plaf/basic/BasicSliderUI nestMembers javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener flags 21
+innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$ScrollListener outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName ScrollListener flags 1
+innerclass innerClass javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener outerClass javax/swing/plaf/metal/MetalSliderUI innerClassName MetalPropertyListener flags 4
+
+class name javax/swing/plaf/metal/MetalToolBarUI
+header extends javax/swing/plaf/basic/BasicToolBarUI nestMembers javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener,javax/swing/plaf/metal/MetalToolBarUI$MetalRolloverListener,javax/swing/plaf/metal/MetalToolBarUI$MetalContainerListener flags 21
+innerclass innerClass javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener outerClass javax/swing/plaf/metal/MetalToolBarUI innerClassName MetalDockingListener flags 4
+innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$DragWindow outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName DragWindow flags 4
+innerclass innerClass javax/swing/plaf/metal/MetalToolBarUI$MetalRolloverListener outerClass javax/swing/plaf/metal/MetalToolBarUI innerClassName MetalRolloverListener flags 4
+innerclass innerClass javax/swing/plaf/metal/MetalToolBarUI$MetalContainerListener outerClass javax/swing/plaf/metal/MetalToolBarUI innerClassName MetalContainerListener flags 4
+
+class name javax/swing/table/DefaultTableCellRenderer
+header extends javax/swing/JLabel implements javax/swing/table/TableCellRenderer,java/io/Serializable nestMembers javax/swing/table/DefaultTableCellRenderer$UIResource flags 21
+innerclass innerClass javax/swing/JTable$DropLocation outerClass javax/swing/JTable innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/table/DefaultTableCellRenderer$UIResource outerClass javax/swing/table/DefaultTableCellRenderer innerClassName UIResource flags 9
+
+class name javax/swing/table/JTableHeader$AccessibleJTableHeader
+header extends javax/swing/JComponent$AccessibleJComponent nestHost javax/swing/table/JTableHeader flags 21
+innerclass innerClass javax/swing/table/JTableHeader$AccessibleJTableHeader outerClass javax/swing/table/JTableHeader innerClassName AccessibleJTableHeader flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+innerclass innerClass javax/swing/table/JTableHeader$AccessibleJTableHeader$AccessibleJTableHeaderEntry outerClass javax/swing/table/JTableHeader$AccessibleJTableHeader innerClassName AccessibleJTableHeaderEntry flags 4
+
+class name javax/swing/text/AbstractDocument
+header extends java/lang/Object implements javax/swing/text/Document,java/io/Serializable nestMembers javax/swing/text/AbstractDocument$ElementEdit,javax/swing/text/AbstractDocument$DefaultDocumentEvent,javax/swing/text/AbstractDocument$LeafElement,javax/swing/text/AbstractDocument$BranchElement,javax/swing/text/AbstractDocument$AbstractElement,javax/swing/text/AbstractDocument$AttributeContext,javax/swing/text/AbstractDocument$Content flags 421
+innerclass innerClass javax/swing/text/AbstractDocument$Content outerClass javax/swing/text/AbstractDocument innerClassName Content flags 609
+innerclass innerClass javax/swing/text/AbstractDocument$AttributeContext outerClass javax/swing/text/AbstractDocument innerClassName AttributeContext flags 609
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19
+innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409
+innerclass innerClass javax/swing/text/AbstractDocument$ElementEdit outerClass javax/swing/text/AbstractDocument innerClassName ElementEdit flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$AbstractElement outerClass javax/swing/text/AbstractDocument innerClassName AbstractElement flags 401
+innerclass innerClass javax/swing/text/AbstractDocument$LeafElement outerClass javax/swing/text/AbstractDocument innerClassName LeafElement flags 1
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/AbstractDocument$AbstractElement
+header extends java/lang/Object implements javax/swing/text/Element,javax/swing/text/MutableAttributeSet,java/io/Serializable,javax/swing/tree/TreeNode nestHost javax/swing/text/AbstractDocument flags 421
+innerclass innerClass javax/swing/text/AbstractDocument$AbstractElement outerClass javax/swing/text/AbstractDocument innerClassName AbstractElement flags 401
+innerclass innerClass javax/swing/text/AbstractDocument$AttributeContext outerClass javax/swing/text/AbstractDocument innerClassName AttributeContext flags 609
+innerclass innerClass javax/swing/text/AbstractDocument$Content outerClass javax/swing/text/AbstractDocument innerClassName Content flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/AbstractDocument$BranchElement
+header extends javax/swing/text/AbstractDocument$AbstractElement nestHost javax/swing/text/AbstractDocument flags 21
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$AbstractElement outerClass javax/swing/text/AbstractDocument innerClassName AbstractElement flags 401
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/AbstractDocument$DefaultDocumentEvent
+header extends javax/swing/undo/CompoundEdit implements javax/swing/event/DocumentEvent nestHost javax/swing/text/AbstractDocument flags 21
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19
+innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/AsyncBoxView
+header extends javax/swing/text/View nestMembers javax/swing/text/AsyncBoxView$ChildState,javax/swing/text/AsyncBoxView$ChildLocator flags 21
+innerclass innerClass javax/swing/text/AsyncBoxView$ChildLocator outerClass javax/swing/text/AsyncBoxView innerClassName ChildLocator flags 1
+innerclass innerClass javax/swing/text/AsyncBoxView$ChildState outerClass javax/swing/text/AsyncBoxView innerClassName ChildState flags 1
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609
+
+class name javax/swing/text/AsyncBoxView$ChildLocator
+header extends java/lang/Object nestHost javax/swing/text/AsyncBoxView flags 21
+innerclass innerClass javax/swing/text/AsyncBoxView$ChildLocator outerClass javax/swing/text/AsyncBoxView innerClassName ChildLocator flags 1
+innerclass innerClass javax/swing/text/AsyncBoxView$ChildState outerClass javax/swing/text/AsyncBoxView innerClassName ChildState flags 1
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+
+class name javax/swing/text/DefaultCaret
+header extends java/awt/Rectangle implements javax/swing/text/Caret,java/awt/event/FocusListener,java/awt/event/MouseListener,java/awt/event/MouseMotionListener flags 21
+innerclass innerClass javax/swing/text/LayeredHighlighter$LayerPainter outerClass javax/swing/text/LayeredHighlighter innerClassName LayerPainter flags 409
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019
+innerclass innerClass javax/swing/text/Highlighter$HighlightPainter outerClass javax/swing/text/Highlighter innerClassName HighlightPainter flags 609
+innerclass innerClass javax/swing/text/NavigationFilter$FilterBypass outerClass javax/swing/text/NavigationFilter innerClassName FilterBypass flags 409
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/DefaultEditorKit
+header extends javax/swing/text/EditorKit nestMembers javax/swing/text/DefaultEditorKit$BeepAction,javax/swing/text/DefaultEditorKit$PasteAction,javax/swing/text/DefaultEditorKit$CopyAction,javax/swing/text/DefaultEditorKit$CutAction,javax/swing/text/DefaultEditorKit$InsertTabAction,javax/swing/text/DefaultEditorKit$InsertBreakAction,javax/swing/text/DefaultEditorKit$InsertContentAction,javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction flags 21
+innerclass innerClass javax/swing/text/DefaultEditorKit$InsertContentAction outerClass javax/swing/text/DefaultEditorKit innerClassName InsertContentAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$CutAction outerClass javax/swing/text/DefaultEditorKit innerClassName CutAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$CopyAction outerClass javax/swing/text/DefaultEditorKit innerClassName CopyAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$PasteAction outerClass javax/swing/text/DefaultEditorKit innerClassName PasteAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$InsertBreakAction outerClass javax/swing/text/DefaultEditorKit innerClassName InsertBreakAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$BeepAction outerClass javax/swing/text/DefaultEditorKit innerClassName BeepAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction outerClass javax/swing/text/DefaultEditorKit innerClassName DefaultKeyTypedAction flags 9
+innerclass innerClass javax/swing/text/DefaultEditorKit$InsertTabAction outerClass javax/swing/text/DefaultEditorKit innerClassName InsertTabAction flags 9
+
+class name javax/swing/text/DefaultFormatter
+header extends javax/swing/JFormattedTextField$AbstractFormatter implements java/lang/Cloneable,java/io/Serializable flags 21
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatter outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatter flags 409
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409
+innerclass innerClass javax/swing/text/NavigationFilter$FilterBypass outerClass javax/swing/text/NavigationFilter innerClassName FilterBypass flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/DefaultFormatterFactory
+header extends javax/swing/JFormattedTextField$AbstractFormatterFactory implements java/io/Serializable flags 21
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatterFactory outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatterFactory flags 409
+innerclass innerClass javax/swing/JFormattedTextField$AbstractFormatter outerClass javax/swing/JFormattedTextField innerClassName AbstractFormatter flags 409
+
+class name javax/swing/text/DefaultHighlighter
+header extends javax/swing/text/LayeredHighlighter nestMembers javax/swing/text/DefaultHighlighter$DefaultHighlightPainter flags 21
+innerclass innerClass javax/swing/text/Highlighter$HighlightPainter outerClass javax/swing/text/Highlighter innerClassName HighlightPainter flags 609
+innerclass innerClass javax/swing/text/LayeredHighlighter$LayerPainter outerClass javax/swing/text/LayeredHighlighter innerClassName LayerPainter flags 409
+innerclass innerClass javax/swing/text/Highlighter$Highlight outerClass javax/swing/text/Highlighter innerClassName Highlight flags 609
+innerclass innerClass javax/swing/text/DefaultHighlighter$DefaultHighlightPainter outerClass javax/swing/text/DefaultHighlighter innerClassName DefaultHighlightPainter flags 9
+
+class name javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
+header extends javax/swing/text/LayeredHighlighter$LayerPainter nestHost javax/swing/text/DefaultHighlighter flags 21
+innerclass innerClass javax/swing/text/LayeredHighlighter$LayerPainter outerClass javax/swing/text/LayeredHighlighter innerClassName LayerPainter flags 409
+innerclass innerClass javax/swing/text/DefaultHighlighter$DefaultHighlightPainter outerClass javax/swing/text/DefaultHighlighter innerClassName DefaultHighlightPainter flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+
+class name javax/swing/text/DefaultStyledDocument
+header extends javax/swing/text/AbstractDocument implements javax/swing/text/StyledDocument nestMembers javax/swing/text/DefaultStyledDocument$AttributeUndoableEdit,javax/swing/text/DefaultStyledDocument$ElementBuffer,javax/swing/text/DefaultStyledDocument$ElementSpec,javax/swing/text/DefaultStyledDocument$SectionElement flags 21
+innerclass innerClass javax/swing/text/AbstractDocument$Content outerClass javax/swing/text/AbstractDocument innerClassName Content flags 609
+innerclass innerClass javax/swing/text/AbstractDocument$AttributeContext outerClass javax/swing/text/AbstractDocument innerClassName AttributeContext flags 609
+innerclass innerClass javax/swing/text/DefaultStyledDocument$ElementBuffer outerClass javax/swing/text/DefaultStyledDocument innerClassName ElementBuffer flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$AbstractElement outerClass javax/swing/text/AbstractDocument innerClassName AbstractElement flags 401
+innerclass innerClass javax/swing/text/DefaultStyledDocument$ElementSpec outerClass javax/swing/text/DefaultStyledDocument innerClassName ElementSpec flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$ElementEdit outerClass javax/swing/text/AbstractDocument innerClassName ElementEdit flags 9
+innerclass innerClass javax/swing/text/DefaultStyledDocument$AttributeUndoableEdit outerClass javax/swing/text/DefaultStyledDocument innerClassName AttributeUndoableEdit flags 9
+innerclass innerClass javax/swing/text/DefaultStyledDocument$SectionElement outerClass javax/swing/text/DefaultStyledDocument innerClassName SectionElement flags 4
+innerclass innerClass javax/swing/text/AbstractDocument$LeafElement outerClass javax/swing/text/AbstractDocument innerClassName LeafElement flags 1
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name javax/swing/text/DefaultStyledDocument$ElementBuffer
+header extends java/lang/Object implements java/io/Serializable nestHost javax/swing/text/DefaultStyledDocument flags 21
+innerclass innerClass javax/swing/text/DefaultStyledDocument$ElementBuffer outerClass javax/swing/text/DefaultStyledDocument innerClassName ElementBuffer flags 1
+innerclass innerClass javax/swing/text/DefaultStyledDocument$ElementSpec outerClass javax/swing/text/DefaultStyledDocument innerClassName ElementSpec flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/text/DefaultStyledDocument$AttributeUndoableEdit outerClass javax/swing/text/DefaultStyledDocument innerClassName AttributeUndoableEdit flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$ElementEdit outerClass javax/swing/text/AbstractDocument innerClassName ElementEdit flags 9
+
+class name javax/swing/text/GlyphView$GlyphPainter
+header extends java/lang/Object nestHost javax/swing/text/GlyphView flags 421
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/text/GlyphView$GlyphPainter outerClass javax/swing/text/GlyphView innerClassName GlyphPainter flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/Highlighter$Highlight
+header extends java/lang/Object nestHost javax/swing/text/Highlighter flags 601
+innerclass innerClass javax/swing/text/Highlighter$Highlight outerClass javax/swing/text/Highlighter innerClassName Highlight flags 609
+innerclass innerClass javax/swing/text/Highlighter$HighlightPainter outerClass javax/swing/text/Highlighter innerClassName HighlightPainter flags 609
+
+class name javax/swing/text/JTextComponent
+header extends javax/swing/JComponent implements javax/swing/Scrollable,javax/accessibility/Accessible nestMembers javax/swing/text/JTextComponent$DropLocation,javax/swing/text/JTextComponent$AccessibleJTextComponent,javax/swing/text/JTextComponent$KeyBinding flags 421 runtimeAnnotations @Ljava/beans/JavaBean;(defaultProperty="UI")@Ljavax/swing/SwingContainer;(value=Zfalse)
+innerclass innerClass javax/swing/text/JTextComponent$AccessibleJTextComponent outerClass javax/swing/text/JTextComponent innerClassName AccessibleJTextComponent flags 1
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/text/JTextComponent$DropLocation outerClass javax/swing/text/JTextComponent innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction outerClass javax/swing/text/DefaultEditorKit innerClassName DefaultKeyTypedAction flags 9
+innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/JTextComponent$DropLocation
+header extends javax/swing/TransferHandler$DropLocation nestHost javax/swing/text/JTextComponent flags 31
+innerclass innerClass javax/swing/TransferHandler$DropLocation outerClass javax/swing/TransferHandler innerClassName DropLocation flags 9
+innerclass innerClass javax/swing/text/JTextComponent$DropLocation outerClass javax/swing/text/JTextComponent innerClassName DropLocation flags 19
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/ParagraphView
+header extends javax/swing/text/FlowView implements javax/swing/text/TabExpander flags 21
+innerclass innerClass javax/swing/text/FlowView$FlowStrategy outerClass javax/swing/text/FlowView innerClassName FlowStrategy flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/PlainDocument
+header extends javax/swing/text/AbstractDocument flags 21
+innerclass innerClass javax/swing/text/AbstractDocument$Content outerClass javax/swing/text/AbstractDocument innerClassName Content flags 609
+innerclass innerClass javax/swing/text/AbstractDocument$AbstractElement outerClass javax/swing/text/AbstractDocument innerClassName AbstractElement flags 401
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$ElementEdit outerClass javax/swing/text/AbstractDocument innerClassName ElementEdit flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/PlainView
+header extends javax/swing/text/View implements javax/swing/text/TabExpander flags 21
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609
+innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/StyleConstants
+header extends java/lang/Object nestMembers javax/swing/text/StyleConstants$FontConstants,javax/swing/text/StyleConstants$ColorConstants,javax/swing/text/StyleConstants$CharacterConstants,javax/swing/text/StyleConstants$ParagraphConstants flags 21
+innerclass innerClass javax/swing/text/StyleConstants$CharacterConstants outerClass javax/swing/text/StyleConstants innerClassName CharacterConstants flags 9
+innerclass innerClass javax/swing/text/StyleConstants$FontConstants outerClass javax/swing/text/StyleConstants innerClassName FontConstants flags 9
+innerclass innerClass javax/swing/text/StyleConstants$ColorConstants outerClass javax/swing/text/StyleConstants innerClassName ColorConstants flags 9
+innerclass innerClass javax/swing/text/StyleConstants$ParagraphConstants outerClass javax/swing/text/StyleConstants innerClassName ParagraphConstants flags 9
+
+class name javax/swing/text/StyledEditorKit
+header extends javax/swing/text/DefaultEditorKit nestMembers javax/swing/text/StyledEditorKit$UnderlineAction,javax/swing/text/StyledEditorKit$ItalicAction,javax/swing/text/StyledEditorKit$BoldAction,javax/swing/text/StyledEditorKit$AlignmentAction,javax/swing/text/StyledEditorKit$ForegroundAction,javax/swing/text/StyledEditorKit$FontSizeAction,javax/swing/text/StyledEditorKit$FontFamilyAction,javax/swing/text/StyledEditorKit$StyledTextAction flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$FontFamilyAction outerClass javax/swing/text/StyledEditorKit innerClassName FontFamilyAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$FontSizeAction outerClass javax/swing/text/StyledEditorKit innerClassName FontSizeAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$AlignmentAction outerClass javax/swing/text/StyledEditorKit innerClassName AlignmentAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$BoldAction outerClass javax/swing/text/StyledEditorKit innerClassName BoldAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$ItalicAction outerClass javax/swing/text/StyledEditorKit innerClassName ItalicAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$UnderlineAction outerClass javax/swing/text/StyledEditorKit innerClassName UnderlineAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$ForegroundAction outerClass javax/swing/text/StyledEditorKit innerClassName ForegroundAction flags 9
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+
+class name javax/swing/text/StyledEditorKit$AlignmentAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$AlignmentAction outerClass javax/swing/text/StyledEditorKit innerClassName AlignmentAction flags 9
+
+class name javax/swing/text/StyledEditorKit$BoldAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$BoldAction outerClass javax/swing/text/StyledEditorKit innerClassName BoldAction flags 9
+
+class name javax/swing/text/StyledEditorKit$FontFamilyAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$FontFamilyAction outerClass javax/swing/text/StyledEditorKit innerClassName FontFamilyAction flags 9
+
+class name javax/swing/text/StyledEditorKit$FontSizeAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$FontSizeAction outerClass javax/swing/text/StyledEditorKit innerClassName FontSizeAction flags 9
+
+class name javax/swing/text/StyledEditorKit$ForegroundAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$ForegroundAction outerClass javax/swing/text/StyledEditorKit innerClassName ForegroundAction flags 9
+
+class name javax/swing/text/StyledEditorKit$ItalicAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$ItalicAction outerClass javax/swing/text/StyledEditorKit innerClassName ItalicAction flags 9
+
+class name javax/swing/text/StyledEditorKit$UnderlineAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/StyledEditorKit flags 21
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/StyledEditorKit$UnderlineAction outerClass javax/swing/text/StyledEditorKit innerClassName UnderlineAction flags 9
+
+class name javax/swing/text/TableView
+header extends javax/swing/text/BoxView nestMembers javax/swing/text/TableView$GridCell,javax/swing/text/TableView$TableCell,javax/swing/text/TableView$TableRow flags 421
+innerclass innerClass javax/swing/text/TableView$TableRow outerClass javax/swing/text/TableView innerClassName TableRow flags 1
+innerclass innerClass javax/swing/text/TableView$TableCell outerClass javax/swing/text/TableView innerClassName TableCell flags 1
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609
+innerclass innerClass javax/swing/text/TableView$GridCell outerClass javax/swing/text/TableView innerClassName GridCell flags 608
+
+class name javax/swing/text/Utilities
+header extends java/lang/Object flags 21
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass javax/swing/text/GlyphView$GlyphPainter outerClass javax/swing/text/GlyphView innerClassName GlyphPainter flags 409
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/ZoneView
+header extends javax/swing/text/BoxView flags 21
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609
+
+class name javax/swing/text/html/BlockView
+header extends javax/swing/text/BoxView flags 21
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/StyleSheet$BoxPainter outerClass javax/swing/text/html/StyleSheet innerClassName BoxPainter flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/CSS
+header extends java/lang/Object implements java/io/Serializable nestMembers javax/swing/text/html/CSS$Attribute flags 21
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/FormSubmitEvent
+header extends javax/swing/text/html/HTMLFrameHyperlinkEvent nestMembers javax/swing/text/html/FormSubmitEvent$MethodType flags 21
+innerclass innerClass javax/swing/event/HyperlinkEvent$EventType outerClass javax/swing/event/HyperlinkEvent innerClassName EventType flags 19
+innerclass innerClass javax/swing/text/html/FormSubmitEvent$MethodType outerClass javax/swing/text/html/FormSubmitEvent innerClassName MethodType flags 4019
+
+class name javax/swing/text/html/FormView
+header extends javax/swing/text/ComponentView implements java/awt/event/ActionListener nestMembers javax/swing/text/html/FormView$MouseEventListener flags 21
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/FormView$MouseEventListener outerClass javax/swing/text/html/FormView innerClassName MouseEventListener flags 4
+innerclass innerClass javax/swing/JToggleButton$ToggleButtonModel outerClass javax/swing/JToggleButton innerClassName ToggleButtonModel flags 9
+innerclass innerClass javax/swing/text/html/FormSubmitEvent$MethodType outerClass javax/swing/text/html/FormSubmitEvent innerClassName MethodType flags 4019
+innerclass innerClass javax/swing/event/HyperlinkEvent$EventType outerClass javax/swing/event/HyperlinkEvent innerClassName EventType flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/HTML
+header extends java/lang/Object nestMembers javax/swing/text/html/HTML$Attribute,javax/swing/text/html/HTML$UnknownTag,javax/swing/text/html/HTML$Tag flags 21
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9
+
+class name javax/swing/text/html/HTML$UnknownTag
+header extends javax/swing/text/html/HTML$Tag implements java/io/Serializable nestHost javax/swing/text/html/HTML flags 21
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9
+
+class name javax/swing/text/html/HTMLDocument
+header extends javax/swing/text/DefaultStyledDocument nestMembers javax/swing/text/html/HTMLDocument$BlockElement,javax/swing/text/html/HTMLDocument$RunElement,javax/swing/text/html/HTMLDocument$HTMLReader,javax/swing/text/html/HTMLDocument$HTMLReader$FormAction,javax/swing/text/html/HTMLDocument$HTMLReader$CharacterAction,javax/swing/text/html/HTMLDocument$HTMLReader$PreAction,javax/swing/text/html/HTMLDocument$HTMLReader$HiddenAction,javax/swing/text/html/HTMLDocument$HTMLReader$IsindexAction,javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction,javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction,javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction,javax/swing/text/html/HTMLDocument$HTMLReader$TagAction,javax/swing/text/html/HTMLDocument$Iterator flags 21
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$Content outerClass javax/swing/text/AbstractDocument innerClassName Content flags 609
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9
+innerclass innerClass javax/swing/text/DefaultStyledDocument$ElementSpec outerClass javax/swing/text/DefaultStyledDocument innerClassName ElementSpec flags 9
+innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19
+innerclass innerClass javax/swing/text/DefaultStyledDocument$AttributeUndoableEdit outerClass javax/swing/text/DefaultStyledDocument innerClassName AttributeUndoableEdit flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$AttributeContext outerClass javax/swing/text/AbstractDocument innerClassName AttributeContext flags 609
+innerclass innerClass javax/swing/text/html/HTMLDocument$RunElement outerClass javax/swing/text/html/HTMLDocument innerClassName RunElement flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$BlockElement outerClass javax/swing/text/html/HTMLDocument innerClassName BlockElement flags 1
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$Parser outerClass javax/swing/text/html/HTMLEditorKit innerClassName Parser flags 409
+innerclass innerClass javax/swing/text/AbstractDocument$ElementEdit outerClass javax/swing/text/AbstractDocument innerClassName ElementEdit flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$Iterator outerClass javax/swing/text/html/HTMLDocument innerClassName Iterator flags 409
+innerclass innerClass javax/swing/text/AbstractDocument$AbstractElement outerClass javax/swing/text/AbstractDocument innerClassName AbstractElement flags 401
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$FormAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName FormAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$CharacterAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName CharacterAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$PreAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName PreAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$HiddenAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName HiddenAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$IsindexAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName IsindexAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName SpecialAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName ParagraphAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName BlockAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader
+header extends javax/swing/text/html/HTMLEditorKit$ParserCallback nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName BlockAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName ParagraphAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$CharacterAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName CharacterAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName SpecialAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$FormAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName FormAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$HiddenAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName HiddenAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$IsindexAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName IsindexAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$PreAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName PreAction flags 1
+innerclass innerClass javax/swing/text/DefaultStyledDocument$ElementSpec outerClass javax/swing/text/DefaultStyledDocument innerClassName ElementSpec flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1
+innerclass innerClass javax/swing/text/AbstractDocument$ElementEdit outerClass javax/swing/text/AbstractDocument innerClassName ElementEdit flags 9
+innerclass innerClass javax/swing/text/AbstractDocument$DefaultDocumentEvent outerClass javax/swing/text/AbstractDocument innerClassName DefaultDocumentEvent flags 1
+innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19
+innerclass innerClass javax/swing/text/AbstractDocument$Content outerClass javax/swing/text/AbstractDocument innerClassName Content flags 609
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$TagAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName BlockAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$CharacterAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$TagAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$CharacterAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName CharacterAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$FormAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$FormAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName FormAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName SpecialAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/JToggleButton$ToggleButtonModel outerClass javax/swing/JToggleButton innerClassName ToggleButtonModel flags 9
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$HiddenAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$TagAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$HiddenAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName HiddenAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$IsindexAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$TagAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$IsindexAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName IsindexAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName ParagraphAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName BlockAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$PreAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$PreAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName PreAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName BlockAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+
+class name javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction
+header extends javax/swing/text/html/HTMLDocument$HTMLReader$TagAction nestHost javax/swing/text/html/HTMLDocument flags 21
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader outerClass javax/swing/text/html/HTMLDocument innerClassName HTMLReader flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName SpecialAction flags 1
+innerclass innerClass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction outerClass javax/swing/text/html/HTMLDocument$HTMLReader innerClassName TagAction flags 1
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+
+class name javax/swing/text/html/HTMLEditorKit
+header extends javax/swing/text/StyledEditorKit implements javax/accessibility/Accessible nestMembers javax/swing/text/html/HTMLEditorKit$InsertHTMLTextAction,javax/swing/text/html/HTMLEditorKit$HTMLTextAction,javax/swing/text/html/HTMLEditorKit$HTMLFactory,javax/swing/text/html/HTMLEditorKit$ParserCallback,javax/swing/text/html/HTMLEditorKit$Parser,javax/swing/text/html/HTMLEditorKit$LinkController flags 21
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$LinkController outerClass javax/swing/text/html/HTMLEditorKit innerClassName LinkController flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$Parser outerClass javax/swing/text/html/HTMLEditorKit innerClassName Parser flags 409
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$HTMLFactory outerClass javax/swing/text/html/HTMLEditorKit innerClassName HTMLFactory flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$InsertHTMLTextAction outerClass javax/swing/text/html/HTMLEditorKit innerClassName InsertHTMLTextAction flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$HTMLTextAction outerClass javax/swing/text/html/HTMLEditorKit innerClassName HTMLTextAction flags 409
+
+class name javax/swing/text/html/HTMLEditorKit$HTMLFactory
+header extends java/lang/Object implements javax/swing/text/ViewFactory nestHost javax/swing/text/html/HTMLEditorKit flags 21
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$HTMLFactory outerClass javax/swing/text/html/HTMLEditorKit innerClassName HTMLFactory flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/HTMLEditorKit$HTMLTextAction
+header extends javax/swing/text/StyledEditorKit$StyledTextAction nestHost javax/swing/text/html/HTMLEditorKit flags 421
+innerclass innerClass javax/swing/text/StyledEditorKit$StyledTextAction outerClass javax/swing/text/StyledEditorKit innerClassName StyledTextAction flags 409
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$HTMLTextAction outerClass javax/swing/text/html/HTMLEditorKit innerClassName HTMLTextAction flags 409
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+
+class name javax/swing/text/html/HTMLEditorKit$InsertHTMLTextAction
+header extends javax/swing/text/html/HTMLEditorKit$HTMLTextAction nestHost javax/swing/text/html/HTMLEditorKit flags 21
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$InsertHTMLTextAction outerClass javax/swing/text/html/HTMLEditorKit innerClassName InsertHTMLTextAction flags 9
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$HTMLTextAction outerClass javax/swing/text/html/HTMLEditorKit innerClassName HTMLTextAction flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/HTMLEditorKit$LinkController
+header extends java/awt/event/MouseAdapter implements java/awt/event/MouseMotionListener,java/io/Serializable nestHost javax/swing/text/html/HTMLEditorKit flags 21
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$LinkController outerClass javax/swing/text/html/HTMLEditorKit innerClassName LinkController flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/event/HyperlinkEvent$EventType outerClass javax/swing/event/HyperlinkEvent innerClassName EventType flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/HTMLWriter
+header extends javax/swing/text/AbstractWriter flags 21
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/ImageView
+header extends javax/swing/text/View flags 21
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/StyleSheet
+header extends javax/swing/text/StyleContext nestMembers javax/swing/text/html/StyleSheet$ListPainter,javax/swing/text/html/StyleSheet$BoxPainter flags 21
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/StyleSheet$BoxPainter outerClass javax/swing/text/html/StyleSheet innerClassName BoxPainter flags 9
+innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9
+innerclass innerClass javax/swing/text/StyleContext$SmallAttributeSet outerClass javax/swing/text/StyleContext innerClassName SmallAttributeSet flags 1
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/StyleSheet$ListPainter
+header extends java/lang/Object implements java/io/Serializable nestHost javax/swing/text/html/StyleSheet flags 21
+innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/text/html/parser/ParserDelegator
+header extends javax/swing/text/html/HTMLEditorKit$Parser implements java/io/Serializable flags 21
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$Parser outerClass javax/swing/text/html/HTMLEditorKit innerClassName Parser flags 409
+innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.management-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,102 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/management/modelmbean/DescriptorSupport
+header extends java/lang/Object implements javax/management/Descriptor flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/modelmbean/ModelMBeanAttributeInfo
+header extends javax/management/MBeanAttributeInfo implements javax/management/DescriptorAccess flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/modelmbean/ModelMBeanConstructorInfo
+header extends javax/management/MBeanConstructorInfo implements javax/management/DescriptorAccess flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/modelmbean/ModelMBeanInfoSupport
+header extends javax/management/MBeanInfo implements javax/management/modelmbean/ModelMBeanInfo flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/modelmbean/ModelMBeanNotificationInfo
+header extends javax/management/MBeanNotificationInfo implements javax/management/DescriptorAccess flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/modelmbean/ModelMBeanOperationInfo
+header extends javax/management/MBeanOperationInfo implements javax/management/DescriptorAccess flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/relation/MBeanServerNotificationFilter
+header extends javax/management/NotificationFilterSupport flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/relation/RelationService
+header extends javax/management/NotificationBroadcasterSupport implements javax/management/relation/RelationServiceMBean,javax/management/MBeanRegistration,javax/management/NotificationListener flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/management/relation/RelationTypeSupport
+header extends java/lang/Object implements javax/management/relation/RelationType flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+
+class name javax/management/timer/Timer
+header extends javax/management/NotificationBroadcasterSupport implements javax/management/timer/TimerMBean,javax/management/MBeanRegistration flags 21
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.management.rmi-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,35 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/management/remote/rmi/RMIJRMPServerImpl
+header extends javax/management/remote/rmi/RMIServerImpl flags 21
+innerclass innerClass java/io/ObjectInputFilter$Config outerClass java/io/ObjectInputFilter innerClassName Config flags 19
+innerclass innerClass java/io/ObjectInputFilter$Status outerClass java/io/ObjectInputFilter innerClassName Status flags 4019
+innerclass innerClass java/io/ObjectInputFilter$FilterInfo outerClass java/io/ObjectInputFilter innerClassName FilterInfo flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.net.http-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,89 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/net/http/HttpClient
+header extends java/lang/Object nestMembers java/net/http/HttpClient$Redirect,java/net/http/HttpClient$Version,java/net/http/HttpClient$Builder flags 421
+innerclass innerClass java/net/http/HttpClient$Builder outerClass java/net/http/HttpClient innerClassName Builder flags 609
+innerclass innerClass java/net/http/HttpClient$Redirect outerClass java/net/http/HttpClient innerClassName Redirect flags 4019
+innerclass innerClass java/net/http/HttpClient$Version outerClass java/net/http/HttpClient innerClassName Version flags 4019
+innerclass innerClass java/net/http/HttpResponse$BodyHandler outerClass java/net/http/HttpResponse innerClassName BodyHandler flags 609
+innerclass innerClass java/net/http/HttpResponse$PushPromiseHandler outerClass java/net/http/HttpResponse innerClassName PushPromiseHandler flags 609
+innerclass innerClass java/net/http/WebSocket$Builder outerClass java/net/http/WebSocket innerClassName Builder flags 609
+
+class name java/net/http/HttpRequest$BodyPublisher
+header extends java/lang/Object implements java/util/concurrent/Flow$Publisher nestHost java/net/http/HttpRequest flags 601 signature Ljava/lang/Object;Ljava/util/concurrent/Flow$Publisher<Ljava/nio/ByteBuffer;>;
+innerclass innerClass java/net/http/HttpRequest$BodyPublisher outerClass java/net/http/HttpRequest innerClassName BodyPublisher flags 609
+innerclass innerClass java/util/concurrent/Flow$Publisher outerClass java/util/concurrent/Flow innerClassName Publisher flags 609
+
+class name java/net/http/HttpRequest$BodyPublishers
+header extends java/lang/Object nestHost java/net/http/HttpRequest flags 21
+innerclass innerClass java/util/concurrent/Flow$Publisher outerClass java/util/concurrent/Flow innerClassName Publisher flags 609
+innerclass innerClass java/net/http/HttpRequest$BodyPublishers outerClass java/net/http/HttpRequest innerClassName BodyPublishers flags 9
+innerclass innerClass java/net/http/HttpRequest$BodyPublisher outerClass java/net/http/HttpRequest innerClassName BodyPublisher flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/net/http/HttpResponse$BodyHandler
+header extends java/lang/Object nestHost java/net/http/HttpResponse flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/net/http/HttpResponse$BodyHandler outerClass java/net/http/HttpResponse innerClassName BodyHandler flags 609
+innerclass innerClass java/net/http/HttpResponse$ResponseInfo outerClass java/net/http/HttpResponse innerClassName ResponseInfo flags 609
+innerclass innerClass java/net/http/HttpResponse$BodySubscriber outerClass java/net/http/HttpResponse innerClassName BodySubscriber flags 609
+
+class name java/net/http/HttpResponse$BodyHandlers
+header extends java/lang/Object nestHost java/net/http/HttpResponse flags 21
+innerclass innerClass java/util/concurrent/Flow$Subscriber outerClass java/util/concurrent/Flow innerClassName Subscriber flags 609
+innerclass innerClass java/net/http/HttpResponse$BodyHandler outerClass java/net/http/HttpResponse innerClassName BodyHandler flags 609
+innerclass innerClass java/net/http/HttpResponse$BodyHandlers outerClass java/net/http/HttpResponse innerClassName BodyHandlers flags 9
+innerclass innerClass java/net/http/HttpResponse$ResponseInfo outerClass java/net/http/HttpResponse innerClassName ResponseInfo flags 609
+innerclass innerClass java/net/http/HttpResponse$BodySubscriber outerClass java/net/http/HttpResponse innerClassName BodySubscriber flags 609
+innerclass innerClass java/net/http/HttpResponse$BodySubscribers outerClass java/net/http/HttpResponse innerClassName BodySubscribers flags 9
+innerclass innerClass java/util/concurrent/Flow$Publisher outerClass java/util/concurrent/Flow innerClassName Publisher flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/net/http/HttpResponse$BodySubscriber
+header extends java/lang/Object implements java/util/concurrent/Flow$Subscriber nestHost java/net/http/HttpResponse flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/concurrent/Flow$Subscriber<Ljava/util/List<Ljava/nio/ByteBuffer;>;>;
+innerclass innerClass java/net/http/HttpResponse$BodySubscriber outerClass java/net/http/HttpResponse innerClassName BodySubscriber flags 609
+innerclass innerClass java/util/concurrent/Flow$Subscriber outerClass java/util/concurrent/Flow innerClassName Subscriber flags 609
+
+class name java/net/http/HttpResponse$BodySubscribers
+header extends java/lang/Object nestHost java/net/http/HttpResponse flags 21
+innerclass innerClass java/util/concurrent/Flow$Subscriber outerClass java/util/concurrent/Flow innerClassName Subscriber flags 609
+innerclass innerClass java/net/http/HttpResponse$BodySubscribers outerClass java/net/http/HttpResponse innerClassName BodySubscribers flags 9
+innerclass innerClass java/net/http/HttpResponse$BodySubscriber outerClass java/net/http/HttpResponse innerClassName BodySubscriber flags 609
+innerclass innerClass java/util/concurrent/Flow$Publisher outerClass java/util/concurrent/Flow innerClassName Publisher flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/net/http/HttpResponse$PushPromiseHandler
+header extends java/lang/Object nestHost java/net/http/HttpResponse flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass java/net/http/HttpResponse$PushPromiseHandler outerClass java/net/http/HttpResponse innerClassName PushPromiseHandler flags 609
+innerclass innerClass java/net/http/HttpResponse$BodyHandler outerClass java/net/http/HttpResponse innerClassName BodyHandler flags 609
+
+class name java/net/http/HttpResponse$ResponseInfo
+header extends java/lang/Object nestHost java/net/http/HttpResponse flags 601
+innerclass innerClass java/net/http/HttpResponse$ResponseInfo outerClass java/net/http/HttpResponse innerClassName ResponseInfo flags 609
+innerclass innerClass java/net/http/HttpClient$Version outerClass java/net/http/HttpClient innerClassName Version flags 4019
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.xml-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,47 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/xml/catalog/CatalogFeatures$Builder
+header extends java/lang/Object nestHost javax/xml/catalog/CatalogFeatures flags 21
+innerclass innerClass javax/xml/catalog/CatalogFeatures$Builder outerClass javax/xml/catalog/CatalogFeatures innerClassName Builder flags 9
+innerclass innerClass javax/xml/catalog/CatalogFeatures$Feature outerClass javax/xml/catalog/CatalogFeatures innerClassName Feature flags 4019
+
+class name javax/xml/parsers/DocumentBuilderFactory
+method name newDefaultNSInstance descriptor ()Ljavax/xml/parsers/DocumentBuilderFactory; flags 9
+method name newNSInstance descriptor ()Ljavax/xml/parsers/DocumentBuilderFactory; flags 9
+method name newNSInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/DocumentBuilderFactory; flags 9
+
+class name javax/xml/parsers/SAXParserFactory
+method name newDefaultNSInstance descriptor ()Ljavax/xml/parsers/SAXParserFactory; flags 9
+method name newNSInstance descriptor ()Ljavax/xml/parsers/SAXParserFactory; flags 9
+method name newNSInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/SAXParserFactory; flags 9
+
+class name javax/xml/stream/XMLInputFactory
+method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
+-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.xml.crypto-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,35 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/xml/crypto/dsig/CanonicalizationMethod
+field name INCLUSIVE_11 descriptor Ljava/lang/String; constantValue http://www.w3.org/2006/12/xml-c14n11 flags 19
+field name INCLUSIVE_11_WITH_COMMENTS descriptor Ljava/lang/String; constantValue http://www.w3.org/2006/12/xml-c14n11#WithComments flags 19
+
+class name javax/xml/crypto/dsig/keyinfo/KeyValue
+field name EC_TYPE descriptor Ljava/lang/String; constantValue http://www.w3.org/2009/xmldsig11#ECKeyValue flags 19
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.compiler-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,35 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name com/sun/source/util/JavacTask
+method name setParameterNameProvider descriptor (Lcom/sun/source/util/ParameterNameProvider;)V flags 1
+
+class name com/sun/source/util/ParameterNameProvider
+header extends java/lang/Object flags 601
+method name getParameterName descriptor (Ljavax/lang/model/element/VariableElement;)Ljava/lang/CharSequence; flags 401
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.httpserver-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,52 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name com/sun/net/httpserver/Authenticator$Failure
+header extends com/sun/net/httpserver/Authenticator$Result nestHost com/sun/net/httpserver/Authenticator flags 21
+innerclass innerClass com/sun/net/httpserver/Authenticator$Result outerClass com/sun/net/httpserver/Authenticator innerClassName Result flags 409
+innerclass innerClass com/sun/net/httpserver/Authenticator$Failure outerClass com/sun/net/httpserver/Authenticator innerClassName Failure flags 9
+
+class name com/sun/net/httpserver/Authenticator$Retry
+header extends com/sun/net/httpserver/Authenticator$Result nestHost com/sun/net/httpserver/Authenticator flags 21
+innerclass innerClass com/sun/net/httpserver/Authenticator$Result outerClass com/sun/net/httpserver/Authenticator innerClassName Result flags 409
+innerclass innerClass com/sun/net/httpserver/Authenticator$Retry outerClass com/sun/net/httpserver/Authenticator innerClassName Retry flags 9
+
+class name com/sun/net/httpserver/Authenticator$Success
+header extends com/sun/net/httpserver/Authenticator$Result nestHost com/sun/net/httpserver/Authenticator flags 21
+innerclass innerClass com/sun/net/httpserver/Authenticator$Result outerClass com/sun/net/httpserver/Authenticator innerClassName Result flags 409
+innerclass innerClass com/sun/net/httpserver/Authenticator$Success outerClass com/sun/net/httpserver/Authenticator innerClassName Success flags 9
+
+class name com/sun/net/httpserver/BasicAuthenticator
+header extends com/sun/net/httpserver/Authenticator flags 421
+innerclass innerClass com/sun/net/httpserver/Authenticator$Retry outerClass com/sun/net/httpserver/Authenticator innerClassName Retry flags 9
+innerclass innerClass com/sun/net/httpserver/Authenticator$Failure outerClass com/sun/net/httpserver/Authenticator innerClassName Failure flags 9
+innerclass innerClass java/util/Base64$Decoder outerClass java/util/Base64 innerClassName Decoder flags 9
+innerclass innerClass com/sun/net/httpserver/Authenticator$Success outerClass com/sun/net/httpserver/Authenticator innerClassName Success flags 9
+innerclass innerClass com/sun/net/httpserver/Authenticator$Result outerClass com/sun/net/httpserver/Authenticator innerClassName Result flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.javadoc-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,93 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name jdk.javadoc
+header exports jdk/javadoc/doclet requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.xml\u0020;flags\u0020;0,name\u0020;java.compiler\u0020;flags\u0020;20,name\u0020;jdk.compiler\u0020;flags\u0020;20 provides interface\u0020;java/util/spi/ToolProvider\u0020;impls\u0020;jdk/javadoc/internal/tool/JavadocToolProvider,interface\u0020;javax/tools/DocumentationTool\u0020;impls\u0020;jdk/javadoc/internal/api/JavadocTool,interface\u0020;javax/tools/Tool\u0020;impls\u0020;jdk/javadoc/internal/api/JavadocTool target linux-amd64 flags 8000
+
+-class name com/sun/javadoc/AnnotatedType
+
+-class name com/sun/javadoc/AnnotationDesc
+
+-class name com/sun/javadoc/AnnotationDesc$ElementValuePair
+
+-class name com/sun/javadoc/AnnotationTypeDoc
+
+-class name com/sun/javadoc/AnnotationTypeElementDoc
+
+-class name com/sun/javadoc/AnnotationValue
+
+-class name com/sun/javadoc/ClassDoc
+
+-class name com/sun/javadoc/ConstructorDoc
+
+-class name com/sun/javadoc/Doc
+
+-class name com/sun/javadoc/DocErrorReporter
+
+-class name com/sun/javadoc/Doclet
+
+-class name com/sun/javadoc/ExecutableMemberDoc
+
+-class name com/sun/javadoc/FieldDoc
+
+-class name com/sun/javadoc/LanguageVersion
+
+-class name com/sun/javadoc/MemberDoc
+
+-class name com/sun/javadoc/MethodDoc
+
+-class name com/sun/javadoc/PackageDoc
+
+-class name com/sun/javadoc/ParamTag
+
+-class name com/sun/javadoc/Parameter
+
+-class name com/sun/javadoc/ParameterizedType
+
+-class name com/sun/javadoc/ProgramElementDoc
+
+-class name com/sun/javadoc/RootDoc
+
+-class name com/sun/javadoc/SeeTag
+
+-class name com/sun/javadoc/SerialFieldTag
+
+-class name com/sun/javadoc/SourcePosition
+
+-class name com/sun/javadoc/Tag
+
+-class name com/sun/javadoc/ThrowsTag
+
+-class name com/sun/javadoc/Type
+
+-class name com/sun/javadoc/TypeVariable
+
+-class name com/sun/javadoc/WildcardType
+
+-class name com/sun/tools/javadoc/Main
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jlink-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,31 @@
+#
+# 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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name jdk.jlink
+header requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;jdk.internal.opt\u0020;flags\u0020;0,name\u0020;jdk.jdeps\u0020;flags\u0020;0 uses jdk/tools/jlink/plugin/Plugin provides interface\u0020;java/util/spi/ToolProvider\u0020;impls\u0020;jdk/tools/jmod/Main$JmodToolProvider\u005C;u002C;jdk/tools/jlink/internal/Main$JlinkToolProvider,interface\u0020;jdk/tools/jlink/plugin/Plugin\u0020;impls\u0020;jdk/tools/jlink/internal/plugins/DefaultStripDebugPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/StripJavaDebugAttributesPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/ExcludePlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/ExcludeFilesPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/ExcludeJmodSectionPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/LegalNoticeFilePlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/SystemModulesPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/StripNativeCommandsPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/OrderResourcesPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/DefaultCompressPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/ExcludeVMPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/ReleaseInfoPlugin\u005C;u002C;jdk/tools/jlink/internal/plugins/StripNativeDebugSymbolsPlugin target linux-amd64 flags 8000
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jshell-D.sym.txt Fri Jun 21 09:05:45 2019 -0700
@@ -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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name jdk/jshell/ErroneousSnippet
+header extends jdk/jshell/Snippet flags 21
+innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019
+innerclass innerClass jdk/jshell/Snippet$Kind outerClass jdk/jshell/Snippet innerClassName Kind flags 4019
+
+class name jdk/jshell/JShell
+header extends java/lang/Object implements java/lang/AutoCloseable nestMembers jdk/jshell/JShell$Subscription,jdk/jshell/JShell$Builder flags 21
+innerclass innerClass jdk/jshell/JShell$Builder outerClass jdk/jshell/JShell innerClassName Builder flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409
+innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019
+innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9
+innerclass innerClass jdk/jshell/JShell$Subscription outerClass jdk/jshell/JShell innerClassName Subscription flags 1
+innerclass innerClass jdk/jshell/Snippet$Kind outerClass jdk/jshell/Snippet innerClassName Kind flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/Snippet
+header extends java/lang/Object nestMembers jdk/jshell/Snippet$Status,jdk/jshell/Snippet$SubKind,jdk/jshell/Snippet$Kind flags 421
+innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019
+innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019
+innerclass innerClass jdk/jshell/Snippet$Kind outerClass jdk/jshell/Snippet innerClassName Kind flags 4019
+
+class name jdk/jshell/SourceCodeAnalysis$CompletionInfo
+header extends java/lang/Object nestHost jdk/jshell/SourceCodeAnalysis flags 601
+innerclass innerClass jdk/jshell/SourceCodeAnalysis$CompletionInfo outerClass jdk/jshell/SourceCodeAnalysis innerClassName CompletionInfo flags 609
+innerclass innerClass jdk/jshell/SourceCodeAnalysis$Completeness outerClass jdk/jshell/SourceCodeAnalysis innerClassName Completeness flags 4019
+
+class name jdk/jshell/SourceCodeAnalysis$SnippetWrapper
+header extends java/lang/Object nestHost jdk/jshell/SourceCodeAnalysis flags 601
+innerclass innerClass jdk/jshell/SourceCodeAnalysis$SnippetWrapper outerClass jdk/jshell/SourceCodeAnalysis innerClassName SnippetWrapper flags 609
+innerclass innerClass jdk/jshell/Snippet$Kind outerClass jdk/jshell/Snippet innerClassName Kind flags 4019
+
+class name jdk/jshell/execution/DirectExecutionControl
+header extends java/lang/Object implements jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19
+innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ResolutionException outerClass jdk/jshell/spi/ExecutionControl innerClassName ResolutionException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$UserException outerClass jdk/jshell/spi/ExecutionControl innerClassName UserException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/execution/JdiExecutionControl
+header extends jdk/jshell/execution/StreamingExecutionControl implements jdk/jshell/spi/ExecutionControl flags 421
+innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19
+innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/execution/JdiInitiator
+header extends java/lang/Object flags 21
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/execution/LocalExecutionControl
+header extends jdk/jshell/execution/DirectExecutionControl flags 21
+innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609
+innerclass innerClass jdk/jshell/spi/ExecutionControl$StoppedException outerClass jdk/jshell/spi/ExecutionControl innerClassName StoppedException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/execution/StreamingExecutionControl
+header extends java/lang/Object implements jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$UserException outerClass jdk/jshell/spi/ExecutionControl innerClassName UserException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ResolutionException outerClass jdk/jshell/spi/ExecutionControl innerClassName ResolutionException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$StoppedException outerClass jdk/jshell/spi/ExecutionControl innerClassName StoppedException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/spi/ExecutionControl$ClassInstallException
+header extends jdk/jshell/spi/ExecutionControl$ExecutionControlException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9
+
+class name jdk/jshell/spi/ExecutionControl$EngineTerminationException
+header extends jdk/jshell/spi/ExecutionControl$ExecutionControlException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9
+
+class name jdk/jshell/spi/ExecutionControl$InternalException
+header extends jdk/jshell/spi/ExecutionControl$ExecutionControlException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9
+
+class name jdk/jshell/spi/ExecutionControl$NotImplementedException
+header extends jdk/jshell/spi/ExecutionControl$InternalException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9
+innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9
+
+class name jdk/jshell/spi/ExecutionControl$ResolutionException
+header extends jdk/jshell/spi/ExecutionControl$RunException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ResolutionException outerClass jdk/jshell/spi/ExecutionControl innerClassName ResolutionException flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name jdk/jshell/spi/ExecutionControl$RunException
+header extends jdk/jshell/spi/ExecutionControl$ExecutionControlException nestHost jdk/jshell/spi/ExecutionControl flags 421
+innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409
+
+class name jdk/jshell/spi/ExecutionControl$StoppedException
+header extends jdk/jshell/spi/ExecutionControl$RunException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$StoppedException outerClass jdk/jshell/spi/ExecutionControl innerClassName StoppedException flags 9
+
+class name jdk/jshell/spi/ExecutionControl$UserException
+header extends jdk/jshell/spi/ExecutionControl$RunException nestHost jdk/jshell/spi/ExecutionControl flags 21
+innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409
+innerclass innerClass jdk/jshell/spi/ExecutionControl$UserException outerClass jdk/jshell/spi/ExecutionControl innerClassName UserException flags 9
+
--- a/make/data/symbols/symbols Tue Jun 18 21:40:50 2019 -0700
+++ b/make/data/symbols/symbols Fri Jun 21 09:05:45 2019 -0700
@@ -29,10 +29,11 @@
#command used to generate this file:
#build.tools.symbolgenerator.CreateSymbols build-description-incremental symbols include.list
#
-generate platforms 7:8:9:A:B:C
+generate platforms 7:8:9:A:B:C:D
platform version 8 files java.activation-8.sym.txt:java.base-8.sym.txt:java.compiler-8.sym.txt:java.corba-8.sym.txt:java.datatransfer-8.sym.txt:java.desktop-8.sym.txt:java.instrument-8.sym.txt:java.logging-8.sym.txt:java.management-8.sym.txt:java.management.rmi-8.sym.txt:java.naming-8.sym.txt:java.prefs-8.sym.txt:java.rmi-8.sym.txt:java.scripting-8.sym.txt:java.security.jgss-8.sym.txt:java.security.sasl-8.sym.txt:java.sql-8.sym.txt:java.sql.rowset-8.sym.txt:java.transaction-8.sym.txt:java.xml-8.sym.txt:java.xml.bind-8.sym.txt:java.xml.crypto-8.sym.txt:java.xml.ws-8.sym.txt:java.xml.ws.annotation-8.sym.txt:jdk.httpserver-8.sym.txt:jdk.management-8.sym.txt:jdk.scripting.nashorn-8.sym.txt:jdk.sctp-8.sym.txt:jdk.security.auth-8.sym.txt:jdk.security.jgss-8.sym.txt
platform version 7 base 8 files java.base-7.sym.txt:java.compiler-7.sym.txt:java.datatransfer-7.sym.txt:java.desktop-7.sym.txt:java.logging-7.sym.txt:java.management-7.sym.txt:java.naming-7.sym.txt:java.prefs-7.sym.txt:java.rmi-7.sym.txt:java.scripting-7.sym.txt:java.security.jgss-7.sym.txt:java.security.sasl-7.sym.txt:java.sql-7.sym.txt:java.sql.rowset-7.sym.txt:java.xml-7.sym.txt:java.xml.bind-7.sym.txt:java.xml.ws.annotation-7.sym.txt:jdk.httpserver-7.sym.txt:jdk.management-7.sym.txt:jdk.scripting.nashorn-7.sym.txt:jdk.sctp-7.sym.txt:jdk.security.auth-7.sym.txt:jdk.security.jgss-7.sym.txt
platform version 9 base 8 files java.activation-9.sym.txt:java.base-9.sym.txt:java.compiler-9.sym.txt:java.corba-9.sym.txt:java.datatransfer-9.sym.txt:java.desktop-9.sym.txt:java.instrument-9.sym.txt:java.logging-9.sym.txt:java.management-9.sym.txt:java.management.rmi-9.sym.txt:java.naming-9.sym.txt:java.prefs-9.sym.txt:java.rmi-9.sym.txt:java.scripting-9.sym.txt:java.se-9.sym.txt:java.se.ee-9.sym.txt:java.security.jgss-9.sym.txt:java.security.sasl-9.sym.txt:java.smartcardio-9.sym.txt:java.sql-9.sym.txt:java.sql.rowset-9.sym.txt:java.transaction-9.sym.txt:java.xml-9.sym.txt:java.xml.bind-9.sym.txt:java.xml.crypto-9.sym.txt:java.xml.ws-9.sym.txt:java.xml.ws.annotation-9.sym.txt:jdk.accessibility-9.sym.txt:jdk.attach-9.sym.txt:jdk.charsets-9.sym.txt:jdk.compiler-9.sym.txt:jdk.crypto.cryptoki-9.sym.txt:jdk.crypto.ec-9.sym.txt:jdk.dynalink-9.sym.txt:jdk.editpad-9.sym.txt:jdk.hotspot.agent-9.sym.txt:jdk.httpserver-9.sym.txt:jdk.incubator.httpclient-9.sym.txt:jdk.jartool-9.sym.txt:jdk.javadoc-9.sym.txt:jdk.jcmd-9.sym.txt:jdk.jconsole-9.sym.txt:jdk.jdeps-9.sym.txt:jdk.jdi-9.sym.txt:jdk.jdwp.agent-9.sym.txt:jdk.jlink-9.sym.txt:jdk.jshell-9.sym.txt:jdk.jsobject-9.sym.txt:jdk.jstatd-9.sym.txt:jdk.localedata-9.sym.txt:jdk.management-9.sym.txt:jdk.management.agent-9.sym.txt:jdk.naming.dns-9.sym.txt:jdk.naming.rmi-9.sym.txt:jdk.net-9.sym.txt:jdk.pack-9.sym.txt:jdk.policytool-9.sym.txt:jdk.rmic-9.sym.txt:jdk.scripting.nashorn-9.sym.txt:jdk.sctp-9.sym.txt:jdk.security.auth-9.sym.txt:jdk.security.jgss-9.sym.txt:jdk.unsupported-9.sym.txt:jdk.xml.dom-9.sym.txt:jdk.zipfs-9.sym.txt
platform version A base 9 files java.activation-A.sym.txt:java.base-A.sym.txt:java.compiler-A.sym.txt:java.corba-A.sym.txt:java.datatransfer-A.sym.txt:java.desktop-A.sym.txt:java.instrument-A.sym.txt:java.logging-A.sym.txt:java.management-A.sym.txt:java.management.rmi-A.sym.txt:java.naming-A.sym.txt:java.prefs-A.sym.txt:java.rmi-A.sym.txt:java.scripting-A.sym.txt:java.se-A.sym.txt:java.se.ee-A.sym.txt:java.security.jgss-A.sym.txt:java.security.sasl-A.sym.txt:java.smartcardio-A.sym.txt:java.sql-A.sym.txt:java.sql.rowset-A.sym.txt:java.transaction-A.sym.txt:java.xml-A.sym.txt:java.xml.bind-A.sym.txt:java.xml.crypto-A.sym.txt:java.xml.ws-A.sym.txt:java.xml.ws.annotation-A.sym.txt:jdk.accessibility-A.sym.txt:jdk.attach-A.sym.txt:jdk.charsets-A.sym.txt:jdk.compiler-A.sym.txt:jdk.crypto.cryptoki-A.sym.txt:jdk.crypto.ec-A.sym.txt:jdk.dynalink-A.sym.txt:jdk.editpad-A.sym.txt:jdk.hotspot.agent-A.sym.txt:jdk.httpserver-A.sym.txt:jdk.incubator.httpclient-A.sym.txt:jdk.jartool-A.sym.txt:jdk.javadoc-A.sym.txt:jdk.jcmd-A.sym.txt:jdk.jconsole-A.sym.txt:jdk.jdeps-A.sym.txt:jdk.jdi-A.sym.txt:jdk.jdwp.agent-A.sym.txt:jdk.jlink-A.sym.txt:jdk.jshell-A.sym.txt:jdk.jsobject-A.sym.txt:jdk.jstatd-A.sym.txt:jdk.localedata-A.sym.txt:jdk.management-A.sym.txt:jdk.management.agent-A.sym.txt:jdk.naming.dns-A.sym.txt:jdk.naming.rmi-A.sym.txt:jdk.net-A.sym.txt:jdk.pack-A.sym.txt:jdk.policytool-A.sym.txt:jdk.rmic-A.sym.txt:jdk.scripting.nashorn-A.sym.txt:jdk.sctp-A.sym.txt:jdk.security.auth-A.sym.txt:jdk.security.jgss-A.sym.txt:jdk.unsupported-A.sym.txt:jdk.xml.dom-A.sym.txt:jdk.zipfs-A.sym.txt
platform version B base A files java.activation-B.sym.txt:java.base-B.sym.txt:java.compiler-B.sym.txt:java.corba-B.sym.txt:java.datatransfer-B.sym.txt:java.desktop-B.sym.txt:java.instrument-B.sym.txt:java.logging-B.sym.txt:java.management-B.sym.txt:java.management.rmi-B.sym.txt:java.naming-B.sym.txt:java.net.http-B.sym.txt:java.prefs-B.sym.txt:java.rmi-B.sym.txt:java.scripting-B.sym.txt:java.se-B.sym.txt:java.se.ee-B.sym.txt:java.security.jgss-B.sym.txt:java.security.sasl-B.sym.txt:java.smartcardio-B.sym.txt:java.sql-B.sym.txt:java.sql.rowset-B.sym.txt:java.transaction-B.sym.txt:java.transaction.xa-B.sym.txt:java.xml-B.sym.txt:java.xml.bind-B.sym.txt:java.xml.crypto-B.sym.txt:java.xml.ws-B.sym.txt:java.xml.ws.annotation-B.sym.txt:jdk.accessibility-B.sym.txt:jdk.attach-B.sym.txt:jdk.charsets-B.sym.txt:jdk.compiler-B.sym.txt:jdk.crypto.cryptoki-B.sym.txt:jdk.crypto.ec-B.sym.txt:jdk.dynalink-B.sym.txt:jdk.editpad-B.sym.txt:jdk.hotspot.agent-B.sym.txt:jdk.httpserver-B.sym.txt:jdk.incubator.httpclient-B.sym.txt:jdk.jartool-B.sym.txt:jdk.javadoc-B.sym.txt:jdk.jcmd-B.sym.txt:jdk.jconsole-B.sym.txt:jdk.jdeps-B.sym.txt:jdk.jdi-B.sym.txt:jdk.jdwp.agent-B.sym.txt:jdk.jfr-B.sym.txt:jdk.jlink-B.sym.txt:jdk.jshell-B.sym.txt:jdk.jsobject-B.sym.txt:jdk.jstatd-B.sym.txt:jdk.localedata-B.sym.txt:jdk.management-B.sym.txt:jdk.management.agent-B.sym.txt:jdk.management.jfr-B.sym.txt:jdk.naming.dns-B.sym.txt:jdk.naming.rmi-B.sym.txt:jdk.net-B.sym.txt:jdk.pack-B.sym.txt:jdk.rmic-B.sym.txt:jdk.scripting.nashorn-B.sym.txt:jdk.sctp-B.sym.txt:jdk.security.auth-B.sym.txt:jdk.security.jgss-B.sym.txt:jdk.unsupported-B.sym.txt:jdk.xml.dom-B.sym.txt:jdk.zipfs-B.sym.txt
platform version C base B files java.base-C.sym.txt:java.compiler-C.sym.txt:java.desktop-C.sym.txt:java.naming-C.sym.txt:java.rmi-C.sym.txt:java.xml-C.sym.txt:jdk.compiler-C.sym.txt:jdk.jfr-C.sym.txt:jdk.jsobject-C.sym.txt:jdk.unsupported-C.sym.txt
+platform version D base C files java.base-D.sym.txt:java.compiler-D.sym.txt:java.desktop-D.sym.txt:java.management-D.sym.txt:java.management.rmi-D.sym.txt:java.net.http-D.sym.txt:java.xml-D.sym.txt:java.xml.crypto-D.sym.txt:jdk.compiler-D.sym.txt:jdk.httpserver-D.sym.txt:jdk.javadoc-D.sym.txt:jdk.jlink-D.sym.txt:jdk.jshell-D.sym.txt
--- a/make/jdk/src/classes/build/tools/generatecacerts/GenerateCacerts.java Tue Jun 18 21:40:50 2019 -0700
+++ b/make/jdk/src/classes/build/tools/generatecacerts/GenerateCacerts.java Fri Jun 21 09:05:45 2019 -0700
@@ -25,12 +25,23 @@
package build.tools.generatecacerts;
+import java.io.DataOutputStream;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.security.KeyStore;
+import java.security.DigestOutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* Generate cacerts
@@ -39,23 +50,99 @@
*/
public class GenerateCacerts {
public static void main(String[] args) throws Exception {
- KeyStore ks = KeyStore.getInstance("JKS");
- ks.load(null, null);
- CertificateFactory cf = CertificateFactory.getInstance("X509");
- Files.list(Path.of(args[0]))
- .filter(p -> !p.getFileName().toString().equals("README"))
- .forEach(p -> {
- try {
- String alias = p.getFileName().toString() + " [jdk]";
- try (InputStream fis = Files.newInputStream(p)) {
- ks.setCertificateEntry(alias, cf.generateCertificate(fis));
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- });
try (FileOutputStream fos = new FileOutputStream(args[1])) {
- ks.store(fos, "changeit".toCharArray());
+ store(args[0], fos, "changeit".toCharArray());
}
}
+
+ // The following code are copied from JavaKeyStore.java.
+
+ private static final int MAGIC = 0xfeedfeed;
+ private static final int VERSION_2 = 0x02;
+
+ // This method is a simplified version of JavaKeyStore::engineStore.
+ // A new "dir" argument is added. All cert names in "dir" is collected into
+ // a sorted array. Each cert is stored with a creation date set to its
+ // notBefore value. Thus the output is determined as long as the certs
+ // are the same.
+ public static void store(String dir, OutputStream stream, char[] password)
+ throws IOException, NoSuchAlgorithmException, CertificateException
+ {
+ byte[] encoded; // the certificate encoding
+ CertificateFactory cf = CertificateFactory.getInstance("X509");
+
+ MessageDigest md = getPreKeyedHash(password);
+ DataOutputStream dos
+ = new DataOutputStream(new DigestOutputStream(stream, md));
+
+ dos.writeInt(MAGIC);
+ // always write the latest version
+ dos.writeInt(VERSION_2);
+
+ // All file names in dir sorted.
+ // README is excluded. Name starting with "." excluded.
+ List<String> entries = Files.list(Path.of(dir))
+ .map(p -> p.getFileName().toString())
+ .filter(s -> !s.equals("README") && !s.startsWith("."))
+ .collect(Collectors.toList());
+
+ entries.sort(String::compareTo);
+
+ dos.writeInt(entries.size());
+
+ for (String entry : entries) {
+
+ String alias = entry + " [jdk]";
+ X509Certificate cert;
+ try (InputStream fis = Files.newInputStream(Path.of(dir, entry))) {
+ cert = (X509Certificate) cf.generateCertificate(fis);
+ }
+
+ dos.writeInt(2);
+
+ // Write the alias
+ dos.writeUTF(alias);
+
+ // Write the (entry creation) date, which is notBefore of the cert
+ dos.writeLong(cert.getNotBefore().getTime());
+
+ // Write the trusted certificate
+ encoded = cert.getEncoded();
+ dos.writeUTF(cert.getType());
+ dos.writeInt(encoded.length);
+ dos.write(encoded);
+ }
+
+ /*
+ * Write the keyed hash which is used to detect tampering with
+ * the keystore (such as deleting or modifying key or
+ * certificate entries).
+ */
+ byte[] digest = md.digest();
+
+ dos.write(digest);
+ dos.flush();
+ }
+
+ private static MessageDigest getPreKeyedHash(char[] password)
+ throws NoSuchAlgorithmException, UnsupportedEncodingException
+ {
+
+ MessageDigest md = MessageDigest.getInstance("SHA");
+ byte[] passwdBytes = convertToBytes(password);
+ md.update(passwdBytes);
+ Arrays.fill(passwdBytes, (byte) 0x00);
+ md.update("Mighty Aphrodite".getBytes("UTF8"));
+ return md;
+ }
+
+ private static byte[] convertToBytes(char[] password) {
+ int i, j;
+ byte[] passwdBytes = new byte[password.length * 2];
+ for (i=0, j=0; i<password.length; i++) {
+ passwdBytes[j++] = (byte)(password[i] >> 8);
+ passwdBytes[j++] = (byte)password[i];
+ }
+ return passwdBytes;
+ }
}
--- a/src/hotspot/cpu/aarch64/aarch64.ad Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/aarch64.ad Fri Jun 21 09:05:45 2019 -0700
@@ -957,6 +957,146 @@
V3, V3_H
);
+// Class for 128 bit register v4
+reg_class v4_reg(
+ V4, V4_H
+);
+
+// Class for 128 bit register v5
+reg_class v5_reg(
+ V5, V5_H
+);
+
+// Class for 128 bit register v6
+reg_class v6_reg(
+ V6, V6_H
+);
+
+// Class for 128 bit register v7
+reg_class v7_reg(
+ V7, V7_H
+);
+
+// Class for 128 bit register v8
+reg_class v8_reg(
+ V8, V8_H
+);
+
+// Class for 128 bit register v9
+reg_class v9_reg(
+ V9, V9_H
+);
+
+// Class for 128 bit register v10
+reg_class v10_reg(
+ V10, V10_H
+);
+
+// Class for 128 bit register v11
+reg_class v11_reg(
+ V11, V11_H
+);
+
+// Class for 128 bit register v12
+reg_class v12_reg(
+ V12, V12_H
+);
+
+// Class for 128 bit register v13
+reg_class v13_reg(
+ V13, V13_H
+);
+
+// Class for 128 bit register v14
+reg_class v14_reg(
+ V14, V14_H
+);
+
+// Class for 128 bit register v15
+reg_class v15_reg(
+ V15, V15_H
+);
+
+// Class for 128 bit register v16
+reg_class v16_reg(
+ V16, V16_H
+);
+
+// Class for 128 bit register v17
+reg_class v17_reg(
+ V17, V17_H
+);
+
+// Class for 128 bit register v18
+reg_class v18_reg(
+ V18, V18_H
+);
+
+// Class for 128 bit register v19
+reg_class v19_reg(
+ V19, V19_H
+);
+
+// Class for 128 bit register v20
+reg_class v20_reg(
+ V20, V20_H
+);
+
+// Class for 128 bit register v21
+reg_class v21_reg(
+ V21, V21_H
+);
+
+// Class for 128 bit register v22
+reg_class v22_reg(
+ V22, V22_H
+);
+
+// Class for 128 bit register v23
+reg_class v23_reg(
+ V23, V23_H
+);
+
+// Class for 128 bit register v24
+reg_class v24_reg(
+ V24, V24_H
+);
+
+// Class for 128 bit register v25
+reg_class v25_reg(
+ V25, V25_H
+);
+
+// Class for 128 bit register v26
+reg_class v26_reg(
+ V26, V26_H
+);
+
+// Class for 128 bit register v27
+reg_class v27_reg(
+ V27, V27_H
+);
+
+// Class for 128 bit register v28
+reg_class v28_reg(
+ V28, V28_H
+);
+
+// Class for 128 bit register v29
+reg_class v29_reg(
+ V29, V29_H
+);
+
+// Class for 128 bit register v30
+reg_class v30_reg(
+ V30, V30_H
+);
+
+// Class for 128 bit register v31
+reg_class v31_reg(
+ V31, V31_H
+);
+
// Singleton class for condition codes
reg_class int_flags(RFLAGS);
@@ -4774,6 +4914,258 @@
interface(REG_INTER);
%}
+operand vRegD_V4()
+%{
+ constraint(ALLOC_IN_RC(v4_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V5()
+%{
+ constraint(ALLOC_IN_RC(v5_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V6()
+%{
+ constraint(ALLOC_IN_RC(v6_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V7()
+%{
+ constraint(ALLOC_IN_RC(v7_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V8()
+%{
+ constraint(ALLOC_IN_RC(v8_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V9()
+%{
+ constraint(ALLOC_IN_RC(v9_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V10()
+%{
+ constraint(ALLOC_IN_RC(v10_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V11()
+%{
+ constraint(ALLOC_IN_RC(v11_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V12()
+%{
+ constraint(ALLOC_IN_RC(v12_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V13()
+%{
+ constraint(ALLOC_IN_RC(v13_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V14()
+%{
+ constraint(ALLOC_IN_RC(v14_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V15()
+%{
+ constraint(ALLOC_IN_RC(v15_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V16()
+%{
+ constraint(ALLOC_IN_RC(v16_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V17()
+%{
+ constraint(ALLOC_IN_RC(v17_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V18()
+%{
+ constraint(ALLOC_IN_RC(v18_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V19()
+%{
+ constraint(ALLOC_IN_RC(v19_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V20()
+%{
+ constraint(ALLOC_IN_RC(v20_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V21()
+%{
+ constraint(ALLOC_IN_RC(v21_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V22()
+%{
+ constraint(ALLOC_IN_RC(v22_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V23()
+%{
+ constraint(ALLOC_IN_RC(v23_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V24()
+%{
+ constraint(ALLOC_IN_RC(v24_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V25()
+%{
+ constraint(ALLOC_IN_RC(v25_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V26()
+%{
+ constraint(ALLOC_IN_RC(v26_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V27()
+%{
+ constraint(ALLOC_IN_RC(v27_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V28()
+%{
+ constraint(ALLOC_IN_RC(v28_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V29()
+%{
+ constraint(ALLOC_IN_RC(v29_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V30()
+%{
+ constraint(ALLOC_IN_RC(v30_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
+operand vRegD_V31()
+%{
+ constraint(ALLOC_IN_RC(v31_reg));
+ match(RegD);
+ op_cost(0);
+ format %{ %}
+ interface(REG_INTER);
+%}
+
// Flags register, used as output of signed compare instructions
// note that on AArch64 we also use this register as the output for
@@ -13863,7 +14255,7 @@
format %{ "fcmps $src1, 0.0" %}
ins_encode %{
- __ fcmps(as_FloatRegister($src1$$reg), 0.0D);
+ __ fcmps(as_FloatRegister($src1$$reg), 0.0);
%}
ins_pipe(pipe_class_compare);
@@ -13892,7 +14284,7 @@
format %{ "fcmpd $src1, 0.0" %}
ins_encode %{
- __ fcmpd(as_FloatRegister($src1$$reg), 0.0D);
+ __ fcmpd(as_FloatRegister($src1$$reg), 0.0);
%}
ins_pipe(pipe_class_compare);
@@ -13968,7 +14360,7 @@
Label done;
FloatRegister s1 = as_FloatRegister($src1$$reg);
Register d = as_Register($dst$$reg);
- __ fcmps(s1, 0.0D);
+ __ fcmps(s1, 0.0);
// installs 0 if EQ else -1
__ csinvw(d, zr, zr, Assembler::EQ);
// keeps -1 if less or unordered else installs 1
@@ -13995,7 +14387,7 @@
Label done;
FloatRegister s1 = as_FloatRegister($src1$$reg);
Register d = as_Register($dst$$reg);
- __ fcmpd(s1, 0.0D);
+ __ fcmpd(s1, 0.0);
// installs 0 if EQ else -1
__ csinvw(d, zr, zr, Assembler::EQ);
// keeps -1 if less or unordered else installs 1
--- a/src/hotspot/cpu/aarch64/assembler_aarch64.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/assembler_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -276,7 +276,7 @@
unsigned get(int msb = 31, int lsb = 0) {
int nbits = msb - lsb + 1;
unsigned mask = ((1U << nbits) - 1) << lsb;
- assert_cond(bits & mask == mask);
+ assert_cond((bits & mask) == mask);
return (insn & mask) >> lsb;
}
@@ -2644,7 +2644,7 @@
// RBIT only allows T8B and T16B but encodes them oddly. Argh...
void rbit(FloatRegister Vd, SIMD_Arrangement T, FloatRegister Vn) {
assert((ASSERTION), MSG);
- _rbit(Vd, SIMD_Arrangement(T & 1 | 0b010), Vn);
+ _rbit(Vd, SIMD_Arrangement((T & 1) | 0b010), Vn);
}
#undef ASSERTION
--- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -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.
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -1015,7 +1015,11 @@
if (UseCompressedOops && !wide) {
__ decode_heap_oop(dest->as_register());
}
- __ verify_oop(dest->as_register());
+
+ if (!UseZGC) {
+ // Load barrier has not yet been applied, so ZGC can't verify the oop here
+ __ verify_oop(dest->as_register());
+ }
} else if (type == T_ADDRESS && addr->disp() == oopDesc::klass_offset_in_bytes()) {
if (UseCompressedClassPointers) {
__ decode_klass_not_null(dest->as_register());
@@ -1074,8 +1078,8 @@
// Assembler::EQ does not permit unordered branches, so we add
// another branch here. Likewise, Assembler::NE does not permit
// ordered branches.
- if (is_unordered && op->cond() == lir_cond_equal
- || !is_unordered && op->cond() == lir_cond_notEqual)
+ if ((is_unordered && op->cond() == lir_cond_equal)
+ || (!is_unordered && op->cond() == lir_cond_notEqual))
__ br(Assembler::VS, *(op->ublock()->label()));
switch(op->cond()) {
case lir_cond_equal: acond = Assembler::EQ; break;
@@ -1785,18 +1789,22 @@
switch (code) {
case lir_add: __ fadds (dest->as_float_reg(), left->as_float_reg(), right->as_float_reg()); break;
case lir_sub: __ fsubs (dest->as_float_reg(), left->as_float_reg(), right->as_float_reg()); break;
+ case lir_mul_strictfp: // fall through
case lir_mul: __ fmuls (dest->as_float_reg(), left->as_float_reg(), right->as_float_reg()); break;
+ case lir_div_strictfp: // fall through
case lir_div: __ fdivs (dest->as_float_reg(), left->as_float_reg(), right->as_float_reg()); break;
default:
ShouldNotReachHere();
}
} else if (left->is_double_fpu()) {
if (right->is_double_fpu()) {
- // cpu register - cpu register
+ // fpu register - fpu register
switch (code) {
case lir_add: __ faddd (dest->as_double_reg(), left->as_double_reg(), right->as_double_reg()); break;
case lir_sub: __ fsubd (dest->as_double_reg(), left->as_double_reg(), right->as_double_reg()); break;
+ case lir_mul_strictfp: // fall through
case lir_mul: __ fmuld (dest->as_double_reg(), left->as_double_reg(), right->as_double_reg()); break;
+ case lir_div_strictfp: // fall through
case lir_div: __ fdivd (dest->as_double_reg(), left->as_double_reg(), right->as_double_reg()); break;
default:
ShouldNotReachHere();
@@ -2869,7 +2877,11 @@
void LIR_Assembler::leal(LIR_Opr addr, LIR_Opr dest, LIR_PatchCode patch_code, CodeEmitInfo* info) {
- assert(patch_code == lir_patch_none, "Patch code not supported");
+ if (patch_code != lir_patch_none) {
+ deoptimize_trap(info);
+ return;
+ }
+
__ lea(dest->as_register_lo(), as_Address(addr->as_address_ptr()));
}
--- a/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -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.
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -426,7 +426,7 @@
tmp = new_register(T_DOUBLE);
}
- arithmetic_op_fpu(x->op(), reg, left.result(), right.result(), NULL);
+ arithmetic_op_fpu(x->op(), reg, left.result(), right.result(), x->is_strictfp());
set_result(x, round_item(reg));
}
--- a/src/hotspot/cpu/aarch64/frame_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/frame_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -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.
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -768,11 +768,13 @@
extern "C" void pf(unsigned long sp, unsigned long fp, unsigned long pc,
unsigned long bcx, unsigned long thread) {
- RegisterMap map((JavaThread*)thread, false);
if (!reg_map) {
- reg_map = (RegisterMap*)os::malloc(sizeof map, mtNone);
+ reg_map = NEW_C_HEAP_OBJ(RegisterMap, mtNone);
+ ::new (reg_map) RegisterMap((JavaThread*)thread, false);
+ } else {
+ *reg_map = RegisterMap((JavaThread*)thread, false);
}
- memcpy(reg_map, &map, sizeof map);
+
{
CodeBlob *cb = CodeCache::find_blob((address)pc);
if (cb && cb->frame_size())
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,407 @@
+/*
+ * 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 "precompiled.hpp"
+#include "asm/macroAssembler.inline.hpp"
+#include "code/codeBlob.hpp"
+#include "gc/z/zBarrier.inline.hpp"
+#include "gc/z/zBarrierSet.hpp"
+#include "gc/z/zBarrierSetAssembler.hpp"
+#include "gc/z/zBarrierSetRuntime.hpp"
+#include "memory/resourceArea.hpp"
+#ifdef COMPILER1
+#include "c1/c1_LIRAssembler.hpp"
+#include "c1/c1_MacroAssembler.hpp"
+#include "gc/z/c1/zBarrierSetC1.hpp"
+#endif // COMPILER1
+
+#include "gc/z/zThreadLocalData.hpp"
+
+ZBarrierSetAssembler::ZBarrierSetAssembler() :
+ _load_barrier_slow_stub(),
+ _load_barrier_weak_slow_stub() {}
+
+#ifdef PRODUCT
+#define BLOCK_COMMENT(str) /* nothing */
+#else
+#define BLOCK_COMMENT(str) __ block_comment(str)
+#endif
+
+#undef __
+#define __ masm->
+
+void ZBarrierSetAssembler::load_at(MacroAssembler* masm,
+ DecoratorSet decorators,
+ BasicType type,
+ Register dst,
+ Address src,
+ Register tmp1,
+ Register tmp_thread) {
+ if (!ZBarrierSet::barrier_needed(decorators, type)) {
+ // Barrier not needed
+ BarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp_thread);
+ return;
+ }
+
+ // rscratch1 can be passed as src or dst, so don't use it.
+ RegSet savedRegs = RegSet::of(rscratch2, rheapbase);
+
+ Label done;
+ assert_different_registers(rheapbase, rscratch2, dst);
+ assert_different_registers(rheapbase, rscratch2, src.base());
+
+ __ push(savedRegs, sp);
+
+ // Load bad mask into scratch register.
+ __ ldr(rheapbase, address_bad_mask_from_thread(rthread));
+ __ lea(rscratch2, src);
+ __ ldr(dst, src);
+
+ // Test reference against bad mask. If mask bad, then we need to fix it up.
+ __ tst(dst, rheapbase);
+ __ br(Assembler::EQ, done);
+
+ __ enter();
+
+ __ push(RegSet::range(r0,r28) - RegSet::of(dst), sp);
+
+ if (c_rarg0 != dst) {
+ __ mov(c_rarg0, dst);
+ }
+ __ mov(c_rarg1, rscratch2);
+
+ int step = 4 * wordSize;
+ __ mov(rscratch1, -step);
+ __ sub(sp, sp, step);
+
+ for (int i = 28; i >= 4; i -= 4) {
+ __ st1(as_FloatRegister(i), as_FloatRegister(i+1), as_FloatRegister(i+2),
+ as_FloatRegister(i+3), __ T1D, Address(__ post(sp, rscratch1)));
+ }
+
+ __ call_VM_leaf(ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr(decorators), 2);
+
+ for (int i = 0; i <= 28; i += 4) {
+ __ ld1(as_FloatRegister(i), as_FloatRegister(i+1), as_FloatRegister(i+2),
+ as_FloatRegister(i+3), __ T1D, Address(__ post(sp, step)));
+ }
+
+ // Make sure dst has the return value.
+ if (dst != r0) {
+ __ mov(dst, r0);
+ }
+
+ __ pop(RegSet::range(r0,r28) - RegSet::of(dst), sp);
+ __ leave();
+
+ __ bind(done);
+
+ // Restore tmps
+ __ pop(savedRegs, sp);
+}
+
+#ifdef ASSERT
+
+void ZBarrierSetAssembler::store_at(MacroAssembler* masm,
+ DecoratorSet decorators,
+ BasicType type,
+ Address dst,
+ Register val,
+ Register tmp1,
+ Register tmp2) {
+ // Verify value
+ if (type == T_OBJECT || type == T_ARRAY) {
+ // Note that src could be noreg, which means we
+ // are storing null and can skip verification.
+ if (val != noreg) {
+ Label done;
+
+ // tmp1 and tmp2 are often set to noreg.
+ RegSet savedRegs = RegSet::of(rscratch1);
+ __ push(savedRegs, sp);
+
+ __ ldr(rscratch1, address_bad_mask_from_thread(rthread));
+ __ tst(val, rscratch1);
+ __ br(Assembler::EQ, done);
+ __ stop("Verify oop store failed");
+ __ should_not_reach_here();
+ __ bind(done);
+ __ pop(savedRegs, sp);
+ }
+ }
+
+ // Store value
+ BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2);
+}
+
+#endif // ASSERT
+
+void ZBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm,
+ DecoratorSet decorators,
+ bool is_oop,
+ Register src,
+ Register dst,
+ Register count,
+ RegSet saved_regs) {
+ if (!is_oop) {
+ // Barrier not needed
+ return;
+ }
+
+ BLOCK_COMMENT("ZBarrierSetAssembler::arraycopy_prologue {");
+
+ assert_different_registers(src, count, rscratch1);
+
+ __ pusha();
+
+ if (count == c_rarg0) {
+ if (src == c_rarg1) {
+ // exactly backwards!!
+ __ mov(rscratch1, c_rarg0);
+ __ mov(c_rarg0, c_rarg1);
+ __ mov(c_rarg1, rscratch1);
+ } else {
+ __ mov(c_rarg1, count);
+ __ mov(c_rarg0, src);
+ }
+ } else {
+ __ mov(c_rarg0, src);
+ __ mov(c_rarg1, count);
+ }
+
+ __ call_VM_leaf(ZBarrierSetRuntime::load_barrier_on_oop_array_addr(), 2);
+
+ __ popa();
+ BLOCK_COMMENT("} ZBarrierSetAssembler::arraycopy_prologue");
+}
+
+void ZBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm,
+ Register jni_env,
+ Register robj,
+ Register tmp,
+ Label& slowpath) {
+ BLOCK_COMMENT("ZBarrierSetAssembler::try_resolve_jobject_in_native {");
+
+ assert_different_registers(jni_env, robj, tmp);
+
+ // Resolve jobject
+ BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, robj, tmp, slowpath);
+
+ // The Address offset is too large to direct load - -784. Our range is +127, -128.
+ __ mov(tmp, (long int)(in_bytes(ZThreadLocalData::address_bad_mask_offset()) -
+ in_bytes(JavaThread::jni_environment_offset())));
+ // Load address bad mask
+ __ add(tmp, jni_env, tmp);
+ __ ldr(tmp, Address(tmp));
+
+ // Check address bad mask
+ __ tst(robj, tmp);
+ __ br(Assembler::NE, slowpath);
+
+ BLOCK_COMMENT("} ZBarrierSetAssembler::try_resolve_jobject_in_native");
+}
+
+#ifdef COMPILER1
+
+#undef __
+#define __ ce->masm()->
+
+void ZBarrierSetAssembler::generate_c1_load_barrier_test(LIR_Assembler* ce,
+ LIR_Opr ref) const {
+ assert_different_registers(rheapbase, rthread, ref->as_register());
+
+ __ ldr(rheapbase, address_bad_mask_from_thread(rthread));
+ __ tst(ref->as_register(), rheapbase);
+}
+
+void ZBarrierSetAssembler::generate_c1_load_barrier_stub(LIR_Assembler* ce,
+ ZLoadBarrierStubC1* stub) const {
+ // Stub entry
+ __ bind(*stub->entry());
+
+ Register ref = stub->ref()->as_register();
+ Register ref_addr = noreg;
+ Register tmp = noreg;
+
+ if (stub->tmp()->is_valid()) {
+ // Load address into tmp register
+ ce->leal(stub->ref_addr(), stub->tmp());
+ ref_addr = tmp = stub->tmp()->as_pointer_register();
+ } else {
+ // Address already in register
+ ref_addr = stub->ref_addr()->as_address_ptr()->base()->as_pointer_register();
+ }
+
+ assert_different_registers(ref, ref_addr, noreg);
+
+ // Save r0 unless it is the result or tmp register
+ // Set up SP to accomodate parameters and maybe r0..
+ if (ref != r0 && tmp != r0) {
+ __ sub(sp, sp, 32);
+ __ str(r0, Address(sp, 16));
+ } else {
+ __ sub(sp, sp, 16);
+ }
+
+ // Setup arguments and call runtime stub
+ ce->store_parameter(ref_addr, 1);
+ ce->store_parameter(ref, 0);
+
+ __ far_call(stub->runtime_stub());
+
+ // Verify result
+ __ verify_oop(r0, "Bad oop");
+
+ // Move result into place
+ if (ref != r0) {
+ __ mov(ref, r0);
+ }
+
+ // Restore r0 unless it is the result or tmp register
+ if (ref != r0 && tmp != r0) {
+ __ ldr(r0, Address(sp, 16));
+ __ add(sp, sp, 32);
+ } else {
+ __ add(sp, sp, 16);
+ }
+
+ // Stub exit
+ __ b(*stub->continuation());
+}
+
+#undef __
+#define __ sasm->
+
+void ZBarrierSetAssembler::generate_c1_load_barrier_runtime_stub(StubAssembler* sasm,
+ DecoratorSet decorators) const {
+ __ prologue("zgc_load_barrier stub", false);
+
+ // We don't use push/pop_clobbered_registers() - we need to pull out the result from r0.
+ for (int i = 0; i < 32; i +=2) {
+ __ stpd(as_FloatRegister(i), as_FloatRegister(i+1), Address(__ pre(sp,-16)));
+ }
+
+ RegSet saveRegs = RegSet::range(r0,r28) - RegSet::of(r0);
+ __ push(saveRegs, sp);
+
+ // Setup arguments
+ __ load_parameter(0, c_rarg0);
+ __ load_parameter(1, c_rarg1);
+
+ __ call_VM_leaf(ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr(decorators), 2);
+
+ __ pop(saveRegs, sp);
+
+ for (int i = 30; i >0; i -=2) {
+ __ ldpd(as_FloatRegister(i), as_FloatRegister(i+1), Address(__ post(sp, 16)));
+ }
+
+ __ epilogue();
+}
+#endif // COMPILER1
+
+#undef __
+#define __ cgen->assembler()->
+
+// Generates a register specific stub for calling
+// ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded() or
+// ZBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded().
+//
+// The raddr register serves as both input and output for this stub. When the stub is
+// called the raddr register contains the object field address (oop*) where the bad oop
+// was loaded from, which caused the slow path to be taken. On return from the stub the
+// raddr register contains the good/healed oop returned from
+// ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded() or
+// ZBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded().
+static address generate_load_barrier_stub(StubCodeGenerator* cgen, Register raddr, DecoratorSet decorators) {
+ // Don't generate stub for invalid registers
+ if (raddr == zr || raddr == r29 || raddr == r30) {
+ return NULL;
+ }
+
+ // Create stub name
+ char name[64];
+ const bool weak = (decorators & ON_WEAK_OOP_REF) != 0;
+ os::snprintf(name, sizeof(name), "zgc_load_barrier%s_stub_%s", weak ? "_weak" : "", raddr->name());
+
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(cgen, "StubRoutines", os::strdup(name, mtCode));
+ address start = __ pc();
+
+ // Save live registers
+ RegSet savedRegs = RegSet::range(r0,r18) - RegSet::of(raddr);
+
+ __ enter();
+ __ push(savedRegs, sp);
+
+ // Setup arguments
+ if (raddr != c_rarg1) {
+ __ mov(c_rarg1, raddr);
+ }
+
+ __ ldr(c_rarg0, Address(raddr));
+
+ // Call barrier function
+ __ call_VM_leaf(ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr(decorators), c_rarg0, c_rarg1);
+
+ // Move result returned in r0 to raddr, if needed
+ if (raddr != r0) {
+ __ mov(raddr, r0);
+ }
+
+ __ pop(savedRegs, sp);
+ __ leave();
+ __ ret(lr);
+
+ return start;
+}
+
+#undef __
+
+static void barrier_stubs_init_inner(const char* label, const DecoratorSet decorators, address* stub) {
+ const int nregs = 28; // Exclude FP, XZR, SP from calculation.
+ const int code_size = nregs * 254; // Rough estimate of code size
+
+ ResourceMark rm;
+
+ CodeBuffer buf(BufferBlob::create(label, code_size));
+ StubCodeGenerator cgen(&buf);
+
+ for (int i = 0; i < nregs; i++) {
+ const Register reg = as_Register(i);
+ stub[i] = generate_load_barrier_stub(&cgen, reg, decorators);
+ }
+}
+
+void ZBarrierSetAssembler::barrier_stubs_init() {
+ barrier_stubs_init_inner("zgc_load_barrier_stubs", ON_STRONG_OOP_REF, _load_barrier_slow_stub);
+ barrier_stubs_init_inner("zgc_load_barrier_weak_stubs", ON_WEAK_OOP_REF, _load_barrier_weak_slow_stub);
+}
+
+address ZBarrierSetAssembler::load_barrier_slow_stub(Register reg) {
+ return _load_barrier_slow_stub[reg->encoding()];
+}
+
+address ZBarrierSetAssembler::load_barrier_weak_slow_stub(Register reg) {
+ return _load_barrier_weak_slow_stub[reg->encoding()];
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+#ifndef CPU_AARCH64_GC_Z_ZBARRIERSETASSEMBLER_AARCH64_HPP
+#define CPU_AARCH64_GC_Z_ZBARRIERSETASSEMBLER_AARCH64_HPP
+
+#ifdef COMPILER1
+class LIR_Assembler;
+class LIR_OprDesc;
+typedef LIR_OprDesc* LIR_Opr;
+class StubAssembler;
+class ZLoadBarrierStubC1;
+#endif // COMPILER1
+
+class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase {
+private:
+ address _load_barrier_slow_stub[RegisterImpl::number_of_registers];
+ address _load_barrier_weak_slow_stub[RegisterImpl::number_of_registers];
+
+public:
+ ZBarrierSetAssembler();
+
+ virtual void load_at(MacroAssembler* masm,
+ DecoratorSet decorators,
+ BasicType type,
+ Register dst,
+ Address src,
+ Register tmp1,
+ Register tmp_thread);
+
+#ifdef ASSERT
+ virtual void store_at(MacroAssembler* masm,
+ DecoratorSet decorators,
+ BasicType type,
+ Address dst,
+ Register val,
+ Register tmp1,
+ Register tmp2);
+#endif // ASSERT
+
+ virtual void arraycopy_prologue(MacroAssembler* masm,
+ DecoratorSet decorators,
+ bool is_oop,
+ Register src,
+ Register dst,
+ Register count,
+ RegSet saved_regs);
+
+ virtual void try_resolve_jobject_in_native(MacroAssembler* masm,
+ Register jni_env,
+ Register robj,
+ Register tmp,
+ Label& slowpath);
+
+#ifdef COMPILER1
+ void generate_c1_load_barrier_test(LIR_Assembler* ce,
+ LIR_Opr ref) const;
+
+ void generate_c1_load_barrier_stub(LIR_Assembler* ce,
+ ZLoadBarrierStubC1* stub) const;
+
+ void generate_c1_load_barrier_runtime_stub(StubAssembler* sasm,
+ DecoratorSet decorators) const;
+#endif // COMPILER1
+
+ virtual void barrier_stubs_init();
+
+ address load_barrier_slow_stub(Register reg);
+ address load_barrier_weak_slow_stub(Register reg);
+};
+
+#endif // CPU_AARCH64_GC_Z_ZBARRIERSETASSEMBLER_AARCH64_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,174 @@
+//
+// 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.
+//
+
+source_hpp %{
+
+#include "gc/z/c2/zBarrierSetC2.hpp"
+
+%}
+
+source %{
+
+#include "gc/z/zBarrierSetAssembler.hpp"
+
+static void z_load_barrier_slow_reg(MacroAssembler& _masm, Register dst,
+ Register base, int index, int scale,
+ int disp, bool weak) {
+ const address stub = weak ? ZBarrierSet::assembler()->load_barrier_weak_slow_stub(dst)
+ : ZBarrierSet::assembler()->load_barrier_slow_stub(dst);
+
+ if (index == -1) {
+ if (disp != 0) {
+ __ lea(dst, Address(base, disp));
+ } else {
+ __ mov(dst, base);
+ }
+ } else {
+ Register index_reg = as_Register(index);
+ if (disp == 0) {
+ __ lea(dst, Address(base, index_reg, Address::lsl(scale)));
+ } else {
+ __ lea(dst, Address(base, disp));
+ __ lea(dst, Address(dst, index_reg, Address::lsl(scale)));
+ }
+ }
+
+ __ far_call(RuntimeAddress(stub));
+}
+
+%}
+
+//
+// Execute ZGC load barrier (strong) slow path
+//
+instruct loadBarrierSlowReg(iRegP dst, memory mem, rFlagsReg cr,
+ vRegD_V0 v0, vRegD_V1 v1, vRegD_V2 v2, vRegD_V3 v3, vRegD_V4 v4,
+ vRegD_V5 v5, vRegD_V6 v6, vRegD_V7 v7, vRegD_V8 v8, vRegD_V9 v9,
+ vRegD_V10 v10, vRegD_V11 v11, vRegD_V12 v12, vRegD_V13 v13, vRegD_V14 v14,
+ vRegD_V15 v15, vRegD_V16 v16, vRegD_V17 v17, vRegD_V18 v18, vRegD_V19 v19,
+ vRegD_V20 v20, vRegD_V21 v21, vRegD_V22 v22, vRegD_V23 v23, vRegD_V24 v24,
+ vRegD_V25 v25, vRegD_V26 v26, vRegD_V27 v27, vRegD_V28 v28, vRegD_V29 v29,
+ vRegD_V30 v30, vRegD_V31 v31) %{
+ match(Set dst (LoadBarrierSlowReg mem));
+ predicate(!n->as_LoadBarrierSlowReg()->is_weak());
+
+ effect(DEF dst, KILL cr,
+ KILL v0, KILL v1, KILL v2, KILL v3, KILL v4, KILL v5, KILL v6, KILL v7,
+ KILL v8, KILL v9, KILL v10, KILL v11, KILL v12, KILL v13, KILL v14,
+ KILL v15, KILL v16, KILL v17, KILL v18, KILL v19, KILL v20, KILL v21,
+ KILL v22, KILL v23, KILL v24, KILL v25, KILL v26, KILL v27, KILL v28,
+ KILL v29, KILL v30, KILL v31);
+
+ format %{"LoadBarrierSlowReg $dst, $mem" %}
+ ins_encode %{
+ z_load_barrier_slow_reg(_masm, $dst$$Register, $mem$$base$$Register,
+ $mem$$index, $mem$$scale, $mem$$disp, false);
+ %}
+ ins_pipe(pipe_slow);
+%}
+
+//
+// Execute ZGC load barrier (weak) slow path
+//
+instruct loadBarrierWeakSlowReg(iRegP dst, memory mem, rFlagsReg cr,
+ vRegD_V0 v0, vRegD_V1 v1, vRegD_V2 v2, vRegD_V3 v3, vRegD_V4 v4,
+ vRegD_V5 v5, vRegD_V6 v6, vRegD_V7 v7, vRegD_V8 v8, vRegD_V9 v9,
+ vRegD_V10 v10, vRegD_V11 v11, vRegD_V12 v12, vRegD_V13 v13, vRegD_V14 v14,
+ vRegD_V15 v15, vRegD_V16 v16, vRegD_V17 v17, vRegD_V18 v18, vRegD_V19 v19,
+ vRegD_V20 v20, vRegD_V21 v21, vRegD_V22 v22, vRegD_V23 v23, vRegD_V24 v24,
+ vRegD_V25 v25, vRegD_V26 v26, vRegD_V27 v27, vRegD_V28 v28, vRegD_V29 v29,
+ vRegD_V30 v30, vRegD_V31 v31) %{
+ match(Set dst (LoadBarrierSlowReg mem));
+ predicate(n->as_LoadBarrierSlowReg()->is_weak());
+
+ effect(DEF dst, KILL cr,
+ KILL v0, KILL v1, KILL v2, KILL v3, KILL v4, KILL v5, KILL v6, KILL v7,
+ KILL v8, KILL v9, KILL v10, KILL v11, KILL v12, KILL v13, KILL v14,
+ KILL v15, KILL v16, KILL v17, KILL v18, KILL v19, KILL v20, KILL v21,
+ KILL v22, KILL v23, KILL v24, KILL v25, KILL v26, KILL v27, KILL v28,
+ KILL v29, KILL v30, KILL v31);
+
+ format %{"LoadBarrierWeakSlowReg $dst, $mem" %}
+ ins_encode %{
+ z_load_barrier_slow_reg(_masm, $dst$$Register, $mem$$base$$Register,
+ $mem$$index, $mem$$scale, $mem$$disp, true);
+ %}
+ ins_pipe(pipe_slow);
+%}
+
+
+// Specialized versions of compareAndExchangeP that adds a keepalive that is consumed
+// but doesn't affect output.
+
+instruct z_compareAndExchangeP(iRegPNoSp res, indirect mem,
+ iRegP oldval, iRegP newval, iRegP keepalive,
+ rFlagsReg cr) %{
+ match(Set res (ZCompareAndExchangeP (Binary mem keepalive) (Binary oldval newval)));
+ ins_cost(2 * VOLATILE_REF_COST);
+ effect(TEMP_DEF res, KILL cr);
+ format %{
+ "cmpxchg $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval"
+ %}
+ ins_encode %{
+ __ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
+ Assembler::xword, /*acquire*/ false, /*release*/ true,
+ /*weak*/ false, $res$$Register);
+ %}
+ ins_pipe(pipe_slow);
+%}
+
+instruct z_compareAndSwapP(iRegINoSp res,
+ indirect mem,
+ iRegP oldval, iRegP newval, iRegP keepalive,
+ rFlagsReg cr) %{
+
+ match(Set res (ZCompareAndSwapP (Binary mem keepalive) (Binary oldval newval)));
+ match(Set res (ZWeakCompareAndSwapP (Binary mem keepalive) (Binary oldval newval)));
+
+ ins_cost(2 * VOLATILE_REF_COST);
+
+ effect(KILL cr);
+
+ format %{
+ "cmpxchg $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval"
+ "cset $res, EQ\t# $res <-- (EQ ? 1 : 0)"
+ %}
+
+ ins_encode(aarch64_enc_cmpxchg(mem, oldval, newval),
+ aarch64_enc_cset_eq(res));
+
+ ins_pipe(pipe_slow);
+%}
+
+
+instruct z_get_and_setP(indirect mem, iRegP newv, iRegPNoSp prev,
+ iRegP keepalive) %{
+ match(Set prev (ZGetAndSetP mem (Binary newv keepalive)));
+
+ ins_cost(2 * VOLATILE_REF_COST);
+ format %{ "atomic_xchg $prev, $newv, [$mem]" %}
+ ins_encode %{
+ __ atomic_xchg($prev$$Register, $newv$$Register, as_Register($mem$$base));
+ %}
+ ins_pipe(pipe_serial);
+%}
--- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -38,8 +38,6 @@
protected:
protected:
- using MacroAssembler::call_VM_leaf_base;
-
// Interpreter specific version of call_VM_base
using MacroAssembler::call_VM_leaf_base;
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -2681,7 +2681,7 @@
if ((offset & (size-1)) && offset >= (1<<8)) {
add(tmp, base, offset & ((1<<12)-1));
base = tmp;
- offset &= -1<<12;
+ offset &= -1u<<12;
}
if (offset >= (1<<12) * size) {
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64_log.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64_log.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -286,7 +286,7 @@
frecpe(vtmp5, vtmp5, S); // vtmp5 ~= 1/vtmp5
lsr(tmp2, rscratch1, 48);
movz(tmp4, 0x77f0, 48);
- fmovd(vtmp4, 1.0d);
+ fmovd(vtmp4, 1.0);
movz(tmp1, INF_OR_NAN_PREFIX, 48);
bfm(tmp4, rscratch1, 0, 51); // tmp4 = 0x77F0 << 48 | mantissa(X)
// vtmp1 = AS_DOUBLE_BITS(0x77F0 << 48 | mantissa(X)) == mx
@@ -358,7 +358,7 @@
br(GE, DONE);
cmp(rscratch1, tmp2);
br(NE, CHECKED_CORNER_CASES);
- fmovd(v0, 0.0d);
+ fmovd(v0, 0.0);
}
bind(DONE);
ret(lr);
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64_trig.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64_trig.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -381,11 +381,11 @@
}
block_comment("nx calculation with unrolled while(tx[nx-1]==zeroA) nx--;"); {
- fcmpd(v26, 0.0d); // if NE then jx == 2. else it's 1 or 0
+ fcmpd(v26, 0.0); // if NE then jx == 2. else it's 1 or 0
add(iqBase, sp, 480); // base of iq[]
fmuld(v3, v26, v10);
br(NE, NX_SET);
- fcmpd(v7, 0.0d); // v7 == 0 => jx = 0. Else jx = 1
+ fcmpd(v7, 0.0); // v7 == 0 => jx = 0. Else jx = 1
csetw(jx, NE);
}
bind(NX_SET);
@@ -696,7 +696,7 @@
cmpw(jv, zr);
addw(tmp4, jx, 4); // tmp4 = m = jx + jk = jx + 4. jx is in {0,1,2} so m is in [4,5,6]
cselw(jv, jv, zr, GE);
- fmovd(v26, 0.0d);
+ fmovd(v26, 0.0);
addw(tmp5, jv, 1); // jv+1
subsw(j, jv, jx);
add(qBase, sp, 320); // base of q[]
@@ -819,8 +819,8 @@
movw(jz, 4);
fmovd(v17, i); // v17 = twon24
fmovd(v30, tmp5); // 2^q0
- fmovd(v21, 0.125d);
- fmovd(v20, 8.0d);
+ fmovd(v21, 0.125);
+ fmovd(v20, 8.0);
fmovd(v22, tmp4); // 2^-q0
block_comment("recompute loop"); {
@@ -877,7 +877,7 @@
lsr(ih, tmp2, 23); // ih = iq[z-1] >> 23
b(Q0_ZERO_CMP_DONE);
bind(Q0_ZERO_CMP_LT);
- fmovd(v4, 0.5d);
+ fmovd(v4, 0.5);
fcmpd(v18, v4);
cselw(ih, zr, ih, LT); // if (z<0.5) ih = 0
}
@@ -924,7 +924,7 @@
br(NE, IH_HANDLED);
block_comment("if(ih==2) {"); {
- fmovd(v25, 1.0d);
+ fmovd(v25, 1.0);
fsubd(v18, v25, v18); // z = one - z;
cbzw(rscratch2, IH_HANDLED);
fsubd(v18, v18, v30); // z -= scalbnA(one,q0);
@@ -932,7 +932,7 @@
}
bind(IH_HANDLED);
// check if recomputation is needed
- fcmpd(v18, 0.0d);
+ fcmpd(v18, 0.0);
br(NE, RECOMP_CHECK_DONE_NOT_ZERO);
block_comment("if(z==zeroB) {"); {
@@ -994,7 +994,7 @@
}
bind(RECOMP_CHECK_DONE);
// chop off zero terms
- fcmpd(v18, 0.0d);
+ fcmpd(v18, 0.0);
br(EQ, Z_IS_ZERO);
block_comment("else block of if(z==0.0) {"); {
@@ -1053,7 +1053,7 @@
movw(tmp2, zr); // tmp2 will keep jz - i == 0 at start
bind(COMP_FOR);
// for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k];
- fmovd(v30, 0.0d);
+ fmovd(v30, 0.0);
add(tmp5, qBase, i, LSL, 3); // address of q[i+k] for k==0
movw(tmp3, 4);
movw(tmp4, zr); // used as k
@@ -1081,7 +1081,7 @@
// remember prec == 2
block_comment("for (i=jz;i>=0;i--) fw += fq[i];"); {
- fmovd(v4, 0.0d);
+ fmovd(v4, 0.0);
mov(i, jz);
bind(FW_FOR1);
ldrd(v1, Address(rscratch2, i, Address::lsl(3)));
@@ -1319,7 +1319,7 @@
ld1(C1, C2, C3, C4, T1D, Address(rscratch2)); // load C1..C3\4
block_comment("calculate r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6)))))"); {
fmaddd(r, z, C6, C5);
- fmovd(half, 0.5d);
+ fmovd(half, 0.5);
fmaddd(r, z, r, C4);
fmuld(y, x, y);
fmaddd(r, z, r, C3);
@@ -1329,7 +1329,7 @@
fmaddd(r, z, r, C1); // r = C1+z(C2+z(C4+z(C5+z*C6)))
}
// need to multiply r by z to have "final" r value
- fmovd(one, 1.0d);
+ fmovd(one, 1.0);
cmp(ix, rscratch1);
br(GT, IX_IS_LARGE);
block_comment("if(ix < 0x3FD33333) return one - (0.5*z - (z*r - x*y))"); {
@@ -1352,7 +1352,7 @@
b(QX_SET);
bind(SET_QX_CONST);
block_comment("if(ix > 0x3fe90000) qx = 0.28125;"); {
- fmovd(qx, 0.28125d);
+ fmovd(qx, 0.28125);
}
bind(QX_SET);
fnmsub(C6, x, r, y); // z*r - xy
@@ -1443,7 +1443,7 @@
block_comment("kernel_sin/kernel_cos: if(ix<0x3e400000) {<fast return>}"); {
bind(TINY_X);
if (isCos) {
- fmovd(v0, 1.0d);
+ fmovd(v0, 1.0);
}
ret(lr);
}
--- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -46,6 +46,9 @@
#ifdef COMPILER2
#include "opto/runtime.hpp"
#endif
+#if INCLUDE_ZGC
+#include "gc/z/zThreadLocalData.hpp"
+#endif
#ifdef BUILTIN_SIM
#include "../../../../../../simulator/simulator.hpp"
@@ -580,6 +583,16 @@
// make sure object is 'reasonable'
__ cbz(r0, exit); // if obj is NULL it is OK
+#if INCLUDE_ZGC
+ if (UseZGC) {
+ // Check if mask is good.
+ // verifies that ZAddressBadMask & r0 == 0
+ __ ldr(c_rarg3, Address(rthread, ZThreadLocalData::address_bad_mask_offset()));
+ __ andr(c_rarg2, r0, c_rarg3);
+ __ cbnz(c_rarg2, error);
+ }
+#endif
+
// Check if the oop is in the right area of memory
__ mov(c_rarg3, (intptr_t) Universe::verify_oop_mask());
__ andr(c_rarg2, r0, c_rarg3);
--- a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -177,7 +177,7 @@
if (FILE *f = fopen("/proc/cpuinfo", "r")) {
char buf[128], *p;
while (fgets(buf, sizeof (buf), f) != NULL) {
- if (p = strchr(buf, ':')) {
+ if ((p = strchr(buf, ':')) != NULL) {
long v = strtol(p+1, NULL, 0);
if (strncmp(buf, "CPU implementer", sizeof "CPU implementer" - 1) == 0) {
_cpu = v;
--- a/src/hotspot/os/linux/perfMemory_linux.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/os/linux/perfMemory_linux.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -661,7 +661,7 @@
if (fp) {
int pid, nspid;
int ret;
- while (!feof(fp)) {
+ while (!feof(fp) && !ferror(fp)) {
ret = fscanf(fp, "NSpid: %d %d", &pid, &nspid);
if (ret == 1) {
break;
--- a/src/hotspot/os_cpu/linux_aarch64/atomic_linux_aarch64.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/os_cpu/linux_aarch64/atomic_linux_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -40,7 +40,9 @@
{
template<typename I, typename D>
D add_and_fetch(I add_value, D volatile* dest, atomic_memory_order order) const {
- return __sync_add_and_fetch(dest, add_value);
+ D res = __atomic_add_fetch(dest, add_value, __ATOMIC_RELEASE);
+ FULL_MEM_BARRIER;
+ return res;
}
};
--- a/src/hotspot/os_cpu/linux_aarch64/copy_linux_aarch64.s Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/os_cpu/linux_aarch64/copy_linux_aarch64.s Fri Jun 21 09:05:45 2019 -0700
@@ -159,7 +159,7 @@
blo bwd_copy_drain
bwd_copy_again:
- prfm pldl1keep, [s, #-256]
+ prfum pldl1keep, [s, #-256]
stp t0, t1, [d, #-16]
ldp t0, t1, [s, #-16]
stp t2, t3, [d, #-32]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zArguments_linux_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2018, 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 "precompiled.hpp"
+#include "gc/z/zArguments.hpp"
+#include "runtime/globals.hpp"
+#include "runtime/globals_extension.hpp"
+#include "utilities/debug.hpp"
+
+void ZArguments::initialize_platform() {
+ // Disable class unloading - we don't support concurrent class unloading yet.
+ FLAG_SET_DEFAULT(ClassUnloading, false);
+ FLAG_SET_DEFAULT(ClassUnloadingWithConcurrentMark, false);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,590 @@
+/*
+ * 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
+ * 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 "precompiled.hpp"
+#include "gc/z/zArray.inline.hpp"
+#include "gc/z/zBackingFile_linux_aarch64.hpp"
+#include "gc/z/zBackingPath_linux_aarch64.hpp"
+#include "gc/z/zErrno.hpp"
+#include "gc/z/zGlobals.hpp"
+#include "gc/z/zLargePages.inline.hpp"
+#include "logging/log.hpp"
+#include "runtime/init.hpp"
+#include "runtime/os.hpp"
+#include "utilities/align.hpp"
+#include "utilities/debug.hpp"
+
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+//
+// Support for building on older Linux systems
+//
+
+// System calls
+#ifndef SYS_fallocate
+#define SYS_fallocate 47
+#endif
+#ifndef SYS_memfd_create
+#define SYS_memfd_create 279
+#endif
+
+// memfd_create(2) flags
+#ifndef MFD_CLOEXEC
+#define MFD_CLOEXEC 0x0001U
+#endif
+#ifndef MFD_HUGETLB
+#define MFD_HUGETLB 0x0004U
+#endif
+
+// open(2) flags
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 02000000
+#endif
+#ifndef O_TMPFILE
+#define O_TMPFILE (020000000 | O_DIRECTORY)
+#endif
+
+// fallocate(2) flags
+#ifndef FALLOC_FL_KEEP_SIZE
+#define FALLOC_FL_KEEP_SIZE 0x01
+#endif
+#ifndef FALLOC_FL_PUNCH_HOLE
+#define FALLOC_FL_PUNCH_HOLE 0x02
+#endif
+
+// Filesystem types, see statfs(2)
+#ifndef TMPFS_MAGIC
+#define TMPFS_MAGIC 0x01021994
+#endif
+#ifndef HUGETLBFS_MAGIC
+#define HUGETLBFS_MAGIC 0x958458f6
+#endif
+
+// Filesystem names
+#define ZFILESYSTEM_TMPFS "tmpfs"
+#define ZFILESYSTEM_HUGETLBFS "hugetlbfs"
+
+// Sysfs file for transparent huge page on tmpfs
+#define ZFILENAME_SHMEM_ENABLED "/sys/kernel/mm/transparent_hugepage/shmem_enabled"
+
+// Java heap filename
+#define ZFILENAME_HEAP "java_heap"
+
+// Preferred tmpfs mount points, ordered by priority
+static const char* z_preferred_tmpfs_mountpoints[] = {
+ "/dev/shm",
+ "/run/shm",
+ NULL
+};
+
+// Preferred hugetlbfs mount points, ordered by priority
+static const char* z_preferred_hugetlbfs_mountpoints[] = {
+ "/dev/hugepages",
+ "/hugepages",
+ NULL
+};
+
+static int z_fallocate_hugetlbfs_attempts = 3;
+static bool z_fallocate_supported = true;
+
+static int z_fallocate(int fd, int mode, size_t offset, size_t length) {
+ return syscall(SYS_fallocate, fd, mode, offset, length);
+}
+
+static int z_memfd_create(const char *name, unsigned int flags) {
+ return syscall(SYS_memfd_create, name, flags);
+}
+
+ZBackingFile::ZBackingFile() :
+ _fd(-1),
+ _size(0),
+ _filesystem(0),
+ _block_size(0),
+ _available(0),
+ _initialized(false) {
+
+ // Create backing file
+ _fd = create_fd(ZFILENAME_HEAP);
+ if (_fd == -1) {
+ return;
+ }
+
+ // Get filesystem statistics
+ struct statfs buf;
+ if (fstatfs(_fd, &buf) == -1) {
+ ZErrno err;
+ log_error(gc)("Failed to determine filesystem type for backing file (%s)", err.to_string());
+ return;
+ }
+
+ _filesystem = buf.f_type;
+ _block_size = buf.f_bsize;
+ _available = buf.f_bavail * _block_size;
+
+ // Make sure we're on a supported filesystem
+ if (!is_tmpfs() && !is_hugetlbfs()) {
+ log_error(gc)("Backing file must be located on a %s or a %s filesystem",
+ ZFILESYSTEM_TMPFS, ZFILESYSTEM_HUGETLBFS);
+ return;
+ }
+
+ // Make sure the filesystem type matches requested large page type
+ if (ZLargePages::is_transparent() && !is_tmpfs()) {
+ log_error(gc)("-XX:+UseTransparentHugePages can only be enable when using a %s filesystem",
+ ZFILESYSTEM_TMPFS);
+ return;
+ }
+
+ if (ZLargePages::is_transparent() && !tmpfs_supports_transparent_huge_pages()) {
+ log_error(gc)("-XX:+UseTransparentHugePages on a %s filesystem not supported by kernel",
+ ZFILESYSTEM_TMPFS);
+ return;
+ }
+
+ if (ZLargePages::is_explicit() && !is_hugetlbfs()) {
+ log_error(gc)("-XX:+UseLargePages (without -XX:+UseTransparentHugePages) can only be enabled "
+ "when using a %s filesystem", ZFILESYSTEM_HUGETLBFS);
+ return;
+ }
+
+ if (!ZLargePages::is_explicit() && is_hugetlbfs()) {
+ log_error(gc)("-XX:+UseLargePages must be enabled when using a %s filesystem",
+ ZFILESYSTEM_HUGETLBFS);
+ return;
+ }
+
+ const size_t expected_block_size = is_tmpfs() ? os::vm_page_size() : os::large_page_size();
+ if (expected_block_size != _block_size) {
+ log_error(gc)("%s filesystem has unexpected block size " SIZE_FORMAT " (expected " SIZE_FORMAT ")",
+ is_tmpfs() ? ZFILESYSTEM_TMPFS : ZFILESYSTEM_HUGETLBFS, _block_size, expected_block_size);
+ return;
+ }
+
+ // Successfully initialized
+ _initialized = true;
+}
+
+int ZBackingFile::create_mem_fd(const char* name) const {
+ // Create file name
+ char filename[PATH_MAX];
+ snprintf(filename, sizeof(filename), "%s%s", name, ZLargePages::is_explicit() ? ".hugetlb" : "");
+
+ // Create file
+ const int extra_flags = ZLargePages::is_explicit() ? MFD_HUGETLB : 0;
+ const int fd = z_memfd_create(filename, MFD_CLOEXEC | extra_flags);
+ if (fd == -1) {
+ ZErrno err;
+ log_debug(gc, init)("Failed to create memfd file (%s)",
+ ((ZLargePages::is_explicit() && err == EINVAL) ? "Hugepages not supported" : err.to_string()));
+ return -1;
+ }
+
+ log_info(gc, init)("Heap backed by file: /memfd:%s", filename);
+
+ return fd;
+}
+
+int ZBackingFile::create_file_fd(const char* name) const {
+ const char* const filesystem = ZLargePages::is_explicit()
+ ? ZFILESYSTEM_HUGETLBFS
+ : ZFILESYSTEM_TMPFS;
+ const char** const preferred_mountpoints = ZLargePages::is_explicit()
+ ? z_preferred_hugetlbfs_mountpoints
+ : z_preferred_tmpfs_mountpoints;
+
+ // Find mountpoint
+ ZBackingPath path(filesystem, preferred_mountpoints);
+ if (path.get() == NULL) {
+ log_error(gc)("Use -XX:ZPath to specify the path to a %s filesystem", filesystem);
+ return -1;
+ }
+
+ // Try to create an anonymous file using the O_TMPFILE flag. Note that this
+ // flag requires kernel >= 3.11. If this fails we fall back to open/unlink.
+ const int fd_anon = os::open(path.get(), O_TMPFILE|O_EXCL|O_RDWR|O_CLOEXEC, S_IRUSR|S_IWUSR);
+ if (fd_anon == -1) {
+ ZErrno err;
+ log_debug(gc, init)("Failed to create anonymous file in %s (%s)", path.get(),
+ (err == EINVAL ? "Not supported" : err.to_string()));
+ } else {
+ // Get inode number for anonymous file
+ struct stat stat_buf;
+ if (fstat(fd_anon, &stat_buf) == -1) {
+ ZErrno err;
+ log_error(gc)("Failed to determine inode number for anonymous file (%s)", err.to_string());
+ return -1;
+ }
+
+ log_info(gc, init)("Heap backed by file: %s/#" UINT64_FORMAT, path.get(), (uint64_t)stat_buf.st_ino);
+
+ return fd_anon;
+ }
+
+ log_debug(gc, init)("Falling back to open/unlink");
+
+ // Create file name
+ char filename[PATH_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s.%d", path.get(), name, os::current_process_id());
+
+ // Create file
+ const int fd = os::open(filename, O_CREAT|O_EXCL|O_RDWR|O_CLOEXEC, S_IRUSR|S_IWUSR);
+ if (fd == -1) {
+ ZErrno err;
+ log_error(gc)("Failed to create file %s (%s)", filename, err.to_string());
+ return -1;
+ }
+
+ // Unlink file
+ if (unlink(filename) == -1) {
+ ZErrno err;
+ log_error(gc)("Failed to unlink file %s (%s)", filename, err.to_string());
+ return -1;
+ }
+
+ log_info(gc, init)("Heap backed by file: %s", filename);
+
+ return fd;
+}
+
+int ZBackingFile::create_fd(const char* name) const {
+ if (ZPath == NULL) {
+ // If the path is not explicitly specified, then we first try to create a memfd file
+ // instead of looking for a tmpfd/hugetlbfs mount point. Note that memfd_create() might
+ // not be supported at all (requires kernel >= 3.17), or it might not support large
+ // pages (requires kernel >= 4.14). If memfd_create() fails, then we try to create a
+ // file on an accessible tmpfs or hugetlbfs mount point.
+ const int fd = create_mem_fd(name);
+ if (fd != -1) {
+ return fd;
+ }
+
+ log_debug(gc, init)("Falling back to searching for an accessible mount point");
+ }
+
+ return create_file_fd(name);
+}
+
+bool ZBackingFile::is_initialized() const {
+ return _initialized;
+}
+
+int ZBackingFile::fd() const {
+ return _fd;
+}
+
+size_t ZBackingFile::size() const {
+ return _size;
+}
+
+size_t ZBackingFile::available() const {
+ return _available;
+}
+
+bool ZBackingFile::is_tmpfs() const {
+ return _filesystem == TMPFS_MAGIC;
+}
+
+bool ZBackingFile::is_hugetlbfs() const {
+ return _filesystem == HUGETLBFS_MAGIC;
+}
+
+bool ZBackingFile::tmpfs_supports_transparent_huge_pages() const {
+ // If the shmem_enabled file exists and is readable then we
+ // know the kernel supports transparent huge pages for tmpfs.
+ return access(ZFILENAME_SHMEM_ENABLED, R_OK) == 0;
+}
+
+ZErrno ZBackingFile::fallocate_compat_ftruncate(size_t size) const {
+ while (ftruncate(_fd, size) == -1) {
+ if (errno != EINTR) {
+ // Failed
+ return errno;
+ }
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::fallocate_compat_mmap(size_t offset, size_t length, bool touch) const {
+ // On hugetlbfs, mapping a file segment will fail immediately, without
+ // the need to touch the mapped pages first, if there aren't enough huge
+ // pages available to back the mapping.
+ void* const addr = mmap(0, length, PROT_READ|PROT_WRITE, MAP_SHARED, _fd, offset);
+ if (addr == MAP_FAILED) {
+ // Failed
+ return errno;
+ }
+
+ // Once mapped, the huge pages are only reserved. We need to touch them
+ // to associate them with the file segment. Note that we can not punch
+ // hole in file segments which only have reserved pages.
+ if (touch) {
+ char* const start = (char*)addr;
+ char* const end = start + length;
+ os::pretouch_memory(start, end, _block_size);
+ }
+
+ // Unmap again. From now on, the huge pages that were mapped are allocated
+ // to this file. There's no risk in getting SIGBUS when touching them.
+ if (munmap(addr, length) == -1) {
+ // Failed
+ return errno;
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::fallocate_compat_pwrite(size_t offset, size_t length) const {
+ uint8_t data = 0;
+
+ // Allocate backing memory by writing to each block
+ for (size_t pos = offset; pos < offset + length; pos += _block_size) {
+ if (pwrite(_fd, &data, sizeof(data), pos) == -1) {
+ // Failed
+ return errno;
+ }
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::fallocate_fill_hole_compat(size_t offset, size_t length) {
+ // fallocate(2) is only supported by tmpfs since Linux 3.5, and by hugetlbfs
+ // since Linux 4.3. When fallocate(2) is not supported we emulate it using
+ // ftruncate/pwrite (for tmpfs) or ftruncate/mmap/munmap (for hugetlbfs).
+
+ const size_t end = offset + length;
+ if (end > _size) {
+ // Increase file size
+ const ZErrno err = fallocate_compat_ftruncate(end);
+ if (err) {
+ // Failed
+ return err;
+ }
+ }
+
+ // Allocate backing memory
+ const ZErrno err = is_hugetlbfs() ? fallocate_compat_mmap(offset, length, false /* touch */)
+ : fallocate_compat_pwrite(offset, length);
+ if (err) {
+ if (end > _size) {
+ // Restore file size
+ fallocate_compat_ftruncate(_size);
+ }
+
+ // Failed
+ return err;
+ }
+
+ if (end > _size) {
+ // Record new file size
+ _size = end;
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::fallocate_fill_hole_syscall(size_t offset, size_t length) {
+ const int mode = 0; // Allocate
+ const int res = z_fallocate(_fd, mode, offset, length);
+ if (res == -1) {
+ // Failed
+ return errno;
+ }
+
+ const size_t end = offset + length;
+ if (end > _size) {
+ // Record new file size
+ _size = end;
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::fallocate_fill_hole(size_t offset, size_t length) {
+ // Using compat mode is more efficient when allocating space on hugetlbfs.
+ // Note that allocating huge pages this way will only reserve them, and not
+ // associate them with segments of the file. We must guarantee that we at
+ // some point touch these segments, otherwise we can not punch hole in them.
+ if (z_fallocate_supported && !is_hugetlbfs()) {
+ const ZErrno err = fallocate_fill_hole_syscall(offset, length);
+ if (!err) {
+ // Success
+ return 0;
+ }
+
+ if (err != ENOSYS && err != EOPNOTSUPP) {
+ // Failed
+ return err;
+ }
+
+ // Not supported
+ log_debug(gc)("Falling back to fallocate() compatibility mode");
+ z_fallocate_supported = false;
+ }
+
+ return fallocate_fill_hole_compat(offset, length);
+}
+
+ZErrno ZBackingFile::fallocate_punch_hole(size_t offset, size_t length) {
+ if (is_hugetlbfs()) {
+ // We can only punch hole in pages that have been touched. Non-touched
+ // pages are only reserved, and not associated with any specific file
+ // segment. We don't know which pages have been previously touched, so
+ // we always touch them here to guarantee that we can punch hole.
+ const ZErrno err = fallocate_compat_mmap(offset, length, true /* touch */);
+ if (err) {
+ // Failed
+ return err;
+ }
+ }
+
+ const int mode = FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE;
+ if (z_fallocate(_fd, mode, offset, length) == -1) {
+ // Failed
+ return errno;
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::split_and_fallocate(bool punch_hole, size_t offset, size_t length) {
+ // Try first half
+ const size_t offset0 = offset;
+ const size_t length0 = align_up(length / 2, _block_size);
+ const ZErrno err0 = fallocate(punch_hole, offset0, length0);
+ if (err0) {
+ return err0;
+ }
+
+ // Try second half
+ const size_t offset1 = offset0 + length0;
+ const size_t length1 = length - length0;
+ const ZErrno err1 = fallocate(punch_hole, offset1, length1);
+ if (err1) {
+ return err1;
+ }
+
+ // Success
+ return 0;
+}
+
+ZErrno ZBackingFile::fallocate(bool punch_hole, size_t offset, size_t length) {
+ assert(is_aligned(offset, _block_size), "Invalid offset");
+ assert(is_aligned(length, _block_size), "Invalid length");
+
+ const ZErrno err = punch_hole ? fallocate_punch_hole(offset, length) : fallocate_fill_hole(offset, length);
+ if (err == EINTR && length > _block_size) {
+ // Calling fallocate(2) with a large length can take a long time to
+ // complete. When running profilers, such as VTune, this syscall will
+ // be constantly interrupted by signals. Expanding the file in smaller
+ // steps avoids this problem.
+ return split_and_fallocate(punch_hole, offset, length);
+ }
+
+ return err;
+}
+
+bool ZBackingFile::commit_inner(size_t offset, size_t length) {
+ log_trace(gc, heap)("Committing memory: " SIZE_FORMAT "M-" SIZE_FORMAT "M (" SIZE_FORMAT "M)",
+ offset / M, (offset + length) / M, length / M);
+
+retry:
+ const ZErrno err = fallocate(false /* punch_hole */, offset, length);
+ if (err) {
+ if (err == ENOSPC && !is_init_completed() && is_hugetlbfs() && z_fallocate_hugetlbfs_attempts-- > 0) {
+ // If we fail to allocate during initialization, due to lack of space on
+ // the hugetlbfs filesystem, then we wait and retry a few times before
+ // giving up. Otherwise there is a risk that running JVMs back-to-back
+ // will fail, since there is a delay between process termination and the
+ // huge pages owned by that process being returned to the huge page pool
+ // and made available for new allocations.
+ log_debug(gc, init)("Failed to commit memory (%s), retrying", err.to_string());
+
+ // Wait and retry in one second, in the hope that huge pages will be
+ // available by then.
+ sleep(1);
+ goto retry;
+ }
+
+ // Failed
+ log_error(gc)("Failed to commit memory (%s)", err.to_string());
+ return false;
+ }
+
+ // Success
+ return true;
+}
+
+size_t ZBackingFile::commit(size_t offset, size_t length) {
+ // Try to commit the whole region
+ if (commit_inner(offset, length)) {
+ // Success
+ return length;
+ }
+
+ // Failed, try to commit as much as possible
+ size_t start = offset;
+ size_t end = offset + length;
+
+ for (;;) {
+ length = align_down((end - start) / 2, ZGranuleSize);
+ if (length < ZGranuleSize) {
+ // Done, don't commit more
+ return start - offset;
+ }
+
+ if (commit_inner(start, length)) {
+ // Success, try commit more
+ start += length;
+ } else {
+ // Failed, try commit less
+ end -= length;
+ }
+ }
+}
+
+size_t ZBackingFile::uncommit(size_t offset, size_t length) {
+ log_trace(gc, heap)("Uncommitting memory: " SIZE_FORMAT "M-" SIZE_FORMAT "M (" SIZE_FORMAT "M)",
+ offset / M, (offset + length) / M, length / M);
+
+ const ZErrno err = fallocate(true /* punch_hole */, offset, length);
+ if (err) {
+ log_error(gc)("Failed to uncommit memory (%s)", err.to_string());
+ return 0;
+ }
+
+ return length;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,73 @@
+/*
+ * 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
+ * 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.
+ */
+
+#ifndef OS_CPU_LINUX_AARCH64_GC_Z_ZBACKINGFILE_LINUX_AARCH64_HPP
+#define OS_CPU_LINUX_AARCH64_GC_Z_ZBACKINGFILE_LINUX_AARCH64_HPP
+
+#include "memory/allocation.hpp"
+
+class ZErrno;
+
+class ZBackingFile {
+private:
+ int _fd;
+ size_t _size;
+ uint64_t _filesystem;
+ size_t _block_size;
+ size_t _available;
+ bool _initialized;
+
+ int create_mem_fd(const char* name) const;
+ int create_file_fd(const char* name) const;
+ int create_fd(const char* name) const;
+
+ bool is_tmpfs() const;
+ bool is_hugetlbfs() const;
+ bool tmpfs_supports_transparent_huge_pages() const;
+
+ ZErrno fallocate_compat_ftruncate(size_t size) const;
+ ZErrno fallocate_compat_mmap(size_t offset, size_t length, bool reserve_only) const;
+ ZErrno fallocate_compat_pwrite(size_t offset, size_t length) const;
+ ZErrno fallocate_fill_hole_compat(size_t offset, size_t length);
+ ZErrno fallocate_fill_hole_syscall(size_t offset, size_t length);
+ ZErrno fallocate_fill_hole(size_t offset, size_t length);
+ ZErrno fallocate_punch_hole(size_t offset, size_t length);
+ ZErrno split_and_fallocate(bool punch_hole, size_t offset, size_t length);
+ ZErrno fallocate(bool punch_hole, size_t offset, size_t length);
+
+ bool commit_inner(size_t offset, size_t length);
+
+public:
+ ZBackingFile();
+
+ bool is_initialized() const;
+
+ int fd() const;
+ size_t size() const;
+ size_t available() const;
+
+ size_t commit(size_t offset, size_t length);
+ size_t uncommit(size_t offset, size_t length);
+};
+
+#endif // OS_CPU_LINUX_AARCH64_GC_Z_ZBACKINGFILE_LINUX_AARCH64_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,149 @@
+/*
+ * 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
+ * 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 "precompiled.hpp"
+#include "gc/z/zArray.inline.hpp"
+#include "zBackingPath_linux_aarch64.hpp"
+#include "gc/z/zErrno.hpp"
+#include "logging/log.hpp"
+
+#include <stdio.h>
+#include <unistd.h>
+
+// Mount information, see proc(5) for more details.
+#define PROC_SELF_MOUNTINFO "/proc/self/mountinfo"
+
+ZBackingPath::ZBackingPath(const char* filesystem, const char** preferred_mountpoints) {
+ if (ZPath != NULL) {
+ // Use specified path
+ _path = strdup(ZPath);
+ } else {
+ // Find suitable path
+ _path = find_mountpoint(filesystem, preferred_mountpoints);
+ }
+}
+
+ZBackingPath::~ZBackingPath() {
+ free(_path);
+ _path = NULL;
+}
+
+char* ZBackingPath::get_mountpoint(const char* line, const char* filesystem) const {
+ char* line_mountpoint = NULL;
+ char* line_filesystem = NULL;
+
+ // Parse line and return a newly allocated string containing the mount point if
+ // the line contains a matching filesystem and the mount point is accessible by
+ // the current user.
+ if (sscanf(line, "%*u %*u %*u:%*u %*s %ms %*[^-]- %ms", &line_mountpoint, &line_filesystem) != 2 ||
+ strcmp(line_filesystem, filesystem) != 0 ||
+ access(line_mountpoint, R_OK|W_OK|X_OK) != 0) {
+ // Not a matching or accessible filesystem
+ free(line_mountpoint);
+ line_mountpoint = NULL;
+ }
+
+ free(line_filesystem);
+
+ return line_mountpoint;
+}
+
+void ZBackingPath::get_mountpoints(const char* filesystem, ZArray<char*>* mountpoints) const {
+ FILE* fd = fopen(PROC_SELF_MOUNTINFO, "r");
+ if (fd == NULL) {
+ ZErrno err;
+ log_error(gc)("Failed to open %s: %s", PROC_SELF_MOUNTINFO, err.to_string());
+ return;
+ }
+
+ char* line = NULL;
+ size_t length = 0;
+
+ while (getline(&line, &length, fd) != -1) {
+ char* const mountpoint = get_mountpoint(line, filesystem);
+ if (mountpoint != NULL) {
+ mountpoints->add(mountpoint);
+ }
+ }
+
+ free(line);
+ fclose(fd);
+}
+
+void ZBackingPath::free_mountpoints(ZArray<char*>* mountpoints) const {
+ ZArrayIterator<char*> iter(mountpoints);
+ for (char* mountpoint; iter.next(&mountpoint);) {
+ free(mountpoint);
+ }
+ mountpoints->clear();
+}
+
+char* ZBackingPath::find_preferred_mountpoint(const char* filesystem,
+ ZArray<char*>* mountpoints,
+ const char** preferred_mountpoints) const {
+ // Find preferred mount point
+ ZArrayIterator<char*> iter1(mountpoints);
+ for (char* mountpoint; iter1.next(&mountpoint);) {
+ for (const char** preferred = preferred_mountpoints; *preferred != NULL; preferred++) {
+ if (!strcmp(mountpoint, *preferred)) {
+ // Preferred mount point found
+ return strdup(mountpoint);
+ }
+ }
+ }
+
+ // Preferred mount point not found
+ log_error(gc)("More than one %s filesystem found:", filesystem);
+ ZArrayIterator<char*> iter2(mountpoints);
+ for (char* mountpoint; iter2.next(&mountpoint);) {
+ log_error(gc)(" %s", mountpoint);
+ }
+
+ return NULL;
+}
+
+char* ZBackingPath::find_mountpoint(const char* filesystem, const char** preferred_mountpoints) const {
+ char* path = NULL;
+ ZArray<char*> mountpoints;
+
+ get_mountpoints(filesystem, &mountpoints);
+
+ if (mountpoints.size() == 0) {
+ // No mount point found
+ log_error(gc)("Failed to find an accessible %s filesystem", filesystem);
+ } else if (mountpoints.size() == 1) {
+ // One mount point found
+ path = strdup(mountpoints.at(0));
+ } else {
+ // More than one mount point found
+ path = find_preferred_mountpoint(filesystem, &mountpoints, preferred_mountpoints);
+ }
+
+ free_mountpoints(&mountpoints);
+
+ return path;
+}
+
+const char* ZBackingPath::get() const {
+ return _path;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,52 @@
+/*
+ * 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
+ * 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.
+ */
+
+#ifndef OS_CPU_LINUX_AARCH64_GC_Z_ZBACKINGPATH_LINUX_AARCH64_HPP
+#define OS_CPU_LINUX_AARCH64_GC_Z_ZBACKINGPATH_LINUX_AARCH64_HPP
+
+#include "gc/z/zArray.hpp"
+#include "memory/allocation.hpp"
+
+class ZBackingPath : public StackObj {
+private:
+ char* _path;
+
+ char* get_mountpoint(const char* line,
+ const char* filesystem) const;
+ void get_mountpoints(const char* filesystem,
+ ZArray<char*>* mountpoints) const;
+ void free_mountpoints(ZArray<char*>* mountpoints) const;
+ char* find_preferred_mountpoint(const char* filesystem,
+ ZArray<char*>* mountpoints,
+ const char** preferred_mountpoints) const;
+ char* find_mountpoint(const char* filesystem,
+ const char** preferred_mountpoints) const;
+
+public:
+ ZBackingPath(const char* filesystem, const char** preferred_mountpoints);
+ ~ZBackingPath();
+
+ const char* get() const;
+};
+
+#endif // OS_CPU_LINUX_AARCH64_GC_Z_ZBACKINGPATH_LINUX_AARCH64_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,173 @@
+/*
+ * 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
+ * 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 "precompiled.hpp"
+#include "gc/z/zGlobals.hpp"
+#include "gc/z/zUtils.inline.hpp"
+#include "runtime/globals.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+//
+// The heap can have three different layouts, depending on the max heap size.
+//
+// Address Space & Pointer Layout 1
+// --------------------------------
+//
+// +--------------------------------+ 0x00007FFFFFFFFFFF (127TB)
+// . .
+// . .
+// . .
+// +--------------------------------+ 0x0000014000000000 (20TB)
+// | Remapped View |
+// +--------------------------------+ 0x0000010000000000 (16TB)
+// | (Reserved, but unused) |
+// +--------------------------------+ 0x00000c0000000000 (12TB)
+// | Marked1 View |
+// +--------------------------------+ 0x0000080000000000 (8TB)
+// | Marked0 View |
+// +--------------------------------+ 0x0000040000000000 (4TB)
+// . .
+// +--------------------------------+ 0x0000000000000000
+//
+// 6 4 4 4 4
+// 3 6 5 2 1 0
+// +--------------------+----+-----------------------------------------------+
+// |00000000 00000000 00|1111|11 11111111 11111111 11111111 11111111 11111111|
+// +--------------------+----+-----------------------------------------------+
+// | | |
+// | | * 41-0 Object Offset (42-bits, 4TB address space)
+// | |
+// | * 45-42 Metadata Bits (4-bits) 0001 = Marked0 (Address view 4-8TB)
+// | 0010 = Marked1 (Address view 8-12TB)
+// | 0100 = Remapped (Address view 16-20TB)
+// | 1000 = Finalizable (Address view N/A)
+// |
+// * 63-46 Fixed (18-bits, always zero)
+//
+//
+// Address Space & Pointer Layout 2
+// --------------------------------
+//
+// +--------------------------------+ 0x00007FFFFFFFFFFF (127TB)
+// . .
+// . .
+// . .
+// +--------------------------------+ 0x0000280000000000 (40TB)
+// | Remapped View |
+// +--------------------------------+ 0x0000200000000000 (32TB)
+// | (Reserved, but unused) |
+// +--------------------------------+ 0x0000180000000000 (24TB)
+// | Marked1 View |
+// +--------------------------------+ 0x0000100000000000 (16TB)
+// | Marked0 View |
+// +--------------------------------+ 0x0000080000000000 (8TB)
+// . .
+// +--------------------------------+ 0x0000000000000000
+//
+// 6 4 4 4 4
+// 3 7 6 3 2 0
+// +------------------+-----+------------------------------------------------+
+// |00000000 00000000 0|1111|111 11111111 11111111 11111111 11111111 11111111|
+// +-------------------+----+------------------------------------------------+
+// | | |
+// | | * 42-0 Object Offset (43-bits, 8TB address space)
+// | |
+// | * 46-43 Metadata Bits (4-bits) 0001 = Marked0 (Address view 8-16TB)
+// | 0010 = Marked1 (Address view 16-24TB)
+// | 0100 = Remapped (Address view 32-40TB)
+// | 1000 = Finalizable (Address view N/A)
+// |
+// * 63-47 Fixed (17-bits, always zero)
+//
+//
+// Address Space & Pointer Layout 3
+// --------------------------------
+//
+// +--------------------------------+ 0x00007FFFFFFFFFFF (127TB)
+// . .
+// . .
+// . .
+// +--------------------------------+ 0x0000500000000000 (80TB)
+// | Remapped View |
+// +--------------------------------+ 0x0000400000000000 (64TB)
+// | (Reserved, but unused) |
+// +--------------------------------+ 0x0000300000000000 (48TB)
+// | Marked1 View |
+// +--------------------------------+ 0x0000200000000000 (32TB)
+// | Marked0 View |
+// +--------------------------------+ 0x0000100000000000 (16TB)
+// . .
+// +--------------------------------+ 0x0000000000000000
+//
+// 6 4 4 4 4
+// 3 8 7 4 3 0
+// +------------------+----+-------------------------------------------------+
+// |00000000 00000000 |1111|1111 11111111 11111111 11111111 11111111 11111111|
+// +------------------+----+-------------------------------------------------+
+// | | |
+// | | * 43-0 Object Offset (44-bits, 16TB address space)
+// | |
+// | * 47-44 Metadata Bits (4-bits) 0001 = Marked0 (Address view 16-32TB)
+// | 0010 = Marked1 (Address view 32-48TB)
+// | 0100 = Remapped (Address view 64-80TB)
+// | 1000 = Finalizable (Address view N/A)
+// |
+// * 63-48 Fixed (16-bits, always zero)
+//
+
+uintptr_t ZPlatformAddressSpaceStart() {
+ const uintptr_t first_heap_view_address = (uintptr_t)1 << (ZPlatformAddressMetadataShift() + 0);
+ const size_t min_address_offset = 0;
+ return first_heap_view_address + min_address_offset;
+}
+
+uintptr_t ZPlatformAddressSpaceEnd() {
+ const uintptr_t last_heap_view_address = (uintptr_t)1 << (ZPlatformAddressMetadataShift() + 2);
+ const size_t max_address_offset = (size_t)1 << ZPlatformAddressOffsetBits();
+ return last_heap_view_address + max_address_offset;
+}
+
+uintptr_t ZPlatformAddressReservedStart() {
+ return ZPlatformAddressSpaceStart();
+}
+
+uintptr_t ZPlatformAddressReservedEnd() {
+ return ZPlatformAddressSpaceEnd();
+}
+
+uintptr_t ZPlatformAddressBase() {
+ return 0;
+}
+
+size_t ZPlatformAddressOffsetBits() {
+ const size_t min_address_offset_bits = 42; // 4TB
+ const size_t max_address_offset_bits = 44; // 16TB
+ const size_t virtual_to_physical_ratio = 7; // 7:1
+ const size_t address_offset = ZUtils::round_up_power_of_2(MaxHeapSize * virtual_to_physical_ratio);
+ const size_t address_offset_bits = log2_intptr(address_offset);
+ return MIN2(MAX2(address_offset_bits, min_address_offset_bits), max_address_offset_bits);
+}
+
+size_t ZPlatformAddressMetadataShift() {
+ return ZPlatformAddressOffsetBits();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,51 @@
+/*
+ * 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
+ * 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.
+ */
+
+#ifndef OS_CPU_LINUX_AARCH64_GC_Z_ZGLOBALS_LINUX_AARCH64_HPP
+#define OS_CPU_LINUX_AARCH64_GC_Z_ZGLOBALS_LINUX_AARCH64_HPP
+
+//
+// Page Allocation Tiers
+// ---------------------
+//
+// Page Type Page Size Object Size Limit Object Alignment
+// ------------------------------------------------------------------
+// Small 2M <= 265K <MinObjAlignmentInBytes>
+// Medium 32M <= 4M 4K
+// Large X*M > 4M 2M
+// ------------------------------------------------------------------
+//
+const size_t ZPlatformGranuleSizeShift = 21; // 2MB
+const size_t ZPlatformMaxHeapSizeShift = 46; // 16TB
+const size_t ZPlatformNMethodDisarmedOffset = 4;
+const size_t ZPlatformCacheLineSize = 64;
+
+uintptr_t ZPlatformAddressSpaceStart();
+uintptr_t ZPlatformAddressSpaceEnd();
+uintptr_t ZPlatformAddressReservedStart();
+uintptr_t ZPlatformAddressReservedEnd();
+uintptr_t ZPlatformAddressBase();
+size_t ZPlatformAddressOffsetBits();
+size_t ZPlatformAddressMetadataShift();
+
+#endif // OS_CPU_LINUX_AARCH64_GC_Z_ZGLOBALS_LINUX_AARCH64_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,333 @@
+/*
+ * 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
+ * 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 "precompiled.hpp"
+#include "gc/z/zAddress.inline.hpp"
+#include "gc/z/zBackingFile_linux_aarch64.hpp"
+#include "gc/z/zErrno.hpp"
+#include "gc/z/zGlobals.hpp"
+#include "gc/z/zLargePages.inline.hpp"
+#include "gc/z/zMemory.hpp"
+#include "gc/z/zNUMA.hpp"
+#include "gc/z/zPhysicalMemory.inline.hpp"
+#include "gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp"
+#include "logging/log.hpp"
+#include "runtime/init.hpp"
+#include "runtime/os.hpp"
+#include "utilities/align.hpp"
+#include "utilities/debug.hpp"
+
+#include <stdio.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+
+//
+// Support for building on older Linux systems
+//
+
+// madvise(2) flags
+#ifndef MADV_HUGEPAGE
+#define MADV_HUGEPAGE 14
+#endif
+
+// Proc file entry for max map mount
+#define ZFILENAME_PROC_MAX_MAP_COUNT "/proc/sys/vm/max_map_count"
+
+bool ZPhysicalMemoryBacking::is_initialized() const {
+ return _file.is_initialized();
+}
+
+void ZPhysicalMemoryBacking::warn_available_space(size_t max) const {
+ // Note that the available space on a tmpfs or a hugetlbfs filesystem
+ // will be zero if no size limit was specified when it was mounted.
+ const size_t available = _file.available();
+ if (available == 0) {
+ // No size limit set, skip check
+ log_info(gc, init)("Available space on backing filesystem: N/A");
+ return;
+ }
+
+ log_info(gc, init)("Available space on backing filesystem: " SIZE_FORMAT "M", available / M);
+
+ // Warn if the filesystem doesn't currently have enough space available to hold
+ // the max heap size. The max heap size will be capped if we later hit this limit
+ // when trying to expand the heap.
+ if (available < max) {
+ log_warning(gc)("***** WARNING! INCORRECT SYSTEM CONFIGURATION DETECTED! *****");
+ log_warning(gc)("Not enough space available on the backing filesystem to hold the current max Java heap");
+ log_warning(gc)("size (" SIZE_FORMAT "M). Please adjust the size of the backing filesystem accordingly "
+ "(available", max / M);
+ log_warning(gc)("space is currently " SIZE_FORMAT "M). Continuing execution with the current filesystem "
+ "size could", available / M);
+ log_warning(gc)("lead to a premature OutOfMemoryError being thrown, due to failure to map memory.");
+ }
+}
+
+void ZPhysicalMemoryBacking::warn_max_map_count(size_t max) const {
+ const char* const filename = ZFILENAME_PROC_MAX_MAP_COUNT;
+ FILE* const file = fopen(filename, "r");
+ if (file == NULL) {
+ // Failed to open file, skip check
+ log_debug(gc, init)("Failed to open %s", filename);
+ return;
+ }
+
+ size_t actual_max_map_count = 0;
+ const int result = fscanf(file, SIZE_FORMAT, &actual_max_map_count);
+ fclose(file);
+ if (result != 1) {
+ // Failed to read file, skip check
+ log_debug(gc, init)("Failed to read %s", filename);
+ return;
+ }
+
+ // The required max map count is impossible to calculate exactly since subsystems
+ // other than ZGC are also creating memory mappings, and we have no control over that.
+ // However, ZGC tends to create the most mappings and dominate the total count.
+ // In the worst cases, ZGC will map each granule three times, i.e. once per heap view.
+ // We speculate that we need another 20% to allow for non-ZGC subsystems to map memory.
+ const size_t required_max_map_count = (max / ZGranuleSize) * 3 * 1.2;
+ if (actual_max_map_count < required_max_map_count) {
+ log_warning(gc)("***** WARNING! INCORRECT SYSTEM CONFIGURATION DETECTED! *****");
+ log_warning(gc)("The system limit on number of memory mappings per process might be too low for the given");
+ log_warning(gc)("max Java heap size (" SIZE_FORMAT "M). Please adjust %s to allow for at",
+ max / M, filename);
+ log_warning(gc)("least " SIZE_FORMAT " mappings (current limit is " SIZE_FORMAT "). Continuing execution "
+ "with the current", required_max_map_count, actual_max_map_count);
+ log_warning(gc)("limit could lead to a fatal error, due to failure to map memory.");
+ }
+}
+
+void ZPhysicalMemoryBacking::warn_commit_limits(size_t max) const {
+ // Warn if available space is too low
+ warn_available_space(max);
+
+ // Warn if max map count is too low
+ warn_max_map_count(max);
+}
+
+bool ZPhysicalMemoryBacking::supports_uncommit() {
+ assert(!is_init_completed(), "Invalid state");
+ assert(_file.size() >= ZGranuleSize, "Invalid size");
+
+ // Test if uncommit is supported by uncommitting and then re-committing a granule
+ return commit(uncommit(ZGranuleSize)) == ZGranuleSize;
+}
+
+size_t ZPhysicalMemoryBacking::commit(size_t size) {
+ size_t committed = 0;
+
+ // Fill holes in the backing file
+ while (committed < size) {
+ size_t allocated = 0;
+ const size_t remaining = size - committed;
+ const uintptr_t start = _uncommitted.alloc_from_front_at_most(remaining, &allocated);
+ if (start == UINTPTR_MAX) {
+ // No holes to commit
+ break;
+ }
+
+ // Try commit hole
+ const size_t filled = _file.commit(start, allocated);
+ if (filled > 0) {
+ // Successful or partialy successful
+ _committed.free(start, filled);
+ committed += filled;
+ }
+ if (filled < allocated) {
+ // Failed or partialy failed
+ _uncommitted.free(start + filled, allocated - filled);
+ return committed;
+ }
+ }
+
+ // Expand backing file
+ if (committed < size) {
+ const size_t remaining = size - committed;
+ const uintptr_t start = _file.size();
+ const size_t expanded = _file.commit(start, remaining);
+ if (expanded > 0) {
+ // Successful or partialy successful
+ _committed.free(start, expanded);
+ committed += expanded;
+ }
+ }
+
+ return committed;
+}
+
+size_t ZPhysicalMemoryBacking::uncommit(size_t size) {
+ size_t uncommitted = 0;
+
+ // Punch holes in backing file
+ while (uncommitted < size) {
+ size_t allocated = 0;
+ const size_t remaining = size - uncommitted;
+ const uintptr_t start = _committed.alloc_from_back_at_most(remaining, &allocated);
+ assert(start != UINTPTR_MAX, "Allocation should never fail");
+
+ // Try punch hole
+ const size_t punched = _file.uncommit(start, allocated);
+ if (punched > 0) {
+ // Successful or partialy successful
+ _uncommitted.free(start, punched);
+ uncommitted += punched;
+ }
+ if (punched < allocated) {
+ // Failed or partialy failed
+ _committed.free(start + punched, allocated - punched);
+ return uncommitted;
+ }
+ }
+
+ return uncommitted;
+}
+
+ZPhysicalMemory ZPhysicalMemoryBacking::alloc(size_t size) {
+ assert(is_aligned(size, ZGranuleSize), "Invalid size");
+
+ ZPhysicalMemory pmem;
+
+ // Allocate segments
+ for (size_t allocated = 0; allocated < size; allocated += ZGranuleSize) {
+ const uintptr_t start = _committed.alloc_from_front(ZGranuleSize);
+ assert(start != UINTPTR_MAX, "Allocation should never fail");
+ pmem.add_segment(ZPhysicalMemorySegment(start, ZGranuleSize));
+ }
+
+ return pmem;
+}
+
+void ZPhysicalMemoryBacking::free(const ZPhysicalMemory& pmem) {
+ const size_t nsegments = pmem.nsegments();
+
+ // Free segments
+ for (size_t i = 0; i < nsegments; i++) {
+ const ZPhysicalMemorySegment& segment = pmem.segment(i);
+ _committed.free(segment.start(), segment.size());
+ }
+}
+
+void ZPhysicalMemoryBacking::map_failed(ZErrno err) const {
+ if (err == ENOMEM) {
+ fatal("Failed to map memory. Please check the system limit on number of "
+ "memory mappings allowed per process (see %s)", ZFILENAME_PROC_MAX_MAP_COUNT);
+ } else {
+ fatal("Failed to map memory (%s)", err.to_string());
+ }
+}
+
+void ZPhysicalMemoryBacking::advise_view(uintptr_t addr, size_t size, int advice) const {
+ if (madvise((void*)addr, size, advice) == -1) {
+ ZErrno err;
+ log_error(gc)("Failed to advise on memory (advice %d, %s)", advice, err.to_string());
+ }
+}
+
+void ZPhysicalMemoryBacking::pretouch_view(uintptr_t addr, size_t size) const {
+ const size_t page_size = ZLargePages::is_explicit() ? os::large_page_size() : os::vm_page_size();
+ os::pretouch_memory((void*)addr, (void*)(addr + size), page_size);
+}
+
+void ZPhysicalMemoryBacking::map_view(const ZPhysicalMemory& pmem, uintptr_t addr, bool pretouch) const {
+ const size_t nsegments = pmem.nsegments();
+ size_t size = 0;
+
+ // Map segments
+ for (size_t i = 0; i < nsegments; i++) {
+ const ZPhysicalMemorySegment& segment = pmem.segment(i);
+ const uintptr_t segment_addr = addr + size;
+ const void* const res = mmap((void*)segment_addr, segment.size(), PROT_READ|PROT_WRITE, MAP_FIXED|MAP_SHARED, _file.fd(), segment.start());
+ if (res == MAP_FAILED) {
+ ZErrno err;
+ map_failed(err);
+ }
+
+ size += segment.size();
+ }
+
+ // Advise on use of transparent huge pages before touching it
+ if (ZLargePages::is_transparent()) {
+ advise_view(addr, size, MADV_HUGEPAGE);
+ }
+
+ // NUMA interleave memory before touching it
+ ZNUMA::memory_interleave(addr, size);
+
+ // Pre-touch memory
+ if (pretouch) {
+ pretouch_view(addr, size);
+ }
+}
+
+void ZPhysicalMemoryBacking::unmap_view(const ZPhysicalMemory& pmem, uintptr_t addr) const {
+ // Note that we must keep the address space reservation intact and just detach
+ // the backing memory. For this reason we map a new anonymous, non-accessible
+ // and non-reserved page over the mapping instead of actually unmapping.
+ const void* const res = mmap((void*)addr, pmem.size(), PROT_NONE, MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0);
+ if (res == MAP_FAILED) {
+ ZErrno err;
+ map_failed(err);
+ }
+}
+
+uintptr_t ZPhysicalMemoryBacking::nmt_address(uintptr_t offset) const {
+ // From an NMT point of view we treat the first heap view (marked0) as committed
+ return ZAddress::marked0(offset);
+}
+
+void ZPhysicalMemoryBacking::map(const ZPhysicalMemory& pmem, uintptr_t offset) const {
+ if (ZVerifyViews) {
+ // Map good view
+ map_view(pmem, ZAddress::good(offset), AlwaysPreTouch);
+ } else {
+ // Map all views
+ map_view(pmem, ZAddress::marked0(offset), AlwaysPreTouch);
+ map_view(pmem, ZAddress::marked1(offset), AlwaysPreTouch);
+ map_view(pmem, ZAddress::remapped(offset), AlwaysPreTouch);
+ }
+}
+
+void ZPhysicalMemoryBacking::unmap(const ZPhysicalMemory& pmem, uintptr_t offset) const {
+ if (ZVerifyViews) {
+ // Unmap good view
+ unmap_view(pmem, ZAddress::good(offset));
+ } else {
+ // Unmap all views
+ unmap_view(pmem, ZAddress::marked0(offset));
+ unmap_view(pmem, ZAddress::marked1(offset));
+ unmap_view(pmem, ZAddress::remapped(offset));
+ }
+}
+
+void ZPhysicalMemoryBacking::debug_map(const ZPhysicalMemory& pmem, uintptr_t offset) const {
+ // Map good view
+ assert(ZVerifyViews, "Should be enabled");
+ map_view(pmem, ZAddress::good(offset), false /* pretouch */);
+}
+
+void ZPhysicalMemoryBacking::debug_unmap(const ZPhysicalMemory& pmem, uintptr_t offset) const {
+ // Unmap good view
+ assert(ZVerifyViews, "Should be enabled");
+ unmap_view(pmem, ZAddress::good(offset));
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,70 @@
+/*
+ * 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
+ * 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.
+ */
+
+#ifndef OS_CPU_LINUX_AARCH64_GC_Z_ZPHYSICALMEMORYBACKING_LINUX_AARCH64_HPP
+#define OS_CPU_LINUX_AARCH64_GC_Z_ZPHYSICALMEMORYBACKING_LINUX_AARCH64_HPP
+
+#include "gc/z/zBackingFile_linux_aarch64.hpp"
+#include "gc/z/zMemory.hpp"
+
+class ZErrno;
+class ZPhysicalMemory;
+
+class ZPhysicalMemoryBacking {
+private:
+ ZBackingFile _file;
+ ZMemoryManager _committed;
+ ZMemoryManager _uncommitted;
+
+ void warn_available_space(size_t max) const;
+ void warn_max_map_count(size_t max) const;
+
+ void map_failed(ZErrno err) const;
+
+ void advise_view(uintptr_t addr, size_t size, int advice) const;
+ void pretouch_view(uintptr_t addr, size_t size) const;
+ void map_view(const ZPhysicalMemory& pmem, uintptr_t addr, bool pretouch) const;
+ void unmap_view(const ZPhysicalMemory& pmem, uintptr_t addr) const;
+
+public:
+ bool is_initialized() const;
+
+ void warn_commit_limits(size_t max) const;
+ bool supports_uncommit();
+
+ size_t commit(size_t size);
+ size_t uncommit(size_t size);
+
+ ZPhysicalMemory alloc(size_t size);
+ void free(const ZPhysicalMemory& pmem);
+
+ uintptr_t nmt_address(uintptr_t offset) const;
+
+ void map(const ZPhysicalMemory& pmem, uintptr_t offset) const;
+ void unmap(const ZPhysicalMemory& pmem, uintptr_t offset) const;
+
+ void debug_map(const ZPhysicalMemory& pmem, uintptr_t offset) const;
+ void debug_unmap(const ZPhysicalMemory& pmem, uintptr_t offset) const;
+};
+
+#endif // OS_CPU_LINUX_AARCH64_GC_Z_ZPHYSICALMEMORYBACKING_LINUX_AARCH64_HPP
--- a/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -83,19 +83,13 @@
#define REG_SP REG_RSP
#define REG_PC REG_RIP
#define REG_FP REG_RBP
-#define SPELL_REG_SP "rsp"
-#define SPELL_REG_FP "rbp"
#else
#define REG_FP 29
#define REG_LR 30
-
-#define SPELL_REG_SP "sp"
-#define SPELL_REG_FP "x29"
#endif
-address os::current_stack_pointer() {
- register void *esp __asm__ (SPELL_REG_SP);
- return (address) esp;
+NOINLINE address os::current_stack_pointer() {
+ return (address)__builtin_frame_address(0);
}
char* os::non_memory_address_word() {
@@ -230,23 +224,8 @@
#endif
}
-intptr_t* _get_previous_fp() {
- register intptr_t **fp __asm__ (SPELL_REG_FP);
-
- // fp is for this frame (_get_previous_fp). We want the fp for the
- // caller of os::current_frame*(), so go up two frames. However, for
- // optimized builds, _get_previous_fp() will be inlined, so only go
- // up 1 frame in that case.
- #ifdef _NMT_NOINLINE_
- return **(intptr_t***)fp;
- #else
- return *fp;
- #endif
-}
-
-
-frame os::current_frame() {
- intptr_t* fp = _get_previous_fp();
+NOINLINE frame os::current_frame() {
+ intptr_t *fp = *(intptr_t **)__builtin_frame_address(0);
frame myframe((intptr_t*)os::current_stack_pointer(),
(intptr_t*)fp,
CAST_FROM_FN_PTR(address, os::current_frame));
@@ -259,12 +238,6 @@
}
// Utility functions
-
-// From IA32 System Programming Guide
-enum {
- trap_page_fault = 0xE
-};
-
#ifdef BUILTIN_SIM
extern "C" void Fetch32PFI () ;
extern "C" void Fetch32Resume () ;
@@ -667,42 +640,42 @@
return 0;
}
- void _Copy_conjoint_jshorts_atomic(jshort* from, jshort* to, size_t count) {
+ void _Copy_conjoint_jshorts_atomic(const jshort* from, jshort* to, size_t count) {
if (from > to) {
- jshort *end = from + count;
+ const jshort *end = from + count;
while (from < end)
*(to++) = *(from++);
}
else if (from < to) {
- jshort *end = from;
+ const jshort *end = from;
from += count - 1;
to += count - 1;
while (from >= end)
*(to--) = *(from--);
}
}
- void _Copy_conjoint_jints_atomic(jint* from, jint* to, size_t count) {
+ void _Copy_conjoint_jints_atomic(const jint* from, jint* to, size_t count) {
if (from > to) {
- jint *end = from + count;
+ const jint *end = from + count;
while (from < end)
*(to++) = *(from++);
}
else if (from < to) {
- jint *end = from;
+ const jint *end = from;
from += count - 1;
to += count - 1;
while (from >= end)
*(to--) = *(from--);
}
}
- void _Copy_conjoint_jlongs_atomic(jlong* from, jlong* to, size_t count) {
+ void _Copy_conjoint_jlongs_atomic(const jlong* from, jlong* to, size_t count) {
if (from > to) {
- jlong *end = from + count;
+ const jlong *end = from + count;
while (from < end)
os::atomic_copy64(from++, to++);
}
else if (from < to) {
- jlong *end = from;
+ const jlong *end = from;
from += count - 1;
to += count - 1;
while (from >= end)
@@ -710,22 +683,22 @@
}
}
- void _Copy_arrayof_conjoint_bytes(HeapWord* from,
+ void _Copy_arrayof_conjoint_bytes(const HeapWord* from,
HeapWord* to,
size_t count) {
memmove(to, from, count);
}
- void _Copy_arrayof_conjoint_jshorts(HeapWord* from,
+ void _Copy_arrayof_conjoint_jshorts(const HeapWord* from,
HeapWord* to,
size_t count) {
memmove(to, from, count * 2);
}
- void _Copy_arrayof_conjoint_jints(HeapWord* from,
+ void _Copy_arrayof_conjoint_jints(const HeapWord* from,
HeapWord* to,
size_t count) {
memmove(to, from, count * 4);
}
- void _Copy_arrayof_conjoint_jlongs(HeapWord* from,
+ void _Copy_arrayof_conjoint_jlongs(const HeapWord* from,
HeapWord* to,
size_t count) {
memmove(to, from, count * 8);
--- a/src/hotspot/share/asm/assembler.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/asm/assembler.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -313,25 +313,22 @@
bool MacroAssembler::uses_implicit_null_check(void* address) {
// Exception handler checks the nmethod's implicit null checks table
// only when this method returns false.
- intptr_t int_address = reinterpret_cast<intptr_t>(address);
- intptr_t cell_header_size = Universe::heap()->cell_header_size();
- size_t region_size = os::vm_page_size() + cell_header_size;
+ uintptr_t addr = reinterpret_cast<uintptr_t>(address);
+ uintptr_t page_size = (uintptr_t)os::vm_page_size();
#ifdef _LP64
if (UseCompressedOops && CompressedOops::base() != NULL) {
// A SEGV can legitimately happen in C2 code at address
// (heap_base + offset) if Matcher::narrow_oop_use_complex_address
// is configured to allow narrow oops field loads to be implicitly
// null checked
- intptr_t start = ((intptr_t)CompressedOops::base()) - cell_header_size;
- intptr_t end = start + region_size;
- if (int_address >= start && int_address < end) {
+ uintptr_t start = (uintptr_t)CompressedOops::base();
+ uintptr_t end = start + page_size;
+ if (addr >= start && addr < end) {
return true;
}
}
#endif
- intptr_t start = -cell_header_size;
- intptr_t end = start + region_size;
- return int_address >= start && int_address < end;
+ return addr < page_size;
}
bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
@@ -341,12 +338,8 @@
// with -1. Another example is GraphBuilder::access_field(...) which uses -1 as placeholder
// for offsets to be patched in later. The -1 there means the offset is not yet known
// and may lie outside of the zero-trapping page, and thus we need to ensure we're forcing
- // an explicit null check for -1, even if it may otherwise be in the range
- // [-cell_header_size, os::vm_page_size).
- // TODO: Find and replace all relevant uses of -1 with a reasonably named constant.
- if (offset == -1) return true;
+ // an explicit null check for -1.
- // Check if offset is outside of [-cell_header_size, os::vm_page_size)
- return offset < -Universe::heap()->cell_header_size() ||
- offset >= os::vm_page_size();
+ // Check if offset is outside of [0, os::vm_page_size()]
+ return offset < 0 || offset >= os::vm_page_size();
}
--- a/src/hotspot/share/classfile/classFileParser.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/classfile/classFileParser.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -125,6 +125,8 @@
#define JAVA_13_VERSION 57
+#define JAVA_14_VERSION 58
+
void ClassFileParser::set_class_bad_constant_seen(short bad_constant) {
assert((bad_constant == JVM_CONSTANT_Module ||
bad_constant == JVM_CONSTANT_Package) && _major_version >= JAVA_9_VERSION,
@@ -4956,6 +4958,7 @@
bool ClassFileParser::verify_unqualified_name(const char* name,
unsigned int length,
int type) {
+ if (length == 0) return false; // Must have at least one char.
for (const char* p = name; p != name + length; p++) {
switch(*p) {
case '.':
@@ -5105,7 +5108,7 @@
int newlen = c - (char*) signature;
bool legal = verify_unqualified_name(signature, newlen, LegalClass);
if (!legal) {
- classfile_parse_error("Class name contains illegal character "
+ classfile_parse_error("Class name is empty or contains illegal character "
"in descriptor in class file %s",
CHECK_0);
return NULL;
--- a/src/hotspot/share/classfile/systemDictionary.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/classfile/systemDictionary.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -2861,14 +2861,17 @@
}
TableStatistics SystemDictionary::placeholders_statistics() {
+ MutexLocker ml(SystemDictionary_lock);
return placeholders()->statistics_calculate();
}
TableStatistics SystemDictionary::loader_constraints_statistics() {
+ MutexLocker ml(SystemDictionary_lock);
return constraints()->statistics_calculate();
}
TableStatistics SystemDictionary::protection_domain_cache_statistics() {
+ MutexLocker ml(SystemDictionary_lock);
return pd_cache_table()->statistics_calculate();
}
--- a/src/hotspot/share/classfile/verifier.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/classfile/verifier.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -165,22 +165,28 @@
PerfClassTraceTime::CLASS_VERIFY);
// If the class should be verified, first see if we can use the split
- // verifier. If not, or if verification fails and FailOverToOldVerifier
- // is set, then call the inference verifier.
+ // verifier. If not, or if verification fails and can failover, then
+ // call the inference verifier.
Symbol* exception_name = NULL;
const size_t message_buffer_len = klass->name()->utf8_length() + 1024;
char* message_buffer = NULL;
char* exception_message = NULL;
- bool can_failover = FailOverToOldVerifier &&
- klass->major_version() < NOFAILOVER_MAJOR_VERSION;
-
log_info(class, init)("Start class verification for: %s", klass->external_name());
if (klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) {
ClassVerifier split_verifier(klass, THREAD);
split_verifier.verify_class(THREAD);
exception_name = split_verifier.result();
- if (can_failover && !HAS_PENDING_EXCEPTION &&
+
+ // If DumpSharedSpaces is set then don't fall back to the old verifier on
+ // verification failure. If a class fails verification with the split verifier,
+ // it might fail the CDS runtime verifier constraint check. In that case, we
+ // don't want to share the class. We only archive classes that pass the split
+ // verifier.
+ bool can_failover = !DumpSharedSpaces &&
+ klass->major_version() < NOFAILOVER_MAJOR_VERSION;
+
+ if (can_failover && !HAS_PENDING_EXCEPTION && // Split verifier doesn't set PENDING_EXCEPTION for failure
(exception_name == vmSymbols::java_lang_VerifyError() ||
exception_name == vmSymbols::java_lang_ClassFormatError())) {
log_info(verification)("Fail over class verification to old verifier for: %s", klass->external_name());
--- a/src/hotspot/share/code/nmethod.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/code/nmethod.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -1473,6 +1473,13 @@
return NativeAccess<AS_NO_KEEPALIVE>::oop_load(oop_addr_at(index));
}
+oop nmethod::oop_at_phantom(int index) const {
+ if (index == 0) {
+ return NULL;
+ }
+ return NativeAccess<ON_PHANTOM_OOP_REF>::oop_load(oop_addr_at(index));
+}
+
//
// Notify all classes this nmethod is dependent on that it is no
// longer dependent. This should only be called in two situations.
--- a/src/hotspot/share/code/nmethod.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/code/nmethod.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -392,6 +392,7 @@
// Support for oops in scopes and relocs:
// Note: index 0 is reserved for null.
oop oop_at(int index) const;
+ oop oop_at_phantom(int index) const; // phantom reference
oop* oop_addr_at(int index) const { // for GC
// relocation indexes are biased by 1 (because 0 is reserved)
assert(index > 0 && index <= oops_count(), "must be a valid non-zero index");
--- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -391,8 +391,6 @@
#endif // !PRODUCT
HeapWord* G1BlockOffsetTablePart::initialize_threshold_raw() {
- assert(!G1CollectedHeap::heap()->is_in_reserved(_bot->_offset_array),
- "just checking");
_next_offset_index = _bot->index_for_raw(_space->bottom());
_next_offset_index++;
_next_offset_threshold =
@@ -401,8 +399,6 @@
}
void G1BlockOffsetTablePart::zero_bottom_entry_raw() {
- assert(!G1CollectedHeap::heap()->is_in_reserved(_bot->_offset_array),
- "just checking");
size_t bottom_index = _bot->index_for_raw(_space->bottom());
assert(_bot->address_for_index_raw(bottom_index) == _space->bottom(),
"Precondition of call");
@@ -410,8 +406,6 @@
}
HeapWord* G1BlockOffsetTablePart::initialize_threshold() {
- assert(!G1CollectedHeap::heap()->is_in_reserved(_bot->_offset_array),
- "just checking");
_next_offset_index = _bot->index_for(_space->bottom());
_next_offset_index++;
_next_offset_threshold =
--- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -52,7 +52,7 @@
// Array for keeping offsets for retrieving object start fast given an
// address.
- u_char* _offset_array; // byte array keeping backwards offsets
+ volatile u_char* _offset_array; // byte array keeping backwards offsets
void check_offset(size_t offset, const char* msg) const {
assert(offset <= BOTConstants::N_words,
@@ -64,10 +64,7 @@
// For performance these have to devolve to array accesses in product builds.
inline u_char offset_array(size_t index) const;
- void set_offset_array_raw(size_t index, u_char offset) {
- _offset_array[index] = offset;
- }
-
+ inline void set_offset_array_raw(size_t index, u_char offset);
inline void set_offset_array(size_t index, u_char offset);
inline void set_offset_array(size_t index, HeapWord* high, HeapWord* low);
--- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -29,6 +29,7 @@
#include "gc/g1/heapRegion.hpp"
#include "gc/shared/memset_with_concurrent_readers.hpp"
#include "gc/shared/space.hpp"
+#include "runtime/atomic.hpp"
inline HeapWord* G1BlockOffsetTablePart::block_start(const void* addr) {
if (addr >= _space->bottom() && addr < _space->end()) {
@@ -51,7 +52,11 @@
u_char G1BlockOffsetTable::offset_array(size_t index) const {
check_index(index, "index out of range");
- return _offset_array[index];
+ return Atomic::load(&_offset_array[index]);
+}
+
+void G1BlockOffsetTable::set_offset_array_raw(size_t index, u_char offset) {
+ Atomic::store(offset, &_offset_array[index]);
}
void G1BlockOffsetTable::set_offset_array(size_t index, u_char offset) {
@@ -71,7 +76,8 @@
check_index(right, "right index out of range");
assert(left <= right, "indexes out of order");
size_t num_cards = right - left + 1;
- memset_with_concurrent_readers(&_offset_array[left], offset, num_cards);
+ memset_with_concurrent_readers
+ (const_cast<u_char*> (&_offset_array[left]), offset, num_cards);
}
// Variant of index_for that does not check the index for validity.
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -2780,6 +2780,23 @@
cl.flush_rem_set_entries();
}
+#ifndef PRODUCT
+void G1CollectedHeap::verify_region_attr_remset_update() {
+ class VerifyRegionAttrRemSet : public HeapRegionClosure {
+ public:
+ virtual bool do_heap_region(HeapRegion* r) {
+ G1CollectedHeap* g1h = G1CollectedHeap::heap();
+ bool const needs_remset_update = g1h->region_attr(r->bottom()).needs_remset_update();
+ assert(r->rem_set()->is_tracked() == needs_remset_update,
+ "Region %u remset tracking status (%s) different to region attribute (%s)",
+ r->hrm_index(), BOOL_TO_STR(r->rem_set()->is_tracked()), BOOL_TO_STR(needs_remset_update));
+ return false;
+ }
+ } cl;
+ heap_region_iterate(&cl);
+}
+#endif
+
class VerifyRegionRemSetClosure : public HeapRegionClosure {
public:
bool do_heap_region(HeapRegion* hr) {
@@ -3059,6 +3076,7 @@
// Actually do the work...
evacuate_initial_collection_set(&per_thread_states);
+
if (_collection_set.optional_region_length() != 0) {
evacuate_optional_collection_set(&per_thread_states);
}
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -593,6 +593,10 @@
_region_attr.clear();
}
+ // Verify that the G1RegionAttr remset tracking corresponds to actual remset tracking
+ // for all regions.
+ void verify_region_attr_remset_update() PRODUCT_RETURN;
+
bool is_user_requested_concurrent_full_gc(GCCause::Cause cause);
// This is called at the start of either a concurrent cycle or a Full
--- a/src/hotspot/share/gc/g1/g1CollectionSet.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -519,6 +519,9 @@
_num_optional_regions -= num_selected_regions;
stop_incremental_building();
+
+ _g1h->verify_region_attr_remset_update();
+
return num_selected_regions > 0;
}
@@ -526,10 +529,15 @@
for (uint i = 0; i < _num_optional_regions; i++) {
HeapRegion* r = candidates()->at(candidates()->cur_idx() + i);
pss->record_unused_optional_region(r);
+ // Clear collection set marker and make sure that the remembered set information
+ // is correct as we still need it later.
_g1h->clear_region_attr(r);
+ _g1h->register_region_with_region_attr(r);
r->clear_index_in_opt_cset();
}
free_optional_regions();
+
+ _g1h->verify_region_attr_remset_update();
}
#ifdef ASSERT
--- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -308,7 +308,6 @@
virtual bool escape_add_to_con_graph(ConnectionGraph* conn_graph, PhaseGVN* gvn, Unique_Node_List* delayed_worklist, Node* n, uint opcode) const { return false; }
virtual bool escape_add_final_edges(ConnectionGraph* conn_graph, PhaseGVN* gvn, Node* n, uint opcode) const { return false; }
virtual bool escape_has_out_with_unsafe_object(Node* n) const { return false; }
- virtual bool escape_is_barrier_node(Node* n) const { return false; }
virtual bool matcher_find_shared_visit(Matcher* matcher, Matcher::MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx) const { return false; };
virtual bool matcher_find_shared_post_visit(Matcher* matcher, Node* n, uint opcode) const { return false; };
--- a/src/hotspot/share/gc/shared/collectedHeap.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shared/collectedHeap.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -534,11 +534,6 @@
virtual size_t obj_size(oop obj) const;
- // Cells are memory slices allocated by the allocator. Objects are initialized
- // in cells. The cell itself may have a header, found at a negative offset of
- // oops. Usually, the size of the cell header is 0, but it may be larger.
- virtual ptrdiff_t cell_header_size() const { return 0; }
-
// Non product verification and debugging.
#ifndef PRODUCT
// Support for PromotionFailureALot. Return true if it's time to cause a
--- a/src/hotspot/share/gc/shared/gcLocker.inline.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shared/gcLocker.inline.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -26,7 +26,7 @@
#define SHARE_GC_SHARED_GCLOCKER_INLINE_HPP
#include "gc/shared/gcLocker.hpp"
-#include "runtime/thread.hpp"
+#include "runtime/thread.inline.hpp"
void GCLocker::lock_critical(JavaThread* thread) {
if (!thread->in_critical()) {
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -1194,10 +1194,6 @@
}
-bool ShenandoahBarrierSetC2::escape_is_barrier_node(Node* n) const {
- return n->Opcode() == Op_ShenandoahLoadReferenceBarrier;
-}
-
bool ShenandoahBarrierSetC2::matcher_find_shared_post_visit(Matcher* matcher, Node* n, uint opcode) const {
switch (opcode) {
case Op_ShenandoahCompareAndExchangeP:
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -144,7 +144,6 @@
virtual bool escape_add_to_con_graph(ConnectionGraph* conn_graph, PhaseGVN* gvn, Unique_Node_List* delayed_worklist, Node* n, uint opcode) const;
virtual bool escape_add_final_edges(ConnectionGraph* conn_graph, PhaseGVN* gvn, Node* n, uint opcode) const;
virtual bool escape_has_out_with_unsafe_object(Node* n) const;
- virtual bool escape_is_barrier_node(Node* n) const;
virtual bool matcher_find_shared_post_visit(Matcher* matcher, Node* n, uint opcode) const;
virtual bool matcher_is_store_load_barrier(Node* x, uint xop) const;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentRoots.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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 "precompiled.hpp"
+
+#include "gc/shenandoah/shenandoahConcurrentRoots.hpp"
+#include "gc/shenandoah/shenandoahHeap.inline.hpp"
+
+bool ShenandoahConcurrentRoots::can_do_concurrent_roots() {
+ // Don't support traversal GC at this moment
+ return !ShenandoahHeap::heap()->is_concurrent_traversal_in_progress();
+}
+
+bool ShenandoahConcurrentRoots::should_do_concurrent_roots() {
+ ShenandoahHeap* const heap = ShenandoahHeap::heap();
+ bool stw_gc_in_progress = heap->is_full_gc_in_progress() ||
+ heap->is_degenerated_gc_in_progress();
+ return can_do_concurrent_roots() &&
+ !stw_gc_in_progress;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentRoots.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTROOTS_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTROOTS_HPP
+
+#include "memory/allocation.hpp"
+
+class ShenandoahConcurrentRoots : public AllStatic {
+public:
+ // Can GC settings allow concurrent root processing
+ static bool can_do_concurrent_roots();
+ // If current GC cycle can process roots concurrently
+ static bool should_do_concurrent_roots();
+};
+
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHCONCURRENTROOTS_HPP
--- a/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -377,6 +377,9 @@
// Complete marking under STW, and start evacuation
heap->vmop_entry_final_mark();
+ // Evacuate concurrent roots
+ heap->entry_roots();
+
// Final mark might have reclaimed some immediate garbage, kick cleanup to reclaim
// the space. This would be the last action if there is nothing to evacuate.
heap->entry_cleanup();
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -38,6 +38,7 @@
#include "gc/shenandoah/shenandoahCollectionSet.hpp"
#include "gc/shenandoah/shenandoahCollectorPolicy.hpp"
#include "gc/shenandoah/shenandoahConcurrentMark.inline.hpp"
+#include "gc/shenandoah/shenandoahConcurrentRoots.hpp"
#include "gc/shenandoah/shenandoahControlThread.hpp"
#include "gc/shenandoah/shenandoahFreeSet.hpp"
#include "gc/shenandoah/shenandoahPhaseTimings.hpp"
@@ -1071,9 +1072,11 @@
DerivedPointerTable::clear();
#endif
assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Only iterate roots while world is stopped");
-
{
- ShenandoahRootEvacuator rp(workers()->active_workers(), ShenandoahPhaseTimings::init_evac);
+ // Include concurrent roots if current cycle can not process those roots concurrently
+ ShenandoahRootEvacuator rp(workers()->active_workers(),
+ ShenandoahPhaseTimings::init_evac,
+ !ShenandoahConcurrentRoots::should_do_concurrent_roots());
ShenandoahEvacuateUpdateRootsTask roots_task(&rp);
workers()->run_task(&roots_task);
}
@@ -1276,10 +1279,15 @@
Stack<oop,mtGC> oop_stack;
- // First, we process all GC roots. This populates the work stack with initial objects.
- ShenandoahAllRootScanner rp(1, ShenandoahPhaseTimings::_num_phases);
+ // First, we process GC roots according to current GC cycle. This populates the work stack with initial objects.
+ ShenandoahHeapIterationRootScanner rp;
ObjectIterateScanRootClosure oops(&_aux_bit_map, &oop_stack);
- rp.roots_do_unchecked(&oops);
+
+ if (unload_classes()) {
+ rp.strong_roots_do(&oops);
+ } else {
+ rp.roots_do(&oops);
+ }
// Work through the oop stack to traverse heap.
while (! oop_stack.is_empty()) {
@@ -1512,7 +1520,11 @@
}
if (ShenandoahVerify) {
- verifier()->verify_roots_no_forwarded();
+ if (ShenandoahConcurrentRoots::should_do_concurrent_roots()) {
+ verifier()->verify_roots_no_forwarded_except(ShenandoahRootVerifier::JNIHandleRoots);
+ } else {
+ verifier()->verify_roots_no_forwarded();
+ }
verifier()->verify_during_evacuation();
}
} else {
@@ -1573,6 +1585,30 @@
free_set()->recycle_trash();
}
+class ShenandoahConcurrentRootsEvacUpdateTask : public AbstractGangTask {
+private:
+ ShenandoahJNIHandleRoots<true /*concurrent*/> _jni_roots;
+
+public:
+ ShenandoahConcurrentRootsEvacUpdateTask() :
+ AbstractGangTask("Shenandoah Evacuate/Update Concurrent Roots Task") {
+ }
+
+ void work(uint worker_id) {
+ ShenandoahEvacOOMScope oom;
+ ShenandoahEvacuateUpdateRootsClosure cl;
+ _jni_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl);
+ }
+};
+
+void ShenandoahHeap::op_roots() {
+ if (is_evacuation_in_progress() &&
+ ShenandoahConcurrentRoots::should_do_concurrent_roots()) {
+ ShenandoahConcurrentRootsEvacUpdateTask task;
+ workers()->run_task(&task);
+ }
+}
+
void ShenandoahHeap::op_reset() {
reset_mark_bitmap();
}
@@ -1694,7 +1730,28 @@
// it would be a simple check, which is supposed to be fast. This is also
// safe to do even without degeneration, as CSet iterator is at beginning
// in preparation for evacuation anyway.
- collection_set()->clear_current_index();
+ //
+ // Before doing that, we need to make sure we never had any cset-pinned
+ // regions. This may happen if allocation failure happened when evacuating
+ // the about-to-be-pinned object, oom-evac protocol left the object in
+ // the collection set, and then the pin reached the cset region. If we continue
+ // the cycle here, we would trash the cset and alive objects in it. To avoid
+ // it, we fail degeneration right away and slide into Full GC to recover.
+
+ {
+ collection_set()->clear_current_index();
+
+ ShenandoahHeapRegion* r;
+ while ((r = collection_set()->next()) != NULL) {
+ if (r->is_pinned()) {
+ cancel_gc(GCCause::_shenandoah_upgrade_to_full_gc);
+ op_degenerated_fail();
+ return;
+ }
+ }
+
+ collection_set()->clear_current_index();
+ }
op_stw_evac();
if (cancelled_gc()) {
@@ -2152,6 +2209,11 @@
concurrent_mark()->update_thread_roots(ShenandoahPhaseTimings::final_update_refs_roots);
}
+ // Has to be done before cset is clear
+ if (ShenandoahVerify) {
+ verifier()->verify_roots_in_to_space();
+ }
+
ShenandoahGCPhase final_update_refs(ShenandoahPhaseTimings::final_update_refs_recycle);
trash_cset_regions();
@@ -2159,7 +2221,6 @@
set_update_refs_in_progress(false);
if (ShenandoahVerify) {
- verifier()->verify_roots_no_forwarded();
verifier()->verify_after_updaterefs();
}
@@ -2529,6 +2590,22 @@
try_inject_alloc_failure();
op_updaterefs();
}
+
+void ShenandoahHeap::entry_roots() {
+ ShenandoahGCPhase phase(ShenandoahPhaseTimings::conc_roots);
+
+ static const char* msg = "Concurrent roots processing";
+ GCTraceTime(Info, gc) time(msg, NULL, GCCause::_no_gc, true);
+ EventMark em("%s", msg);
+
+ ShenandoahWorkerScope scope(workers(),
+ ShenandoahWorkerPolicy::calc_workers_for_conc_root_processing(),
+ "concurrent root processing");
+
+ try_inject_alloc_failure();
+ op_roots();
+}
+
void ShenandoahHeap::entry_cleanup() {
ShenandoahGCPhase phase(ShenandoahPhaseTimings::conc_cleanup);
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -391,6 +391,7 @@
void entry_reset();
void entry_mark();
void entry_preclean();
+ void entry_roots();
void entry_cleanup();
void entry_evac();
void entry_updaterefs();
@@ -414,6 +415,7 @@
void op_reset();
void op_mark();
void op_preclean();
+ void op_roots();
void op_cleanup();
void op_conc_evac();
void op_stw_evac();
--- a/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -306,6 +306,7 @@
f(conc_mark, "Concurrent Marking") \
f(conc_termination, " Termination") \
f(conc_preclean, "Concurrent Precleaning") \
+ f(conc_roots, "Concurrent Roots") \
f(conc_evac, "Concurrent Evacuation") \
f(conc_update_refs, "Concurrent Update Refs") \
f(conc_cleanup, "Concurrent Cleanup") \
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -71,10 +71,6 @@
_jvmti_root.oops_do(cl, worker_id);
}
-ShenandoahJNIHandleRoots::ShenandoahJNIHandleRoots() :
- ShenandoahSerialRoot(&JNIHandles::oops_do, ShenandoahPhaseTimings::JNIRoots) {
-}
-
ShenandoahThreadRoots::ShenandoahThreadRoots(bool is_par) : _is_par(is_par) {
Threads::change_thread_claim_token();
}
@@ -126,16 +122,6 @@
}
}
-ShenandoahClassLoaderDataRoots::ShenandoahClassLoaderDataRoots() {
- ClassLoaderDataGraph::clear_claimed_marks();
-}
-
-void ShenandoahClassLoaderDataRoots::clds_do(CLDClosure* strong_clds, CLDClosure* weak_clds, uint worker_id) {
- ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times();
- ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CLDGRoots, worker_id);
- ClassLoaderDataGraph::roots_cld_do(strong_clds, weak_clds);
-}
-
ShenandoahRootProcessor::ShenandoahRootProcessor(ShenandoahPhaseTimings::Phase phase) :
_heap(ShenandoahHeap::heap()),
_phase(phase) {
@@ -148,24 +134,25 @@
_heap->phase_timings()->record_workers_end(_phase);
}
-ShenandoahRootEvacuator::ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
+ShenandoahRootEvacuator::ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool include_concurrent_roots) :
ShenandoahRootProcessor(phase),
_thread_roots(n_workers > 1),
- _weak_roots(n_workers) {
+ _weak_roots(n_workers),
+ _include_concurrent_roots(include_concurrent_roots) {
}
void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) {
MarkingCodeBlobClosure blobsCl(oops, CodeBlobToOopClosure::FixRelocations);
CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
- CLDToOopClosure* weak_clds = ShenandoahHeap::heap()->unload_classes() ? NULL : &clds;
-
AlwaysTrueClosure always_true;
_serial_roots.oops_do(oops, worker_id);
- _jni_roots.oops_do(oops, worker_id);
+ if (_include_concurrent_roots) {
+ _jni_roots.oops_do<OopClosure>(oops, worker_id);
+ }
_thread_roots.oops_do(oops, NULL, worker_id);
- _cld_roots.clds_do(&clds, &clds, worker_id);
+ _cld_roots.cld_do(&clds, worker_id);
_code_roots.code_blobs_do(&blobsCl, worker_id);
_weak_roots.oops_do<AlwaysTrueClosure, OopClosure>(&always_true, oops, worker_id);
@@ -195,9 +182,43 @@
_jni_roots.oops_do(oops, worker_id);
_thread_roots.oops_do(oops, NULL, worker_id);
- _cld_roots.clds_do(&adjust_cld_closure, NULL, worker_id);
+ _cld_roots.cld_do(&adjust_cld_closure, worker_id);
_code_roots.code_blobs_do(&adjust_code_closure, worker_id);
_weak_roots.oops_do<AlwaysTrueClosure, OopClosure>(&always_true, oops, worker_id);
_dedup_roots.oops_do(&always_true, oops, worker_id);
}
+
+ ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner() :
+ ShenandoahRootProcessor(ShenandoahPhaseTimings::_num_phases),
+ _thread_roots(false /*is par*/) {
+ }
+
+ void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
+ assert(Thread::current()->is_VM_thread(), "Only by VM thread");
+ // Must use _claim_none to avoid interfering with concurrent CLDG iteration
+ CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
+ MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
+ ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
+ ResourceMark rm;
+
+ _serial_roots.oops_do(oops, 0);
+ _jni_roots.oops_do(oops, 0);
+ _cld_roots.cld_do(&clds, 0);
+ _thread_roots.threads_do(&tc_cl, 0);
+ _code_roots.code_blobs_do(&code, 0);
+ }
+
+ void ShenandoahHeapIterationRootScanner::strong_roots_do(OopClosure* oops) {
+ assert(Thread::current()->is_VM_thread(), "Only by VM thread");
+ // Must use _claim_none to avoid interfering with concurrent CLDG iteration
+ CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
+ MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
+ ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
+ ResourceMark rm;
+
+ _serial_roots.oops_do(oops, 0);
+ _jni_roots.oops_do(oops, 0);
+ _cld_roots.always_strong_cld_do(&clds, 0);
+ _thread_roots.threads_do(&tc_cl, 0);
+ }
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -61,9 +61,15 @@
void oops_do(OopClosure* cl, uint worker_id);
};
-class ShenandoahJNIHandleRoots : public ShenandoahSerialRoot {
+template <bool CONCURRENT>
+class ShenandoahJNIHandleRoots {
+private:
+ OopStorage::ParState<CONCURRENT, false /* is_const */> _itr;
public:
ShenandoahJNIHandleRoots();
+
+ template <typename T>
+ void oops_do(T* cl, uint worker_id = 0);
};
class ShenandoahThreadRoots {
@@ -108,11 +114,13 @@
void code_blobs_do(CodeBlobClosure* blob_cl, uint worker_id);
};
+template <bool SINGLE_THREADED>
class ShenandoahClassLoaderDataRoots {
public:
ShenandoahClassLoaderDataRoots();
- void clds_do(CLDClosure* strong_clds, CLDClosure* weak_clds, uint worker_id);
+ void always_strong_cld_do(CLDClosure* clds, uint worker_id);
+ void cld_do(CLDClosure* clds, uint worker_id);
};
class ShenandoahRootProcessor : public StackObj {
@@ -129,11 +137,11 @@
template <typename ITR>
class ShenandoahRootScanner : public ShenandoahRootProcessor {
private:
- ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_roots;
- ShenandoahClassLoaderDataRoots _cld_roots;
- ShenandoahThreadRoots _thread_roots;
- ShenandoahCodeCacheRoots<ITR> _code_roots;
+ ShenandoahSerialRoots _serial_roots;
+ ShenandoahThreadRoots _thread_roots;
+ ShenandoahCodeCacheRoots<ITR> _code_roots;
+ ShenandoahJNIHandleRoots<false /*concurrent*/ > _jni_roots;
+ ShenandoahClassLoaderDataRoots<false /*single threaded*/> _cld_roots;
public:
ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase);
@@ -146,26 +154,42 @@
// roots when class unloading is disabled during this cycle
void roots_do(uint worker_id, OopClosure* cl);
void roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc = NULL);
- // For heap object iteration
- void roots_do_unchecked(OopClosure* cl);
};
typedef ShenandoahRootScanner<ShenandoahAllCodeRootsIterator> ShenandoahAllRootScanner;
typedef ShenandoahRootScanner<ShenandoahCsetCodeRootsIterator> ShenandoahCSetRootScanner;
+// This scanner is only for SH::object_iteration() and only supports single-threaded
+// root scanning
+class ShenandoahHeapIterationRootScanner : public ShenandoahRootProcessor {
+private:
+ ShenandoahSerialRoots _serial_roots;
+ ShenandoahThreadRoots _thread_roots;
+ ShenandoahJNIHandleRoots<false /*concurrent*/> _jni_roots;
+ ShenandoahClassLoaderDataRoots<true /*single threaded*/> _cld_roots;
+ ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
+
+public:
+ ShenandoahHeapIterationRootScanner();
+
+ void roots_do(OopClosure* cl);
+ void strong_roots_do(OopClosure* cl);
+};
+
// Evacuate all roots at a safepoint
class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
private:
- ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_roots;
- ShenandoahClassLoaderDataRoots _cld_roots;
- ShenandoahThreadRoots _thread_roots;
- ShenandoahWeakRoots _weak_roots;
- ShenandoahStringDedupRoots _dedup_roots;
+ ShenandoahSerialRoots _serial_roots;
+ ShenandoahJNIHandleRoots<false /*concurrent*/> _jni_roots;
+ ShenandoahClassLoaderDataRoots<false /*single threaded*/> _cld_roots;
+ ShenandoahThreadRoots _thread_roots;
+ ShenandoahWeakRoots _weak_roots;
+ ShenandoahStringDedupRoots _dedup_roots;
ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
+ bool _include_concurrent_roots;
public:
- ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase);
+ ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool include_concurrent_roots);
void roots_do(uint worker_id, OopClosure* oops);
};
@@ -173,14 +197,14 @@
// Update all roots at a safepoint
class ShenandoahRootUpdater : public ShenandoahRootProcessor {
private:
- ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_roots;
- ShenandoahClassLoaderDataRoots _cld_roots;
- ShenandoahThreadRoots _thread_roots;
- ShenandoahWeakRoots _weak_roots;
- ShenandoahStringDedupRoots _dedup_roots;
+ ShenandoahSerialRoots _serial_roots;
+ ShenandoahJNIHandleRoots<false /*concurrent*/> _jni_roots;
+ ShenandoahClassLoaderDataRoots<false /*single threaded*/> _cld_roots;
+ ShenandoahThreadRoots _thread_roots;
+ ShenandoahWeakRoots _weak_roots;
+ ShenandoahStringDedupRoots _dedup_roots;
ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
- const bool _update_code_cache;
+ const bool _update_code_cache;
public:
ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool update_code_cache);
@@ -192,13 +216,13 @@
// Adjuster all roots at a safepoint during full gc
class ShenandoahRootAdjuster : public ShenandoahRootProcessor {
private:
- ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_roots;
- ShenandoahClassLoaderDataRoots _cld_roots;
- ShenandoahThreadRoots _thread_roots;
- ShenandoahWeakRoots _weak_roots;
- ShenandoahStringDedupRoots _dedup_roots;
- ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
+ ShenandoahSerialRoots _serial_roots;
+ ShenandoahJNIHandleRoots<false /*concurrent*/> _jni_roots;
+ ShenandoahClassLoaderDataRoots<false /*single threaded*/> _cld_roots;
+ ShenandoahThreadRoots _thread_roots;
+ ShenandoahWeakRoots _weak_roots;
+ ShenandoahStringDedupRoots _dedup_roots;
+ ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
public:
ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase);
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -24,17 +24,70 @@
#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
#define SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
+#include "classfile/classLoaderDataGraph.hpp"
+#include "gc/shared/oopStorageParState.inline.hpp"
#include "gc/shenandoah/shenandoahHeuristics.hpp"
#include "gc/shenandoah/shenandoahRootProcessor.hpp"
#include "gc/shenandoah/shenandoahTimingTracker.hpp"
#include "gc/shenandoah/shenandoahUtils.hpp"
#include "memory/resourceArea.hpp"
+#include "runtime/safepoint.hpp"
+
+template <bool CONCURRENT>
+ShenandoahJNIHandleRoots<CONCURRENT>::ShenandoahJNIHandleRoots() :
+ _itr(JNIHandles::global_handles()) {
+}
+
+template <bool CONCURRENT>
+template <typename T>
+void ShenandoahJNIHandleRoots<CONCURRENT>::oops_do(T* cl, uint worker_id) {
+ if (CONCURRENT) {
+ _itr.oops_do(cl);
+ } else {
+ ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times();
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::JNIRoots, worker_id);
+ _itr.oops_do(cl);
+ }
+}
template <typename IsAlive, typename KeepAlive>
void ShenandoahWeakRoots::oops_do(IsAlive* is_alive, KeepAlive* keep_alive, uint worker_id) {
_task.work<IsAlive, KeepAlive>(worker_id, is_alive, keep_alive);
}
+template <bool SINGLE_THREADED>
+ShenandoahClassLoaderDataRoots<SINGLE_THREADED>::ShenandoahClassLoaderDataRoots() {
+ if (!SINGLE_THREADED) {
+ ClassLoaderDataGraph::clear_claimed_marks();
+ }
+}
+
+template <bool SINGLE_THREADED>
+void ShenandoahClassLoaderDataRoots<SINGLE_THREADED>::always_strong_cld_do(CLDClosure* clds, uint worker_id) {
+ if (SINGLE_THREADED) {
+ assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
+ assert(Thread::current()->is_VM_thread(), "Single threaded CLDG iteration can only be done by VM thread");
+ ClassLoaderDataGraph::always_strong_cld_do(clds);
+ } else {
+ ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times();
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CLDGRoots, worker_id);
+ ClassLoaderDataGraph::always_strong_cld_do(clds);
+ }
+}
+
+template <bool SINGLE_THREADED>
+void ShenandoahClassLoaderDataRoots<SINGLE_THREADED>::cld_do(CLDClosure* clds, uint worker_id) {
+ if (SINGLE_THREADED) {
+ assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
+ assert(Thread::current()->is_VM_thread(), "Single threaded CLDG iteration can only be done by VM thread");
+ ClassLoaderDataGraph::cld_do(clds);
+ } else {
+ ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times();
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CLDGRoots, worker_id);
+ ClassLoaderDataGraph::cld_do(clds);
+ }
+}
+
template <typename ITR>
ShenandoahCodeCacheRoots<ITR>::ShenandoahCodeCacheRoots() {
nmethod::oops_do_marking_prologue();
@@ -100,7 +153,13 @@
_serial_roots.oops_do(oops, worker_id);
_jni_roots.oops_do(oops, worker_id);
- _cld_roots.clds_do(clds, clds, worker_id);
+
+ if (clds != NULL) {
+ _cld_roots.cld_do(clds, worker_id);
+ } else {
+ assert(ShenandoahHeap::heap()->is_concurrent_traversal_in_progress(), "Only possible with traversal GC");
+ }
+
_thread_roots.threads_do(&tc_cl, worker_id);
// With ShenandoahConcurrentScanCodeRoots, we avoid scanning the entire code cache here,
@@ -112,20 +171,6 @@
}
template <typename ITR>
-void ShenandoahRootScanner<ITR>::roots_do_unchecked(OopClosure* oops) {
- CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
- MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
- ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
- ResourceMark rm;
-
- _serial_roots.oops_do(oops, 0);
- _jni_roots.oops_do(oops, 0);
- _cld_roots.clds_do(&clds, &clds, 0);
- _thread_roots.threads_do(&tc_cl, 0);
- _code_roots.code_blobs_do(&code, 0);
-}
-
-template <typename ITR>
void ShenandoahRootScanner<ITR>::strong_roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc) {
assert(ShenandoahHeap::heap()->unload_classes(), "Should be used during class unloading");
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
@@ -133,7 +178,7 @@
_serial_roots.oops_do(oops, worker_id);
_jni_roots.oops_do(oops, worker_id);
- _cld_roots.clds_do(clds, NULL, worker_id);
+ _cld_roots.always_strong_cld_do(clds, worker_id);
_thread_roots.threads_do(&tc_cl, worker_id);
}
@@ -141,13 +186,12 @@
void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
CodeBlobToOopClosure update_blobs(keep_alive, CodeBlobToOopClosure::FixRelocations);
CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
- CLDToOopClosure* weak_clds = ShenandoahHeap::heap()->unload_classes() ? NULL : &clds;
_serial_roots.oops_do(keep_alive, worker_id);
_jni_roots.oops_do(keep_alive, worker_id);
_thread_roots.oops_do(keep_alive, NULL, worker_id);
- _cld_roots.clds_do(&clds, weak_clds, worker_id);
+ _cld_roots.cld_do(&clds, worker_id);
if(_update_code_cache) {
_code_roots.code_blobs_do(&update_blobs, worker_id);
--- a/src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -964,6 +964,44 @@
void do_oop(oop* p) { do_oop_work(p); }
};
+class ShenandoahVerifyInToSpaceClosure : public OopClosure {
+private:
+ template <class T>
+ void do_oop_work(T* p) {
+ T o = RawAccess<>::oop_load(p);
+ if (!CompressedOops::is_null(o)) {
+ oop obj = CompressedOops::decode_not_null(o);
+ ShenandoahHeap* heap = ShenandoahHeap::heap_no_check();
+
+ if (!heap->marking_context()->is_marked(obj)) {
+ ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, NULL,
+ "Verify Roots In To-Space", "Should be marked", __FILE__, __LINE__);
+ }
+
+ if (heap->in_collection_set(obj)) {
+ ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, NULL,
+ "Verify Roots In To-Space", "Should not be in collection set", __FILE__, __LINE__);
+ }
+
+ oop fwd = (oop) ShenandoahForwarding::get_forwardee_raw_unchecked(obj);
+ if (!oopDesc::equals_raw(obj, fwd)) {
+ ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, NULL,
+ "Verify Roots In To-Space", "Should not be forwarded", __FILE__, __LINE__);
+ }
+ }
+ }
+
+public:
+ void do_oop(narrowOop* p) { do_oop_work(p); }
+ void do_oop(oop* p) { do_oop_work(p); }
+};
+
+void ShenandoahVerifier::verify_roots_in_to_space() {
+ ShenandoahRootVerifier verifier;
+ ShenandoahVerifyInToSpaceClosure cl;
+ verifier.oops_do(&cl);
+}
+
void ShenandoahVerifier::verify_roots_no_forwarded() {
ShenandoahRootVerifier verifier;
ShenandoahVerifyNoForwared cl;
--- a/src/hotspot/share/gc/shenandoah/shenandoahVerifier.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahVerifier.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -189,6 +189,7 @@
void verify_generic(VerifyOption option);
// Roots should only contain to-space oops
+ void verify_roots_in_to_space();
void verify_roots_no_forwarded();
void verify_roots_no_forwarded_except(ShenandoahRootVerifier::RootTypes types);
};
--- a/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -30,6 +30,7 @@
uint ShenandoahWorkerPolicy::_prev_par_marking = 0;
uint ShenandoahWorkerPolicy::_prev_conc_marking = 0;
uint ShenandoahWorkerPolicy::_prev_conc_evac = 0;
+uint ShenandoahWorkerPolicy::_prev_conc_root_proc = 0;
uint ShenandoahWorkerPolicy::_prev_fullgc = 0;
uint ShenandoahWorkerPolicy::_prev_degengc = 0;
uint ShenandoahWorkerPolicy::_prev_stw_traversal = 0;
@@ -63,6 +64,16 @@
return _prev_par_marking;
}
+// Calculate workers for concurrent root processing
+uint ShenandoahWorkerPolicy::calc_workers_for_conc_root_processing() {
+ uint active_workers = (_prev_conc_root_proc == 0) ? ConcGCThreads : _prev_conc_root_proc;
+ _prev_conc_root_proc =
+ WorkerPolicy::calc_active_conc_workers(ConcGCThreads,
+ active_workers,
+ Threads::number_of_non_daemon_threads());
+ return _prev_conc_root_proc;
+}
+
// Calculate workers for concurrent evacuation (concurrent GC)
uint ShenandoahWorkerPolicy::calc_workers_for_conc_evac() {
uint active_workers = (_prev_conc_evac == 0) ? ConcGCThreads : _prev_conc_evac;
--- a/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -30,6 +30,7 @@
private:
static uint _prev_par_marking;
static uint _prev_conc_marking;
+ static uint _prev_conc_root_proc;
static uint _prev_conc_evac;
static uint _prev_fullgc;
static uint _prev_degengc;
@@ -50,6 +51,9 @@
// Calculate the number of workers for final marking
static uint calc_workers_for_final_marking();
+ // Calculate workers for concurrent root processing
+ static uint calc_workers_for_conc_root_processing();
+
// Calculate workers for concurrent evacuation (concurrent GC)
static uint calc_workers_for_conc_evac();
--- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -2416,7 +2416,7 @@
if (peerEnv->is_hotspot()) {
// Only the mirror in the HotSpot heap is accessible
// through JVMCINMethodData
- oop nmethod_mirror = data->get_nmethod_mirror(nm);
+ oop nmethod_mirror = data->get_nmethod_mirror(nm, /* phantom_ref */ true);
if (nmethod_mirror != NULL) {
result = HotSpotJVMCI::wrap(nmethod_mirror);
}
@@ -2443,7 +2443,7 @@
if (data == NULL) {
JVMCI_THROW_MSG_0(IllegalArgumentException, "Cannot set HotSpotNmethod mirror for default nmethod");
}
- if (data->get_nmethod_mirror(nm) != NULL) {
+ if (data->get_nmethod_mirror(nm, /* phantom_ref */ false) != NULL) {
JVMCI_THROW_MSG_0(IllegalArgumentException, "Cannot overwrite existing HotSpotNmethod mirror for nmethod");
}
oop nmethod_mirror = HotSpotJVMCI::resolve(result);
--- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -308,7 +308,8 @@
BOXED_BOOLEAN(box, *(jbyte*) vmField.address);
assert(box.is_non_null(), "must have a box");
} else if (strcmp(vmField.typeString, "int") == 0 ||
- strcmp(vmField.typeString, "jint") == 0) {
+ strcmp(vmField.typeString, "jint") == 0 ||
+ strcmp(vmField.typeString, "uint32_t") == 0) {
BOXED_LONG(box, *(jint*) vmField.address);
assert(box.is_non_null(), "must have a box");
} else if (strcmp(vmField.typeString, "uint64_t") == 0) {
--- a/src/hotspot/share/jvmci/jvmciRuntime.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -700,11 +700,15 @@
FailedSpeculation::add_failed_speculation(nm, _failed_speculations, data, length);
}
-oop JVMCINMethodData::get_nmethod_mirror(nmethod* nm) {
+oop JVMCINMethodData::get_nmethod_mirror(nmethod* nm, bool phantom_ref) {
if (_nmethod_mirror_index == -1) {
return NULL;
}
- return nm->oop_at(_nmethod_mirror_index);
+ if (phantom_ref) {
+ return nm->oop_at_phantom(_nmethod_mirror_index);
+ } else {
+ return nm->oop_at(_nmethod_mirror_index);
+ }
}
void JVMCINMethodData::set_nmethod_mirror(nmethod* nm, oop new_mirror) {
@@ -728,7 +732,7 @@
}
void JVMCINMethodData::invalidate_nmethod_mirror(nmethod* nm) {
- oop nmethod_mirror = get_nmethod_mirror(nm);
+ oop nmethod_mirror = get_nmethod_mirror(nm, /* phantom_ref */ true);
if (nmethod_mirror == NULL) {
return;
}
@@ -1530,7 +1534,7 @@
JVMCINMethodData* data = nm->jvmci_nmethod_data();
assert(data != NULL, "must be");
if (install_default) {
- assert(!nmethod_mirror.is_hotspot() || data->get_nmethod_mirror(nm) == NULL, "must be");
+ assert(!nmethod_mirror.is_hotspot() || data->get_nmethod_mirror(nm, /* phantom_ref */ false) == NULL, "must be");
if (entry_bci == InvocationEntryBci) {
if (TieredCompilation) {
// If there is an old version we're done with it
@@ -1565,7 +1569,7 @@
InstanceKlass::cast(method->method_holder())->add_osr_nmethod(nm);
}
} else {
- assert(!nmethod_mirror.is_hotspot() || data->get_nmethod_mirror(nm) == HotSpotJVMCI::resolve(nmethod_mirror), "must be");
+ assert(!nmethod_mirror.is_hotspot() || data->get_nmethod_mirror(nm, /* phantom_ref */ false) == HotSpotJVMCI::resolve(nmethod_mirror), "must be");
}
nm->make_in_use();
}
--- a/src/hotspot/share/jvmci/jvmciRuntime.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/jvmci/jvmciRuntime.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -74,7 +74,7 @@
void invalidate_nmethod_mirror(nmethod* nm);
// Gets the mirror from nm's oops table.
- oop get_nmethod_mirror(nmethod* nm);
+ oop get_nmethod_mirror(nmethod* nm, bool phantom_ref);
// Sets the mirror in nm's oops table.
void set_nmethod_mirror(nmethod* nm, oop mirror);
--- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -691,10 +691,10 @@
#endif
-// AARCH64 is defined in closed port, too. TARGET_ARCH_aarch64 is not.
-#ifdef TARGET_ARCH_aarch64
+#ifdef AARCH64
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
+ static_field(VM_Version, _psr_info.dczid_el0, uint32_t) \
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*)
#define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \
--- a/src/hotspot/share/opto/escape.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/opto/escape.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -2346,8 +2346,7 @@
assert(opcode == Op_ConP || opcode == Op_ThreadLocal ||
opcode == Op_CastX2P || uncast_base->is_DecodeNarrowPtr() ||
(uncast_base->is_Mem() && (uncast_base->bottom_type()->isa_rawptr() != NULL)) ||
- (uncast_base->is_Proj() && uncast_base->in(0)->is_Allocate()) ||
- BarrierSet::barrier_set()->barrier_set_c2()->escape_is_barrier_node(uncast_base), "sanity");
+ (uncast_base->is_Proj() && uncast_base->in(0)->is_Allocate()), "sanity");
}
}
return base;
@@ -3085,7 +3084,6 @@
n->is_CheckCastPP() ||
n->is_EncodeP() ||
n->is_DecodeN() ||
- BarrierSet::barrier_set()->barrier_set_c2()->escape_is_barrier_node(n) ||
(n->is_ConstraintCast() && n->Opcode() == Op_CastPP)) {
if (visited.test_set(n->_idx)) {
assert(n->is_Phi(), "loops only through Phi's");
@@ -3156,7 +3154,6 @@
use->is_CheckCastPP() ||
use->is_EncodeNarrowPtr() ||
use->is_DecodeNarrowPtr() ||
- BarrierSet::barrier_set()->barrier_set_c2()->escape_is_barrier_node(use) ||
(use->is_ConstraintCast() && use->Opcode() == Op_CastPP)) {
alloc_worklist.append_if_missing(use);
#ifdef ASSERT
--- a/src/hotspot/share/opto/library_call.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/opto/library_call.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -4501,8 +4501,8 @@
ciMethod* trap_method = alloc->jvms()->method();
int trap_bci = alloc->jvms()->bci();
- if (!C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_intrinsic) &
- !C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_null_check)) {
+ if (!C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_intrinsic) &&
+ !C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_null_check)) {
// Make sure there's no store between the allocation and the
// arraycopy otherwise visible side effects could be rexecuted
// in case of deoptimization and cause incorrect execution.
--- a/src/hotspot/share/opto/type.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/opto/type.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -2109,7 +2109,7 @@
const TypeAry *a = t->is_ary();
return TypeAry::make(_elem->meet_speculative(a->_elem),
_size->xmeet(a->_size)->is_int(),
- _stable & a->_stable);
+ _stable && a->_stable);
}
case Top:
break;
@@ -3879,7 +3879,7 @@
bool subtype_exact = false;
if( tinst_klass->equals(this_klass) ) {
subtype = this_klass;
- subtype_exact = below_centerline(ptr) ? (this_xk & tinst_xk) : (this_xk | tinst_xk);
+ subtype_exact = below_centerline(ptr) ? (this_xk && tinst_xk) : (this_xk || tinst_xk);
} else if( !tinst_xk && this_klass->is_subtype_of( tinst_klass ) ) {
subtype = this_klass; // Pick subtyping class
subtype_exact = this_xk;
@@ -4361,7 +4361,7 @@
if (below_centerline(this->_ptr)) {
xk = this->_klass_is_exact;
} else {
- xk = (tap->_klass_is_exact | this->_klass_is_exact);
+ xk = (tap->_klass_is_exact || this->_klass_is_exact);
}
return make(ptr, const_oop(), tary, lazy_klass, xk, off, instance_id, speculative, depth);
case Constant: {
--- a/src/hotspot/share/prims/jvmtiEnvBase.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -1083,7 +1083,7 @@
// If the monitor has no owner, then a non-suspended contending
// thread could potentially change the state of the monitor by
// entering it. The JVM/TI spec doesn't allow this.
- if (owning_thread == NULL && !at_safepoint &
+ if (owning_thread == NULL && !at_safepoint &&
!pending_thread->is_thread_fully_suspended(true, &debug_bits)) {
if (ret.owner != NULL) {
destroy_jni_reference(calling_thread, ret.owner);
--- a/src/hotspot/share/runtime/arguments.cpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/runtime/arguments.cpp Fri Jun 21 09:05:45 2019 -0700
@@ -533,7 +533,6 @@
{ "InitialRAMFraction", JDK_Version::jdk(10), JDK_Version::undefined(), JDK_Version::undefined() },
{ "UseMembar", JDK_Version::jdk(10), JDK_Version::jdk(12), JDK_Version::undefined() },
{ "CompilationPolicyChoice", JDK_Version::jdk(13), JDK_Version::jdk(14), JDK_Version::undefined() },
- { "FailOverToOldVerifier", JDK_Version::jdk(13), JDK_Version::jdk(14), JDK_Version::undefined() },
{ "AllowJNIEnvProxy", JDK_Version::jdk(13), JDK_Version::jdk(14), JDK_Version::jdk(15) },
{ "ThreadLocalHandshakes", JDK_Version::jdk(13), JDK_Version::jdk(14), JDK_Version::jdk(15) },
{ "AllowRedefinitionToAddDeleteMethods", JDK_Version::jdk(13), JDK_Version::undefined(), JDK_Version::undefined() },
@@ -563,6 +562,7 @@
{ "ProfilerNumberOfRuntimeStubNodes", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
{ "UseImplicitStableValues", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
{ "NeedsDeoptSuspend", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "FailOverToOldVerifier", JDK_Version::undefined(), JDK_Version::jdk(14), JDK_Version::jdk(15) },
#ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
// These entries will generate build errors. Their purpose is to test the macros.
@@ -3465,14 +3465,6 @@
void Arguments::set_shared_spaces_flags() {
if (DumpSharedSpaces) {
- if (FailOverToOldVerifier) {
- // Don't fall back to the old verifier on verification failure. If a
- // class fails verification with the split verifier, it might fail the
- // CDS runtime verifier constraint check. In that case, we don't want
- // to share the class. We only archive classes that pass the split verifier.
- FLAG_SET_DEFAULT(FailOverToOldVerifier, false);
- }
-
if (RequireSharedSpaces) {
warning("Cannot dump shared archive while using shared archive");
}
--- a/src/hotspot/share/runtime/globals.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/runtime/globals.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -405,9 +405,6 @@
notproduct(bool, VerifyLastFrame, false, \
"Verify oops on last frame on entry to VM") \
\
- product(bool, FailOverToOldVerifier, true, \
- "Fail over to old verifier when split verifier fails") \
- \
product(bool, SafepointTimeout, false, \
"Time out and warn or fail after SafepointTimeoutDelay " \
"milliseconds if failed to reach safepoint") \
--- a/src/hotspot/share/runtime/vframe.inline.hpp Tue Jun 18 21:40:50 2019 -0700
+++ b/src/hotspot/share/runtime/vframe.inline.hpp Fri Jun 21 09:05:45 2019 -0700
@@ -26,6 +26,7 @@
#define SHARE_RUNTIME_VFRAME_INLINE_HPP
#include "runtime/frame.inline.hpp"
+#include "runtime/thread.inline.hpp"
#include "runtime/vframe.hpp"
inline vframeStreamCommon::vframeStreamCommon(JavaThread* thread) : _reg_map(thread, false) {
--- a/src/java.base/share/classes/com/sun/java/util/jar/pack/Constants.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/Constants.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -51,6 +51,7 @@
1.11 to 1.11.X 55,0
1.12 to 1.12.X 56,0
1.13 to 1.13.X 57,0
+ 1.14 to 1.14.X 58,0
*/
public static final Package.Version JAVA_MIN_CLASS_VERSION =
@@ -83,6 +84,9 @@
public static final Package.Version JAVA13_MAX_CLASS_VERSION =
Package.Version.of(57, 00);
+ public static final Package.Version JAVA14_MAX_CLASS_VERSION =
+ Package.Version.of(58, 00);
+
public static final int JAVA_PACKAGE_MAGIC = 0xCAFED00D;
public static final Package.Version JAVA5_PACKAGE_VERSION =
--- a/src/java.base/share/classes/java/lang/Integer.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/lang/Integer.java Fri Jun 21 09:05:45 2019 -0700
@@ -347,59 +347,53 @@
int chars = Math.max(((mag + (shift - 1)) / shift), 1);
if (COMPACT_STRINGS) {
byte[] buf = new byte[chars];
- formatUnsignedInt(val, shift, buf, 0, chars);
+ formatUnsignedInt(val, shift, buf, chars);
return new String(buf, LATIN1);
} else {
byte[] buf = new byte[chars * 2];
- formatUnsignedIntUTF16(val, shift, buf, 0, chars);
+ formatUnsignedIntUTF16(val, shift, buf, chars);
return new String(buf, UTF16);
}
}
/**
- * Format an {@code int} (treated as unsigned) into a character buffer. If
+ * Format an {@code int} (treated as unsigned) into a byte buffer (LATIN1 version). If
* {@code len} exceeds the formatted ASCII representation of {@code val},
* {@code buf} will be padded with leading zeroes.
*
* @param val the unsigned int to format
* @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
- * @param buf the character buffer to write to
- * @param offset the offset in the destination buffer to start at
+ * @param buf the byte buffer to write to
* @param len the number of characters to write
*/
- static void formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
- // assert shift > 0 && shift <=5 : "Illegal shift value";
- // assert offset >= 0 && offset < buf.length : "illegal offset";
- // assert len > 0 && (offset + len) <= buf.length : "illegal length";
- int charPos = offset + len;
- int radix = 1 << shift;
- int mask = radix - 1;
- do {
- buf[--charPos] = Integer.digits[val & mask];
- val >>>= shift;
- } while (charPos > offset);
- }
-
- /** byte[]/LATIN1 version */
- static void formatUnsignedInt(int val, int shift, byte[] buf, int offset, int len) {
- int charPos = offset + len;
+ private static void formatUnsignedInt(int val, int shift, byte[] buf, int len) {
+ int charPos = len;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = (byte)Integer.digits[val & mask];
val >>>= shift;
- } while (charPos > offset);
+ } while (charPos > 0);
}
- /** byte[]/UTF16 version */
- private static void formatUnsignedIntUTF16(int val, int shift, byte[] buf, int offset, int len) {
- int charPos = offset + len;
+ /**
+ * Format an {@code int} (treated as unsigned) into a byte buffer (UTF16 version). If
+ * {@code len} exceeds the formatted ASCII representation of {@code val},
+ * {@code buf} will be padded with leading zeroes.
+ *
+ * @param val the unsigned int to format
+ * @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
+ * @param buf the byte buffer to write to
+ * @param len the number of characters to write
+ */
+ private static void formatUnsignedIntUTF16(int val, int shift, byte[] buf, int len) {
+ int charPos = len;
int radix = 1 << shift;
int mask = radix - 1;
do {
StringUTF16.putChar(buf, --charPos, Integer.digits[val & mask]);
val >>>= shift;
- } while (charPos > offset);
+ } while (charPos > 0);
}
static final byte[] DigitTens = {
@@ -698,7 +692,7 @@
*/
public static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix)
throws NumberFormatException {
- s = Objects.requireNonNull(s);
+ Objects.requireNonNull(s);
if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) {
throw new IndexOutOfBoundsException();
@@ -881,7 +875,7 @@
*/
public static int parseUnsignedInt(CharSequence s, int beginIndex, int endIndex, int radix)
throws NumberFormatException {
- s = Objects.requireNonNull(s);
+ Objects.requireNonNull(s);
if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) {
throw new IndexOutOfBoundsException();
--- a/src/java.base/share/classes/java/lang/Long.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/lang/Long.java Fri Jun 21 09:05:45 2019 -0700
@@ -398,19 +398,17 @@
}
/**
- * Format a long (treated as unsigned) into a character buffer. If
+ * Format a long (treated as unsigned) into a byte buffer (LATIN1 version). If
* {@code len} exceeds the formatted ASCII representation of {@code val},
* {@code buf} will be padded with leading zeroes.
*
* @param val the unsigned long to format
* @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
- * @param buf the character buffer to write to
+ * @param buf the byte buffer to write to
* @param offset the offset in the destination buffer to start at
* @param len the number of characters to write
*/
-
- /** byte[]/LATIN1 version */
- static void formatUnsignedLong0(long val, int shift, byte[] buf, int offset, int len) {
+ private static void formatUnsignedLong0(long val, int shift, byte[] buf, int offset, int len) {
int charPos = offset + len;
int radix = 1 << shift;
int mask = radix - 1;
@@ -420,7 +418,17 @@
} while (charPos > offset);
}
- /** byte[]/UTF16 version */
+ /**
+ * Format a long (treated as unsigned) into a byte buffer (UTF16 version). If
+ * {@code len} exceeds the formatted ASCII representation of {@code val},
+ * {@code buf} will be padded with leading zeroes.
+ *
+ * @param val the unsigned long to format
+ * @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
+ * @param buf the byte buffer to write to
+ * @param offset the offset in the destination buffer to start at
+ * @param len the number of characters to write
+ */
private static void formatUnsignedLong0UTF16(long val, int shift, byte[] buf, int offset, int len) {
int charPos = offset + len;
int radix = 1 << shift;
@@ -739,7 +747,7 @@
*/
public static long parseLong(CharSequence s, int beginIndex, int endIndex, int radix)
throws NumberFormatException {
- s = Objects.requireNonNull(s);
+ Objects.requireNonNull(s);
if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) {
throw new IndexOutOfBoundsException();
@@ -985,7 +993,7 @@
*/
public static long parseUnsignedLong(CharSequence s, int beginIndex, int endIndex, int radix)
throws NumberFormatException {
- s = Objects.requireNonNull(s);
+ Objects.requireNonNull(s);
if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) {
throw new IndexOutOfBoundsException();
--- a/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -33,6 +33,7 @@
import sun.net.ResourceManager;
import sun.net.ext.ExtendedSocketOptions;
+import sun.net.util.IPAddressUtil;
import sun.security.action.GetPropertyAction;
/**
@@ -110,6 +111,9 @@
*/
protected synchronized void bind(int lport, InetAddress laddr)
throws SocketException {
+ if (laddr.isLinkLocalAddress()) {
+ laddr = IPAddressUtil.toScopedAddress(laddr);
+ }
bind0(lport, laddr);
}
@@ -121,7 +125,19 @@
* destination address to send the packet to.
* @param p the packet to be sent.
*/
- protected abstract void send(DatagramPacket p) throws IOException;
+ protected void send(DatagramPacket p) throws IOException {
+ InetAddress orig = p.getAddress();
+ if (orig.isLinkLocalAddress()) {
+ InetAddress scoped = IPAddressUtil.toScopedAddress(orig);
+ if (orig != scoped) {
+ p = new DatagramPacket(p.getData(), p.getOffset(),
+ p.getLength(), scoped, p.getPort());
+ }
+ }
+ send0(p);
+ }
+
+ protected abstract void send0(DatagramPacket p) throws IOException;
/**
* Connects a datagram socket to a remote destination. This associates the remote
@@ -131,6 +147,9 @@
* @param port the remote port number
*/
protected void connect(InetAddress address, int port) throws SocketException {
+ if (address.isLinkLocalAddress()) {
+ address = IPAddressUtil.toScopedAddress(address);
+ }
connect0(address, port);
connectedAddress = address;
connectedPort = port;
--- a/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -43,6 +43,7 @@
import sun.net.PlatformSocketImpl;
import sun.net.ResourceManager;
import sun.net.ext.ExtendedSocketOptions;
+import sun.net.util.IPAddressUtil;
import sun.net.util.SocketExceptions;
/**
@@ -157,8 +158,12 @@
boolean connected = false;
try {
InetAddress address = InetAddress.getByName(host);
+ // recording this.address as supplied by caller before calling connect
+ this.address = address;
this.port = port;
- this.address = address;
+ if (address.isLinkLocalAddress()) {
+ address = IPAddressUtil.toScopedAddress(address);
+ }
connectToAddress(address, port, timeout);
connected = true;
@@ -182,8 +187,12 @@
* @param port the specified port
*/
protected void connect(InetAddress address, int port) throws IOException {
+ // recording this.address as supplied by caller before calling connect
+ this.address = address;
this.port = port;
- this.address = address;
+ if (address.isLinkLocalAddress()) {
+ address = IPAddressUtil.toScopedAddress(address);
+ }
try {
connectToAddress(address, port, timeout);
@@ -215,10 +224,14 @@
InetSocketAddress addr = (InetSocketAddress) address;
if (addr.isUnresolved())
throw new UnknownHostException(addr.getHostName());
+ // recording this.address as supplied by caller before calling connect
+ InetAddress ia = addr.getAddress();
+ this.address = ia;
this.port = addr.getPort();
- this.address = addr.getAddress();
-
- connectToAddress(this.address, port, timeout);
+ if (ia.isLinkLocalAddress()) {
+ ia = IPAddressUtil.toScopedAddress(ia);
+ }
+ connectToAddress(ia, port, timeout);
connected = true;
} finally {
if (!connected) {
@@ -546,6 +559,9 @@
NetHooks.beforeTcpBind(fd, address, lport);
}
}
+ if (address.isLinkLocalAddress()) {
+ address = IPAddressUtil.toScopedAddress(address);
+ }
socketBind(address, lport);
isBound = true;
}
--- a/src/java.base/share/classes/java/net/Inet6Address.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/net/Inet6Address.java Fri Jun 21 09:05:45 2019 -0700
@@ -176,11 +176,6 @@
class Inet6Address extends InetAddress {
static final int INADDRSZ = 16;
- /*
- * cached scope_id - for link-local address use only.
- */
- private transient int cached_scope_id; // 0
-
private class Inet6AddressHolder {
private Inet6AddressHolder() {
--- a/src/java.base/share/classes/java/security/cert/X509CertSelector.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/security/cert/X509CertSelector.java Fri Jun 21 09:05:45 2019 -0700
@@ -2115,8 +2115,11 @@
if (certSubjectKeyID == null ||
!Arrays.equals(subjectKeyID, certSubjectKeyID)) {
if (debug != null) {
- debug.println("X509CertSelector.match: "
- + "subject key IDs don't match");
+ debug.println("X509CertSelector.match: subject key IDs " +
+ "don't match\nX509CertSelector.match: subjectKeyID: " +
+ Arrays.toString(subjectKeyID) +
+ "\nX509CertSelector.match: certSubjectKeyID: " +
+ Arrays.toString(certSubjectKeyID));
}
return false;
}
--- a/src/java.base/share/classes/java/time/format/DateTimeFormatter.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/time/format/DateTimeFormatter.java Fri Jun 21 09:05:45 2019 -0700
@@ -396,15 +396,16 @@
* 'Z' when the offset to be output would be zero, whereas pattern letter 'x'
* (lower case) will output '+00', '+0000', or '+00:00'.
* <p>
- * <b>Offset O</b>: This formats the localized offset based on the number of
- * pattern letters. One letter outputs the {@linkplain TextStyle#SHORT short}
- * form of the localized offset, which is localized offset text, such as 'GMT',
- * with hour without leading zero, optional 2-digit minute and second if
- * non-zero, and colon, for example 'GMT+8'. Four letters outputs the
- * {@linkplain TextStyle#FULL full} form, which is localized offset text,
- * such as 'GMT, with 2-digit hour and minute field, optional second field
- * if non-zero, and colon, for example 'GMT+08:00'. Any other count of letters
- * throws {@code IllegalArgumentException}.
+ * <b>Offset O</b>: With a non-zero offset, this formats the localized offset
+ * based on the number of pattern letters. One letter outputs the
+ * {@linkplain TextStyle#SHORT short} form of the localized offset, which is
+ * localized offset text, such as 'GMT', with hour without leading zero, optional
+ * 2-digit minute and second if non-zero, and colon, for example 'GMT+8'. Four
+ * letters outputs the {@linkplain TextStyle#FULL full} form, which is localized
+ * offset text, such as 'GMT, with 2-digit hour and minute field, optional second
+ * field if non-zero, and colon, for example 'GMT+08:00'. If the offset is zero,
+ * only localized text is output. Any other count of letters throws
+ * {@code IllegalArgumentException}.
* <p>
* <b>Offset Z</b>: This formats the offset based on the number of pattern
* letters. One, two or three letters outputs the hour and minute, without a
--- a/src/java.base/share/classes/java/util/HashMap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/util/HashMap.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -911,6 +911,74 @@
return ks;
}
+ /**
+ * Prepares the array for {@link Collection#toArray(Object[])} implementation.
+ * If supplied array is smaller than this map size, a new array is allocated.
+ * If supplied array is bigger than this map size, a null is written at size index.
+ *
+ * @param a an original array passed to {@code toArray()} method
+ * @param <T> type of array elements
+ * @return an array ready to be filled and returned from {@code toArray()} method.
+ */
+ @SuppressWarnings("unchecked")
+ final <T> T[] prepareArray(T[] a) {
+ int size = this.size;
+ if (a.length < size) {
+ return (T[]) java.lang.reflect.Array
+ .newInstance(a.getClass().getComponentType(), size);
+ }
+ if (a.length > size) {
+ a[size] = null;
+ }
+ return a;
+ }
+
+ /**
+ * Fills an array with this map keys and returns it. This method assumes
+ * that input array is big enough to fit all the keys. Use
+ * {@link #prepareArray(Object[])} to ensure this.
+ *
+ * @param a an array to fill
+ * @param <T> type of array elements
+ * @return supplied array
+ */
+ <T> T[] keysToArray(T[] a) {
+ Object[] r = a;
+ Node<K,V>[] tab;
+ int idx = 0;
+ if (size > 0 && (tab = table) != null) {
+ for (Node<K,V> e : tab) {
+ for (; e != null; e = e.next) {
+ r[idx++] = e.key;
+ }
+ }
+ }
+ return a;
+ }
+
+ /**
+ * Fills an array with this map values and returns it. This method assumes
+ * that input array is big enough to fit all the values. Use
+ * {@link #prepareArray(Object[])} to ensure this.
+ *
+ * @param a an array to fill
+ * @param <T> type of array elements
+ * @return supplied array
+ */
+ <T> T[] valuesToArray(T[] a) {
+ Object[] r = a;
+ Node<K,V>[] tab;
+ int idx = 0;
+ if (size > 0 && (tab = table) != null) {
+ for (Node<K,V> e : tab) {
+ for (; e != null; e = e.next) {
+ r[idx++] = e.value;
+ }
+ }
+ }
+ return a;
+ }
+
final class KeySet extends AbstractSet<K> {
public final int size() { return size; }
public final void clear() { HashMap.this.clear(); }
@@ -922,6 +990,15 @@
public final Spliterator<K> spliterator() {
return new KeySpliterator<>(HashMap.this, 0, -1, 0, 0);
}
+
+ public Object[] toArray() {
+ return keysToArray(new Object[size]);
+ }
+
+ public <T> T[] toArray(T[] a) {
+ return keysToArray(prepareArray(a));
+ }
+
public final void forEach(Consumer<? super K> action) {
Node<K,V>[] tab;
if (action == null)
@@ -970,6 +1047,15 @@
public final Spliterator<V> spliterator() {
return new ValueSpliterator<>(HashMap.this, 0, -1, 0, 0);
}
+
+ public Object[] toArray() {
+ return valuesToArray(new Object[size]);
+ }
+
+ public <T> T[] toArray(T[] a) {
+ return valuesToArray(prepareArray(a));
+ }
+
public final void forEach(Consumer<? super V> action) {
Node<K,V>[] tab;
if (action == null)
--- a/src/java.base/share/classes/java/util/HashSet.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/util/HashSet.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -358,4 +358,14 @@
public Spliterator<E> spliterator() {
return new HashMap.KeySpliterator<>(map, 0, -1, 0, 0);
}
+
+ @Override
+ public Object[] toArray() {
+ return map.keysToArray(new Object[map.size()]);
+ }
+
+ @Override
+ public <T> T[] toArray(T[] a) {
+ return map.keysToArray(map.prepareArray(a));
+ }
}
--- a/src/java.base/share/classes/java/util/LinkedHashMap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/java/util/LinkedHashMap.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -536,6 +536,26 @@
return ks;
}
+ @Override
+ final <T> T[] keysToArray(T[] a) {
+ Object[] r = a;
+ int idx = 0;
+ for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after) {
+ r[idx++] = e.key;
+ }
+ return a;
+ }
+
+ @Override
+ final <T> T[] valuesToArray(T[] a) {
+ Object[] r = a;
+ int idx = 0;
+ for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after) {
+ r[idx++] = e.value;
+ }
+ return a;
+ }
+
final class LinkedKeySet extends AbstractSet<K> {
public final int size() { return size; }
public final void clear() { LinkedHashMap.this.clear(); }
@@ -551,6 +571,15 @@
Spliterator.ORDERED |
Spliterator.DISTINCT);
}
+
+ public Object[] toArray() {
+ return keysToArray(new Object[size]);
+ }
+
+ public <T> T[] toArray(T[] a) {
+ return keysToArray(prepareArray(a));
+ }
+
public final void forEach(Consumer<? super K> action) {
if (action == null)
throw new NullPointerException();
@@ -600,6 +629,15 @@
return Spliterators.spliterator(this, Spliterator.SIZED |
Spliterator.ORDERED);
}
+
+ public Object[] toArray() {
+ return valuesToArray(new Object[size]);
+ }
+
+ public <T> T[] toArray(T[] a) {
+ return valuesToArray(prepareArray(a));
+ }
+
public final void forEach(Consumer<? super V> action) {
if (action == null)
throw new NullPointerException();
--- a/src/java.base/share/classes/jdk/internal/module/ModuleInfo.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/jdk/internal/module/ModuleInfo.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -63,7 +63,7 @@
public final class ModuleInfo {
private final int JAVA_MIN_SUPPORTED_VERSION = 53;
- private final int JAVA_MAX_SUPPORTED_VERSION = 57;
+ private final int JAVA_MAX_SUPPORTED_VERSION = 58;
private static final JavaLangModuleAccess JLMA
= SharedSecrets.getJavaLangModuleAccess();
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java Fri Jun 21 09:05:45 2019 -0700
@@ -210,7 +210,7 @@
b = classFileBuffer;
// Check the class' major_version. This field is after the magic and minor_version fields, which
// use 4 and 2 bytes respectively.
- if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V13) {
+ if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V14) {
throw new IllegalArgumentException(
"Unsupported class file major version " + readShort(classFileOffset + 6));
}
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java Fri Jun 21 09:05:45 2019 -0700
@@ -96,6 +96,7 @@
int V11 = 0 << 16 | 55;
int V12 = 0 << 16 | 56;
int V13 = 0 << 16 | 57;
+ int V14 = 0 << 16 | 58;
/**
* Version flag indicating that the class is using 'preview' features.
--- a/src/java.base/share/classes/sun/net/util/IPAddressUtil.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/net/util/IPAddressUtil.java Fri Jun 21 09:05:45 2019 -0700
@@ -25,6 +25,20 @@
package sun.net.util;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
+import java.security.PrivilegedActionException;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
public class IPAddressUtil {
private static final int INADDR4SZ = 4;
private static final int INADDR16SZ = 16;
@@ -287,4 +301,75 @@
}
return false;
}
+ /**
+ * Mapping from unscoped local Inet(6)Address to the same address
+ * including the correct scope-id, determined from NetworkInterface.
+ */
+ private final static ConcurrentHashMap<InetAddress,InetAddress>
+ cache = new ConcurrentHashMap<>();
+
+ /**
+ * Returns a scoped version of the supplied local, link-local ipv6 address
+ * if that scope-id can be determined from local NetworkInterfaces.
+ * If the address already has a scope-id or if the address is not local, ipv6
+ * or link local, then the original address is returned.
+ *
+ * @param addr
+ * @exception SocketException if the given ipv6 link local address is found
+ * on more than one local interface
+ * @return
+ */
+ public static InetAddress toScopedAddress(InetAddress address)
+ throws SocketException {
+
+ if (address instanceof Inet6Address && address.isLinkLocalAddress()
+ && ((Inet6Address) address).getScopeId() == 0) {
+
+ InetAddress cached = null;
+ try {
+ cached = cache.computeIfAbsent(address, k -> findScopedAddress(k));
+ } catch (UncheckedIOException e) {
+ throw (SocketException)e.getCause();
+ }
+ return cached != null ? cached : address;
+ } else {
+ return address;
+ }
+ }
+
+ /**
+ * Same as above for InetSocketAddress
+ */
+ public static InetSocketAddress toScopedAddress(InetSocketAddress address)
+ throws SocketException {
+ InetAddress addr;
+ InetAddress orig = address.getAddress();
+ if ((addr = toScopedAddress(orig)) == orig) {
+ return address;
+ } else {
+ return new InetSocketAddress(addr, address.getPort());
+ }
+ }
+
+ private static InetAddress findScopedAddress(InetAddress address) {
+ PrivilegedExceptionAction<List<InetAddress>> pa = () -> NetworkInterface.networkInterfaces()
+ .flatMap(NetworkInterface::inetAddresses)
+ .filter(a -> (a instanceof Inet6Address)
+ && address.equals(a)
+ && ((Inet6Address) a).getScopeId() != 0)
+ .collect(Collectors.toList());
+ List<InetAddress> result;
+ try {
+ result = AccessController.doPrivileged(pa);
+ var sz = result.size();
+ if (sz == 0)
+ return null;
+ if (sz > 1)
+ throw new UncheckedIOException(new SocketException(
+ "Duplicate link local addresses: must specify scope-id"));
+ return result.get(0);
+ } catch (PrivilegedActionException pae) {
+ return null;
+ }
+ }
}
--- a/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -57,6 +57,7 @@
import sun.net.ResourceManager;
import sun.net.ext.ExtendedSocketOptions;
+import sun.net.util.IPAddressUtil;
/**
* An implementation of DatagramChannels.
@@ -527,14 +528,16 @@
} else {
// not connected
SecurityManager sm = System.getSecurityManager();
+ InetAddress ia = isa.getAddress();
if (sm != null) {
- InetAddress ia = isa.getAddress();
if (ia.isMulticastAddress()) {
sm.checkMulticast(ia);
} else {
sm.checkConnect(ia.getHostAddress(), isa.getPort());
}
}
+ if (ia.isLinkLocalAddress())
+ isa = IPAddressUtil.toScopedAddress(isa);
n = send(fd, src, isa);
if (blocking) {
while (IOStatus.okayToRetry(n) && isOpen()) {
--- a/src/java.base/share/classes/sun/nio/ch/Net.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/Net.java Fri Jun 21 09:05:45 2019 -0700
@@ -50,6 +50,7 @@
import java.util.Enumeration;
import sun.net.ext.ExtendedSocketOptions;
+import sun.net.util.IPAddressUtil;
import sun.security.action.GetPropertyAction;
public class Net {
@@ -462,6 +463,9 @@
{
boolean preferIPv6 = isIPv6Available() &&
(family != StandardProtocolFamily.INET);
+ if (addr.isLinkLocalAddress()) {
+ addr = IPAddressUtil.toScopedAddress(addr);
+ }
bind0(fd, preferIPv6, exclusiveBind, addr, port);
}
@@ -481,6 +485,9 @@
static int connect(ProtocolFamily family, FileDescriptor fd, InetAddress remote, int remotePort)
throws IOException
{
+ if (remote.isLinkLocalAddress()) {
+ remote = IPAddressUtil.toScopedAddress(remote);
+ }
boolean preferIPv6 = isIPv6Available() &&
(family != StandardProtocolFamily.INET);
return connect0(preferIPv6, fd, remote, remotePort);
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, 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
@@ -145,14 +145,20 @@
result.append(type.getName());
result.append('(');
boolean firstMember = true;
- for (Map.Entry<String, Object> e : memberValues.entrySet()) {
+ Set<Map.Entry<String, Object>> entries = memberValues.entrySet();
+ boolean loneValue = entries.size() == 1;
+ for (Map.Entry<String, Object> e : entries) {
if (firstMember)
firstMember = false;
else
result.append(", ");
- result.append(e.getKey());
- result.append('=');
+ String key = e.getKey();
+ if (!loneValue || !"value".equals(key)) {
+ result.append(key);
+ result.append('=');
+ }
+ loneValue = false;
result.append(memberValueToString(e.getValue()));
}
result.append(')');
@@ -178,6 +184,8 @@
return toSourceString((float) value);
else if (type == Long.class)
return toSourceString((long) value);
+ else if (type == Byte.class)
+ return toSourceString((byte) value);
else
return value.toString();
} else {
@@ -221,14 +229,14 @@
*/
private static String toSourceString(Class<?> clazz) {
Class<?> finalComponent = clazz;
- StringBuilder arrayBackets = new StringBuilder();
+ StringBuilder arrayBrackets = new StringBuilder();
while(finalComponent.isArray()) {
finalComponent = finalComponent.getComponentType();
- arrayBackets.append("[]");
+ arrayBrackets.append("[]");
}
- return finalComponent.getName() + arrayBackets.toString() + ".class" ;
+ return finalComponent.getName() + arrayBrackets.toString() + ".class";
}
private static String toSourceString(float f) {
@@ -256,18 +264,44 @@
private static String toSourceString(char c) {
StringBuilder sb = new StringBuilder(4);
sb.append('\'');
- if (c == '\'')
- sb.append("\\'");
- else
- sb.append(c);
- return sb.append('\'')
- .toString();
+ sb.append(quote(c));
+ return sb.append('\'') .toString();
+ }
+
+ /**
+ * Escapes a character if it has an escape sequence or is
+ * non-printable ASCII. Leaves non-ASCII characters alone.
+ */
+ private static String quote(char ch) {
+ switch (ch) {
+ case '\b': return "\\b";
+ case '\f': return "\\f";
+ case '\n': return "\\n";
+ case '\r': return "\\r";
+ case '\t': return "\\t";
+ case '\'': return "\\'";
+ case '\"': return "\\\"";
+ case '\\': return "\\\\";
+ default:
+ return (isPrintableAscii(ch))
+ ? String.valueOf(ch)
+ : String.format("\\u%04x", (int) ch);
+ }
+ }
+
+ /**
+ * Is a character printable ASCII?
+ */
+ private static boolean isPrintableAscii(char ch) {
+ return ch >= ' ' && ch <= '~';
+ }
+
+ private static String toSourceString(byte b) {
+ return String.format("(byte)0x%02x", b);
}
private static String toSourceString(long ell) {
- String str = String.valueOf(ell);
- return (ell < Integer.MIN_VALUE || ell > Integer.MAX_VALUE)
- ? (str + 'L') : str;
+ return String.valueOf(ell) + "L";
}
/**
@@ -277,9 +311,9 @@
private static String toSourceString(String s) {
StringBuilder sb = new StringBuilder();
sb.append('"');
- // Escape embedded quote characters, if present, but don't do
- // anything more heroic.
- sb.append(s.replace("\"", "\\\""));
+ for (int i = 0; i < s.length(); i++) {
+ sb.append(quote(s.charAt(i)));
+ }
sb.append('"');
return sb.toString();
}
@@ -287,7 +321,7 @@
private static Stream<String> convert(byte[] values) {
List<String> list = new ArrayList<>(values.length);
for (byte b : values)
- list.add(Byte.toString(b));
+ list.add(toSourceString(b));
return list.stream();
}
--- a/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -38,6 +38,7 @@
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.BiFunction;
import javax.net.ssl.HandshakeCompletedListener;
@@ -618,27 +619,76 @@
// Need a lock here so that the user_canceled alert and the
// close_notify alert can be delivered together.
- conContext.outputRecord.recordLock.lock();
- try {
+ int linger = getSoLinger();
+ if (linger >= 0) {
+ // don't wait more than SO_LINGER for obtaining the
+ // the lock.
+ //
+ // keep and clear the current thread interruption status.
+ boolean interrupted = Thread.interrupted();
try {
- // send a user_canceled alert if needed.
- if (useUserCanceled) {
- conContext.warning(Alert.USER_CANCELED);
+ if (conContext.outputRecord.recordLock.tryLock() ||
+ conContext.outputRecord.recordLock.tryLock(
+ linger, TimeUnit.SECONDS)) {
+ try {
+ handleClosedNotifyAlert(useUserCanceled);
+ } finally {
+ conContext.outputRecord.recordLock.unlock();
+ }
+ } else {
+ // For layered, non-autoclose sockets, we are not
+ // able to bring them into a usable state, so we
+ // treat it as fatal error.
+ if (!super.isOutputShutdown()) {
+ if (isLayered() && !autoClose) {
+ throw new SSLException(
+ "SO_LINGER timeout, " +
+ "close_notify message cannot be sent.");
+ } else {
+ super.shutdownOutput();
+ if (SSLLogger.isOn && SSLLogger.isOn("ssl")) {
+ SSLLogger.warning(
+ "SSLSocket output duplex close failed: " +
+ "SO_LINGER timeout, " +
+ "close_notify message cannot be sent.");
+ }
+ }
+ }
+
+ // RFC2246 requires that the session becomes
+ // unresumable if any connection is terminated
+ // without proper close_notify messages with
+ // level equal to warning.
+ //
+ // RFC4346 no longer requires that a session not be
+ // resumed if failure to properly close a connection.
+ //
+ // We choose to make the session unresumable if
+ // failed to send the close_notify message.
+ //
+ conContext.conSession.invalidate();
+ if (SSLLogger.isOn && SSLLogger.isOn("ssl")) {
+ SSLLogger.warning(
+ "Invalidate the session: SO_LINGER timeout, " +
+ "close_notify message cannot be sent.");
+ }
}
+ } catch (InterruptedException ex) {
+ // keep interrupted status
+ interrupted = true;
+ }
- // send a close_notify alert
- conContext.warning(Alert.CLOSE_NOTIFY);
+ // restore the interrupted status
+ if (interrupted) {
+ Thread.currentThread().interrupt();
+ }
+ } else {
+ conContext.outputRecord.recordLock.lock();
+ try {
+ handleClosedNotifyAlert(useUserCanceled);
} finally {
- if (!conContext.isOutboundClosed()) {
- conContext.outputRecord.close();
- }
-
- if ((autoClose || !isLayered()) && !super.isOutputShutdown()) {
- super.shutdownOutput();
- }
+ conContext.outputRecord.recordLock.unlock();
}
- } finally {
- conContext.outputRecord.recordLock.unlock();
}
if (!isInputShutdown()) {
@@ -646,6 +696,28 @@
}
}
+ private void handleClosedNotifyAlert(
+ boolean useUserCanceled) throws IOException {
+ try {
+ // send a user_canceled alert if needed.
+ if (useUserCanceled) {
+ conContext.warning(Alert.USER_CANCELED);
+ }
+
+ // send a close_notify alert
+ conContext.warning(Alert.CLOSE_NOTIFY);
+ } finally {
+ if (!conContext.isOutboundClosed()) {
+ conContext.outputRecord.close();
+ }
+
+ if (!super.isOutputShutdown() &&
+ (autoClose || !isLayered())) {
+ super.shutdownOutput();
+ }
+ }
+ }
+
/**
* Duplex close, start from closing inbound.
*
--- a/src/java.base/share/classes/sun/security/ssl/SignatureScheme.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/security/ssl/SignatureScheme.java Fri Jun 21 09:05:45 2019 -0700
@@ -39,6 +39,7 @@
import java.util.List;
import java.util.Set;
import sun.security.ssl.NamedGroup.NamedGroupType;
+import sun.security.ssl.SupportedGroupsExtension.SupportedGroups;
import sun.security.ssl.X509Authentication.X509Possession;
import sun.security.util.KeyUtil;
import sun.security.util.SignatureUtil;
@@ -440,6 +441,39 @@
ss.namedGroup == NamedGroup.valueOf(params)) {
return ss;
}
+
+ if (SSLLogger.isOn &&
+ SSLLogger.isOn("ssl,handshake,verbose")) {
+ SSLLogger.finest(
+ "Ignore the signature algorithm (" + ss +
+ "), unsupported EC parameter spec: " + params);
+ }
+ } else if ("EC".equals(ss.keyAlgorithm)) {
+ // Must be a legacy signature algorithm, which does not
+ // specify the associated named groups. The connection
+ // cannot be established if the peer cannot recognize
+ // the named group used for the signature. RFC 8446
+ // does not define countermeasures for the corner cases.
+ // In order to mitigate the impact, we choose to check
+ // against the local supported named groups. The risk
+ // should be minimal as applications should not use
+ // unsupported named groups for its certificates.
+ ECParameterSpec params =
+ x509Possession.getECParameterSpec();
+ if (params != null) {
+ NamedGroup keyGroup = NamedGroup.valueOf(params);
+ if (keyGroup != null &&
+ SupportedGroups.isSupported(keyGroup)) {
+ return ss;
+ }
+ }
+
+ if (SSLLogger.isOn &&
+ SSLLogger.isOn("ssl,handshake,verbose")) {
+ SSLLogger.finest(
+ "Ignore the legacy signature algorithm (" + ss +
+ "), unsupported EC parameter spec: " + params);
+ }
} else {
return ss;
}
--- a/src/java.base/share/classes/sun/security/ssl/X509Authentication.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/security/ssl/X509Authentication.java Fri Jun 21 09:05:45 2019 -0700
@@ -69,7 +69,7 @@
final String keyType;
final SSLPossessionGenerator possessionGenerator;
- X509Authentication(String keyType,
+ private X509Authentication(String keyType,
SSLPossessionGenerator possessionGenerator) {
this.keyType = keyType;
this.possessionGenerator = possessionGenerator;
@@ -326,10 +326,12 @@
return null;
}
- // For ECC certs, check whether we support the EC domain
- // parameters. If the client sent a SupportedEllipticCurves
- // ClientHello extension, check against that too.
- if (keyType.equals("EC")) {
+ // For TLS 1.2 and prior versions, the public key of a EC cert
+ // MUST use a curve and point format supported by the client.
+ // But for TLS 1.3, signature algorithms are negotiated
+ // independently via the "signature_algorithms" extension.
+ if (!shc.negotiatedProtocol.useTLS13PlusSpec() &&
+ keyType.equals("EC")) {
if (!(serverPublicKey instanceof ECPublicKey)) {
if (SSLLogger.isOn && SSLLogger.isOn("ssl")) {
SSLLogger.warning(serverAlias +
@@ -339,8 +341,9 @@
}
// For ECC certs, check whether we support the EC domain
- // parameters. If the client sent a SupportedEllipticCurves
- // ClientHello extension, check against that too.
+ // parameters. If the client sent a supported_groups
+ // ClientHello extension, check against that too for
+ // TLS 1.2 and prior versions.
ECParameterSpec params =
((ECPublicKey)serverPublicKey).getParams();
NamedGroup namedGroup = NamedGroup.valueOf(params);
--- a/src/java.base/share/classes/sun/security/tools/keytool/Main.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Main.java Fri Jun 21 09:05:45 2019 -0700
@@ -2418,9 +2418,9 @@
out.println(form.format(source));
out.println();
- for (Enumeration<String> e = keyStore.aliases();
- e.hasMoreElements(); ) {
- String alias = e.nextElement();
+ List<String> aliases = Collections.list(keyStore.aliases());
+ aliases.sort(String::compareTo);
+ for (String alias : aliases) {
doPrintEntry("<" + alias + ">", alias, out);
if (verbose || rfc) {
out.println(rb.getString("NEWLINE"));
--- a/src/java.base/share/classes/sun/security/util/CurveDB.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/classes/sun/security/util/CurveDB.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -68,7 +68,7 @@
return spec;
}
- return nameMap.get(name);
+ return nameMap.get(name.toLowerCase(Locale.ENGLISH));
}
// Return EC parameters for the specified field size. If there are known
@@ -151,7 +151,8 @@
String[] commonNames = nameSplitPattern.split(name);
for (String commonName : commonNames) {
- if (nameMap.put(commonName.trim(), params) != null) {
+ if (nameMap.put(commonName.trim().toLowerCase(Locale.ENGLISH),
+ params) != null) {
throw new RuntimeException("Duplication name: " + commonName);
}
}
--- a/src/java.base/share/native/libnet/Inet6Address.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/native/libnet/Inet6Address.c Fri Jun 21 09:05:45 2019 -0700
@@ -37,7 +37,6 @@
jfieldID ia6_ipaddressID;
jfieldID ia6_scopeidID;
-jfieldID ia6_cachedscopeidID;
jfieldID ia6_scopeidsetID;
jfieldID ia6_scopeifnameID;
jmethodID ia6_ctrID;
@@ -65,8 +64,6 @@
CHECK_NULL(ia6_ipaddressID);
ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I");
CHECK_NULL(ia6_scopeidID);
- ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I");
- CHECK_NULL(ia6_cachedscopeidID);
ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z");
CHECK_NULL(ia6_scopeidsetID);
ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;");
--- a/src/java.base/share/native/libnet/net_util.h Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/share/native/libnet/net_util.h Fri Jun 21 09:05:45 2019 -0700
@@ -107,7 +107,6 @@
extern jfieldID ia6_holder6ID;
extern jfieldID ia6_ipaddressID;
extern jfieldID ia6_scopeidID;
-extern jfieldID ia6_cachedscopeidID;
extern jfieldID ia6_scopeidsetID;
extern jfieldID ia6_scopeifnameID;
extern jmethodID ia6_ctrID;
--- a/src/java.base/unix/classes/java/net/PlainDatagramSocketImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/classes/java/net/PlainDatagramSocketImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -57,7 +57,7 @@
protected synchronized native void bind0(int lport, InetAddress laddr)
throws SocketException;
- protected native void send(DatagramPacket p) throws IOException;
+ protected native void send0(DatagramPacket p) throws IOException;
protected synchronized native int peek(InetAddress i) throws IOException;
--- a/src/java.base/unix/native/libjava/ProcessImpl_md.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/native/libjava/ProcessImpl_md.c Fri Jun 21 09:05:45 2019 -0700
@@ -354,6 +354,27 @@
free(errmsg);
}
+/**
+ * Throws an IOException with a message composed from the result of waitpid status.
+ */
+static void throwExitCause(JNIEnv *env, int pid, int status) {
+ char ebuf[128];
+ if (WIFEXITED(status)) {
+ snprintf(ebuf, sizeof ebuf,
+ "Failed to exec spawn helper: pid: %d, exit value: %d",
+ pid, WEXITSTATUS(status));
+ } else if (WIFSIGNALED(status)) {
+ snprintf(ebuf, sizeof ebuf,
+ "Failed to exec spawn helper: pid: %d, signal: %d",
+ pid, WTERMSIG(status));
+ } else {
+ snprintf(ebuf, sizeof ebuf,
+ "Failed to exec spawn helper: pid: %d, status: 0x%08x",
+ pid, status);
+ }
+ throwIOException(env, 0, ebuf);
+}
+
#ifdef DEBUG_PROCESS
/* Debugging process code is difficult; where to write debug output? */
static void
@@ -690,9 +711,12 @@
if (c->sendAlivePing) {
switch(readFully(fail[0], &errnum, sizeof(errnum))) {
case 0: /* First exec failed; */
- waitpid(resultPid, NULL, 0);
- throwIOException(env, 0, "Failed to exec spawn helper.");
- goto Catch;
+ {
+ int tmpStatus = 0;
+ int p = waitpid(resultPid, &tmpStatus, 0);
+ throwExitCause(env, p, tmpStatus);
+ goto Catch;
+ }
case sizeof(errnum):
assert(errnum == CHILD_IS_ALIVE);
if (errnum != CHILD_IS_ALIVE) {
@@ -700,7 +724,7 @@
* helper should do is to send an alive ping to the parent,
* before doing any subsequent work. */
throwIOException(env, 0, "Bad code from spawn helper "
- "(Failed to exec spawn helper.");
+ "(Failed to exec spawn helper)");
goto Catch;
}
break;
--- a/src/java.base/unix/native/libnet/Inet6AddressImpl.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/native/libnet/Inet6AddressImpl.c Fri Jun 21 09:05:45 2019 -0700
@@ -703,10 +703,6 @@
sa.sa6.sin6_family = AF_INET6;
if (scope > 0) {
sa.sa6.sin6_scope_id = scope;
-#if defined(__linux__)
- } else {
- sa.sa6.sin6_scope_id = getDefaultIPv6Interface(&sa.sa6.sin6_addr);
-#endif
}
// load network interface address to SOCKETADDRESS, if specified
--- a/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c Fri Jun 21 09:05:45 2019 -0700
@@ -79,10 +79,6 @@
static jfieldID pdsi_connectedAddress;
static jfieldID pdsi_connectedPort;
-extern void setDefaultScopeID(JNIEnv *env, struct sockaddr *him);
-extern int getDefaultScopeID(JNIEnv *env);
-
-
/*
* Returns a java.lang.Integer based on 'i'
*/
@@ -200,7 +196,6 @@
JNI_TRUE) != 0) {
return;
}
- setDefaultScopeID(env, &sa.sa);
if (NET_Bind(fd, &sa, len) < 0) {
if (errno == EADDRINUSE || errno == EADDRNOTAVAIL ||
@@ -266,8 +261,6 @@
return;
}
- setDefaultScopeID(env, &rmtaddr.sa);
-
if (NET_Connect(fd, &rmtaddr.sa, len) == -1) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
"Connect failed");
@@ -334,11 +327,11 @@
/*
* Class: java_net_PlainDatagramSocketImpl
- * Method: send
+ * Method: send0
* Signature: (Ljava/net/DatagramPacket;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
+Java_java_net_PlainDatagramSocketImpl_send0(JNIEnv *env, jobject this,
jobject packet) {
char BUF[MAX_BUFFER_LEN];
@@ -393,7 +386,6 @@
}
rmtaddrP = &rmtaddr.sa;
}
- setDefaultScopeID(env, &rmtaddr.sa);
if (packetBufferLen > MAX_BUFFER_LEN) {
/* When JNI-ifying the JDK's IO routines, we turned
@@ -2145,26 +2137,6 @@
NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed");
return;
}
-
-#ifdef __linux__
- /*
- * On 2.4.8+ if we join a group with the interface set to 0
- * then the kernel records the interface it decides. This causes
- * subsequent leave groups to fail as there is no match. Thus we
- * pick the interface if there is a matching route.
- */
- if (index == 0) {
- int rt_index = getDefaultIPv6Interface(&(mname6.ipv6mr_multiaddr));
- if (rt_index > 0) {
- index = rt_index;
- }
- }
-#endif
-#ifdef MACOSX
- if (family == AF_INET6 && index == 0) {
- index = getDefaultScopeID(env);
- }
-#endif
mname6.ipv6mr_interface = index;
} else {
jint idx = (*env)->GetIntField(env, niObj, ni_indexID);
--- a/src/java.base/unix/native/libnet/PlainSocketImpl.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/native/libnet/PlainSocketImpl.c Fri Jun 21 09:05:45 2019 -0700
@@ -46,8 +46,6 @@
jfieldID psi_fdLockID;
jfieldID psi_closePendingID;
-extern void setDefaultScopeID(JNIEnv *env, struct sockaddr *him);
-
/*
* file descriptor used for dup2
*/
@@ -261,7 +259,6 @@
JNI_TRUE) != 0) {
return;
}
- setDefaultScopeID(env, &sa.sa);
if (trafficClass != 0 && ipv6_available()) {
NET_SetTrafficClass(&sa, trafficClass);
@@ -509,7 +506,6 @@
&len, JNI_TRUE) != 0) {
return;
}
- setDefaultScopeID(env, &sa.sa);
if (NET_Bind(fd, &sa, len) < 0) {
if (errno == EADDRINUSE || errno == EADDRNOTAVAIL ||
--- a/src/java.base/unix/native/libnet/net_util_md.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/native/libnet/net_util_md.c Fri Jun 21 09:05:45 2019 -0700
@@ -452,285 +452,7 @@
}
}
-#if defined(__linux__)
-
-/* following code creates a list of addresses from the kernel
- * routing table that are routed via the loopback address.
- * We check all destination addresses against this table
- * and override the scope_id field to use the relevant value for "lo"
- * in order to work-around the Linux bug that prevents packets destined
- * for certain local addresses from being sent via a physical interface.
- */
-
-struct loopback_route {
- struct in6_addr addr; /* destination address */
- int plen; /* prefix length */
-};
-
-static struct loopback_route *loRoutes = 0;
-static int nRoutes = 0; /* number of routes */
-static int loRoutes_size = 16; /* initial size */
-static int lo_scope_id = 0;
-
-static void initLoopbackRoutes();
-
-void printAddr (struct in6_addr *addr) {
- int i;
- for (i=0; i<16; i++) {
- printf ("%02x", addr->s6_addr[i]);
- }
- printf ("\n");
-}
-
-static jboolean needsLoopbackRoute (struct in6_addr* dest_addr) {
- int byte_count;
- int extra_bits, i;
- struct loopback_route *ptr;
-
- if (loRoutes == 0) {
- initLoopbackRoutes();
- }
-
- for (ptr = loRoutes, i=0; i<nRoutes; i++, ptr++) {
- struct in6_addr *target_addr=&ptr->addr;
- int dest_plen = ptr->plen;
- byte_count = dest_plen >> 3;
- extra_bits = dest_plen & 0x3;
-
- if (byte_count > 0) {
- if (memcmp(target_addr, dest_addr, byte_count)) {
- continue; /* no match */
- }
- }
-
- if (extra_bits > 0) {
- unsigned char c1 = ((unsigned char *)target_addr)[byte_count];
- unsigned char c2 = ((unsigned char *)&dest_addr)[byte_count];
- unsigned char mask = 0xff << (8 - extra_bits);
- if ((c1 & mask) != (c2 & mask)) {
- continue;
- }
- }
- return JNI_TRUE;
- }
- return JNI_FALSE;
-}
-
-
-static void initLoopbackRoutes() {
- FILE *f;
- char srcp[8][5];
- char hopp[8][5];
- int dest_plen, src_plen, use, refcnt, metric;
- unsigned long flags;
- char dest_str[40];
- struct in6_addr dest_addr;
- char device[16];
- struct loopback_route *loRoutesTemp;
-
- if (loRoutes != 0) {
- free (loRoutes);
- }
- loRoutes = calloc (loRoutes_size, sizeof(struct loopback_route));
- if (loRoutes == 0) {
- return;
- }
- /*
- * Scan /proc/net/ipv6_route looking for a matching
- * route.
- */
- if ((f = fopen("/proc/net/ipv6_route", "r")) == NULL) {
- return ;
- }
- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x "
- "%4s%4s%4s%4s%4s%4s%4s%4s %02x "
- "%4s%4s%4s%4s%4s%4s%4s%4s "
- "%08x %08x %08x %08lx %8s",
- dest_str, &dest_str[5], &dest_str[10], &dest_str[15],
- &dest_str[20], &dest_str[25], &dest_str[30], &dest_str[35],
- &dest_plen,
- srcp[0], srcp[1], srcp[2], srcp[3],
- srcp[4], srcp[5], srcp[6], srcp[7],
- &src_plen,
- hopp[0], hopp[1], hopp[2], hopp[3],
- hopp[4], hopp[5], hopp[6], hopp[7],
- &metric, &use, &refcnt, &flags, device) == 31) {
-
- /*
- * Some routes should be ignored
- */
- if ( (dest_plen < 0 || dest_plen > 128) ||
- (src_plen != 0) ||
- (flags & (RTF_POLICY | RTF_FLOW)) ||
- ((flags & RTF_REJECT) && dest_plen == 0) ) {
- continue;
- }
-
- /*
- * Convert the destination address
- */
- dest_str[4] = ':';
- dest_str[9] = ':';
- dest_str[14] = ':';
- dest_str[19] = ':';
- dest_str[24] = ':';
- dest_str[29] = ':';
- dest_str[34] = ':';
- dest_str[39] = '\0';
-
- if (inet_pton(AF_INET6, dest_str, &dest_addr) < 0) {
- /* not an Ipv6 address */
- continue;
- }
- if (strcmp(device, "lo") != 0) {
- /* Not a loopback route */
- continue;
- } else {
- if (nRoutes == loRoutes_size) {
- loRoutesTemp = realloc (loRoutes, loRoutes_size *
- sizeof (struct loopback_route) * 2);
-
- if (loRoutesTemp == 0) {
- free(loRoutes);
- loRoutes = NULL;
- nRoutes = 0;
- fclose (f);
- return;
- }
- loRoutes=loRoutesTemp;
- loRoutes_size *= 2;
- }
- memcpy (&loRoutes[nRoutes].addr,&dest_addr,sizeof(struct in6_addr));
- loRoutes[nRoutes].plen = dest_plen;
- nRoutes ++;
- }
- }
-
- fclose (f);
- {
- /* now find the scope_id for "lo" */
-
- char devname[21];
- char addr6p[8][5];
- int plen, scope, dad_status, if_idx;
-
- if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) {
- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
- addr6p[0], addr6p[1], addr6p[2], addr6p[3],
- addr6p[4], addr6p[5], addr6p[6], addr6p[7],
- &if_idx, &plen, &scope, &dad_status, devname) == 13) {
-
- if (strcmp(devname, "lo") == 0) {
- /*
- * Found - so just return the index
- */
- fclose(f);
- lo_scope_id = if_idx;
- return;
- }
- }
- fclose(f);
- }
- }
-}
-
-/*
- * Following is used for binding to local addresses. Equivalent
- * to code above, for bind().
- */
-
-struct localinterface {
- int index;
- char localaddr [16];
-};
-
-static struct localinterface *localifs = 0;
-static int localifsSize = 0; /* size of array */
-static int nifs = 0; /* number of entries used in array */
-
-/* not thread safe: make sure called once from one thread */
-
-static void initLocalIfs () {
- FILE *f;
- unsigned char staddr [16];
- char ifname [33];
- struct localinterface *lif=0;
- struct localinterface *localifsTemp;
- int index, x1, x2, x3;
- unsigned int u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,ua,ub,uc,ud,ue,uf;
-
- if ((f = fopen("/proc/net/if_inet6", "r")) == NULL) {
- return ;
- }
- while (fscanf (f, "%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x "
- "%d %x %x %x %32s",&u0,&u1,&u2,&u3,&u4,&u5,&u6,&u7,
- &u8,&u9,&ua,&ub,&uc,&ud,&ue,&uf,
- &index, &x1, &x2, &x3, ifname) == 21) {
- staddr[0] = (unsigned char)u0;
- staddr[1] = (unsigned char)u1;
- staddr[2] = (unsigned char)u2;
- staddr[3] = (unsigned char)u3;
- staddr[4] = (unsigned char)u4;
- staddr[5] = (unsigned char)u5;
- staddr[6] = (unsigned char)u6;
- staddr[7] = (unsigned char)u7;
- staddr[8] = (unsigned char)u8;
- staddr[9] = (unsigned char)u9;
- staddr[10] = (unsigned char)ua;
- staddr[11] = (unsigned char)ub;
- staddr[12] = (unsigned char)uc;
- staddr[13] = (unsigned char)ud;
- staddr[14] = (unsigned char)ue;
- staddr[15] = (unsigned char)uf;
- nifs ++;
- if (nifs > localifsSize) {
- localifsTemp = (struct localinterface *) realloc(
- localifs, sizeof (struct localinterface)* (localifsSize+5));
- if (localifsTemp == 0) {
- free(localifs);
- localifs = 0;
- localifsSize = 0;
- nifs = 0;
- fclose(f);
- return;
- }
- localifs = localifsTemp;
- lif = localifs + localifsSize;
- localifsSize += 5;
- } else {
- lif ++;
- }
- memcpy (lif->localaddr, staddr, 16);
- lif->index = index;
- }
- fclose (f);
-}
-
-/* return the scope_id (interface index) of the
- * interface corresponding to the given address
- * returns 0 if no match found
- */
-
-static int getLocalScopeID (char *addr) {
- struct localinterface *lif;
- int i;
- if (localifs == 0) {
- initLocalIfs();
- }
- for (i=0, lif=localifs; i<nifs; i++, lif++) {
- if (memcmp (addr, lif->localaddr, 16) == 0) {
- return lif->index;
- }
- }
- return 0;
-}
-
-void platformInit () {
- initLoopbackRoutes();
- initLocalIfs();
-}
-
-#elif defined(_AIX)
+#if defined(_AIX)
/* Initialize stubs for blocking I/O workarounds (see src/solaris/native/java/net/linux_close.c) */
extern void aix_close_init();
@@ -816,71 +538,12 @@
*len = sizeof(struct sockaddr_in6);
}
-#ifdef __linux__
- /*
- * On Linux if we are connecting to a link-local address
- * we need to specify the interface in the scope_id (2.4 kernel only)
- *
- * If the scope was cached then we use the cached value. If not cached but
- * specified in the Inet6Address we use that, but we first check if the
- * address needs to be routed via the loopback interface. In this case,
- * we override the specified value with that of the loopback interface.
- * If no cached value exists and no value was specified by user, then
- * we try to determine a value from the routing table. In all these
- * cases the used value is cached for further use.
- */
- if (IN6_IS_ADDR_LINKLOCAL(&sa->sa6.sin6_addr)) {
- unsigned int cached_scope_id = 0, scope_id = 0;
-
- if (ia6_cachedscopeidID) {
- cached_scope_id = (int)(*env)->GetIntField(env, iaObj, ia6_cachedscopeidID);
- /* if cached value exists then use it. Otherwise, check
- * if scope is set in the address.
- */
- if (!cached_scope_id) {
- if (ia6_scopeidID) {
- scope_id = getInet6Address_scopeid(env, iaObj);
- }
- if (scope_id != 0) {
- /* check user-specified value for loopback case
- * that needs to be overridden
- */
- if (kernelIsV24() && needsLoopbackRoute(&sa->sa6.sin6_addr)) {
- cached_scope_id = lo_scope_id;
- (*env)->SetIntField(env, iaObj, ia6_cachedscopeidID, cached_scope_id);
- }
- } else {
- /*
- * Otherwise consult the IPv6 routing tables to
- * try determine the appropriate interface.
- */
- if (kernelIsV24()) {
- cached_scope_id = getDefaultIPv6Interface(&sa->sa6.sin6_addr);
- } else {
- cached_scope_id = getLocalScopeID((char *)&(sa->sa6.sin6_addr));
- if (cached_scope_id == 0) {
- cached_scope_id = getDefaultIPv6Interface(&sa->sa6.sin6_addr);
- }
- }
- (*env)->SetIntField(env, iaObj, ia6_cachedscopeidID, cached_scope_id);
- }
- }
- }
-
- /*
- * If we have a scope_id use the extended form
- * of sockaddr_in6.
- */
- sa->sa6.sin6_scope_id = cached_scope_id == 0 ? scope_id : cached_scope_id;
- }
-#else
/* handle scope_id */
if (family != java_net_InetAddress_IPv4) {
if (ia6_scopeidID) {
sa->sa6.sin6_scope_id = getInet6Address_scopeid(env, iaObj);
}
}
-#endif
} else {
jint address;
if (family != java_net_InetAddress_IPv4) {
@@ -1015,158 +678,6 @@
}
/*
- * Determine the default interface for an IPv6 address.
- *
- * 1. Scans /proc/net/ipv6_route for a matching route
- * (eg: fe80::/10 or a route for the specific address).
- * This will tell us the interface to use (eg: "eth0").
- *
- * 2. Lookup /proc/net/if_inet6 to map the interface
- * name to an interface index.
- *
- * Returns :-
- * -1 if error
- * 0 if no matching interface
- * >1 interface index to use for the link-local address.
- */
-#if defined(__linux__)
-int getDefaultIPv6Interface(struct in6_addr *target_addr) {
- FILE *f;
- char srcp[8][5];
- char hopp[8][5];
- int dest_plen, src_plen, use, refcnt, metric;
- unsigned long flags;
- char dest_str[40];
- struct in6_addr dest_addr;
- char device[16];
- jboolean match = JNI_FALSE;
-
- /*
- * Scan /proc/net/ipv6_route looking for a matching
- * route.
- */
- if ((f = fopen("/proc/net/ipv6_route", "r")) == NULL) {
- return -1;
- }
- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x "
- "%4s%4s%4s%4s%4s%4s%4s%4s %02x "
- "%4s%4s%4s%4s%4s%4s%4s%4s "
- "%08x %08x %08x %08lx %8s",
- dest_str, &dest_str[5], &dest_str[10], &dest_str[15],
- &dest_str[20], &dest_str[25], &dest_str[30], &dest_str[35],
- &dest_plen,
- srcp[0], srcp[1], srcp[2], srcp[3],
- srcp[4], srcp[5], srcp[6], srcp[7],
- &src_plen,
- hopp[0], hopp[1], hopp[2], hopp[3],
- hopp[4], hopp[5], hopp[6], hopp[7],
- &metric, &use, &refcnt, &flags, device) == 31) {
-
- /*
- * Some routes should be ignored
- */
- if ( (dest_plen < 0 || dest_plen > 128) ||
- (src_plen != 0) ||
- (flags & (RTF_POLICY | RTF_FLOW)) ||
- ((flags & RTF_REJECT) && dest_plen == 0) ) {
- continue;
- }
-
- /*
- * Convert the destination address
- */
- dest_str[4] = ':';
- dest_str[9] = ':';
- dest_str[14] = ':';
- dest_str[19] = ':';
- dest_str[24] = ':';
- dest_str[29] = ':';
- dest_str[34] = ':';
- dest_str[39] = '\0';
-
- if (inet_pton(AF_INET6, dest_str, &dest_addr) < 0) {
- /* not an Ipv6 address */
- continue;
- } else {
- /*
- * The prefix len (dest_plen) indicates the number of bits we
- * need to match on.
- *
- * dest_plen / 8 => number of bytes to match
- * dest_plen % 8 => number of additional bits to match
- *
- * eg: fe80::/10 => match 1 byte + 2 additional bits in the
- * next byte.
- */
- int byte_count = dest_plen >> 3;
- int extra_bits = dest_plen & 0x3;
-
- if (byte_count > 0) {
- if (memcmp(target_addr, &dest_addr, byte_count)) {
- continue; /* no match */
- }
- }
-
- if (extra_bits > 0) {
- unsigned char c1 = ((unsigned char *)target_addr)[byte_count];
- unsigned char c2 = ((unsigned char *)&dest_addr)[byte_count];
- unsigned char mask = 0xff << (8 - extra_bits);
- if ((c1 & mask) != (c2 & mask)) {
- continue;
- }
- }
-
- /*
- * We have a match
- */
- match = JNI_TRUE;
- break;
- }
- }
- fclose(f);
-
- /*
- * If there's a match then we lookup the interface
- * index.
- */
- if (match) {
- char devname[21];
- char addr6p[8][5];
- int plen, scope, dad_status, if_idx;
-
- if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) {
- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
- addr6p[0], addr6p[1], addr6p[2], addr6p[3],
- addr6p[4], addr6p[5], addr6p[6], addr6p[7],
- &if_idx, &plen, &scope, &dad_status, devname) == 13) {
-
- if (strcmp(devname, device) == 0) {
- /*
- * Found - so just return the index
- */
- fclose(f);
- return if_idx;
- }
- }
- fclose(f);
- } else {
- /*
- * Couldn't open /proc/net/if_inet6
- */
- return -1;
- }
- }
-
- /*
- * If we get here it means we didn't there wasn't any
- * route or we couldn't get the index of the interface.
- */
- return 0;
-}
-#endif
-
-
-/*
* Wrapper for getsockopt system routine - does any necessary
* pre/post processing to deal with OS specific oddities :-
*
--- a/src/java.base/unix/native/libnet/net_util_md.h Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/unix/native/libnet/net_util_md.h Fri Jun 21 09:05:45 2019 -0700
@@ -101,7 +101,6 @@
#ifdef __linux__
int kernelIsV24();
-int getDefaultIPv6Interface(struct in6_addr *target_addr);
#endif
#ifdef __solaris__
--- a/src/java.base/windows/classes/java/net/DualStackPlainDatagramSocketImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/classes/java/net/DualStackPlainDatagramSocketImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -124,7 +124,7 @@
socketReceiveOrPeekData(nativefd, p, timeout, connected, false /*receive*/);
}
- protected void send(DatagramPacket p) throws IOException {
+ protected void send0(DatagramPacket p) throws IOException {
int nativefd = checkAndReturnNativeFD();
if (p == null)
--- a/src/java.base/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -184,7 +184,7 @@
boolean exclBind)
throws SocketException;
- protected native void send(DatagramPacket p) throws IOException;
+ protected native void send0(DatagramPacket p) throws IOException;
protected synchronized native int peek(InetAddress i) throws IOException;
--- a/src/java.base/windows/native/libnet/Inet4AddressImpl.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/native/libnet/Inet4AddressImpl.c Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -359,7 +359,8 @@
}
if (dwRetVal == 0) { // if the call failed
- TCHAR *buf;
+ TCHAR *buf = NULL;
+ DWORD n;
DWORD err = WSAGetLastError();
switch (err) {
case ERROR_NO_NETWORK:
@@ -379,9 +380,17 @@
case IP_REQ_TIMED_OUT:
break;
default:
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&buf, 0, NULL);
+ n = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)&buf, 0, NULL);
+ if (n > 3) {
+ // Drop final '.', CR, LF
+ if (buf[n - 1] == TEXT('\n')) n--;
+ if (buf[n - 1] == TEXT('\r')) n--;
+ if (buf[n - 1] == TEXT('.')) n--;
+ buf[n] = TEXT('\0');
+ }
NET_ThrowNew(env, err, buf);
LocalFree(buf);
break;
--- a/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c Fri Jun 21 09:05:45 2019 -0700
@@ -415,11 +415,11 @@
/*
* Class: java_net_TwoStacksPlainDatagramSocketImpl
- * Method: send
+ * Method: send0
* Signature: (Ljava/net/DatagramPacket;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_TwoStacksPlainDatagramSocketImpl_send
+Java_java_net_TwoStacksPlainDatagramSocketImpl_send0
(JNIEnv *env, jobject this, jobject packet)
{
char BUF[MAX_BUFFER_LEN];
--- a/src/java.base/windows/native/libnet/net_util_md.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/native/libnet/net_util_md.c Fri Jun 21 09:05:45 2019 -0700
@@ -752,37 +752,6 @@
return 0;
}
-/*
- * Determine the default interface for an IPv6 address.
- *
- * Returns :-
- * 0 if error
- * > 0 interface index to use
- */
-jint getDefaultIPv6Interface(JNIEnv *env, struct sockaddr_in6 *target_addr)
-{
- int ret;
- DWORD b;
- struct sockaddr_in6 route;
- SOCKET fd = socket(AF_INET6, SOCK_STREAM, 0);
- if (fd == INVALID_SOCKET) {
- return 0;
- }
-
- ret = WSAIoctl(fd, SIO_ROUTING_INTERFACE_QUERY,
- (void *)target_addr, sizeof(struct sockaddr_in6),
- (void *)&route, sizeof(struct sockaddr_in6),
- &b, 0, 0);
- if (ret == SOCKET_ERROR) {
- // error
- closesocket(fd);
- return 0;
- } else {
- closesocket(fd);
- return route.sin6_scope_id;
- }
-}
-
/**
* Enables SIO_LOOPBACK_FAST_PATH
*/
@@ -820,7 +789,7 @@
{
jbyte caddr[16];
jint address;
- unsigned int scopeid = 0, cached_scope_id = 0;
+ unsigned int scopeid = 0;
if (family == java_net_InetAddress_IPv4) {
// convert to IPv4-mapped address
@@ -842,19 +811,11 @@
} else {
getInet6Address_ipaddress(env, iaObj, (char *)caddr);
scopeid = getInet6Address_scopeid(env, iaObj);
- cached_scope_id = (unsigned int)(*env)->GetIntField(env, iaObj, ia6_cachedscopeidID);
}
sa->sa6.sin6_port = (u_short)htons((u_short)port);
memcpy((void *)&sa->sa6.sin6_addr, caddr, sizeof(struct in6_addr));
sa->sa6.sin6_family = AF_INET6;
- if ((family == java_net_InetAddress_IPv6) &&
- IN6_IS_ADDR_LINKLOCAL(&sa->sa6.sin6_addr) &&
- (!scopeid && !cached_scope_id))
- {
- cached_scope_id = getDefaultIPv6Interface(env, &sa->sa6);
- (*env)->SetIntField(env, iaObj, ia6_cachedscopeidID, cached_scope_id);
- }
- sa->sa6.sin6_scope_id = scopeid == 0 ? cached_scope_id : scopeid;
+ sa->sa6.sin6_scope_id = scopeid;
if (len != NULL) {
*len = sizeof(struct sockaddr_in6);
}
--- a/src/java.base/windows/native/libnio/ch/Iocp.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/native/libnio/ch/Iocp.c Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2015, 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
@@ -142,6 +142,14 @@
if (len == 0) {
return NULL;
} else {
+ if (len > 3) {
+ // Drop final '.', CR, LF
+ if (message[len - 1] == L'\n') len--;
+ if (message[len - 1] == L'\r') len--;
+ if (message[len - 1] == L'.') len--;
+ message[len] = L'\0';
+ }
+
return (*env)->NewString(env, (const jchar *)message, (jsize)wcslen(message));
}
}
--- a/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c Fri Jun 21 09:05:45 2019 -0700
@@ -177,6 +177,14 @@
if (len == 0) {
return NULL;
} else {
+ if (len > 3) {
+ // Drop final '.', CR, LF
+ if (message[len - 1] == L'\n') len--;
+ if (message[len - 1] == L'\r') len--;
+ if (message[len - 1] == L'.') len--;
+ message[len] = L'\0';
+ }
+
return (*env)->NewString(env, (const jchar *)message, (jsize)wcslen(message));
}
}
--- a/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java Fri Jun 21 09:05:45 2019 -0700
@@ -60,6 +60,7 @@
* 11: local-variable syntax for lambda parameters
* 12: no changes (switch expressions were in preview)
* 13: no changes (switch expressions and text blocks in preview)
+ * 14: TBD
*/
/**
@@ -192,7 +193,15 @@
*
* @since 13
*/
- RELEASE_13;
+ RELEASE_13,
+
+ /**
+ * The version recognized by the Java Platform, Standard Edition
+ * 14.
+ *
+ * @since 14
+ */
+ RELEASE_14;
// Note that when adding constants for newer releases, the
// behavior of latest() and latestSupported() must be updated too.
@@ -203,7 +212,7 @@
* @return the latest source version that can be modeled
*/
public static SourceVersion latest() {
- return RELEASE_13;
+ return RELEASE_14;
}
private static final SourceVersion latestSupported = getLatestSupported();
@@ -218,7 +227,7 @@
private static SourceVersion getLatestSupported() {
int intVersion = Runtime.version().feature();
return (intVersion >= 11) ?
- valueOf("RELEASE_" + Math.min(13, intVersion)):
+ valueOf("RELEASE_" + Math.min(14, intVersion)):
RELEASE_10;
}
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -32,7 +32,7 @@
/**
* A skeletal visitor for annotation values with default behavior
* appropriate for source versions {@link SourceVersion#RELEASE_9
- * RELEASE_9} through {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * RELEASE_9} through {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* <p> <b>WARNING:</b> The {@code AnnotationValueVisitor} interface
* implemented by this class may have methods added to it in the
@@ -59,7 +59,7 @@
* @see AbstractAnnotationValueVisitor8
* @since 9
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public abstract class AbstractAnnotationValueVisitor9<R, P> extends AbstractAnnotationValueVisitor8<R, P> {
/**
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -34,7 +34,7 @@
/**
* A skeletal visitor of program elements with default behavior
* appropriate for source versions {@link SourceVersion#RELEASE_9
- * RELEASE_9} through {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * RELEASE_9} through {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* <p> <b>WARNING:</b> The {@code ElementVisitor} interface
* implemented by this class may have methods added to it in the
@@ -65,7 +65,7 @@
* @since 9
* @spec JPMS
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public abstract class AbstractElementVisitor9<R, P> extends AbstractElementVisitor8<R, P> {
/**
* Constructor for concrete subclasses to call.
--- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -33,7 +33,7 @@
/**
* A skeletal visitor of types with default behavior appropriate for
* source versions {@link SourceVersion#RELEASE_9 RELEASE_9} through
- * {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* <p> <b>WARNING:</b> The {@code TypeVisitor} interface implemented
* by this class may have methods added to it in the future to
@@ -63,7 +63,7 @@
* @see AbstractTypeVisitor8
* @since 9
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public abstract class AbstractTypeVisitor9<R, P> extends AbstractTypeVisitor8<R, P> {
/**
* Constructor for concrete subclasses to call.
--- a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -34,7 +34,7 @@
* A visitor of program elements based on their {@linkplain
* ElementKind kind} with default behavior appropriate for source
* versions {@link SourceVersion#RELEASE_9 RELEASE_9} through {@link
- * SourceVersion#RELEASE_13 RELEASE_13}.
+ * SourceVersion#RELEASE_14 RELEASE_14}.
*
* For {@linkplain
* Element elements} <code><i>Xyz</i></code> that may have more than one
@@ -80,7 +80,7 @@
* @since 9
* @spec JPMS
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public class ElementKindVisitor9<R, P> extends ElementKindVisitor8<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
--- a/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -34,7 +34,7 @@
/**
* A scanning visitor of program elements with default behavior
* appropriate for source versions {@link SourceVersion#RELEASE_9
- * RELEASE_9} through {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * RELEASE_9} through {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* The <code>visit<i>Xyz</i></code> methods in this
* class scan their component elements by calling {@code scan} on
@@ -92,7 +92,7 @@
* @since 9
* @spec JPMS
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public class ElementScanner9<R, P> extends ElementScanner8<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -32,7 +32,7 @@
/**
* A simple visitor for annotation values with default behavior
* appropriate for source versions {@link SourceVersion#RELEASE_9
- * RELEASE_9} through {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * RELEASE_9} through {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* Visit methods call {@link #defaultAction
* defaultAction} passing their arguments to {@code defaultAction}'s
@@ -68,7 +68,7 @@
* @see SimpleAnnotationValueVisitor8
* @since 9
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public class SimpleAnnotationValueVisitor9<R, P> extends SimpleAnnotationValueVisitor8<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -33,7 +33,7 @@
/**
* A simple visitor of program elements with default behavior
* appropriate for source versions {@link SourceVersion#RELEASE_9
- * RELEASE_9} through {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * RELEASE_9} through {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* Visit methods corresponding to {@code RELEASE_9} and earlier
* language constructs call {@link #defaultAction defaultAction},
@@ -73,7 +73,7 @@
* @since 9
* @spec JPMS
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public class SimpleElementVisitor9<R, P> extends SimpleElementVisitor8<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
--- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -33,7 +33,7 @@
/**
* A simple visitor of types with default behavior appropriate for
* source versions {@link SourceVersion#RELEASE_9 RELEASE_9} through
- * {@link SourceVersion#RELEASE_13 RELEASE_13}.
+ * {@link SourceVersion#RELEASE_14 RELEASE_14}.
*
* Visit methods corresponding to {@code RELEASE_9} and earlier
* language constructs call {@link #defaultAction defaultAction},
@@ -73,7 +73,7 @@
* @see SimpleTypeVisitor8
* @since 9
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public class SimpleTypeVisitor9<R, P> extends SimpleTypeVisitor8<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
--- a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -34,7 +34,7 @@
* A visitor of types based on their {@linkplain TypeKind kind} with
* default behavior appropriate for source versions {@link
* SourceVersion#RELEASE_9 RELEASE_9} through {@link
- * SourceVersion#RELEASE_13 RELEASE_13}.
+ * SourceVersion#RELEASE_14 RELEASE_14}.
*
* For {@linkplain
* TypeMirror types} <code><i>Xyz</i></code> that may have more than one
@@ -77,7 +77,7 @@
* @see TypeKindVisitor8
* @since 9
*/
-@SupportedSourceVersion(RELEASE_13)
+@SupportedSourceVersion(RELEASE_14)
public class TypeKindVisitor9<R, P> extends TypeKindVisitor8<R, P> {
/**
* Constructor for concrete subclasses to call; uses {@code null}
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java Fri Jun 21 09:05:45 2019 -0700
@@ -411,6 +411,14 @@
BerDecoder readReply(LdapRequest ldr) throws IOException, NamingException {
BerDecoder rber;
+ // If socket closed, don't even try
+ synchronized (this) {
+ if (sock == null) {
+ throw new ServiceUnavailableException(host + ":" + port +
+ "; socket closed");
+ }
+ }
+
try {
// if no timeout is set so we wait infinitely until
// a response is received
--- a/src/java.net.http/share/classes/java/net/http/HttpResponse.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.net.http/share/classes/java/net/http/HttpResponse.java Fri Jun 21 09:05:45 2019 -0700
@@ -1253,7 +1253,7 @@
/**
* Returns a {@code BodySubscriber} which buffers data before delivering
* it to the given downstream subscriber. The subscriber guarantees to
- * deliver {@code buffersize} bytes of data to each invocation of the
+ * deliver {@code bufferSize} bytes of data to each invocation of the
* downstream's {@link BodySubscriber#onNext(Object) onNext} method,
* except for the final invocation, just before
* {@link BodySubscriber#onComplete() onComplete} is invoked. The final
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Http1HeaderParser.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Http1HeaderParser.java Fri Jun 21 09:05:45 2019 -0700
@@ -194,7 +194,15 @@
if (statusLine.length() < 12) {
throw protocolException("Invalid status line: \"%s\"", statusLine);
}
- responseCode = Integer.parseInt(statusLine.substring(9, 12));
+ try {
+ responseCode = Integer.parseInt(statusLine.substring(9, 12));
+ } catch (NumberFormatException nfe) {
+ throw protocolException("Invalid status line: \"%s\"", statusLine);
+ }
+ // response code expected to be a 3-digit integer (RFC-2616, section 6.1.1)
+ if (responseCode < 100) {
+ throw protocolException("Invalid status line: \"%s\"", statusLine);
+ }
state = State.STATUS_LINE_END;
}
--- a/src/java.net.http/share/classes/jdk/internal/net/http/LineSubscriberAdapter.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/LineSubscriberAdapter.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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 @@
import java.util.concurrent.Flow;
import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.Flow.Subscription;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
@@ -56,6 +57,7 @@
private final Function<? super S, ? extends R> finisher;
private final Charset charset;
private final String eol;
+ private final AtomicBoolean subscribed = new AtomicBoolean();
private volatile LineSubscription downstream;
private LineSubscriberAdapter(S subscriber,
@@ -72,6 +74,12 @@
@Override
public void onSubscribe(Subscription subscription) {
+ Objects.requireNonNull(subscription);
+ if (!subscribed.compareAndSet(false, true)) {
+ subscription.cancel();
+ return;
+ }
+
downstream = LineSubscription.create(subscription,
charset,
eol,
@@ -82,6 +90,7 @@
@Override
public void onNext(List<ByteBuffer> item) {
+ Objects.requireNonNull(item);
try {
downstream.submit(item);
} catch (Throwable t) {
@@ -91,6 +100,7 @@
@Override
public void onError(Throwable throwable) {
+ Objects.requireNonNull(throwable);
try {
downstream.signalError(throwable);
} finally {
--- a/src/java.net.http/share/classes/jdk/internal/net/http/PullPublisher.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/PullPublisher.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, 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
@@ -103,11 +103,19 @@
}
while (demand.tryDecrement() && !cancelled) {
- if (!iter.hasNext()) {
- break;
- } else {
- subscriber.onNext(iter.next());
+ T next;
+ try {
+ if (!iter.hasNext()) {
+ break;
+ }
+ next = iter.next();
+ } catch (Throwable t1) {
+ completed = true;
+ pullScheduler.stop();
+ subscriber.onError(t1);
+ return;
}
+ subscriber.onNext(next);
}
if (!iter.hasNext() && !cancelled) {
completed = true;
@@ -123,7 +131,7 @@
return; // no-op
if (n <= 0) {
- error = new IllegalArgumentException("illegal non-positive request:" + n);
+ error = new IllegalArgumentException("non-positive subscription request: " + n);
} else {
demand.increase(n);
}
--- a/src/java.net.http/share/classes/jdk/internal/net/http/RequestPublishers.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/RequestPublishers.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, 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
@@ -271,12 +271,13 @@
@Override
public void subscribe(Flow.Subscriber<? super ByteBuffer> subscriber) {
- InputStream is;
+ InputStream is = null;
+ Throwable t = null;
if (System.getSecurityManager() == null) {
try {
is = new FileInputStream(file);
} catch (IOException ioe) {
- throw new UncheckedIOException(ioe);
+ t = ioe;
}
} else {
try {
@@ -284,11 +285,16 @@
() -> new FileInputStream(file);
is = AccessController.doPrivileged(pa, null, filePermissions);
} catch (PrivilegedActionException pae) {
- throw new UncheckedIOException((IOException) pae.getCause());
+ t = pae.getCause();
}
}
- PullPublisher<ByteBuffer> publisher =
- new PullPublisher<>(() -> new StreamIterator(is));
+ final InputStream fis = is;
+ PullPublisher<ByteBuffer> publisher;
+ if (t == null) {
+ publisher = new PullPublisher<>(() -> new StreamIterator(fis));
+ } else {
+ publisher = new PullPublisher<>(null, t);
+ }
publisher.subscribe(subscriber);
}
--- a/src/java.net.http/share/classes/jdk/internal/net/http/ResponseSubscribers.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/ResponseSubscribers.java Fri Jun 21 09:05:45 2019 -0700
@@ -125,6 +125,7 @@
@Override
public void onSubscribe(Flow.Subscription subscription) {
+ Objects.requireNonNull(subscription);
if (!subscribed.compareAndSet(false, true)) {
subscription.cancel();
} else {
@@ -135,6 +136,7 @@
@Override
public void onNext(List<ByteBuffer> items) {
+ Objects.requireNonNull(items);
for (ByteBuffer item : items) {
byte[] buf = new byte[item.remaining()];
item.get(buf);
@@ -145,6 +147,7 @@
@Override
public void onError(Throwable throwable) {
+ Objects.requireNonNull(throwable);
result.completeExceptionally(throwable);
}
@@ -172,6 +175,7 @@
private final FilePermission[] filePermissions;
private final CompletableFuture<Path> result = new MinimalFuture<>();
+ private final AtomicBoolean subscribed = new AtomicBoolean();
private volatile Flow.Subscription subscription;
private volatile FileChannel out;
@@ -211,6 +215,12 @@
@Override
public void onSubscribe(Flow.Subscription subscription) {
+ Objects.requireNonNull(subscription);
+ if (!subscribed.compareAndSet(false, true)) {
+ subscription.cancel();
+ return;
+ }
+
this.subscription = subscription;
if (System.getSecurityManager() == null) {
try {
@@ -470,6 +480,7 @@
@Override
public void onSubscribe(Flow.Subscription s) {
+ Objects.requireNonNull(s);
try {
if (!subscribed.compareAndSet(false, true)) {
s.cancel();
@@ -600,6 +611,7 @@
@Override
public void onSubscribe(Flow.Subscription subscription) {
+ Objects.requireNonNull(subscription);
if (!subscribed.compareAndSet(false, true)) {
subscription.cancel();
} else {
@@ -614,6 +626,7 @@
@Override
public void onError(Throwable throwable) {
+ Objects.requireNonNull(throwable);
cf.completeExceptionally(throwable);
}
@@ -907,13 +920,21 @@
}
}
+ private final AtomicBoolean subscribed = new AtomicBoolean();
+
@Override
public void onSubscribe(Flow.Subscription subscription) {
- subscriptionCF.complete(subscription);
+ Objects.requireNonNull(subscription);
+ if (!subscribed.compareAndSet(false, true)) {
+ subscription.cancel();
+ } else {
+ subscriptionCF.complete(subscription);
+ }
}
@Override
public void onNext(List<ByteBuffer> item) {
+ Objects.requireNonNull(item);
try {
// cannot be called before onSubscribe()
assert subscriptionCF.isDone();
@@ -941,6 +962,7 @@
// onError can be called before request(1), and therefore can
// be called before subscriberRef is set.
signalError(throwable);
+ Objects.requireNonNull(throwable);
}
@Override
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/providers/RIXMLProvider.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/providers/RIXMLProvider.java Fri Jun 21 09:05:45 2019 -0700
@@ -46,7 +46,7 @@
* to read an XML data source or to write itself in XML format using the
* <code>WebRowSet</code> XML schema definition available at
* <pre>
- * <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd</a>
+ * <a href="http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd">http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd</a>
* </pre>
* The <code>RIXMLProvider</code> implementation has a synchronization level of
* GRADE_NONE, which means that it does no checking at all for conflicts. It
--- a/src/java.sql.rowset/share/classes/javax/sql/rowset/WebRowSet.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.sql.rowset/share/classes/javax/sql/rowset/WebRowSet.java Fri Jun 21 09:05:45 2019 -0700
@@ -44,7 +44,7 @@
* URI:
* <ul>
* <li>
- * <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd</a>
+ * <a href="http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd">http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd</a>
* </li>
* </ul>
* It describes the standard XML document format required when describing a
--- a/src/java.sql.rowset/share/classes/javax/sql/rowset/package-info.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.sql.rowset/share/classes/javax/sql/rowset/package-info.java Fri Jun 21 09:05:45 2019 -0700
@@ -95,8 +95,8 @@
* <code>SyncFactory</code> in the form of <code>SyncProvider</code>
* implementations. In order to ensure well formed XML usage, a standard generic XML
* Schema is defined and published at
- * <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">
- * <code>http://java.sun.com/xml/ns/jdbc/webrowset.xsd</code></a>.
+ * <a href="http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd">
+ * <code>http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd</code></a>.
*
* <li><a href="FilteredRowSet.html"><b><code>FilteredRowSet</code></b></a> - A
* <code>FilteredRowSet</code> object provides filtering functionality in a programmatic
@@ -154,7 +154,8 @@
* <code>RowSet</code> objects exist in a connected or disconnected environment.
* The <code>BaseRowSet</code> abstract class provides any <code>RowSet</code> implementation
* with its base functionality, including property manipulation and event notification
- * that is fully compliant with <a href="http://java.sun.com/products/javabeans">JavaBeans</a>
+ * that is fully compliant with
+ * <a href="https://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html">JavaBeans</a>
* component requirements. As an example, all implementations provided in the
* reference implementations (contained in the <code>com.sun.rowset</code> package) use
* the <code>BaseRowSet</code> class as a basis for their implementations.
--- a/src/java.sql/share/classes/java/sql/ConnectionBuilder.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.sql/share/classes/java/sql/ConnectionBuilder.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 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
@@ -44,8 +44,8 @@
* Connection con = ds.createConnectionBuilder()
* .user("rafa")
* .password("tennis")
- * .setShardingKey(shardingKey)
- * .setSuperShardingKey(superShardingKey)
+ * .shardingKey(shardingKey)
+ * .superShardingKey(superShardingKey)
* .build();
* }</pre>
*
--- a/src/java.sql/share/classes/javax/sql/PooledConnectionBuilder.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.sql/share/classes/javax/sql/PooledConnectionBuilder.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -47,8 +47,8 @@
* PooledConnection con = ds.createPooledConnectionBuilder()
* .user("rafa")
* .password("tennis")
- * .setShardingKey(shardingKey)
- * .setSuperShardingKey(superShardingKey)
+ * .shardingKey(shardingKey)
+ * .superShardingKey(superShardingKey)
* .build();
* }</pre>
*
--- a/src/java.sql/share/classes/javax/sql/XAConnectionBuilder.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/java.sql/share/classes/javax/sql/XAConnectionBuilder.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -47,8 +47,8 @@
* XAConnection con = ds.createXAConnectionBuilder()
* .user("rafa")
* .password("tennis")
- * .setShardingKey(shardingKey)
- * .setSuperShardingKey(superShardingKey)
+ * .shardingKey(shardingKey)
+ * .superShardingKey(superShardingKey)
* .build();
* }</pre>
*
--- a/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -233,7 +233,7 @@
* InputStream for the socket connection to get target VM
*/
private class SocketInputStream extends InputStream {
- int s;
+ int s = -1;
public SocketInputStream(int s) {
this.s = s;
@@ -261,7 +261,12 @@
}
public void close() throws IOException {
- VirtualMachineImpl.close(s);
+ synchronized (this) {
+ if (s != -1) {
+ VirtualMachineImpl.close(s);
+ s = -1;
+ }
+ }
}
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Attribute.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Attribute.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, 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
@@ -247,7 +247,8 @@
buf.append('(');
boolean first = true;
for (Pair<MethodSymbol, Attribute> value : values) {
- if (!first) buf.append(", ");
+ if (!first)
+ buf.append(", ");
first = false;
Name name = value.fst.name;
@@ -368,7 +369,7 @@
public void accept(Visitor v) { v.visitEnum(this); }
@DefinedBy(Api.LANGUAGE_MODEL)
public String toString() {
- return value.enclClass() + "." + value; // qualified name
+ return value.toString();
}
@DefinedBy(Api.LANGUAGE_MODEL)
public VarSymbol getValue() {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java Fri Jun 21 09:05:45 2019 -0700
@@ -91,7 +91,13 @@
* 13, no language features; text blocks and revised switch
* expressions in preview
*/
- JDK13("13");
+ JDK13("13"),
+
+ /**
+ * 14 covers the to be determined language features that will be
+ * added in JDK 14.
+ */
+ JDK14("14");
private static final Context.Key<Source> sourceKey = new Context.Key<>();
@@ -142,6 +148,7 @@
}
public Target requiredTarget() {
+ if (this.compareTo(JDK14) >= 0) return Target.JDK1_14;
if (this.compareTo(JDK13) >= 0) return Target.JDK1_13;
if (this.compareTo(JDK12) >= 0) return Target.JDK1_12;
if (this.compareTo(JDK11) >= 0) return Target.JDK1_11;
@@ -189,10 +196,10 @@
LOCAL_VARIABLE_TYPE_INFERENCE(JDK10),
VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
- SWITCH_MULTIPLE_CASE_LABELS(JDK13, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
- SWITCH_RULE(JDK13, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
- SWITCH_EXPRESSION(JDK13, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
- TEXT_BLOCKS(JDK13, Fragments.FeatureTextBlocks, DiagKind.PLURAL);
+ SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
+ SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
+ SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
+ TEXT_BLOCKS(JDK14, Fragments.FeatureTextBlocks, DiagKind.PLURAL);
enum DiagKind {
NORMAL,
@@ -279,6 +286,8 @@
return RELEASE_12;
case JDK13:
return RELEASE_13;
+ case JDK14:
+ return RELEASE_14;
default:
return null;
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Fri Jun 21 09:05:45 2019 -0700
@@ -2063,7 +2063,8 @@
@DefinedBy(Api.LANGUAGE_MODEL)
public Type getReceiverType() {
- return asType().getReceiverType();
+ Type result = asType().getReceiverType();
+ return (result == null) ? Type.noType : result;
}
@DefinedBy(Api.LANGUAGE_MODEL)
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -114,7 +114,8 @@
V54(54, 0), // JDK 10
V55(55, 0), // JDK 11: constant dynamic, nest mates
V56(56, 0), // JDK 12
- V57(57, 0); // JDK 13
+ V57(57, 0), // JDK 13
+ V58(58, 0); // JDK 14
Version(int major, int minor) {
this.major = major;
this.minor = minor;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Profile.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Profile.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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,9 +40,9 @@
* deletion without notice.</b>
*/
public enum Profile {
- COMPACT1("compact1", 1, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11, Target.JDK1_12, Target.JDK1_13),
- COMPACT2("compact2", 2, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11, Target.JDK1_12, Target.JDK1_13),
- COMPACT3("compact3", 3, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11, Target.JDK1_12, Target.JDK1_13),
+ COMPACT1("compact1", 1, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11, Target.JDK1_12, Target.JDK1_13, Target.JDK1_14),
+ COMPACT2("compact2", 2, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11, Target.JDK1_12, Target.JDK1_13, Target.JDK1_14),
+ COMPACT3("compact3", 3, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11, Target.JDK1_12, Target.JDK1_13, Target.JDK1_14),
DEFAULT {
@Override
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -73,7 +73,10 @@
JDK1_12("12", 56, 0),
/** JDK 13. */
- JDK1_13("13", 57, 0);
+ JDK1_13("13", 57, 0),
+
+ /** JDK 14. */
+ JDK1_14("14", 58, 0);
private static final Context.Key<Target> targetKey = new Context.Key<>();
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java Fri Jun 21 09:05:45 2019 -0700
@@ -477,7 +477,7 @@
}
try (InputStream in = getClass().getResourceAsStream('/' + className.replace('.', '/') + ".class")) {
- final String algorithm = "MD5";
+ final String algorithm = "SHA-256";
byte[] digest;
MessageDigest md = MessageDigest.getInstance(algorithm);
try (DigestInputStream din = new DigestInputStream(in, md)) {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2014, 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
@@ -32,6 +32,7 @@
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.stream.Collectors;
import sun.reflect.annotation.*;
import javax.lang.model.type.MirroredTypeException;
@@ -292,7 +293,7 @@
}
public String toString() {
- return typeString;
+ return typeString + ".class";
}
public int hashCode() {
@@ -335,7 +336,9 @@
}
public String toString() {
- return typeStrings;
+ return types.stream()
+ .map(t -> t.toString() + ".class")
+ .collect(Collectors.joining(", ", "{", "}"));
}
public int hashCode() {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -55,7 +55,7 @@
* deletion without notice.</b>
*/
@SupportedAnnotationTypes("*")
-@SupportedSourceVersion(SourceVersion.RELEASE_13)
+@SupportedSourceVersion(SourceVersion.RELEASE_14)
public class PrintingProcessor extends AbstractProcessor {
PrintWriter writer;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties Fri Jun 21 09:05:45 2019 -0700
@@ -80,11 +80,11 @@
javac.opt.profile=\
Check that API used is available in the specified profile
javac.opt.target=\
- Generate class files for specific VM version. Supported versions: {0}
+ Generate class files suitable for the specified Java SE release. Supported releases: {0}
javac.opt.release=\
- Compile for a specific release. Supported releases: {0}
+ Compile for the specified Java SE release. Supported releases: {0}
javac.opt.source=\
- Provide source compatibility with specified release. Supported releases: {0}
+ Provide source compatibility with the specified Java SE release. Supported releases: {0}
javac.opt.Werror=\
Terminate compilation if warnings occur
javac.opt.A=\
--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_general.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_general.c Fri Jun 21 09:05:45 2019 -0700
@@ -51,6 +51,7 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
+#include "jlong.h"
#include "sun_security_pkcs11_wrapper_PKCS11.h"
@@ -96,8 +97,8 @@
Java_sun_security_pkcs11_wrapper_PKCS11_freeMechanism
(JNIEnv *env, jclass thisClass, jlong ckpMechanism) {
if (ckpMechanism != 0L) {
- freeCKMechanismPtr((CK_MECHANISM_PTR) ckpMechanism);
- TRACE1("DEBUG PKCS11_freeMechanism: free pMech = %x\n", (jlong)ckpMechanism);
+ freeCKMechanismPtr(jlong_to_ptr(ckpMechanism));
+ TRACE1("DEBUG PKCS11_freeMechanism: free pMech = %x\n", ckpMechanism);
}
return 0L;
}
--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_sign.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_sign.c Fri Jun 21 09:05:45 2019 -0700
@@ -91,8 +91,8 @@
(ckpMechanism->pParameter == NULL)) {
freeCKMechanismPtr(ckpMechanism);
} else {
- (*env)->SetLongField(env, jMechanism, mech_pHandleID, (jlong)ckpMechanism);
- TRACE1("DEBUG C_SignInit: stored pMech = 0x%lX\n", (jlong)ckpMechanism);
+ (*env)->SetLongField(env, jMechanism, mech_pHandleID, ptr_to_jlong(ckpMechanism));
+ TRACE1("DEBUG C_SignInit: stored pMech = 0x%lX\n", ptr_to_jlong(ckpMechanism));
}
TRACE0("FINISHED\n");
}
@@ -303,8 +303,8 @@
(ckpMechanism->pParameter == NULL)) {
freeCKMechanismPtr(ckpMechanism);
} else {
- (*env)->SetLongField(env, jMechanism, mech_pHandleID, (jlong)ckpMechanism);
- TRACE1("DEBUG C_SignRecoverInit, stored pMech = 0x%lX\n", (jlong)ckpMechanism);
+ (*env)->SetLongField(env, jMechanism, mech_pHandleID, ptr_to_jlong(ckpMechanism));
+ TRACE1("DEBUG C_SignRecoverInit, stored pMech = 0x%lX\n", ptr_to_jlong(ckpMechanism));
}
TRACE0("FINISHED\n");
}
@@ -413,8 +413,8 @@
(ckpMechanism->pParameter == NULL)) {
freeCKMechanismPtr(ckpMechanism);
} else {
- (*env)->SetLongField(env, jMechanism, mech_pHandleID, (jlong)ckpMechanism);
- TRACE1("DEBUG C_VerifyInit: stored pMech = 0x%lX\n", (jlong)ckpMechanism);
+ (*env)->SetLongField(env, jMechanism, mech_pHandleID, ptr_to_jlong(ckpMechanism));
+ TRACE1("DEBUG C_VerifyInit: stored pMech = 0x%lX\n", ptr_to_jlong(ckpMechanism));
}
TRACE0("FINISHED\n");
}
@@ -601,8 +601,8 @@
(ckpMechanism->pParameter == NULL)) {
freeCKMechanismPtr(ckpMechanism);
} else {
- (*env)->SetLongField(env, jMechanism, mech_pHandleID, (jlong)ckpMechanism);
- TRACE1("DEBUG C_VerifyRecoverInit: stored pMech = 0x%lX\n", (jlong)ckpMechanism);
+ (*env)->SetLongField(env, jMechanism, mech_pHandleID, ptr_to_jlong(ckpMechanism));
+ TRACE1("DEBUG C_VerifyRecoverInit: stored pMech = 0x%lX\n", ptr_to_jlong(ckpMechanism));
}
TRACE0("FINISHED\n");
}
--- a/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CSignature.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CSignature.java Fri Jun 21 09:05:45 2019 -0700
@@ -118,7 +118,9 @@
// initialize for signing. See JCA doc
@Override
protected void engineInitSign(PrivateKey key) throws InvalidKeyException {
-
+ if (key == null) {
+ throw new InvalidKeyException("Key cannot be null");
+ }
if ((key instanceof CPrivateKey) == false
|| !key.getAlgorithm().equalsIgnoreCase("RSA")) {
throw new InvalidKeyException("Key type not supported: "
@@ -139,9 +141,13 @@
// initialize for signing. See JCA doc
@Override
protected void engineInitVerify(PublicKey key) throws InvalidKeyException {
+ if (key == null) {
+ throw new InvalidKeyException("Key cannot be null");
+ }
// This signature accepts only RSAPublicKey
if ((key instanceof RSAPublicKey) == false) {
- throw new InvalidKeyException("Key type not supported");
+ throw new InvalidKeyException("Key type not supported: "
+ + key.getClass());
}
@@ -427,9 +433,13 @@
// initialize for signing. See JCA doc
@Override
protected void engineInitSign(PrivateKey key) throws InvalidKeyException {
+ if (key == null) {
+ throw new InvalidKeyException("Key cannot be null");
+ }
if ((key instanceof CPrivateKey) == false
|| !key.getAlgorithm().equalsIgnoreCase("EC")) {
- throw new InvalidKeyException("Key type not supported");
+ throw new InvalidKeyException("Key type not supported: "
+ + key.getClass() + " " + key.getAlgorithm());
}
privateKey = (CPrivateKey) key;
@@ -440,12 +450,15 @@
// initialize for signing. See JCA doc
@Override
protected void engineInitVerify(PublicKey key) throws InvalidKeyException {
+ if (key == null) {
+ throw new InvalidKeyException("Key cannot be null");
+ }
// This signature accepts only ECPublicKey
if ((key instanceof ECPublicKey) == false) {
- throw new InvalidKeyException("Key type not supported");
+ throw new InvalidKeyException("Key type not supported: "
+ + key.getClass());
}
-
if ((key instanceof CPublicKey) == false) {
try {
publicKey = importECPublicKey("EC",
@@ -508,9 +521,13 @@
@Override
protected void engineInitVerify(PublicKey key) throws InvalidKeyException {
+ if (key == null) {
+ throw new InvalidKeyException("Key cannot be null");
+ }
// This signature accepts only RSAPublicKey
if ((key instanceof java.security.interfaces.RSAPublicKey) == false) {
- throw new InvalidKeyException("Key type not supported");
+ throw new InvalidKeyException("Key type not supported: "
+ + key.getClass());
}
this.privateKey = null;
--- a/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c Fri Jun 21 09:05:45 2019 -0700
@@ -839,8 +839,51 @@
#define LD_BASE_OFFSET offsetof(struct r_debug, r_ldbase)
#define LINK_MAP_ADDR_OFFSET offsetof(struct link_map, l_addr)
#define LINK_MAP_NAME_OFFSET offsetof(struct link_map, l_name)
+#define LINK_MAP_LD_OFFSET offsetof(struct link_map, l_ld)
#define LINK_MAP_NEXT_OFFSET offsetof(struct link_map, l_next)
+// Calculate the load address of shared library
+// on prelink-enabled environment.
+//
+// In case of GDB, it would be calculated by offset of link_map.l_ld
+// and the address of .dynamic section.
+// See GDB implementation: lm_addr_check @ solib-svr4.c
+static uintptr_t calc_prelinked_load_address(struct ps_prochandle* ph, int lib_fd, ELF_EHDR* elf_ehdr, uintptr_t link_map_addr) {
+ ELF_PHDR *phbuf;
+ uintptr_t lib_ld;
+ uintptr_t lib_dyn_addr = 0L;
+ uintptr_t load_addr;
+ int i;
+
+ phbuf = read_program_header_table(lib_fd, elf_ehdr);
+ if (phbuf == NULL) {
+ print_debug("can't read program header of shared object\n");
+ return 0L;
+ }
+
+ // Get the address of .dynamic section from shared library.
+ for (i = 0; i < elf_ehdr->e_phnum; i++) {
+ if (phbuf[i].p_type == PT_DYNAMIC) {
+ lib_dyn_addr = phbuf[i].p_vaddr;
+ break;
+ }
+ }
+
+ free(phbuf);
+
+ if (ps_pdread(ph, (psaddr_t)link_map_addr + LINK_MAP_LD_OFFSET,
+ &lib_ld, sizeof(uintptr_t)) != PS_OK) {
+ print_debug("can't read address of dynamic section in shared object\n");
+ return 0L;
+ }
+
+ // Return the load address which is calculated by the address of .dynamic
+ // and link_map.l_ld .
+ load_addr = lib_ld - lib_dyn_addr;
+ print_debug("lib_ld = 0x%lx, lib_dyn_addr = 0x%lx -> lib_base_diff = 0x%lx\n", lib_ld, lib_dyn_addr, load_addr);
+ return load_addr;
+}
+
// read shared library info from runtime linker's data structures.
// This work is done by librtlb_db in Solaris
static bool read_shared_lib_info(struct ps_prochandle* ph) {
@@ -942,6 +985,14 @@
// continue with other libraries...
} else {
if (read_elf_header(lib_fd, &elf_ehdr)) {
+ if (lib_base_diff == 0x0L) {
+ lib_base_diff = calc_prelinked_load_address(ph, lib_fd, &elf_ehdr, link_map_addr);
+ if (lib_base_diff == 0x0L) {
+ close(lib_fd);
+ return false;
+ }
+ }
+
lib_base = lib_base_diff + find_base_address(lib_fd, &elf_ehdr);
print_debug("reading library %s @ 0x%lx [ 0x%lx ]\n",
lib_name, lib_base, lib_base_diff);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java Fri Jun 21 09:05:45 2019 -0700
@@ -64,8 +64,6 @@
public abstract long capacity();
public abstract long used();
- public long oopOffset() { return 0; }
-
public MemRegion reservedRegion() {
return new MemRegion(addr.addOffsetTo(reservedFieldOffset));
}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeap.java Fri Jun 21 09:05:45 2019 -0700
@@ -48,7 +48,6 @@
static private CIntegerField logMinObjAlignmentInBytes;
static private long regionPtrFieldSize;
- static private long brookPtrSize;
static {
VM.registerVMInitializedObserver(new Observer() {
public void update(Observable o, Object data) {
@@ -65,7 +64,6 @@
regions = type.getAddressField("_regions");
logMinObjAlignmentInBytes = type.getCIntegerField("_log_min_obj_alignment_in_bytes");
- brookPtrSize = db.lookupIntConstant("HeapWordSize").longValue();
Type regionPtrType = db.lookupType("ShenandoahHeapRegion*");
regionPtrFieldSize = regionPtrType.getSize();
}
@@ -75,11 +73,6 @@
}
@Override
- public long oopOffset() {
- return brookPtrSize;
- }
-
- @Override
public CollectedHeapName kind() {
return CollectedHeapName.SHENANDOAH;
}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeapRegion.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeapRegion.java Fri Jun 21 09:05:45 2019 -0700
@@ -184,10 +184,10 @@
if (regionStart == null) {
regionStart = start;
} else {
- regionEnd = start.addOffsetTo(heap.oopOffset() + size);
+ regionEnd = start.addOffsetTo(size);
}
}
- start = start.addOffsetTo(heap.oopOffset() + size);
+ start = start.addOffsetTo(size);
}
if (regionStart != null) {
@@ -201,15 +201,13 @@
}
private boolean hasForwardee(Address rawPtr) {
- // Use Mark as a helper to read forward pointer value.
+ // Forwarding pointer is stored in mark word when it is flagged "marked"
Mark mark = new Mark(rawPtr);
- Address forwardee = mark.valueAsAddress();
- return (forwardee != rawPtr.addOffsetTo(heap.oopOffset()));
+ return mark.isMarked();
}
private long getObjectSize(Address rawPtr) {
- // Dealing with a raw pointer, offsets forward pointer to find real Oop.
- OopHandle handle = rawPtr.addOffsetToAsOopHandle(heap.oopOffset());
+ OopHandle handle = rawPtr.addOffsetToAsOopHandle(0);
Oop obj = null;
try {
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Fri Jun 21 09:05:45 2019 -0700
@@ -256,8 +256,6 @@
while (handle.lessThan(top)) {
Oop obj = null;
- // Raw pointer walk
- handle = handle.addOffsetToAsOopHandle(heap.oopOffset());
try {
obj = newOop(handle);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/Classfile.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/Classfile.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, 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
@@ -49,7 +49,7 @@
private final List<ClassfileBytecode> codeAttributes;
private static final int MAJOR_VERSION_JAVA_MIN = 51; // JDK7
- private static final int MAJOR_VERSION_JAVA_MAX = 57; // JDK13
+ private static final int MAJOR_VERSION_JAVA_MAX = 58; // JDK14
private static final int MAGIC = 0xCAFEBABE;
/**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java Fri Jun 21 09:05:45 2019 -0700
@@ -43,7 +43,6 @@
altColor,
annotations,
arguments,
- bar,
block,
blockList,
bottomNav,
@@ -69,7 +68,6 @@
descfrmTypeLabel,
details,
detail,
- docSummary,
emphasizedPhrase,
exceptions,
externalLink,
@@ -80,18 +78,11 @@
helpSection,
hierarchy,
horizontal,
- footer,
implementationLabel,
- indexContainer,
- indexNav,
inheritance,
inheritedList,
interfaceName,
- leftContainer,
- leftTop,
- leftBottom,
legalCopy,
- mainContainer,
memberDetails,
memberName,
memberNameLabel,
@@ -99,7 +90,6 @@
memberSignature,
memberSummary,
methodDetails,
- methodSignature,
methodSummary,
modifiers,
moduleDescription,
@@ -128,8 +118,6 @@
requiresSummary,
returnLabel,
returnType,
- rightContainer,
- rightIframe,
rowColor,
searchTagLink,
searchTagResult,
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Fri Jun 21 09:05:45 2019 -0700
@@ -121,13 +121,6 @@
.legalCopy {
margin-left:.5em;
}
-.bar a, .bar a:link, .bar a:visited, .bar a:active {
- color:#FFFFFF;
- text-decoration:none;
-}
-.bar a:hover, .bar a:focus {
- color:#bb7a2a;
-}
.tab {
background-color:#0066FF;
color:#ffffff;
@@ -138,14 +131,6 @@
/*
* Styles for navigation bar.
*/
-.bar {
- background-color:#4D7A97;
- color:#FFFFFF;
- padding:.8em .5em .4em .8em;
- height:auto;/*height:1.8em;*/
- font-size:11px;
- margin:0;
-}
.navPadding {
padding-top: 107px;
}
@@ -246,29 +231,11 @@
/*
* Styles for page header and footer.
*/
-.header, .footer {
+.header {
clear:both;
margin:0 20px;
padding:5px 0 0 0;
}
-.indexNav {
- position:relative;
- font-size:12px;
- background-color:#dee3e9;
-}
-.indexNav ul {
- margin-top:0;
- padding:5px;
-}
-.indexNav ul li {
- display:inline;
- list-style-type:none;
- padding-right:10px;
- text-transform:uppercase;
-}
-.indexNav h1 {
- font-size:13px;
-}
.title {
color:#2c4557;
margin:10px 0;
@@ -280,9 +247,6 @@
margin:0 0 15px 0;
padding:0;
}
-.footer ul {
- margin:20px 0 5px 0;
-}
.header ul li, .footer ul li {
list-style:none;
font-size:13px;
@@ -315,23 +279,6 @@
padding:10px 20px;
position:relative;
}
-.indexContainer {
- margin:10px;
- position:relative;
- font-size:12px;
-}
-.indexContainer h2 {
- font-size:13px;
- padding:0 0 3px 0;
-}
-.indexContainer ul {
- margin:0;
- padding:0;
-}
-.indexContainer ul li {
- list-style:none;
- padding-top:2px;
-}
.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
font-size:12px;
font-weight:bold;
@@ -558,9 +505,6 @@
margin:0;
padding:10px 0;
}
-.docSummary {
- padding:0;
-}
div.block {
font-size:14px;
font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
@@ -632,61 +576,6 @@
font-style:normal;
}
/*
- * Styles for IFRAME.
- */
-.mainContainer {
- margin:0 auto;
- padding:0;
- height:100%;
- width:100%;
- position:fixed;
- top:0;
- left:0;
-}
-.leftContainer {
- height:100%;
- position:fixed;
- width:320px;
-}
-.leftTop {
- position:relative;
- float:left;
- width:315px;
- top:0;
- left:0;
- height:30%;
- border-right:6px solid #ccc;
- border-bottom:6px solid #ccc;
-}
-.leftBottom {
- position:relative;
- float:left;
- width:315px;
- bottom:0;
- left:0;
- height:70%;
- border-right:6px solid #ccc;
- border-top:1px solid #000;
-}
-.rightContainer {
- position:absolute;
- left:320px;
- top:0;
- bottom:0;
- height:100%;
- right:0;
- border-left:1px solid #000;
-}
-.rightIframe {
- margin:0;
- padding:0;
- height:100%;
- right:30px;
- width:100%;
- overflow:visible;
- margin-bottom:30px;
-}
-/*
* Styles specific to HTML5 elements.
*/
main, nav, header, footer, section {
@@ -772,9 +661,6 @@
margin: -100px 0 0 100px;
z-index: 1;
}
-.methodSignature {
- white-space:normal;
-}
.inheritedList {
margin: 10px 0 10px 0;
}
--- a/src/jdk.jcmd/linux/classes/sun/tools/ProcessHelper.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jcmd/linux/classes/sun/tools/ProcessHelper.java Fri Jun 21 09:05:45 2019 -0700
@@ -66,7 +66,7 @@
if (cmdLine.startsWith(CMD_PREFIX)) {
cmdLine = cmdLine.substring(CMD_PREFIX.length());
}
- String[] parts = cmdLine.split(" ");
+ String[] parts = cmdLine.split("\0");
String mainClass = null;
if(parts.length == 0) {
@@ -87,7 +87,7 @@
// options are used then just return the value (the path to the jar file or module
// name with a main class). Otherwise, the main class name is the first part that
// is not a Java option (doesn't start with '-' and is not a classpath or a module
- // path).
+ // whitespace option).
for (int i = 1; i < parts.length && mainClass == null; i++) {
if (i < parts.length - 1) {
@@ -95,10 +95,15 @@
return parts[i + 1];
}
}
- // If this is a classpath or a module path option then skip the next part
- // (the classpath or the module path itself)
+
+ if (parts[i].startsWith("--module=")) {
+ return parts[i].substring("--module=".length());
+ }
+
+ // If this is a classpath or a module whitespace option then skip the next part
+ // (the classpath or the option value itself)
if (parts[i].equals("-cp") || parts[i].equals("-classpath") || parts[i].equals("--class-path") ||
- parts[i].equals("-p") || parts[i].equals("--module-path")) {
+ isModuleWhiteSpaceOption(parts[i])) {
i++;
continue;
}
@@ -106,6 +111,12 @@
if (parts[i].startsWith("-")) {
continue;
}
+
+ // If it is a source-file mode then return null
+ if (parts[i].endsWith(".java")) {
+ return null;
+ }
+
mainClass = parts[i];
}
return mainClass;
@@ -115,11 +126,24 @@
private static String getCommandLine(String pid) {
try (Stream<String> lines =
Files.lines(Paths.get("/proc/" + pid + "/cmdline"))) {
- return lines.map(x -> x.replaceAll("\0", " ")).findFirst().orElse(null);
+ return lines.findFirst().orElse(null);
} catch (IOException | UncheckedIOException e) {
return null;
}
}
+
+ private static boolean isModuleWhiteSpaceOption(String option) {
+ return option.equals("-p") ||
+ option.equals("--module-path") ||
+ option.equals("--upgrade-module-path") ||
+ option.equals("--add-modules") ||
+ option.equals("--limit-modules") ||
+ option.equals("--add-exports") ||
+ option.equals("--add-opens") ||
+ option.equals("--add-reads") ||
+ option.equals("--patch-module");
+ }
+
}
--- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/JavapTask.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/JavapTask.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -808,7 +808,7 @@
MessageDigest md = null;
if (options.sysInfo || options.verbose) {
try {
- md = MessageDigest.getInstance("MD5");
+ md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException ignore) {
}
in = new DigestInputStream(in, md);
@@ -829,7 +829,7 @@
if (options.sysInfo || options.verbose) {
classWriter.setFile(info.fo.toUri());
classWriter.setLastModified(info.fo.getLastModified());
- classWriter.setDigest("MD5", info.digest);
+ classWriter.setDigest("SHA-256", info.digest);
classWriter.setFileSize(info.size);
}
--- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap.properties Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap.properties Fri Jun 21 09:05:45 2019 -0700
@@ -99,7 +99,7 @@
\ -constants Show final constants
main.opt.sysinfo=\
-\ -sysinfo Show system info (path, size, date, MD5 hash)\n\
+\ -sysinfo Show system info (path, size, date, SHA-256 hash)\n\
\ of class being processed
main.opt.module=\
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java Fri Jun 21 09:05:45 2019 -0700
@@ -318,7 +318,6 @@
PlatformRecording clone = recorder.newTemporaryRecording();
clone.setShouldWriteActiveRecordingEvent(false);
clone.setName(getName());
- clone.setDestination(this.destination);
clone.setToDisk(true);
// We purposely don't clone settings here, since
// a union a == a
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/DCmdDump.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/DCmdDump.java Fri Jun 21 09:05:45 2019 -0700
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.nio.file.InvalidPathException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
@@ -126,26 +128,37 @@
recording = findRecording(name);
}
PlatformRecorder recorder = PrivateAccess.getInstance().getPlatformRecorder();
- synchronized (recorder) {
- dump(recorder, recording, name, filename, maxSize, pathToGcRoots, beginTime, endTime);
+
+ try {
+ synchronized (recorder) {
+ dump(recorder, recording, name, filename, maxSize, pathToGcRoots, beginTime, endTime);
+ }
+ } catch (IOException | InvalidPathException e) {
+ throw new DCmdException("Dump failed. Could not copy recording data. %s", e.getMessage());
}
return getResult();
}
- public void dump(PlatformRecorder recorder, Recording recording, String name, String filename, Long maxSize, Boolean pathToGcRoots, Instant beginTime, Instant endTime) throws DCmdException {
+ public void dump(PlatformRecorder recorder, Recording recording, String name, String filename, Long maxSize, Boolean pathToGcRoots, Instant beginTime, Instant endTime) throws DCmdException, IOException {
try (PlatformRecording r = newSnapShot(recorder, recording, pathToGcRoots)) {
r.filter(beginTime, endTime, maxSize);
if (r.getChunks().isEmpty()) {
throw new DCmdException("Dump failed. No data found in the specified interval.");
}
- SafePath dumpFile = resolvePath(recording, filename);
-
- // Needed for JVM
- Utils.touch(dumpFile.toPath());
- r.dumpStopped(new WriteableUserPath(dumpFile.toPath()));
- reportOperationComplete("Dumped", name, dumpFile);
- } catch (IOException | InvalidPathException e) {
- throw new DCmdException("Dump failed. Could not copy recording data. %s", e.getMessage());
+ // If a filename exist, use it
+ // if a filename doesn't exist, use destination set earlier
+ // if destination doesn't exist, generate a filename
+ WriteableUserPath wup = null;
+ if (recording != null) {
+ PlatformRecording pRecording = PrivateAccess.getInstance().getPlatformRecording(recording);
+ wup = pRecording.getDestination();
+ }
+ if (filename != null || (filename == null && wup == null) ) {
+ SafePath safe = resolvePath(recording, filename);
+ wup = new WriteableUserPath(safe.toPath());
+ }
+ r.dumpStopped(wup);
+ reportOperationComplete("Dumped", name, new SafePath(wup.getRealPathText()));
}
}
--- a/src/jdk.jshell/share/classes/jdk/jshell/Corraller.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Corraller.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -25,132 +25,226 @@
package jdk.jshell;
-import java.io.IOException;
-import java.io.StringWriter;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.Tree;
-import com.sun.tools.javac.code.Flags;
+import com.sun.source.tree.Tree.Kind;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.JCTree.JCBlock;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
-import com.sun.tools.javac.tree.JCTree.JCExpression;
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
-import com.sun.tools.javac.tree.JCTree.JCNewClass;
-import com.sun.tools.javac.tree.JCTree.JCStatement;
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
-import com.sun.tools.javac.tree.Pretty;
-import com.sun.tools.javac.tree.TreeMaker;
-import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.tree.JCTree.Visitor;
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Names;
+import static com.sun.tools.javac.code.Flags.FINAL;
+import static com.sun.tools.javac.code.Flags.PUBLIC;
import static com.sun.tools.javac.code.Flags.STATIC;
import static com.sun.tools.javac.code.Flags.INTERFACE;
import static com.sun.tools.javac.code.Flags.ENUM;
-import static com.sun.tools.javac.code.Flags.PUBLIC;
-import com.sun.tools.javac.util.Name;
-import jdk.jshell.spi.SPIResolutionException;
+import jdk.jshell.Wrap.CompoundWrap;
+import jdk.jshell.Wrap.Range;
+import jdk.jshell.Wrap.RangeWrap;
/**
* Produce a corralled version of the Wrap for a snippet.
- * Incoming tree is mutated.
- *
- * @author Robert Field
*/
-class Corraller extends Pretty {
+class Corraller extends Visitor {
+
+ /** Visitor result field: a Wrap
+ */
+ protected Wrap result;
+
+ private final TreeDissector dis;
+ private final String resolutionExceptionBlock;
+ private final String source;
+
+ public Corraller(TreeDissector dis, int keyIndex, String source) {
+ this.dis = dis;
+ this.resolutionExceptionBlock = "\n { throw new jdk.jshell.spi.SPIResolutionException(" + keyIndex + "); }";
+ this.source = source;
+ }
+
+ public Wrap corralType(ClassTree tree) {
+ return corralToWrap(tree);
+ }
+
+ public Wrap corralMethod(MethodTree tree) {
+ return corralToWrap(tree);
+ }
- private final StringWriter out;
- private final int keyIndex;
- private final TreeMaker make;
- private final Names names;
- private JCBlock resolutionExceptionBlock;
+ private Wrap corralToWrap(Tree tree) {
+ try {
+ JCTree jct = (JCTree) tree;
+ Wrap w = new CompoundWrap(
+ " public static\n ",
+ corral(jct));
+ debugWrap("corralToWrap SUCCESS source: %s -- wrap:\n %s\n", tree, w.wrapped());
+ return w;
+ } catch (Exception ex) {
+ debugWrap("corralToWrap FAIL: %s - %s\n", tree, ex);
+ //ex.printStackTrace(System.err);
+ return null;
+ }
+ }
- public Corraller(int keyIndex, Context context) {
- this(new StringWriter(), keyIndex, context);
+ // Corral a single node.
+// @SuppressWarnings("unchecked")
+ private <T extends JCTree> Wrap corral(T tree) {
+ if (tree == null) {
+ return null;
+ } else {
+ tree.accept(this);
+ Wrap tmpResult = this.result;
+ this.result = null;
+ return tmpResult;
+ }
+ }
+
+ private String defaultConstructor(JCClassDecl tree) {
+ return " public " + tree.name.toString() + "() " +
+ resolutionExceptionBlock;
}
- private Corraller(StringWriter out, int keyIndex, Context context) {
- super(out, false);
- this.out = out;
- this.keyIndex = keyIndex;
- this.make = TreeMaker.instance(context);
- this.names = Names.instance(context);
- }
+ /* ***************************************************************************
+ * Visitor methods
+ ****************************************************************************/
- public Wrap corralType(ClassTree ct) {
- ((JCClassDecl) ct).mods.flags |= Flags.STATIC | Flags.PUBLIC;
- return corral(ct);
+ @Override
+ public void visitClassDef(JCClassDecl tree) {
+ boolean isEnum = (tree.mods.flags & ENUM) != 0;
+ boolean isInterface = (tree.mods.flags & INTERFACE ) != 0;
+ int classBegin = dis.getStartPosition(tree);
+ int classEnd = dis.getEndPosition(tree);
+ //debugWrap("visitClassDef: %d-%d = %s\n", classBegin, classEnd, source.substring(classBegin, classEnd));
+ ListBuffer<Object> wrappedDefs = new ListBuffer<>();
+ int bodyBegin = -1;
+ if (tree.defs != null && !tree.defs.isEmpty()) {
+ if (isEnum) {
+ // copy the enum constants verbatim
+ int enumBegin = dis.getStartPosition(tree.defs.head);
+ JCTree t = null; // null to shut-up compiler, always set because non-empty
+ List<? extends JCTree> l = tree.defs;
+ for (; l.nonEmpty(); l = l.tail) {
+ t = l.head;
+ if (t.getKind() == Kind.VARIABLE) {
+ if ((((JCVariableDecl)t).mods.flags & (PUBLIC | STATIC | FINAL)) != (PUBLIC | STATIC | FINAL)) {
+ // non-enum constant, process normally
+ break;
+ }
+ } else {
+ // non-variable, process normally
+ break;
+ }
+ }
+ int constEnd = l.nonEmpty() // end of constants
+ ? dis.getStartPosition(l.head) - 1 // is one before next defs, if there is one
+ : dis.getEndPosition(t); // and otherwise end of the last constant
+ wrappedDefs.append(new RangeWrap(source, new Range(enumBegin, constEnd)));
+ // handle any other defs
+ for (; l.nonEmpty(); l = l.tail) {
+ wrappedDefs.append("\n");
+ t = l.head;
+ wrappedDefs.append(corral(t));
+ }
+ } else {
+ // non-enum
+ boolean constructorSeen = false;
+ for (List<? extends JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
+ wrappedDefs.append("\n ");
+ JCTree t = l.head;
+ switch (t.getKind()) {
+ case METHOD:
+ constructorSeen = constructorSeen || ((MethodTree)t).getName() == tree.name.table.names.init;
+ break;
+ case BLOCK:
+ // throw exception in instance initializer too -- inline because String not Wrap
+ wrappedDefs.append((((JCBlock)t).flags & STATIC) != 0
+ ? new RangeWrap(source, dis.treeToRange(t))
+ : resolutionExceptionBlock);
+ continue; // already appended, skip append below
+ }
+ wrappedDefs.append(corral(t));
+ }
+ if (!constructorSeen && !isInterface && !isEnum) {
+ // Generate a default constructor, since
+ // this is a regular class and there are no constructors
+ if (wrappedDefs.length() > 0) {
+ wrappedDefs.append("\n ");
+ }
+ wrappedDefs.append(defaultConstructor(tree));
+ }
+ }
+ bodyBegin = dis.getStartPosition(tree.defs.head);
+ }
+ Object defs = wrappedDefs.length() == 1
+ ? wrappedDefs.first()
+ : new CompoundWrap(wrappedDefs.toArray());
+ if (bodyBegin < 0) {
+ int brace = source.indexOf('{', classBegin);
+ if (brace < 0 || brace >= classEnd) {
+ throw new IllegalArgumentException("No brace found: " + source.substring(classBegin, classEnd));
+ }
+ bodyBegin = brace + 1;
+ }
+ // body includes openning brace
+ result = new CompoundWrap(
+ new RangeWrap(source, new Range(classBegin, bodyBegin)),
+ defs,
+ "\n}"
+ );
}
- public Wrap corralMethod(MethodTree mt) {
- ((JCMethodDecl) mt).mods.flags |= Flags.STATIC | Flags.PUBLIC;
- return corral(mt);
+ // Corral the body
+ @Override
+ public void visitMethodDef(JCMethodDecl tree) {
+ int methodBegin = dis.getStartPosition(tree);
+ int methodEnd = dis.getEndPosition(tree);
+ //debugWrap("+visitMethodDef: %d-%d = %s\n", methodBegin, methodEnd,
+ // source.substring(methodBegin, methodEnd));
+ int bodyBegin = dis.getStartPosition(tree.getBody());
+ if (bodyBegin < 0) {
+ bodyBegin = source.indexOf('{', methodBegin);
+ if (bodyBegin > methodEnd) {
+ bodyBegin = -1;
+ }
+ }
+ if (bodyBegin > 0) {
+ //debugWrap("-visitMethodDef BEGIN: %d = '%s'\n", bodyBegin,
+ // source.substring(methodBegin, bodyBegin));
+ Range noBodyRange = new Range(methodBegin, bodyBegin);
+ result = new CompoundWrap(
+ new RangeWrap(source, noBodyRange),
+ resolutionExceptionBlock);
+ } else {
+ Range range = new Range(methodBegin, methodEnd);
+ result = new RangeWrap(source, range);
+ }
}
- private Wrap corral(Tree tree) {
- try {
- printStat((JCTree) tree);
- } catch (IOException e) {
- throw new AssertionError(e);
+ // Remove initializer, if present
+ @Override
+ public void visitVarDef(JCVariableDecl tree) {
+ int begin = dis.getStartPosition(tree);
+ int end = dis.getEndPosition(tree);
+ if (tree.init == null) {
+ result = new RangeWrap(source, new Range(begin, end));
+ } else {
+ int sinit = dis.getStartPosition(tree.init);
+ int eq = source.lastIndexOf('=', sinit);
+ if (eq < begin) {
+ throw new IllegalArgumentException("Equals not found before init: " + source + " @" + sinit);
+ }
+ result = new CompoundWrap(new RangeWrap(source, new Range(begin, eq - 1)), ";");
}
- return Wrap.simpleWrap(out.toString());
}
@Override
- public void visitBlock(JCBlock tree) {
- // Top-level executable blocks (usually method bodies) are corralled
- super.visitBlock((tree.flags & STATIC) != 0
- ? tree
- : resolutionExceptionBlock());
- }
-
- @Override
- public void visitVarDef(JCVariableDecl tree) {
- // No field inits in corralled classes
- tree.init = null;
- super.visitVarDef(tree);
+ public void visitTree(JCTree tree) {
+ throw new IllegalArgumentException("Unexpected tree: " + tree);
}
- @Override
- public void visitClassDef(JCClassDecl tree) {
- if ((tree.mods.flags & (INTERFACE | ENUM)) == 0 &&
- !tree.getMembers().stream()
- .anyMatch(t -> t.getKind() == Tree.Kind.METHOD &&
- ((MethodTree) t).getName() == tree.name.table.names.init)) {
- // Generate a default constructor, since
- // this is a regular class and there are no constructors
- ListBuffer<JCTree> ndefs = new ListBuffer<>();
- ndefs.addAll(tree.defs);
- ndefs.add(make.MethodDef(make.Modifiers(PUBLIC),
- tree.name.table.names.init,
- null, List.nil(), List.nil(), List.nil(),
- resolutionExceptionBlock(), null));
- tree.defs = ndefs.toList();
- }
- super.visitClassDef(tree);
- }
-
- // Build a compiler tree for an exception throwing block, e.g.:
- // {
- // throw new jdk.jshell.spi.SPIResolutionException(9);
- // }
- private JCBlock resolutionExceptionBlock() {
- if (resolutionExceptionBlock == null) {
- JCExpression expClass = null;
- // Split the exception class name at dots
- for (String id : SPIResolutionException.class.getName().split("\\.")) {
- Name nm = names.fromString(id);
- if (expClass == null) {
- expClass = make.Ident(nm);
- } else {
- expClass = make.Select(expClass, nm);
- }
- }
- JCNewClass exp = make.NewClass(null,
- null, expClass, List.of(make.Literal(keyIndex)), null);
- resolutionExceptionBlock = make.Block(0L, List.of(make.Throw(exp)));
- }
- return resolutionExceptionBlock;
+ void debugWrap(String format, Object... args) {
+ //state.debug(this, InternalDebugControl.DBG_WRAP, format, args);
}
}
--- a/src/jdk.jshell/share/classes/jdk/jshell/Eval.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Eval.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -44,7 +44,6 @@
import com.sun.source.tree.NewClassTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.VariableTree;
-import com.sun.source.util.TreeScanner;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.Pretty;
import java.io.IOException;
@@ -622,7 +621,6 @@
name = "$" + ++varNumber;
}
}
- TreeDissector dis = TreeDissector.createByFirstClass(pt);
ExpressionInfo varEI =
ExpressionToTypeInfo.localVariableTypeForInitializer(compileSource, state, true);
String declareTypeName;
@@ -634,6 +632,7 @@
fullTypeName = varEI.fullTypeName;
displayTypeName = varEI.displayTypeName;
+ TreeDissector dis = TreeDissector.createByFirstClass(pt);
Pair<Wrap, Wrap> anonymous2Member =
anonymous2Member(varEI, compileSource, new Range(0, compileSource.length()), dis, expr.getExpression());
guts = Wrap.tempVarWrap(anonymous2Member.second.wrapped(), declareTypeName, name, anonymous2Member.first);
@@ -680,8 +679,8 @@
String name = klassTree.getSimpleName().toString();
DiagList modDiag = modifierDiagnostics(klassTree.getModifiers(), dis, false);
TypeDeclKey key = state.keyMap.keyForClass(name);
- // Corralling mutates. Must be last use of pt, unitTree, klassTree
- Wrap corralled = new Corraller(key.index(), pt.getContext()).corralType(klassTree);
+ // Corralling
+ Wrap corralled = new Corraller(dis, key.index(), compileSource).corralType(klassTree);
Wrap guts = Wrap.classMemberWrap(compileSource);
Snippet snip = new TypeDeclSnippet(key, userSource, guts,
@@ -752,8 +751,8 @@
Tree returnType = mt.getReturnType();
DiagList modDiag = modifierDiagnostics(mt.getModifiers(), dis, true);
MethodKey key = state.keyMap.keyForMethod(name, parameterTypes);
- // Corralling mutates. Must be last use of pt, unitTree, mt
- Wrap corralled = new Corraller(key.index(), pt.getContext()).corralMethod(mt);
+ // Corralling
+ Wrap corralled = new Corraller(dis, key.index(), compileSource).corralMethod(mt);
if (modDiag.hasErrors()) {
return compileFailResult(modDiag, userSource, Kind.METHOD);
--- a/src/jdk.jshell/share/classes/jdk/jshell/GeneralWrap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jshell/share/classes/jdk/jshell/GeneralWrap.java Fri Jun 21 09:05:45 2019 -0700
@@ -28,7 +28,10 @@
/**
* Common interface for all wrappings of snippet source to Java source.
*
- * @author Robert Field
+ * Snippet index is index into the source of the snippet. Note: If the snippet is a sub-range of
+ * the source, the index is not the index in the snippet.
+ *
+ * Wrap index is index into the wrapped snippet.
*/
interface GeneralWrap {
--- a/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2017, 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
@@ -301,7 +301,7 @@
SourcePositions sp = at.trees().getSourcePositions();
CompilationUnitTree topLevel = at.firstCuTree();
List<Suggestion> result = new ArrayList<>();
- TreePath tp = pathFor(topLevel, sp, code.snippetIndexToWrapIndex(cursor));
+ TreePath tp = pathFor(topLevel, sp, code, cursor);
if (tp != null) {
Scope scope = at.trees().getScope(tp);
Predicate<Element> accessibility = createAccessibilityFilter(at, tp);
@@ -563,7 +563,10 @@
}
}
- private TreePath pathFor(CompilationUnitTree topLevel, SourcePositions sp, int pos) {
+ private TreePath pathFor(CompilationUnitTree topLevel, SourcePositions sp, GeneralWrap wrap, int snippetEndPos) {
+ int wrapEndPos = snippetEndPos == 0
+ ? wrap.snippetIndexToWrapIndex(snippetEndPos)
+ : wrap.snippetIndexToWrapIndex(snippetEndPos - 1) + 1;
TreePath[] deepest = new TreePath[1];
new TreePathScanner<Void, Void>() {
@@ -576,7 +579,7 @@
long end = sp.getEndPosition(topLevel, tree);
long prevEnd = deepest[0] != null ? sp.getEndPosition(topLevel, deepest[0].getLeaf()) : -1;
- if (start <= pos && pos <= end &&
+ if (start <= wrapEndPos && wrapEndPos <= end &&
(start != end || prevEnd != end || deepest[0] == null ||
deepest[0].getParentPath().getLeaf() != getCurrentPath().getLeaf())) {
deepest[0] = new TreePath(getCurrentPath(), tree);
@@ -1176,7 +1179,7 @@
return proc.taskFactory.analyze(codeWrap, List.of(keepParameterNames), at -> {
SourcePositions sp = at.trees().getSourcePositions();
CompilationUnitTree topLevel = at.firstCuTree();
- TreePath tp = pathFor(topLevel, sp, codeWrap.snippetIndexToWrapIndex(cursor));
+ TreePath tp = pathFor(topLevel, sp, codeWrap, cursor);
if (tp == null)
return Collections.emptyList();
@@ -1526,7 +1529,7 @@
return proc.taskFactory.analyze(codeWrap, at -> {
SourcePositions sp = at.trees().getSourcePositions();
CompilationUnitTree topLevel = at.firstCuTree();
- TreePath tp = pathFor(topLevel, sp, codeWrap.snippetIndexToWrapIndex(codeFin.length()));
+ TreePath tp = pathFor(topLevel, sp, codeWrap, codeFin.length());
if (tp.getLeaf().getKind() != Kind.IDENTIFIER) {
return new QualifiedNames(Collections.emptyList(), -1, true, false);
}
--- a/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -34,8 +34,6 @@
/**
* Wrapping of source into Java methods, fields, etc. All but outer layer
* wrapping with imports and class.
- *
- * @author Robert Field
*/
abstract class Wrap implements GeneralWrap {
@@ -184,7 +182,7 @@
public static final class Range {
final int begin;
- final int end;
+ final int end; // exclusive
Range(int begin, int end) {
this.begin = begin;
@@ -216,7 +214,7 @@
@Override
public String toString() {
- return "Range[" + begin + "," + end + "]";
+ return "Range[" + begin + "," + end + ")";
}
}
@@ -280,8 +278,12 @@
before += s.length();
} else if (o instanceof Wrap) {
Wrap w = (Wrap) o;
- if (sni >= w.firstSnippetIndex() && sni <= w.lastSnippetIndex()) {
- return w.snippetIndexToWrapIndex(sni) + before;
+ if (sni >= w.firstSnippetIndex() && sni < w.lastSnippetIndex()) {
+ int wwi = w.snippetIndexToWrapIndex(sni);
+ debugWrap("\nCommoundWrap.snippetIndexToWrapIndex: SnippetIndex(%d) -> WrapIndex(%d + %d = %d)"
+ + "\n === %s",
+ sni, wwi, before, wwi + before, wrapped());
+ return wwi + before;
}
before += w.wrapped().length();
}
@@ -300,8 +302,8 @@
w = (Wrap) o;
int len = w.wrapped().length();
if ((wi - before) <= len) {
- //System.err.printf("Defer to wrap %s - wi: %d. before; %d -- %s >>> %s\n",
- // w, wi, before, w.debugPos(wi - before), w.wrapped());
+ debugWrap("CommoundWrap.wrapIndexToWrap: Defer to wrap %s - wi: %d. before; %d >>> %s\n",
+ w, wi, before, w.wrapped());
return w;
}
before += len;
@@ -321,9 +323,10 @@
Wrap w = (Wrap) o;
int len = w.wrapped().length();
if ((wi - before) <= len) {
- //System.err.printf("Defer to wrap %s - wi: %d. before; %d -- %s >>> %s\n",
- // w, wi, before, w.debugPos(wi - before), w.wrapped());
- return w.wrapIndexToSnippetIndex(wi - before);
+ int si = w.wrapIndexToSnippetIndex(wi - before);
+ debugWrap("\nCommoundWrap.wrapIndexToSnippetIndex: WrapIndex(%d) -> SnippetIndex(%d)\n",
+ wi, si);
+ return si;
}
before += len;
}
@@ -369,7 +372,7 @@
} else if (o instanceof Wrap) {
w = (Wrap) o;
int lns = countLines(w.wrapped());
- if ((wline - before) < lns) {
+ if ((wline - before) <= lns) {
return w;
}
before += lns;
@@ -388,7 +391,7 @@
} else if (o instanceof Wrap) {
Wrap w = (Wrap) o;
int lns = countLines(w.wrapped());
- if ((wline - before) < lns) {
+ if ((wline - before) <= lns) {
return w.wrapLineToSnippetLine(wline - before);
}
before += lns;
@@ -409,16 +412,21 @@
@Override
public String toString() {
- return "CompoundWrap(" + Arrays.stream(os).map(Object::toString).collect(joining(",")) + ")";
+ return "CompoundWrap(" + Arrays.stream(os)
+ .map(o -> (o instanceof String)
+ ? "\"" + o + "\""
+ : o.toString())
+ .collect(joining(","))
+ + ")";
}
}
- private static class RangeWrap extends Wrap {
+ static class RangeWrap extends Wrap {
final Range range;
- final String wrapped;
- final int firstSnline;
- final int lastSnline;
+ final String wrapped; // The snippet portion of the source
+ final int firstSnline; // Line count to start of snippet portion
+ final int lastSnline; // Line count to end of snippet portion
RangeWrap(String snippetSource, Range usedWithinSnippet) {
this.range = usedWithinSnippet;
@@ -436,24 +444,39 @@
@Override
public int snippetIndexToWrapIndex(int sni) {
if (sni < range.begin) {
+ debugWrap("\nRangeWrap.snippetIndexToWrapIndex: ERR before SnippetIndex(%d) -> WrapIndex(%d + %d = %d)\n",
+ sni, 0);
return 0;
}
if (sni > range.end) {
+ debugWrap("\nRangeWrap.snippetIndexToWrapIndex: ERR after SnippetIndex(%d) -> WrapIndex(%d + %d = %d)\n",
+ sni, range.length());
return range.length();
}
- return sni - range.begin;
+ int wi = sni - range.begin;
+ debugWrap("\nRangeWrap.snippetIndexToWrapIndex: SnippetIndex(%d) -> WrapIndex(%d + %d = %d)"
+ + "\n === %s",
+ sni, sni, range.begin, sni - range.begin, wrapped());
+ return wi;
}
@Override
public int wrapIndexToSnippetIndex(int wi) {
if (wi < 0) {
+ debugWrap("\nRangeWrap.wrapIndexToSnippetIndex: ERR before WrapIndex(%d) -> SnippetIndex(%d)\n",
+ wi, 0);
return 0; // bad index
}
int max = range.length();
if (wi > max) {
- wi = max;
+ debugWrap("\nRangeWrap.wrapIndexToSnippetIndex: ERR after WrapIndex(%d) -> SnippetIndex(%d)\n",
+ wi, max + range.begin);
+ return max + range.begin;
}
- return wi + range.begin;
+ int sni = wi + range.begin;
+ debugWrap("\nRangeWrap.wrapIndexToSnippetIndex: WrapIndex(%d) -> SnippetIndex(%d)\n",
+ wi, sni);
+ return sni;
}
@Override
@@ -535,4 +558,9 @@
super(" public static ", wtype, brackets + " ", wname, semi(wname));
}
}
+
+ void debugWrap(String format, Object... args) {
+ //System.err.printf(format, args);
+ //state.debug(this, InternalDebugControl.DBG_WRAP, format, args);
+ }
}
--- a/src/jdk.rmic/share/classes/sun/tools/java/RuntimeConstants.java Tue Jun 18 21:40:50 2019 -0700
+++ b/src/jdk.rmic/share/classes/sun/tools/java/RuntimeConstants.java Fri Jun 21 09:05:45 2019 -0700
@@ -67,7 +67,7 @@
/* Class File Constants */
int JAVA_MAGIC = 0xcafebabe;
int JAVA_MIN_SUPPORTED_VERSION = 45;
- int JAVA_MAX_SUPPORTED_VERSION = 57;
+ int JAVA_MAX_SUPPORTED_VERSION = 58;
int JAVA_MAX_SUPPORTED_MINOR_VERSION = 0;
int JAVA_MIN_PREVIEW_MAJOR_VERSION = 55; // preview intro'd in JDK 11
int JAVA_PREVIEW_MINOR_VERSION = 0xffff;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/ProblemList-aot.txt Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,74 @@
+#
+# 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.
+#
+
+#############################################################################
+#
+# List of quarantined tests for testing with AOT.
+#
+#############################################################################
+
+serviceability/sa/CDSJMapClstats.java 8216181 generic-all
+serviceability/sa/ClhsdbAttach.java 8216181 generic-all
+serviceability/sa/ClhsdbCDSCore.java 8216181 generic-all
+serviceability/sa/ClhsdbCDSJstackPrintAll.java 8216181 generic-all
+serviceability/sa/ClhsdbField.java 8216181 generic-all
+serviceability/sa/ClhsdbFindPC.java 8216181 generic-all
+serviceability/sa/ClhsdbFlags.java 8216181 generic-all
+serviceability/sa/ClhsdbInspect.java 8216181 generic-all
+serviceability/sa/ClhsdbJdis.java 8216181 generic-all
+serviceability/sa/ClhsdbJhisto.java 8216181 generic-all
+serviceability/sa/ClhsdbJstack.java 8216181 generic-all
+serviceability/sa/ClhsdbLongConstant.java 8216181 generic-all
+serviceability/sa/ClhsdbPmap.java 8216181 generic-all
+serviceability/sa/ClhsdbPrintAll.java 8216181 generic-all
+serviceability/sa/ClhsdbPrintAs.java 8216181 generic-all
+serviceability/sa/ClhsdbPrintStatics.java 8216181 generic-all
+serviceability/sa/ClhsdbPstack.java 8216181 generic-all
+serviceability/sa/ClhsdbRegionDetailsScanOopsForG1.java 8216181 generic-all
+serviceability/sa/ClhsdbScanOops.java 8216181 generic-all
+serviceability/sa/ClhsdbSource.java 8216181 generic-all
+serviceability/sa/ClhsdbThread.java 8216181 generic-all
+serviceability/sa/ClhsdbVmStructsDump.java 8216181 generic-all
+serviceability/sa/ClhsdbWhere.java 8216181 generic-all
+serviceability/sa/DeadlockDetectionTest.java 8216181 generic-all
+serviceability/sa/JhsdbThreadInfoTest.java 8216181 generic-all
+serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java 8216181 generic-all
+serviceability/sa/sadebugd/SADebugDTest.java 8216181 generic-all
+serviceability/sa/TestClassDump.java 8216181 generic-all
+serviceability/sa/TestClhsdbJstackLock.java 8216181 generic-all
+serviceability/sa/TestCpoolForInvokeDynamic.java 8216181 generic-all
+serviceability/sa/TestDefaultMethods.java 8216181 generic-all
+serviceability/sa/TestG1HeapRegion.java 8216181 generic-all
+serviceability/sa/TestHeapDumpForInvokeDynamic.java 8216181 generic-all
+serviceability/sa/TestHeapDumpForLargeArray.java 8216181 generic-all
+serviceability/sa/TestInstanceKlassSizeForInterface.java 8216181 generic-all
+serviceability/sa/TestInstanceKlassSize.java 8216181 generic-all
+serviceability/sa/TestIntConstant.java 8216181 generic-all
+serviceability/sa/TestJhsdbJstackLock.java 8216181 generic-all
+serviceability/sa/TestJhsdbJstackMixed.java 8216181 generic-all
+serviceability/sa/TestJmapCore.java 8216181 generic-all
+serviceability/sa/TestJmapCoreMetaspace.java 8216181 generic-all
+serviceability/sa/TestPrintMdo.java 8216181 generic-all
+serviceability/sa/TestRevPtrsForInvokeDynamic.java 8216181 generic-all
+serviceability/sa/TestType.java 8216181 generic-all
+serviceability/sa/TestUniverse.java 8216181 generic-all
--- a/test/hotspot/jtreg/ProblemList-graal.txt Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/ProblemList-graal.txt Fri Jun 21 09:05:45 2019 -0700
@@ -43,8 +43,6 @@
compiler/graalunit/JttThreadsTest.java 8207757 generic-all
-compiler/jvmci/SecurityRestrictionsTest.java 8181837 generic-all
-
compiler/unsafe/UnsafeGetConstantField.java 8181833 generic-all
compiler/unsafe/UnsafeGetStableArrayElement.java 8181833 generic-all
compiler/unsafe/UnsafeOffHeapBooleanTest.java 8181833 generic-all
@@ -62,7 +60,7 @@
gc/g1/TestPeriodicCollection.java 8196611 generic-all
gc/g1/TestFromCardCacheIndex.java 8196611 generic-all
gc/parallel/TestPrintGCDetailsVerbose.java 8196611 generic-all
-vm/gc/InfiniteList.java 8196611 generic-all
+gc/InfiniteList.java 8196611 generic-all
vmTestbase/gc/lock/jni/jnilock001/TestDescription.java 8196611 generic-all
vmTestbase/gc/lock/jniref/jnireflock04/TestDescription.java 8196611 generic-all
@@ -149,16 +147,16 @@
# jvmti tests
vmTestbase/nsk/jvmti/PopFrame/popframe009/TestDescription.java 8195639 generic-all
-vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn001/TestDescription.java 8195674 generic-all
-vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn002/TestDescription.java 8195674 generic-all
+vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn001/TestDescription.java 8195674,8195635 generic-all
+vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn002/TestDescription.java 8195674,8195635 generic-all
runtime/appcds/cacheObject/RedefineClassTest.java 8204506 macosx-all
-vmTestbase/nsk/jvmti/scenarios/hotswap/HS102/hs102t001/TestDescription.java 8204506 macosx-all
+vmTestbase/nsk/jvmti/scenarios/hotswap/HS102/hs102t001/TestDescription.java 8204506,8195635 macosx-all,generic-all
vmTestbase/nsk/jvmti/scenarios/hotswap/HS102/hs102t002/TestDescription.java 8204506 macosx-all
-vmTestbase/nsk/jvmti/PopFrame/popframe001/TestDescription.java 8207013 generic-all
-vmTestbase/nsk/jvmti/PopFrame/popframe003/TestDescription.java 8207013 generic-all
-vmTestbase/nsk/jvmti/PopFrame/popframe005/TestDescription.java 8207013 generic-all
+vmTestbase/nsk/jvmti/PopFrame/popframe001/TestDescription.java 8207013,8195635 generic-all
+vmTestbase/nsk/jvmti/PopFrame/popframe003/TestDescription.java 8207013,8195635 generic-all
+vmTestbase/nsk/jvmti/PopFrame/popframe005/TestDescription.java 8207013,8195635 generic-all
vmTestbase/nsk/jvmti/StopThread/stopthrd007/TestDescription.java 8207013 generic-all
serviceability/jvmti/FieldAccessWatch/FieldAccessWatch.java 8202482 generic-all
@@ -176,7 +174,6 @@
vmTestbase/nsk/jdi/BScenarios/hotswap/tc08x001/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jdi/BScenarios/hotswap/tc10x002/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jdi/MethodExitEvent/returnValue/returnValue003/returnValue003.java 8195635 generic-all
-vmTestbase/nsk/jdi/Scenarios/invokeMethod/popframes001/TestDescription.jav 8195635 generic-all
vmTestbase/nsk/jdi/Scenarios/invokeMethod/popframes001/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jdi/ThreadReference/popFrames/popframes001/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses002/TestDescription.java 8195635 generic-all
@@ -184,14 +181,8 @@
vmTestbase/nsk/jdi/stress/serial/forceEarlyReturn002/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jdi/stress/serial/mixed002/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/forceEarlyReturn002.java 8195635 generic-all
-vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn001/TestDescription.java 8195635 generic-all
-vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn002/TestDescription.java 8195635 generic-all
-vmTestbase/nsk/jvmti/PopFrame/popframe001/TestDescription.java 8195635 generic-all
-vmTestbase/nsk/jvmti/PopFrame/popframe003/TestDescription.java 8195635 generic-all
-vmTestbase/nsk/jvmti/PopFrame/popframe005/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jvmti/scenarios/capability/CM01/cm01t007/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jvmti/scenarios/capability/CM03/cm03t001/TestDescription.java 8195635 generic-all
-vmTestbase/nsk/jvmti/scenarios/hotswap/HS102/hs102t001/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jvmti/scenarios/hotswap/HS201/hs201t001/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jvmti/scenarios/hotswap/HS201/hs201t002/TestDescription.java 8195635 generic-all
vmTestbase/nsk/jvmti/scenarios/hotswap/HS202/hs202t002/hs202t002.java 8195635 generic-all
--- a/test/hotspot/jtreg/ProblemList.txt Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/ProblemList.txt Fri Jun 21 09:05:45 2019 -0700
@@ -49,8 +49,8 @@
compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java 8163894 generic-all
compiler/tiered/LevelTransitionTest.java 8067651 generic-all
-compiler/types/correctness/CorrectnessTest.java 8225620 solaris-sparcv9
-compiler/types/correctness/OffTest.java 8225620 solaris-sparcv9
+compiler/types/correctness/CorrectnessTest.java 8225670,8225620 generic-all,solaris-sparcv9
+compiler/types/correctness/OffTest.java 8225670,8225620 generic-all,solaris-sparcv9
compiler/c2/Test6852078.java 8194310 generic-all
compiler/c2/Test8004741.java 8214904 generic-all
@@ -80,7 +80,6 @@
# :hotspot_runtime
-runtime/SharedArchiveFile/SASymbolTableTest.java 8193639 solaris-all
runtime/jni/terminatedThread/TestTerminatedThread.java 8219652 aix-ppc64
#############################################################################
@@ -107,8 +106,6 @@
serviceability/sa/ClhsdbRegionDetailsScanOopsForG1.java 8193639 solaris-all
serviceability/sa/ClhsdbScanOops.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
serviceability/sa/ClhsdbSource.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
-serviceability/sa/ClhsdbSymbol.java 8193639 solaris-all
-serviceability/sa/ClhsdbSymbolTable.java 8193639 solaris-all
serviceability/sa/ClhsdbThread.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
serviceability/sa/ClhsdbVmStructsDump.java 8193639 solaris-all
serviceability/sa/ClhsdbWhere.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/Command.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/Command.java Fri Jun 21 09:05:45 2019 -0700
@@ -33,8 +33,8 @@
public enum Command {
COMPILEONLY("compileonly", ".*", "-Xbatch"),
EXCLUDE("exclude", "", "-Xbatch"),
- INLINE("inline", ".*", "-Xbatch"),
- DONTINLINE("dontinline", "", "-Xbatch"),
+ INLINE("inline", ".*", "-Xbatch", "-XX:InlineSmallCode=4000"),
+ DONTINLINE("dontinline", "", "-Xbatch", "-XX:InlineSmallCode=4000"),
LOG("log", "", "-XX:+UnlockDiagnosticVMOptions",
"-XX:+LogCompilation", "-XX:LogFile=" + LogProcessor.LOG_FILE),
PRINT("print", ""),
--- a/test/hotspot/jtreg/compiler/testlibrary/rtm/libXAbortProvoker.c Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/compiler/testlibrary/rtm/libXAbortProvoker.c Fri Jun 21 09:05:45 2019 -0700
@@ -28,7 +28,7 @@
* so doAbort() does nothing special and only returns after being called.
* The transaction abortion happens right before the JNI method is called.
*/
-int JNICALL
+JNIEXPORT int JNICALL
Java_compiler_testlibrary_rtm_XAbortProvoker_doAbort(JNIEnv *env, jobject o) {
return 0;
}
--- a/test/hotspot/jtreg/runtime/8007320/ConstMethodTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/runtime/8007320/ConstMethodTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -122,8 +122,8 @@
equal(ann.length, 3);
Annotation foo = ann[0][0];
Annotation bar = ann[1][0];
- equal(foo.toString(), "@Named(value=\"aName\")");
- equal(bar.toString(), "@Named(value=\"bName\")");
+ equal(foo.toString(), "@Named(\"aName\")");
+ equal(bar.toString(), "@Named(\"bName\")");
check(foo.equals(foo));
check(bar.equals(bar));
check(! foo.equals(bar));
--- a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java Fri Jun 21 09:05:45 2019 -0700
@@ -45,8 +45,6 @@
{"MinRAMFraction", "2"},
{"InitialRAMFraction", "64"},
{"TLABStats", "false"},
- {"ThreadLocalHandshakes", "true"},
- {"AllowJNIEnvProxy", "true"},
{"AllowRedefinitionToAddDeleteMethods", "true"},
// deprecated alias flags (see also aliased_jvm_flags):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/classFileParserBug/EmptyUnqName.jasm Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+super public class EmptyUnqName version 56:0 {
+
+ public Method "<init>":"()V" stack 1 locals 1 {
+ aload_0;
+ invokespecial Method java/lang/Object."<init>":"()V";
+ return;
+ }
+
+ public static Method main:"([Ljava/lang/String;)V" stack 2 locals 1 {
+ getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
+ ldc String "Testing method param types";
+ invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
+ return;
+ }
+
+ public static Method func:"(L;)V" stack 0 locals 1 {
+ return;
+ }
+
+} // end Class EmptyUnqName
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/classFileParserBug/TestEmptyUnqName.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,46 @@
+/*
+ * 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 8225789
+ * @summary Test that an unqualified name of "L;" causes a ClassFormatError exception.
+ * @compile EmptyUnqName.jasm
+ * @run main/othervm -Xverify:remote TestEmptyUnqName
+ */
+
+public class TestEmptyUnqName {
+ public static void main(String args[]) throws Throwable {
+
+ System.out.println("Regression test for bug 8225789");
+
+ try {
+ Class newClass = Class.forName("EmptyUnqName");
+ throw new RuntimeException("Expected ClassFormatError exception not thrown");
+ } catch (java.lang.ClassFormatError e) {
+ if (!e.getMessage().contains("Class name is empty or contains illegal character")) {
+ throw new RuntimeException("Wrong ClassFormatError: " + e.getMessage());
+ }
+ }
+ }
+}
--- a/test/hotspot/jtreg/runtime/verifier/TestSigParse.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/hotspot/jtreg/runtime/verifier/TestSigParse.java Fri Jun 21 09:05:45 2019 -0700
@@ -63,7 +63,7 @@
throw new RuntimeException("Expected ClasFormatError exception not thrown");
} catch (java.lang.ClassFormatError e) {
String eMsg = e.getMessage();
- if (!eMsg.contains("Class name contains illegal character")) {
+ if (!eMsg.contains("Class name is empty or contains illegal character")) {
throw new RuntimeException("Unexpected exception: " + eMsg);
}
}
--- a/test/jdk/ProblemList-aot.txt Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/ProblemList-aot.txt Fri Jun 21 09:05:45 2019 -0700
@@ -30,3 +30,5 @@
java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java 8222445 windows-x64
java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java 8222445 windows-x64
java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java 8222445 windows-x64
+java/lang/reflect/PublicMethods/PublicMethodsTest.java 8226309 generic-all
+java/lang/constant/MethodTypeDescTest.java 8225349 windows-x64
--- a/test/jdk/ProblemList-graal.txt Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/ProblemList-graal.txt Fri Jun 21 09:05:45 2019 -0700
@@ -76,30 +76,15 @@
java/lang/ref/SoftReference/Pin.java 8196611 generic-all
java/lang/Runtime/exec/LotsOfOutput.java 8196611 generic-all
java/util/concurrent/ScheduledThreadPoolExecutor/BasicCancelTest.java 8196611 generic-all
-vm/gc/InfiniteList.java 8196611 generic-all
# tests require pop_frame and force_early_return capabilities
-com/sun/jdi/RedefineTTYLineNumber.java 8195635 generic-all
-com/sun/jdi/RedefineG.java 8195635 generic-all
-com/sun/jdi/RedefineCrossStart.java 8195635 generic-all
-com/sun/jdi/PopSynchronousTest.java 8195635 generic-all
-com/sun/jdi/RedefineTTYLineNumber.java 8195635 generic-all
-com/sun/jdi/RedefineG.java 8195635 generic-all
-com/sun/jdi/RedefineCrossStart.java 8195635 generic-all
-com/sun/jdi/PopSynchronousTest.java 8195635 generic-all
-com/sun/jdi/PopAsynchronousTest.java 8195635 generic-all
+com/sun/jdi/EarlyReturnTest.java 8195635 generic-all
com/sun/jdi/PopAndStepTest.java 8195635 generic-all
com/sun/jdi/PopAsynchronousTest.java 8195635 generic-all
-com/sun/jdi/PopAndStepTest.java 8195635 generic-all
-com/sun/jdi/EarlyReturnTest.java 8195635 generic-all
-com/sun/jdi/RedefineTTYLineNumber.java 8195635 generic-all
-com/sun/jdi/RedefineG.java 8195635 generic-all
+com/sun/jdi/PopSynchronousTest.java 8195635 generic-all
com/sun/jdi/RedefineCrossStart.java 8195635 generic-all
-com/sun/jdi/PopSynchronousTest.java 8195635 generic-all
-com/sun/jdi/PopAsynchronousTest.java 8195635 generic-all
-com/sun/jdi/PopAndStepTest.java 8195635 generic-all
-com/sun/jdi/EarlyReturnTest.java 8195635 generic-all
-com/sun/jdi/EarlyReturnTest.java 8195635 generic-all
+com/sun/jdi/RedefineG.java 8195635 generic-all
+com/sun/jdi/RedefineTTYLineNumber.java 8195635 generic-all
# Next JFR tests fail with Graal. Assuming 8193210.
jdk/jfr/event/compiler/TestCodeSweeper.java 8193210 generic-all
--- a/test/jdk/ProblemList.txt Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/ProblemList.txt Fri Jun 21 09:05:45 2019 -0700
@@ -603,9 +603,6 @@
java/net/ServerSocket/AcceptInheritHandle.java 8211854 aix-ppc64
-java/net/Inet6Address/B6206527.java 8216417 macosx-all
-java/net/ipv6tests/B6521014.java 8216417 macosx-all
-
############################################################################
# jdk_nio
@@ -658,7 +655,7 @@
sun/security/pkcs11/ec/TestKeyFactory.java 8026976 generic-all
sun/security/pkcs11/Secmod/AddTrustedCert.java 8180837 generic-all
sun/security/pkcs11/tls/TestKeyMaterial.java 8180837 generic-all
-sun/security/pkcs11/tls/tls12/FipsModeTLS12.java 8224954 windows-all
+sun/security/pkcs11/tls/tls12/FipsModeTLS12.java 8224954,8225678 windows-all,linux-all
sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 8161536 generic-all
sun/security/tools/keytool/ListKeychainStore.sh 8156889 macosx-all
--- a/test/jdk/java/lang/annotation/AnnotationToStringTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/lang/annotation/AnnotationToStringTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -27,6 +27,9 @@
* @summary Test of toString on normal annotations
*/
+// See also the sibling compile-time test
+// test/langtools/tools/javac/processing/model/element/AnnotationToStringTest.java
+
import java.lang.annotation.*;
import java.lang.reflect.*;
import java.util.*;
@@ -62,22 +65,25 @@
@ExpectedString(
"@MostlyPrimitive(c0='a', "+
"c1='\\'', " +
+ "b0=(byte)0x01, " +
"i0=1, " +
"i1=2, " +
"f0=1.0f, " +
"f1=0.0f/0.0f, " +
"d0=0.0, " +
"d1=1.0/0.0, " +
- "l0=5, " +
+ "l0=5L, " +
"l1=9223372036854775807L, " +
"l2=-9223372036854775808L, " +
- "l3=-2147483648, " +
+ "l3=-2147483648L, " +
"s0=\"Hello world.\", " +
"s1=\"a\\\"b\", " +
- "class0=Obj[].class)")
+ "class0=Obj[].class, " +
+ "classArray={Obj[].class})")
@MostlyPrimitive(
c0='a',
c1='\'',
+ b0=1,
i0=1,
i1=2,
f0=1.0f,
@@ -90,7 +96,8 @@
l3=Integer.MIN_VALUE,
s0="Hello world.",
s1="a\"b",
- class0=Obj[].class
+ class0=Obj[].class,
+ classArray={Obj[].class}
)
static class PrimHost{}
@@ -107,33 +114,33 @@
static class AnnotationHost {
@ExpectedString(
- "@Classy(value=Obj.class)")
- @Classy(value=Obj.class)
+ "@Classy(Obj.class)")
+ @Classy(Obj.class)
public int f0;
@ExpectedString(
- "@Classy(value=Obj[].class)")
- @Classy(value=Obj[].class)
+ "@Classy(Obj[].class)")
+ @Classy(Obj[].class)
public int f1;
@ExpectedString(
- "@Classy(value=Obj[][].class)")
- @Classy(value=Obj[][].class)
+ "@Classy(Obj[][].class)")
+ @Classy(Obj[][].class)
public int f2;
@ExpectedString(
- "@Classy(value=Obj[][][].class)")
- @Classy(value=Obj[][][].class)
+ "@Classy(Obj[][][].class)")
+ @Classy(Obj[][][].class)
public int f3;
@ExpectedString(
- "@Classy(value=int.class)")
- @Classy(value=int.class)
+ "@Classy(int.class)")
+ @Classy(int.class)
public int f4;
@ExpectedString(
- "@Classy(value=int[][][].class)")
- @Classy(value=int[][][].class)
+ "@Classy(int[][][].class)")
+ @Classy(int[][][].class)
public int f5;
}
@@ -154,60 +161,60 @@
static class ArrayAnnotationHost {
@ExpectedString(
- "@BooleanArray(value={true, false, true})")
- @BooleanArray(value={true, false, true})
+ "@BooleanArray({true, false, true})")
+ @BooleanArray({true, false, true})
public boolean[] f0;
@ExpectedString(
- "@FloatArray(value={3.0f, 4.0f, 0.0f/0.0f, -1.0f/0.0f, 1.0f/0.0f})")
- @FloatArray(value={3.0f, 4.0f, Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY})
+ "@FloatArray({3.0f, 4.0f, 0.0f/0.0f, -1.0f/0.0f, 1.0f/0.0f})")
+ @FloatArray({3.0f, 4.0f, Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY})
public float[] f1;
@ExpectedString(
- "@DoubleArray(value={1.0, 2.0, 0.0/0.0, 1.0/0.0, -1.0/0.0})")
- @DoubleArray(value={1.0, 2.0, Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,})
+ "@DoubleArray({1.0, 2.0, 0.0/0.0, 1.0/0.0, -1.0/0.0})")
+ @DoubleArray({1.0, 2.0, Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,})
public double[] f2;
@ExpectedString(
- "@ByteArray(value={10, 11, 12})")
- @ByteArray(value={10, 11, 12})
+ "@ByteArray({(byte)0x0a, (byte)0x0b, (byte)0x0c})")
+ @ByteArray({10, 11, 12})
public byte[] f3;
@ExpectedString(
- "@ShortArray(value={0, 4, 5})")
- @ShortArray(value={0, 4, 5})
+ "@ShortArray({0, 4, 5})")
+ @ShortArray({0, 4, 5})
public short[] f4;
@ExpectedString(
- "@CharArray(value={'a', 'b', 'c', '\\''})")
- @CharArray(value={'a', 'b', 'c', '\''})
+ "@CharArray({'a', 'b', 'c', '\\''})")
+ @CharArray({'a', 'b', 'c', '\''})
public char[] f5;
@ExpectedString(
- "@IntArray(value={1})")
- @IntArray(value={1})
+ "@IntArray({1})")
+ @IntArray({1})
public int[] f6;
@ExpectedString(
- "@LongArray(value={-9223372036854775808L, -2147483649L, -2147483648," +
- " -2147483647, 2147483648L, 9223372036854775807L})")
- @LongArray(value={Long.MIN_VALUE, Integer.MIN_VALUE-1L, Integer.MIN_VALUE,
+ "@LongArray({-9223372036854775808L, -2147483649L, -2147483648L," +
+ " -2147483647L, 2147483648L, 9223372036854775807L})")
+ @LongArray({Long.MIN_VALUE, Integer.MIN_VALUE-1L, Integer.MIN_VALUE,
-Integer.MAX_VALUE, Integer.MAX_VALUE+1L, Long.MAX_VALUE})
public long[] f7;
@ExpectedString(
- "@StringArray(value={\"A\", \"B\", \"C\", \"\\\"Quote\\\"\"})")
- @StringArray(value={"A", "B", "C", "\"Quote\""})
+ "@StringArray({\"A\", \"B\", \"C\", \"\\\"Quote\\\"\"})")
+ @StringArray({"A", "B", "C", "\"Quote\""})
public String[] f8;
@ExpectedString(
- "@ClassArray(value={int.class, Obj[].class})")
- @ClassArray(value={int.class, Obj[].class})
+ "@ClassArray({int.class, Obj[].class})")
+ @ClassArray({int.class, Obj[].class})
public Class<?>[] f9;
@ExpectedString(
- "@EnumArray(value={SOURCE})")
- @EnumArray(value={RetentionPolicy.SOURCE})
+ "@EnumArray({SOURCE})")
+ @EnumArray({RetentionPolicy.SOURCE})
public RetentionPolicy[] f10;
}
}
@@ -285,6 +292,7 @@
@interface MostlyPrimitive {
char c0();
char c1();
+ byte b0();
int i0();
int i1();
float f0();
@@ -298,4 +306,5 @@
String s0();
String s1();
Class<?> class0();
+ Class<?>[] classArray();
}
--- a/test/jdk/java/lang/annotation/ParameterAnnotations.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/lang/annotation/ParameterAnnotations.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2016, 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
@@ -89,8 +89,8 @@
equal(ann.length, 2);
Annotation foo = ann[0][0];
Annotation bar = ann[1][0];
- equal(foo.toString(), "@Named(value=\"foo\")");
- equal(bar.toString(), "@Named(value=\"bar\")");
+ equal(foo.toString(), "@Named(\"foo\")");
+ equal(bar.toString(), "@Named(\"bar\")");
check(foo.equals(foo));
check(! foo.equals(bar));
}
--- a/test/jdk/java/lang/annotation/TestConstructorParameterAnnotations.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/lang/annotation/TestConstructorParameterAnnotations.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 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
@@ -129,21 +129,21 @@
@ExpectedGetParameterAnnotations(
"[[], " +
- "[@TestConstructorParameterAnnotations$MarkerAnnotation(value=1)]]")
+ "[@TestConstructorParameterAnnotations$MarkerAnnotation(1)]]")
@ExpectedParameterAnnotations({
"null",
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=1)"})
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(1)"})
public class NestedClass1 {
public NestedClass1(@MarkerAnnotation(1) int parameter) {}
}
@ExpectedGetParameterAnnotations(
"[[], " +
- "[@TestConstructorParameterAnnotations$MarkerAnnotation(value=2)], " +
+ "[@TestConstructorParameterAnnotations$MarkerAnnotation(2)], " +
"[]]")
@ExpectedParameterAnnotations({
"null",
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=2)",
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(2)",
"null"})
public class NestedClass2 {
public NestedClass2(@MarkerAnnotation(2) int parameter1,
@@ -152,11 +152,11 @@
@ExpectedGetParameterAnnotations(
"[[], " +
- "[@TestConstructorParameterAnnotations$MarkerAnnotation(value=3)], " +
+ "[@TestConstructorParameterAnnotations$MarkerAnnotation(3)], " +
"[]]")
@ExpectedParameterAnnotations({
"null",
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=3)",
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(3)",
"null"})
public class NestedClass3 {
public <P> NestedClass3(@MarkerAnnotation(3) P parameter1,
@@ -165,11 +165,11 @@
@ExpectedGetParameterAnnotations(
"[[], " +
- "[@TestConstructorParameterAnnotations$MarkerAnnotation(value=4)], " +
+ "[@TestConstructorParameterAnnotations$MarkerAnnotation(4)], " +
"[]]")
@ExpectedParameterAnnotations({
"null",
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=4)",
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(4)",
"null"})
public class NestedClass4 {
public <P, Q> NestedClass4(@MarkerAnnotation(4) P parameter1,
@@ -183,18 +183,18 @@
}
@ExpectedGetParameterAnnotations(
- "[[@TestConstructorParameterAnnotations$MarkerAnnotation(value=1)]]")
+ "[[@TestConstructorParameterAnnotations$MarkerAnnotation(1)]]")
@ExpectedParameterAnnotations({
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=1)"})
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(1)"})
public static class StaticNestedClass1 {
public StaticNestedClass1(@MarkerAnnotation(1) int parameter) {}
}
@ExpectedGetParameterAnnotations(
- "[[@TestConstructorParameterAnnotations$MarkerAnnotation(value=2)], " +
+ "[[@TestConstructorParameterAnnotations$MarkerAnnotation(2)], " +
"[]]")
@ExpectedParameterAnnotations({
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=2)",
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(2)",
"null"})
public static class StaticNestedClass2 {
public StaticNestedClass2(@MarkerAnnotation(2) int parameter1,
@@ -202,10 +202,10 @@
}
@ExpectedGetParameterAnnotations(
- "[[@TestConstructorParameterAnnotations$MarkerAnnotation(value=3)], " +
+ "[[@TestConstructorParameterAnnotations$MarkerAnnotation(3)], " +
"[]]")
@ExpectedParameterAnnotations({
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=3)",
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(3)",
"null"})
public static class StaticNestedClass3 {
public <P> StaticNestedClass3(@MarkerAnnotation(3) P parameter1,
@@ -213,10 +213,10 @@
}
@ExpectedGetParameterAnnotations(
- "[[@TestConstructorParameterAnnotations$MarkerAnnotation(value=4)], " +
+ "[[@TestConstructorParameterAnnotations$MarkerAnnotation(4)], " +
"[]]")
@ExpectedParameterAnnotations({
- "@TestConstructorParameterAnnotations$MarkerAnnotation(value=4)",
+ "@TestConstructorParameterAnnotations$MarkerAnnotation(4)",
"null"})
public static class StaticNestedClass4 {
public <P, Q> StaticNestedClass4(@MarkerAnnotation(4) P parameter1,
--- a/test/jdk/java/lang/annotation/typeAnnotations/TestConstructorParameterTypeAnnotations.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/lang/annotation/typeAnnotations/TestConstructorParameterTypeAnnotations.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 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
@@ -128,7 +128,7 @@
@ExpectedGetParameterAnnotations("[[], []]")
@ExpectedParameterTypeAnnotations({
"null",
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=1)"})
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(1)"})
public class NestedClass1 {
public NestedClass1(@MarkerTypeAnnotation(1) int parameter) {}
}
@@ -136,7 +136,7 @@
@ExpectedGetParameterAnnotations("[[], [], []]")
@ExpectedParameterTypeAnnotations({
"null",
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=2)",
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(2)",
"null"})
public class NestedClass2 {
public NestedClass2(@MarkerTypeAnnotation(2) int parameter1,
@@ -146,7 +146,7 @@
@ExpectedGetParameterAnnotations("[[], [], []]")
@ExpectedParameterTypeAnnotations({
"null",
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=3)",
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(3)",
"null"})
public class NestedClass3 {
public <P> NestedClass3(@MarkerTypeAnnotation(3) P parameter1,
@@ -156,7 +156,7 @@
@ExpectedGetParameterAnnotations("[[], [], []]")
@ExpectedParameterTypeAnnotations({
"null",
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=4)",
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(4)",
"null"})
public class NestedClass4 {
public <P, Q> NestedClass4(@MarkerTypeAnnotation(4) P parameter1,
@@ -171,14 +171,14 @@
@ExpectedGetParameterAnnotations("[[]]")
@ExpectedParameterTypeAnnotations({
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=1)"})
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(1)"})
public static class StaticNestedClass1 {
public StaticNestedClass1(@MarkerTypeAnnotation(1) int parameter) {}
}
@ExpectedGetParameterAnnotations("[[], []]")
@ExpectedParameterTypeAnnotations({
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=2)",
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(2)",
"null"})
public static class StaticNestedClass2 {
public StaticNestedClass2(@MarkerTypeAnnotation(2) int parameter1,
@@ -187,7 +187,7 @@
@ExpectedGetParameterAnnotations("[[], []]")
@ExpectedParameterTypeAnnotations({
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=3)",
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(3)",
"null"})
public static class StaticNestedClass3 {
public <P> StaticNestedClass3(@MarkerTypeAnnotation(3) P parameter1,
@@ -196,7 +196,7 @@
@ExpectedGetParameterAnnotations("[[], []]")
@ExpectedParameterTypeAnnotations({
- "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=4)",
+ "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(4)",
"null"})
public static class StaticNestedClass4 {
public <P, Q> StaticNestedClass4(@MarkerTypeAnnotation(4) P parameter1,
--- a/test/jdk/java/lang/annotation/typeAnnotations/TestObjectMethods.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/lang/annotation/typeAnnotations/TestObjectMethods.java Fri Jun 21 09:05:45 2019 -0700
@@ -177,7 +177,7 @@
}
}
- private static final Pattern annotationRegex = Pattern.compile("@TestObjectMethods\\$AnnotType\\(value=(\\p{Digit})+\\)");
+ private static final Pattern annotationRegex = Pattern.compile("@TestObjectMethods\\$AnnotType\\((\\p{Digit})+\\)");
static void testGetAnnotations(Class<?> clazz, boolean annotationsExpectedOnMethods) {
System.err.println("Testing getAnnotations on methods of class " + clazz.getName());
--- a/test/jdk/java/lang/module/ClassFileVersionsTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/lang/module/ClassFileVersionsTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 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
@@ -57,6 +57,7 @@
{ 55, 0, Set.of() }, // JDK 11
{ 56, 0, Set.of() }, // JDK 12
{ 57, 0, Set.of() }, // JDK 13
+ { 58, 0, Set.of() }, // JDK 14
};
}
@@ -84,7 +85,11 @@
{ 57, 0, Set.of(TRANSITIVE) },
{ 57, 0, Set.of(STATIC, TRANSITIVE) },
- { 58, 0, Set.of()}, // JDK 14
+ { 58, 0, Set.of(STATIC) }, // JDK 14
+ { 58, 0, Set.of(TRANSITIVE) },
+ { 58, 0, Set.of(STATIC, TRANSITIVE) },
+
+ { 59, 0, Set.of()}, // JDK 15
};
}
--- a/test/jdk/java/net/Authenticator/AuthNPETest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/AuthNPETest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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,11 +24,15 @@
import java.io.*;
import java.net.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
/**
* @test
* @bug 4662246
* @summary REGRESSION: plugin 14x client authentication dialog returns NullPointerException
+ * @library /test/lib
+ * @run main/othervm AuthNPETest
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true AuthNPETest
*/
public class AuthNPETest {
@@ -53,45 +57,45 @@
"Content-Type: text/html; charset=iso-8859-1\r\n" +
"Content-Length: 10\r\n\r\n";
- BasicServer (ServerSocket s) {
+ BasicServer(ServerSocket s) {
server = s;
}
- void readAll (Socket s) throws IOException {
+ void readAll(Socket s) throws IOException {
byte[] buf = new byte [128];
- InputStream is = s.getInputStream ();
+ InputStream is = s.getInputStream();
s.setSoTimeout(1000);
try {
while (is.read(buf) > 0) ;
} catch (SocketTimeoutException x) { }
}
- public void run () {
+ public void run() {
try {
- System.out.println ("Server 1: accept");
- s = server.accept ();
- System.out.println ("accepted");
+ System.out.println("Server 1: accept");
+ s = server.accept();
+ System.out.println("accepted");
os = s.getOutputStream();
- os.write (reply1.getBytes());
- readAll (s);
- s.close ();
+ os.write(reply1.getBytes());
+ readAll(s);
+ s.close();
- System.out.println ("Server 2: accept");
- s = server.accept ();
- System.out.println ("accepted");
+ System.out.println("Server 2: accept");
+ s = server.accept();
+ System.out.println("accepted");
os = s.getOutputStream();
- os.write ((reply2+"HelloWorld").getBytes());
- readAll (s);
- s.close ();
+ os.write((reply2+"HelloWorld").getBytes());
+ readAll(s);
+ s.close();
}
catch (Exception e) {
System.out.println (e);
}
- finished ();
+ finished();
}
- public synchronized void finished () {
+ public synchronized void finished() {
notifyAll();
}
@@ -99,48 +103,54 @@
static class MyAuthenticator extends Authenticator {
- MyAuthenticator () {
- super ();
+ MyAuthenticator() {
+ super();
}
int count = 0;
- public PasswordAuthentication getPasswordAuthentication ()
+ public PasswordAuthentication getPasswordAuthentication()
{
- count ++;
- System.out.println ("Auth called");
- return (new PasswordAuthentication ("user", "passwordNotCheckedAnyway".toCharArray()));
+ count++;
+ System.out.println("Auth called");
+ return (new PasswordAuthentication("user", "passwordNotCheckedAnyway".toCharArray()));
}
- public int getCount () {
- return (count);
+ public int getCount() {
+ return count;
}
}
- static void read (InputStream is) throws IOException {
+ static void read(InputStream is) throws IOException {
int c;
- System.out.println ("reading");
+ System.out.println("reading");
while ((c=is.read()) != -1) {
- System.out.write (c);
+ System.out.write(c);
}
- System.out.println ("");
- System.out.println ("finished reading");
+ System.out.println("");
+ System.out.println("finished reading");
}
- public static void main (String args[]) throws Exception {
- MyAuthenticator auth = new MyAuthenticator ();
- Authenticator.setDefault (auth);
- ServerSocket ss = new ServerSocket (0);
- int port = ss.getLocalPort ();
- BasicServer server = new BasicServer (ss);
+ public static void main(String args[]) throws Exception {
+ MyAuthenticator auth = new MyAuthenticator();
+ Authenticator.setDefault(auth);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
+ int port = ss.getLocalPort();
+ BasicServer server = new BasicServer(ss);
synchronized (server) {
server.start();
System.out.println ("client 1");
- URL url = new URL ("http://localhost:"+port);
- URLConnection urlc = url.openConnection ();
- InputStream is = urlc.getInputStream ();
- read (is);
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .toURL();
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
+ InputStream is = urlc.getInputStream();
+ read(is);
is.close();
}
}
--- a/test/jdk/java/net/Authenticator/B4678055.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B4678055.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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,14 +25,16 @@
* @test
* @bug 4678055
* @modules java.base/sun.net.www
- * @library ../../../sun/net/www/httptest/
+ * @library ../../../sun/net/www/httptest/ /test/lib
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
- * @run main B4678055
+ * @run main/othervm B4678055
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B4678055
* @summary Basic Authentication fails with multiple realms
*/
import java.io.*;
import java.net.*;
+import jdk.test.lib.net.URIBuilder;
public class B4678055 implements HttpCallback {
@@ -125,12 +127,21 @@
public static void main (String[] args) throws Exception {
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
+ ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
try {
- server = new TestHttpServer (new B4678055(), 1, 10, 0);
- System.out.println ("Server: listening on port: " + server.getLocalPort());
- client ("http://localhost:"+server.getLocalPort()+"/d1/foo.html");
- client ("http://localhost:"+server.getLocalPort()+"/d2/foo.html");
- client ("http://localhost:"+server.getLocalPort()+"/d2/foo.html");
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ server = new TestHttpServer(new B4678055(), 1, 10, loopback, 0);
+ String serverURL = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(server.getLocalPort())
+ .path("/")
+ .build()
+ .toString();
+ System.out.println("Server: listening at: " + serverURL);
+ client(serverURL + "d1/foo.html");
+ client(serverURL + "d2/foo.html");
+ client(serverURL + "d2/foo.html");
} catch (Exception e) {
if (server != null) {
server.terminate();
--- a/test/jdk/java/net/Authenticator/B4759514.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B4759514.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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,14 +25,16 @@
* @test
* @bug 4759514
* @modules java.base/sun.net.www
- * @library ../../../sun/net/www/httptest/
+ * @library ../../../sun/net/www/httptest/ /test/lib
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
- * @run main B4759514
+ * @run main/othervm B4759514
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B4759514
* @summary Digest Authentication is erroniously quoting the nc value, contrary to RFC 2617
*/
import java.io.*;
import java.net.*;
+import jdk.test.lib.net.URIBuilder;
public class B4759514 implements HttpCallback {
@@ -97,10 +99,19 @@
public static void main (String[] args) throws Exception {
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
+ ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
try {
- server = new TestHttpServer (new B4759514(), 1, 10, 0);
- System.out.println ("Server: listening on port: " + server.getLocalPort());
- client ("http://localhost:"+server.getLocalPort()+"/d1/foo.html");
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ server = new TestHttpServer (new B4759514(), 1, 10, loopback, 0);
+ String serverURL = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(server.getLocalPort())
+ .path("/")
+ .build()
+ .toString();
+ System.out.println("Server: listening at: " + serverURL);
+ client(serverURL + "d1/foo.html");
} catch (Exception e) {
if (server != null) {
server.terminate();
--- a/test/jdk/java/net/Authenticator/B4769350.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B4769350.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -27,6 +27,8 @@
* @modules jdk.httpserver
* @run main/othervm B4769350 server
* @run main/othervm B4769350 proxy
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B4769350 server
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B4769350 proxy
* @summary proxy authentication username and password caching only works in serial case
* Run in othervm since the test sets system properties that are read by the
* networking stack and cached when the HTTP handler is invoked, and previous
@@ -99,7 +101,8 @@
}
public void startServer() {
- InetSocketAddress addr = new InetSocketAddress(0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ InetSocketAddress addr = new InetSocketAddress(loopback, 0);
try {
server = HttpServer.create(addr, 0);
@@ -456,17 +459,28 @@
System.out.println ("Server: listening on port: "
+ server.getPort());
if (proxy) {
- System.setProperty ("http.proxyHost", "localhost");
+ System.setProperty ("http.proxyHost",
+ InetAddress.getLoopbackAddress().getHostAddress());
System.setProperty ("http.proxyPort",
Integer.toString(server.getPort()));
doProxyTests ("www.foo.com", server);
} else {
- doServerTests ("localhost:"+server.getPort(), server);
+ ProxySelector.setDefault(ProxySelector.of(null));
+ doServerTests (authority(server.getPort()), server);
}
}
}
+ static String authority(int port) {
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ String hoststr = loopback.getHostAddress();
+ if (hoststr.indexOf(':') > -1) {
+ hoststr = "[" + hoststr + "]";
+ }
+ return hoststr + ":" + port;
+ }
+
public static void except (String s, Server server) {
server.close();
throw new RuntimeException (s);
@@ -496,4 +510,3 @@
}
}
}
-
--- a/test/jdk/java/net/Authenticator/B4921848.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B4921848.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, 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
@@ -25,14 +25,17 @@
* @test
* @bug 4921848
* @modules java.base/sun.net.www
- * @library ../../../sun/net/www/httptest/
+ * @library ../../../sun/net/www/httptest/ /test/lib
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
* @run main/othervm -Dhttp.auth.preference=basic B4921848
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true
+ * -Dhttp.auth.preference=basic B4921848
* @summary Allow user control over authentication schemes
*/
import java.io.*;
import java.net.*;
+import jdk.test.lib.net.URIBuilder;
public class B4921848 implements HttpCallback {
@@ -88,10 +91,19 @@
public static void main (String[] args) throws Exception {
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
+ ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
try {
- server = new TestHttpServer (new B4921848(), 1, 10, 0);
- System.out.println ("Server started: listening on port: " + server.getLocalPort());
- client ("http://localhost:"+server.getLocalPort()+"/d1/d2/d3/foo.html");
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ server = new TestHttpServer (new B4921848(), 1, 10, loopback, 0);
+ String serverURL = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(server.getLocalPort())
+ .path("/")
+ .build()
+ .toString();
+ System.out.println("Server: listening at: " + serverURL);
+ client(serverURL + "d1/d2/d3/foo.html");
} catch (Exception e) {
if (server != null) {
server.terminate();
--- a/test/jdk/java/net/Authenticator/B4933582.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B4933582.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, 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
@@ -21,10 +21,15 @@
* questions.
*/
+// Note: this test saves a cache.ser file in the scratch directory,
+// which the cache implementation will load its configuration
+// from. Therefore adding several @run lines does not work.
+
/*
* @test
* @bug 4933582
- * @library ../../../sun/net/www/httptest
+ * @key intermittent
+ * @library ../../../sun/net/www/httptest /test/lib
* @modules java.base/sun.net.www
* java.base/sun.net.www.protocol.http
* @build HttpCallback HttpTransaction TestHttpServer B4933582
@@ -34,6 +39,7 @@
import java.net.*;
import java.util.*;
import sun.net.www.protocol.http.*;
+import jdk.test.lib.net.URIBuilder;
public class B4933582 implements HttpCallback {
@@ -133,12 +139,21 @@
public static void main (String[] args) throws Exception {
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
+ ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
+ InetAddress loopback = InetAddress.getLoopbackAddress();
CacheImpl cache;
try {
- server = new TestHttpServer (new B4933582(), 1, 10, 0);
+ server = new TestHttpServer(new B4933582(), 1, 10, loopback, 0);
cache = new CacheImpl (server.getLocalPort());
AuthCacheValue.setAuthCache (cache);
- client ("http://localhost:"+server.getLocalPort()+"/d1/foo.html");
+ String serverURL = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(server.getLocalPort())
+ .path("/")
+ .build()
+ .toString();
+ client(serverURL + "d1/foo.html");
} finally {
if (server != null) {
server.terminate();
@@ -157,7 +172,7 @@
while (true) {
try {
server = new TestHttpServer(new B4933582(), 1, 10,
- cache.getPort());
+ loopback, cache.getPort());
break;
} catch (BindException e) {
if (retries++ < 5) {
@@ -173,7 +188,14 @@
try {
AuthCacheValue.setAuthCache(cache);
- client("http://localhost:" + server.getLocalPort() + "/d1/foo.html");
+ String serverURL = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(server.getLocalPort())
+ .path("/")
+ .build()
+ .toString();
+ client(serverURL + "d1/foo.html");
} finally {
if (server != null) {
server.terminate();
--- a/test/jdk/java/net/Authenticator/B4962064.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B4962064.java Fri Jun 21 09:05:45 2019 -0700
@@ -28,6 +28,7 @@
* @library ../../../sun/net/www/httptest/
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
* @run main/othervm B4962064
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B4962064
* @summary Extend Authenticator to provide access to request URI and server/proxy
*/
@@ -91,18 +92,24 @@
public static void main (String[] args) throws Exception {
try {
- server = new TestHttpServer (new B4962064(), 1, 10, 0);
+ InetAddress address = InetAddress.getLoopbackAddress();
+ InetAddress resolved = InetAddress.getByName(address.getHostName());
+ System.out.println("Lookup: " + address + " -> \""
+ + address.getHostName() + "\" -> "
+ + resolved);
+ server = new TestHttpServer (new B4962064(), 1, 10, address, 0);
int port = server.getLocalPort();
- System.setProperty ("http.proxyHost", "localhost");
+ String proxyHost = address.equals(resolved)
+ ? address.getHostName()
+ : address.getHostAddress();
+ System.setProperty ("http.proxyHost", proxyHost);
System.setProperty ("http.proxyPort", Integer.toString (port));
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
System.out.println ("Server started: listening on port: " + port);
- //String s = new String ("http://localhost:"+port+"/d1/d2/d3/foo.html");
String s = new String ("http://foo.com/d1/d2/d3/foo.html");
urlsave = new URL (s);
client (s);
- //s = new String ("http://localhost:"+port+"/dr/d3/foo.html");
s = new String ("http://bar.com/dr/d3/foo.html");
urlsave = new URL (s);
client (s);
--- a/test/jdk/java/net/Authenticator/B6870935.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B6870935.java Fri Jun 21 09:05:45 2019 -0700
@@ -26,6 +26,8 @@
* @bug 6870935
* @modules java.base/sun.net.www
* @run main/othervm -Dhttp.nonProxyHosts="" -Dhttp.auth.digest.validateProxy=true B6870935
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true
+ * -Dhttp.nonProxyHosts="" -Dhttp.auth.digest.validateProxy=true B6870935
*/
import java.io.*;
@@ -80,18 +82,21 @@
public void run () {
try {
+ System.out.println("Server started");
Socket s1 = s.accept ();
is = s1.getInputStream ();
os = s1.getOutputStream ();
is.read ();
os.write (reply1.getBytes());
+ System.out.println("First response sent");
Thread.sleep (2000);
s1.close ();
+ System.out.println("First connection closed");
s1 = s.accept ();
is = s1.getInputStream ();
os = s1.getOutputStream ();
- is.read ();
+ // is.read ();
// need to get the cnonce out of the response
MessageHeader header = new MessageHeader (is);
String raw = header.findValue ("Proxy-Authorization");
@@ -115,12 +120,16 @@
cnstring, passwd, username
) +"\r\n";
os.write (reply.getBytes());
+ System.out.println("Second response sent");
Thread.sleep (2000);
s1.close ();
+ System.out.println("Second connection closed");
}
catch (Exception e) {
System.out.println (e);
e.printStackTrace();
+ } finally {
+ System.out.println("Server finished");
}
}
@@ -225,8 +234,17 @@
DigestServer server;
ServerSocket sock;
+ InetAddress address = InetAddress.getLoopbackAddress();
+ InetAddress resolved = InetAddress.getByName(address.getHostName());
+ System.out.println("Lookup: "
+ + address + " -> \"" + address.getHostName() + "\" -> "
+ + resolved);
+ String proxyHost = address.equals(resolved)
+ ? address.getHostName()
+ : address.getHostAddress();
try {
- sock = new ServerSocket (0);
+ sock = new ServerSocket();
+ sock.bind(new InetSocketAddress(address, 0));
port = sock.getLocalPort ();
}
catch (Exception e) {
@@ -238,12 +256,12 @@
server.start ();
try {
-
Authenticator.setDefault (new MyAuthenticator ());
- SocketAddress addr = new InetSocketAddress (InetAddress.getLoopbackAddress(), port);
+ SocketAddress addr = InetSocketAddress.createUnresolved(proxyHost, port);
Proxy proxy = new Proxy (Proxy.Type.HTTP, addr);
String s = "http://www.ibm.com";
URL url = new URL(s);
+ System.out.println("opening connection through proxy: " + addr);
java.net.URLConnection conURL = url.openConnection(proxy);
InputStream in = conURL.getInputStream();
@@ -255,6 +273,9 @@
catch(IOException e) {
e.printStackTrace();
error = true;
+ sock.close();
+ } finally {
+ server.join();
}
if (error) {
throw new RuntimeException ("Error in test");
--- a/test/jdk/java/net/Authenticator/B8034170.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/B8034170.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 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
@@ -24,13 +24,16 @@
import java.io.*;
import java.net.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
/**
* @test
* @bug 8034170
* @summary Digest authentication interop issue
+ * @library /test/lib
* @run main/othervm B8034170 unquoted
* @run main/othervm -Dhttp.auth.digest.quoteParameters=true B8034170 quoted
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B8034170 unquoted
*/
public class B8034170 {
@@ -176,14 +179,21 @@
MyAuthenticator3 auth = new MyAuthenticator3 ();
Authenticator.setDefault (auth);
- ServerSocket ss = new ServerSocket (0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
int port = ss.getLocalPort ();
BasicServer server = new BasicServer (ss);
synchronized (server) {
server.start();
System.out.println ("client 1");
- URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
- URLConnection urlc = url.openConnection ();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .path("/d1/d2/d3/foo.html")
+ .toURL();
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
InputStream is = urlc.getInputStream ();
read (is);
is.close ();
--- a/test/jdk/java/net/Authenticator/BasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/BasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2002, 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,11 +24,15 @@
import java.io.*;
import java.net.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
/**
* @test
* @bug 4474947
* @summary fix for bug #4244472 is incomplete - HTTP authorization still needs work
+ * @library /test/lib
+ * @run main/othervm BasicTest
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true BasicTest
*/
/*
@@ -151,19 +155,28 @@
public static void main (String args[]) throws Exception {
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
- ServerSocket ss = new ServerSocket (0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
int port = ss.getLocalPort ();
BasicServer server = new BasicServer (ss);
synchronized (server) {
server.start();
System.out.println ("client 1");
- URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
- URLConnection urlc = url.openConnection ();
+ String base = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .path("/")
+ .build()
+ .toString();
+ URL url = new URL(base + "d1/d2/d3/foo.html");
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
InputStream is = urlc.getInputStream ();
read (is);
System.out.println ("client 2");
- url = new URL ("http://localhost:"+port+"/d1/foo.html");
- urlc = url.openConnection ();
+ url = new URL(base + "d1/foo.html");
+ urlc = url.openConnection(Proxy.NO_PROXY);
is = urlc.getInputStream ();
read (is);
server.wait ();
--- a/test/jdk/java/net/Authenticator/BasicTest3.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/BasicTest3.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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,11 +24,15 @@
import java.io.*;
import java.net.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
/**
* @test
* @bug 4513440
* @summary BasicAuthentication is zeroing out the given password
+ * @library /test/lib
+ * @run main/othervm BasicTest3
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true BasicTest3
*/
public class BasicTest3 {
@@ -130,14 +134,21 @@
public static void main (String args[]) throws Exception {
MyAuthenticator3 auth = new MyAuthenticator3 ();
Authenticator.setDefault (auth);
- ServerSocket ss = new ServerSocket (0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
int port = ss.getLocalPort ();
BasicServer3 server = new BasicServer3 (ss);
synchronized (server) {
server.start();
System.out.println ("client 1");
- URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
- URLConnection urlc = url.openConnection ();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .path("/d1/d2/d3/foo.html")
+ .toURL();
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
InputStream is = urlc.getInputStream ();
read (is);
is.close ();
--- a/test/jdk/java/net/Authenticator/BasicTest4.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/BasicTest4.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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,11 +24,15 @@
import java.io.*;
import java.net.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
/**
* @test
* @bug 4623722
* @summary performance hit for Basic Authentication
+ * @library /test/lib
+ * @run main/othervm BasicTest4
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true BasicTest4
*/
public class BasicTest4 {
@@ -59,12 +63,17 @@
static boolean checkFor (InputStream in, char[] seq) throws IOException {
System.out.println ("checkfor");
+ StringBuilder message = new StringBuilder();
try {
int i=0, count=0;
while (true) {
int c = in.read();
- if (c == -1)
+ if (c == -1) {
+ System.out.println(new String(seq) + " not found in \n<<"
+ + message + ">>");
return false;
+ }
+ message.append((char)c);
count++;
if (c == seq[i]) {
i++;
@@ -77,6 +86,7 @@
}
}
catch (SocketTimeoutException e) {
+ System.out.println("checkFor: " + e);
return false;
}
}
@@ -194,23 +204,33 @@
public static void main (String args[]) throws Exception {
MyAuthenticator auth = new MyAuthenticator ();
Authenticator.setDefault (auth);
- ServerSocket ss = new ServerSocket (0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ServerSocket ss = new ServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
int port = ss.getLocalPort ();
BasicServer server = new BasicServer (ss);
synchronized (server) {
server.start();
System.out.println ("client 1");
- URL url = new URL ("http://localhost:"+port+"/d1/d3/foo.html");
- URLConnection urlc = url.openConnection ();
+ String base = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .path("/d1/")
+ .build()
+ .toString();
+ System.out.println("Base URL: " + base);
+ URL url = new URL (base + "d3/foo.html");
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
InputStream is = urlc.getInputStream ();
read (is);
System.out.println ("client 2");
- url = new URL ("http://localhost:"+port+"/d1/d2/bar.html");
- urlc = url.openConnection ();
+ url = new URL (base + "d2/bar.html");
+ urlc = url.openConnection(Proxy.NO_PROXY);
is = urlc.getInputStream ();
System.out.println ("client 3");
- url = new URL ("http://localhost:"+port+"/d1/d4/foobar.html");
- urlc = url.openConnection ();
+ url = new URL (base + "d4/foobar.html");
+ urlc = url.openConnection(Proxy.NO_PROXY);
is = urlc.getInputStream ();
read (is);
server.wait ();
--- a/test/jdk/java/net/Authenticator/Deadlock.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/Authenticator/Deadlock.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -25,7 +25,10 @@
* @test
* @bug 6648001
* @modules jdk.httpserver
+ * @library /test/lib
* @run main/othervm/timeout=20 -ea:sun.net.www.protocol.http.AuthenticationInfo -Dhttp.auth.serializeRequests=true Deadlock
+ * @run main/othervm/timeout=20 -Djava.net.preferIPv6Addresses=true
+ * -ea:sun.net.www.protocol.http.AuthenticationInfo -Dhttp.auth.serializeRequests=true Deadlock
* @summary cancelling HTTP authentication causes deadlock
*/
@@ -34,8 +37,10 @@
import java.io.InputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
+import java.net.Proxy;
import java.net.URL;
import com.sun.net.httpserver.BasicAuthenticator;
import com.sun.net.httpserver.Headers;
@@ -44,12 +49,14 @@
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpPrincipal;
import com.sun.net.httpserver.HttpServer;
+import jdk.test.lib.net.URIBuilder;
public class Deadlock {
public static void main (String[] args) throws Exception {
Handler handler = new Handler();
- InetSocketAddress addr = new InetSocketAddress (0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ InetSocketAddress addr = new InetSocketAddress (loopback, 0);
HttpServer server = HttpServer.create(addr, 0);
HttpContext ctx = server.createContext("/test", handler);
BasicAuthenticator a = new BasicAuthenticator("foobar@test.realm") {
@@ -97,8 +104,13 @@
URL url;
HttpURLConnection urlc;
try {
- url = new URL("http://localhost:"+server.getAddress().getPort()+"/test/foo.html");
- urlc = (HttpURLConnection)url.openConnection ();
+ url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(server.getAddress().getPort())
+ .path("/test/foo.html")
+ .toURLUnchecked();
+ urlc = (HttpURLConnection)url.openConnection (Proxy.NO_PROXY);
} catch (IOException e) {
error = true;
return;
--- a/test/jdk/java/net/CookieHandler/CookieHandlerTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/CookieHandler/CookieHandlerTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -24,7 +24,9 @@
/* @test
* @summary Unit test for java.net.CookieHandler
* @bug 4696506
+ * @library /test/lib
* @run main/othervm CookieHandlerTest
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true CookieHandlerTest
* @author Yingxian Wang
*/
@@ -34,6 +36,7 @@
import java.net.*;
import java.util.*;
import java.io.*;
+import jdk.test.lib.net.URIBuilder;
public class CookieHandlerTest implements Runnable {
static Map<String,String> cookies;
@@ -92,15 +95,19 @@
CookieHandlerTest() 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 uri = "http://localhost:" +
- Integer.toString(ss.getLocalPort());
- URL url = new URL(uri);
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(ss.getLocalPort())
+ .toURL();
- HttpURLConnection http = (HttpURLConnection)url.openConnection();
+ HttpURLConnection http = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
int respCode = http.getResponseCode();
http.disconnect();
--- a/test/jdk/java/net/CookieHandler/CookieManagerTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/CookieHandler/CookieManagerTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, 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
@@ -57,8 +57,9 @@
} catch (IOException x) {
System.out.println("Debug: caught:" + x);
}
- System.out.println("Using: \"127.0.0.1\"");
- return "127.0.0.1";
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ System.out.println("Using: \"" + loopback.getHostAddress() + "\"");
+ return loopback.getHostAddress();
}
public static void main(String[] args) throws Exception {
@@ -73,7 +74,7 @@
public static void startHttpServer() throws IOException {
httpTrans = new CookieTransactionHandler();
- server = HttpServer.create(new InetSocketAddress(0), 0);
+ server = HttpServer.create(new InetSocketAddress(hostAddress, 0), 0);
server.createContext("/", httpTrans);
server.start();
}
--- a/test/jdk/java/net/CookieHandler/EmptyCookieHeader.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/CookieHandler/EmptyCookieHeader.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,9 @@
* @bug 8015799
* @modules jdk.httpserver
* @summary HttpURLConnection.getHeaderFields() throws IllegalArgumentException
+ * @library /test/lib
+ * @run main EmptyCookieHeader
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true EmptyCookieHeader
*/
import com.sun.net.httpserver.*;
@@ -33,6 +36,7 @@
import java.io.OutputStream;
import java.net.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
public class EmptyCookieHeader {
@@ -43,11 +47,17 @@
public void runTest() throws Exception {
final CookieHandler oldHandler = CookieHandler.getDefault();
CookieHandler.setDefault(new TestCookieHandler());
- HttpServer s = HttpServer.create(new InetSocketAddress(0), 0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ HttpServer s = HttpServer.create(new InetSocketAddress(loopback, 0), 0);
try {
startServer(s);
- URL url = new URL("http://localhost:" + s.getAddress().getPort() + "/");
- HttpURLConnection c = (HttpURLConnection)url.openConnection();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(s.getAddress().getPort())
+ .path("/")
+ .toURL();
+ HttpURLConnection c = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
c.getHeaderFields();
} finally {
CookieHandler.setDefault(oldHandler);
--- a/test/jdk/java/net/CookieHandler/LocalHostCookie.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/CookieHandler/LocalHostCookie.java Fri Jun 21 09:05:45 2019 -0700
@@ -33,8 +33,11 @@
/*
* @test
* @bug 7169142
+ * @key intermittent
* @modules jdk.httpserver
- * @summary CookieHandler does not work with localhost
+ * @summary CookieHandler does not work with localhost. This requires
+ * binding to the wildcard address and might fail intermittently
+ * due to port reuse issues.
* @run main/othervm LocalHostCookie
*/
public class LocalHostCookie {
@@ -126,4 +129,3 @@
}
}
}
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/Inet6Address/Scoping.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,196 @@
+/*
+ * 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 8216417
+ * @summary cleanup of IPv6 scope-id handling
+ * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ * @run main/othervm Scoping
+ */
+
+import java.io.IOException;
+import java.net.*;
+import java.nio.ByteBuffer;
+import java.nio.channels.DatagramChannel;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jdk.test.lib.NetworkConfiguration;
+
+public class Scoping {
+
+ interface ThrowingConsumer<T> {
+ public void accept(T t) throws Exception;
+ }
+
+ static List<ThrowingConsumer<InetSocketAddress>> targets = List.of(
+ /* 0 */ (a) -> {Socket s = new Socket(); s.bind(a);s.close();},
+ /* 1 */ (a) -> {ServerSocket s = new ServerSocket(); s.bind(a);s.close();},
+ /* 2 */ (a) -> {DatagramSocket s = new DatagramSocket(null); s.bind(a); s.close();},
+ /* 3 */ (a) -> {MulticastSocket s = new MulticastSocket(null); s.bind(a); s.close();},
+ /* 4 */ (a) -> {SocketChannel s = SocketChannel.open(); s.bind(a);s.close();},
+ /* 5 */ (a) -> {ServerSocketChannel s = ServerSocketChannel.open(); s.bind(a);s.close();},
+ /* 6 */ (a) -> {DatagramChannel s = DatagramChannel.open(); s.bind(a); s.close();},
+ /* 7 */ (a) -> {SocketChannel s = SocketChannel.open(); s.socket().bind(a);s.close();},
+ /* 8 */ (a) -> {ServerSocketChannel s = ServerSocketChannel.open(); s.socket().bind(a);s.close();},
+ /* 9 */ (a) -> {DatagramChannel s = DatagramChannel.open(); s.socket().bind(a); s.close();},
+ /* 10 */ (a) -> {socketTest(a);},
+ /* 11 */ (a) -> {dgSocketTest(a, false);},
+ /* 12 */ (a) -> {dgSocketTest(a, true);},
+ /* 13 */ (a) -> {dgChannelTest(a, false);},
+ /* 14 */ (a) -> {dgChannelTest(a, true);}
+ );
+
+ static List<Inet6Address> getLinkLocalAddrs() throws IOException {
+ return NetworkConfiguration.probe()
+ .ip6Addresses()
+ .filter(Inet6Address::isLinkLocalAddress)
+ .collect(Collectors.toList());
+ }
+
+ static void compare(InetSocketAddress a, InetSocketAddress b) {
+ Inet6Address a1 = (Inet6Address)a.getAddress();
+ Inet6Address b1 = (Inet6Address)b.getAddress();
+ compare (a1, b1);
+ }
+
+ static void compare(InetAddress a, InetAddress b) {
+ Inet6Address a1 = (Inet6Address)a;
+ Inet6Address b1 = (Inet6Address)b;
+ if (!a1.equals(b1)) {
+ System.out.printf("%s != %s\n", a1, b1);
+ throw new RuntimeException("Addresses not the same");
+ }
+
+ if (!a1.getHostAddress().equals(b1.getHostAddress())) {
+ System.out.printf("%s != %s\n", a1, b1);
+ if (a1.getScopeId() != b1.getScopeId())
+ throw new RuntimeException("Scope ids not the same");
+ }
+ }
+
+ static void socketTest(InetSocketAddress a) throws Exception {
+ System.out.printf("socketTest: address %s\n", a);
+ try (ServerSocket server = new ServerSocket(0, 5, a.getAddress())) {
+ InetAddress saddr = server.getInetAddress();
+ int port = server.getLocalPort();
+ Socket client = new Socket(saddr, port);
+ compare(client.getInetAddress(), saddr);
+ try {
+ client.close();
+ } catch (IOException e) {}
+ }
+ }
+
+ static void dgSocketTest(InetSocketAddress a, boolean connect) throws Exception {
+ try (DatagramSocket s = new DatagramSocket(null)) {
+ System.out.println("dgSocketTest: " + a);
+ s.bind(a);
+ String t = "Hello world";
+ DatagramPacket rx = new DatagramPacket(new byte[128], 128);
+ int port = s.getLocalPort();
+ InetSocketAddress dest = new InetSocketAddress(a.getAddress(), port);
+ DatagramPacket tx = new DatagramPacket(t.getBytes("ISO8859_1"), t.length(), dest);
+ if (connect) {
+ s.connect(dest);
+ System.out.println("dgSocketTest: connect remote addr = " + s.getRemoteSocketAddress());
+ compare(a, (InetSocketAddress)s.getRemoteSocketAddress());
+ }
+ s.send(tx);
+ s.receive(rx);
+ String t1 = new String(rx.getData(), rx.getOffset(), rx.getLength(), "ISO8859_1");
+ if (!t1.equals(t))
+ throw new RuntimeException("Packets not equal");
+ }
+ }
+
+ static void dgChannelTest(InetSocketAddress a, boolean connect) throws Exception {
+ try (DatagramChannel s = DatagramChannel.open()) {
+ System.out.println("dgChannelTest: " + a);
+ s.bind(a);
+ String t = "Hello world";
+ ByteBuffer rx = ByteBuffer.allocate(128);
+ int port = ((InetSocketAddress)s.getLocalAddress()).getPort();
+ InetSocketAddress dest = new InetSocketAddress(a.getAddress(), port);
+ ByteBuffer tx = ByteBuffer.wrap(t.getBytes("ISO8859_1"));
+ if (connect) {
+ s.connect(dest);
+ System.out.println("dgChannelTest: connect remote addr = " + s.getRemoteAddress());
+ compare(a, (InetSocketAddress)s.getRemoteAddress());
+ }
+ s.send(tx, dest);
+ s.receive(rx);
+ rx.flip();
+ String t1 = new String(rx.array(), 0, rx.limit(), "ISO8859_1");
+ System.out.printf("rx : %s, data: %s\n", rx, t1);
+ if (!t1.equals(t))
+ throw new RuntimeException("Packets not equal");
+ }
+ }
+
+ static Inet6Address stripScope(Inet6Address address) {
+ byte[] bytes = address.getAddress();
+ InetAddress result = null;
+ try {
+ result = InetAddress.getByAddress(bytes);
+ } catch (UnknownHostException e) {
+ assert false;
+ }
+ return (Inet6Address)result;
+ }
+
+ public static void main(String[] args) throws Exception {
+ for (Inet6Address address : getLinkLocalAddrs()) {
+ Inet6Address stripped = stripScope(address);
+ InetSocketAddress s1 = new InetSocketAddress(address, 0);
+ InetSocketAddress s2 = new InetSocketAddress(stripped, 0);
+ System.out.println("Trying: " + address);
+ int count = 0, success = 0;
+ for (ThrowingConsumer<InetSocketAddress> target : targets) {
+ try {
+ target.accept(s1);
+ System.out.println("target " + count + " OK");
+ // if that succeeds try s2 (the actual test)
+ try {
+ target.accept(s2);
+ success++;
+ } catch (IOException ee) {
+ String msg = "Failed: " + s2.toString() + "count: " + Integer.toString(count);
+ throw new RuntimeException (msg);
+ }
+ } catch (IOException e) {
+ System.out.println(e.getMessage());
+ // OK
+ }
+ count++;
+ }
+ System.out.println("Succeeded with " + success + " binds");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/MulticastSocket/PromiscuousIPv6.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2018, 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 8215294
+ * @requires os.family == "linux"
+ * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ * PromiscuousIPv6
+ * @run main/othervm PromiscuousIPv6
+ * @key randomness
+ */
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.Inet6Address;
+import java.net.InetSocketAddress;
+import java.net.MulticastSocket;
+import java.net.NetworkInterface;
+import java.net.SocketTimeoutException;
+import java.net.StandardSocketOptions;
+import java.util.List;
+import java.util.Random;
+import jdk.test.lib.NetworkConfiguration;
+import jtreg.SkippedException;
+import static java.lang.System.out;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.stream.Collectors.toList;
+
+/*
+ * This test was created as a clone of the Promiscuous test and adapted for
+ * IPv6 node-local and link-local multicast addresses on Linux.
+ */
+public class PromiscuousIPv6 {
+
+ static final Random rand = new Random();
+
+ static final int TIMEOUT = 5 * 1000; // 5 secs
+
+ static int sendDatagram(NetworkInterface nif, InetAddress group, int port)
+ throws IOException
+ {
+ try (MulticastSocket mc = new MulticastSocket()) {
+ mc.setOption(StandardSocketOptions.IP_MULTICAST_IF, nif);
+
+ int id = rand.nextInt();
+ byte[] msg = Integer.toString(id).getBytes(UTF_8);
+ DatagramPacket p = new DatagramPacket(msg, msg.length);
+ p.setAddress(group);
+ p.setPort(port);
+
+ out.printf("Sending datagram to: %s/%d\n", group, port);
+ mc.send(p);
+ return id;
+ }
+ }
+
+ static void receiveDatagram(DatagramSocket mc, boolean datagramExpected, int id)
+ throws IOException
+ {
+ byte[] ba = new byte[100];
+ DatagramPacket p = new DatagramPacket(ba, ba.length);
+ try {
+ mc.receive(p);
+ int recvId = Integer.parseInt(
+ new String(p.getData(), 0, p.getLength(), UTF_8));
+ if (datagramExpected) {
+ if (recvId != id)
+ throw new RuntimeException("Unexpected id, got " + recvId
+ + ", expected: " + id);
+ out.printf("Received message as expected, %s\n", p.getAddress());
+ } else {
+ throw new RuntimeException("Unexpected message received, "
+ + p.getAddress());
+ }
+ } catch (SocketTimeoutException e) {
+ if (datagramExpected)
+ throw new RuntimeException("Expected message not received, "
+ + e.getMessage());
+ else
+ out.printf("Message not received, as expected\n");
+ }
+ }
+
+ static void test(NetworkInterface nif, InetAddress group1, InetAddress group2)
+ throws IOException
+ {
+ // Bind addresses should include the same network interface / scope, so
+ // as to not reply on the default route when there are multiple interfaces
+ InetAddress bindAddr1 = Inet6Address.getByAddress(null, group1.getAddress(), nif);
+ InetAddress bindAddr2 = Inet6Address.getByAddress(null, group2.getAddress(), nif);
+
+ try (MulticastSocket mc1 = new MulticastSocket(new InetSocketAddress(bindAddr1, 0));
+ MulticastSocket mc2 = new MulticastSocket(new InetSocketAddress(bindAddr2, mc1.getLocalPort()))) {
+
+ final int port = mc1.getLocalPort();
+ out.printf("Using port: %d\n", port);
+
+ mc1.setSoTimeout(TIMEOUT);
+ mc2.setSoTimeout(TIMEOUT);
+
+ mc1.joinGroup(new InetSocketAddress(group1, 0), nif);
+ out.printf("mc1 joined the MC group: %s\n", group1);
+ mc2.joinGroup(new InetSocketAddress(group2, 0), nif);
+ out.printf("mc2 joined the MC group: %s\n", group2);
+
+ out.printf("Sending datagram to: %s/%d\n", group1, port);
+ int id = sendDatagram(nif, group1, port);
+
+ // the packet should be received by mc1 only
+ receiveDatagram(mc1, true, id);
+ receiveDatagram(mc2, false, 0);
+
+
+ out.printf("Sending datagram to: %s/%d\n", group2, port);
+ id = sendDatagram(nif, group2, port);
+
+ // the packet should be received by mc2 only
+ receiveDatagram(mc2, true, id);
+ receiveDatagram(mc1, false, 0);
+
+ mc1.leaveGroup(new InetSocketAddress(group1, 0), nif);
+ mc2.leaveGroup(new InetSocketAddress(group2, 0), nif);
+ }
+ }
+
+ public static void main(String args[]) throws IOException {
+ String os = System.getProperty("os.name");
+
+ if (!os.equals("Linux")) {
+ throw new SkippedException("This test should be run only on Linux");
+ } else {
+ String osVersion = System.getProperty("os.version");
+ String prefix = "3.10.0";
+ if (osVersion.startsWith(prefix)) {
+ throw new SkippedException(
+ String.format("The behavior under test is known NOT to work on '%s' kernels", prefix));
+ }
+ }
+
+ NetworkConfiguration.printSystemConfiguration(System.out);
+ List<NetworkInterface> nifs = NetworkConfiguration.probe()
+ .ip6MulticastInterfaces()
+ .collect(toList());
+
+ if (nifs.size() == 0) {
+ throw new SkippedException(
+ "No IPv6 interfaces that support multicast found");
+ }
+
+ InetAddress interfaceLocal1 = InetAddress.getByName("ff11::3.4.5.6");
+ InetAddress interfaceLocal2 = InetAddress.getByName("ff11::5.6.7.8");
+
+ InetAddress linkLocal1 = InetAddress.getByName("ff12::4.5.6.7");
+ InetAddress linkLocal2 = InetAddress.getByName("ff12::7.8.9.10");
+
+ for (NetworkInterface nif : nifs) {
+ test(nif, interfaceLocal1, interfaceLocal2);
+ test(nif, linkLocal1, linkLocal2);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/httpclient/BodySubscribersTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,159 @@
+/*
+ * 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
+ * @summary Basic test for the standard BodySubscribers default behavior
+ * @bug 8225583
+ * @run testng BodySubscribersTest
+ */
+
+import java.net.http.HttpResponse.BodySubscriber;
+import java.nio.ByteBuffer;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.concurrent.Flow;
+import java.util.function.Supplier;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static java.lang.System.out;
+import static java.net.http.HttpResponse.BodySubscribers.*;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.nio.file.StandardOpenOption.CREATE;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.expectThrows;
+import static org.testng.Assert.fail;
+
+public class BodySubscribersTest {
+
+ static final Class<NullPointerException> NPE = NullPointerException.class;
+
+ // Supplier of BodySubscriber<?>, with a descriptive name
+ static class BSSupplier implements Supplier<BodySubscriber<?>> {
+ private final Supplier<BodySubscriber<?>> supplier;
+ private final String name;
+ private BSSupplier(Supplier<BodySubscriber<?>> supplier, String name) {
+ this.supplier = supplier;
+ this.name = name;
+ }
+ static BSSupplier create(String name, Supplier<BodySubscriber<?>> supplier) {
+ return new BSSupplier(supplier, name);
+ }
+ @Override public BodySubscriber<?> get() { return supplier.get(); }
+ @Override public String toString() { return name; }
+ }
+
+ static class LineSubscriber implements Flow.Subscriber<String> {
+ @Override public void onSubscribe(Flow.Subscription subscription) { }
+ @Override public void onNext(String item) { fail(); }
+ @Override public void onError(Throwable throwable) { fail(); }
+ @Override public void onComplete() { fail(); }
+ }
+
+ static class BBSubscriber implements Flow.Subscriber<List<ByteBuffer>> {
+ @Override public void onSubscribe(Flow.Subscription subscription) { }
+ @Override public void onNext(List<ByteBuffer> item) { fail(); }
+ @Override public void onError(Throwable throwable) { fail(); }
+ @Override public void onComplete() { fail(); }
+ }
+
+ @DataProvider(name = "bodySubscriberSuppliers")
+ public Object[][] bodySubscriberSuppliers() { ;
+ List<Supplier<BodySubscriber<?>>> list = List.of(
+ BSSupplier.create("ofByteArray", () -> ofByteArray()),
+ BSSupplier.create("ofInputStream", () -> ofInputStream()),
+ BSSupplier.create("ofBAConsumer", () -> ofByteArrayConsumer(ba -> { })),
+ BSSupplier.create("ofLines", () -> ofLines(UTF_8)),
+ BSSupplier.create("ofPublisher", () -> ofPublisher()),
+ BSSupplier.create("ofFile", () -> ofFile(Path.of("f"))),
+ BSSupplier.create("ofFile-opts)", () -> ofFile(Path.of("f"), CREATE)),
+ BSSupplier.create("ofString", () -> ofString(UTF_8)),
+ BSSupplier.create("buffering", () -> buffering(ofByteArray(), 10)),
+ BSSupplier.create("discarding", () -> discarding()),
+ BSSupplier.create("mapping", () -> mapping(ofString(UTF_8), s -> s)),
+ BSSupplier.create("replacing", () -> replacing("hello")),
+ BSSupplier.create("fromSubscriber-1", () -> fromSubscriber(new BBSubscriber())),
+ BSSupplier.create("fromSubscriber-2", () -> fromSubscriber(new BBSubscriber(), s -> s)),
+ BSSupplier.create("fromLineSubscriber-1", () -> fromLineSubscriber(new LineSubscriber())),
+ BSSupplier.create("fromLineSubscriber-2", () -> fromLineSubscriber(new LineSubscriber(), s -> s, UTF_8, ","))
+ );
+
+ return list.stream().map(x -> new Object[] { x }).toArray(Object[][]::new);
+ }
+
+ @Test(dataProvider = "bodySubscriberSuppliers")
+ void nulls(Supplier<BodySubscriber<?>> bodySubscriberSupplier) {
+ BodySubscriber<?> bodySubscriber = bodySubscriberSupplier.get();
+ boolean subscribed = false;
+
+ do {
+ assertNotNull(bodySubscriber.getBody());
+ assertNotNull(bodySubscriber.getBody());
+ assertNotNull(bodySubscriber.getBody());
+ expectThrows(NPE, () -> bodySubscriber.onSubscribe(null));
+ expectThrows(NPE, () -> bodySubscriber.onSubscribe(null));
+ expectThrows(NPE, () -> bodySubscriber.onSubscribe(null));
+
+ expectThrows(NPE, () -> bodySubscriber.onNext(null));
+ expectThrows(NPE, () -> bodySubscriber.onNext(null));
+ expectThrows(NPE, () -> bodySubscriber.onNext(null));
+ expectThrows(NPE, () -> bodySubscriber.onNext(null));
+
+ expectThrows(NPE, () -> bodySubscriber.onError(null));
+ expectThrows(NPE, () -> bodySubscriber.onError(null));
+ expectThrows(NPE, () -> bodySubscriber.onError(null));
+
+ if (!subscribed) {
+ out.println("subscribing");
+ // subscribe the Subscriber and repeat
+ bodySubscriber.onSubscribe(new Flow.Subscription() {
+ @Override public void request(long n) { /* do nothing */ }
+ @Override public void cancel() { fail(); }
+ });
+ subscribed = true;
+ continue;
+ }
+ break;
+ } while (true);
+ }
+
+ @Test(dataProvider = "bodySubscriberSuppliers")
+ void subscribeMoreThanOnce(Supplier<BodySubscriber<?>> bodySubscriberSupplier) {
+ BodySubscriber<?> bodySubscriber = bodySubscriberSupplier.get();
+ bodySubscriber.onSubscribe(new Flow.Subscription() {
+ @Override public void request(long n) { /* do nothing */ }
+ @Override public void cancel() { fail(); }
+ });
+
+ for (int i = 0; i < 5; i++) {
+ var subscription = new Flow.Subscription() {
+ volatile boolean cancelled;
+ @Override public void request(long n) { fail(); }
+ @Override public void cancel() { cancelled = true; }
+ };
+ bodySubscriber.onSubscribe(subscription);
+ assertTrue(subscription.cancelled);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/httpclient/RelayingPublishers.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,113 @@
+/*
+ * 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 jdk.test.lib.util.FileUtils;
+import org.testng.annotations.Test;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.http.HttpRequest.BodyPublisher;
+import java.net.http.HttpRequest.BodyPublishers;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Flow;
+
+import static org.testng.Assert.assertEquals;
+
+/*
+ * @test
+ * @summary Verifies that some of the standard BodyPublishers relay exception
+ * rather than throw it
+ * @bug 8226303
+ * @library /test/lib
+ * @run testng/othervm RelayingPublishers
+ */
+public class RelayingPublishers {
+
+ @Test
+ public void ofFile0() throws IOException {
+ Path directory = Files.createDirectory(Path.of("d"));
+ // Even though the path exists, the publisher should not be able
+ // to read from it, as that path denotes a directory, not a file
+ BodyPublisher pub = BodyPublishers.ofFile(directory);
+ CompletableSubscriber<ByteBuffer> s = new CompletableSubscriber<>();
+ pub.subscribe(s);
+ s.future().join();
+ // Interestingly enough, it's FileNotFoundException if a file
+ // is a directory
+ assertEquals(s.future().join().getClass(), FileNotFoundException.class);
+ }
+
+ @Test
+ public void ofFile1() throws IOException {
+ Path file = Files.createFile(Path.of("f"));
+ BodyPublisher pub = BodyPublishers.ofFile(file);
+ FileUtils.deleteFileWithRetry(file);
+ CompletableSubscriber<ByteBuffer> s = new CompletableSubscriber<>();
+ pub.subscribe(s);
+ assertEquals(s.future().join().getClass(), FileNotFoundException.class);
+ }
+
+ @Test
+ public void ofByteArrays() {
+ List<byte[]> bytes = new ArrayList<>();
+ bytes.add(null);
+ BodyPublisher pub = BodyPublishers.ofByteArrays(bytes);
+ CompletableSubscriber<ByteBuffer> s = new CompletableSubscriber<>();
+ pub.subscribe(s);
+ assertEquals(s.future().join().getClass(), NullPointerException.class);
+ }
+
+ static class CompletableSubscriber<T> implements Flow.Subscriber<T> {
+
+ final CompletableFuture<Throwable> f = new CompletableFuture<>();
+
+ @Override
+ public void onSubscribe(Flow.Subscription subscription) {
+ subscription.request(1);
+ }
+
+ @Override
+ public void onNext(T item) {
+ f.completeExceptionally(new RuntimeException("Unexpected onNext"));
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ f.complete(throwable);
+ }
+
+ @Override
+ public void onComplete() {
+ f.completeExceptionally(new RuntimeException("Unexpected onNext"));
+ }
+
+ CompletableFuture<Throwable> future() {
+ return f.copy();
+ }
+ }
+}
--- a/test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/Http1HeaderParserTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/Http1HeaderParserTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -375,6 +375,17 @@
"HTTP/1.1 200OK\r\n\rT",
"HTTP/1.1 200OK\rT",
+
+ "HTTP/1.0 FOO\r\n",
+
+ "HTTP/1.1 BAR\r\n",
+
+ "HTTP/1.1 +99\r\n",
+
+ "HTTP/1.1 -22\r\n",
+
+ "HTTP/1.1 -20 \r\n"
+
};
Arrays.stream(bad).forEach(responses::add);
--- a/test/jdk/java/net/ipv6tests/B6521014.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/net/ipv6tests/B6521014.java Fri Jun 21 09:05:45 2019 -0700
@@ -67,7 +67,6 @@
return NetworkConfiguration.probe()
.ip6Addresses()
.filter(Inet6Address::isLinkLocalAddress)
- .map(B6521014::removeScope)
.findFirst();
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/nio/channels/DatagramChannel/PromiscuousIPv6.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,233 @@
+/*
+ * Copyright (c) 2018, 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 8215294
+ * @requires os.family == "linux"
+ * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ * PromiscuousIPv6
+ * @run main PromiscuousIPv6
+ * @key randomness
+ */
+
+import java.nio.ByteBuffer;
+import java.nio.channels.*;
+import java.net.*;
+import java.util.*;
+import java.io.IOException;
+import jdk.test.lib.NetworkConfiguration;
+import jtreg.SkippedException;
+import static java.net.StandardProtocolFamily.*;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.stream.Collectors.toList;
+
+/*
+ * This test was created as a copy of the Promiscuous test and adapted for
+ * IPv6 node-local and link-local multicast addresses on Linux.
+ */
+public class PromiscuousIPv6 {
+
+ static final Random rand = new Random();
+
+ static final ProtocolFamily UNSPEC = () -> "UNSPEC";
+
+ /**
+ * Sends a datagram to the given multicast group
+ */
+ static int sendDatagram(NetworkInterface nif,
+ InetAddress group,
+ int port)
+ throws IOException
+ {
+ ProtocolFamily family = (group instanceof Inet6Address) ? INET6 : INET;
+ DatagramChannel dc = DatagramChannel.open(family)
+ .setOption(StandardSocketOptions.IP_MULTICAST_IF, nif);
+ int id = rand.nextInt();
+ byte[] msg = Integer.toString(id).getBytes(UTF_8);
+ ByteBuffer buf = ByteBuffer.wrap(msg);
+ System.out.format("Send message -> group %s (id=0x%x)\n",
+ group.getHostAddress(), id);
+ dc.send(buf, new InetSocketAddress(group, port));
+ dc.close();
+ return id;
+ }
+
+ /**
+ * Waits (with timeout) for datagram. The {@code datagramExpected}
+ * parameter indicates whether a datagram is expected, and if
+ * {@code true} then {@code id} is the identifier in the payload.
+ */
+ static void receiveDatagram(DatagramChannel dc,
+ String name,
+ boolean datagramExpected,
+ int id)
+ throws IOException
+ {
+ System.out.println("Checking if received by " + name);
+
+ Selector sel = Selector.open();
+ dc.configureBlocking(false);
+ dc.register(sel, SelectionKey.OP_READ);
+ ByteBuffer buf = ByteBuffer.allocateDirect(100);
+
+ try {
+ for (;;) {
+ System.out.println("Waiting to receive message");
+ sel.select(5*1000);
+ SocketAddress sa = dc.receive(buf);
+
+ // no datagram received
+ if (sa == null) {
+ if (datagramExpected) {
+ throw new RuntimeException("Expected message not received");
+ }
+ System.out.println("No message received (correct)");
+ return;
+ }
+
+ // datagram received
+
+ InetAddress sender = ((InetSocketAddress)sa).getAddress();
+ buf.flip();
+ byte[] bytes = new byte[buf.remaining()];
+ buf.get(bytes);
+ String s = new String(bytes, "UTF-8");
+ int receivedId = -1;
+ try {
+ receivedId = Integer.parseInt(s);
+ System.out.format("Received message from %s (id=0x%x)\n",
+ sender, receivedId);
+ } catch (NumberFormatException x) {
+ System.out.format("Received message from %s (msg=%s)\n", sender, s);
+ }
+
+ if (!datagramExpected) {
+ if (receivedId == id)
+ throw new RuntimeException("Message not expected");
+ System.out.println("Message ignored (has wrong id)");
+ } else {
+ if (receivedId == id) {
+ System.out.println("Message expected");
+ return;
+ }
+ System.out.println("Message ignored (wrong sender)");
+ }
+
+ sel.selectedKeys().clear();
+ buf.rewind();
+ }
+ } finally {
+ sel.close();
+ }
+ }
+
+ static void test(ProtocolFamily family,
+ NetworkInterface nif,
+ InetAddress group1,
+ InetAddress group2)
+ throws IOException
+ {
+
+ System.out.format("%nTest family=%s%n", family.name());
+
+ // Bind addresses should include the same network interface / scope, so
+ // as to not reply on the default route when there are multiple interfaces
+ InetAddress bindAddr1 = Inet6Address.getByAddress(null, group1.getAddress(), nif);
+ InetAddress bindAddr2 = Inet6Address.getByAddress(null, group2.getAddress(), nif);
+
+ DatagramChannel dc1 = (family == UNSPEC) ?
+ DatagramChannel.open() : DatagramChannel.open(family);
+ DatagramChannel dc2 = (family == UNSPEC) ?
+ DatagramChannel.open() : DatagramChannel.open(family);
+
+ try {
+ dc1.setOption(StandardSocketOptions.SO_REUSEADDR, true);
+ dc2.setOption(StandardSocketOptions.SO_REUSEADDR, true);
+
+ dc1.bind(new InetSocketAddress(bindAddr1, 0));
+ int port = dc1.socket().getLocalPort();
+ dc2.bind(new InetSocketAddress(bindAddr2, port));
+
+ System.out.format("dc1 joining [%s]:%d @ %s\n",
+ group1.getHostAddress(), port, nif.getName());
+ System.out.format("dc2 joining [%s]:%d @ %s\n",
+ group2.getHostAddress(), port, nif.getName());
+
+ dc1.join(group1, nif);
+ dc2.join(group2, nif);
+
+ int id = sendDatagram(nif, group1, port);
+
+ receiveDatagram(dc1, "dc1", true, id);
+ receiveDatagram(dc2, "dc2", false, id);
+
+ id = sendDatagram(nif, group2, port);
+
+ receiveDatagram(dc1, "dc1", false, id);
+ receiveDatagram(dc2, "dc2", true, id);
+
+ } finally {
+ dc1.close();
+ dc2.close();
+ }
+ }
+
+ public static void main(String[] args) throws IOException {
+
+ String os = System.getProperty("os.name");
+
+ if (!os.equals("Linux")) {
+ throw new SkippedException("This test should be run only on Linux");
+ } else {
+ String osVersion = System.getProperty("os.version");
+ String prefix = "3.10.0";
+ if (osVersion.startsWith(prefix)) {
+ throw new SkippedException(
+ String.format("The behavior under test is known NOT to work on '%s' kernels", prefix));
+ }
+ }
+
+ NetworkConfiguration.printSystemConfiguration(System.out);
+ List<NetworkInterface> nifs = NetworkConfiguration.probe()
+ .ip6MulticastInterfaces()
+ .collect(toList());
+
+ if (nifs.size() == 0) {
+ throw new SkippedException(
+ "No IPv6 interfaces that support multicast found");
+ }
+
+ InetAddress interfaceLocal1 = InetAddress.getByName("ff11::2.3.4.5");
+ InetAddress interfaceLocal2 = InetAddress.getByName("ff11::6.7.8.9");
+
+ InetAddress linkLocal1 = InetAddress.getByName("ff12::2.3.4.5");
+ InetAddress linkLocal2 = InetAddress.getByName("ff12::6.7.8.9");
+
+ for (NetworkInterface nif : nifs) {
+ test(INET6, nif, interfaceLocal1, interfaceLocal2);
+ test(INET6, nif, linkLocal1, linkLocal2);
+ }
+ }
+}
--- a/test/jdk/java/security/KeyAgreement/KeyAgreementTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/security/KeyAgreement/KeyAgreementTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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 4936763 8184359 8205476
+ * @bug 4936763 8184359 8205476 8226307
* @summary KeyAgreement Test with all supported algorithms from JCE.
* Arguments order <KeyExchangeAlgorithm> <KeyGenAlgorithm> <Provider>
* It removes com/sun/crypto/provider/KeyAgreement/DHGenSecretKey.java
@@ -73,7 +73,7 @@
// SEC2 prime curves
"secp112r1", "secp112r2", "secp128r1", "secp128r2", "secp160k1",
"secp160r1", "secp192k1", "secp192r1", "secp224k1", "secp224r1",
- "secp256k1", "secp256r1", "secp384r1", "secp521r1",
+ "secp256k1", "secp256r1", "secp384r1", "secp521r1", "SECP521R1",
// ANSI X9.62 prime curves
"X9.62 prime192v2", "X9.62 prime192v3", "X9.62 prime239v1",
"X9.62 prime239v2", "X9.62 prime239v3",
@@ -87,7 +87,7 @@
"X9.62 c2tnb239v1", "X9.62 c2tnb239v2", "X9.62 c2tnb239v3",
"X9.62 c2tnb359v1", "X9.62 c2tnb431r1"
),
- XDH("X25519", "X448"),
+ XDH("X25519", "X448", "x25519"),
// There is no curve for DiffieHellman
DiffieHellman(new String[]{});
--- a/test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java Fri Jun 21 09:05:45 2019 -0700
@@ -29,13 +29,13 @@
/**
* @test
- * @bug 6852744
+ * @bug 6852744 8133489
* @summary PIT b61: PKI test suite fails because self signed certificates
* are being rejected
* @modules java.base/sun.security.util
- * @run main/othervm KeyUsageMatters subca
- * @run main/othervm KeyUsageMatters subci
- * @run main/othervm KeyUsageMatters alice
+ * @run main/othervm -Djava.security.debug=certpath KeyUsageMatters subca
+ * @run main/othervm -Djava.security.debug=certpath KeyUsageMatters subci
+ * @run main/othervm -Djava.security.debug=certpath KeyUsageMatters alice
* @author Xuelei Fan
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/HashMap/ToArray.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,155 @@
+/*
+ * 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.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.LongStream;
+
+/*
+ * @test
+ * @summary HashMap.toArray() behavior tests
+ * @author tvaleev
+ */
+public class ToArray {
+ public static void main(String[] args) {
+ checkMap(false);
+ checkMap(true);
+ checkSet(false);
+ checkSet(true);
+ }
+
+ private static <T extends Comparable<T>> void checkToArray(String message, T[] expected, Collection<T> collection,
+ boolean ignoreOrder) {
+ if (ignoreOrder) {
+ Arrays.sort(expected);
+ }
+ checkToObjectArray(message, expected, collection, ignoreOrder);
+ checkToTypedArray(message, expected, Arrays.copyOf(expected, 0), collection, ignoreOrder);
+ checkToTypedArray(message, expected, expected.clone(), collection, ignoreOrder);
+ if (expected.length > 0) {
+ T[] biggerArray = Arrays.copyOf(expected, expected.length * 2);
+ System.arraycopy(expected, 0, biggerArray, expected.length, expected.length);
+ checkToTypedArray(message, expected, biggerArray, collection, ignoreOrder);
+ }
+ }
+
+ private static <T extends Comparable<T>> void checkToTypedArray(String message, T[] expected, T[] inputArray,
+ Collection<T> collection, boolean ignoreOrder) {
+ T[] res = collection.toArray(inputArray);
+ if (expected.length <= inputArray.length && res != inputArray) {
+ throw new AssertionError(message + ": not the same array returned");
+ }
+ if (res.getClass() != expected.getClass()) {
+ throw new AssertionError(message + ": wrong class returned: " + res.getClass());
+ }
+ if (res.length < expected.length) {
+ throw new AssertionError(message + ": length is smaller than expected: " + res.length + " < " + expected.length);
+ }
+ if (ignoreOrder) {
+ Arrays.sort(res, 0, Math.min(res.length, expected.length));
+ }
+ if (inputArray.length <= expected.length) {
+ if (!Arrays.equals(res, expected)) {
+ throw new AssertionError(message + ": not equal: " + Arrays.toString(expected) + " != " +
+ Arrays.toString(res));
+ }
+ } else {
+ int mismatch = Arrays.mismatch(expected, res);
+ if (mismatch != expected.length) {
+ throw new AssertionError(message + ": mismatch at " + mismatch);
+ }
+ if (res[expected.length] != null) {
+ throw new AssertionError(message + ": no null at position " + expected.length);
+ }
+ // The tail of bigger array after expected.length position must be untouched
+ mismatch = Arrays
+ .mismatch(expected, 1, expected.length, res, expected.length + 1, res.length);
+ if (mismatch != -1) {
+ throw new AssertionError(message + ": mismatch at " + mismatch);
+ }
+ }
+ }
+
+ private static <T extends Comparable<T>> void checkToObjectArray(String message, T[] expected,
+ Collection<T> collection, boolean ignoreOrder) {
+ Object[] objects = collection.toArray();
+ if (objects.getClass() != Object[].class) {
+ throw new AssertionError(message + ": wrong class returned: " + objects.getClass());
+ }
+ if (ignoreOrder) {
+ Arrays.sort(objects);
+ }
+ int mismatch = Arrays.mismatch(expected, objects);
+ if (mismatch != -1) {
+ throw new AssertionError(message + ": mismatch at " + mismatch);
+ }
+ }
+
+ private static void checkMap(boolean ordered) {
+ Map<String, String> map = ordered ? new LinkedHashMap<>() : new HashMap<>();
+ checkToArray("Empty-keys", new String[0], map.keySet(), !ordered);
+ checkToArray("Empty-values", new String[0], map.values(), !ordered);
+
+ List<String> keys = new ArrayList<>();
+ List<String> values = new ArrayList<>();
+ for (int i = 0; i < 100; i++) {
+ keys.add(String.valueOf(i));
+ values.add(String.valueOf(i * 2));
+ map.put(String.valueOf(i), String.valueOf(i * 2));
+ checkToArray(i + "-keys", keys.toArray(new String[0]), map.keySet(), !ordered);
+ checkToArray(i + "-values", values.toArray(new String[0]), map.values(), !ordered);
+ }
+ map.clear();
+ checkToArray("Empty-keys", new String[0], map.keySet(), !ordered);
+ checkToArray("Empty-values", new String[0], map.values(), !ordered);
+ }
+
+ private static void checkSet(boolean ordered) {
+ Collection<String> set = ordered ? new LinkedHashSet<>() : new HashSet<>();
+ checkToArray("Empty", new String[0], set, !ordered);
+ set.add("foo");
+ checkToArray("One", new String[]{"foo"}, set, !ordered);
+ set.add("bar");
+ checkToArray("Two", new String[]{"foo", "bar"}, set, !ordered);
+
+ Collection<Long> longSet = ordered ? new LinkedHashSet<>() : new HashSet<>();
+ for (int x = 0; x < 100; x++) {
+ longSet.add((long) x);
+ }
+ checkToArray("100", LongStream.range(0, 100).boxed().toArray(Long[]::new), longSet, !ordered);
+ longSet.clear();
+ checkToArray("After clear", new Long[0], longSet, !ordered);
+ for (int x = 0; x < 100; x++) {
+ longSet.add(((long) x) | (((long) x) << 32));
+ }
+ checkToArray("Collisions", LongStream.range(0, 100).mapToObj(x -> x | (x << 32))
+ .toArray(Long[]::new), longSet, !ordered);
+ }
+}
--- a/test/jdk/java/util/zip/ZipFile/MultiThreadedReadTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/java/util/zip/ZipFile/MultiThreadedReadTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2017, 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
@@ -28,14 +28,14 @@
* @build jdk.test.lib.Platform
* jdk.test.lib.util.FileUtils
* @run main MultiThreadedReadTest
- * @key randomness
*/
+import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.file.Paths;
-import java.util.Random;
+import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
@@ -44,7 +44,8 @@
public class MultiThreadedReadTest extends Thread {
private static final int NUM_THREADS = 10;
- private static final String ZIPFILE_NAME = "large.zip";
+ private static final String ZIPFILE_NAME =
+ System.currentTimeMillis() + "-bug8038491-tmp.large.zip";
private static final String ZIPENTRY_NAME = "random.txt";
private static InputStream is = null;
@@ -63,23 +64,30 @@
threadArray[i].join();
}
} finally {
+ long t = System.currentTimeMillis();
FileUtils.deleteFileIfExistsWithRetry(Paths.get(ZIPFILE_NAME));
+ System.out.println("Deleting zip file took:" +
+ (System.currentTimeMillis() - t) + "ms");
}
}
private static void createZipFile() throws Exception {
- try (ZipOutputStream zos =
- new ZipOutputStream(new FileOutputStream(ZIPFILE_NAME))) {
-
- zos.putNextEntry(new ZipEntry(ZIPENTRY_NAME));
- StringBuilder sb = new StringBuilder();
- Random rnd = new Random();
- for(int i = 0; i < 1000; i++) {
- // append some random string for ZipEntry
- sb.append(Long.toString(rnd.nextLong()));
- }
- byte[] b = sb.toString().getBytes();
- zos.write(b, 0, b.length);
+ CRC32 crc32 = new CRC32();
+ long t = System.currentTimeMillis();
+ File zipFile = new File(ZIPFILE_NAME);
+ try (FileOutputStream fos = new FileOutputStream(zipFile);
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+ ZipOutputStream zos = new ZipOutputStream(bos)) {
+ ZipEntry e = new ZipEntry(ZIPENTRY_NAME);
+ e.setMethod(ZipEntry.STORED);
+ byte[] toWrite = "BLAH".repeat(10_000).getBytes();
+ e.setTime(t);
+ e.setSize(toWrite.length);
+ crc32.reset();
+ crc32.update(toWrite);
+ e.setCrc(crc32.getValue());
+ zos.putNextEntry(e);
+ zos.write(toWrite);
}
}
@@ -88,6 +96,7 @@
try {
while (is.read() != -1) { }
} catch (Exception e) {
+ System.out.println("read exception:" + e);
// Swallow any Exceptions (which are expected) - we're only interested in the crash
}
}
--- a/test/jdk/javax/net/ssl/SSLSocket/Tls13PacketSize.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/javax/net/ssl/SSLSocket/Tls13PacketSize.java Fri Jun 21 09:05:45 2019 -0700
@@ -53,6 +53,9 @@
@Override
protected void runServerApplication(SSLSocket socket) throws Exception {
+ // Set SO_LINGER in case of slow socket
+ socket.setSoLinger(true, 10);
+
// here comes the test logic
InputStream sslIS = socket.getInputStream();
OutputStream sslOS = socket.getOutputStream();
@@ -81,6 +84,9 @@
* @see #isCustomizedClientConnection()
*/
protected void runClientApplication(SSLSocket socket) throws Exception {
+ // Set SO_LINGER in case of slow socket
+ socket.setSoLinger(true, 10);
+
socket.setEnabledProtocols(new String[] {"TLSv1.3"});
InputStream sslIS = socket.getInputStream();
OutputStream sslOS = socket.getOutputStream();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/jcmd/TestJcmdDumpWithFileName.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,120 @@
+/*
+ * 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.jfr.jcmd;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.stream.Stream;
+
+import jdk.jfr.Recording;
+import jdk.test.lib.Asserts;
+
+/**
+ * @test
+ * @bug 8220657
+ * @key jfr
+ * @requires vm.hasJFR
+ * @library /test/lib /test/jdk
+ * @run main/othervm jdk.jfr.jcmd.TestJcmdDumpWithFileName
+ */
+public class TestJcmdDumpWithFileName {
+
+ public static void main(String[] args) throws Exception {
+ testDumpAll();
+ testDumpNamed();
+ testDumpNamedWithFilename();
+ }
+
+ private static void testDumpAll() throws Exception {
+ Path p = Path.of("testDumpAll.jfr").toAbsolutePath();
+ try (Recording r = new Recording()) {
+ r.setName("testDumpAll");
+ r.setDestination(p);
+ r.start();
+
+ JcmdHelper.jcmd("JFR.dump");
+
+ Asserts.assertFalse(namedFile(p), "Unexpected file: " + p.toString());
+ Asserts.assertTrue(generatedFile(), "Expected generated file");
+ }
+ cleanup();
+ }
+
+ private static void testDumpNamed() throws Exception {
+ Path p = Path.of("testDumpNamed.jfr").toAbsolutePath();
+ try (Recording r = new Recording()) {
+ r.setName("testDumpNamed");
+ r.setDestination(p);
+ r.start();
+
+ JcmdHelper.jcmd("JFR.dump", "name=testDumpNamed");
+
+ Asserts.assertTrue(namedFile(p), "Expected file: " + p.toString());
+ Asserts.assertFalse(generatedFile(), "Unexpected generated file");
+ }
+ cleanup();
+ }
+
+ private static void testDumpNamedWithFilename() throws Exception {
+ Path p = Path.of("testDumpNamedWithFilename.jfr").toAbsolutePath();
+ Path override = Path.of("override.jfr").toAbsolutePath();
+ try (Recording r = new Recording()) {
+ r.setName("testDumpNamedWithFilename");
+ r.setDestination(p);
+ r.start();
+
+ JcmdHelper.jcmd("JFR.dump", "name=testDumpNamedWithFilename", "filename=" + override.toString());
+
+ Asserts.assertFalse(namedFile(p), "Unexpected file: " + p.toString());
+ Asserts.assertTrue(namedFile(override), "Expected file: " + override.toString());
+ Asserts.assertFalse(generatedFile(), "Unexpected generated file");
+ }
+ cleanup();
+ }
+
+ private static boolean namedFile(Path dumpFile) throws IOException {
+ return Files.exists(dumpFile) && (Files.size(dumpFile) > 0);
+ }
+
+ private static boolean generatedFile() throws IOException {
+ long pid = ProcessHandle.current().pid();
+ Stream<Path> stream = Files.find(Path.of("."), 1, (p, a) -> p.toString()
+ .matches("^.*hotspot-pid-" + pid + "-[0-9_]+\\.jfr$") && (a.size() > 0L));
+ try (stream) {
+ return stream.findAny()
+ .isPresent();
+ }
+ }
+
+ private static void cleanup() throws IOException {
+ Stream<Path> stream = Files.find(Path.of("."), 1, (p, a) -> p.toString().endsWith(".jfr"));
+ try (stream) {
+ stream.forEach(p -> p.toFile().delete());
+ }
+ }
+
+}
--- a/test/jdk/sun/security/lib/cacerts/VerifyCACerts.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/sun/security/lib/cacerts/VerifyCACerts.java Fri Jun 21 09:05:45 2019 -0700
@@ -26,11 +26,13 @@
* @test
* @bug 8189131 8198240 8191844 8189949 8191031 8196141 8204923 8195774 8199779
* 8209452 8209506 8210432 8195793 8216577 8222089 8222133 8222137 8222136
- * 8223499
+ * 8223499 8225392
* @summary Check root CA entries in cacerts file
*/
+import java.io.ByteArrayInputStream;
import java.io.File;
-import java.io.FileInputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.Certificate;
@@ -52,6 +54,11 @@
// The numbers of certs now.
private static final int COUNT = 88;
+ // SHA-256 of cacerts, can be generated with
+ // shasum -a 256 cacerts | sed -e 's/../&:/g' | tr '[:lower:]' '[:upper:]' | cut -c1-95
+ private static final String CHECKSUM
+ = "4E:21:94:7C:1D:49:28:BB:34:B0:40:DF:AE:19:B4:41:C6:B5:8A:EE:EB:D5:DE:B4:EF:07:AF:63:18:73:A6:FE";
+
// map of cert alias to SHA-256 fingerprint
@SuppressWarnings("serial")
private static final Map<String, String> FINGERPRINT_MAP = new HashMap<>() {
@@ -255,8 +262,16 @@
public static void main(String[] args) throws Exception {
System.out.println("cacerts file: " + CACERTS);
md = MessageDigest.getInstance("SHA-256");
+
+ byte[] data = Files.readAllBytes(Path.of(CACERTS));
+ String checksum = toHexString(md.digest(data));
+ if (!checksum.equals(CHECKSUM)) {
+ atLeastOneFailed = true;
+ System.err.println("ERROR: wrong checksum\n" + checksum);
+ }
+
KeyStore ks = KeyStore.getInstance("JKS");
- ks.load(new FileInputStream(CACERTS), "changeit".toCharArray());
+ ks.load(new ByteArrayInputStream(data), "changeit".toCharArray());
// check the count of certs inside
if (ks.size() != COUNT) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/mscapi/NullKey.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,54 @@
+/*
+ * 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.security.InvalidKeyException;
+import java.security.PublicKey;
+import java.security.Signature;
+import java.util.List;
+
+/**
+ * @test
+ * @bug 8225180
+ * @requires os.family == "windows"
+ * @summary SunMSCAPI Signature should throw InvalidKeyException when
+ * initialized with a null key
+ */
+
+public class NullKey {
+ public static void main(String[] args) throws Exception {
+ for (String alg : List.of(
+ "SHA256withRSA", "SHA256withECDSA", "RSASSA-PSS")) {
+ Signature sig = Signature.getInstance(alg, "SunMSCAPI");
+ try {
+ sig.initSign(null);
+ } catch (InvalidKeyException e) {
+ // Expected
+ }
+ try {
+ sig.initVerify((PublicKey)null);
+ } catch (InvalidKeyException e) {
+ // Expected
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/ssl/SSLSocketImpl/BlockedAsyncClose.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ */
+
+//
+// SunJSSE does not support dynamic system properties, no way to re-use
+// system properties in samevm/agentvm mode.
+//
+
+/*
+ * @test
+ * @bug 8224829
+ * @summary AsyncSSLSocketClose.java has timing issue
+ * @run main/othervm BlockedAsyncClose
+ */
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.SocketException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class BlockedAsyncClose implements Runnable {
+ SSLSocket socket;
+ SSLServerSocket ss;
+
+ // Is the socket ready to close?
+ private final CountDownLatch closeCondition = new CountDownLatch(1);
+
+ // Where do we find the keystores?
+ static String pathToStores = "../../../../javax/net/ssl/etc";
+ static String keyStoreFile = "keystore";
+ static String trustStoreFile = "truststore";
+ static String passwd = "passphrase";
+
+ public static void main(String[] args) throws Exception {
+ String keyFilename =
+ System.getProperty("test.src", "./") + "/" + pathToStores +
+ "/" + keyStoreFile;
+ String trustFilename =
+ System.getProperty("test.src", "./") + "/" + pathToStores +
+ "/" + trustStoreFile;
+
+ System.setProperty("javax.net.ssl.keyStore", keyFilename);
+ System.setProperty("javax.net.ssl.keyStorePassword", passwd);
+ System.setProperty("javax.net.ssl.trustStore", trustFilename);
+ System.setProperty("javax.net.ssl.trustStorePassword", passwd);
+
+ new BlockedAsyncClose();
+ }
+
+ public BlockedAsyncClose() throws Exception {
+ SSLServerSocketFactory sslssf =
+ (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ss = (SSLServerSocket)sslssf.createServerSocket();
+ ss.bind(new InetSocketAddress(loopback, 0));
+
+ SSLSocketFactory sslsf =
+ (SSLSocketFactory)SSLSocketFactory.getDefault();
+ socket = (SSLSocket)sslsf.createSocket(loopback, ss.getLocalPort());
+ SSLSocket serverSoc = (SSLSocket)ss.accept();
+ ss.close();
+
+ (new Thread(this)).start();
+ serverSoc.startHandshake();
+
+ boolean closeIsReady = closeCondition.await(90L, TimeUnit.SECONDS);
+ if (!closeIsReady) {
+ System.out.println(
+ "Ignore, the closure is not ready yet in 90 seconds.");
+ return;
+ }
+
+ socket.setSoLinger(true, 10);
+ System.out.println("Calling Socket.close");
+
+ // Sleep for a while so that the write thread blocks by hitting the
+ // output stream buffer limit.
+ Thread.sleep(1000);
+
+ socket.close();
+ System.out.println("ssl socket get closed");
+ System.out.flush();
+ }
+
+ // block in write
+ public void run() {
+ byte[] ba = new byte[1024];
+ for (int i = 0; i < ba.length; i++) {
+ ba[i] = 0x7A;
+ }
+
+ try {
+ OutputStream os = socket.getOutputStream();
+ int count = 0;
+
+ // 1st round write
+ count += ba.length;
+ System.out.println(count + " bytes to be written");
+ os.write(ba);
+ System.out.println(count + " bytes written");
+
+ // Signal, ready to close.
+ closeCondition.countDown();
+
+ // write more
+ while (true) {
+ count += ba.length;
+ System.out.println(count + " bytes to be written");
+ os.write(ba);
+ System.out.println(count + " bytes written");
+ }
+ } catch (SocketException se) {
+ // the closing may be in progress
+ System.out.println("interrupted? " + se);
+ } catch (Exception e) {
+ if (socket.isClosed() || socket.isOutputShutdown()) {
+ System.out.println("interrupted, the socket is closed");
+ } else {
+ throw new RuntimeException("interrupted?", e);
+ }
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/ssl/SignatureScheme/Tls13NamedGroups.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,188 @@
+/*
+ * 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+//
+// SunJSSE does not support dynamic system properties, no way to re-use
+// system properties in samevm/agentvm mode.
+//
+
+/*
+ * @test
+ * @bug 8225766
+ * @summary Curve in certificate should not affect signature scheme
+ * when using TLSv1.3
+ * @library /javax/net/ssl/templates
+ * @run main/othervm Tls13NamedGroups
+ */
+
+import java.net.*;
+import java.io.*;
+import javax.net.ssl.*;
+import java.security.*;
+import java.security.cert.*;
+import java.security.spec.*;
+import java.security.interfaces.*;
+import java.util.Base64;
+
+public class Tls13NamedGroups extends SSLSocketTemplate {
+
+ public static void main(String[] args) throws Exception {
+ // Limit the supported named group to secp521r1.
+ System.setProperty("jdk.tls.namedGroups", "secp521r1");
+
+ new Tls13NamedGroups().run();
+ }
+
+ @Override
+ protected SSLContext createServerSSLContext() throws Exception {
+ return generateSSLContext();
+ }
+
+ @Override
+ protected void configureServerSocket(SSLServerSocket socket) {
+ socket.setNeedClientAuth(true);
+ }
+
+ @Override
+ protected SSLContext createClientSSLContext() throws Exception {
+ return generateSSLContext();
+ }
+
+ /*
+ * =============================================================
+ * The remainder is just support stuff
+ */
+
+ // Certificates and key used in the test.
+ //
+ // Trusted Certificate.
+ static String trustedCertStr =
+ // SHA256withECDSA, curve prime256v1
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 17 07:18:16 2038 GMT
+ // Subject Key Identifier:
+ // 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIBvjCCAWOgAwIBAgIJAIvFG6GbTroCMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYTAlVT\n" +
+ "MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTBZ\n" +
+ "MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBz1WeVb6gM2mh85z3QlvaB/l11b5h0v\n" +
+ "LIzmkC3DKlVukZT+ltH2Eq1oEkpXuf7QmbM0ibrUgtjsWH3mULfmcWmjUDBOMB0G\n" +
+ "A1UdDgQWBBRgz71z//oaMNKk7NNJcUbvGjWghjAfBgNVHSMEGDAWgBRgz71z//oa\n" +
+ "MNKk7NNJcUbvGjWghjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQCG\n" +
+ "6wluh1r2/T6L31mZXRKf9JxeSf9pIzoLj+8xQeUChQIhAJ09wAi1kV8yePLh2FD9\n" +
+ "2YEHlSQUAbwwqCDEVB5KxaqP\n" +
+ "-----END CERTIFICATE-----";
+ // -----BEGIN PRIVATE KEY-----
+ // MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/HcHdoLJCdq3haVd
+ // XZTSKP00YzM3xX97l98vGL/RI1KhRANCAAQc9VnlW+oDNpofOc90Jb2gf5ddW+Yd
+ // LyyM5pAtwypVbpGU/pbR9hKtaBJKV7n+0JmzNIm61ILY7Fh95lC35nFp
+ // -----END PRIVATE KEY-----
+
+ // End entity certificate.
+ static String targetCertStr =
+ // SHA256withECDSA, curve prime256v1
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 17 07:18:16 2038 GMT
+ // Authority Key Identifier:
+ // 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIBqjCCAVCgAwIBAgIJAPLY8qZjgNRAMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYTAlVT\n" +
+ "MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTEY\n" +
+ "MBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n" +
+ "QgAEb+9n05qfXnfHUb0xtQJNS4JeSi6IjOfW5NqchvKnfJey9VkJzR7QHLuOESdf\n" +
+ "xlR7q8YIWgih3iWLGfB+wxHiOqMjMCEwHwYDVR0jBBgwFoAUYM+9c//6GjDSpOzT\n" +
+ "SXFG7xo1oIYwCgYIKoZIzj0EAwIDSAAwRQIgWpRegWXMheiD3qFdd8kMdrkLxRbq\n" +
+ "1zj8nQMEwFTUjjQCIQDRIrAjZX+YXHN9b0SoWWLPUq0HmiFIi8RwMnO//wJIGQ==\n" +
+ "-----END CERTIFICATE-----";
+
+ // Private key in the format of PKCS#8.
+ static String targetPrivateKey =
+ //
+ // EC private key related to cert endEntityCertStrs[0].
+ //
+ "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgn5K03bpTLjEtFQRa\n" +
+ "JUtx22gtmGEvvSUSQdimhGthdtihRANCAARv72fTmp9ed8dRvTG1Ak1Lgl5KLoiM\n" +
+ "59bk2pyG8qd8l7L1WQnNHtAcu44RJ1/GVHurxghaCKHeJYsZ8H7DEeI6";
+
+ static char passphrase[] = "passphrase".toCharArray();
+
+ // Create the SSLContext instance.
+ private static SSLContext generateSSLContext() throws Exception {
+
+ // generate certificate from cert string
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+ // create a key store
+ KeyStore ks = KeyStore.getInstance("JKS");
+ ks.load(null, null);
+
+ // import the trused cert
+ X509Certificate trusedCert = null;
+ ByteArrayInputStream is =
+ new ByteArrayInputStream(trustedCertStr.getBytes());
+ trusedCert = (X509Certificate)cf.generateCertificate(is);
+ is.close();
+
+ ks.setCertificateEntry("Trusted EC Signer", trusedCert);
+
+ // generate the private key.
+ PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(
+ Base64.getMimeDecoder().decode(targetPrivateKey));
+ KeyFactory kf = KeyFactory.getInstance("EC");
+ ECPrivateKey priKey =
+ (ECPrivateKey)kf.generatePrivate(priKeySpec);
+
+ // generate certificate chain
+ is = new ByteArrayInputStream(targetCertStr.getBytes());
+ X509Certificate keyCert = (X509Certificate)cf.generateCertificate(is);
+ is.close();
+
+ X509Certificate[] chain = new X509Certificate[2];
+ chain[0] = keyCert;
+ chain[1] = trusedCert;
+
+ // import the key entry and the chain
+ ks.setKeyEntry("TheKey", priKey, passphrase, chain);
+
+ // create SSL context
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
+ tmf.init(ks);
+
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509");
+ kmf.init(ks, passphrase);
+
+ SSLContext ctx = SSLContext.getInstance("TLSv1.3");
+ ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
+ ks = null;
+
+ return ctx;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/ListOrder.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,64 @@
+/*
+ * 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 8225392
+ * @summary Comparison builds are failing due to cacerts file
+ * @library /test/lib
+ */
+
+import jdk.test.lib.SecurityTools;
+
+import java.util.Random;
+
+public class ListOrder {
+
+ public static void main(String[] args) throws Throwable {
+
+ Random rand = new Random();
+ for (int i = 0; i < 10; i++) {
+ gen(String.format("a%02d", rand.nextInt(100)));
+ }
+
+ String last = "";
+ for (String line : SecurityTools.keytool(
+ "-keystore ks -storepass changeit -list").asLines()) {
+ if (line.contains("PrivateKeyEntry")) {
+ // This is the line starting with the alias
+ System.out.println(line);
+ if (line.compareTo(last) <= 0) {
+ throw new RuntimeException("Not ordered");
+ } else {
+ last = line;
+ }
+ }
+ }
+ }
+
+ static void gen(String a) throws Exception {
+ // Do not check result, there might be duplicated alias(es).
+ SecurityTools.keytool("-keystore ks -storepass changeit "
+ + "-keyalg ec -genkeypair -alias " + a + " -dname CN=" + a);
+ }
+}
--- a/test/jdk/sun/tools/jcmd/TestProcessHelper.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/jdk/sun/tools/jcmd/TestProcessHelper.java Fri Jun 21 09:05:45 2019 -0700
@@ -73,13 +73,21 @@
.resolve(TEST_PROCESS_MAIN_CLASS_NAME + ".class");
private static final String[] CP_OPTIONS = {"-cp", "-classpath", "--class-path"};
- private static final String[][] VM_ARGS = {{}, {"-Dtest1=aaa"}, {"-Dtest1=aaa", "-Dtest2=bbb"}};
+ private static final String[][] VM_ARGS = {{}, {"-Dtest1=aaa"}, {"-Dtest1=aaa", "-Dtest2=bbb ccc"}};
private static final String[][] ARGS = {{}, {"param1"}, {"param1", "param2"}};
private static final String[] MP_OPTIONS = {"-p", "--module-path"};
- private static final String[] MODULE_OPTIONS = {"-m", "--module"};
+ private static final String[] MODULE_OPTIONS = {"-m", "--module", "--module="};
private static final String JAR_OPTION = "-jar";
private static final String MODULE_NAME = "module1";
+ private static final String[][] EXTRA_MODULAR_OPTIONS = {null,
+ {"--add-opens", "java.base/java.net=ALL-UNNAMED"},
+ {"--add-exports", "java.base/java.net=ALL-UNNAMED"},
+ {"--add-reads", "java.base/java.net=ALL-UNNAMED"},
+ {"--add-modules", "java.management"},
+ {"--limit-modules", "java.management"},
+ {"--upgrade-module-path", "test"}};
+ private static final String[] PATCH_MODULE_OPTIONS = {"--patch-module", null};
public static void main(String[] args) throws Exception {
new TestProcessHelper().runTests();
@@ -97,18 +105,24 @@
for (String cp : CP_OPTIONS) {
for (String[] vma : VM_ARGS) {
for (String[] arg : ARGS) {
- List<String> cmd = new LinkedList<>();
- cmd.add(JAVA_PATH);
- cmd.add(cp);
- cmd.add(TEST_CLASSES.toAbsolutePath().toString());
- for (String v : vma) {
- cmd.add(v);
+ for (String[] modularOptions : EXTRA_MODULAR_OPTIONS) {
+ List<String> cmd = new LinkedList<>();
+ cmd.add(JAVA_PATH);
+ cmd.add(cp);
+ cmd.add(TEST_CLASSES.toAbsolutePath().toString());
+ for (String v : vma) {
+ cmd.add(v);
+ }
+ if (modularOptions != null) {
+ cmd.add(modularOptions[0]);
+ cmd.add(modularOptions[1]);
+ }
+ cmd.add(TEST_PROCESS_MAIN_CLASS);
+ for (String a : arg) {
+ cmd.add(a);
+ }
+ testProcessHelper(cmd, TEST_PROCESS_MAIN_CLASS);
}
- cmd.add(TEST_PROCESS_MAIN_CLASS);
- for (String a : arg) {
- cmd.add(a);
- }
- testProcessHelper(cmd, TEST_PROCESS_MAIN_CLASS);
}
}
}
@@ -144,19 +158,29 @@
for (String m : MODULE_OPTIONS) {
for (String[] vma : VM_ARGS) {
for (String[] arg : ARGS) {
- List<String> cmd = new LinkedList<>();
- cmd.add(JAVA_PATH);
- cmd.add(mp);
- cmd.add(TEST_MODULES.toAbsolutePath().toString());
- for (String v : vma) {
- cmd.add(v);
+ for(String patchModuleOption : PATCH_MODULE_OPTIONS) {
+ List<String> cmd = new LinkedList<>();
+ cmd.add(JAVA_PATH);
+ cmd.add(mp);
+ cmd.add(TEST_MODULES.toAbsolutePath().toString());
+ if (patchModuleOption != null) {
+ cmd.add(patchModuleOption);
+ cmd.add(MODULE_NAME + "=" + TEST_MODULES.toAbsolutePath().toString());
+ }
+ for (String v : vma) {
+ cmd.add(v);
+ }
+ if (m.endsWith("=")) {
+ cmd.add(m + MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
+ } else {
+ cmd.add(m);
+ cmd.add(MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
+ }
+ for (String a : arg) {
+ cmd.add(a);
+ }
+ testProcessHelper(cmd, MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
}
- cmd.add(m);
- cmd.add(MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
- for (String a : arg) {
- cmd.add(a);
- }
- testProcessHelper(cmd, MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
}
}
}
--- a/test/langtools/ProblemList.txt Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/ProblemList.txt Fri Jun 21 09:05:45 2019 -0700
@@ -37,7 +37,6 @@
jdk/jshell/UserJdiUserRemoteTest.java 8173079 linux-all
jdk/jshell/UserInputTest.java 8169536 generic-all
-jdk/jshell/ExceptionsTest.java 8200701 windows-all
###########################################################################
#
--- a/test/langtools/jdk/jshell/ClassesTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/jdk/jshell/ClassesTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -344,7 +344,7 @@
" public T get() {return null;}\n" +
"}",
added(VALID),
- ste(aClass, Status.RECOVERABLE_DEFINED, Status.VALID, true, null));
+ ste(aClass, Status.RECOVERABLE_DEFINED, Status.VALID, false, null));
assertEval("new A()");
}
--- a/test/langtools/jdk/jshell/ExceptionsTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/jdk/jshell/ExceptionsTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -24,7 +24,7 @@
/*
* @test
* @summary Tests for exceptions
- * @bug 8198801
+ * @bug 8198801 8212167
* @build KullaTesting TestingInputStream
* @run testng ExceptionsTest
*/
@@ -207,6 +207,49 @@
newStackTraceElement("", "", cr2.snippet(), 1)));
}
+ // test 8212167
+ public void throwLineFormat1() {
+ SnippetEvent se = assertEvalException(
+ "if (true) { \n" +
+ " int x = 10; \n" +
+ " int y = 10 / 0;}"
+ );
+ assertExceptionMatch(se,
+ new ExceptionInfo(ArithmeticException.class, "/ by zero",
+ newStackTraceElement("", "", se.snippet(), 3)));
+ }
+
+ public void throwLineFormat3() {
+ Snippet sp = methodKey(assertEval(
+ "int p() \n" +
+ " { return 4/0; }"));
+ Snippet sm = methodKey(assertEval(
+ "int m(int x)\n" +
+ " \n" +
+ " {\n" +
+ " return p() + x; \n" +
+ " }"));
+ Snippet sn = methodKey(assertEval(
+ "int n(int x) {\n" +
+ " try {\n" +
+ " return m(x);\n" +
+ " }\n" +
+ " catch (Throwable ex) {\n" +
+ " throw new IllegalArgumentException( \"GOT:\", ex);\n" +
+ " }\n" +
+ " }"));
+ SnippetEvent se = assertEvalException("n(33);");
+ assertExceptionMatch(se,
+ new ExceptionInfo(IllegalArgumentException.class, null,
+ new ExceptionInfo(ArithmeticException.class, "/ by zero",
+ newStackTraceElement("", "p", sp, 2),
+ newStackTraceElement("", "m", sm, 4),
+ newStackTraceElement("", "n", sn, 3),
+ newStackTraceElement("", "", se.snippet(), 1)),
+ newStackTraceElement("", "n", sn, 6),
+ newStackTraceElement("", "", se.snippet(), 1)));
+ }
+
@Test(enabled = false) // TODO 8129427
public void outOfMemory() {
assertEval("import java.util.*;");
@@ -333,7 +376,8 @@
}
assertEquals(actualElement.getFileName(), expectedElement.getFileName(), message + " : file names");
assertEquals(actualElement.getLineNumber(), expectedElement.getLineNumber(), message + " : line numbers"
- + " -- actual: " + actual + ", expected: " + expected);
+ + " -- actual: " + actualElement.getLineNumber() + ", expected: " + expectedElement.getLineNumber() +
+ " -- in: " + actualElement.getClassName());
}
}
}
--- a/test/langtools/jdk/jshell/KullaTesting.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/jdk/jshell/KullaTesting.java Fri Jun 21 09:05:45 2019 -0700
@@ -911,7 +911,10 @@
public void assertCompletionIncludesExcludes(String code, Boolean isSmart, Set<String> expected, Set<String> notExpected) {
List<String> completions = computeCompletions(code, isSmart);
- assertTrue(completions.containsAll(expected), String.valueOf(completions));
+ assertTrue(completions.containsAll(expected), "Expected completions: "
+ + String.valueOf(expected)
+ + ", got: "
+ + String.valueOf(completions));
assertTrue(Collections.disjoint(completions, notExpected), String.valueOf(completions));
}
--- a/test/langtools/jdk/jshell/WrapperTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/jdk/jshell/WrapperTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8159111
+ * @bug 8159111 8159740
* @summary test wrappers and dependencies
* @modules jdk.jshell/jdk.jshell
* @build KullaTesting
@@ -62,15 +62,126 @@
assertPosition(swg, src, 15, 6);
}
- @Test(enabled = false) // TODO 8159740
+ // test 8159740
public void testMethodCorralled() {
String src = "void glib() { f(); }";
+ // _123456789_123456789
Snippet g = methodKey(assertEval(src, added(RECOVERABLE_DEFINED)));
SnippetWrapper swg = getState().sourceCodeAnalysis().wrapper(g);
- assertWrapperHas(swg, src, Kind.METHOD, "void", "glib");
+ assertWrapperHas(swg, src, Kind.METHOD, "SPIResolutionException",
+ "void", "glib");
+ assertPosition(swg, src, 0, 4);
assertPosition(swg, src, 5, 4);
}
+ // test 8159740
+ public void testClassCorralled0() {
+ String src = "class AAA { float mmm(double d1234) { return (float) (f0 * d1234); } }";
+ // _123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
+ Snippet a = classKey(assertEval(src, added(RECOVERABLE_DEFINED)));
+ SnippetWrapper swa = getState().sourceCodeAnalysis().wrapper(a);
+ assertWrapperHas(swa, src, Kind.TYPE_DECL, "SPIResolutionException",
+ "class", "AAA", "float", "mmm", "double", "d1234");
+ assertPosition(swa, src, 0, 5);
+ assertPosition(swa, src, 6, 3);
+ assertPosition(swa, src, 12, 5);
+ assertPosition(swa, src, 18, 3);
+ assertPosition(swa, src, 22, 6);
+ assertPosition(swa, src, 29, 5);
+ }
+
+ // test 8159740
+ public void testClassCorralled() {
+ String src = "class AAA { int xxx = x0 + 4; float mmm(float ffff) { return f0 * ffff; } }";
+ // _123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
+ Snippet a = classKey(assertEval(src, added(RECOVERABLE_DEFINED)));
+ SnippetWrapper swa = getState().sourceCodeAnalysis().wrapper(a);
+ assertWrapperHas(swa, src, Kind.TYPE_DECL, "SPIResolutionException",
+ "class", "AAA", "int", "xxx", "float", "mmm", "ffff");
+ assertPosition(swa, src, 0, 5);
+ assertPosition(swa, src, 6, 3);
+ assertPosition(swa, src, 12, 3);
+ assertPosition(swa, src, 16, 3);
+ assertPosition(swa, src, 30, 5);
+ assertPosition(swa, src, 36, 3);
+ assertPosition(swa, src, 40, 5);
+ assertPosition(swa, src, 46, 4);
+ }
+
+ // test 8159740
+ public void testClassWithConstructorCorralled() {
+ String src = "public class AAA { AAA(String b) {} int xxx = x0 + 4; float mmm(float ffff) { return f0 * ffff; } }";
+ // _123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
+ Snippet a = classKey(assertEval(src, added(RECOVERABLE_DEFINED)));
+ SnippetWrapper swa = getState().sourceCodeAnalysis().wrapper(a);
+ assertWrapperHas(swa, src, Kind.TYPE_DECL, "SPIResolutionException",
+ "class", "AAA", "String", "int", "xxx", "float", "mmm", "ffff");
+ assertPosition(swa, src, 7, 5);
+ assertPosition(swa, src, 13, 3);
+ assertPosition(swa, src, 19, 3);
+ assertPosition(swa, src, 23, 5);
+ assertPosition(swa, src, 30, 1);
+ assertPosition(swa, src, 36, 3);
+ assertPosition(swa, src, 40, 3);
+ assertPosition(swa, src, 54, 5);
+ assertPosition(swa, src, 60, 3);
+ assertPosition(swa, src, 64, 5);
+ assertPosition(swa, src, 70, 4);
+ }
+
+ // test 8159740
+ public void testInterfaceCorralled() {
+ String src = "interface AAA { default float mmm(double d1234) { return (float) (f0 * d1234); } }";
+ // _123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
+ Snippet a = classKey(assertEval(src, added(RECOVERABLE_DEFINED)));
+ SnippetWrapper swa = getState().sourceCodeAnalysis().wrapper(a);
+ assertWrapperHas(swa, src, Kind.TYPE_DECL, "SPIResolutionException",
+ "interface", "AAA", "float", "mmm", "double", "d1234");
+ assertPosition(swa, src, 0, 9);
+ assertPosition(swa, src, 10, 3);
+ assertPosition(swa, src, 16, 7);
+ assertPosition(swa, src, 24, 5);
+ assertPosition(swa, src, 30, 3);
+ assertPosition(swa, src, 34, 6);
+ assertPosition(swa, src, 41, 5);
+ }
+
+ // test 8159740
+ public void testEnumCorralled() {
+ String src =
+ "public enum Planet {\n" +
+ " MERCURY (3.303e+23, 2.4397e6),\n" +
+ " VENUS (4.869e+24, 6.0518e6),\n" +
+ " EARTH (5.976e+24, 6.37814e6),\n" +
+ " MARS (6.421e+23, 3.3972e6),\n" +
+ " JUPITER (1.9e+27, 7.1492e7),\n" +
+ " SATURN (5.688e+26, 6.0268e7),\n" +
+ " URANUS (8.686e+25, 2.5559e7),\n" +
+ " NEPTUNE (1.024e+26, 2.4746e7);\n" +
+ "\n" +
+ " private final double mass; // in kilograms\n" +
+ " private final double radius; // in meters\n" +
+ " Planet(double mass, double radius) {\n" +
+ " this.mass = mass;\n" +
+ " this.radius = radius;\n" +
+ " }\n" +
+ " private double mass() { return mass; }\n" +
+ " private double radius() { return radius; }\n" +
+ "\n" +
+ " double surfaceGravity() {\n" +
+ " return GRAVITATIONAL_CONSTANT * mass / (radius * radius);\n" +
+ " }\n" +
+ " double surfaceWeight(double otherMass) {\n" +
+ " return otherMass * surfaceGravity();\n" +
+ " }\n" +
+ "}\n";
+ Snippet a = classKey(assertEval(src, added(RECOVERABLE_DEFINED)));
+ SnippetWrapper swa = getState().sourceCodeAnalysis().wrapper(a);
+ assertWrapperHas(swa, src, Kind.TYPE_DECL, "SPIResolutionException",
+ "enum", "Planet", "double", "mass", "EARTH", "NEPTUNE", "MERCURY",
+ "radius", "surfaceGravity", "surfaceWeight");
+ }
+
public void testMethodBad() {
String src = "void flob() { ?????; }";
List<SnippetWrapper> swl = getState().sourceCodeAnalysis().wrappers(src);
@@ -182,23 +293,36 @@
private void assertWrapperHas(SnippetWrapper sw, String source, Kind kind, String... has) {
assertEquals(sw.source(), source);
assertEquals(sw.kind(), kind);
+ String s = sw.wrapped();
if (kind == Kind.IMPORT) {
- assertTrue(sw.wrapped().contains("import"));
+ assertHas(s, "import");
} else {
String cn = sw.fullClassName();
int idx = cn.lastIndexOf(".");
- assertTrue(sw.wrapped().contains(cn.substring(idx+1)));
- assertTrue(sw.wrapped().contains("class"));
+ assertHas(s, cn.substring(idx+1));
+ assertHas(s, "class");
}
- for (String s : has) {
- assertTrue(sw.wrapped().contains(s));
+ for (String hx : has) {
+ assertHas(s, hx);
}
}
+ private void assertHas(String s, String has) {
+ assertTrue(s.contains(has), "Expected to find '" + has + "' in: '" + s + "'");
+ }
+
private void assertPosition(SnippetWrapper sw, String source, int start, int length) {
+ //System.err.printf("\n#assertPosition:\n# debug-source: %s\n# SnippetWrapper --\n# source: %s\n# wrapped: %s\n",
+ // source, sw.source(), sw.wrapped());
+ //System.err.printf("# start: %d length: %d\n", start, length);
int wpg = sw.sourceToWrappedPosition(start);
- assertEquals(sw.wrapped().substring(wpg, wpg+length),
- source.substring(start, start+length),
+ //System.err.printf("# wrappedPos: %d\n", wpg);
+ String wrappedPart = sw.wrapped().substring(wpg, wpg+length);
+ String sourcePart = source.substring(start, start+length);
+ //System.err.printf("# wrapped @ wrappedPos: %s\n", wrappedPart);
+ //System.err.printf("# source @ start: %s\n", sourcePart);
+
+ assertEquals(wrappedPart, sourcePart,
"position " + wpg + " in " + sw.wrapped());
assertEquals(sw.wrappedToSourcePosition(wpg), start);
}
--- a/test/langtools/tools/javac/T6942649.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/T6942649.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2015, 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
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6942649
+ * @bug 6942649 8225748
* @summary add hidden option to identify location and version of javac classes
* @modules jdk.compiler
*/
@@ -60,7 +60,7 @@
throw new Exception("location of class not found in output");
}
- if (!out.contains("MD5 checksum: "))
+ if (!out.contains("SHA-256 checksum: "))
throw new Exception("checksum not found in output");
}
}
--- a/test/langtools/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -193,12 +193,12 @@
enum TestCase {
BasicNonRepeatable_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"}, "
- + "getDeclAnnoVal = \"@Foo(value=0)\", "
- + "getAnnosArgs = {\"@Foo(value=0)\"}, "
- + "getDeclAnnosArgs = {\"@Foo(value=0)\"}) ",
+ + "getAnnotationVal = \"@Foo(0)\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"}, "
+ + "getDeclAnnoVal = \"@Foo(0)\", "
+ + "getAnnosArgs = {\"@Foo(0)\"}, "
+ + "getDeclAnnosArgs = {\"@Foo(0)\"}) ",
"@ExpectedContainer") {
@Override
@@ -274,11 +274,11 @@
},
SingleAnnoInherited_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
- + "getAnnotationsVals = {\"@Foo(value=0)\", \"ExpectedBase\", \"ExpectedContainer\"}, "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ + "getAnnotationsVals = {\"@Foo(0)\", \"ExpectedBase\", \"ExpectedContainer\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\"}, "
+ "getDeclAnnoVal = \"NULL\", "
- + "getAnnosArgs = {\"@Foo(value=0)\"}, "
+ + "getAnnosArgs = {\"@Foo(0)\"}, "
+ "getDeclAnnosArgs = {})",
"@ExpectedContainer") {
@@ -401,18 +401,18 @@
},
AnnoOnSuperAndSubClass_Inherited_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=2)\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=2)\"}, "
+ + "getAnnotationVal = \"@Foo(2)\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(2)\"}, "
+ // override every annotation on superClass
- "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=2)\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(2)\"}, "
+ // ignores inherited annotations
- "getDeclAnnoVal = \"@Foo(value=2)\", " // ignores inherited
- + "getAnnosArgs = {\"@Foo(value=2)\"}, "
- + "getDeclAnnosArgs = { \"@Foo(value=2)\" })", // ignores inherited
+ "getDeclAnnoVal = \"@Foo(2)\", " // ignores inherited
+ + "getAnnosArgs = {\"@Foo(2)\"}, "
+ + "getDeclAnnosArgs = { \"@Foo(2)\" })", // ignores inherited
"@ExpectedContainer(value=FooContainer.class, "
+ "getAnnotationVal = \"NULL\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=2)\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=2)\"}, "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(2)\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(2)\"}, "
+ // ignores inherited annotations
"getDeclAnnoVal = \"NULL\", " + // ignores inherited
"getAnnosArgs = {}, " + "getDeclAnnosArgs = {})") { // ignores inherited
@@ -481,19 +481,19 @@
}
},
BasicContainer_Legacy(
- "@ExpectedBase(value = Foo.class, "
+ "@ExpectedBase(value=Foo.class, "
+ "getAnnotationVal = \"NULL\","
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnoVal = \"NULL\", " + "getAnnosArgs = {}, "
+ "getDeclAnnosArgs = {} )",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"} )") {
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"} )") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -580,24 +580,24 @@
}
},
SingleAndContainerOnSuper_Legacy(
- "@ExpectedBase(value = Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\","
+ "@ExpectedBase(value=Foo.class, "
+ + "getAnnotationVal = \"@Foo(0)\","
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnoVal = \"@Foo(value=0)\", "
- + "getAnnosArgs = {\"@Foo(value=0)\"}, "
- + "getDeclAnnosArgs = {\"@Foo(value=0)\"} )",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnoVal = \"@Foo(0)\", "
+ + "getAnnosArgs = {\"@Foo(0)\"}, "
+ + "getDeclAnnosArgs = {\"@Foo(0)\"} )",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"} )") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"} )") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -689,19 +689,19 @@
}
},
BasicContainer_Inherited_Legacy(
- "@ExpectedBase(value = Foo.class, "
+ "@ExpectedBase(value=Foo.class, "
+ "getAnnotationVal = \"NULL\","
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\"}, "
+ "getDeclAnnoVal = \"NULL\", "
+ "getAnnosArgs = {}, "
+ "getDeclAnnosArgs = {} )",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\"}, "
+ "getDeclAnnoVal = \"NULL\", "
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosArgs = {} )") {
@Override
@@ -763,20 +763,20 @@
},
ContainerOnSuperSingleOnSub_Inherited_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=0)\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
- + "getDeclAnnoVal = \"@Foo(value=0)\","
- + "getAnnosArgs = {\"@Foo(value=0)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=0)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(0)\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ + "getDeclAnnoVal = \"@Foo(0)\","
+ + "getAnnosArgs = {\"@Foo(0)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(0)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=0)\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(0)\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosArgs = {})") {
@Override
@@ -842,20 +842,20 @@
// fail with ordering issues
ContainerAndSingleOnSuperSingleOnSub_Inherited_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=0)\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
- + "getDeclAnnoVal = \"@Foo(value=0)\","
- + "getAnnosArgs = {\"@Foo(value=0)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=0)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(0)\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ + "getDeclAnnoVal = \"@Foo(0)\","
+ + "getAnnosArgs = {\"@Foo(0)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(0)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=0)\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(0)\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosArgs = {})") {
@Override
@@ -921,21 +921,21 @@
// fail with ordering issues
SingleOnSuperContainerOnSub_Inherited_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@Foo(value=0)\"},"
+ + "getAnnosArgs = {\"@Foo(0)\"},"
+ "getDeclAnnosArgs = {})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"})") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"})") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -998,23 +998,23 @@
// fail with ordering issues
SingleOnSuperContainerAndSingleOnSub_Inherited_Legacy(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=3)\", "
+ + "getAnnotationVal = \"@Foo(3)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"},"
- + "getDeclAnnoVal = \"@Foo(value=3)\","
- + "getAnnosArgs = {\"@Foo(value=3)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=3)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"},"
+ + "getDeclAnnoVal = \"@Foo(3)\","
+ + "getAnnosArgs = {\"@Foo(3)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(3)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"},"
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"})") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"},"
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"})") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -1077,18 +1077,18 @@
BasicRepeatable(
"@ExpectedBase(value=Foo.class, "
+ "getAnnotationVal = \"NULL\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\" }, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\" }, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"})",
+ + "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"} )") {
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"} )") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -1179,21 +1179,21 @@
"@ExpectedBase(value=Foo.class, "
+ "getAnnotationVal = \"NULL\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"})",
+ + "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"} )") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"} )") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -1283,17 +1283,17 @@
BasicContainerRepeatable_Inherited(
"@ExpectedBase(value=Foo.class, "
+ "getAnnotationVal = \"NULL\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\"}, "
+ "getDeclAnnoVal = \"NULL\", "
- + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"}, "
+ + "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"}, "
+ "getDeclAnnosArgs = {})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = { \"ExpectedBase\", \"ExpectedContainer\"}, "
+ "getDeclAnnoVal = \"NULL\", "
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosArgs = {})") {
@Override
@@ -1356,21 +1356,21 @@
RepeatableAnnoInherited(
"@ExpectedBase(value=Foo.class, "
+ "getAnnotationVal = \"NULL\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\"}, "
+ // ignores inherited annotations
"getDeclAnnoVal = \"NULL\", "
+ // ignores inherited
- "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"}, "
+ "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"}, "
+ "getDeclAnnosArgs = {})", // ignores inherited
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosVals = { \"ExpectedBase\", \"ExpectedContainer\"}, "
+ // ignores inherited annotations
"getDeclAnnoVal = \"NULL\", "
+ // ignores inherited
- "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosArgs = {})") { // ignores inherited
@Override
@@ -1434,23 +1434,23 @@
// fail with ordering issues
SingleAnnoWithContainer(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnoVal = \"@Foo(value=0)\","
- + "getAnnosArgs = {\"@Foo(value=0)\", \"@Foo(value=1)\", \"@Foo(value=2)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=0)\", \"@Foo(value=1)\",\"@Foo(value=2)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnoVal = \"@Foo(0)\","
+ + "getAnnosArgs = {\"@Foo(0)\", \"@Foo(1)\", \"@Foo(2)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(0)\", \"@Foo(1)\",\"@Foo(2)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"})") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"})") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -1543,18 +1543,18 @@
},
AnnoOnSuperAndSubClass_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=1)\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=1)\" }, "
+ + "getAnnotationVal = \"@Foo(1)\", "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(1)\" }, "
+ // override every annotation on superClass
- "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=1)\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(1)\"}, "
+ // ignores inherited annotations
- "getDeclAnnoVal = \"@Foo(value=1)\", " // ignores inherited
- + "getAnnosArgs = {\"@Foo(value=1)\"}, "
- + "getDeclAnnosArgs = { \"@Foo(value=1)\" })", // ignores inherited
+ "getDeclAnnoVal = \"@Foo(1)\", " // ignores inherited
+ + "getAnnosArgs = {\"@Foo(1)\"}, "
+ + "getDeclAnnosArgs = { \"@Foo(1)\" })", // ignores inherited
"@ExpectedContainer(value=FooContainer.class, "
+ "getAnnotationVal = \"NULL\", "
- + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=1)\" }, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=1)\"}, "
+ + "getAnnotationsVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(1)\" }, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(1)\"}, "
+ // ignores inherited annotations
"getDeclAnnoVal = \"NULL\", " + // ignores inherited
"getAnnosArgs = {}, " + "getDeclAnnosArgs = {})") {
@@ -1622,23 +1622,23 @@
// fail with ordering issues
RepeatableOnSuperSingleOnSub_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=3)\", "
+ + "getAnnotationVal = \"@Foo(3)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(3)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ //override every annotation on superClass
- "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(3)\"}, "
+ // ignores inherited annotations
- "getDeclAnnoVal = \"@Foo(value=3)\", " // ignores inherited
- + "getAnnosArgs = {\"@Foo(value=3)\"}, "
- + "getDeclAnnosArgs = { \"@Foo(value=3)\" })", // ignores inherited
+ "getDeclAnnoVal = \"@Foo(3)\", " // ignores inherited
+ + "getAnnosArgs = {\"@Foo(3)\"}, "
+ + "getDeclAnnosArgs = { \"@Foo(3)\" })", // ignores inherited
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(3)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(3)\"}, "
+ // ignores inherited annotations
"getDeclAnnoVal = \"NULL\", "
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ "getDeclAnnosArgs = {}) // ignores inherited ") {
@Override
@@ -1702,24 +1702,24 @@
// fail with ordering issues
SingleOnSuperRepeatableOnSub_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ //override every annotation on superClass
- "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ // ignores inherited annotations
"getDeclAnnoVal = \"NULL\","// ignores inherited
- + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"}, "
- + "getDeclAnnosArgs = { \"@Foo(value=1)\", \"@Foo(value=2)\"})",
+ + "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"}, "
+ + "getDeclAnnosArgs = { \"@Foo(1)\", \"@Foo(2)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ // ignores inherited annotations
- "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "// ignores inherited
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"})") {
+ "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "// ignores inherited
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"})") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -1783,20 +1783,20 @@
// fail with ordering issues
ContainerOnSuperSingleOnSub_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
- + "getDeclAnnoVal = \"@Foo(value=0)\","
- + "getAnnosArgs = {\"@Foo(value=0)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=0)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ + "getDeclAnnoVal = \"@Foo(0)\","
+ + "getAnnosArgs = {\"@Foo(0)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(0)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosArgs = {})") {
@Override
@@ -1861,21 +1861,21 @@
// fail with ordering issues
SingleOnSuperContainerOnSub_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"})",
+ + "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"})") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"})") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -1939,23 +1939,23 @@
// fail with ordering issues
SingleOnSuperContainerAndSingleOnSub_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=3)\", "
+ + "getAnnotationVal = \"@Foo(3)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"},"
- + "getDeclAnnoVal = \"@Foo(value=3)\","
- + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\", \"@Foo(value=3)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\", \"@Foo(value=3)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"},"
+ + "getDeclAnnoVal = \"@Foo(3)\","
+ + "getAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\", \"@Foo(3)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(1)\", \"@Foo(2)\", \"@Foo(3)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"}, "
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"}, "
+ "getDeclAnnosVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", \"@Foo(value=3)\"},"
- + "getDeclAnnoVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
- + "getDeclAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"})") {
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer({@Foo(1), @Foo(2)})\", \"@Foo(3)\"},"
+ + "getDeclAnnoVal = \"@FooContainer({@Foo(1), @Foo(2)})\","
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"})") {
@Override
public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
@@ -2019,20 +2019,20 @@
// fail with ordering issues
ContainerAndSingleOnSuperSingleOnSub_Inherited(
"@ExpectedBase(value=Foo.class, "
- + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationVal = \"@Foo(0)\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
- + "getDeclAnnoVal = \"@Foo(value=0)\","
- + "getAnnosArgs = {\"@Foo(value=0)\"},"
- + "getDeclAnnosArgs = {\"@Foo(value=0)\"})",
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ + "getDeclAnnoVal = \"@Foo(0)\","
+ + "getAnnosArgs = {\"@Foo(0)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(0)\"})",
"@ExpectedContainer(value=FooContainer.class, "
- + "getAnnotationVal = \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\", "
+ + "getAnnotationVal = \"@FooContainer({@Foo(1), @Foo(2)})\", "
+ "getAnnotationsVals = {"
- + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"}, "
- + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\", \"@FooContainer({@Foo(1), @Foo(2)})\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(0)\"},"
+ "getDeclAnnoVal = \"NULL\","
- + "getAnnosArgs = {\"@FooContainer(value={@Foo(value=1), @Foo(value=2)})\"},"
+ + "getAnnosArgs = {\"@FooContainer({@Foo(1), @Foo(2)})\"},"
+ "getDeclAnnosArgs = {})") {
@Override
--- a/test/langtools/tools/javac/annotations/typeAnnotations/classfile/AnonymousExtendsTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/annotations/typeAnnotations/classfile/AnonymousExtendsTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -52,10 +52,10 @@
public void testIt() {
checkAnnotations(TestClass.class.getAnnotatedSuperclass(),
- "[@AnonymousExtendsTest$TA(value=1)],[@AnonymousExtendsTest$TA(value=2)]");
+ "[@AnonymousExtendsTest$TA(1)],[@AnonymousExtendsTest$TA(2)]");
checkAnnotations(new @TA(3) ArrayList<@TA(4) List<Number>>() {
}.getClass().getAnnotatedSuperclass(),
- "[@AnonymousExtendsTest$TA(value=3)],[@AnonymousExtendsTest$TA(value=4)]");
+ "[@AnonymousExtendsTest$TA(3)],[@AnonymousExtendsTest$TA(4)]");
}
public void checkAnnotations(AnnotatedType type, String expected) {
@@ -74,4 +74,4 @@
public static void main(String[] args) {
new AnonymousExtendsTest().testIt();
}
-}
\ No newline at end of file
+}
--- a/test/langtools/tools/javac/api/T6395981.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/api/T6395981.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -31,7 +31,7 @@
* @run main/fail T6395981
* @run main/fail T6395981 RELEASE_3 RELEASE_5 RELEASE_6
* @run main/fail T6395981 RELEASE_0 RELEASE_1 RELEASE_2 RELEASE_3 RELEASE_4 RELEASE_5 RELEASE_6
- * @run main T6395981 RELEASE_3 RELEASE_4 RELEASE_5 RELEASE_6 RELEASE_7 RELEASE_8 RELEASE_9 RELEASE_10 RELEASE_11 RELEASE_12 RELEASE_13
+ * @run main T6395981 RELEASE_3 RELEASE_4 RELEASE_5 RELEASE_6 RELEASE_7 RELEASE_8 RELEASE_9 RELEASE_10 RELEASE_11 RELEASE_12 RELEASE_13 RELEASE_14
*/
import java.util.EnumSet;
--- a/test/langtools/tools/javac/classfiles/ClassVersionChecker.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/classfiles/ClassVersionChecker.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -48,7 +48,8 @@
TEN("10", 54),
ELEVEN("11", 55),
TWELVE("12", 56),
- THIRTEEN("13", 57);
+ THIRTEEN("13", 57),
+ FOURTEEN("14", 58);
private Version(String release, int classFileVer) {
this.release = release;
--- a/test/langtools/tools/javac/diags/examples/InvalidYield.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/diags/examples/InvalidYield.java Fri Jun 21 09:05:45 2019 -0700
@@ -22,7 +22,7 @@
*/
// key: compiler.err.invalid.yield
-// options: --enable-preview --source 13
+// options: --enable-preview --source ${jdk.version}
class BreakComplexValueNoSwitchExpressions {
void t() {
--- a/test/langtools/tools/javac/diags/examples/InvalidYieldWarning.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/diags/examples/InvalidYieldWarning.java Fri Jun 21 09:05:45 2019 -0700
@@ -22,7 +22,7 @@
*/
// key: compiler.warn.invalid.yield
-// options: --source 13
+// options: --source ${jdk.version}
class BreakComplexValueNoSwitchExpressions {
void t() {
--- a/test/langtools/tools/javac/diags/examples/NoSwitchExpression.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/diags/examples/NoSwitchExpression.java Fri Jun 21 09:05:45 2019 -0700
@@ -22,7 +22,7 @@
*/
// key: compiler.err.no.switch.expression
-// options: --enable-preview --source 13
+// options: --enable-preview --source ${jdk.version}
class BreakComplexValueNoSwitchExpressions {
void t() {
--- a/test/langtools/tools/javac/diags/examples/NoSwitchExpressionQualify.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/diags/examples/NoSwitchExpressionQualify.java Fri Jun 21 09:05:45 2019 -0700
@@ -22,7 +22,7 @@
*/
// key: compiler.err.no.switch.expression.qualify
-// options: --enable-preview --source 13
+// options: --enable-preview --source ${jdk.version}
class BreakComplexValueNoSwitchExpressions {
void t() {
--- a/test/langtools/tools/javac/lib/JavacTestingAbstractProcessor.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/lib/JavacTestingAbstractProcessor.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2018, 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
@@ -110,7 +110,7 @@
* corresponding platform visitor type.
*/
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static abstract class AbstractAnnotationValueVisitor<R, P> extends AbstractAnnotationValueVisitor9<R, P> {
/**
@@ -121,7 +121,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static abstract class AbstractElementVisitor<R, P> extends AbstractElementVisitor9<R, P> {
/**
* Constructor for concrete subclasses to call.
@@ -131,7 +131,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static abstract class AbstractTypeVisitor<R, P> extends AbstractTypeVisitor9<R, P> {
/**
* Constructor for concrete subclasses to call.
@@ -141,7 +141,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static class ElementKindVisitor<R, P> extends ElementKindVisitor9<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
@@ -162,7 +162,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static class ElementScanner<R, P> extends ElementScanner9<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
@@ -181,7 +181,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static class SimpleAnnotationValueVisitor<R, P> extends SimpleAnnotationValueVisitor9<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
@@ -202,7 +202,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static class SimpleElementVisitor<R, P> extends SimpleElementVisitor9<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
@@ -223,7 +223,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static class SimpleTypeVisitor<R, P> extends SimpleTypeVisitor9<R, P> {
/**
* Constructor for concrete subclasses; uses {@code null} for the
@@ -244,7 +244,7 @@
}
}
- @SupportedSourceVersion(RELEASE_13)
+ @SupportedSourceVersion(RELEASE_14)
public static class TypeKindVisitor<R, P> extends TypeKindVisitor9<R, P> {
/**
* Constructor for concrete subclasses to call; uses {@code null}
--- a/test/langtools/tools/javac/modules/AnnotationsOnModules.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/modules/AnnotationsOnModules.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -609,11 +609,11 @@
new TestCase("package test; public enum E {A, B;}",
"public E value();",
"test.E.A",
- "@test.A(test.E.A)"),
+ "@test.A(A)"),
new TestCase("package test; public enum E {A, B;}",
"public E[] value();",
"{test.E.A, test.E.B}",
- "@test.A({test.E.A, test.E.B})"),
+ "@test.A({A, B})"),
new TestCase("package test; public class Extra {}",
"public Class value();",
"test.Extra.class",
@@ -641,7 +641,7 @@
new TestCase("package test; public enum E {A;}",
"int integer(); boolean flag(); double value(); String string(); E enumeration(); ",
"enumeration = test.E.A, integer = 42, flag = true, value = 3.5, string = \"Text\"",
- "@test.A(enumeration=test.E.A, integer=42, flag=true, value=3.5, string=\"Text\")"),
+ "@test.A(enumeration=A, integer=42, flag=true, value=3.5, string=\"Text\")"),
};
Path extraSrc = base.resolve("extra-src");
--- a/test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out Fri Jun 21 09:05:45 2019 -0700
@@ -1,2 +1,2 @@
-- compiler.err.preview.feature.disabled.classfile: Bar.class, 13
+- compiler.err.preview.feature.disabled.classfile: Bar.class, 14
1 error
--- a/test/langtools/tools/javac/preview/classReaderTest/Client.preview.out Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.preview.out Fri Jun 21 09:05:45 2019 -0700
@@ -1,4 +1,4 @@
-- compiler.warn.preview.feature.use.classfile: Bar.class, 13
+- compiler.warn.preview.feature.use.classfile: Bar.class, 14
- compiler.err.warnings.and.werror
1 error
1 warning
--- a/test/langtools/tools/javac/processing/messager/6388543/T6388543.out Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/messager/6388543/T6388543.out Fri Jun 21 09:05:45 2019 -0700
@@ -7,9 +7,9 @@
T6388543.java:33:16: compiler.note.proc.messager: note:value @A({4, 5}) + {4, 5}
T6388543.java:33:17: compiler.note.proc.messager: note:value @A({4, 5}) + 4
T6388543.java:33:20: compiler.note.proc.messager: note:value @A({4, 5}) + 5
-T6388543.java:36:12: compiler.note.proc.messager: note:value @B(x=@C(x=E.ONE, y=E.TWO), y=@C(x=E.ONE, y=E.TWO)) + @C(x=E.ONE, y=E.TWO)
-T6388543.java:36:20: compiler.note.proc.messager: note:value @B(x=@C(x=E.ONE, y=E.TWO), y=@C(x=E.ONE, y=E.TWO)) + E.ONE
-T6388543.java:36:31: compiler.note.proc.messager: note:value @B(x=@C(x=E.ONE, y=E.TWO), y=@C(x=E.ONE, y=E.TWO)) + E.TWO
-T6388543.java:36:42: compiler.note.proc.messager: note:value @B(x=@C(x=E.ONE, y=E.TWO), y=@C(x=E.ONE, y=E.TWO)) + @C(x=E.ONE, y=E.TWO)
-T6388543.java:36:50: compiler.note.proc.messager: note:value @B(x=@C(x=E.ONE, y=E.TWO), y=@C(x=E.ONE, y=E.TWO)) + E.ONE
-T6388543.java:36:61: compiler.note.proc.messager: note:value @B(x=@C(x=E.ONE, y=E.TWO), y=@C(x=E.ONE, y=E.TWO)) + E.TWO
+T6388543.java:36:12: compiler.note.proc.messager: note:value @B(x=@C(x=ONE, y=TWO), y=@C(x=ONE, y=TWO)) + @C(x=ONE, y=TWO)
+T6388543.java:36:20: compiler.note.proc.messager: note:value @B(x=@C(x=ONE, y=TWO), y=@C(x=ONE, y=TWO)) + ONE
+T6388543.java:36:31: compiler.note.proc.messager: note:value @B(x=@C(x=ONE, y=TWO), y=@C(x=ONE, y=TWO)) + TWO
+T6388543.java:36:42: compiler.note.proc.messager: note:value @B(x=@C(x=ONE, y=TWO), y=@C(x=ONE, y=TWO)) + @C(x=ONE, y=TWO)
+T6388543.java:36:50: compiler.note.proc.messager: note:value @B(x=@C(x=ONE, y=TWO), y=@C(x=ONE, y=TWO)) + ONE
+T6388543.java:36:61: compiler.note.proc.messager: note:value @B(x=@C(x=ONE, y=TWO), y=@C(x=ONE, y=TWO)) + TWO
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/processing/model/element/AnnotationToStringTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,405 @@
+/*
+ * 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
+ * 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 8164819
+ * @summary Test of toString on normal annotations
+ * @library /tools/javac/lib
+ * @build JavacTestingAbstractProcessor AnnotationToStringTest
+ * @compile -processor AnnotationToStringTest -proc:only AnnotationToStringTest.java
+ */
+
+// See also the sibling core reflection test
+// test/jdk/java/lang/annotation/AnnotationToStringTest.java
+
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.AnnotatedConstruct;
+import javax.lang.model.element.*;
+import javax.lang.model.util.*;
+
+/**
+ * The expected string values are stored in @ExpectedString
+ * annotations. The essence of the test is comparing the toString()
+ * result of annotations to the corresponding ExpectedString.value().
+ *
+ * Two flavors of comparison are made:
+ *
+ * 1) Against the AnnotationMirror value from getAnnotationMirrors()
+ *
+ * 2) Against the *Annotation* from getAnnotation(Class<A>)
+ *
+ * These have separate but related implementations.
+ */
+public class AnnotationToStringTest extends JavacTestingAbstractProcessor {
+ public boolean process(Set<? extends TypeElement> annotations,
+ RoundEnvironment roundEnv) {
+ if (!roundEnv.processingOver()) {
+
+ int failures = 0;
+
+ TypeElement primHostElt =
+ Objects.requireNonNull(elements.getTypeElement("AnnotationToStringTest.PrimHost"));
+
+ List<? extends AnnotationMirror> annotMirrors = primHostElt.getAnnotationMirrors();
+
+ String expectedString = primHostElt.getAnnotation(MostlyPrimitive.class).toString();
+
+ failures += check(expectedString,
+ primHostElt.getAnnotation(ExpectedString.class).value());
+
+ failures += check(expectedString,
+ retrieveAnnotationMirrorAsString(primHostElt,
+ "MostlyPrimitive"));
+ failures += classyTest();
+ failures += arrayAnnotationTest();
+
+ if (failures > 0)
+ throw new RuntimeException(failures + " failures");
+ }
+ return true;
+ }
+
+ /**
+ * Examine annotation mirrors, find the one that matches
+ * annotationName, and return its toString value.
+ */
+ private String retrieveAnnotationMirrorAsString(AnnotatedConstruct annotated,
+ String annotationName) {
+ return retrieveAnnotationMirror(annotated, annotationName).toString();
+ }
+
+ private String retrieveAnnotationMirrorValue(AnnotatedConstruct annotated,
+ String annotationName) {
+ AnnotationMirror annotationMirror =
+ retrieveAnnotationMirror(annotated, annotationName);
+ for (var entry : annotationMirror.getElementValues().entrySet()) {
+ if (entry.getKey().getSimpleName().contentEquals("value")) {
+ return entry.getValue().toString();
+ }
+ }
+ throw new RuntimeException("Annotation value() method not found: " +
+ annotationMirror.toString());
+ }
+
+ private AnnotationMirror retrieveAnnotationMirror(AnnotatedConstruct annotated,
+ String annotationName) {
+ for (AnnotationMirror annotationMirror : annotated.getAnnotationMirrors()) {
+ System.out.println(annotationMirror.getAnnotationType());
+ if (annotationMirror
+ .getAnnotationType()
+ .toString()
+ .equals(annotationName) ) {
+ return annotationMirror;
+ }
+ }
+ throw new RuntimeException("Annotation " + annotationName + " not found.");
+ }
+
+ private static int check(String expected, String actual) {
+ if (!expected.equals(actual)) {
+ System.err.printf("ERROR: Expected ''%s'';%ngot ''%s''.\n",
+ expected, actual);
+ return 1;
+ } else
+ return 0;
+ }
+
+ @ExpectedString(
+ "@MostlyPrimitive(c0='a', "+
+ "c1='\\'', " +
+ "b0=(byte)0x01, " +
+ "i0=1, " +
+ "i1=2, " +
+ "f0=1.0f, " +
+ "f1=0.0f/0.0f, " +
+ "d0=0.0, " +
+ "d1=1.0/0.0, " +
+ "l0=5L, " +
+ "l1=9223372036854775807L, " +
+ "l2=-9223372036854775808L, " +
+ "l3=-2147483648L, " +
+ "s0=\"Hello world.\", " +
+ "s1=\"a\\\"b\", " +
+ "class0=Obj[].class, " +
+ "classArray={Obj[].class})")
+ @MostlyPrimitive(
+ c0='a',
+ c1='\'',
+ b0=1,
+ i0=1,
+ i1=2,
+ f0=1.0f,
+ f1=Float.NaN,
+ d0=0.0,
+ d1=2.0/0.0,
+ l0=5,
+ l1=Long.MAX_VALUE,
+ l2=Long.MIN_VALUE,
+ l3=Integer.MIN_VALUE,
+ s0="Hello world.",
+ s1="a\"b",
+ class0=Obj[].class,
+ classArray={Obj[].class}
+ )
+ static class PrimHost{}
+
+ private int classyTest() {
+ int failures = 0;
+
+ TypeElement annotationHostElt =
+ Objects.requireNonNull(elements.getTypeElement("AnnotationToStringTest.AnnotationHost"));
+
+ for (VariableElement f : ElementFilter.fieldsIn(annotationHostElt.getEnclosedElements())) {
+ String expected = f.getAnnotation(ExpectedString.class).value();
+ Annotation a = f.getAnnotation(Classy.class);
+
+ System.out.println(a);
+ failures += check(expected, a.toString());
+
+ failures += check(expected,
+ retrieveAnnotationMirrorAsString(f, "Classy") );
+ }
+ return failures;
+ }
+
+ static class AnnotationHost {
+ @ExpectedString(
+ "@Classy(Obj.class)")
+ @Classy(Obj.class)
+ public int f0;
+
+ @ExpectedString(
+ "@Classy(Obj[].class)")
+ @Classy(Obj[].class)
+ public int f1;
+
+ @ExpectedString(
+ "@Classy(Obj[][].class)")
+ @Classy(Obj[][].class)
+ public int f2;
+
+ @ExpectedString(
+ "@Classy(Obj[][][].class)")
+ @Classy(Obj[][][].class)
+ public int f3;
+
+ @ExpectedString(
+ "@Classy(int.class)")
+ @Classy(int.class)
+ public int f4;
+
+ @ExpectedString(
+ "@Classy(int[][][].class)")
+ @Classy(int[][][].class)
+ public int f5;
+ }
+
+ /**
+ * Each field should have two annotations, the first being
+ * @ExpectedString and the second the annotation under test.
+ */
+ private int arrayAnnotationTest() {
+ int failures = 0;
+
+ TypeElement arrayAnnotationHostElt =
+ Objects.requireNonNull(elements
+ .getTypeElement("AnnotationToStringTest.ArrayAnnotationHost"));
+
+ for (VariableElement f :
+ ElementFilter.fieldsIn(arrayAnnotationHostElt.getEnclosedElements())) {
+ var annotations = f.getAnnotationMirrors();
+ // String expected = retrieveAnnotationMirrorValue(f, "ExpectedString");
+ String expected = f.getAnnotation(ExpectedString.class).value();
+
+ // Problem with
+ // Need a de-quote method...
+ // expected = expected.substring(1, expected.length() - 1);
+
+ failures +=
+ check(expected,
+ annotations.get(1).toString());
+
+ // Get the array-valued annotation as an annotation
+ failures +=
+ check(expected,
+ retrieveAnnotationMirrorAsString(f,
+ annotations.get(1)
+ .getAnnotationType().toString()));
+ }
+ return failures;
+ }
+
+ static class ArrayAnnotationHost {
+ @ExpectedString(
+ "@BooleanArray({true, false, true})")
+ @BooleanArray({true, false, true})
+ public boolean[] f0;
+
+ @ExpectedString(
+ "@FloatArray({3.0f, 4.0f, 0.0f/0.0f, -1.0f/0.0f, 1.0f/0.0f})")
+ @FloatArray({3.0f, 4.0f, Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY})
+ public float[] f1;
+
+ @ExpectedString(
+ "@DoubleArray({1.0, 2.0, 0.0/0.0, 1.0/0.0, -1.0/0.0})")
+ @DoubleArray({1.0, 2.0, Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,})
+ public double[] f2;
+
+
+ @ExpectedString(
+ "@ByteArray({(byte)0x0a, (byte)0x0b, (byte)0x0c})")
+ @ByteArray({10, 11, 12})
+ public byte[] f3;
+
+ @ExpectedString(
+ "@ShortArray({0, 4, 5})")
+ @ShortArray({0, 4, 5})
+ public short[] f4;
+
+ @ExpectedString(
+ "@CharArray({'a', 'b', 'c', '\\''})")
+ @CharArray({'a', 'b', 'c', '\''})
+ public char[] f5;
+
+ @ExpectedString(
+ "@IntArray({1})")
+ @IntArray({1})
+ public int[] f6;
+
+ @ExpectedString(
+ "@LongArray({-9223372036854775808L, -2147483649L, -2147483648L," +
+ " -2147483647L, 2147483648L, 9223372036854775807L})")
+ @LongArray({Long.MIN_VALUE, Integer.MIN_VALUE-1L, Integer.MIN_VALUE,
+ -Integer.MAX_VALUE, Integer.MAX_VALUE+1L, Long.MAX_VALUE})
+ public long[] f7;
+
+ @ExpectedString(
+ "@StringArray({\"A\", \"B\", \"C\", \"\\\"Quote\\\"\"})")
+ @StringArray({"A", "B", "C", "\"Quote\""})
+ public String[] f8;
+
+ @ExpectedString(
+ "@ClassArray({int.class, Obj[].class})")
+ @ClassArray({int.class, Obj[].class})
+ public Class<?>[] f9;
+
+ @ExpectedString(
+ "@EnumArray({SOURCE})")
+ @EnumArray({RetentionPolicy.SOURCE})
+ public RetentionPolicy[] f10;
+ }
+}
+
+// ------------ Supporting types ------------
+
+class Obj {}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface ExpectedString {
+ String value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface Classy {
+ Class<?> value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface BooleanArray {
+ boolean[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface FloatArray {
+ float[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface DoubleArray {
+ double[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface ByteArray {
+ byte[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface ShortArray {
+ short[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface CharArray {
+ char[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface IntArray {
+ int[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface LongArray {
+ long[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface ClassArray {
+ Class<?>[] value() default {int.class, Obj[].class};
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface StringArray {
+ String[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface EnumArray {
+ RetentionPolicy[] value();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface MostlyPrimitive {
+ char c0();
+ char c1();
+ byte b0();
+ int i0();
+ int i1();
+ float f0();
+ float f1();
+ double d0();
+ double d1();
+ long l0();
+ long l1();
+ long l2();
+ long l3();
+ String s0();
+ String s1();
+ Class<?> class0();
+ Class<?>[] classArray();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/processing/model/element/TestExecutableReceiverType.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2013, 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 8222369
+ * @summary Test behavior of ExecutableElement.getReceiverType
+ * @library /tools/javac/lib
+ * @build JavacTestingAbstractProcessor TestExecutableReceiverType
+ * @compile -processor TestExecutableReceiverType -proc:only TestExecutableReceiverType.java
+ */
+
+import java.util.Set;
+import java.lang.annotation.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.lang.model.type.*;
+import javax.lang.model.util.*;
+import static javax.tools.Diagnostic.Kind.*;
+
+/**
+ * Verify that proper type objects are returned from ExecutableElement.getReceiverType
+ */
+public class TestExecutableReceiverType extends JavacTestingAbstractProcessor {
+ public boolean process(Set<? extends TypeElement> annotations,
+ RoundEnvironment roundEnv) {
+ if (!roundEnv.processingOver()) {
+ int count = 0;
+ count += testType(elements.getTypeElement("MethodHost"));
+ count += testType(elements.getTypeElement("MethodHost.Nested"));
+
+ if (count == 0) {
+ messager.printMessage(ERROR, "No executables visited.");
+ }
+ }
+ return true;
+ }
+
+ int testType(TypeElement typeElement) {
+ int count = 0;
+ for (ExecutableElement executable :
+ ElementFilter.constructorsIn(typeElement.getEnclosedElements())) {
+ count += testExecutable(executable);
+ }
+
+ for (ExecutableElement executable :
+ ElementFilter.methodsIn(typeElement.getEnclosedElements())) {
+ count += testExecutable(executable);
+ }
+ return count;
+ }
+
+ int testExecutable(ExecutableElement executable) {
+ TypeKind expectedKind = executable.getAnnotation(ReceiverTypeKind.class).value();
+ TypeKind actualKind = executable.getReceiverType().getKind();
+
+ if (actualKind != expectedKind) {
+ messager.printMessage(ERROR,
+ String.format("Unexpected TypeKind on receiver of %s:" +
+ " expected %s\t got %s%n",
+ executable, expectedKind, actualKind));
+ }
+ return 1;
+ }
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface ReceiverTypeKind {
+ TypeKind value();
+}
+
+/**
+ * Class to host various methods, etc.
+ */
+class MethodHost {
+ @ReceiverTypeKind(TypeKind.NONE)
+ public MethodHost() {}
+
+ @ReceiverTypeKind(TypeKind.NONE)
+ public static void foo() {return;}
+
+ @ReceiverTypeKind(TypeKind.NONE)
+ public void bar() {return;}
+
+ @ReceiverTypeKind(TypeKind.DECLARED)
+ public void quux(MethodHost this) {return;}
+
+ private class Nested {
+ @ReceiverTypeKind(TypeKind.DECLARED)
+ public Nested(MethodHost MethodHost.this) {}
+ }
+}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -37,11 +37,11 @@
@ExpectedBase(
value = Bar.class,
- getAnnotation = "@Bar(value=0)",
+ getAnnotation = "@Bar(0)",
getAnnotationsByType = {
- "@Bar(value=0)",
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(0)",
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@Bar(0)",
@@ -57,19 +57,19 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
@Bar(value = 0)
@BarContainer(value = {@Bar(value = 1), @Bar(value = 2)})
class MixRepeatableAndOfficialContainerBasicTest {
@ExpectedBase(
value = Bar.class,
- getAnnotation = "@Bar(value=0)",
+ getAnnotation = "@Bar(0)",
getAnnotationsByType = {
- "@Bar(value=0)",
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(0)",
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@Bar(0)",
@@ -85,19 +85,19 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
@Bar(value = 0)
@BarContainer(value = {@Bar(value = 1), @Bar(value = 2)})
int testField = 0;
@ExpectedBase(
value = Bar.class,
- getAnnotation = "@Bar(value=0)",
+ getAnnotation = "@Bar(0)",
getAnnotationsByType = {
- "@Bar(value=0)",
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(0)",
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@Bar(0)",
@@ -113,8 +113,8 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
@Bar(value = 0)
@BarContainer(value = {@Bar(value = 1), @Bar(value = 2)})
void testMethod() {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedA1Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedA1Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,15 +35,15 @@
* MixRepeatableAndOfficialContainerInheritedA1Test.java
*/
-@BarInherited(value = 0)
+@BarInherited(0)
class E {}
@ExpectedBase(
value = BarInherited.class,
- getAnnotation = "@BarInherited(value=0)",
+ getAnnotation = "@BarInherited(0)",
getAnnotationsByType = {
- "@BarInherited(value=1)",
- "@BarInherited(value=2)"
+ "@BarInherited(1)",
+ "@BarInherited(2)"
},
getAllAnnotationMirrors = {
"@BarInherited(0)",
@@ -59,8 +59,8 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
-@BarInheritedContainer(value = {@BarInherited(value = 1), @BarInherited(value = 2)})
+ + "{@BarInherited(1), @BarInherited(2)})"})
+@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})
class MixRepeatableAndOfficialContainerInheritedA1Test extends E {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedA2Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedA2Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,16 +35,16 @@
* MixRepeatableAndOfficialContainerInheritedA2Test.java
*/
-@BarInherited(value = 0)
+@BarInherited(0)
class N {}
@ExpectedBase(
value = BarInherited.class,
- getAnnotation = "@BarInherited(value=3)",
+ getAnnotation = "@BarInherited(3)",
getAnnotationsByType = {
- "@BarInherited(value=1)",
- "@BarInherited(value=2)",
- "@BarInherited(value=3)"
+ "@BarInherited(1)",
+ "@BarInherited(2)",
+ "@BarInherited(3)"
},
getAllAnnotationMirrors = {
"@BarInherited(3)",
@@ -61,9 +61,9 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
-@BarInheritedContainer(value = {@BarInherited(value = 1), @BarInherited(value = 2)})
-@BarInherited(value = 3)
+ + "{@BarInherited(1), @BarInherited(2)})"})
+@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})
+@BarInherited(3)
class MixRepeatableAndOfficialContainerInheritedA2Test extends N {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedB1Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedB1Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,8 +40,8 @@
@ExpectedBase(
value = BarInherited.class,
- getAnnotation = "@BarInherited(value=0)",
- getAnnotationsByType = {"@BarInherited(value=0)"},
+ getAnnotation = "@BarInherited(0)",
+ getAnnotationsByType = {"@BarInherited(0)"},
getAllAnnotationMirrors = {
"@BarInherited(0)",
"@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})",
@@ -56,8 +56,8 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
-@BarInherited(value = 0)
+ + "{@BarInherited(1), @BarInherited(2)})"})
+@BarInherited(0)
class MixRepeatableAndOfficialContainerInheritedB1Test extends M {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedB2Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedB2Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,14 +35,14 @@
* MixRepeatableAndOfficialContainerInheritedB2Test.java
*/
-@BarInheritedContainer(value = {@BarInherited(value = 1), @BarInherited(value = 2)})
-@BarInherited(value = 3)
+@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})
+@BarInherited(3)
class H {}
@ExpectedBase(
value = BarInherited.class,
- getAnnotation = "@BarInherited(value=0)",
- getAnnotationsByType = {"@BarInherited(value=0)"},
+ getAnnotation = "@BarInherited(0)",
+ getAnnotationsByType = {"@BarInherited(0)"},
getAllAnnotationMirrors = {
"@BarInherited(0)",
"@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})",
@@ -57,8 +57,8 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
-@BarInherited(value = 0)
+ + "{@BarInherited(1), @BarInherited(2)})"})
+@BarInherited(0)
class MixRepeatableAndOfficialContainerInheritedB2Test extends H {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -36,8 +36,8 @@
@ExpectedBase(
value = Foo.class,
- getAnnotation = "@Foo(value=0)",
- getAnnotationsByType = {"@Foo(value=0)"},
+ getAnnotation = "@Foo(0)",
+ getAnnotationsByType = {"@Foo(0)"},
getAllAnnotationMirrors = {
"@Foo(0)",
"@UnofficialContainer({@Foo(1), @Foo(2)})",
@@ -53,17 +53,17 @@
@ExpectedContainer(
value = UnofficialContainer.class,
getAnnotation = "@UnofficialContainer("
- + "value={@Foo(value=1), @Foo(value=2)})",
+ + "{@Foo(1), @Foo(2)})",
getAnnotationsByType = {"@UnofficialContainer("
- + "value={@Foo(value=1), @Foo(value=2)})"})
-@Foo(value = 0)
-@UnofficialContainer(value = {@Foo(value = 1), @Foo(value = 2)})
+ + "{@Foo(1), @Foo(2)})"})
+@Foo(0)
+@UnofficialContainer({@Foo(1), @Foo(2)})
class MixSingularAndUnofficialContainerBasicTest {
@ExpectedBase(
value = Foo.class,
- getAnnotation = "@Foo(value=0)",
- getAnnotationsByType = {"@Foo(value=0)"},
+ getAnnotation = "@Foo(0)",
+ getAnnotationsByType = {"@Foo(0)"},
getAllAnnotationMirrors = {
"@Foo(0)",
"@UnofficialContainer({@Foo(1), @Foo(2)})",
@@ -79,17 +79,17 @@
@ExpectedContainer(
value = UnofficialContainer.class,
getAnnotation = "@UnofficialContainer("
- + "value={@Foo(value=1), @Foo(value=2)})",
+ + "{@Foo(1), @Foo(2)})",
getAnnotationsByType = {"@UnofficialContainer("
- + "value={@Foo(value=1), @Foo(value=2)})"})
- @Foo(value = 0)
- @UnofficialContainer(value = {@Foo(value = 1), @Foo(value = 2)})
+ + "{@Foo(1), @Foo(2)})"})
+ @Foo(0)
+ @UnofficialContainer({@Foo(1), @Foo(2)})
int testField = 0;
@ExpectedBase(
value = Foo.class,
- getAnnotation = "@Foo(value=0)",
- getAnnotationsByType = {"@Foo(value=0)"},
+ getAnnotation = "@Foo(0)",
+ getAnnotationsByType = {"@Foo(0)"},
getAllAnnotationMirrors = {
"@Foo(0)",
"@UnofficialContainer({@Foo(1), @Foo(2)})",
@@ -105,10 +105,10 @@
@ExpectedContainer(
value = UnofficialContainer.class,
getAnnotation = "@UnofficialContainer("
- + "value={@Foo(value=1), @Foo(value=2)})",
+ + "{@Foo(1), @Foo(2)})",
getAnnotationsByType = {"@UnofficialContainer("
- + "value={@Foo(value=1), @Foo(value=2)})"})
- @Foo(value = 0)
- @UnofficialContainer(value = {@Foo(value = 1), @Foo(value = 2)})
+ + "{@Foo(1), @Foo(2)})"})
+ @Foo(0)
+ @UnofficialContainer({@Foo(1), @Foo(2)})
void testMethod() {}
}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedA1Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedA1Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,13 +35,13 @@
* MixSingularAndUnofficialContainerInheritedA1Test.java
*/
-@FooInherited(value = 0)
+@FooInherited(0)
class L {}
@ExpectedBase(
value = FooInherited.class,
- getAnnotation = "@FooInherited(value=0)",
- getAnnotationsByType = {"@FooInherited(value=0)"},
+ getAnnotation = "@FooInherited(0)",
+ getAnnotationsByType = {"@FooInherited(0)"},
getAllAnnotationMirrors = {
"@FooInherited(0)",
"@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})",
@@ -56,8 +56,8 @@
@ExpectedContainer(
value = UnofficialInheritedContainer.class,
getAnnotation = "@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})",
+ + "{@FooInherited(1), @FooInherited(2)})",
getAnnotationsByType = {"@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})"})
-@UnofficialInheritedContainer(value = {@FooInherited(value = 1), @FooInherited(value = 2)})
+ + "{@FooInherited(1), @FooInherited(2)})"})
+@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})
class MixSingularAndUnofficialContainerInheritedA1Test extends L {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedA2Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedA2Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,13 +35,13 @@
* MixSingularAndUnofficialContainerInheritedA2Test.java
*/
-@FooInherited(value = 0)
+@FooInherited(0)
class K {}
@ExpectedBase(
value = FooInherited.class,
- getAnnotation = "@FooInherited(value=3)",
- getAnnotationsByType = {"@FooInherited(value=3)"},
+ getAnnotation = "@FooInherited(3)",
+ getAnnotationsByType = {"@FooInherited(3)"},
getAllAnnotationMirrors = {
"@FooInherited(3)",
"@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})",
@@ -57,9 +57,9 @@
@ExpectedContainer(
value = UnofficialInheritedContainer.class,
getAnnotation = "@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})",
+ + "{@FooInherited(1), @FooInherited(2)})",
getAnnotationsByType = {"@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})"})
-@UnofficialInheritedContainer(value = {@FooInherited(value = 1), @FooInherited(value = 2)})
-@FooInherited(value = 3)
+ + "{@FooInherited(1), @FooInherited(2)})"})
+@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})
+@FooInherited(3)
class MixSingularAndUnofficialContainerInheritedA2Test extends K {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedB1Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedB1Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,13 +35,13 @@
* MixSingularAndUnofficialContainerInheritedB1Test.java
*/
-@UnofficialInheritedContainer(value = {@FooInherited(value = 1),@FooInherited(value = 2)})
+@UnofficialInheritedContainer({@FooInherited(1),@FooInherited(2)})
class J {}
@ExpectedBase(
value = FooInherited.class,
- getAnnotation = "@FooInherited(value=0)",
- getAnnotationsByType = {"@FooInherited(value=0)"},
+ getAnnotation = "@FooInherited(0)",
+ getAnnotationsByType = {"@FooInherited(0)"},
getAllAnnotationMirrors = {
"@FooInherited(0)",
"@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})",
@@ -56,8 +56,8 @@
@ExpectedContainer(
value = UnofficialInheritedContainer.class,
getAnnotation = "@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})",
+ + "{@FooInherited(1), @FooInherited(2)})",
getAnnotationsByType = {"@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})"})
-@FooInherited(value = 0)
+ + "{@FooInherited(1), @FooInherited(2)})"})
+@FooInherited(0)
class MixSingularAndUnofficialContainerInheritedB1Test extends J {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedB2Test.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedB2Test.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,14 +35,14 @@
* MixSingularAndUnofficialContainerInheritedB2Test.java
*/
-@UnofficialInheritedContainer(value = {@FooInherited(value = 1), @FooInherited(value = 2)})
-@FooInherited(value = 3)
+@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})
+@FooInherited(3)
class G {}
@ExpectedBase(
value = FooInherited.class,
- getAnnotation = "@FooInherited(value=0)",
- getAnnotationsByType = {"@FooInherited(value=0)"},
+ getAnnotation = "@FooInherited(0)",
+ getAnnotationsByType = {"@FooInherited(0)"},
getAllAnnotationMirrors = {
"@FooInherited(0)",
"@UnofficialInheritedContainer({@FooInherited(1), @FooInherited(2)})",
@@ -57,8 +57,8 @@
@ExpectedContainer(
value = UnofficialInheritedContainer.class,
getAnnotation = "@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})",
+ + "{@FooInherited(1), @FooInherited(2)})",
getAnnotationsByType = {"@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})"})
-@FooInherited(value = 0)
+ + "{@FooInherited(1), @FooInherited(2)})"})
+@FooInherited(0)
class MixSingularAndUnofficialContainerInheritedB2Test extends G{}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/OfficialContainerBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/OfficialContainerBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -38,8 +38,8 @@
value = Bar.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@BarContainer({@Bar(1), @Bar(2)})",
@@ -53,17 +53,17 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
-@BarContainer(value = {@Bar(value = 1), @Bar(value = 2)})
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
+@BarContainer({@Bar(1), @Bar(2)})
class OfficialContainerBasicTest {
@ExpectedBase(
value = Bar.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@BarContainer({@Bar(1), @Bar(2)})",
@@ -77,17 +77,17 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
- @BarContainer(value = {@Bar(value = 1), @Bar(value = 2)})
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
+ @BarContainer({@Bar(1), @Bar(2)})
int testField = 0;
@ExpectedBase(
value = Bar.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@BarContainer({@Bar(1), @Bar(2)})",
@@ -101,8 +101,8 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
- @BarContainer(value = {@Bar(value = 1), @Bar(value = 2)})
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
+ @BarContainer({@Bar(1), @Bar(2)})
void testMethod() {}
}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/OfficialContainerInheritedTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/OfficialContainerInheritedTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,15 +34,15 @@
* @compile -processor ElementRepAnnoTester -proc:only OfficialContainerInheritedTest.java
*/
-@BarInheritedContainer(value = {@BarInherited(value = 1), @BarInherited(value = 2)})
+@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})
class D {}
@ExpectedBase(
value = BarInherited.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@BarInherited(value=1)",
- "@BarInherited(value=2)"
+ "@BarInherited(1)",
+ "@BarInherited(2)"
},
getAllAnnotationMirrors = {
"@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})",
@@ -56,7 +56,7 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
+ + "{@BarInherited(1), @BarInherited(2)})"})
class OfficialContainerInheritedTest extends D {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -38,8 +38,8 @@
value = Bar.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@BarContainer({@Bar(1), @Bar(2)})",
@@ -53,18 +53,18 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
-@Bar(value = 1)
-@Bar(value = 2)
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
+@Bar(1)
+@Bar(2)
class RepeatableBasicTest {
@ExpectedBase(
value = Bar.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@BarContainer({@Bar(1), @Bar(2)})",
@@ -78,18 +78,18 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
- @Bar(value = 1)
- @Bar(value = 2)
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
+ @Bar(1)
+ @Bar(2)
int testField = 0;
@ExpectedBase(
value = Bar.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@Bar(value=1)",
- "@Bar(value=2)"
+ "@Bar(1)",
+ "@Bar(2)"
},
getAllAnnotationMirrors = {
"@BarContainer({@Bar(1), @Bar(2)})",
@@ -103,9 +103,9 @@
})
@ExpectedContainer(
value = BarContainer.class,
- getAnnotation = "@BarContainer(value={@Bar(value=1), @Bar(value=2)})",
- getAnnotationsByType = {"@BarContainer(value={@Bar(value=1), @Bar(value=2)})"})
- @Bar(value = 1)
- @Bar(value = 2)
+ getAnnotation = "@BarContainer({@Bar(1), @Bar(2)})",
+ getAnnotationsByType = {"@BarContainer({@Bar(1), @Bar(2)})"})
+ @Bar(1)
+ @Bar(2)
void testMethod() {}
}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableInheritedTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableInheritedTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,16 +34,16 @@
* @compile -processor ElementRepAnnoTester -proc:only RepeatableInheritedTest.java
*/
-@BarInherited(value = 1)
-@BarInherited(value = 2)
+@BarInherited(1)
+@BarInherited(2)
class I {}
@ExpectedBase(
value = BarInherited.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@BarInherited(value=1)",
- "@BarInherited(value=2)"
+ "@BarInherited(1)",
+ "@BarInherited(2)"
},
getAllAnnotationMirrors = {
"@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})",
@@ -57,7 +57,7 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
+ + "{@BarInherited(1), @BarInherited(2)})"})
class RepeatableInheritedTest extends I {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOfficialContainerBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOfficialContainerBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -52,10 +52,10 @@
value = BarContainer.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@BarContainer(value={@Bar(value=1)})",
- "@BarContainer(value={@Bar(value=2)})"})
-@BarContainer(value = {@Bar(value = 1)})
-@BarContainer(value = {@Bar(value = 2)})
+ "@BarContainer({@Bar(1)})",
+ "@BarContainer({@Bar(2)})"})
+@BarContainer({@Bar(1)})
+@BarContainer({@Bar(2)})
class RepeatableOfficialContainerBasicTest {
@ExpectedBase(
@@ -76,10 +76,10 @@
value = BarContainer.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@BarContainer(value={@Bar(value=1)})",
- "@BarContainer(value={@Bar(value=2)})"})
- @BarContainer(value = {@Bar(value = 1)})
- @BarContainer(value = {@Bar(value = 2)})
+ "@BarContainer({@Bar(1)})",
+ "@BarContainer({@Bar(2)})"})
+ @BarContainer({@Bar(1)})
+ @BarContainer({@Bar(2)})
int testField = 0;
@ExpectedBase(
@@ -100,9 +100,9 @@
value = BarContainer.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@BarContainer(value={@Bar(value=1)})",
- "@BarContainer(value={@Bar(value=2)})"})
- @BarContainer(value = {@Bar(value = 1)})
- @BarContainer(value = {@Bar(value = 2)})
+ "@BarContainer({@Bar(1)})",
+ "@BarContainer({@Bar(2)})"})
+ @BarContainer({@Bar(1)})
+ @BarContainer({@Bar(2)})
void testMethod() {}
}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOfficialContainerInheritedTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOfficialContainerInheritedTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,16 +35,16 @@
* RepeatableOfficialContainerInheritedTest.java
*/
-@BarInheritedContainer(value = {@BarInherited(value = 1)})
-@BarInheritedContainer(value = {@BarInherited(value = 2)})
+@BarInheritedContainer({@BarInherited(1)})
+@BarInheritedContainer({@BarInherited(2)})
class O {}
@ExpectedBase(
value = BarInheritedContainer.class,
getAnnotation = "null",
getAnnotationsByType = {
- "@BarInheritedContainer(value={@BarInherited(value=1)})",
- "@BarInheritedContainer(value={@BarInherited(value=2)})"
+ "@BarInheritedContainer({@BarInherited(1)})",
+ "@BarInheritedContainer({@BarInherited(2)})"
},
getAllAnnotationMirrors = {
"@BarInheritedContainerContainer("
@@ -60,9 +60,9 @@
@ExpectedContainer(
value = BarInheritedContainerContainer.class,
getAnnotation = "@BarInheritedContainerContainer("
- + "value={@BarInheritedContainer(value={@BarInherited(value=1)}),"
- + " @BarInheritedContainer(value={@BarInherited(value=2)})})",
+ + "{@BarInheritedContainer({@BarInherited(1)}),"
+ + " @BarInheritedContainer({@BarInherited(2)})})",
getAnnotationsByType = {"@BarInheritedContainerContainer("
- + "value={@BarInheritedContainer(value={@BarInherited(value=1)}),"
- + " @BarInheritedContainer(value={@BarInherited(value=2)})})"})
+ + "{@BarInheritedContainer({@BarInherited(1)}),"
+ + " @BarInheritedContainer({@BarInherited(2)})})"})
class RepeatableOfficialContainerInheritedTest extends O {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOverrideATest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOverrideATest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,14 +34,14 @@
* @compile -processor ElementRepAnnoTester -proc:only RepeatableOverrideATest.java
*/
-@BarInherited(value = 1)
-@BarInherited(value = 2)
+@BarInherited(1)
+@BarInherited(2)
class B {}
@ExpectedBase(
value = BarInherited.class,
- getAnnotation = "@BarInherited(value=3)",
- getAnnotationsByType = {"@BarInherited(value=3)"},
+ getAnnotation = "@BarInherited(3)",
+ getAnnotationsByType = {"@BarInherited(3)"},
getAllAnnotationMirrors = {
"@BarInherited(3)",
"@BarInheritedContainer({@BarInherited(1), @BarInherited(2)})",
@@ -56,8 +56,8 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
-@BarInherited(value = 3)
+ + "{@BarInherited(1), @BarInherited(2)})"})
+@BarInherited(3)
class RepeatableOverrideATest extends B {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOverrideBTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOverrideBTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,15 +34,15 @@
* @compile -processor ElementRepAnnoTester -proc:only RepeatableOverrideBTest.java
*/
-@BarInherited(value = 0)
+@BarInherited(0)
class C {}
@ExpectedBase(
value = BarInherited.class,
- getAnnotation = "@BarInherited(value=0)",
+ getAnnotation = "@BarInherited(0)",
getAnnotationsByType = {
- "@BarInherited(value=1)",
- "@BarInherited(value=2)"
+ "@BarInherited(1)",
+ "@BarInherited(2)"
},
getAllAnnotationMirrors = {
"@BarInherited(0)",
@@ -58,9 +58,9 @@
@ExpectedContainer(
value = BarInheritedContainer.class,
getAnnotation = "@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})",
+ + "{@BarInherited(1), @BarInherited(2)})",
getAnnotationsByType = {"@BarInheritedContainer("
- + "value={@BarInherited(value=1), @BarInherited(value=2)})"})
-@BarInherited(value = 1)
-@BarInherited(value = 2)
+ + "{@BarInherited(1), @BarInherited(2)})"})
+@BarInherited(1)
+@BarInherited(2)
class RepeatableOverrideBTest extends C {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -36,8 +36,8 @@
@ExpectedBase(
value = Foo.class,
- getAnnotation = "@Foo(value=0)",
- getAnnotationsByType = {"@Foo(value=0)"},
+ getAnnotation = "@Foo(0)",
+ getAnnotationsByType = {"@Foo(0)"},
getAllAnnotationMirrors = {
"@Foo(0)",
"ExpectedBase",
@@ -49,13 +49,13 @@
"ExpectedContainer"
})
@ExpectedContainer
-@Foo(value = 0)
+@Foo(0)
public class SingularBasicTest {
@ExpectedBase(
value = Foo.class,
- getAnnotation = "@Foo(value=0)",
- getAnnotationsByType = {"@Foo(value=0)"},
+ getAnnotation = "@Foo(0)",
+ getAnnotationsByType = {"@Foo(0)"},
getAllAnnotationMirrors = {
"@Foo(0)",
"ExpectedBase",
@@ -67,13 +67,13 @@
"ExpectedContainer"
})
@ExpectedContainer
- @Foo(value = 0)
+ @Foo(0)
int testField = 0;
@ExpectedBase(
value = Foo.class,
- getAnnotation = "@Foo(value=0)",
- getAnnotationsByType = {"@Foo(value=0)"},
+ getAnnotation = "@Foo(0)",
+ getAnnotationsByType = {"@Foo(0)"},
getAllAnnotationMirrors = {
"@Foo(0)",
"ExpectedBase",
@@ -85,7 +85,7 @@
"ExpectedContainer"
})
@ExpectedContainer
- @Foo(value = 0)
+ @Foo(0)
void testMethod() {
}
}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularInheritedATest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularInheritedATest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,13 +34,13 @@
* @compile -processor ElementRepAnnoTester -proc:only SingularInheritedATest.java
*/
-@FooInherited(value = 0)
+@FooInherited(0)
class A {}
@ExpectedBase(
value = FooInherited.class,
- getAnnotation = "@FooInherited(value=0)",
- getAnnotationsByType = {"@FooInherited(value=0)"},
+ getAnnotation = "@FooInherited(0)",
+ getAnnotationsByType = {"@FooInherited(0)"},
getAllAnnotationMirrors = {
"@FooInherited(0)",
"ExpectedBase",
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularInheritedBTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularInheritedBTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,13 +34,13 @@
* @compile -processor ElementRepAnnoTester -proc:only SingularInheritedBTest.java
*/
-@FooInherited(value = 1)
+@FooInherited(1)
class P {}
@ExpectedBase(
value = FooInherited.class,
- getAnnotation = "@FooInherited(value=2)",
- getAnnotationsByType = {"@FooInherited(value=2)"},
+ getAnnotation = "@FooInherited(2)",
+ getAnnotationsByType = {"@FooInherited(2)"},
getAllAnnotationMirrors = {
"@FooInherited(2)",
"ExpectedBase",
@@ -55,5 +55,5 @@
value = UnofficialInheritedContainer.class,
getAnnotation = "null",
getAnnotationsByType = {})
-@FooInherited(value = 2)
+@FooInherited(2)
class SingularInheritedBTest extends P {}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/UnofficialContainerBasicTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/UnofficialContainerBasicTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,9 +50,9 @@
})
@ExpectedContainer(
value = UnofficialContainer.class,
- getAnnotation = "@UnofficialContainer(value={@Foo(value=1), @Foo(value=2)})",
- getAnnotationsByType = {"@UnofficialContainer(value={@Foo(value=1), @Foo(value=2)})"})
-@UnofficialContainer(value = {@Foo(value = 1), @Foo(value = 2)})
+ getAnnotation = "@UnofficialContainer({@Foo(1), @Foo(2)})",
+ getAnnotationsByType = {"@UnofficialContainer({@Foo(1), @Foo(2)})"})
+@UnofficialContainer({@Foo(1), @Foo(2)})
class UnofficialContainerBasicTest {
@ExpectedBase(
@@ -71,9 +71,9 @@
})
@ExpectedContainer(
value = UnofficialContainer.class,
- getAnnotation = "@UnofficialContainer(value={@Foo(value=1), @Foo(value=2)})",
- getAnnotationsByType = {"@UnofficialContainer(value={@Foo(value=1), @Foo(value=2)})"})
- @UnofficialContainer(value = {@Foo(value = 1), @Foo(value = 2)})
+ getAnnotation = "@UnofficialContainer({@Foo(1), @Foo(2)})",
+ getAnnotationsByType = {"@UnofficialContainer({@Foo(1), @Foo(2)})"})
+ @UnofficialContainer({@Foo(1), @Foo(2)})
int testField = 0;
@ExpectedBase(
@@ -92,8 +92,8 @@
})
@ExpectedContainer(
value = UnofficialContainer.class,
- getAnnotation = "@UnofficialContainer(value={@Foo(value=1), @Foo(value=2)})",
- getAnnotationsByType = {"@UnofficialContainer(value={@Foo(value=1), @Foo(value=2)})"})
- @UnofficialContainer(value = {@Foo(value = 1), @Foo(value = 2)})
+ getAnnotation = "@UnofficialContainer({@Foo(1), @Foo(2)})",
+ getAnnotationsByType = {"@UnofficialContainer({@Foo(1), @Foo(2)})"})
+ @UnofficialContainer({@Foo(1), @Foo(2)})
void testMethod() {}
}
--- a/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/UnofficialContainerInheritedTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/processing/model/element/repeatingAnnotations/UnofficialContainerInheritedTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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,7 +35,7 @@
* UnofficialContainerInheritedTest.java
*/
-@UnofficialInheritedContainer(value = {@FooInherited(value = 1),@FooInherited(value = 2)})
+@UnofficialInheritedContainer({@FooInherited(1),@FooInherited(2)})
class F {}
@ExpectedBase(
@@ -54,7 +54,7 @@
@ExpectedContainer(
value = UnofficialInheritedContainer.class,
getAnnotation = "@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})",
+ + "{@FooInherited(1), @FooInherited(2)})",
getAnnotationsByType = {"@UnofficialInheritedContainer("
- + "value={@FooInherited(value=1), @FooInherited(value=2)})"})
+ + "{@FooInherited(1), @FooInherited(2)})"})
class UnofficialContainerInheritedTest extends F {}
--- a/test/langtools/tools/javac/profiles/ProfileOptionTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/profiles/ProfileOptionTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -152,6 +152,7 @@
case JDK1_11:
case JDK1_12:
case JDK1_13:
+ case JDK1_14:
if (p == Profile.DEFAULT)
break;
if (ise == null)
--- a/test/langtools/tools/javac/switchexpr/WarnWrongYieldTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/switchexpr/WarnWrongYieldTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -25,7 +25,7 @@
* @test
* @bug 8223305
* @summary Verify correct warnings w.r.t. yield
- * @compile/ref=WarnWrongYieldTest.out -source 13 -XDrawDiagnostics -XDshould-stop.at=ATTR WarnWrongYieldTest.java
+ * @compile/ref=WarnWrongYieldTest.out -source ${jdk.version} -XDrawDiagnostics -XDshould-stop.at=ATTR WarnWrongYieldTest.java
*/
package t;
--- a/test/langtools/tools/javac/sym/ElementStructureTest.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/sym/ElementStructureTest.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -128,16 +128,16 @@
(byte) 0xB7, (byte) 0x52, (byte) 0x0F, (byte) 0x68
};
static final byte[] hash7 = new byte[] {
- (byte) 0x6B, (byte) 0xA2, (byte) 0xE9, (byte) 0x8E,
- (byte) 0xE1, (byte) 0x8E, (byte) 0x60, (byte) 0xBE,
- (byte) 0x54, (byte) 0xC4, (byte) 0x33, (byte) 0x3E,
- (byte) 0x0C, (byte) 0x2D, (byte) 0x3A, (byte) 0x7C
+ (byte) 0x3C, (byte) 0x03, (byte) 0xEA, (byte) 0x4A,
+ (byte) 0x62, (byte) 0xD2, (byte) 0x18, (byte) 0xE5,
+ (byte) 0xA5, (byte) 0xC2, (byte) 0xB7, (byte) 0x85,
+ (byte) 0x90, (byte) 0xFA, (byte) 0x98, (byte) 0xCD
};
static final byte[] hash8 = new byte[] {
- (byte) 0x44, (byte) 0x77, (byte) 0x6E, (byte) 0x52,
- (byte) 0x2B, (byte) 0x16, (byte) 0xD3, (byte) 0x3C,
- (byte) 0x78, (byte) 0x75, (byte) 0xF5, (byte) 0x0A,
- (byte) 0x01, (byte) 0x24, (byte) 0xBD, (byte) 0x2A
+ (byte) 0x0B, (byte) 0xEB, (byte) 0x16, (byte) 0xF5,
+ (byte) 0x7F, (byte) 0xB0, (byte) 0x18, (byte) 0xF1,
+ (byte) 0x78, (byte) 0x11, (byte) 0xED, (byte) 0x30,
+ (byte) 0x19, (byte) 0x4D, (byte) 0xDE, (byte) 0x8A
};
final static Map<String, byte[]> version2Hash = new HashMap<>();
@@ -409,7 +409,7 @@
for (VariableElement param : e.getParameters()) {
visit(param, p);
}
- out.write(String.valueOf(e.getReceiverType()));
+ out.write(String.valueOf(typeMirrorTranslate(e.getReceiverType())));
write(e.getReturnType());
out.write(e.getSimpleName().toString());
writeTypes(e.getThrownTypes());
@@ -425,6 +425,18 @@
return null;
}
+ /**
+ * Original implementation of getReceiverType returned null
+ * for many cases where TypeKind.NONE was specified; translate
+ * back to null to compare against old hashes.
+ */
+ private TypeMirror typeMirrorTranslate(TypeMirror type) {
+ if (type.getKind() == javax.lang.model.type.TypeKind.NONE)
+ return null;
+ else
+ return type;
+ }
+
@Override
public Void visitPackage(PackageElement e, Void p) {
List<Element> types = new ArrayList<>(e.getEnclosedElements());
--- a/test/langtools/tools/javac/versions/Versions.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javac/versions/Versions.java Fri Jun 21 09:05:45 2019 -0700
@@ -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
@@ -69,9 +69,9 @@
Set.of("1.2", "1.3", "1.4", "1.5", "1.6");
public static final Set<String> VALID_SOURCES =
- Set.of("1.7", "1.8", "1.9", "1.10", "11", "12", "13");
+ Set.of("1.7", "1.8", "1.9", "1.10", "11", "12", "13", "14");
- public static final String LATEST_MAJOR_VERSION = "57.0";
+ public static final String LATEST_MAJOR_VERSION = "58.0";
static enum SourceTarget {
SEVEN(true, "51.0", "7", Versions::checksrc17),
@@ -80,7 +80,8 @@
TEN(true, "54.0", "10", Versions::checksrc110),
ELEVEN(false, "55.0", "11", Versions::checksrc111),
TWELVE(false, "56.0", "12", Versions::checksrc112),
- THIRTEEN(false, "57.0", "13", Versions::checksrc113);
+ THIRTEEN(false, "57.0", "13", Versions::checksrc113),
+ FOURTEEN(false, "58.0", "14", Versions::checksrc114);
private final boolean dotOne;
private final String classFileVer;
@@ -299,6 +300,11 @@
checksrc111(args);
}
+ protected void checksrc114(String... args) {
+ printargs("checksrc114", args);
+ checksrc111(args);
+ }
+
protected void pass(String... args) {
printargs("pass", args);
--- a/test/langtools/tools/javap/T4884240.java Tue Jun 18 21:40:50 2019 -0700
+++ b/test/langtools/tools/javap/T4884240.java Fri Jun 21 09:05:45 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2016, 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,7 +23,7 @@
/*
* @test
- * @bug 4884240
+ * @bug 4884240 8225748
* @summary additional option required for javap
* @modules jdk.jdeps/com.sun.tools.javap
*/
@@ -47,7 +47,7 @@
if (lines.length < 3
|| !lines[0].trim().startsWith("Classfile")
|| !lines[1].trim().startsWith("Last modified")
- || !lines[2].trim().startsWith("MD5")) {
+ || !lines[2].trim().startsWith("SHA-256")) {
System.out.println(sw);
throw new Exception("unexpected output");
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/micro/org/openjdk/bench/java/util/HashMapToArray.java Fri Jun 21 09:05:45 2019 -0700
@@ -0,0 +1,95 @@
+/*
+ * 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.java.util;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
+@Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
+@Fork(3)
+@State(Scope.Thread)
+public class HashMapToArray {
+
+ @Param({"0", "1", "10", "1000", "100000"})
+ public int size;
+
+ @Param({"HashMap", "LinkedHashMap"})
+ public String mapType;
+
+ private Map<Integer, Integer> map;
+
+ @Setup
+ public void setup() {
+ switch (mapType) {
+ case "HashMap":
+ map = new HashMap<>();
+ break;
+ case "LinkedHashMap":
+ map = new LinkedHashMap<>();
+ break;
+ default:
+ throw new IllegalStateException();
+ }
+ for (int i = 0; i < size; i++) {
+ map.put(i, i * i);
+ }
+ }
+
+ @Benchmark
+ public Object[] testKeySetToArray() {
+ return map.keySet().toArray();
+ }
+
+ @Benchmark
+ public Object[] testKeySetToArrayTyped() {
+ return map.keySet().toArray(new Integer[0]);
+ }
+
+ @Benchmark
+ public Object[] testValuesToArray() {
+ return map.values().toArray();
+ }
+
+ @Benchmark
+ public Object[] testValuesToArrayTyped() {
+ return map.values().toArray(new Integer[0]);
+ }
+}