# HG changeset patch # User prr # Date 1561133145 25200 # Node ID f72de31c98cdea8357c23a3e998eedbee889d376 # Parent fe5395d16475d0408d9dfe0736d02725284d0349# Parent e764228f71dce19f487ec1b8c677d7560d49674b Merge diff -r fe5395d16475 -r f72de31c98cd .hgtags --- 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 diff -r fe5395d16475 -r f72de31c98cd doc/building.md --- 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 diff -r fe5395d16475 -r f72de31c98cd make/Docs.gmk --- 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 =
$(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 = # 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)),
$(DRAFT_TEXT)
) + # 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 := \ + => $(SPECS_TOP) ; \ => $(SPECS_BOTTOM_$($m_$f_NOF_SUBDIRS)), \ )) \ $(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 := \ - => $(SPECS_BOTTOM_1), \ -)) -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 := \ + => $(SPECS_TOP) ; \ + => $(SPECS_BOTTOM_1), \ + )) + 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 := \ - => $(SPECS_BOTTOM_0), \ -)) -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 := \ + => $(SPECS_TOP) ; \ + => $(SPECS_BOTTOM_0), \ + )) + 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 diff -r fe5395d16475 -r f72de31c98cd make/InitSupport.gmk --- 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. diff -r fe5395d16475 -r f72de31c98cd make/Main.gmk --- 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 diff -r fe5395d16475 -r f72de31c98cd make/autoconf/bootcycle-spec.gmk.in --- 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)) diff -r fe5395d16475 -r f72de31c98cd make/autoconf/build-aux/config.guess --- 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 diff -r fe5395d16475 -r f72de31c98cd make/autoconf/hotspot.m4 --- 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" diff -r fe5395d16475 -r f72de31c98cd make/autoconf/version-numbers --- 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 diff -r fe5395d16475 -r f72de31c98cd make/conf/jib-profiles.js --- 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", }, diff -r fe5395d16475 -r f72de31c98cd make/data/docs-resources/resources/jdk-default.css --- 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%; +} diff -r fe5395d16475 -r f72de31c98cd make/data/jdwp/jdwp.spec --- 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 " - "Java Native Inteface Specification" + "Java Native Interface Specification" "

"For primitive classes " "the returned signature is the signature of the corresponding primitive " diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.base-D.sym.txt --- /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; +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/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 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; +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/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 ;M::Ljava/lang/invoke/TypeDescriptor$OfMethod;>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; +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; +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/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/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/lang/Iterable;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 Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; + +class name java/security/PrivilegedExceptionAction +header extends java/lang/Object flags 601 signature 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 Ljava/lang/Object;Ljava/util/Map; +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; +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 Ljava/lang/Object;Ljava/util/concurrent/Future;Ljava/util/concurrent/CompletionStage; +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 Ljava/util/AbstractMap;Ljava/util/concurrent/ConcurrentMap;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 Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Set;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 Ljava/lang/Object;Ljava/util/concurrent/Flow$Subscriber;Ljava/util/concurrent/Flow$Publisher; +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 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 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; +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; +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; +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") + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.compiler-D.sym.txt --- /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; +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 Ljavax/lang/model/util/AbstractAnnotationValueVisitor8; 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 Ljavax/lang/model/util/AbstractElementVisitor8; 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 Ljavax/lang/model/util/AbstractTypeVisitor8; 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 Ljavax/lang/model/util/ElementKindVisitor8; 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 Ljavax/lang/model/util/ElementScanner8; 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 Ljavax/lang/model/util/SimpleAnnotationValueVisitor8; 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 Ljavax/lang/model/util/SimpleElementVisitor8; 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 Ljavax/lang/model/util/SimpleTypeVisitor8; 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 Ljavax/lang/model/util/TypeKindVisitor8; 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") + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.desktop-D.sym.txt --- /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/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 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 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 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 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; +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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.management-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.management.rmi-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.net.http-D.sym.txt --- /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; +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 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 Ljava/lang/Object;Ljava/util/concurrent/Flow$Subscriber;>; +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 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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.xml-D.sym.txt --- /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; + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/java.xml.crypto-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/jdk.compiler-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/jdk.httpserver-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/jdk.javadoc-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/jdk.jlink-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/jdk.jshell-D.sym.txt --- /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 + diff -r fe5395d16475 -r f72de31c98cd make/data/symbols/symbols --- 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 diff -r fe5395d16475 -r f72de31c98cd make/jdk/src/classes/build/tools/generatecacerts/GenerateCacerts.java --- 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 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> 8); + passwdBytes[j++] = (byte)password[i]; + } + return passwdBytes; + } } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/aarch64.ad --- 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/assembler_aarch64.hpp --- 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp --- 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())); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp --- 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)); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/frame_aarch64.cpp --- 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()) diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp --- /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()]; +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp --- /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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad --- /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); +%} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp --- 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp --- 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) { diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/macroAssembler_aarch64_log.cpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/macroAssembler_aarch64_trig.cpp --- 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) {}"); { bind(TINY_X); if (isCos) { - fmovd(v0, 1.0d); + fmovd(v0, 1.0); } ret(lr); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/cpu/aarch64/vm_version_aarch64.cpp --- 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os/linux/perfMemory_linux.cpp --- 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/atomic_linux_aarch64.hpp --- 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 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; } }; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/copy_linux_aarch64.s --- 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] diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/gc/z/zArguments_linux_aarch64.cpp --- /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); +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.cpp --- /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 +#include +#include +#include +#include +#include +#include + +// +// 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; +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/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/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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.cpp --- /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 +#include + +// 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* 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* mountpoints) const { + ZArrayIterator iter(mountpoints); + for (char* mountpoint; iter.next(&mountpoint);) { + free(mountpoint); + } + mountpoints->clear(); +} + +char* ZBackingPath::find_preferred_mountpoint(const char* filesystem, + ZArray* mountpoints, + const char** preferred_mountpoints) const { + // Find preferred mount point + ZArrayIterator 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 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 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; +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/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/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* mountpoints) const; + void free_mountpoints(ZArray* mountpoints) const; + char* find_preferred_mountpoint(const char* filesystem, + ZArray* 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp --- /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(); +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/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/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 +// 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp --- /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 +#include +#include + +// +// 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)); +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_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.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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/asm/assembler.cpp --- 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(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(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(); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/classfile/classFileParser.cpp --- 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/classfile/systemDictionary.cpp --- 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(); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/classfile/verifier.cpp --- 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()); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/code/nmethod.cpp --- 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::oop_load(oop_addr_at(index)); } +oop nmethod::oop_at_phantom(int index) const { + if (index == 0) { + return NULL; + } + return NativeAccess::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. diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/code/nmethod.hpp --- 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"); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp --- 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 = diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp --- 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 (&_offset_array[left]), offset, num_cards); } // Variant of index_for that does not check the index for validity. diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/g1/g1CollectedHeap.cpp --- 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); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/g1/g1CollectedHeap.hpp --- 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/g1/g1CollectionSet.cpp --- 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shared/c2/barrierSetC2.hpp --- 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; }; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shared/collectedHeap.hpp --- 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shared/gcLocker.inline.hpp --- 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()) { diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp --- 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: diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp --- 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahConcurrentRoots.cpp --- /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; +} diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahConcurrentRoots.hpp --- /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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp --- 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(); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp --- 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_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 _jni_roots; + +public: + ShenandoahConcurrentRootsEvacUpdateTask() : + AbstractGangTask("Shenandoah Evacuate/Update Concurrent Roots Task") { + } + + void work(uint worker_id) { + ShenandoahEvacOOMScope oom; + ShenandoahEvacuateUpdateRootsClosure cl; + _jni_roots.oops_do(&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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp --- 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(); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp --- 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") \ diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp --- 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(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(&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(&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); + } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp --- 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 +class ShenandoahJNIHandleRoots { +private: + OopStorage::ParState _itr; public: ShenandoahJNIHandleRoots(); + + template + 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 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 class ShenandoahRootScanner : public ShenandoahRootProcessor { private: - ShenandoahSerialRoots _serial_roots; - ShenandoahJNIHandleRoots _jni_roots; - ShenandoahClassLoaderDataRoots _cld_roots; - ShenandoahThreadRoots _thread_roots; - ShenandoahCodeCacheRoots _code_roots; + ShenandoahSerialRoots _serial_roots; + ShenandoahThreadRoots _thread_roots; + ShenandoahCodeCacheRoots _code_roots; + ShenandoahJNIHandleRoots _jni_roots; + ShenandoahClassLoaderDataRoots _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 ShenandoahAllRootScanner; typedef ShenandoahRootScanner 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 _jni_roots; + ShenandoahClassLoaderDataRoots _cld_roots; + ShenandoahCodeCacheRoots _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 _jni_roots; + ShenandoahClassLoaderDataRoots _cld_roots; + ShenandoahThreadRoots _thread_roots; + ShenandoahWeakRoots _weak_roots; + ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots _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 _jni_roots; + ShenandoahClassLoaderDataRoots _cld_roots; + ShenandoahThreadRoots _thread_roots; + ShenandoahWeakRoots _weak_roots; + ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots _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 _code_roots; + ShenandoahSerialRoots _serial_roots; + ShenandoahJNIHandleRoots _jni_roots; + ShenandoahClassLoaderDataRoots _cld_roots; + ShenandoahThreadRoots _thread_roots; + ShenandoahWeakRoots _weak_roots; + ShenandoahStringDedupRoots _dedup_roots; + ShenandoahCodeCacheRoots _code_roots; public: ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp --- 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 +ShenandoahJNIHandleRoots::ShenandoahJNIHandleRoots() : + _itr(JNIHandles::global_handles()) { +} + +template +template +void ShenandoahJNIHandleRoots::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 void ShenandoahWeakRoots::oops_do(IsAlive* is_alive, KeepAlive* keep_alive, uint worker_id) { _task.work(worker_id, is_alive, keep_alive); } +template +ShenandoahClassLoaderDataRoots::ShenandoahClassLoaderDataRoots() { + if (!SINGLE_THREADED) { + ClassLoaderDataGraph::clear_claimed_marks(); + } +} + +template +void ShenandoahClassLoaderDataRoots::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 +void ShenandoahClassLoaderDataRoots::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 ShenandoahCodeCacheRoots::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 -void ShenandoahRootScanner::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 void ShenandoahRootScanner::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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp --- 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 + 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahVerifier.hpp --- 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); }; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.cpp --- 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; diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.hpp --- 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(); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/jvmci/jvmciCompilerToVM.cpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp --- 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) { diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/jvmci/jvmciRuntime.cpp --- 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(); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/jvmci/jvmciRuntime.hpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/jvmci/vmStructs_jvmci.cpp --- 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) \ diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/opto/escape.cpp --- 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 diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/opto/library_call.cpp --- 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. diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/opto/type.cpp --- 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: { diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/prims/jvmtiEnvBase.cpp --- 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); diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/runtime/arguments.cpp --- 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"); } diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/runtime/globals.hpp --- 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") \ diff -r fe5395d16475 -r f72de31c98cd src/hotspot/share/runtime/vframe.inline.hpp --- 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) { diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/com/sun/java/util/jar/pack/Constants.java --- 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 = diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/lang/Integer.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/lang/Long.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java --- 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; diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/net/AbstractPlainSocketImpl.java --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/net/Inet6Address.java --- 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() { diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/security/cert/X509CertSelector.java --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/time/format/DateTimeFormatter.java --- 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'. *

- * Offset O: 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}. + * Offset O: 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}. *

* Offset Z: This formats the offset based on the number of pattern * letters. One, two or three letters outputs the hour and minute, without a diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/util/HashMap.java --- 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 type of array elements + * @return an array ready to be filled and returned from {@code toArray()} method. + */ + @SuppressWarnings("unchecked") + final 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 type of array elements + * @return supplied array + */ + T[] keysToArray(T[] a) { + Object[] r = a; + Node[] tab; + int idx = 0; + if (size > 0 && (tab = table) != null) { + for (Node 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 type of array elements + * @return supplied array + */ + T[] valuesToArray(T[] a) { + Object[] r = a; + Node[] tab; + int idx = 0; + if (size > 0 && (tab = table) != null) { + for (Node e : tab) { + for (; e != null; e = e.next) { + r[idx++] = e.value; + } + } + } + return a; + } + final class KeySet extends AbstractSet { public final int size() { return size; } public final void clear() { HashMap.this.clear(); } @@ -922,6 +990,15 @@ public final Spliterator spliterator() { return new KeySpliterator<>(HashMap.this, 0, -1, 0, 0); } + + public Object[] toArray() { + return keysToArray(new Object[size]); + } + + public T[] toArray(T[] a) { + return keysToArray(prepareArray(a)); + } + public final void forEach(Consumer action) { Node[] tab; if (action == null) @@ -970,6 +1047,15 @@ public final Spliterator spliterator() { return new ValueSpliterator<>(HashMap.this, 0, -1, 0, 0); } + + public Object[] toArray() { + return valuesToArray(new Object[size]); + } + + public T[] toArray(T[] a) { + return valuesToArray(prepareArray(a)); + } + public final void forEach(Consumer action) { Node[] tab; if (action == null) diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/util/HashSet.java --- 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 spliterator() { return new HashMap.KeySpliterator<>(map, 0, -1, 0, 0); } + + @Override + public Object[] toArray() { + return map.keysToArray(new Object[map.size()]); + } + + @Override + public T[] toArray(T[] a) { + return map.keysToArray(map.prepareArray(a)); + } } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/java/util/LinkedHashMap.java --- 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[] keysToArray(T[] a) { + Object[] r = a; + int idx = 0; + for (LinkedHashMap.Entry e = head; e != null; e = e.after) { + r[idx++] = e.key; + } + return a; + } + + @Override + final T[] valuesToArray(T[] a) { + Object[] r = a; + int idx = 0; + for (LinkedHashMap.Entry e = head; e != null; e = e.after) { + r[idx++] = e.value; + } + return a; + } + final class LinkedKeySet extends AbstractSet { 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[] toArray(T[] a) { + return keysToArray(prepareArray(a)); + } + public final void forEach(Consumer 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[] toArray(T[] a) { + return valuesToArray(prepareArray(a)); + } + public final void forEach(Consumer action) { if (action == null) throw new NullPointerException(); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/jdk/internal/module/ModuleInfo.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java --- 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)); } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java --- 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. diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/net/util/IPAddressUtil.java --- 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 + 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> pa = () -> NetworkInterface.networkInterfaces() + .flatMap(NetworkInterface::inetAddresses) + .filter(a -> (a instanceof Inet6Address) + && address.equals(a) + && ((Inet6Address) a).getScopeId() != 0) + .collect(Collectors.toList()); + List 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; + } + } } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java --- 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()) { diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/nio/ch/Net.java --- 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); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java --- 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 e : memberValues.entrySet()) { + Set> entries = memberValues.entrySet(); + boolean loneValue = entries.size() == 1; + for (Map.Entry 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 convert(byte[] values) { List list = new ArrayList<>(values.length); for (byte b : values) - list.add(Byte.toString(b)); + list.add(toSourceString(b)); return list.stream(); } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java --- 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. * diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/security/ssl/SignatureScheme.java --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/security/ssl/X509Authentication.java --- 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); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/security/tools/keytool/Main.java --- 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 e = keyStore.aliases(); - e.hasMoreElements(); ) { - String alias = e.nextElement(); + List 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")); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/classes/sun/security/util/CurveDB.java --- 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); } } diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/native/libnet/Inet6Address.c --- 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;"); diff -r fe5395d16475 -r f72de31c98cd src/java.base/share/native/libnet/net_util.h --- 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; diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/classes/java/net/PlainDatagramSocketImpl.java --- 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; diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/native/libjava/ProcessImpl_md.c --- 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; diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/native/libnet/Inet6AddressImpl.c --- 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 diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c --- 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); diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/native/libnet/PlainSocketImpl.c --- 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 || diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/native/libnet/net_util_md.c --- 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; iaddr; - 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; ilocaladdr, 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 :- * diff -r fe5395d16475 -r f72de31c98cd src/java.base/unix/native/libnet/net_util_md.h --- 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__ diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/classes/java/net/DualStackPlainDatagramSocketImpl.java --- 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) diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java --- 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; diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/native/libnet/Inet4AddressImpl.c --- 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; diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c --- 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]; diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/native/libnet/net_util_md.c --- 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); } diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/native/libnio/ch/Iocp.c --- 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)); } } diff -r fe5395d16475 -r f72de31c98cd src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c --- 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)); } } diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/SourceVersion.java --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java --- 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}. * *

WARNING: 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 extends AbstractAnnotationValueVisitor8 { /** diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java --- 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}. * *

WARNING: 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 extends AbstractElementVisitor8 { /** * Constructor for concrete subclasses to call. diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java --- 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}. * *

WARNING: 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 extends AbstractTypeVisitor8 { /** * Constructor for concrete subclasses to call. diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java --- 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} Xyz that may have more than one @@ -80,7 +80,7 @@ * @since 9 * @spec JPMS */ -@SupportedSourceVersion(RELEASE_13) +@SupportedSourceVersion(RELEASE_14) public class ElementKindVisitor9 extends ElementKindVisitor8 { /** * Constructor for concrete subclasses; uses {@code null} for the diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java --- 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 visitXyz 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 extends ElementScanner8 { /** * Constructor for concrete subclasses; uses {@code null} for the diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java --- 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 extends SimpleAnnotationValueVisitor8 { /** * Constructor for concrete subclasses; uses {@code null} for the diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java --- 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 extends SimpleElementVisitor8 { /** * Constructor for concrete subclasses; uses {@code null} for the diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitor9.java --- 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 extends SimpleTypeVisitor8 { /** * Constructor for concrete subclasses; uses {@code null} for the diff -r fe5395d16475 -r f72de31c98cd src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java --- 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} Xyz that may have more than one @@ -77,7 +77,7 @@ * @see TypeKindVisitor8 * @since 9 */ -@SupportedSourceVersion(RELEASE_13) +@SupportedSourceVersion(RELEASE_14) public class TypeKindVisitor9 extends TypeKindVisitor8 { /** * Constructor for concrete subclasses to call; uses {@code null} diff -r fe5395d16475 -r f72de31c98cd src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java --- 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 diff -r fe5395d16475 -r f72de31c98cd src/java.net.http/share/classes/java/net/http/HttpResponse.java --- 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 diff -r fe5395d16475 -r f72de31c98cd src/java.net.http/share/classes/jdk/internal/net/http/Http1HeaderParser.java --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/java.net.http/share/classes/jdk/internal/net/http/LineSubscriberAdapter.java --- 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 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 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 { diff -r fe5395d16475 -r f72de31c98cd src/java.net.http/share/classes/jdk/internal/net/http/PullPublisher.java --- 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); } diff -r fe5395d16475 -r f72de31c98cd src/java.net.http/share/classes/jdk/internal/net/http/RequestPublishers.java --- 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 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 publisher = - new PullPublisher<>(() -> new StreamIterator(is)); + final InputStream fis = is; + PullPublisher publisher; + if (t == null) { + publisher = new PullPublisher<>(() -> new StreamIterator(fis)); + } else { + publisher = new PullPublisher<>(null, t); + } publisher.subscribe(subscriber); } diff -r fe5395d16475 -r f72de31c98cd src/java.net.http/share/classes/jdk/internal/net/http/ResponseSubscribers.java --- 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 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 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 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 diff -r fe5395d16475 -r f72de31c98cd src/java.sql.rowset/share/classes/com/sun/rowset/providers/RIXMLProvider.java --- 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 * WebRowSet XML schema definition available at *

- *     http://java.sun.com/xml/ns/jdbc/webrowset.xsd
+ *     http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd
  * 
* The RIXMLProvider implementation has a synchronization level of * GRADE_NONE, which means that it does no checking at all for conflicts. It diff -r fe5395d16475 -r f72de31c98cd src/java.sql.rowset/share/classes/javax/sql/rowset/WebRowSet.java --- 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: * * It describes the standard XML document format required when describing a diff -r fe5395d16475 -r f72de31c98cd src/java.sql.rowset/share/classes/javax/sql/rowset/package-info.java --- 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 @@ * SyncFactory in the form of SyncProvider * implementations. In order to ensure well formed XML usage, a standard generic XML * Schema is defined and published at - * - * http://java.sun.com/xml/ns/jdbc/webrowset.xsd. + * + * http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd. * *
  • FilteredRowSet - A * FilteredRowSet object provides filtering functionality in a programmatic @@ -154,7 +154,8 @@ * RowSet objects exist in a connected or disconnected environment. * The BaseRowSet abstract class provides any RowSet implementation * with its base functionality, including property manipulation and event notification - * that is fully compliant with JavaBeans + * that is fully compliant with + * JavaBeans * component requirements. As an example, all implementations provided in the * reference implementations (contained in the com.sun.rowset package) use * the BaseRowSet class as a basis for their implementations. diff -r fe5395d16475 -r f72de31c98cd src/java.sql/share/classes/java/sql/ConnectionBuilder.java --- 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(); * } * diff -r fe5395d16475 -r f72de31c98cd src/java.sql/share/classes/javax/sql/PooledConnectionBuilder.java --- 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(); * } * diff -r fe5395d16475 -r f72de31c98cd src/java.sql/share/classes/javax/sql/XAConnectionBuilder.java --- 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(); * } * diff -r fe5395d16475 -r f72de31c98cd src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java --- 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; + } + } } } diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/code/Attribute.java --- 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 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() { diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java --- 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 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; } diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java --- 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) diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java --- 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; diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Profile.java --- 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. */ 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 diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java --- 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 targetKey = new Context.Key<>(); diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java --- 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)) { diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java --- 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() { diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java --- 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. */ @SupportedAnnotationTypes("*") -@SupportedSourceVersion(SourceVersion.RELEASE_13) +@SupportedSourceVersion(SourceVersion.RELEASE_14) public class PrintingProcessor extends AbstractProcessor { PrintWriter writer; diff -r fe5395d16475 -r f72de31c98cd src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties --- 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=\ diff -r fe5395d16475 -r f72de31c98cd src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_general.c --- 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 #include #include +#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; } diff -r fe5395d16475 -r f72de31c98cd src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_sign.c --- 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"); } diff -r fe5395d16475 -r f72de31c98cd src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CSignature.java --- 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; diff -r fe5395d16475 -r f72de31c98cd src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c --- 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); diff -r fe5395d16475 -r f72de31c98cd src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java --- 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)); } diff -r fe5395d16475 -r f72de31c98cd src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeap.java --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeapRegion.java --- 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 { diff -r fe5395d16475 -r f72de31c98cd src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java --- 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); diff -r fe5395d16475 -r f72de31c98cd src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/Classfile.java --- 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 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; /** diff -r fe5395d16475 -r f72de31c98cd src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java --- 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, diff -r fe5395d16475 -r f72de31c98cd src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css --- 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; } diff -r fe5395d16475 -r f72de31c98cd src/jdk.jcmd/linux/classes/sun/tools/ProcessHelper.java --- 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 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"); + } + } diff -r fe5395d16475 -r f72de31c98cd src/jdk.jdeps/share/classes/com/sun/tools/javap/JavapTask.java --- 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); } diff -r fe5395d16475 -r f72de31c98cd src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap.properties --- 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=\ diff -r fe5395d16475 -r f72de31c98cd src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java --- 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 diff -r fe5395d16475 -r f72de31c98cd src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/DCmdDump.java --- 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())); } } diff -r fe5395d16475 -r f72de31c98cd src/jdk.jshell/share/classes/jdk/jshell/Corraller.java --- 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 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 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 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 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 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); } } diff -r fe5395d16475 -r f72de31c98cd src/jdk.jshell/share/classes/jdk/jshell/Eval.java --- 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 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); diff -r fe5395d16475 -r f72de31c98cd src/jdk.jshell/share/classes/jdk/jshell/GeneralWrap.java --- 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 { diff -r fe5395d16475 -r f72de31c98cd src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java --- 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 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 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() { @@ -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); } diff -r fe5395d16475 -r f72de31c98cd src/jdk.jshell/share/classes/jdk/jshell/Wrap.java --- 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); + } } diff -r fe5395d16475 -r f72de31c98cd src/jdk.rmic/share/classes/sun/tools/java/RuntimeConstants.java --- 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; diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/ProblemList-aot.txt --- /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 diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/ProblemList-graal.txt --- 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 diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/ProblemList.txt --- 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 diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/compiler/compilercontrol/share/scenario/Command.java --- 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", ""), diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/compiler/testlibrary/rtm/libXAbortProvoker.c --- 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; } diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/runtime/8007320/ConstMethodTest.java --- 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)); diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java --- 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): diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/runtime/classFileParserBug/EmptyUnqName.jasm --- /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 "":"()V" stack 1 locals 1 { + aload_0; + invokespecial Method java/lang/Object."":"()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 diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/runtime/classFileParserBug/TestEmptyUnqName.java --- /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()); + } + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/hotspot/jtreg/runtime/verifier/TestSigParse.java --- 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); } } diff -r fe5395d16475 -r f72de31c98cd test/jdk/ProblemList-aot.txt --- 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 diff -r fe5395d16475 -r f72de31c98cd test/jdk/ProblemList-graal.txt --- 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 diff -r fe5395d16475 -r f72de31c98cd test/jdk/ProblemList.txt --- 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 diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/lang/annotation/AnnotationToStringTest.java --- 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(); } diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/lang/annotation/ParameterAnnotations.java --- 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)); } diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/lang/annotation/TestConstructorParameterAnnotations.java --- 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

    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 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

    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 StaticNestedClass4(@MarkerAnnotation(4) P parameter1, diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/lang/annotation/typeAnnotations/TestConstructorParameterTypeAnnotations.java --- 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

    NestedClass3(@MarkerTypeAnnotation(3) P parameter1, @@ -156,7 +156,7 @@ @ExpectedGetParameterAnnotations("[[], [], []]") @ExpectedParameterTypeAnnotations({ "null", - "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=4)", + "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(4)", "null"}) public class NestedClass4 { public 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

    StaticNestedClass3(@MarkerTypeAnnotation(3) P parameter1, @@ -196,7 +196,7 @@ @ExpectedGetParameterAnnotations("[[], []]") @ExpectedParameterTypeAnnotations({ - "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(value=4)", + "@TestConstructorParameterTypeAnnotations$MarkerTypeAnnotation(4)", "null"}) public static class StaticNestedClass4 { public StaticNestedClass4(@MarkerTypeAnnotation(4) P parameter1, diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/lang/annotation/typeAnnotations/TestObjectMethods.java --- 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()); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/lang/module/ClassFileVersionsTest.java --- 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 }; } diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/AuthNPETest.java --- 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(); } } diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B4678055.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B4759514.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B4769350.java --- 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 @@ } } } - diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B4921848.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B4933582.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B4962064.java --- 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); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B6870935.java --- 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"); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/B8034170.java --- 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 (); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/BasicTest.java --- 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 (); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/BasicTest3.java --- 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 (); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/BasicTest4.java --- 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 (); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Authenticator/Deadlock.java --- 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; diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/CookieHandler/CookieHandlerTest.java --- 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 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(); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/CookieHandler/CookieManagerTest.java --- 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(); } diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/CookieHandler/EmptyCookieHeader.java --- 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); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/CookieHandler/LocalHostCookie.java --- 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 @@ } } } - diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/Inet6Address/Scoping.java --- /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 { + public void accept(T t) throws Exception; + } + + static List> 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 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 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"); + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/MulticastSocket/PromiscuousIPv6.java --- /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 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); + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/httpclient/BodySubscribersTest.java --- /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 NPE = NullPointerException.class; + + // Supplier of BodySubscriber, with a descriptive name + static class BSSupplier implements Supplier> { + private final Supplier> supplier; + private final String name; + private BSSupplier(Supplier> supplier, String name) { + this.supplier = supplier; + this.name = name; + } + static BSSupplier create(String name, Supplier> 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 { + @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> { + @Override public void onSubscribe(Flow.Subscription subscription) { } + @Override public void onNext(List item) { fail(); } + @Override public void onError(Throwable throwable) { fail(); } + @Override public void onComplete() { fail(); } + } + + @DataProvider(name = "bodySubscriberSuppliers") + public Object[][] bodySubscriberSuppliers() { ; + List>> 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> 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> 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); + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/httpclient/RelayingPublishers.java --- /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 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 s = new CompletableSubscriber<>(); + pub.subscribe(s); + assertEquals(s.future().join().getClass(), FileNotFoundException.class); + } + + @Test + public void ofByteArrays() { + List bytes = new ArrayList<>(); + bytes.add(null); + BodyPublisher pub = BodyPublishers.ofByteArrays(bytes); + CompletableSubscriber s = new CompletableSubscriber<>(); + pub.subscribe(s); + assertEquals(s.future().join().getClass(), NullPointerException.class); + } + + static class CompletableSubscriber implements Flow.Subscriber { + + final CompletableFuture 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 future() { + return f.copy(); + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/Http1HeaderParserTest.java --- 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); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/net/ipv6tests/B6521014.java --- 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(); } diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/nio/channels/DatagramChannel/PromiscuousIPv6.java --- /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 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); + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/security/KeyAgreement/KeyAgreementTest.java --- 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 * 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[]{}); diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java --- 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 */ diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/util/HashMap/ToArray.java --- /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 > void checkToArray(String message, T[] expected, Collection 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 > void checkToTypedArray(String message, T[] expected, T[] inputArray, + Collection 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 > void checkToObjectArray(String message, T[] expected, + Collection 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 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 keys = new ArrayList<>(); + List 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 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 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); + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/java/util/zip/ZipFile/MultiThreadedReadTest.java --- 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 } } diff -r fe5395d16475 -r f72de31c98cd test/jdk/javax/net/ssl/SSLSocket/Tls13PacketSize.java --- 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(); diff -r fe5395d16475 -r f72de31c98cd test/jdk/jdk/jfr/jcmd/TestJcmdDumpWithFileName.java --- /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 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 stream = Files.find(Path.of("."), 1, (p, a) -> p.toString().endsWith(".jfr")); + try (stream) { + stream.forEach(p -> p.toFile().delete()); + } + } + +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/sun/security/lib/cacerts/VerifyCACerts.java --- 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 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) { diff -r fe5395d16475 -r f72de31c98cd test/jdk/sun/security/mscapi/NullKey.java --- /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 + } + } + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/sun/security/ssl/SSLSocketImpl/BlockedAsyncClose.java --- /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); + } + } + } +} + diff -r fe5395d16475 -r f72de31c98cd test/jdk/sun/security/ssl/SignatureScheme/Tls13NamedGroups.java --- /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; + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/sun/security/tools/keytool/ListOrder.java --- /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); + } +} diff -r fe5395d16475 -r f72de31c98cd test/jdk/sun/tools/jcmd/TestProcessHelper.java --- 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 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 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 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 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); } } } diff -r fe5395d16475 -r f72de31c98cd test/langtools/ProblemList.txt --- 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 ########################################################################### # diff -r fe5395d16475 -r f72de31c98cd test/langtools/jdk/jshell/ClassesTest.java --- 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()"); } diff -r fe5395d16475 -r f72de31c98cd test/langtools/jdk/jshell/ExceptionsTest.java --- 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()); } } } diff -r fe5395d16475 -r f72de31c98cd test/langtools/jdk/jshell/KullaTesting.java --- 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 expected, Set notExpected) { List 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)); } diff -r fe5395d16475 -r f72de31c98cd test/langtools/jdk/jshell/WrapperTest.java --- 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 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); } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/T6942649.java --- 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"); } } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java --- 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 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 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 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 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 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 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 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 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 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 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 diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/annotations/typeAnnotations/classfile/AnonymousExtendsTest.java --- 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>() { }.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 +} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/api/T6395981.java --- 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; diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/classfiles/ClassVersionChecker.java --- 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; diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/diags/examples/InvalidYield.java --- 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() { diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/diags/examples/InvalidYieldWarning.java --- 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() { diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/diags/examples/NoSwitchExpression.java --- 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() { diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/diags/examples/NoSwitchExpressionQualify.java --- 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() { diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/lib/JavacTestingAbstractProcessor.java --- 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 extends AbstractAnnotationValueVisitor9 { /** @@ -121,7 +121,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static abstract class AbstractElementVisitor extends AbstractElementVisitor9 { /** * Constructor for concrete subclasses to call. @@ -131,7 +131,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static abstract class AbstractTypeVisitor extends AbstractTypeVisitor9 { /** * Constructor for concrete subclasses to call. @@ -141,7 +141,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static class ElementKindVisitor extends ElementKindVisitor9 { /** * Constructor for concrete subclasses; uses {@code null} for the @@ -162,7 +162,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static class ElementScanner extends ElementScanner9 { /** * Constructor for concrete subclasses; uses {@code null} for the @@ -181,7 +181,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static class SimpleAnnotationValueVisitor extends SimpleAnnotationValueVisitor9 { /** * Constructor for concrete subclasses; uses {@code null} for the @@ -202,7 +202,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static class SimpleElementVisitor extends SimpleElementVisitor9 { /** * Constructor for concrete subclasses; uses {@code null} for the @@ -223,7 +223,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static class SimpleTypeVisitor extends SimpleTypeVisitor9 { /** * Constructor for concrete subclasses; uses {@code null} for the @@ -244,7 +244,7 @@ } } - @SupportedSourceVersion(RELEASE_13) + @SupportedSourceVersion(RELEASE_14) public static class TypeKindVisitor extends TypeKindVisitor9 { /** * Constructor for concrete subclasses to call; uses {@code null} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/modules/AnnotationsOnModules.java --- 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"); diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out --- 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 diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/preview/classReaderTest/Client.preview.out --- 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 diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/messager/6388543/T6388543.out --- 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 diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/AnnotationToStringTest.java --- /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) + * + * These have separate but related implementations. + */ +public class AnnotationToStringTest extends JavacTestingAbstractProcessor { + public boolean process(Set annotations, + RoundEnvironment roundEnv) { + if (!roundEnv.processingOver()) { + + int failures = 0; + + TypeElement primHostElt = + Objects.requireNonNull(elements.getTypeElement("AnnotationToStringTest.PrimHost")); + + List 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(); +} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/TestExecutableReceiverType.java --- /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 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) {} + } +} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerBasicTest.java --- 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() {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedA1Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedA2Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedB1Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixRepeatableAndOfficialContainerInheritedB2Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerBasicTest.java --- 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() {} } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedA1Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedA2Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedB1Test.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/MixSingularAndUnofficialContainerInheritedB2Test.java --- 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{} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/OfficialContainerBasicTest.java --- 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() {} } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/OfficialContainerInheritedTest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableBasicTest.java --- 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() {} } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableInheritedTest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOfficialContainerBasicTest.java --- 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() {} } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOfficialContainerInheritedTest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOverrideATest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/RepeatableOverrideBTest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularBasicTest.java --- 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() { } } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularInheritedATest.java --- 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", diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/SingularInheritedBTest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/UnofficialContainerBasicTest.java --- 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() {} } diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/processing/model/element/repeatingAnnotations/UnofficialContainerInheritedTest.java --- 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 {} diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/profiles/ProfileOptionTest.java --- 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) diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/switchexpr/WarnWrongYieldTest.java --- 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; diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/sym/ElementStructureTest.java --- 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 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 types = new ArrayList<>(e.getEnclosedElements()); diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javac/versions/Versions.java --- 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 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); diff -r fe5395d16475 -r f72de31c98cd test/langtools/tools/javap/T4884240.java --- 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"); } diff -r fe5395d16475 -r f72de31c98cd test/micro/org/openjdk/bench/java/util/HashMapToArray.java --- /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 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]); + } +}