Merge niosocketimpl-branch
authoralanb
Fri, 22 Feb 2019 20:36:42 +0000
branchniosocketimpl-branch
changeset 57208 7a45c67e73d0
parent 57207 30695f27d7ea (current diff)
parent 53902 7a6fd71449e7 (diff)
child 57210 a67ea4f53e56
Merge
src/hotspot/share/gc/z/zStatTLAB.cpp
src/hotspot/share/gc/z/zStatTLAB.hpp
src/hotspot/share/oops/array.inline.hpp
src/java.desktop/share/classes/sun/awt/AWTSecurityManager.java
src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotatedType.java
src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationDesc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationTypeDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationTypeElementDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationValue.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ClassDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ConstructorDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/Doc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/DocErrorReporter.java
src/jdk.javadoc/share/classes/com/sun/javadoc/Doclet.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ExecutableMemberDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/FieldDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/LanguageVersion.java
src/jdk.javadoc/share/classes/com/sun/javadoc/MemberDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/MethodDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/PackageDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ParamTag.java
src/jdk.javadoc/share/classes/com/sun/javadoc/Parameter.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ParameterizedType.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ProgramElementDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/RootDoc.java
src/jdk.javadoc/share/classes/com/sun/javadoc/SeeTag.java
src/jdk.javadoc/share/classes/com/sun/javadoc/SerialFieldTag.java
src/jdk.javadoc/share/classes/com/sun/javadoc/SourcePosition.java
src/jdk.javadoc/share/classes/com/sun/javadoc/Tag.java
src/jdk.javadoc/share/classes/com/sun/javadoc/ThrowsTag.java
src/jdk.javadoc/share/classes/com/sun/javadoc/Type.java
src/jdk.javadoc/share/classes/com/sun/javadoc/TypeVariable.java
src/jdk.javadoc/share/classes/com/sun/javadoc/WildcardType.java
src/jdk.javadoc/share/classes/com/sun/javadoc/package-info.java
src/jdk.javadoc/share/classes/com/sun/tools/doclets/standard/Standard.java
src/jdk.javadoc/share/classes/com/sun/tools/doclets/standard/package-info.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/Main.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AbstractTypeImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotatedTypeImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationDescImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationTypeDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationTypeElementDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationValueImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ClassDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Comment.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ConstructorDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocEnv.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocLocale.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocletInvoker.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ExecutableMemberDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/FieldDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavaScriptScanner.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocClassFinder.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocEnter.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocMemberEnter.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocTodo.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocTool.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/MemberDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Messager.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/MethodDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ModifierFilter.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/PackageDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ParamTagImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ParameterImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ParameterizedTypeImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/PrimitiveType.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ProgramElementDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/RootDocImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SeeTagImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SerialFieldTagImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SerializedForm.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SourcePositionImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Start.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/TagImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ThrowsTagImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ToolOption.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/TypeMaker.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/TypeVariableImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/WildcardTypeImpl.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/package-info.java
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc.properties
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc_ja.properties
src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc_zh_CN.properties
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlConstants.java
test/jdk/ProblemList.txt
test/langtools/jdk/javadoc/tool/api/basic/GetTask_DocletClassTest.java
test/langtools/tools/javadoc/6176978/T6176978.java
test/langtools/tools/javadoc/6176978/X.java
test/langtools/tools/javadoc/6227454/Test.java
test/langtools/tools/javadoc/6942366/T6942366.java
test/langtools/tools/javadoc/6942366/Test.java
test/langtools/tools/javadoc/6942366/p/Base.java
test/langtools/tools/javadoc/6958836/Test.java
test/langtools/tools/javadoc/6964914/Error.java
test/langtools/tools/javadoc/6964914/JavacWarning.java
test/langtools/tools/javadoc/6964914/JavadocWarning.java
test/langtools/tools/javadoc/6964914/Test.java
test/langtools/tools/javadoc/6964914/TestStdDoclet.java
test/langtools/tools/javadoc/6964914/TestUserDoclet.java
test/langtools/tools/javadoc/8025693/Test.java
test/langtools/tools/javadoc/8147801/T8147801.java
test/langtools/tools/javadoc/8147801/jarsrc/lib/Lib1.java
test/langtools/tools/javadoc/8147801/jarsrc/lib/Lib2.java
test/langtools/tools/javadoc/8147801/p/Test.java
test/langtools/tools/javadoc/AddOpensTest.java
test/langtools/tools/javadoc/BadOptionsTest.java
test/langtools/tools/javadoc/BooleanConst.java
test/langtools/tools/javadoc/BreakIteratorWarning.java
test/langtools/tools/javadoc/CheckResourceKeys.java
test/langtools/tools/javadoc/CompletionError.java
test/langtools/tools/javadoc/EncodingTest.java
test/langtools/tools/javadoc/FlagsTooEarly.java
test/langtools/tools/javadoc/InlineTagsWithBraces.java
test/langtools/tools/javadoc/LangVers.java
test/langtools/tools/javadoc/MaxWarns.java
test/langtools/tools/javadoc/MethodLinks.java
test/langtools/tools/javadoc/NoStar.java
test/langtools/tools/javadoc/ReleaseOption.java
test/langtools/tools/javadoc/ReleaseOptionSource.java
test/langtools/tools/javadoc/T4994049/FileWithTabs.java
test/langtools/tools/javadoc/T4994049/T4994049.java
test/langtools/tools/javadoc/T6968833.java
test/langtools/tools/javadoc/XWerror.java
test/langtools/tools/javadoc/annotations/annotateMethodsFields/Main.java
test/langtools/tools/javadoc/annotations/annotateMethodsFields/expected.out
test/langtools/tools/javadoc/annotations/annotateMethodsFields/pkg1/A.java
test/langtools/tools/javadoc/annotations/annotateMethodsFields/pkg1/B.java
test/langtools/tools/javadoc/annotations/annotateMethodsFields/pkg1/E.java
test/langtools/tools/javadoc/annotations/annotatePackage/Main.java
test/langtools/tools/javadoc/annotations/annotatePackage/expected.out
test/langtools/tools/javadoc/annotations/annotatePackage/pkg1/A.java
test/langtools/tools/javadoc/annotations/annotatePackage/pkg1/package-info.java
test/langtools/tools/javadoc/annotations/annotatePackage/pkg1/package.html
test/langtools/tools/javadoc/annotations/annotatePackage/pkg2/B.java
test/langtools/tools/javadoc/annotations/annotatePackage/pkg2/package.html
test/langtools/tools/javadoc/annotations/annotateParams/Main.java
test/langtools/tools/javadoc/annotations/annotateParams/expected.out
test/langtools/tools/javadoc/annotations/annotateParams/pkg1/A.java
test/langtools/tools/javadoc/annotations/annotateParams/pkg1/C.java
test/langtools/tools/javadoc/annotations/badVals/Main.java
test/langtools/tools/javadoc/annotations/badVals/pkg1/A.java
test/langtools/tools/javadoc/annotations/defaults/Main.java
test/langtools/tools/javadoc/annotations/defaults/expected.out
test/langtools/tools/javadoc/annotations/defaults/pkg1/A.java
test/langtools/tools/javadoc/annotations/defaults/pkg1/B.java
test/langtools/tools/javadoc/annotations/elementTypes/Main.java
test/langtools/tools/javadoc/annotations/elementTypes/expected.out
test/langtools/tools/javadoc/annotations/elementTypes/pkg1/A.java
test/langtools/tools/javadoc/annotations/elementTypes/pkg1/B.java
test/langtools/tools/javadoc/annotations/missing/Main.java
test/langtools/tools/javadoc/annotations/missing/somepackage/MissingAnnotationClass.java
test/langtools/tools/javadoc/annotations/shortcuts/Main.java
test/langtools/tools/javadoc/annotations/shortcuts/expected.out
test/langtools/tools/javadoc/annotations/shortcuts/pkg1/A.java
test/langtools/tools/javadoc/annotations/shortcuts/pkg1/Array.java
test/langtools/tools/javadoc/annotations/shortcuts/pkg1/Marker.java
test/langtools/tools/javadoc/annotations/shortcuts/pkg1/Value.java
test/langtools/tools/javadoc/api/basic/APITest.java
test/langtools/tools/javadoc/api/basic/DocletPathTest.java
test/langtools/tools/javadoc/api/basic/DocumentationToolLocationTest.java
test/langtools/tools/javadoc/api/basic/GetSourceVersionsTest.java
test/langtools/tools/javadoc/api/basic/GetTask_DiagListenerTest.java
test/langtools/tools/javadoc/api/basic/GetTask_DocletClassTest.java
test/langtools/tools/javadoc/api/basic/GetTask_FileManagerTest.java
test/langtools/tools/javadoc/api/basic/GetTask_FileObjectsTest.java
test/langtools/tools/javadoc/api/basic/GetTask_OptionsTest.java
test/langtools/tools/javadoc/api/basic/GetTask_WriterTest.java
test/langtools/tools/javadoc/api/basic/Task_reuseTest.java
test/langtools/tools/javadoc/api/basic/pkg/C.java
test/langtools/tools/javadoc/api/basic/taglets/UnderlineTaglet.java
test/langtools/tools/javadoc/completionFailure/CompletionFailure.java
test/langtools/tools/javadoc/completionFailure/pkg/A.java
test/langtools/tools/javadoc/completionFailure/pkg/B.java
test/langtools/tools/javadoc/dupOk/DupOk.java
test/langtools/tools/javadoc/dupOk/sp1/p/A.java
test/langtools/tools/javadoc/dupOk/sp2/p/A.java
test/langtools/tools/javadoc/dupOk/sp2/p/B.java
test/langtools/tools/javadoc/enum/docComments/Main.java
test/langtools/tools/javadoc/enum/docComments/pkg1/Operation.java
test/langtools/tools/javadoc/enum/enumType/Main.java
test/langtools/tools/javadoc/enum/enumType/expected.out
test/langtools/tools/javadoc/enum/enumType/pkg1/QuotablePerson.java
test/langtools/tools/javadoc/generics/genericClass/Main.java
test/langtools/tools/javadoc/generics/genericClass/expected.out
test/langtools/tools/javadoc/generics/genericClass/pkg1/A.java
test/langtools/tools/javadoc/generics/genericInnerAndOuter/Main.java
test/langtools/tools/javadoc/generics/genericInnerAndOuter/expected.out
test/langtools/tools/javadoc/generics/genericInnerAndOuter/pkg1/O.java
test/langtools/tools/javadoc/generics/genericInnerAndOuter/pkg1/X.java
test/langtools/tools/javadoc/generics/genericInterface/Main.java
test/langtools/tools/javadoc/generics/genericInterface/expected.out
test/langtools/tools/javadoc/generics/genericInterface/pkg1/A.java
test/langtools/tools/javadoc/generics/genericMethod/Main.java
test/langtools/tools/javadoc/generics/genericMethod/expected.out
test/langtools/tools/javadoc/generics/genericMethod/pkg1/A.java
test/langtools/tools/javadoc/generics/genericSuper/Main.java
test/langtools/tools/javadoc/generics/genericSuper/expected.out
test/langtools/tools/javadoc/generics/genericSuper/pkg1/A.java
test/langtools/tools/javadoc/generics/supertypes/Main.java
test/langtools/tools/javadoc/generics/supertypes/expected.out
test/langtools/tools/javadoc/generics/supertypes/pkg1/A.java
test/langtools/tools/javadoc/generics/supertypes/pkg1/B.java
test/langtools/tools/javadoc/generics/throwsGeneric/Main.java
test/langtools/tools/javadoc/generics/throwsGeneric/expected.out
test/langtools/tools/javadoc/generics/throwsGeneric/pkg1/A.java
test/langtools/tools/javadoc/generics/tparamCycle/Main.java
test/langtools/tools/javadoc/generics/tparamCycle/pkg1/LikeEnum.java
test/langtools/tools/javadoc/generics/tparamTagOnMethod/Main.java
test/langtools/tools/javadoc/generics/tparamTagOnMethod/expected.out
test/langtools/tools/javadoc/generics/tparamTagOnMethod/pkg1/A.java
test/langtools/tools/javadoc/generics/tparamTagOnType/Main.java
test/langtools/tools/javadoc/generics/tparamTagOnType/expected.out
test/langtools/tools/javadoc/generics/tparamTagOnType/pkg1/A.java
test/langtools/tools/javadoc/generics/wildcards/Main.java
test/langtools/tools/javadoc/generics/wildcards/expected.out
test/langtools/tools/javadoc/generics/wildcards/pkg1/A.java
test/langtools/tools/javadoc/imports/I.java
test/langtools/tools/javadoc/imports/MissingImport.java
test/langtools/tools/javadoc/lib/OldToolTester.java
test/langtools/tools/javadoc/lib/ToyDoclet.java
test/langtools/tools/javadoc/nestedClass/NestedClass.java
test/langtools/tools/javadoc/nestedClass/NestedClassB.java
test/langtools/tools/javadoc/nonConstExprs/Test.java
test/langtools/tools/javadoc/outputRedirect/Test.java
test/langtools/tools/javadoc/outputRedirect/p/OutputRedirect.java
test/langtools/tools/javadoc/parser/7091528/T7091528.java
test/langtools/tools/javadoc/parser/7091528/p/C1.java
test/langtools/tools/javadoc/parser/7091528/p/C3.java
test/langtools/tools/javadoc/parser/7091528/p/q/C2.java
test/langtools/tools/javadoc/sourceOnly/Test.java
test/langtools/tools/javadoc/sourceOnly/p/NonSource.jasm
test/langtools/tools/javadoc/sourceOnly/p/SourceOnly.java
test/langtools/tools/javadoc/sourceOption/SourceOption.java
test/langtools/tools/javadoc/sourceOption/p/LambdaConstructTest.java
test/langtools/tools/javadoc/subpackageIgnore/SubpackageIgnore.java
test/langtools/tools/javadoc/subpackageIgnore/pkg1/not-subpkg/SomeJavaFile.java
test/langtools/tools/javadoc/varArgs/Main.java
test/langtools/tools/javadoc/varArgs/expected.out
test/langtools/tools/javadoc/varArgs/pkg1/A.java
--- a/.hgtags	Fri Feb 22 17:03:09 2019 +0000
+++ b/.hgtags	Fri Feb 22 20:36:42 2019 +0000
@@ -543,3 +543,6 @@
 021917019cda1c0c5853255322274f37693a2431 jdk-13+7
 b5f7bb57de2f797be34f6c75d45c3245ad37ab97 jdk-12+31
 a535ba736cabc6886acdff36de3a096c46e5ddc5 jdk-13+8
+4ce47bc1fb92cf94c6e3d1f49d582f02dcb851ab jdk-12+32
+c081f3ea6b9300265a4a34e38f970b1e3ddaae9f jdk-13+9
+b67884871b5fff79c5ef3eb8ac74dd48d71ea9b1 jdk-12+33
--- a/make/RunTests.gmk	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/RunTests.gmk	Fri Feb 22 20:36:42 2019 +0000
@@ -112,6 +112,9 @@
 GTEST_VARIANTS := $(strip $(patsubst $(TEST_IMAGE_DIR)/hotspot/gtest/%, %, \
     $(GTEST_LAUNCHER_DIRS)))
 
+COV_ENVIRONMENT :=
+JTREG_COV_OPTIONS :=
+
 ifeq ($(TEST_OPTS_JCOV), true)
   JCOV_OUTPUT_DIR := $(TEST_RESULTS_DIR)/jcov-output
   JCOV_GRABBER_LOG := $(JCOV_OUTPUT_DIR)/grabber.log
@@ -122,12 +125,18 @@
   # Replace our normal test JDK with the JCov image.
   JDK_UNDER_TEST := $(JCOV_IMAGE_DIR)
 
-  JCOV_ENVIRONMENT := JAVA_TOOL_OPTIONS="$(JCOV_MEM_OPTIONS)" \
+  COV_ENVIRONMENT += JAVA_TOOL_OPTIONS="$(JCOV_MEM_OPTIONS)" \
       _JAVA_OPTIONS="$(JCOV_MEM_OPTIONS)"
-  JTREG_JCOV_OPTIONS := -e:JAVA_TOOL_OPTIONS='$(JCOV_MEM_OPTIONS)' \
+  JTREG_COV_OPTIONS += -e:JAVA_TOOL_OPTIONS='$(JCOV_MEM_OPTIONS)' \
       -e:_JAVA_OPTIONS='$(JCOV_MEM_OPTIONS)'
 endif
 
+ifeq ($(GCOV_ENABLED), true)
+  GCOV_OUTPUT_DIR := $(TEST_RESULTS_DIR)/gcov-output
+  COV_ENVIRONMENT += GCOV_PREFIX="$(GCOV_OUTPUT_DIR)"
+  JTREG_COV_OPTIONS += -e:GCOV_PREFIX="$(GCOV_OUTPUT_DIR)"
+endif
+
 ################################################################################
 # Optionally create AOT libraries for specified modules before running tests.
 # Note, this could not be done during JDK build time.
@@ -170,6 +179,7 @@
 	$$(call LogWarn, Generating $$(patsubst $$(OUTPUTDIR)/%, %, $$@))
 	$$(call MakeTargetDir)
 	$$(call ExecuteWithLog, $$@, \
+	    $((COV_ENVIRONMENT) \
 	    $$(FIXPATH) $$(JDK_UNDER_TEST)/bin/jaotc \
 	        $$($1_JAOTC_OPTS) --output $$@ --module $$($1_MODULE) \
 	)
@@ -658,6 +668,8 @@
 
   # Current tests needs to open java.io
   $1_MICRO_JAVA_OPTIONS += --add-opens=java.base/java.io=ALL-UNNAMED
+  # Set library path for native dependencies
+  $1_MICRO_JAVA_OPTIONS += -Djava.library.path=$$(TEST_IMAGE_DIR)/micro/native
 
   # Save output as JSON or CSV file
   ifneq ($$(MICRO_RESULTS_FORMAT), )
@@ -690,7 +702,8 @@
 	$$(call LogWarn, Running test '$$($1_TEST)')
 	$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
 	$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/micro, \
-	    $$($1_MICRO_TEST_JDK)/bin/java $$($1_MICRO_JAVA_OPTIONS) -jar $$($1_MICRO_BENCHMARKS_JAR) \
+	    $$(FIXPATH) $$($1_MICRO_TEST_JDK)/bin/java $$($1_MICRO_JAVA_OPTIONS) \
+	        -jar $$($1_MICRO_BENCHMARKS_JAR) \
 	        $$($1_MICRO_ITER) $$($1_MICRO_FORK) $$($1_MICRO_TIME) \
 	        $$($1_MICRO_WARMUP_ITER) $$($1_MICRO_WARMUP_TIME) \
 	        $$($1_MICRO_VM_OPTIONS) $$($1_MICRO_BASIC_OPTIONS) $$(MICRO_OPTIONS) \
@@ -904,7 +917,7 @@
 	$$(call LogWarn, Running test '$$($1_TEST)')
 	$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
 	$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/jtreg, \
-	    $$(JCOV_ENVIRONMENT) \
+	    $$(COV_ENVIRONMENT) \
 	    $$(JAVA) $$($1_JTREG_LAUNCHER_OPTIONS) \
 	        -Dprogram=jtreg -jar $$(JT_HOME)/lib/jtreg.jar \
 	        $$($1_JTREG_BASIC_OPTIONS) \
@@ -914,7 +927,7 @@
 	        -workDir:$$($1_TEST_SUPPORT_DIR) \
 	        $$(JTREG_OPTIONS) \
 	        $$(JTREG_FAILURE_HANDLER_OPTIONS) \
-	        $$(JTREG_JCOV_OPTIONS) \
+	        $$(JTREG_COV_OPTIONS) \
 	        $$($1_TEST_NAME) \
 	    && $$(ECHO) $$$$? > $$($1_EXITCODE) \
 	    || $$(ECHO) $$$$? > $$($1_EXITCODE) \
--- a/make/autoconf/basics.m4	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/autoconf/basics.m4	Fri Feb 22 20:36:42 2019 +0000
@@ -618,14 +618,6 @@
   BASIC_PATH_PROGS(CPIO, [cpio bsdcpio])
   BASIC_PATH_PROGS(NICE, nice)
 
-  BASIC_PATH_PROGS(PANDOC, pandoc)
-  if test -n "$PANDOC"; then
-    ENABLE_PANDOC="true"
-  else
-    ENABLE_PANDOC="false"
-  fi
-  AC_SUBST(ENABLE_PANDOC)
-
   BASIC_PATH_PROGS(LSB_RELEASE, lsb_release)
   BASIC_PATH_PROGS(CMD, [cmd.exe /mnt/c/Windows/System32/cmd.exe])
 ])
@@ -1193,6 +1185,7 @@
   BASIC_CHECK_FIND_DELETE
   BASIC_CHECK_TAR
   BASIC_CHECK_GREP
+  BASIC_SETUP_PANDOC
 
   # These tools might not be installed by default,
   # need hint on how to install them.
@@ -1379,6 +1372,34 @@
 
 ################################################################################
 #
+# Setup Pandoc
+#
+AC_DEFUN_ONCE([BASIC_SETUP_PANDOC],
+[
+  BASIC_PATH_PROGS(PANDOC, pandoc)
+
+  PANDOC_MARKDOWN_FLAG="markdown"
+  if test -n "$PANDOC"; then
+    AC_MSG_CHECKING(if the pandoc smart extension needs to be disabled for markdown)
+    if $PANDOC --list-extensions | $GREP -q '\+smart'; then
+      AC_MSG_RESULT([yes])
+      PANDOC_MARKDOWN_FLAG="markdown-smart"
+    else
+      AC_MSG_RESULT([no])
+    fi
+  fi
+
+  if test -n "$PANDOC"; then
+    ENABLE_PANDOC="true"
+  else
+    ENABLE_PANDOC="false"
+  fi
+  AC_SUBST(ENABLE_PANDOC)
+  AC_SUBST(PANDOC_MARKDOWN_FLAG)
+])
+
+################################################################################
+#
 # Default make target
 #
 AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_MAKE_TARGET],
--- a/make/autoconf/flags-cflags.m4	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/autoconf/flags-cflags.m4	Fri Feb 22 20:36:42 2019 +0000
@@ -121,7 +121,11 @@
     # -g0 enables debug symbols without disabling inlining.
     CFLAGS_DEBUG_SYMBOLS="-g0 -xs"
   elif test "x$TOOLCHAIN_TYPE" = xxlc; then
-    CFLAGS_DEBUG_SYMBOLS="-g"
+    if test "x$XLC_USES_CLANG" = xtrue; then
+      CFLAGS_DEBUG_SYMBOLS="-g1"
+    else
+      CFLAGS_DEBUG_SYMBOLS="-g"
+    fi
   elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
     CFLAGS_DEBUG_SYMBOLS="-Z7 -d2Zi+"
   fi
--- a/make/autoconf/jdk-options.m4	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/autoconf/jdk-options.m4	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -364,7 +364,7 @@
 
 ################################################################################
 #
-# Gcov coverage data for hotspot
+# Native and Java code coverage
 #
 AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
 [
@@ -372,23 +372,26 @@
       [enable native compilation with code coverage data@<:@disabled@:>@])])
   GCOV_ENABLED="false"
   if test "x$enable_native_coverage" = "xyes"; then
-    if test "x$TOOLCHAIN_TYPE" = "xgcc"; then
-      AC_MSG_CHECKING([if native coverage is enabled])
-      AC_MSG_RESULT([yes])
-      GCOV_CFLAGS="-fprofile-arcs -ftest-coverage -fno-inline"
-      GCOV_LDFLAGS="-fprofile-arcs"
-      JVM_CFLAGS="$JVM_CFLAGS $GCOV_CFLAGS"
-      JVM_LDFLAGS="$JVM_LDFLAGS $GCOV_LDFLAGS"
-      CFLAGS_JDKLIB="$CFLAGS_JDKLIB $GCOV_CFLAGS"
-      CFLAGS_JDKEXE="$CFLAGS_JDKEXE $GCOV_CFLAGS"
-      CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $GCOV_CFLAGS"
-      CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $GCOV_CFLAGS"
-      LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $GCOV_LDFLAGS"
-      LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $GCOV_LDFLAGS"
-      GCOV_ENABLED="true"
-    else
-      AC_MSG_ERROR([--enable-native-coverage only works with toolchain type gcc])
-    fi
+    case $TOOLCHAIN_TYPE in
+      gcc | clang)
+        AC_MSG_CHECKING([if native coverage is enabled])
+        AC_MSG_RESULT([yes])
+        GCOV_CFLAGS="-fprofile-arcs -ftest-coverage -fno-inline"
+        GCOV_LDFLAGS="-fprofile-arcs"
+        JVM_CFLAGS="$JVM_CFLAGS $GCOV_CFLAGS"
+        JVM_LDFLAGS="$JVM_LDFLAGS $GCOV_LDFLAGS"
+        CFLAGS_JDKLIB="$CFLAGS_JDKLIB $GCOV_CFLAGS"
+        CFLAGS_JDKEXE="$CFLAGS_JDKEXE $GCOV_CFLAGS"
+        CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $GCOV_CFLAGS"
+        CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $GCOV_CFLAGS"
+        LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $GCOV_LDFLAGS"
+        LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $GCOV_LDFLAGS"
+        GCOV_ENABLED="true"
+        ;;
+      *)
+        AC_MSG_ERROR([--enable-native-coverage only works with toolchain type gcc or clang])
+        ;;
+    esac
   elif test "x$enable_native_coverage" = "xno"; then
     AC_MSG_CHECKING([if native coverage is enabled])
     AC_MSG_RESULT([no])
--- a/make/autoconf/spec.gmk.in	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/autoconf/spec.gmk.in	Fri Feb 22 20:36:42 2019 +0000
@@ -774,6 +774,7 @@
 UCRT_DLL_DIR:=@UCRT_DLL_DIR@
 STLPORT_LIB:=@STLPORT_LIB@
 ENABLE_PANDOC:=@ENABLE_PANDOC@
+PANDOC_MARKDOWN_FLAG:=@PANDOC_MARKDOWN_FLAG@
 
 ####################################################
 #
--- a/make/autoconf/toolchain.m4	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/autoconf/toolchain.m4	Fri Feb 22 20:36:42 2019 +0000
@@ -276,6 +276,20 @@
   fi
   AC_SUBST(TOOLCHAIN_TYPE)
 
+  # on AIX, check for xlclang++ on the PATH and TOOLCHAIN_PATH and use it if it is available
+  if test "x$OPENJDK_TARGET_OS" = xaix; then
+    if test "x$TOOLCHAIN_PATH" != x; then
+      XLC_TEST_PATH=${TOOLCHAIN_PATH}/
+    fi
+
+    XLCLANG_VERSION_OUTPUT=`${XLC_TEST_PATH}xlclang++ -qversion 2>&1 | $HEAD -n 1`
+    $ECHO "$XLCLANG_VERSION_OUTPUT" | $GREP "IBM XL C/C++ for AIX" > /dev/null
+    if test $? -eq 0; then
+      AC_MSG_NOTICE([xlclang++ output: $XLCLANG_VERSION_OUTPUT])
+      XLC_USES_CLANG=true
+    fi
+  fi
+
   TOOLCHAIN_CC_BINARY_clang="clang"
   TOOLCHAIN_CC_BINARY_gcc="gcc"
   TOOLCHAIN_CC_BINARY_microsoft="cl$EXE_SUFFIX"
@@ -288,6 +302,14 @@
   TOOLCHAIN_CXX_BINARY_solstudio="CC"
   TOOLCHAIN_CXX_BINARY_xlc="xlC_r"
 
+  if test "x$OPENJDK_TARGET_OS" = xaix; then
+    if test "x$XLC_USES_CLANG" = xtrue; then
+      AC_MSG_NOTICE([xlclang++ detected, using it])
+      TOOLCHAIN_CC_BINARY_xlc="xlclang"
+      TOOLCHAIN_CXX_BINARY_xlc="xlclang++"
+    fi
+  fi
+
   # Use indirect variable referencing
   toolchain_var_name=TOOLCHAIN_DESCRIPTION_$TOOLCHAIN_TYPE
   TOOLCHAIN_DESCRIPTION=${!toolchain_var_name}
--- a/make/common/MakeBase.gmk	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/common/MakeBase.gmk	Fri Feb 22 20:36:42 2019 +0000
@@ -392,9 +392,10 @@
   #
   # Param 1 - Dirs to find in
   # Param 2 - (optional) specialization. Normally "-a \( ... \)" expression.
+  # Param 3 - (optional) options to find.
   define CacheFind
     $(if $(filter-out $(addsuffix /%,- $(FIND_CACHE_DIRS)) $(FIND_CACHE_DIRS),$1), \
-      $(if $(wildcard $1), $(shell $(FIND) $(wildcard $1) \( -type f -o -type l \) $2 \
+      $(if $(wildcard $1), $(shell $(FIND) $3 $(wildcard $1) \( -type f -o -type l \) $2 \
           | $(TR) ' ' '?')), \
       $(filter $(addsuffix /%,$(patsubst %/,%,$1)) $1,$(FIND_CACHE)))
   endef
--- a/make/common/ProcessMarkdown.gmk	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/common/ProcessMarkdown.gmk	Fri Feb 22 20:36:42 2019 +0000
@@ -80,7 +80,8 @@
 	$$(call LogInfo, Converting $2 to $$($1_FORMAT))
 	$$(call MakeDir, $$(SUPPORT_OUTPUTDIR)/markdown $$(dir $$($1_$2_PANDOC_OUTPUT)))
 	$$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \
-	    $$(PANDOC) $$($1_OPTIONS) -f markdown-smart -t $$($1_FORMAT) --standalone \
+	    $$(PANDOC) $$($1_OPTIONS) -f $$(PANDOC_MARKDOWN_FLAG) \
+	    -t $$($1_FORMAT) --standalone \
 	    $$($1_$2_CSS_OPTION) $$($1_$2_OPTIONS) '$$($1_$2_PANDOC_INPUT)' \
 	    -o '$$($1_$2_PANDOC_OUTPUT)')
         ifneq ($$(findstring $$(LOG_LEVEL), debug trace),)
--- a/make/common/ZipArchive.gmk	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/common/ZipArchive.gmk	Fri Feb 22 20:36:42 2019 +0000
@@ -62,8 +62,9 @@
     $1_FIND_LIST := $$($1_SRC)
   endif
 
-  # Find all files in the source tree.
-  $1_ALL_SRCS := $$(call not-containing,_the.,$$(call CacheFind,$$($1_FIND_LIST)))
+  # Find all files in the source tree. Follow symlinks in this find since that is
+  # what zip does.
+  $1_ALL_SRCS := $$(call not-containing,_the.,$$(call CacheFind,$$($1_FIND_LIST), , -L))
 
   # Filter on suffixes if set
   ifneq ($$($1_SUFFIXES),)
@@ -126,10 +127,14 @@
   $$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS)
 	$$(call LogWarn, Updating $$($1_NAME))
 	$$(call MakeTargetDir)
-	$$(foreach s,$$($1_SRC),(cd $$s && $(ZIPEXE) -qru $$($1_ZIP_OPTIONS) $$@ . \
-	    $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* \
-	    $$($1_ZIP_EXCLUDES_$$s) \
-	    || test "$$$$?" = "12" )$$(NEWLINE)) true
+	$$(foreach s,$$($1_SRC), $$(call ExecuteWithLog, \
+	    $$(SUPPORT_OUTPUTDIR)/zip/$$(patsubst $$(OUTPUTDIR)/%,%, $$@), \
+	    (cd $$s && $(ZIPEXE) -qru $$($1_ZIP_OPTIONS) $$@ . \
+	        $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* \
+	        $$($1_ZIP_EXCLUDES_$$s) \
+	        || test "$$$$?" = "12" \
+	    ))$$(NEWLINE) \
+	) true \
 	$(TOUCH) $$@
 
   # Add zip to target list
--- a/make/conf/jib-profiles.js	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/conf/jib-profiles.js	Fri Feb 22 20:36:42 2019 +0000
@@ -241,7 +241,7 @@
     common.main_profile_names = [
         "linux-x64", "linux-x86", "macosx-x64", "solaris-x64",
         "solaris-sparcv9", "windows-x64", "windows-x86",
-        "linux-aarch64", "linux-arm32"
+        "linux-aarch64", "linux-arm32", "linux-ppc64le", "linux-s390x"
     ];
 
     // These are the base setttings for all the main build profiles.
@@ -464,6 +464,28 @@
                 "--with-abi-profile=arm-vfp-hflt", "--disable-warnings-as-errors"
             ],
         },
+
+        "linux-ppc64le": {
+            target_os: "linux",
+            target_cpu: "ppc64le",
+            build_cpu: "x64",
+            dependencies: ["devkit", "build_devkit", "cups"],
+            configure_args: [
+                "--openjdk-target=ppc64le-linux-gnu", "--with-freetype=bundled",
+                "--disable-warnings-as-errors"
+            ],
+        },
+
+        "linux-s390x": {
+            target_os: "linux",
+            target_cpu: "s390x",
+            build_cpu: "x64",
+            dependencies: ["devkit", "build_devkit", "cups"],
+            configure_args: [
+                "--openjdk-target=s390x-linux-gnu", "--with-freetype=bundled",
+                "--disable-warnings-as-errors"
+            ],
+        },
     };
 
     // Add the base settings to all the main profiles
@@ -499,6 +521,15 @@
             profiles[maketestName].default_make_targets = [ "test-make" ];
         });
 
+    // Generate -gcov profiles
+    [ "linux-x64", "macosx-x64" ].forEach(function (name) {
+        var gcovName = name + "-gcov";
+        profiles[gcovName] = clone(profiles[name]);
+        profiles[gcovName].default_make_targets = ["product-bundles", "test-bundles"];
+        profiles[gcovName].configure_args = concat(profiles[gcovName].configure_args,
+            ["--enable-native-coverage", "--disable-warnings-as-errors"]);
+    });
+
     // Profiles for building the zero jvm variant. These are used for verification.
     var zeroProfiles = {
         "linux-x64-zero": {
@@ -626,6 +657,12 @@
         },
        "linux-arm32": {
             platform: "linux-arm32",
+        },
+       "linux-ppc64le": {
+            platform: "linux-ppc64le",
+        },
+       "linux-s390x": {
+            platform: "linux-s390x",
         }
     }
     // Generate common artifacts for all main profiles
@@ -744,6 +781,40 @@
             };
         });
 
+    // Artifacts of gcov (native-code-coverage) profiles
+    [ "linux-x64", "macosx-x64" ].forEach(function (name) {
+        var o = artifactData[name]
+        var pf = o.platform
+        var jdk_subdir = (o.jdk_subdir != null ? o.jdk_subdir : "jdk-" + data.version);
+        var jdk_suffix = (o.jdk_suffix != null ? o.jdk_suffix : "tar.gz");
+        var gcovName = name + "-gcov";
+        profiles[gcovName].artifacts = {
+            jdk: {
+                local: "bundles/\\(jdk.*bin." + jdk_suffix + "\\)",
+                remote: [
+                    "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin-gcov." + jdk_suffix,
+                ],
+                subdir: jdk_subdir,
+                exploded: "images/jdk",
+            },
+            test: {
+                    local: "bundles/\\(jdk.*bin-tests.tar.gz\\)",
+                    remote: [
+                        "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin-gcov-tests.tar.gz",
+                    ],
+                    exploded: "images/test"
+            },
+            jdk_symbols: {
+                    local: "bundles/\\(jdk.*bin-symbols.tar.gz\\)",
+                    remote: [
+                        "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin-gcov-symbols.tar.gz",
+                    ],
+                    subdir: jdk_subdir,
+                    exploded: "images/jdk"
+                },
+            };
+    });
+
     // Profiles used to run tests.
     var testOnlyProfiles = {
         "run-test": {
@@ -770,6 +841,10 @@
     } else {
         testedProfileTest = testedProfile + ".test";
     }
+    var testOnlyMake = [ "run-test-prebuilt", "LOG_CMDLINES=true", "JTREG_VERBOSE=fail,error,time" ];
+    if (testedProfile.endsWith("-gcov")) {
+        testOnlyMake = concat(testOnlyMake, "GCOV_ENABLED=true")
+    }
     var testOnlyProfilesPrebuilt = {
         "run-test-prebuilt": {
             target_os: input.build_os,
@@ -779,7 +854,7 @@
                 testedProfileTest
             ],
             src: "src.conf",
-            make_args: [ "run-test-prebuilt", "LOG_CMDLINES=true", "JTREG_VERBOSE=fail,error,time" ],
+            make_args: testOnlyMake,
             environment: {
                 "BOOT_JDK": common.boot_jdk_home,
                 "JDK_IMAGE_DIR": input.get(testedProfileJDK, "home_path"),
@@ -870,7 +945,9 @@
         solaris_sparcv9: "SS12u6-Solaris11u3+1.0",
         windows_x64: "VS2017-15.5.5+1.0",
         linux_aarch64: "gcc7.3.0-Fedora27+1.2",
-        linux_arm: "gcc7.3.0-Fedora27+1.2"
+        linux_arm: "gcc7.3.0-Fedora27+1.2",
+        linux_ppc64le: "gcc7.3.0-Fedora27+1.0",
+        linux_s390x: "gcc7.3.0-Fedora27+1.0"
     };
 
     var devkit_platform = (input.target_cpu == "x86"
@@ -930,7 +1007,7 @@
         jtreg: {
             server: "javare",
             revision: "4.2",
-            build_number: "b13",
+            build_number: "b14",
             checksum_file: "MD5_VALUES",
             file: "jtreg_bin-4.2.zip",
             environment_name: "JT_HOME",
--- a/make/copy/CopyCommon.gmk	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/copy/CopyCommon.gmk	Fri Feb 22 20:36:42 2019 +0000
@@ -66,6 +66,8 @@
 # Setup make rules for copying legal files. This is only needed if the files
 # need to be filtered due to optional components being enabled/disabled.
 # Otherwise CreateJmods.gmk will find the legal files in the original src dirs.
+# If multiple license files with the same name are found, only the first one
+# found will get copied.
 #
 # Parameter 1 is the name of the rule.
 #
@@ -75,10 +77,12 @@
 define SetupCopyLegalFilesBody
   $$(foreach f, $$(filter-out $$(addprefix %/, $$($1_EXCLUDES)), \
       $$(wildcard $$(addsuffix /*, $$(call FindModuleLegalSrcDirs, $$(MODULE))))), \
-    $$(eval $$(call SetupCopyFiles, $1_$$(notdir $$f), \
-        DEST := $$(LEGAL_DST_DIR), \
-        FILES := $$f, \
-    )) \
-    $$(eval $1 += $$($1_$$(notdir $$f))) \
+    $$(if $$(filter $$($1_$$(notdir $$f)), $$($1)), , \
+      $$(eval $$(call SetupCopyFiles, $1_$$(notdir $$f), \
+          DEST := $$(LEGAL_DST_DIR), \
+          FILES := $$f, \
+      )) \
+      $$(eval $1 += $$($1_$$(notdir $$f))) \
+    ) \
   )
 endef
--- a/make/test/BuildMicrobenchmark.gmk	Fri Feb 22 17:03:09 2019 +0000
+++ b/make/test/BuildMicrobenchmark.gmk	Fri Feb 22 20:36:42 2019 +0000
@@ -30,6 +30,7 @@
 include MakeBase.gmk
 include JavaCompilation.gmk
 include SetupJavaCompilers.gmk
+include TestFilesCompilation.gmk
 
 ifeq ($(JMH_CORE_JAR), )
   $(info Error: JMH is missing. Please use configure --with-jmh.)
@@ -39,7 +40,8 @@
 #### Variables
 
 MICROBENCHMARK_SRC := $(TOPDIR)/test/micro
-MICROBENCHMARK_JAR := $(IMAGES_OUTPUTDIR)/test/micro/benchmarks.jar
+MICROBENCHMARK_IMAGE_DIR := $(TEST_IMAGE_DIR)/micro
+MICROBENCHMARK_JAR := $(MICROBENCHMARK_IMAGE_DIR)/benchmarks.jar
 
 MICROBENCHMARK_OUTPUT := $(SUPPORT_OUTPUTDIR)/test/micro
 MICROBENCHMARK_CLASSES := $(MICROBENCHMARK_OUTPUT)/classes
@@ -54,6 +56,11 @@
 
 MICROBENCHMARK_CLASSPATH := $(call PathList, $(JMH_COMPILE_JARS))
 
+# Native dependencies
+MICROBENCHMARK_NATIVE_SRC_DIRS := $(MICROBENCHMARK_SRC)
+MICROBENCHMARK_NATIVE_OUTPUT := $(MICROBENCHMARK_OUTPUT)/native
+MICROBENCHMARK_NATIVE_EXCLUDE :=
+
 ###
 
 # Need double \n to get new lines and no trailing spaces
@@ -108,6 +115,22 @@
     JAR := $(MICROBENCHMARK_JAR), \
 ))
 
-all: $(MICROBENCHMARK_JAR)
+# Setup compilation of native library dependencies
+$(eval $(call SetupTestFilesCompilation, BUILD_MICROBENCHMARK_LIBRARIES, \
+    TYPE := LIBRARY, \
+    SOURCE_DIRS := $(MICROBENCHMARK_NATIVE_SRC_DIRS), \
+    OUTPUT_DIR := $(MICROBENCHMARK_NATIVE_OUTPUT), \
+    EXCLUDE := $(MICROBENCHMARK_NATIVE_EXCLUDE), \
+))
+
+# Setup copy of native dependencies to image output dir
+$(eval $(call SetupCopyFiles, COPY_MICROBENCHMARK_NATIVE, \
+    SRC := $(MICROBENCHMARK_NATIVE_OUTPUT), \
+    DEST := $(MICROBENCHMARK_IMAGE_DIR)/native, \
+    FILES := $(BUILD_MICROBENCHMARK_LIBRARIES), \
+    FLATTEN := true, \
+))
+
+all: $(MICROBENCHMARK_JAR) $(BUILD_MICROBENCHMARK_LIBRARIES) $(COPY_MICROBENCHMARK_NATIVE)
 
 .PHONY: all
--- a/src/hotspot/cpu/ppc/nativeInst_ppc.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/ppc/nativeInst_ppc.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -362,8 +362,8 @@
 
 void NativeGeneralJump::insert_unconditional(address code_pos, address entry) {
   CodeBuffer cb(code_pos, BytesPerInstWord + 1);
-  MacroAssembler* a = new MacroAssembler(&cb);
-  a->b(entry);
+  MacroAssembler a(&cb);
+  a.b(entry);
   ICache::ppc64_flush_icache_bytes(code_pos, NativeGeneralJump::instruction_size);
 }
 
--- a/src/hotspot/cpu/s390/frame_s390.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/s390/frame_s390.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -479,6 +479,7 @@
           // name
           Method* method = *(Method**)((address)current_fp + _z_ijava_state_neg(method));
           if (method) {
+            ResourceMark rm;
             if (method->is_synchronized()) st->print("synchronized ");
             if (method->is_static()) st->print("static ");
             if (method->is_native()) st->print("native ");
@@ -543,6 +544,7 @@
           // name
           Method* method = ((nmethod *)blob)->method();
           if (method) {
+            ResourceMark rm;
             method->name_and_sig_as_C_string(buf, sizeof(buf));
             st->print("%s ", buf);
           }
--- a/src/hotspot/cpu/s390/stubGenerator_s390.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/s390/stubGenerator_s390.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016, 2017, SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1842,6 +1842,51 @@
   }
 
 
+  // Compute GHASH function.
+  address generate_ghash_processBlocks() {
+    __ align(CodeEntryAlignment);
+    StubCodeMark mark(this, "StubRoutines", "ghash_processBlocks");
+    unsigned int start_off = __ offset();   // Remember stub start address (is rtn value).
+
+    const Register state   = Z_ARG1;
+    const Register subkeyH = Z_ARG2;
+    const Register data    = Z_ARG3; // 1st of even-odd register pair.
+    const Register blocks  = Z_ARG4;
+    const Register len     = blocks; // 2nd of even-odd register pair.
+
+    const int param_block_size = 4 * 8;
+    const int frame_resize = param_block_size + 8; // Extra space for copy of fp.
+
+    // Reserve stack space for parameter block (R1).
+    __ z_lgr(Z_R1, Z_SP);
+    __ resize_frame(-frame_resize, Z_R0, true);
+    __ z_aghi(Z_R1, -param_block_size);
+
+    // Fill parameter block.
+    __ z_mvc(Address(Z_R1)    , Address(state)  , 16);
+    __ z_mvc(Address(Z_R1, 16), Address(subkeyH), 16);
+
+    // R4+5: data pointer + length
+    __ z_llgfr(len, blocks);  // Cast to 64-bit.
+
+    // R0: function code
+    __ load_const_optimized(Z_R0, (int)VM_Version::MsgDigest::_GHASH);
+
+    // Compute.
+    __ z_sllg(len, len, 4);  // In bytes.
+    __ kimd(data);
+
+    // Copy back result and free parameter block.
+    __ z_mvc(Address(state), Address(Z_R1), 16);
+    __ z_xc(Address(Z_R1), param_block_size, Address(Z_R1));
+    __ z_aghi(Z_SP, frame_resize);
+
+    __ z_br(Z_R14);
+
+    return __ addr_at(start_off);
+  }
+
+
   // Call interface for all SHA* stubs.
   //
   //   Z_ARG1 - source data block. Ptr to leftmost byte to be processed.
@@ -2305,6 +2350,11 @@
       StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_AES_decrypt("AES_decryptBlock_chaining");
     }
 
+    // Generate GHASH intrinsics code
+    if (UseGHASHIntrinsics) {
+      StubRoutines::_ghash_processBlocks = generate_ghash_processBlocks();
+    }
+
     // Generate SHA1/SHA256/SHA512 intrinsics code.
     if (UseSHA1Intrinsics) {
       StubRoutines::_sha1_implCompress     = generate_SHA1_stub(false,   "SHA1_singleBlock");
--- a/src/hotspot/cpu/s390/vm_version_s390.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/s390/vm_version_s390.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016, 2018 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -165,8 +165,10 @@
     FLAG_SET_DEFAULT(UseAESCTRIntrinsics, false);
   }
 
-  // TODO: implement GHASH intrinsics
-  if (UseGHASHIntrinsics) {
+  if (FLAG_IS_DEFAULT(UseGHASHIntrinsics) && has_Crypto_GHASH()) {
+    FLAG_SET_DEFAULT(UseGHASHIntrinsics, true);
+  }
+  if (UseGHASHIntrinsics && !has_Crypto_GHASH()) {
     warning("GHASH intrinsics are not available on this CPU");
     FLAG_SET_DEFAULT(UseGHASHIntrinsics, false);
   }
--- a/src/hotspot/cpu/x86/c2_init_x86.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/x86/c2_init_x86.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -29,6 +29,8 @@
 
 // processor dependent initialization for i486
 
+LP64_ONLY(extern void reg_mask_init();)
+
 void Compile::pd_compiler2_init() {
   guarantee(CodeEntryAlignment >= InteriorEntryAlignment, "" );
   // QQQ presumably all 64bit cpu's support this. Seems like the ifdef could
@@ -58,4 +60,5 @@
       OptoReg::invalidate(i);
     }
   }
+  LP64_ONLY(reg_mask_init();)
 }
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -359,7 +359,7 @@
 // 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 == rsp || raddr == r12 || raddr == r15) {
+  if (raddr == rsp || raddr == r15) {
     return NULL;
   }
 
--- a/src/hotspot/cpu/x86/gc/z/z_x86_64.ad	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/x86/gc/z/z_x86_64.ad	Fri Feb 22 20:36:42 2019 +0000
@@ -26,9 +26,8 @@
 #include "gc/z/zBarrierSetAssembler.hpp"
 
 static void z_load_barrier_slow_reg(MacroAssembler& _masm, Register dst, Address src, bool weak) {
-  assert(dst != r12, "Invalid register");
+  assert(dst != rsp, "Invalid register");
   assert(dst != r15, "Invalid register");
-  assert(dst != rsp, "Invalid register");
 
   const address stub = weak ? ZBarrierSet::assembler()->load_barrier_weak_slow_stub(dst)
                             : ZBarrierSet::assembler()->load_barrier_slow_stub(dst);
--- a/src/hotspot/cpu/x86/vm_version_x86.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/x86/vm_version_x86.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -336,7 +336,7 @@
 #define CPU_AVX512_VPOPCNTDQ ((uint64_t)UCONST64(0x2000000000)) // Vector popcount
 #define CPU_VPCLMULQDQ ((uint64_t)UCONST64(0x4000000000)) //Vector carryless multiplication
 #define CPU_VAES ((uint64_t)UCONST64(0x8000000000))    // Vector AES instructions
-#define CPU_VNNI ((uint64_t)UCONST64(0x16000000000))   // Vector Neural Network Instructions
+#define CPU_VNNI ((uint64_t)UCONST64(0x10000000000))   // Vector Neural Network Instructions
 
   enum Extended_Family {
     // AMD
--- a/src/hotspot/cpu/x86/x86_64.ad	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/cpu/x86/x86_64.ad	Fri Feb 22 20:36:42 2019 +0000
@@ -169,135 +169,94 @@
 // Empty register class.
 reg_class no_reg();
 
-// Class for all pointer registers (including RSP and RBP)
-reg_class any_reg_with_rbp(RAX, RAX_H,
-                           RDX, RDX_H,
-                           RBP, RBP_H,
-                           RDI, RDI_H,
-                           RSI, RSI_H,
-                           RCX, RCX_H,
-                           RBX, RBX_H,
-                           RSP, RSP_H,
-                           R8,  R8_H,
-                           R9,  R9_H,
-                           R10, R10_H,
-                           R11, R11_H,
-                           R12, R12_H,
-                           R13, R13_H,
-                           R14, R14_H,
-                           R15, R15_H);
-
-// Class for all pointer registers (including RSP, but excluding RBP)
-reg_class any_reg_no_rbp(RAX, RAX_H,
-                         RDX, RDX_H,
-                         RDI, RDI_H,
-                         RSI, RSI_H,
-                         RCX, RCX_H,
-                         RBX, RBX_H,
-                         RSP, RSP_H,
-                         R8,  R8_H,
-                         R9,  R9_H,
-                         R10, R10_H,
-                         R11, R11_H,
-                         R12, R12_H,
-                         R13, R13_H,
-                         R14, R14_H,
-                         R15, R15_H);
-
-// Dynamic register class that selects at runtime between register classes
-// any_reg_no_rbp and any_reg_with_rbp (depending on the value of the flag PreserveFramePointer).
-// Equivalent to: return PreserveFramePointer ? any_reg_no_rbp : any_reg_with_rbp;
-reg_class_dynamic any_reg(any_reg_no_rbp, any_reg_with_rbp, %{ PreserveFramePointer %});
+// Class for all pointer/long registers
+reg_class all_reg(RAX, RAX_H,
+                  RDX, RDX_H,
+                  RBP, RBP_H,
+                  RDI, RDI_H,
+                  RSI, RSI_H,
+                  RCX, RCX_H,
+                  RBX, RBX_H,
+                  RSP, RSP_H,
+                  R8,  R8_H,
+                  R9,  R9_H,
+                  R10, R10_H,
+                  R11, R11_H,
+                  R12, R12_H,
+                  R13, R13_H,
+                  R14, R14_H,
+                  R15, R15_H);
+
+// Class for all int registers
+reg_class all_int_reg(RAX
+                      RDX,
+                      RBP,
+                      RDI,
+                      RSI,
+                      RCX,
+                      RBX,
+                      R8,
+                      R9,
+                      R10,
+                      R11,
+                      R12,
+                      R13,
+                      R14);
+
+// Class for all pointer registers
+reg_class any_reg %{
+  return _ANY_REG_mask;
+%}
 
 // Class for all pointer registers (excluding RSP)
-reg_class ptr_reg_with_rbp(RAX, RAX_H,
-                           RDX, RDX_H,
-                           RBP, RBP_H,
-                           RDI, RDI_H,
-                           RSI, RSI_H,
-                           RCX, RCX_H,
-                           RBX, RBX_H,
-                           R8,  R8_H,
-                           R9,  R9_H,
-                           R10, R10_H,
-                           R11, R11_H,
-                           R13, R13_H,
-                           R14, R14_H);
+reg_class ptr_reg %{
+  return _PTR_REG_mask;
+%}
 
 // Class for all pointer registers (excluding RSP and RBP)
-reg_class ptr_reg_no_rbp(RAX, RAX_H,
-                         RDX, RDX_H,
-                         RDI, RDI_H,
-                         RSI, RSI_H,
-                         RCX, RCX_H,
-                         RBX, RBX_H,
-                         R8,  R8_H,
-                         R9,  R9_H,
-                         R10, R10_H,
-                         R11, R11_H,
-                         R13, R13_H,
-                         R14, R14_H);
-
-// Dynamic register class that selects between ptr_reg_no_rbp and ptr_reg_with_rbp.
-reg_class_dynamic ptr_reg(ptr_reg_no_rbp, ptr_reg_with_rbp, %{ PreserveFramePointer %});
+reg_class ptr_reg_no_rbp %{
+  return _PTR_REG_NO_RBP_mask;
+%}
 
 // Class for all pointer registers (excluding RAX and RSP)
-reg_class ptr_no_rax_reg_with_rbp(RDX, RDX_H,
-                                  RBP, RBP_H,
-                                  RDI, RDI_H,
-                                  RSI, RSI_H,
-                                  RCX, RCX_H,
-                                  RBX, RBX_H,
-                                  R8,  R8_H,
-                                  R9,  R9_H,
-                                  R10, R10_H,
-                                  R11, R11_H,
-                                  R13, R13_H,
-                                  R14, R14_H);
-
-// Class for all pointer registers (excluding RAX, RSP, and RBP)
-reg_class ptr_no_rax_reg_no_rbp(RDX, RDX_H,
-                                RDI, RDI_H,
-                                RSI, RSI_H,
-                                RCX, RCX_H,
-                                RBX, RBX_H,
-                                R8,  R8_H,
-                                R9,  R9_H,
-                                R10, R10_H,
-                                R11, R11_H,
-                                R13, R13_H,
-                                R14, R14_H);
-
-// Dynamic register class that selects between ptr_no_rax_reg_no_rbp and ptr_no_rax_reg_with_rbp.
-reg_class_dynamic ptr_no_rax_reg(ptr_no_rax_reg_no_rbp, ptr_no_rax_reg_with_rbp, %{ PreserveFramePointer %});
+reg_class ptr_no_rax_reg %{
+  return _PTR_NO_RAX_REG_mask;
+%}
 
 // Class for all pointer registers (excluding RAX, RBX, and RSP)
-reg_class ptr_no_rax_rbx_reg_with_rbp(RDX, RDX_H,
-                                      RBP, RBP_H,
-                                      RDI, RDI_H,
-                                      RSI, RSI_H,
-                                      RCX, RCX_H,
-                                      R8,  R8_H,
-                                      R9,  R9_H,
-                                      R10, R10_H,
-                                      R11, R11_H,
-                                      R13, R13_H,
-                                      R14, R14_H);
-
-// Class for all pointer registers (excluding RAX, RBX, RSP, and RBP)
-reg_class ptr_no_rax_rbx_reg_no_rbp(RDX, RDX_H,
-                                    RDI, RDI_H,
-                                    RSI, RSI_H,
-                                    RCX, RCX_H,
-                                    R8,  R8_H,
-                                    R9,  R9_H,
-                                    R10, R10_H,
-                                    R11, R11_H,
-                                    R13, R13_H,
-                                    R14, R14_H);
-
-// Dynamic register class that selects between ptr_no_rax_rbx_reg_no_rbp and ptr_no_rax_rbx_reg_with_rbp.
-reg_class_dynamic ptr_no_rax_rbx_reg(ptr_no_rax_rbx_reg_no_rbp, ptr_no_rax_rbx_reg_with_rbp, %{ PreserveFramePointer %});
+reg_class ptr_no_rax_rbx_reg %{
+  return _PTR_NO_RAX_RBX_REG_mask;
+%}
+
+// Class for all long registers (excluding RSP)
+reg_class long_reg %{
+  return _LONG_REG_mask;
+%}
+
+// Class for all long registers (excluding RAX, RDX and RSP)
+reg_class long_no_rax_rdx_reg %{
+  return _LONG_NO_RAX_RDX_REG_mask;
+%}
+
+// Class for all long registers (excluding RCX and RSP)
+reg_class long_no_rcx_reg %{
+  return _LONG_NO_RCX_REG_mask;
+%}
+
+// Class for all int registers (excluding RSP)
+reg_class int_reg %{
+  return _INT_REG_mask;
+%}
+
+// Class for all int registers (excluding RAX, RDX, and RSP)
+reg_class int_no_rax_rdx_reg %{
+  return _INT_NO_RAX_RDX_REG_mask;
+%}
+
+// Class for all int registers (excluding RCX and RSP)
+reg_class int_no_rcx_reg %{
+  return _INT_NO_RCX_REG_mask;
+%}
 
 // Singleton class for RAX pointer register
 reg_class ptr_rax_reg(RAX, RAX_H);
@@ -317,96 +276,6 @@
 // Singleton class for TLS pointer
 reg_class ptr_r15_reg(R15, R15_H);
 
-// Class for all long registers (excluding RSP)
-reg_class long_reg_with_rbp(RAX, RAX_H,
-                            RDX, RDX_H,
-                            RBP, RBP_H,
-                            RDI, RDI_H,
-                            RSI, RSI_H,
-                            RCX, RCX_H,
-                            RBX, RBX_H,
-                            R8,  R8_H,
-                            R9,  R9_H,
-                            R10, R10_H,
-                            R11, R11_H,
-                            R13, R13_H,
-                            R14, R14_H);
-
-// Class for all long registers (excluding RSP and RBP)
-reg_class long_reg_no_rbp(RAX, RAX_H,
-                          RDX, RDX_H,
-                          RDI, RDI_H,
-                          RSI, RSI_H,
-                          RCX, RCX_H,
-                          RBX, RBX_H,
-                          R8,  R8_H,
-                          R9,  R9_H,
-                          R10, R10_H,
-                          R11, R11_H,
-                          R13, R13_H,
-                          R14, R14_H);
-
-// Dynamic register class that selects between long_reg_no_rbp and long_reg_with_rbp.
-reg_class_dynamic long_reg(long_reg_no_rbp, long_reg_with_rbp, %{ PreserveFramePointer %});
-
-// Class for all long registers (excluding RAX, RDX and RSP)
-reg_class long_no_rax_rdx_reg_with_rbp(RBP, RBP_H,
-                                       RDI, RDI_H,
-                                       RSI, RSI_H,
-                                       RCX, RCX_H,
-                                       RBX, RBX_H,
-                                       R8,  R8_H,
-                                       R9,  R9_H,
-                                       R10, R10_H,
-                                       R11, R11_H,
-                                       R13, R13_H,
-                                       R14, R14_H);
-
-// Class for all long registers (excluding RAX, RDX, RSP, and RBP)
-reg_class long_no_rax_rdx_reg_no_rbp(RDI, RDI_H,
-                                     RSI, RSI_H,
-                                     RCX, RCX_H,
-                                     RBX, RBX_H,
-                                     R8,  R8_H,
-                                     R9,  R9_H,
-                                     R10, R10_H,
-                                     R11, R11_H,
-                                     R13, R13_H,
-                                     R14, R14_H);
-
-// Dynamic register class that selects between long_no_rax_rdx_reg_no_rbp and long_no_rax_rdx_reg_with_rbp.
-reg_class_dynamic long_no_rax_rdx_reg(long_no_rax_rdx_reg_no_rbp, long_no_rax_rdx_reg_with_rbp, %{ PreserveFramePointer %});
-
-// Class for all long registers (excluding RCX and RSP)
-reg_class long_no_rcx_reg_with_rbp(RBP, RBP_H,
-                                   RDI, RDI_H,
-                                   RSI, RSI_H,
-                                   RAX, RAX_H,
-                                   RDX, RDX_H,
-                                   RBX, RBX_H,
-                                   R8,  R8_H,
-                                   R9,  R9_H,
-                                   R10, R10_H,
-                                   R11, R11_H,
-                                   R13, R13_H,
-                                   R14, R14_H);
-
-// Class for all long registers (excluding RCX, RSP, and RBP)
-reg_class long_no_rcx_reg_no_rbp(RDI, RDI_H,
-                                 RSI, RSI_H,
-                                 RAX, RAX_H,
-                                 RDX, RDX_H,
-                                 RBX, RBX_H,
-                                 R8,  R8_H,
-                                 R9,  R9_H,
-                                 R10, R10_H,
-                                 R11, R11_H,
-                                 R13, R13_H,
-                                 R14, R14_H);
-
-// Dynamic register class that selects between long_no_rcx_reg_no_rbp and long_no_rcx_reg_with_rbp.
-reg_class_dynamic long_no_rcx_reg(long_no_rcx_reg_no_rbp, long_no_rcx_reg_with_rbp, %{ PreserveFramePointer %});
-
 // Singleton class for RAX long register
 reg_class long_rax_reg(RAX, RAX_H);
 
@@ -416,96 +285,6 @@
 // Singleton class for RDX long register
 reg_class long_rdx_reg(RDX, RDX_H);
 
-// Class for all int registers (excluding RSP)
-reg_class int_reg_with_rbp(RAX,
-                           RDX,
-                           RBP,
-                           RDI,
-                           RSI,
-                           RCX,
-                           RBX,
-                           R8,
-                           R9,
-                           R10,
-                           R11,
-                           R13,
-                           R14);
-
-// Class for all int registers (excluding RSP and RBP)
-reg_class int_reg_no_rbp(RAX,
-                         RDX,
-                         RDI,
-                         RSI,
-                         RCX,
-                         RBX,
-                         R8,
-                         R9,
-                         R10,
-                         R11,
-                         R13,
-                         R14);
-
-// Dynamic register class that selects between int_reg_no_rbp and int_reg_with_rbp.
-reg_class_dynamic int_reg(int_reg_no_rbp, int_reg_with_rbp, %{ PreserveFramePointer %});
-
-// Class for all int registers (excluding RCX and RSP)
-reg_class int_no_rcx_reg_with_rbp(RAX,
-                                  RDX,
-                                  RBP,
-                                  RDI,
-                                  RSI,
-                                  RBX,
-                                  R8,
-                                  R9,
-                                  R10,
-                                  R11,
-                                  R13,
-                                  R14);
-
-// Class for all int registers (excluding RCX, RSP, and RBP)
-reg_class int_no_rcx_reg_no_rbp(RAX,
-                                RDX,
-                                RDI,
-                                RSI,
-                                RBX,
-                                R8,
-                                R9,
-                                R10,
-                                R11,
-                                R13,
-                                R14);
-
-// Dynamic register class that selects between int_no_rcx_reg_no_rbp and int_no_rcx_reg_with_rbp.
-reg_class_dynamic int_no_rcx_reg(int_no_rcx_reg_no_rbp, int_no_rcx_reg_with_rbp, %{ PreserveFramePointer %});
-
-// Class for all int registers (excluding RAX, RDX, and RSP)
-reg_class int_no_rax_rdx_reg_with_rbp(RBP,
-                                      RDI,
-                                      RSI,
-                                      RCX,
-                                      RBX,
-                                      R8,
-                                      R9,
-                                      R10,
-                                      R11,
-                                      R13,
-                                      R14);
-
-// Class for all int registers (excluding RAX, RDX, RSP, and RBP)
-reg_class int_no_rax_rdx_reg_no_rbp(RDI,
-                                    RSI,
-                                    RCX,
-                                    RBX,
-                                    R8,
-                                    R9,
-                                    R10,
-                                    R11,
-                                    R13,
-                                    R14);
-
-// Dynamic register class that selects between int_no_rax_rdx_reg_no_rbp and int_no_rax_rdx_reg_with_rbp.
-reg_class_dynamic int_no_rax_rdx_reg(int_no_rax_rdx_reg_no_rbp, int_no_rax_rdx_reg_with_rbp, %{ PreserveFramePointer %});
-
 // Singleton class for RAX int register
 reg_class int_rax_reg(RAX);
 
@@ -529,12 +308,123 @@
 //----------SOURCE BLOCK-------------------------------------------------------
 // This is a block of C++ code which provides values, functions, and
 // definitions necessary in the rest of the architecture description
+source_hpp %{
+
+extern RegMask _ANY_REG_mask;
+extern RegMask _PTR_REG_mask;
+extern RegMask _PTR_REG_NO_RBP_mask;
+extern RegMask _PTR_NO_RAX_REG_mask;
+extern RegMask _PTR_NO_RAX_RBX_REG_mask;
+extern RegMask _LONG_REG_mask;
+extern RegMask _LONG_NO_RAX_RDX_REG_mask;
+extern RegMask _LONG_NO_RCX_REG_mask;
+extern RegMask _INT_REG_mask;
+extern RegMask _INT_NO_RAX_RDX_REG_mask;
+extern RegMask _INT_NO_RCX_REG_mask;
+
+extern RegMask _STACK_OR_PTR_REG_mask;
+extern RegMask _STACK_OR_LONG_REG_mask;
+extern RegMask _STACK_OR_INT_REG_mask;
+
+inline const RegMask& STACK_OR_PTR_REG_mask()  { return _STACK_OR_PTR_REG_mask;  }
+inline const RegMask& STACK_OR_LONG_REG_mask() { return _STACK_OR_LONG_REG_mask; }
+inline const RegMask& STACK_OR_INT_REG_mask()  { return _STACK_OR_INT_REG_mask;  }
+
+%}
+
 source %{
 #define   RELOC_IMM64    Assembler::imm_operand
 #define   RELOC_DISP32   Assembler::disp32_operand
 
 #define __ _masm.
 
+RegMask _ANY_REG_mask;
+RegMask _PTR_REG_mask;
+RegMask _PTR_REG_NO_RBP_mask;
+RegMask _PTR_NO_RAX_REG_mask;
+RegMask _PTR_NO_RAX_RBX_REG_mask;
+RegMask _LONG_REG_mask;
+RegMask _LONG_NO_RAX_RDX_REG_mask;
+RegMask _LONG_NO_RCX_REG_mask;
+RegMask _INT_REG_mask;
+RegMask _INT_NO_RAX_RDX_REG_mask;
+RegMask _INT_NO_RCX_REG_mask;
+RegMask _STACK_OR_PTR_REG_mask;
+RegMask _STACK_OR_LONG_REG_mask;
+RegMask _STACK_OR_INT_REG_mask;
+
+static bool need_r12_heapbase() {
+  return UseCompressedOops || UseCompressedClassPointers;
+}
+
+void reg_mask_init() {
+  // _ALL_REG_mask is generated by adlc from the all_reg register class below.
+  // We derive a number of subsets from it.
+  _ANY_REG_mask = _ALL_REG_mask;
+
+  if (PreserveFramePointer) {
+    _ANY_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()));
+    _ANY_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()->next()));
+  }
+  if (need_r12_heapbase()) {
+    _ANY_REG_mask.Remove(OptoReg::as_OptoReg(r12->as_VMReg()));
+    _ANY_REG_mask.Remove(OptoReg::as_OptoReg(r12->as_VMReg()->next()));
+  }
+
+  _PTR_REG_mask = _ANY_REG_mask;
+  _PTR_REG_mask.Remove(OptoReg::as_OptoReg(rsp->as_VMReg()));
+  _PTR_REG_mask.Remove(OptoReg::as_OptoReg(rsp->as_VMReg()->next()));
+  _PTR_REG_mask.Remove(OptoReg::as_OptoReg(r15->as_VMReg()));
+  _PTR_REG_mask.Remove(OptoReg::as_OptoReg(r15->as_VMReg()->next()));
+
+  _STACK_OR_PTR_REG_mask = _PTR_REG_mask;
+  _STACK_OR_PTR_REG_mask.OR(STACK_OR_STACK_SLOTS_mask());
+
+  _PTR_REG_NO_RBP_mask = _PTR_REG_mask;
+  _PTR_REG_NO_RBP_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()));
+  _PTR_REG_NO_RBP_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()->next()));
+
+  _PTR_NO_RAX_REG_mask = _PTR_REG_mask;
+  _PTR_NO_RAX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()));
+  _PTR_NO_RAX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()->next()));
+
+  _PTR_NO_RAX_RBX_REG_mask = _PTR_NO_RAX_REG_mask;
+  _PTR_NO_RAX_RBX_REG_mask.Remove(OptoReg::as_OptoReg(rbx->as_VMReg()));
+  _PTR_NO_RAX_RBX_REG_mask.Remove(OptoReg::as_OptoReg(rbx->as_VMReg()->next()));
+
+  _LONG_REG_mask = _PTR_REG_mask;
+  _STACK_OR_LONG_REG_mask = _LONG_REG_mask;
+  _STACK_OR_LONG_REG_mask.OR(STACK_OR_STACK_SLOTS_mask());
+
+  _LONG_NO_RAX_RDX_REG_mask = _LONG_REG_mask;
+  _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()));
+  _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()->next()));
+  _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rdx->as_VMReg()));
+  _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rdx->as_VMReg()->next()));
+
+  _LONG_NO_RCX_REG_mask = _LONG_REG_mask;
+  _LONG_NO_RCX_REG_mask.Remove(OptoReg::as_OptoReg(rcx->as_VMReg()));
+  _LONG_NO_RCX_REG_mask.Remove(OptoReg::as_OptoReg(rcx->as_VMReg()->next()));
+
+  _INT_REG_mask = _ALL_INT_REG_mask;
+  if (PreserveFramePointer) {
+    _INT_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()));
+  }
+  if (need_r12_heapbase()) {
+    _INT_REG_mask.Remove(OptoReg::as_OptoReg(r12->as_VMReg()));
+  }
+
+  _STACK_OR_INT_REG_mask = _INT_REG_mask;
+  _STACK_OR_INT_REG_mask.OR(STACK_OR_STACK_SLOTS_mask());
+
+  _INT_NO_RAX_RDX_REG_mask = _INT_REG_mask;
+  _INT_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()));
+  _INT_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rdx->as_VMReg()));
+
+  _INT_NO_RCX_REG_mask = _INT_REG_mask;
+  _INT_NO_RCX_REG_mask.Remove(OptoReg::as_OptoReg(rcx->as_VMReg()));
+}
+
 static bool generate_vzeroupper(Compile* C) {
   return (VM_Version::supports_vzeroupper() && (C->max_vector_size() > 16 || C->clear_upper_avx() == true)) ? true: false;  // Generate vzeroupper
 }
--- a/src/hotspot/os/aix/os_aix.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/aix/os_aix.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -27,6 +27,7 @@
 #define OS_AIX_OS_AIX_INLINE_HPP
 
 #include "runtime/os.hpp"
+#include "os_posix.inline.hpp"
 
 // System includes
 
--- a/src/hotspot/os/aix/os_perf_aix.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/aix/os_perf_aix.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -859,11 +859,7 @@
 
 char* SystemProcessInterface::SystemProcesses::ProcessIterator::allocate_string(const char* str) const {
   if (str != NULL) {
-    size_t len = strlen(str);
-    char* tmp = NEW_C_HEAP_ARRAY(char, len+1, mtInternal);
-    strncpy(tmp, str, len);
-    tmp[len] = '\0';
-    return tmp;
+    return os::strdup_check_oom(str, mtInternal);
   }
   return NULL;
 }
--- a/src/hotspot/os/bsd/os_bsd.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/bsd/os_bsd.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -37,6 +37,7 @@
 #include "memory/filemap.hpp"
 #include "oops/oop.inline.hpp"
 #include "os_bsd.inline.hpp"
+#include "os_posix.inline.hpp"
 #include "os_share_bsd.hpp"
 #include "prims/jniFastGetField.hpp"
 #include "prims/jvm_misc.hpp"
--- a/src/hotspot/os/bsd/os_bsd.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/bsd/os_bsd.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -26,6 +26,7 @@
 #define OS_BSD_OS_BSD_INLINE_HPP
 
 #include "runtime/os.hpp"
+#include "os_posix.inline.hpp"
 
 // System includes
 
--- a/src/hotspot/os/linux/globals_linux.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/linux/globals_linux.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -70,7 +70,12 @@
   diagnostic(bool, DumpPrivateMappingsInCore, true,                     \
           "If true, sets bit 2 of /proc/PID/coredump_filter, thus "     \
           "resulting in file-backed private mappings of the process to "\
-          "be dumped into the corefile, if UseSharedSpaces is true.")   \
+          "be dumped into the corefile.")                               \
+                                                                        \
+  diagnostic(bool, DumpSharedMappingsInCore, true,                      \
+          "If true, sets bit 3 of /proc/PID/coredump_filter, thus "     \
+          "resulting in file-backed shared mappings of the process to " \
+          "be dumped into the corefile.")                               \
                                                                         \
   diagnostic(bool, UseCpuAllocPath, false,                              \
              "Use CPU_ALLOC code path in os::active_processor_count ")
--- a/src/hotspot/os/linux/os_linux.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/linux/os_linux.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -38,6 +38,7 @@
 #include "memory/filemap.hpp"
 #include "oops/oop.inline.hpp"
 #include "os_linux.inline.hpp"
+#include "os_posix.inline.hpp"
 #include "os_share_linux.hpp"
 #include "osContainer_linux.hpp"
 #include "prims/jniFastGetField.hpp"
@@ -131,6 +132,7 @@
 
 enum CoredumpFilterBit {
   FILE_BACKED_PVT_BIT = 1 << 2,
+  FILE_BACKED_SHARED_BIT = 1 << 3,
   LARGEPAGES_BIT = 1 << 6,
   DAX_SHARED_BIT = 1 << 8
 };
@@ -1357,11 +1359,9 @@
 void os::abort(bool dump_core, void* siginfo, const void* context) {
   os::shutdown();
   if (dump_core) {
-#if INCLUDE_CDS
-    if (UseSharedSpaces && DumpPrivateMappingsInCore) {
+    if (DumpPrivateMappingsInCore) {
       ClassLoader::close_jrt_image();
     }
-#endif
 #ifndef PRODUCT
     fdStream out(defaultStream::output_fd());
     out.print_raw("Current thread is ");
@@ -3432,8 +3432,6 @@
   return result;
 }
 
-// Set the coredump_filter bits to include largepages in core dump (bit 6)
-//
 // From the coredump_filter documentation:
 //
 // - (bit 0) anonymous private memory
@@ -5131,11 +5129,13 @@
     set_coredump_filter(DAX_SHARED_BIT);
   }
 
-#if INCLUDE_CDS
-  if (UseSharedSpaces && DumpPrivateMappingsInCore) {
+  if (DumpPrivateMappingsInCore) {
     set_coredump_filter(FILE_BACKED_PVT_BIT);
   }
-#endif
+
+  if (DumpSharedMappingsInCore) {
+    set_coredump_filter(FILE_BACKED_SHARED_BIT);
+  }
 
   return JNI_OK;
 }
--- a/src/hotspot/os/linux/os_perf_linux.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/linux/os_perf_linux.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -861,11 +861,7 @@
 
 char* SystemProcessInterface::SystemProcesses::ProcessIterator::allocate_string(const char* str) const {
   if (str != NULL) {
-    size_t len = strlen(str);
-    char* tmp = NEW_C_HEAP_ARRAY(char, len+1, mtInternal);
-    strncpy(tmp, str, len);
-    tmp[len] = '\0';
-    return tmp;
+    return os::strdup_check_oom(str, mtInternal);
   }
   return NULL;
 }
--- a/src/hotspot/os/posix/os_posix.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/posix/os_posix.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -180,13 +180,14 @@
 
   const char name_template[] = "/jvmheap.XXXXXX";
 
-  char *fullname = (char*)os::malloc((strlen(dir) + strlen(name_template) + 1), mtInternal);
+  size_t fullname_len = strlen(dir) + strlen(name_template);
+  char *fullname = (char*)os::malloc(fullname_len + 1, mtInternal);
   if (fullname == NULL) {
     vm_exit_during_initialization(err_msg("Malloc failed during creation of backing file for heap (%s)", os::strerror(errno)));
     return -1;
   }
-  (void)strncpy(fullname, dir, strlen(dir)+1);
-  (void)strncat(fullname, name_template, strlen(name_template));
+  int n = snprintf(fullname, fullname_len + 1, "%s%s", dir, name_template);
+  assert((size_t)n == fullname_len, "Unexpected number of characters in string");
 
   os::native_path(fullname);
 
@@ -2218,22 +2219,6 @@
   assert_status(status == 0, status, "mutex_destroy");
 }
 
-void os::PlatformMonitor::lock() {
-  int status = pthread_mutex_lock(&_mutex);
-  assert_status(status == 0, status, "mutex_lock");
-}
-
-void os::PlatformMonitor::unlock() {
-  int status = pthread_mutex_unlock(&_mutex);
-  assert_status(status == 0, status, "mutex_unlock");
-}
-
-bool os::PlatformMonitor::try_lock() {
-  int status = pthread_mutex_trylock(&_mutex);
-  assert_status(status == 0 || status == EBUSY, status, "mutex_trylock");
-  return status == 0;
-}
-
 // Must already be locked
 int os::PlatformMonitor::wait(jlong millis) {
   assert(millis >= 0, "negative timeout");
@@ -2262,14 +2247,4 @@
   }
 }
 
-void os::PlatformMonitor::notify() {
-  int status = pthread_cond_signal(&_cond);
-  assert_status(status == 0, status, "cond_signal");
-}
-
-void os::PlatformMonitor::notify_all() {
-  int status = pthread_cond_broadcast(&_cond);
-  assert_status(status == 0, status, "cond_broadcast");
-}
-
 #endif // !SOLARIS
--- a/src/hotspot/os/posix/os_posix.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/posix/os_posix.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -177,7 +177,7 @@
  * These event objects are type-stable and immortal - we never delete them.
  * Events are associated with a thread for the lifetime of the thread.
  */
-class PlatformEvent : public CHeapObj<mtInternal> {
+class PlatformEvent : public CHeapObj<mtSynchronizer> {
  private:
   double cachePad[4];        // Increase odds that _mutex is sole occupant of cache line
   volatile int _event;       // Event count/permit: -1, 0 or 1
@@ -212,7 +212,7 @@
 // API updates of course). But Parker methods use fastpaths that break that
 // level of encapsulation - so combining the two remains a future project.
 
-class PlatformParker : public CHeapObj<mtInternal> {
+class PlatformParker : public CHeapObj<mtSynchronizer> {
  protected:
   enum {
     REL_INDEX = 0,
@@ -230,7 +230,7 @@
 };
 
 // Platform specific implementation that underpins VM Monitor/Mutex class
-class PlatformMonitor : public CHeapObj<mtInternal> {
+class PlatformMonitor : public CHeapObj<mtSynchronizer> {
  private:
   pthread_mutex_t _mutex; // Native mutex for locking
   pthread_cond_t  _cond;  // Native condition variable for blocking
--- a/src/hotspot/os/posix/os_posix.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/posix/os_posix.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -42,6 +42,39 @@
 inline int os::Posix::clock_getres(clockid_t clock_id, struct timespec *tp) {
   return _clock_getres != NULL ? _clock_getres(clock_id, tp) : -1;
 }
+
 #endif // SUPPORTS_CLOCK_MONOTONIC
 
+#ifndef SOLARIS
+
+// Platform Monitor implementation
+
+inline void os::PlatformMonitor::lock() {
+  int status = pthread_mutex_lock(&_mutex);
+  assert_status(status == 0, status, "mutex_lock");
+}
+
+inline void os::PlatformMonitor::unlock() {
+  int status = pthread_mutex_unlock(&_mutex);
+  assert_status(status == 0, status, "mutex_unlock");
+}
+
+inline bool os::PlatformMonitor::try_lock() {
+  int status = pthread_mutex_trylock(&_mutex);
+  assert_status(status == 0 || status == EBUSY, status, "mutex_trylock");
+  return status == 0;
+}
+
+inline void os::PlatformMonitor::notify() {
+  int status = pthread_cond_signal(&_cond);
+  assert_status(status == 0, status, "cond_signal");
+}
+
+inline void os::PlatformMonitor::notify_all() {
+  int status = pthread_cond_broadcast(&_cond);
+  assert_status(status == 0, status, "cond_broadcast");
+}
+
+#endif // !SOLARIS
+
 #endif // OS_POSIX_OS_POSIX_INLINE_HPP
--- a/src/hotspot/os/solaris/os_perf_solaris.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/solaris/os_perf_solaris.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -544,11 +544,7 @@
 
 char* SystemProcessInterface::SystemProcesses::ProcessIterator::allocate_string(const char* str) const {
   if (str != NULL) {
-    size_t len = strlen(str);
-    char* tmp = NEW_C_HEAP_ARRAY(char, len+1, mtInternal);
-    strncpy(tmp, str, len);
-    tmp[len] = '\0';
-    return tmp;
+    return os::strdup_check_oom(str, mtInternal);
   }
   return NULL;
 }
--- a/src/hotspot/os/solaris/os_solaris.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/solaris/os_solaris.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -281,7 +281,7 @@
 
 };
 
-class PlatformEvent : public CHeapObj<mtInternal> {
+class PlatformEvent : public CHeapObj<mtSynchronizer> {
  private:
   double CachePad[4];   // increase odds that _mutex is sole occupant of cache line
   volatile int _Event;
@@ -317,7 +317,7 @@
   void unpark();
 };
 
-class PlatformParker : public CHeapObj<mtInternal> {
+class PlatformParker : public CHeapObj<mtSynchronizer> {
  protected:
   mutex_t _mutex[1];
   cond_t  _cond[1];
@@ -336,7 +336,7 @@
 };
 
 // Platform specific implementation that underpins VM Monitor/Mutex class
-class PlatformMonitor : public CHeapObj<mtInternal> {
+class PlatformMonitor : public CHeapObj<mtSynchronizer> {
  private:
   mutex_t _mutex; // Native mutex for locking
   cond_t  _cond;  // Native condition variable for blocking
--- a/src/hotspot/os/windows/os_perf_windows.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/windows/os_perf_windows.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -1253,14 +1253,7 @@
 
 char* SystemProcessInterface::SystemProcesses::ProcessIterator::allocate_string(const char* str) const {
   if (str != NULL) {
-    size_t len = strlen(str);
-    char* tmp = NEW_C_HEAP_ARRAY(char, len+1, mtInternal);
-    if (NULL == tmp) {
-      return NULL;
-    }
-    strncpy(tmp, str, len);
-    tmp[len] = '\0';
-    return tmp;
+    return os::strdup_check_oom(str, mtInternal);
   }
   return NULL;
 }
--- a/src/hotspot/os/windows/os_windows.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/windows/os_windows.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -2970,14 +2970,15 @@
 int os::create_file_for_heap(const char* dir) {
 
   const char name_template[] = "/jvmheap.XXXXXX";
-  char *fullname = (char*)os::malloc((strlen(dir) + strlen(name_template) + 1), mtInternal);
+
+  size_t fullname_len = strlen(dir) + strlen(name_template);
+  char *fullname = (char*)os::malloc(fullname_len + 1, mtInternal);
   if (fullname == NULL) {
     vm_exit_during_initialization(err_msg("Malloc failed during creation of backing file for heap (%s)", os::strerror(errno)));
     return -1;
   }
-
-  (void)strncpy(fullname, dir, strlen(dir)+1);
-  (void)strncat(fullname, name_template, strlen(name_template));
+  int n = snprintf(fullname, fullname_len + 1, "%s%s", dir, name_template);
+  assert((size_t)n == fullname_len, "Unexpected number of characters in string");
 
   os::native_path(fullname);
 
@@ -5319,27 +5320,6 @@
 
 // Platform Monitor implementation
 
-os::PlatformMonitor::PlatformMonitor() {
-  InitializeConditionVariable(&_cond);
-  InitializeCriticalSection(&_mutex);
-}
-
-os::PlatformMonitor::~PlatformMonitor() {
-  DeleteCriticalSection(&_mutex);
-}
-
-void os::PlatformMonitor::lock() {
-  EnterCriticalSection(&_mutex);
-}
-
-void os::PlatformMonitor::unlock() {
-  LeaveCriticalSection(&_mutex);
-}
-
-bool os::PlatformMonitor::try_lock() {
-  return TryEnterCriticalSection(&_mutex);
-}
-
 // Must already be locked
 int os::PlatformMonitor::wait(jlong millis) {
   assert(millis >= 0, "negative timeout");
@@ -5358,14 +5338,6 @@
   return ret;
 }
 
-void os::PlatformMonitor::notify() {
-  WakeConditionVariable(&_cond);
-}
-
-void os::PlatformMonitor::notify_all() {
-  WakeAllConditionVariable(&_cond);
-}
-
 // Run the specified command in a separate process. Return its exit value,
 // or -1 on failure (e.g. can't create a new process).
 int os::fork_and_exec(char* cmd, bool use_vfork_if_available) {
--- a/src/hotspot/os/windows/os_windows.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/windows/os_windows.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -148,7 +148,7 @@
   static volatile intptr_t _crash_mux;
 };
 
-class PlatformEvent : public CHeapObj<mtInternal> {
+class PlatformEvent : public CHeapObj<mtSynchronizer> {
   private:
     double CachePad [4] ;   // increase odds that _Event is sole occupant of cache line
     volatile int _Event ;
@@ -174,7 +174,7 @@
 
 
 
-class PlatformParker : public CHeapObj<mtInternal> {
+class PlatformParker : public CHeapObj<mtSynchronizer> {
   protected:
     HANDLE _ParkEvent ;
 
@@ -188,7 +188,7 @@
 } ;
 
 // Platform specific implementation that underpins VM Monitor/Mutex class
-class PlatformMonitor : public CHeapObj<mtInternal> {
+class PlatformMonitor : public CHeapObj<mtSynchronizer> {
  private:
   CRITICAL_SECTION   _mutex; // Native mutex for locking
   CONDITION_VARIABLE _cond;  // Native condition variable for blocking
--- a/src/hotspot/os/windows/os_windows.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/os/windows/os_windows.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -86,4 +86,35 @@
   win32::exit_process_or_thread(win32::EPT_PROCESS, num);
 }
 
+// Platform Monitor implementation
+
+inline os::PlatformMonitor::PlatformMonitor() {
+  InitializeConditionVariable(&_cond);
+  InitializeCriticalSection(&_mutex);
+}
+
+inline os::PlatformMonitor::~PlatformMonitor() {
+  DeleteCriticalSection(&_mutex);
+}
+
+inline void os::PlatformMonitor::lock() {
+  EnterCriticalSection(&_mutex);
+}
+
+inline void os::PlatformMonitor::unlock() {
+  LeaveCriticalSection(&_mutex);
+}
+
+inline bool os::PlatformMonitor::try_lock() {
+  return TryEnterCriticalSection(&_mutex);
+}
+
+inline void os::PlatformMonitor::notify() {
+  WakeConditionVariable(&_cond);
+}
+
+inline void os::PlatformMonitor::notify_all() {
+  WakeAllConditionVariable(&_cond);
+}
+
 #endif // OS_WINDOWS_OS_WINDOWS_INLINE_HPP
--- a/src/hotspot/share/adlc/formsopt.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/adlc/formsopt.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -242,9 +242,6 @@
   char* code_snippet() {
     return _code_snippet;
   }
-  void set_stack_version(bool flag) {
-    assert(false, "User defined register classes are not allowed to spill to the stack.");
-  }
   void declare_register_masks(FILE* fp);
   void build_register_masks(FILE* fp) {
     // We do not need to generate register masks because we select at runtime
--- a/src/hotspot/share/c1/c1_Optimizer.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/c1/c1_Optimizer.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -174,6 +174,12 @@
   for_each_phi_fun(t_block, phi, return; );
   for_each_phi_fun(f_block, phi, return; );
 
+  // Only replace safepoint gotos if state_before information is available (if is a safepoint)
+  bool is_safepoint = if_->is_safepoint();
+  if (!is_safepoint && (t_goto->is_safepoint() || f_goto->is_safepoint())) {
+    return;
+  }
+
   // 2) substitute conditional expression
   //    with an IfOp followed by a Goto
   // cut if_ away and get node before
@@ -202,7 +208,7 @@
 
   // append Goto to successor
   ValueStack* state_before = if_->state_before();
-  Goto* goto_ = new Goto(sux, state_before, if_->is_safepoint() || t_goto->is_safepoint() || f_goto->is_safepoint());
+  Goto* goto_ = new Goto(sux, state_before, is_safepoint);
 
   // prepare state for Goto
   ValueStack* goto_state = if_state;
--- a/src/hotspot/share/ci/ciReplay.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/ci/ciReplay.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -33,6 +33,7 @@
 #include "memory/allocation.inline.hpp"
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/method.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/fieldDescriptor.inline.hpp"
--- a/src/hotspot/share/classfile/classFileParser.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -5743,16 +5743,13 @@
     ClassLoader::package_from_name(unsafe_anonymous_host->name()->as_C_string(), NULL);
 
   if (host_pkg_name != NULL) {
-    size_t host_pkg_len = strlen(host_pkg_name);
+    int host_pkg_len = (int)strlen(host_pkg_name);
     int class_name_len = _class_name->utf8_length();
-    char* new_anon_name =
-      NEW_RESOURCE_ARRAY(char, host_pkg_len + 1 + class_name_len);
-    // Copy host package name and trailing /.
-    strncpy(new_anon_name, host_pkg_name, host_pkg_len);
-    new_anon_name[host_pkg_len] = '/';
-    // Append unsafe anonymous class name. The unsafe anonymous class name can contain odd
-    // characters.  So, do a strncpy instead of using sprintf("%s...").
-    strncpy(new_anon_name + host_pkg_len + 1, (char *)_class_name->base(), class_name_len);
+    int symbol_len = host_pkg_len + 1 + class_name_len;
+    char* new_anon_name = NEW_RESOURCE_ARRAY(char, symbol_len + 1);
+    int n = snprintf(new_anon_name, symbol_len + 1, "%s/%.*s",
+                     host_pkg_name, class_name_len, _class_name->base());
+    assert(n == symbol_len, "Unexpected number of characters in string");
 
     // Decrement old _class_name to avoid leaking.
     _class_name->decrement_refcount();
@@ -5761,9 +5758,7 @@
     // The new class name is created with a refcount of one. When installed into the InstanceKlass,
     // it'll be two and when the ClassFileParser destructor runs, it'll go back to one and get deleted
     // when the class is unloaded.
-    _class_name = SymbolTable::new_symbol(new_anon_name,
-                                          (int)host_pkg_len + 1 + class_name_len,
-                                          CHECK);
+    _class_name = SymbolTable::new_symbol(new_anon_name, symbol_len, CHECK);
   }
 }
 
--- a/src/hotspot/share/classfile/classLoader.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/classLoader.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -101,7 +101,6 @@
 static JImageFindResource_t            JImageFindResource     = NULL;
 static JImageGetResource_t             JImageGetResource      = NULL;
 static JImageResourceIterator_t        JImageResourceIterator = NULL;
-static JImage_ResourcePath_t           JImageResourcePath     = NULL;
 
 // Globals
 
@@ -621,13 +620,14 @@
   update_module_path_entry_list(path, THREAD);
 }
 
+#endif // INCLUDE_CDS
+
 void ClassLoader::close_jrt_image() {
-  assert(ClassLoader::has_jrt_entry(), "Not applicable for exploded builds");
+  // Not applicable for exploded builds
+  if (!ClassLoader::has_jrt_entry()) return;
   _jrt_entry->close_jimage();
 }
 
-#endif // INCLUDE_CDS
-
 // Construct the array of module/path pairs as specified to --patch-module
 // for the boot loader to search ahead of the jimage, if the class being
 // loaded is defined to a module that has been specified to --patch-module.
@@ -1094,8 +1094,6 @@
   guarantee(JImageGetResource != NULL, "function JIMAGE_GetResource not found");
   JImageResourceIterator = CAST_TO_FN_PTR(JImageResourceIterator_t, os::dll_lookup(handle, "JIMAGE_ResourceIterator"));
   guarantee(JImageResourceIterator != NULL, "function JIMAGE_ResourceIterator not found");
-  JImageResourcePath = CAST_TO_FN_PTR(JImage_ResourcePath_t, os::dll_lookup(handle, "JIMAGE_ResourcePath"));
-  guarantee(JImageResourcePath != NULL, "function JIMAGE_ResourcePath not found");
 }
 
 jboolean ClassLoader::decompress(void *in, u8 inSize, void *out, u8 outSize, char **pmsg) {
--- a/src/hotspot/share/classfile/classLoader.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/classLoader.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -247,12 +247,12 @@
 
   static void load_zip_library();
   static void load_jimage_library();
+
+ public:
   static ClassPathEntry* create_class_path_entry(const char *path, const struct stat* st,
                                                  bool throw_exception,
                                                  bool is_boot_append, TRAPS);
 
- public:
-
   // If the package for the fully qualified class name is in the boot
   // loader's package entry table then add_package() sets the classpath_index
   // field so that get_system_package() will know to return a non-null value
--- a/src/hotspot/share/classfile/classLoaderExt.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/classLoaderExt.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -203,13 +203,13 @@
         file_end = end;
       }
 
-      int name_len = (int)strlen(file_start);
+      size_t name_len = strlen(file_start);
       if (name_len > 0) {
         ResourceMark rm(THREAD);
-        char* libname = NEW_RESOURCE_ARRAY(char, dir_len + name_len + 1);
-        *libname = 0;
-        strncat(libname, dir_name, dir_len);
-        strncat(libname, file_start, name_len);
+        size_t libname_len = dir_len + name_len;
+        char* libname = NEW_RESOURCE_ARRAY(char, libname_len + 1);
+        int n = snprintf(libname, libname_len + 1, "%.*s%s", dir_len, dir_name, file_start);
+        assert((size_t)n == libname_len, "Unexpected number of characters in string");
         trace_class_path("library = ", libname);
         ClassLoader::update_class_path_entry_list(libname, true, false);
       }
--- a/src/hotspot/share/classfile/klassFactory.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/klassFactory.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -46,22 +46,22 @@
                                           InstanceKlass* ik,
                                           Symbol* class_name,
                                           Handle class_loader,
-                                          Handle protection_domain, TRAPS) {
+                                          Handle protection_domain,
+                                          const ClassFileStream *cfs,
+                                          TRAPS) {
 #if INCLUDE_CDS && INCLUDE_JVMTI
   assert(ik != NULL, "sanity");
   assert(ik->is_shared(), "expecting a shared class");
-
   if (JvmtiExport::should_post_class_file_load_hook()) {
     assert(THREAD->is_Java_thread(), "must be JavaThread");
 
     // Post the CFLH
     JvmtiCachedClassFileData* cached_class_file = NULL;
-    JvmtiCachedClassFileData* archived_class_data = ik->get_archived_class_data();
-    assert(archived_class_data != NULL, "shared class has no archived class data");
-    unsigned char* ptr =
-        VM_RedefineClasses::get_cached_class_file_bytes(archived_class_data);
-    unsigned char* end_ptr =
-        ptr + VM_RedefineClasses::get_cached_class_file_len(archived_class_data);
+    if (cfs == NULL) {
+      cfs = FileMapInfo::open_stream_for_jvmti(ik, CHECK_NULL);
+    }
+    unsigned char* ptr = (unsigned char*)cfs->buffer();
+    unsigned char* end_ptr = ptr + cfs->length();
     unsigned char* old_ptr = ptr;
     JvmtiExport::post_class_file_load_hook(class_name,
                                            class_loader,
@@ -75,25 +75,9 @@
       ClassLoaderData* loader_data =
         ClassLoaderData::class_loader_data(class_loader());
       int path_index = ik->shared_classpath_index();
-      const char* pathname;
-      if (path_index < 0) {
-        // shared classes loaded by user defined class loader
-        // do not have shared_classpath_index
-        ModuleEntry* mod_entry = ik->module();
-        if (mod_entry != NULL && (mod_entry->location() != NULL)) {
-          ResourceMark rm;
-          pathname = (const char*)(mod_entry->location()->as_C_string());
-        } else {
-          pathname = "";
-        }
-      } else {
-        SharedClassPathEntry* ent =
-          (SharedClassPathEntry*)FileMapInfo::shared_path(path_index);
-        pathname = ent == NULL ? NULL : ent->name();
-      }
       ClassFileStream* stream = new ClassFileStream(ptr,
                                                     end_ptr - ptr,
-                                                    pathname,
+                                                    cfs->source(),
                                                     ClassFileStream::verify);
       ClassFileParser parser(stream,
                              class_name,
@@ -236,24 +220,6 @@
 #if INCLUDE_CDS
   if (DumpSharedSpaces) {
     ClassLoader::record_result(result, stream, THREAD);
-#if INCLUDE_JVMTI
-    assert(cached_class_file == NULL, "Sanity");
-    // Archive the class stream data into the optional data section
-    JvmtiCachedClassFileData *p;
-    int len;
-    const unsigned char *bytes;
-    // event based tracing might set cached_class_file
-    if ((bytes = result->get_cached_class_file_bytes()) != NULL) {
-      len = result->get_cached_class_file_len();
-    } else {
-      len = stream->length();
-      bytes = stream->buffer();
-    }
-    p = (JvmtiCachedClassFileData*)os::malloc(offset_of(JvmtiCachedClassFileData, data) + len, mtInternal);
-    p->length = len;
-    memcpy(p->data, bytes, len);
-    result->set_archived_class_data(p);
-#endif // INCLUDE_JVMTI
   }
 #endif // INCLUDE_CDS
 
--- a/src/hotspot/share/classfile/klassFactory.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/klassFactory.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -80,7 +80,9 @@
                                           InstanceKlass* ik,
                                           Symbol* class_name,
                                           Handle class_loader,
-                                          Handle protection_domain, TRAPS);
+                                          Handle protection_domain,
+                                          const ClassFileStream *cfs,
+                                          TRAPS);
 };
 
 #endif // SHARE_CLASSFILE_KLASSFACTORY_HPP
--- a/src/hotspot/share/classfile/stackMapTable.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/stackMapTable.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -26,6 +26,7 @@
 #include "classfile/stackMapTable.hpp"
 #include "classfile/verifier.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/fieldType.hpp"
 #include "runtime/handles.inline.hpp"
--- a/src/hotspot/share/classfile/symbolTable.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/symbolTable.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -436,18 +436,16 @@
   }
 }
 
-void SymbolTable::add(ClassLoaderData* loader_data, const constantPoolHandle& cp,
-                      int names_count, const char** names, int* lengths,
-                      int* cp_indices, unsigned int* hashValues, TRAPS) {
+void SymbolTable::new_symbols(ClassLoaderData* loader_data, const constantPoolHandle& cp,
+                              int names_count, const char** names, int* lengths,
+                              int* cp_indices, unsigned int* hashValues, TRAPS) {
   bool c_heap = !loader_data->is_the_null_class_loader_data();
   for (int i = 0; i < names_count; i++) {
     const char *name = names[i];
     int len = lengths[i];
     unsigned int hash = hashValues[i];
-    Symbol* sym = SymbolTable::the_table()->lookup_common(name, len, hash);
-    if (sym == NULL) {
-      sym = SymbolTable::the_table()->do_add_if_needed(name, len, hash, c_heap, CHECK);
-    }
+    assert(SymbolTable::the_table()->lookup_shared(name, len, hash) == NULL, "must have checked already");
+    Symbol* sym = SymbolTable::the_table()->do_add_if_needed(name, len, hash, c_heap, CHECK);
     assert(sym->refcount() != 0, "lookup should have incremented the count");
     cp->symbol_at_put(cp_indices[i], sym);
   }
--- a/src/hotspot/share/classfile/symbolTable.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/symbolTable.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -144,18 +144,11 @@
   Symbol* do_add_if_needed(const char* name, int len, uintx hash, bool heap, TRAPS);
 
   // Adding elements
-  static void add(ClassLoaderData* loader_data,
-                  const constantPoolHandle& cp, int names_count,
-                  const char** names, int* lengths, int* cp_indices,
-                  unsigned int* hashValues, TRAPS);
-
   static void new_symbols(ClassLoaderData* loader_data,
                           const constantPoolHandle& cp, int names_count,
                           const char** name, int* lengths,
                           int* cp_indices, unsigned int* hashValues,
-                          TRAPS) {
-    add(loader_data, cp, names_count, name, lengths, cp_indices, hashValues, THREAD);
-  }
+                          TRAPS);
 
   static Symbol* lookup_shared(const char* name, int len, unsigned int hash);
   Symbol* lookup_dynamic(const char* name, int len, unsigned int hash);
--- a/src/hotspot/share/classfile/systemDictionary.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/systemDictionary.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1174,7 +1174,7 @@
                                                         TRAPS) {
   InstanceKlass* ik = SystemDictionaryShared::find_builtin_class(class_name);
   if (ik != NULL && ik->is_shared_boot_class()) {
-    return load_shared_class(ik, Handle(), Handle(), THREAD);
+    return load_shared_class(ik, Handle(), Handle(), NULL, THREAD);
   }
   return NULL;
 }
@@ -1274,7 +1274,9 @@
 
 InstanceKlass* SystemDictionary::load_shared_class(InstanceKlass* ik,
                                                    Handle class_loader,
-                                                   Handle protection_domain, TRAPS) {
+                                                   Handle protection_domain,
+                                                   const ClassFileStream *cfs,
+                                                   TRAPS) {
 
   if (ik != NULL) {
     Symbol* class_name = ik->name();
@@ -1321,7 +1323,7 @@
     }
 
     InstanceKlass* new_ik = KlassFactory::check_shared_class_file_load_hook(
-        ik, class_name, class_loader, protection_domain, CHECK_NULL);
+        ik, class_name, class_loader, protection_domain, cfs, CHECK_NULL);
     if (new_ik != NULL) {
       // The class is changed by CFLH. Return the new class. The shared class is
       // not used.
--- a/src/hotspot/share/classfile/systemDictionary.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/systemDictionary.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -628,6 +628,7 @@
   static InstanceKlass* load_shared_class(InstanceKlass* ik,
                                           Handle class_loader,
                                           Handle protection_domain,
+                                          const ClassFileStream *cfs,
                                           TRAPS);
   static InstanceKlass* load_shared_boot_class(Symbol* class_name,
                                                TRAPS);
--- a/src/hotspot/share/classfile/systemDictionaryShared.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/systemDictionaryShared.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -803,7 +803,7 @@
          SystemDictionary::is_platform_class_loader(class_loader()))) {
       Handle protection_domain =
         SystemDictionaryShared::init_security_info(class_loader, ik, CHECK_NULL);
-      return load_shared_class(ik, class_loader, protection_domain, THREAD);
+      return load_shared_class(ik, class_loader, protection_domain, NULL, THREAD);
     }
   }
   return NULL;
@@ -873,13 +873,15 @@
   }
 
   return acquire_class_for_current_thread(record->_klass, class_loader,
-                                          protection_domain, THREAD);
+                                          protection_domain, cfs,
+                                          THREAD);
 }
 
 InstanceKlass* SystemDictionaryShared::acquire_class_for_current_thread(
                    InstanceKlass *ik,
                    Handle class_loader,
                    Handle protection_domain,
+                   const ClassFileStream *cfs,
                    TRAPS) {
   ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
 
@@ -900,7 +902,8 @@
   loader_data->add_class(ik);
 
   // Load and check super/interfaces, restore unsharable info
-  InstanceKlass* shared_klass = load_shared_class(ik, class_loader, protection_domain, THREAD);
+  InstanceKlass* shared_klass = load_shared_class(ik, class_loader, protection_domain,
+                                                  cfs, THREAD);
   if (shared_klass == NULL || HAS_PENDING_EXCEPTION) {
     // TODO: clean up <ik> so it can be used again
     return NULL;
--- a/src/hotspot/share/classfile/systemDictionaryShared.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/systemDictionaryShared.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -207,6 +207,7 @@
                                  InstanceKlass *ik,
                                  Handle class_loader,
                                  Handle protection_domain,
+                                 const ClassFileStream* cfs,
                                  TRAPS);
   static DumpTimeSharedClassInfo* find_or_allocate_info_for(InstanceKlass* k);
   static void write_dictionary(RunTimeSharedDictionary* dictionary, bool is_builtin);
--- a/src/hotspot/share/classfile/verifier.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/verifier.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -2981,18 +2981,16 @@
     }
     // add one dimension to component
     length++;
-    arr_sig_str = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, length);
-    arr_sig_str[0] = '[';
-    strncpy(&arr_sig_str[1], component_name, length - 1);
+    arr_sig_str = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, length + 1);
+    int n = snprintf(arr_sig_str, length + 1, "[%s", component_name);
+    assert(n == length, "Unexpected number of characters in string");
   } else {         // it's an object or interface
     const char* component_name = component_type.name()->as_utf8();
     // add one dimension to component with 'L' prepended and ';' postpended.
     length = (int)strlen(component_name) + 3;
-    arr_sig_str = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, length);
-    arr_sig_str[0] = '[';
-    arr_sig_str[1] = 'L';
-    strncpy(&arr_sig_str[2], component_name, length - 2);
-    arr_sig_str[length - 1] = ';';
+    arr_sig_str = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, length + 1);
+    int n = snprintf(arr_sig_str, length + 1, "[L%s;", component_name);
+    assert(n == length, "Unexpected number of characters in string");
   }
   Symbol* arr_sig = create_temporary_symbol(
     arr_sig_str, length, CHECK_VERIFY(this));
--- a/src/hotspot/share/classfile/verifier.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/classfile/verifier.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -49,7 +49,7 @@
 
   // Return false if the class is loaded by the bootstrap loader,
   // or if defineClass was called requesting skipping verification
-  // -Xverify:all/none override this value
+  // -Xverify:all overrides this value
   static bool should_verify_for(oop class_loader, bool should_verify_class);
 
   // Relax certain access checks to enable some broken 1.1 apps to run on 1.2.
--- a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -2761,7 +2761,7 @@
 CMSPhaseAccounting::~CMSPhaseAccounting() {
   _collector->gc_timer_cm()->register_gc_concurrent_end();
   _collector->stopTimer();
-  log_debug(gc)("Concurrent active time: %.3fms", TimeHelper::counter_to_seconds(_collector->timerTicks()));
+  log_debug(gc)("Concurrent active time: %.3fms", TimeHelper::counter_to_millis(_collector->timerTicks()));
   log_trace(gc)(" (CMS %s yielded %d times)", _title, _collector->yields());
 }
 
--- a/src/hotspot/share/gc/g1/g1Allocator.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1Allocator.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -321,16 +321,26 @@
   }
 }
 
-void G1PLABAllocator::waste(size_t& wasted, size_t& undo_wasted) {
-  wasted = 0;
-  undo_wasted = 0;
+size_t G1PLABAllocator::waste() const {
+  size_t result = 0;
   for (uint state = 0; state < InCSetState::Num; state++) {
     PLAB * const buf = _alloc_buffers[state];
     if (buf != NULL) {
-      wasted += buf->waste();
-      undo_wasted += buf->undo_waste();
+      result += buf->waste();
     }
   }
+  return result;
+}
+
+size_t G1PLABAllocator::undo_waste() const {
+  size_t result = 0;
+  for (uint state = 0; state < InCSetState::Num; state++) {
+    PLAB * const buf = _alloc_buffers[state];
+    if (buf != NULL) {
+      result += buf->undo_waste();
+    }
+  }
+  return result;
 }
 
 bool G1ArchiveAllocator::_archive_check_enabled = false;
--- a/src/hotspot/share/gc/g1/g1Allocator.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1Allocator.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -155,7 +155,8 @@
 public:
   G1PLABAllocator(G1Allocator* allocator);
 
-  void waste(size_t& wasted, size_t& undo_wasted);
+  size_t waste() const;
+  size_t undo_waste() const;
 
   // Allocate word_sz words in dest, either directly into the regions or by
   // allocating a new PLAB. Returns the address of the allocated memory, NULL if
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -3282,10 +3282,6 @@
 
       _root_processor->evacuate_roots(pss, worker_id);
 
-      // We pass a weak code blobs closure to the remembered set scanning because we want to avoid
-      // treating the nmethods visited to act as roots for concurrent marking.
-      // We only want to make sure that the oops in the nmethods are adjusted with regard to the
-      // objects copied by the current evacuation.
       _g1h->g1_rem_set()->oops_into_collection_set_do(pss, worker_id);
 
       double strong_roots_sec = os::elapsedTime() - start_strong_roots_sec;
@@ -3303,27 +3299,22 @@
 
         G1GCPhaseTimes* p = _g1h->g1_policy()->phase_times();
         p->add_time_secs(G1GCPhaseTimes::ObjCopy, worker_id, elapsed_sec - term_sec);
+
+        p->record_or_add_thread_work_item(G1GCPhaseTimes::ObjCopy,
+                                          worker_id,
+                                          pss->lab_waste_words() * HeapWordSize,
+                                          G1GCPhaseTimes::ObjCopyLABWaste);
+        p->record_or_add_thread_work_item(G1GCPhaseTimes::ObjCopy,
+                                          worker_id,
+                                          pss->lab_undo_waste_words() * HeapWordSize,
+                                          G1GCPhaseTimes::ObjCopyLABUndoWaste);
+
         p->record_time_secs(G1GCPhaseTimes::Termination, worker_id, term_sec);
         p->record_thread_work_item(G1GCPhaseTimes::Termination, worker_id, evac_term_attempts);
       }
 
       assert(pss->queue_is_empty(), "should be empty");
 
-      if (log_is_enabled(Debug, gc, task, stats)) {
-        MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
-        size_t lab_waste;
-        size_t lab_undo_waste;
-        pss->waste(lab_waste, lab_undo_waste);
-        _g1h->print_termination_stats(worker_id,
-                                      (os::elapsedTime() - start_sec) * 1000.0,   /* elapsed time */
-                                      strong_roots_sec * 1000.0,                  /* strong roots time */
-                                      term_sec * 1000.0,                          /* evac term time */
-                                      evac_term_attempts,                         /* evac term attempts */
-                                      lab_waste,                                  /* alloc buffer waste */
-                                      lab_undo_waste                              /* undo waste */
-                                      );
-      }
-
       // Close the inner scope so that the ResourceMark and HandleMark
       // destructors are executed here and are included as part of the
       // "GC Worker Time".
@@ -3332,31 +3323,6 @@
   }
 };
 
-void G1CollectedHeap::print_termination_stats_hdr() {
-  log_debug(gc, task, stats)("GC Termination Stats");
-  log_debug(gc, task, stats)("     elapsed  --strong roots-- -------termination------- ------waste (KiB)------");
-  log_debug(gc, task, stats)("thr     ms        ms      %%        ms      %%    attempts  total   alloc    undo");
-  log_debug(gc, task, stats)("--- --------- --------- ------ --------- ------ -------- ------- ------- -------");
-}
-
-void G1CollectedHeap::print_termination_stats(uint worker_id,
-                                              double elapsed_ms,
-                                              double strong_roots_ms,
-                                              double term_ms,
-                                              size_t term_attempts,
-                                              size_t alloc_buffer_waste,
-                                              size_t undo_waste) const {
-  log_debug(gc, task, stats)
-              ("%3d %9.2f %9.2f %6.2f "
-               "%9.2f %6.2f " SIZE_FORMAT_W(8) " "
-               SIZE_FORMAT_W(7) " " SIZE_FORMAT_W(7) " " SIZE_FORMAT_W(7),
-               worker_id, elapsed_ms, strong_roots_ms, strong_roots_ms * 100 / elapsed_ms,
-               term_ms, term_ms * 100 / elapsed_ms, term_attempts,
-               (alloc_buffer_waste + undo_waste) * HeapWordSize / K,
-               alloc_buffer_waste * HeapWordSize / K,
-               undo_waste * HeapWordSize / K);
-}
-
 void G1CollectedHeap::complete_cleaning(BoolObjectClosure* is_alive,
                                         bool class_unloading_occurred) {
   uint num_workers = workers()->active_workers();
@@ -3767,8 +3733,6 @@
     G1RootProcessor root_processor(this, n_workers);
     G1ParTask g1_par_task(this, per_thread_states, _task_queues, &root_processor, n_workers);
 
-    print_termination_stats_hdr();
-
     workers()->run_task(&g1_par_task);
     end_par_time_sec = os::elapsedTime();
 
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -738,16 +738,6 @@
   void pre_evacuate_collection_set();
   void post_evacuate_collection_set(G1EvacuationInfo& evacuation_info, G1ParScanThreadStateSet* pss);
 
-  // Print the header for the per-thread termination statistics.
-  static void print_termination_stats_hdr();
-  // Print actual per-thread termination statistics.
-  void print_termination_stats(uint worker_id,
-                               double elapsed_ms,
-                               double strong_roots_ms,
-                               double term_ms,
-                               size_t term_attempts,
-                               size_t alloc_buffer_waste,
-                               size_t undo_waste) const;
   // Update object copying statistics.
   void record_obj_copy_mem_stats();
 
--- a/src/hotspot/share/gc/g1/g1FullGCOopClosures.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1FullGCOopClosures.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -71,26 +71,19 @@
       }
       if (!_g1h->is_in_closed_subset(obj)) {
         HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-        yy.print_cr("Field " PTR_FORMAT
-            " of live obj " PTR_FORMAT " in region "
-            "[" PTR_FORMAT ", " PTR_FORMAT ")",
-            p2i(p), p2i(_containing_obj),
-            p2i(from->bottom()), p2i(from->end()));
+        yy.print_cr("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
         print_object(&yy, _containing_obj);
         yy.print_cr("points to obj " PTR_FORMAT " not in the heap",
-            p2i(obj));
+                    p2i(obj));
       } else {
         HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
         HeapRegion* to   = _g1h->heap_region_containing((HeapWord*)obj);
-        yy.print_cr("Field " PTR_FORMAT
-            " of live obj " PTR_FORMAT " in region "
-            "[" PTR_FORMAT ", " PTR_FORMAT ")",
-            p2i(p), p2i(_containing_obj),
-            p2i(from->bottom()), p2i(from->end()));
+        yy.print_cr("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
         print_object(&yy, _containing_obj);
-        yy.print_cr("points to dead obj " PTR_FORMAT " in region "
-            "[" PTR_FORMAT ", " PTR_FORMAT ")",
-            p2i(obj), p2i(to->bottom()), p2i(to->end()));
+        yy.print_cr("points to dead obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(obj), HR_FORMAT_PARAMS(to));
         print_object(&yy, obj);
       }
       yy.print_cr("----------");
--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -60,6 +60,9 @@
   _gc_par_phases[SystemDictionaryRoots] = new WorkerDataArray<double>(max_gc_threads, "SystemDictionary Roots (ms):");
   _gc_par_phases[CLDGRoots] = new WorkerDataArray<double>(max_gc_threads, "CLDG Roots (ms):");
   _gc_par_phases[JVMTIRoots] = new WorkerDataArray<double>(max_gc_threads, "JVMTI Roots (ms):");
+#if INCLUDE_AOT
+  _gc_par_phases[AOTCodeRoots] = new WorkerDataArray<double>(max_gc_threads, "AOT Root Scan (ms):");
+#endif
   _gc_par_phases[CMRefRoots] = new WorkerDataArray<double>(max_gc_threads, "CM RefProcessor Roots (ms):");
   _gc_par_phases[WaitForStrongCLD] = new WorkerDataArray<double>(max_gc_threads, "Wait For Strong CLD (ms):");
   _gc_par_phases[WeakCLDRoots] = new WorkerDataArray<double>(max_gc_threads, "Weak CLD Roots (ms):");
@@ -74,9 +77,6 @@
   _gc_par_phases[ScanRS] = new WorkerDataArray<double>(max_gc_threads, "Scan RS (ms):");
   _gc_par_phases[OptScanRS] = new WorkerDataArray<double>(max_gc_threads, "Optional Scan RS (ms):");
   _gc_par_phases[CodeRoots] = new WorkerDataArray<double>(max_gc_threads, "Code Root Scanning (ms):");
-#if INCLUDE_AOT
-  _gc_par_phases[AOTCodeRoots] = new WorkerDataArray<double>(max_gc_threads, "AOT Root Scanning (ms):");
-#endif
   _gc_par_phases[ObjCopy] = new WorkerDataArray<double>(max_gc_threads, "Object Copy (ms):");
   _gc_par_phases[OptObjCopy] = new WorkerDataArray<double>(max_gc_threads, "Optional Object Copy (ms):");
   _gc_par_phases[Termination] = new WorkerDataArray<double>(max_gc_threads, "Termination (ms):");
@@ -107,6 +107,11 @@
   _update_rs_skipped_cards = new WorkerDataArray<size_t>(max_gc_threads, "Skipped Cards:");
   _gc_par_phases[UpdateRS]->link_thread_work_items(_update_rs_skipped_cards, UpdateRSSkippedCards);
 
+  _obj_copy_lab_waste = new WorkerDataArray<size_t>(max_gc_threads, "LAB Waste");
+  _gc_par_phases[ObjCopy]->link_thread_work_items(_obj_copy_lab_waste, ObjCopyLABWaste);
+  _obj_copy_lab_undo_waste = new WorkerDataArray<size_t>(max_gc_threads, "LAB Undo Waste");
+  _gc_par_phases[ObjCopy]->link_thread_work_items(_obj_copy_lab_undo_waste, ObjCopyLABUndoWaste);
+
   _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:");
   _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts);
 
@@ -383,15 +388,12 @@
   for (int i = ThreadRoots; i <= SATBFiltering; i++) {
     trace_phase(_gc_par_phases[i]);
   }
+  if (G1HotCardCache::default_use_cache()) {
+    debug_phase(_gc_par_phases[ScanHCC]);
+  }
   debug_phase(_gc_par_phases[UpdateRS]);
-  if (G1HotCardCache::default_use_cache()) {
-    trace_phase(_gc_par_phases[ScanHCC]);
-  }
   debug_phase(_gc_par_phases[ScanRS]);
   debug_phase(_gc_par_phases[CodeRoots]);
-#if INCLUDE_AOT
-  debug_phase(_gc_par_phases[AOTCodeRoots]);
-#endif
   debug_phase(_gc_par_phases[ObjCopy]);
   debug_phase(_gc_par_phases[Termination]);
   debug_phase(_gc_par_phases[Other]);
@@ -503,6 +505,9 @@
       "SystemDictionaryRoots",
       "CLDGRoots",
       "JVMTIRoots",
+#if INCLUDE_AOT
+      "AOTCodeRoots",
+#endif
       "CMRefRoots",
       "WaitForStrongCLD",
       "WeakCLDRoots",
@@ -512,9 +517,6 @@
       "ScanRS",
       "OptScanRS",
       "CodeRoots",
-#if INCLUDE_AOT
-      "AOTCodeRoots",
-#endif
       "ObjCopy",
       "OptObjCopy",
       "Termination",
--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -55,6 +55,9 @@
     SystemDictionaryRoots,
     CLDGRoots,
     JVMTIRoots,
+#if INCLUDE_AOT
+    AOTCodeRoots,
+#endif
     CMRefRoots,
     WaitForStrongCLD,
     WeakCLDRoots,
@@ -64,9 +67,6 @@
     ScanRS,
     OptScanRS,
     CodeRoots,
-#if INCLUDE_AOT
-    AOTCodeRoots,
-#endif
     ObjCopy,
     OptObjCopy,
     Termination,
@@ -93,6 +93,11 @@
     UpdateRSSkippedCards
   };
 
+  enum GCObjCopyWorkItems {
+    ObjCopyLABWaste,
+    ObjCopyLABUndoWaste
+  };
+
   enum GCOptCSetWorkItems {
       OptCSetScannedCards,
       OptCSetClaimedCards,
@@ -114,6 +119,9 @@
   WorkerDataArray<size_t>* _scan_rs_claimed_cards;
   WorkerDataArray<size_t>* _scan_rs_skipped_cards;
 
+  WorkerDataArray<size_t>* _obj_copy_lab_waste;
+  WorkerDataArray<size_t>* _obj_copy_lab_undo_waste;
+
   WorkerDataArray<size_t>* _opt_cset_scanned_cards;
   WorkerDataArray<size_t>* _opt_cset_claimed_cards;
   WorkerDataArray<size_t>* _opt_cset_skipped_cards;
--- a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -106,8 +106,12 @@
   delete[] _oops_into_optional_regions;
 }
 
-void G1ParScanThreadState::waste(size_t& wasted, size_t& undo_wasted) {
-  _plab_allocator->waste(wasted, undo_wasted);
+size_t G1ParScanThreadState::lab_waste_words() const {
+  return _plab_allocator->waste();
+}
+
+size_t G1ParScanThreadState::lab_undo_waste_words() const {
+  return _plab_allocator->undo_waste();
 }
 
 #ifdef ASSERT
--- a/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -127,9 +127,8 @@
   G1EvacuationRootClosures* closures() { return _closures; }
   uint worker_id() { return _worker_id; }
 
-  // Returns the current amount of waste due to alignment or not being able to fit
-  // objects within LABs and the undo waste.
-  virtual void waste(size_t& wasted, size_t& undo_wasted);
+  size_t lab_waste_words() const;
+  size_t lab_undo_waste_words() const;
 
   size_t* surviving_young_words() {
     // We add one to hide entry 0 which accumulates surviving words for
--- a/src/hotspot/share/gc/g1/g1RemSet.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/g1RemSet.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -409,6 +409,10 @@
 
 void G1ScanRSForRegionClosure::scan_strong_code_roots(HeapRegion* r) {
   EventGCPhaseParallel event;
+  // We pass a weak code blobs closure to the remembered set scanning because we want to avoid
+  // treating the nmethods visited to act as roots for concurrent marking.
+  // We only want to make sure that the oops in the nmethods are adjusted with regard to the
+  // objects copied by the current evacuation.
   r->strong_code_roots_do(_pss->closures()->weak_codeblobs());
   event.commit(GCId::current(), _worker_i, G1GCPhaseTimes::phase_name(G1GCPhaseTimes::CodeRoots));
 }
--- a/src/hotspot/share/gc/g1/heapRegion.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/g1/heapRegion.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -336,8 +336,8 @@
         // Object is in the region. Check that its less than top
         if (_hr->top() <= (HeapWord*)obj) {
           // Object is above top
-          log_error(gc, verify)("Object " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ") is above top " PTR_FORMAT,
-                               p2i(obj), p2i(_hr->bottom()), p2i(_hr->end()), p2i(_hr->top()));
+          log_error(gc, verify)("Object " PTR_FORMAT " in region " HR_FORMAT " is above top ",
+                                p2i(obj), HR_FORMAT_PARAMS(_hr));
           _failures = true;
           return;
         }
@@ -415,8 +415,8 @@
   // on its strong code root list
   if (is_empty()) {
     if (strong_code_roots_length > 0) {
-      log_error(gc, verify)("region [" PTR_FORMAT "," PTR_FORMAT "] is empty but has " SIZE_FORMAT " code root entries",
-                            p2i(bottom()), p2i(end()), strong_code_roots_length);
+      log_error(gc, verify)("region " HR_FORMAT " is empty but has " SIZE_FORMAT " code root entries",
+                            HR_FORMAT_PARAMS(this), strong_code_roots_length);
       *failures = true;
     }
     return;
@@ -524,21 +524,22 @@
         ResourceMark rm;
         if (!_g1h->is_in_closed_subset(obj)) {
           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-          log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
-            p2i(p), p2i(_containing_obj), p2i(from->bottom()), p2i(from->end()));
+          log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
           LogStream ls(log.error());
           print_object(&ls, _containing_obj);
           HeapRegion* const to = _g1h->heap_region_containing(obj);
-          log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s", p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
+          log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s",
+                    p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
         } else {
           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
           HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj);
-          log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
-            p2i(p), p2i(_containing_obj), p2i(from->bottom()), p2i(from->end()));
+          log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
           LogStream ls(log.error());
           print_object(&ls, _containing_obj);
-          log.error("points to dead obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
-            p2i(obj), p2i(to->bottom()), p2i(to->end()));
+          log.error("points to dead obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(obj), HR_FORMAT_PARAMS(to));
           print_object(&ls, obj);
         }
         log.error("----------");
@@ -593,12 +594,13 @@
             log.error("----------");
           }
           log.error("Missing rem set entry:");
-          log.error("Field " PTR_FORMAT " of obj " PTR_FORMAT ", in region " HR_FORMAT,
-            p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
+          log.error("Field " PTR_FORMAT " of obj " PTR_FORMAT " in region " HR_FORMAT,
+                    p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
           ResourceMark rm;
           LogStream ls(log.error());
           _containing_obj->print_on(&ls);
-          log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s", p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
+          log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s",
+                    p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
           if (oopDesc::is_oop(obj)) {
             obj->print_on(&ls);
           }
--- a/src/hotspot/share/gc/shared/genOopClosures.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shared/genOopClosures.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -29,7 +29,6 @@
 #include "oops/oop.hpp"
 
 class Generation;
-class HeapWord;
 class CardTableRS;
 class CardTableBarrierSet;
 class DefNewGeneration;
--- a/src/hotspot/share/gc/shared/spaceDecorator.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shared/spaceDecorator.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2015, 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
@@ -36,7 +36,7 @@
 // pattern.
 bool SpaceMangler::is_mangled(HeapWord* q) {
   // This test loses precision but is good enough
-  return badHeapWord == (max_juint & (uintptr_t) q->value());
+  return badHeapWord == (max_juint & reinterpret_cast<uintptr_t>(*q));
 }
 
 
--- a/src/hotspot/share/gc/shared/vmStructs_gc.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shared/vmStructs_gc.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -156,8 +156,6 @@
   nonstatic_field(GenCollectedHeap,            _young_gen_spec,                               GenerationSpec*)                       \
   nonstatic_field(GenCollectedHeap,            _old_gen_spec,                                 GenerationSpec*)                       \
                                                                                                                                      \
-  nonstatic_field(HeapWord,                    i,                                             char*)                                 \
-                                                                                                                                     \
   nonstatic_field(MemRegion,                   _start,                                        HeapWord*)                             \
   nonstatic_field(MemRegion,                   _word_size,                                    size_t)                                \
                                                                                                                                      \
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -335,7 +335,7 @@
   // Filter marked objects before hitting the SATB queues. The same predicate would
   // be used by SATBMQ::filter to eliminate already marked objects downstream, but
   // filtering here helps to avoid wasteful SATB queueing work to begin with.
-  if (!_heap->requires_marking(obj)) return;
+  if (!_heap->requires_marking<false>(obj)) return;
 
   Thread* thr = Thread::current();
   if (thr->is_Java_thread()) {
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -2639,6 +2639,10 @@
   return memory_pools;
 }
 
+MemoryUsage ShenandoahHeap::memory_usage() {
+  return _memory_pool->get_memory_usage();
+}
+
 void ShenandoahHeap::enter_evacuation() {
   _oom_evac_handler.enter_evacuation();
 }
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -511,6 +511,7 @@
 
   GrowableArray<GCMemoryManager*> memory_managers();
   GrowableArray<MemoryPool*> memory_pools();
+  MemoryUsage memory_usage();
   GCTracer* tracer();
   GCTimer* gc_timer() const;
   CollectorPolicy* collector_policy() const;
@@ -676,6 +677,7 @@
   void reset_mark_bitmap();
 
   // SATB barriers hooks
+  template<bool RESOLVE>
   inline bool requires_marking(const void* entry) const;
   void force_satb_flush_all_threads();
 
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -316,8 +316,13 @@
   }
 }
 
+template<bool RESOLVE>
 inline bool ShenandoahHeap::requires_marking(const void* entry) const {
-  return !_marking_context->is_marked(oop(entry));
+  oop obj = oop(entry);
+  if (RESOLVE) {
+    obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
+  }
+  return !_marking_context->is_marked(obj);
 }
 
 template <class T>
--- a/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -29,8 +29,6 @@
 #include "memory/memRegion.hpp"
 #include "oops/oopsHierarchy.hpp"
 
-class HeapWord;
-
 /**
  * Encapsulate a marking bitmap with the top-at-mark-start and top-bitmaps array.
  */
--- a/src/hotspot/share/gc/shenandoah/shenandoahMemoryPool.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMemoryPool.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -26,7 +26,7 @@
 
 ShenandoahMemoryPool::ShenandoahMemoryPool(ShenandoahHeap* heap) :
         CollectedMemoryPool("Shenandoah",
-                            heap->capacity(),
+                            heap->initial_capacity(),
                             heap->max_capacity(),
                             true /* support_usage_threshold */),
                             _heap(heap) {}
@@ -37,9 +37,15 @@
   size_t used      = used_in_bytes();
   size_t committed = _heap->committed();
 
+  // These asserts can never fail: max is stable, and all updates to other values never overflow max.
   assert(initial <= max,    "initial: "   SIZE_FORMAT ", max: "       SIZE_FORMAT, initial,   max);
   assert(used <= max,       "used: "      SIZE_FORMAT ", max: "       SIZE_FORMAT, used,      max);
   assert(committed <= max,  "committed: " SIZE_FORMAT ", max: "       SIZE_FORMAT, committed, max);
+
+  // Committed and used are updated concurrently and independently. They can momentarily break
+  // the assert below, which would also fail in downstream code. To avoid that, adjust values
+  // to make sense under the race. See JDK-8207200.
+  committed = MAX2(used, committed);
   assert(used <= committed, "used: "      SIZE_FORMAT ", committed: " SIZE_FORMAT, used,      committed);
 
   return MemoryUsage(initial, used, committed, max);
--- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -27,7 +27,6 @@
 #include "memory/allocation.hpp"
 #include "oops/oopsHierarchy.hpp"
 
-class HeapWord;
 class JavaThread;
 class oopDesc;
 
--- a/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -49,12 +49,9 @@
   return ShenandoahThreadLocalData::satb_mark_queue(t);
 }
 
-static inline bool discard_entry(const void* entry, ShenandoahHeap* heap) {
-  return !heap->requires_marking(entry);
-}
-
+template <bool RESOLVE>
 class ShenandoahSATBMarkQueueFilterFn {
-  ShenandoahHeap* _heap;
+  ShenandoahHeap* const _heap;
 
 public:
   ShenandoahSATBMarkQueueFilterFn(ShenandoahHeap* heap) : _heap(heap) {}
@@ -62,13 +59,17 @@
   // Return true if entry should be filtered out (removed), false if
   // it should be retained.
   bool operator()(const void* entry) const {
-    return discard_entry(entry, _heap);
+    return !_heap->requires_marking<RESOLVE>(entry);
   }
 };
 
 void ShenandoahSATBMarkQueueSet::filter(SATBMarkQueue* queue) {
   assert(_heap != NULL, "SATB queue set not initialized");
-  apply_filter(ShenandoahSATBMarkQueueFilterFn(_heap), queue);
+  if (_heap->has_forwarded_objects()) {
+    apply_filter(ShenandoahSATBMarkQueueFilterFn<true>(_heap), queue);
+  } else {
+    apply_filter(ShenandoahSATBMarkQueueFilterFn<false>(_heap), queue);
+  }
 }
 
 bool ShenandoahSATBMarkQueue::should_enqueue_buffer() {
--- a/src/hotspot/share/gc/z/vmStructs_z.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/vmStructs_z.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,6 +26,7 @@
 
 ZGlobalsForVMStructs::ZGlobalsForVMStructs() :
     _ZGlobalPhase(&ZGlobalPhase),
+    _ZGlobalSeqNum(&ZGlobalSeqNum),
     _ZAddressGoodMask(&ZAddressGoodMask),
     _ZAddressBadMask(&ZAddressBadMask),
     _ZAddressWeakBadMask(&ZAddressWeakBadMask),
--- a/src/hotspot/share/gc/z/vmStructs_z.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/vmStructs_z.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -42,6 +42,8 @@
 
   uint32_t* _ZGlobalPhase;
 
+  uint32_t* _ZGlobalSeqNum;
+
   uintptr_t* _ZAddressGoodMask;
   uintptr_t* _ZAddressBadMask;
   uintptr_t* _ZAddressWeakBadMask;
@@ -55,6 +57,7 @@
 #define VM_STRUCTS_ZGC(nonstatic_field, volatile_nonstatic_field, static_field)                      \
   static_field(ZGlobalsForVMStructs,            _instance_p,          ZGlobalsForVMStructs*)         \
   nonstatic_field(ZGlobalsForVMStructs,         _ZGlobalPhase,        uint32_t*)                     \
+  nonstatic_field(ZGlobalsForVMStructs,         _ZGlobalSeqNum,       uint32_t*)                     \
   nonstatic_field(ZGlobalsForVMStructs,         _ZAddressGoodMask,    uintptr_t*)                    \
   nonstatic_field(ZGlobalsForVMStructs,         _ZAddressBadMask,     uintptr_t*)                    \
   nonstatic_field(ZGlobalsForVMStructs,         _ZAddressWeakBadMask, uintptr_t*)                    \
@@ -67,7 +70,10 @@
   nonstatic_field(ZHeap,                        _pagetable,           ZPageTable)                    \
                                                                                                      \
   nonstatic_field(ZPage,                        _type,                const uint8_t)                 \
+  nonstatic_field(ZPage,                        _seqnum,              uint32_t)                      \
   nonstatic_field(ZPage,                        _virtual,             const ZVirtualMemory)          \
+  volatile_nonstatic_field(ZPage,               _top,                 uintptr_t)                     \
+  volatile_nonstatic_field(ZPage,               _refcount,            uint32_t)                      \
   nonstatic_field(ZPage,                        _forwarding,          ZForwardingTable)              \
                                                                                                      \
   nonstatic_field(ZPageAllocator,               _physical,            ZPhysicalMemoryManager)        \
@@ -101,6 +107,7 @@
   declare_constant(ZAddressOffsetShift)                                                              \
   declare_constant(ZAddressOffsetBits)                                                               \
   declare_constant(ZAddressOffsetMask)                                                               \
+  declare_constant(ZAddressOffsetMax)                                                                \
   declare_constant(ZAddressSpaceStart)
 
 #define VM_TYPES_ZGC(declare_type, declare_toplevel_type, declare_integer_type)                      \
--- a/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -27,12 +27,12 @@
 #include "gc/z/zGlobals.hpp"
 #include "gc/z/zLock.inline.hpp"
 #include "gc/z/zOopClosures.hpp"
-#include "gc/z/zNMethodTable.hpp"
+#include "gc/z/zNMethod.hpp"
 #include "gc/z/zThreadLocalData.hpp"
 #include "logging/log.hpp"
 
 bool ZBarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) {
-  ZLocker<ZReentrantLock> locker(ZNMethodTable::lock_for_nmethod(nm));
+  ZLocker<ZReentrantLock> locker(ZNMethod::lock_for_nmethod(nm));
   log_trace(nmethod, barrier)("Entered critical zone for %p", nm);
 
   if (!is_armed(nm)) {
--- a/src/hotspot/share/gc/z/zCollectedHeap.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zCollectedHeap.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -27,7 +27,7 @@
 #include "gc/z/zCollectedHeap.hpp"
 #include "gc/z/zGlobals.hpp"
 #include "gc/z/zHeap.inline.hpp"
-#include "gc/z/zNMethodTable.hpp"
+#include "gc/z/zNMethod.hpp"
 #include "gc/z/zServiceability.hpp"
 #include "gc/z/zStat.hpp"
 #include "gc/z/zUtils.inline.hpp"
@@ -118,10 +118,6 @@
   return is_in(p);
 }
 
-void ZCollectedHeap::fill_with_dummy_object(HeapWord* start, HeapWord* end, bool zap) {
-  // Does nothing, not a parsable heap
-}
-
 HeapWord* ZCollectedHeap::allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) {
   const size_t size_in_bytes = ZUtils::words_to_bytes(align_object_size(requested_size));
   const uintptr_t addr = _heap.alloc_tlab(size_in_bytes);
@@ -259,11 +255,11 @@
 }
 
 void ZCollectedHeap::register_nmethod(nmethod* nm) {
-  ZNMethodTable::register_nmethod(nm);
+  ZNMethod::register_nmethod(nm);
 }
 
 void ZCollectedHeap::unregister_nmethod(nmethod* nm) {
-  ZNMethodTable::unregister_nmethod(nm);
+  ZNMethod::unregister_nmethod(nm);
 }
 
 void ZCollectedHeap::verify_nmethod(nmethod* nm) {
--- a/src/hotspot/share/gc/z/zCollectedHeap.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zCollectedHeap.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -75,8 +75,6 @@
   virtual bool is_in(const void* p) const;
   virtual bool is_in_closed_subset(const void* p) const;
 
-  virtual void fill_with_dummy_object(HeapWord* start, HeapWord* end, bool zap);
-
   virtual HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded);
   virtual MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
                                                        size_t size,
--- a/src/hotspot/share/gc/z/zInitialize.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zInitialize.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -30,7 +30,7 @@
 #include "gc/z/zLargePages.hpp"
 #include "gc/z/zNUMA.hpp"
 #include "gc/z/zStat.hpp"
-#include "gc/z/zStatTLAB.hpp"
+#include "gc/z/zThreadLocalAllocBuffer.hpp"
 #include "gc/z/zTracer.hpp"
 #include "logging/log.hpp"
 #include "runtime/vm_version.hpp"
@@ -46,7 +46,7 @@
   ZNUMA::initialize();
   ZCPU::initialize();
   ZStatValue::initialize();
-  ZStatTLAB::initialize();
+  ZThreadLocalAllocBuffer::initialize();
   ZTracer::initialize();
   ZLargePages::initialize();
   ZBarrierSet::set_barrier_set(barrier_set);
--- a/src/hotspot/share/gc/z/zMark.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zMark.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -32,9 +32,9 @@
 #include "gc/z/zPageTable.inline.hpp"
 #include "gc/z/zRootsIterator.hpp"
 #include "gc/z/zStat.hpp"
-#include "gc/z/zStatTLAB.hpp"
 #include "gc/z/zTask.hpp"
 #include "gc/z/zThread.hpp"
+#include "gc/z/zThreadLocalAllocBuffer.hpp"
 #include "gc/z/zUtils.inline.hpp"
 #include "gc/z/zWorkers.inline.hpp"
 #include "logging/log.hpp"
@@ -121,24 +121,19 @@
 class ZMarkRootsIteratorClosure : public ZRootsIteratorClosure {
 public:
   ZMarkRootsIteratorClosure() {
-    ZStatTLAB::reset();
+    ZThreadLocalAllocBuffer::reset_statistics();
   }
 
   ~ZMarkRootsIteratorClosure() {
-    ZStatTLAB::publish();
+    ZThreadLocalAllocBuffer::publish_statistics();
   }
 
   virtual void do_thread(Thread* thread) {
-    ZRootsIteratorClosure::do_thread(thread);
-
     // Update thread local address bad mask
     ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask);
 
     // Retire TLAB
-    if (UseTLAB && thread->is_Java_thread()) {
-      thread->tlab().retire(ZStatTLAB::get());
-      thread->tlab().resize();
-    }
+    ZThreadLocalAllocBuffer::retire(thread);
   }
 
   virtual void do_oop(oop* p) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethod.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,394 @@
+/*
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * 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 "code/relocInfo.hpp"
+#include "code/nmethod.hpp"
+#include "code/icBuffer.hpp"
+#include "gc/shared/barrierSet.hpp"
+#include "gc/shared/barrierSetNMethod.hpp"
+#include "gc/z/zGlobals.hpp"
+#include "gc/z/zLock.inline.hpp"
+#include "gc/z/zNMethod.hpp"
+#include "gc/z/zNMethodData.hpp"
+#include "gc/z/zNMethodTable.hpp"
+#include "gc/z/zOopClosures.inline.hpp"
+#include "gc/z/zTask.hpp"
+#include "gc/z/zWorkers.hpp"
+#include "logging/log.hpp"
+#include "memory/allocation.inline.hpp"
+#include "memory/iterator.hpp"
+#include "memory/resourceArea.hpp"
+#include "runtime/atomic.hpp"
+#include "runtime/orderAccess.hpp"
+#include "utilities/debug.hpp"
+
+static ZNMethodData* gc_data(const nmethod* nm) {
+  return nm->gc_data<ZNMethodData>();
+}
+
+static void set_gc_data(nmethod* nm, ZNMethodData* data) {
+  return nm->set_gc_data<ZNMethodData>(data);
+}
+
+void ZNMethod::attach_gc_data(nmethod* nm) {
+  GrowableArray<oop*> immediate_oops;
+  bool non_immediate_oops = false;
+
+  // Find all oops relocations
+  RelocIterator iter(nm);
+  while (iter.next()) {
+    if (iter.type() != relocInfo::oop_type) {
+      // Not an oop
+      continue;
+    }
+
+    oop_Relocation* r = iter.oop_reloc();
+
+    if (!r->oop_is_immediate()) {
+      // Non-immediate oop found
+      non_immediate_oops = true;
+      continue;
+    }
+
+    if (r->oop_value() != NULL) {
+      // Non-NULL immediate oop found. NULL oops can safely be
+      // ignored since the method will be re-registered if they
+      // are later patched to be non-NULL.
+      immediate_oops.push(r->oop_addr());
+    }
+  }
+
+  // Attach GC data to nmethod
+  ZNMethodData* data = gc_data(nm);
+  if (data == NULL) {
+    data = ZNMethodData::create(nm);
+    set_gc_data(nm, data);
+  }
+
+  // Attach oops in GC data
+  ZNMethodDataOops* const new_oops = ZNMethodDataOops::create(immediate_oops, non_immediate_oops);
+  ZNMethodDataOops* const old_oops = data->swap_oops(new_oops);
+  ZNMethodDataOops::destroy(old_oops);
+}
+
+void ZNMethod::detach_gc_data(nmethod* nm) {
+  // Destroy GC data
+  ZNMethodData::destroy(gc_data(nm));
+  set_gc_data(nm, NULL);
+}
+
+ZReentrantLock* ZNMethod::lock_for_nmethod(nmethod* nm) {
+  ZNMethodData* const data = gc_data(nm);
+  if (data == NULL) {
+    return NULL;
+  }
+  return data->lock();
+}
+
+void ZNMethod::log_register(const nmethod* nm) {
+  LogTarget(Trace, gc, nmethod) log;
+  if (!log.is_enabled()) {
+    return;
+  }
+
+  const ZNMethodDataOops* const oops = gc_data(nm)->oops();
+
+  log.print("Register NMethod: %s.%s (" PTR_FORMAT "), "
+            "Compiler: %s, Oops: %d, ImmediateOops: " SIZE_FORMAT ", NonImmediateOops: %s",
+            nm->method()->method_holder()->external_name(),
+            nm->method()->name()->as_C_string(),
+            p2i(nm),
+            nm->compiler_name(),
+            nm->oops_count() - 1,
+            oops->immediates_count(),
+            oops->has_non_immediates() ? "Yes" : "No");
+
+  LogTarget(Trace, gc, nmethod, oops) log_oops;
+  if (!log_oops.is_enabled()) {
+    return;
+  }
+
+  // Print nmethod oops table
+  {
+    oop* const begin = nm->oops_begin();
+    oop* const end = nm->oops_end();
+    for (oop* p = begin; p < end; p++) {
+      log_oops.print("           Oop[" SIZE_FORMAT "] " PTR_FORMAT " (%s)",
+                     (p - begin), p2i(*p), (*p)->klass()->external_name());
+    }
+  }
+
+  // Print nmethod immediate oops
+  {
+    oop** const begin = oops->immediates_begin();
+    oop** const end = oops->immediates_end();
+    for (oop** p = begin; p < end; p++) {
+      log_oops.print("  ImmediateOop[" SIZE_FORMAT "] " PTR_FORMAT " @ " PTR_FORMAT " (%s)",
+                     (p - begin), p2i(**p), p2i(*p), (**p)->klass()->external_name());
+    }
+  }
+}
+
+void ZNMethod::log_unregister(const nmethod* nm) {
+  LogTarget(Debug, gc, nmethod) log;
+  if (!log.is_enabled()) {
+    return;
+  }
+
+  log.print("Unregister NMethod: %s.%s (" PTR_FORMAT ")",
+            nm->method()->method_holder()->external_name(),
+            nm->method()->name()->as_C_string(),
+            p2i(nm));
+}
+
+void ZNMethod::register_nmethod(nmethod* nm) {
+  ResourceMark rm;
+
+  // Create and attach gc data
+  attach_gc_data(nm);
+
+  log_register(nm);
+
+  ZNMethodTable::register_nmethod(nm);
+
+  // Disarm nmethod entry barrier
+  disarm_nmethod(nm);
+}
+
+void ZNMethod::unregister_nmethod(nmethod* nm) {
+  assert(CodeCache_lock->owned_by_self(), "Lock must be held");
+
+  if (Thread::current()->is_Code_cache_sweeper_thread()) {
+    // The sweeper must wait for any ongoing iteration to complete
+    // before it can unregister an nmethod.
+    ZNMethodTable::wait_until_iteration_done();
+  }
+
+  ResourceMark rm;
+
+  log_unregister(nm);
+
+  ZNMethodTable::unregister_nmethod(nm);
+
+  // Destroy and detach gc data
+  detach_gc_data(nm);
+}
+
+void ZNMethod::disarm_nmethod(nmethod* nm) {
+  BarrierSetNMethod* const bs = BarrierSet::barrier_set()->barrier_set_nmethod();
+  if (bs != NULL) {
+    bs->disarm(nm);
+  }
+}
+
+void ZNMethod::nmethod_oops_do(nmethod* nm, OopClosure* cl) {
+  // Process oops table
+  {
+    oop* const begin = nm->oops_begin();
+    oop* const end = nm->oops_end();
+    for (oop* p = begin; p < end; p++) {
+      if (*p != Universe::non_oop_word()) {
+        cl->do_oop(p);
+      }
+    }
+  }
+
+  ZNMethodDataOops* const oops = gc_data(nm)->oops();
+
+  // Process immediate oops
+  {
+    oop** const begin = oops->immediates_begin();
+    oop** const end = oops->immediates_end();
+    for (oop** p = begin; p < end; p++) {
+      if (**p != Universe::non_oop_word()) {
+        cl->do_oop(*p);
+      }
+    }
+  }
+
+  // Process non-immediate oops
+  if (oops->has_non_immediates()) {
+    nm->fix_oop_relocations();
+  }
+}
+
+class ZNMethodToOopsDoClosure : public NMethodClosure {
+private:
+  OopClosure* _cl;
+
+public:
+  ZNMethodToOopsDoClosure(OopClosure* cl) :
+      _cl(cl) {}
+
+  virtual void do_nmethod(nmethod* nm) {
+    ZNMethod::nmethod_oops_do(nm, _cl);
+  }
+};
+
+void ZNMethod::oops_do_begin() {
+  ZNMethodTable::nmethods_do_begin();
+}
+
+void ZNMethod::oops_do_end() {
+  ZNMethodTable::nmethods_do_end();
+}
+
+void ZNMethod::oops_do(OopClosure* cl) {
+  ZNMethodToOopsDoClosure nmethod_cl(cl);
+  ZNMethodTable::nmethods_do(&nmethod_cl);
+}
+
+class ZNMethodUnlinkClosure : public NMethodClosure {
+private:
+  bool          _unloading_occurred;
+  volatile bool _failed;
+
+  void set_failed() {
+    Atomic::store(true, &_failed);
+  }
+
+public:
+  ZNMethodUnlinkClosure(bool unloading_occurred) :
+      _unloading_occurred(unloading_occurred),
+      _failed(false) {}
+
+  virtual void do_nmethod(nmethod* nm) {
+    if (failed()) {
+      return;
+    }
+
+    if (!nm->is_alive()) {
+      return;
+    }
+
+    ZLocker<ZReentrantLock> locker(ZNMethod::lock_for_nmethod(nm));
+
+    if (nm->is_unloading()) {
+      // Unlinking of the dependencies must happen before the
+      // handshake separating unlink and purge.
+      nm->flush_dependencies(false /* delete_immediately */);
+
+      // We don't need to take the lock when unlinking nmethods from
+      // the Method, because it is only concurrently unlinked by
+      // the entry barrier, which acquires the per nmethod lock.
+      nm->unlink_from_method(false /* acquire_lock */);
+      return;
+    }
+
+    // Heal oops and disarm
+    ZNMethodOopClosure cl;
+    ZNMethod::nmethod_oops_do(nm, &cl);
+    ZNMethod::disarm_nmethod(nm);
+
+    // Clear compiled ICs and exception caches
+    if (!nm->unload_nmethod_caches(_unloading_occurred)) {
+      set_failed();
+    }
+  }
+
+  bool failed() const {
+    return Atomic::load(&_failed);
+  }
+};
+
+class ZNMethodUnlinkTask : public ZTask {
+private:
+  ZNMethodUnlinkClosure _cl;
+  ICRefillVerifier*     _verifier;
+
+public:
+  ZNMethodUnlinkTask(bool unloading_occurred, ICRefillVerifier* verifier) :
+      ZTask("ZNMethodUnlinkTask"),
+      _cl(unloading_occurred),
+      _verifier(verifier) {
+    ZNMethodTable::nmethods_do_begin();
+  }
+
+  ~ZNMethodUnlinkTask() {
+    ZNMethodTable::nmethods_do_end();
+  }
+
+  virtual void work() {
+    ICRefillVerifierMark mark(_verifier);
+    ZNMethodTable::nmethods_do(&_cl);
+  }
+
+  bool success() const {
+    return !_cl.failed();
+  }
+};
+
+void ZNMethod::unlink(ZWorkers* workers, bool unloading_occurred) {
+  for (;;) {
+    ICRefillVerifier verifier;
+
+    {
+      ZNMethodUnlinkTask task(unloading_occurred, &verifier);
+      workers->run_concurrent(&task);
+      if (task.success()) {
+        return;
+      }
+    }
+
+    // Cleaning failed because we ran out of transitional IC stubs,
+    // so we have to refill and try again. Refilling requires taking
+    // a safepoint, so we temporarily leave the suspendible thread set.
+    SuspendibleThreadSetLeaver sts;
+    InlineCacheBuffer::refill_ic_stubs();
+  }
+}
+
+class ZNMethodPurgeClosure : public NMethodClosure {
+public:
+  virtual void do_nmethod(nmethod* nm) {
+    if (nm->is_alive() && nm->is_unloading()) {
+      nm->make_unloaded();
+    }
+  }
+};
+
+class ZNMethodPurgeTask : public ZTask {
+private:
+  ZNMethodPurgeClosure _cl;
+
+public:
+  ZNMethodPurgeTask() :
+      ZTask("ZNMethodPurgeTask"),
+      _cl() {
+    ZNMethodTable::nmethods_do_begin();
+  }
+
+  ~ZNMethodPurgeTask() {
+    ZNMethodTable::nmethods_do_end();
+  }
+
+  virtual void work() {
+    ZNMethodTable::nmethods_do(&_cl);
+  }
+};
+
+void ZNMethod::purge(ZWorkers* workers) {
+  ZNMethodPurgeTask task;
+  workers->run_concurrent(&task);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethod.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ */
+
+#ifndef SHARE_GC_Z_ZNMETHOD_HPP
+#define SHARE_GC_Z_ZNMETHOD_HPP
+
+#include "memory/allocation.hpp"
+
+class nmethod;
+class OopClosure;
+class ZReentrantLock;
+class ZWorkers;
+
+class ZNMethod : public AllStatic {
+private:
+  static void attach_gc_data(nmethod* nm);
+  static void detach_gc_data(nmethod* nm);
+
+  static void log_register(const nmethod* nm);
+  static void log_unregister(const nmethod* nm);
+
+public:
+  static void register_nmethod(nmethod* nm);
+  static void unregister_nmethod(nmethod* nm);
+
+  static void disarm_nmethod(nmethod* nm);
+
+  static void nmethod_oops_do(nmethod* nm, OopClosure* cl);
+
+  static void oops_do_begin();
+  static void oops_do_end();
+  static void oops_do(OopClosure* cl);
+
+  static ZReentrantLock* lock_for_nmethod(nmethod* nm);
+
+  static void unlink(ZWorkers* workers, bool unloading_occurred);
+  static void purge(ZWorkers* workers);
+};
+
+#endif // SHARE_GC_Z_ZNMETHOD_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethodAllocator.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,69 @@
+/*
+ * 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 "gc/z/zArray.inline.hpp"
+#include "gc/z/zNMethodAllocator.hpp"
+#include "memory/allocation.hpp"
+
+ZArray<void*> ZNMethodAllocator::_deferred_frees;
+bool          ZNMethodAllocator::_defer_frees(false);
+
+void ZNMethodAllocator::immediate_free(void* data) {
+  FREE_C_HEAP_ARRAY(uint8_t, data);
+}
+
+void ZNMethodAllocator::deferred_free(void* data) {
+  _deferred_frees.add(data);
+}
+
+void* ZNMethodAllocator::allocate(size_t size) {
+  return NEW_C_HEAP_ARRAY(uint8_t, size, mtGC);
+}
+
+void ZNMethodAllocator::free(void* data) {
+  if (data == NULL) {
+    return;
+  }
+
+  if (_defer_frees) {
+    deferred_free(data);
+  } else {
+    immediate_free(data);
+  }
+}
+
+void ZNMethodAllocator::activate_deferred_frees() {
+  assert(_deferred_frees.is_empty(), "precondition");
+  _defer_frees = true;
+}
+
+void ZNMethodAllocator::deactivate_and_process_deferred_frees() {
+  _defer_frees = false;
+
+  ZArrayIterator<void*> iter(&_deferred_frees);
+  for (void* data; iter.next(&data);) {
+    immediate_free(data);
+  }
+  _deferred_frees.clear();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethodAllocator.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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.
+ */
+
+#ifndef SHARE_GC_Z_ZNMETHODALLOCATOR_HPP
+#define SHARE_GC_Z_ZNMETHODALLOCATOR_HPP
+
+#include "memory/allocation.hpp"
+#include "gc/z/zArray.hpp"
+
+class ZNMethodAllocator : public AllStatic {
+private:
+  static ZArray<void*> _deferred_frees;
+  static bool          _defer_frees;
+
+  static void immediate_free(void* data);
+  static void deferred_free(void* data);
+
+public:
+  static void* allocate(size_t size);
+  static void free(void* data);
+
+  static void activate_deferred_frees();
+  static void deactivate_and_process_deferred_frees();
+};
+
+#endif // SHARE_GC_Z_ZNMETHODALLOCATOR_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethodData.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,103 @@
+/*
+ * 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/zLock.inline.hpp"
+#include "gc/z/zNMethodAllocator.hpp"
+#include "gc/z/zNMethodData.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/atomic.hpp"
+#include "runtime/orderAccess.hpp"
+#include "utilities/align.hpp"
+#include "utilities/debug.hpp"
+#include "utilities/growableArray.hpp"
+
+size_t ZNMethodDataOops::header_size() {
+  const size_t size = sizeof(ZNMethodDataOops);
+  assert(is_aligned(size, sizeof(oop*)), "Header misaligned");
+  return size;
+}
+
+ZNMethodDataOops* ZNMethodDataOops::create(const GrowableArray<oop*>& immediates, bool has_non_immediates) {
+  // Allocate memory for the ZNMethodDataOops object
+  // plus the immediate oop* array that follows right after.
+  const size_t size = ZNMethodDataOops::header_size() + (sizeof(oop*) * immediates.length());
+  void* const mem = ZNMethodAllocator::allocate(size);
+  return ::new (mem) ZNMethodDataOops(immediates, has_non_immediates);
+}
+
+void ZNMethodDataOops::destroy(ZNMethodDataOops* oops) {
+  ZNMethodAllocator::free(oops);
+}
+
+ZNMethodDataOops::ZNMethodDataOops(const GrowableArray<oop*>& immediates, bool has_non_immediates) :
+    _nimmediates(immediates.length()),
+    _has_non_immediates(has_non_immediates) {
+  // Save all immediate oops
+  for (size_t i = 0; i < _nimmediates; i++) {
+    immediates_begin()[i] = immediates.at(i);
+  }
+}
+
+size_t ZNMethodDataOops::immediates_count() const {
+  return _nimmediates;
+}
+
+oop** ZNMethodDataOops::immediates_begin() const {
+  // The immediate oop* array starts immediately after this object
+  return (oop**)((uintptr_t)this + header_size());
+}
+
+oop** ZNMethodDataOops::immediates_end() const {
+  return immediates_begin() + immediates_count();
+}
+
+bool ZNMethodDataOops::has_non_immediates() const {
+  return _has_non_immediates;
+}
+
+ZNMethodData* ZNMethodData::create(nmethod* nm) {
+  void* const mem = ZNMethodAllocator::allocate(sizeof(ZNMethodData));
+  return ::new (mem) ZNMethodData(nm);
+}
+
+void ZNMethodData::destroy(ZNMethodData* data) {
+  ZNMethodAllocator::free(data->oops());
+  ZNMethodAllocator::free(data);
+}
+
+ZNMethodData::ZNMethodData(nmethod* nm) :
+    _lock(),
+    _oops(NULL) {}
+
+ZReentrantLock* ZNMethodData::lock() {
+  return &_lock;
+}
+
+ZNMethodDataOops* ZNMethodData::oops() const {
+  return OrderAccess::load_acquire(&_oops);
+}
+
+ZNMethodDataOops* ZNMethodData::swap_oops(ZNMethodDataOops* new_oops) {
+  return Atomic::xchg(new_oops, &_oops);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethodData.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,71 @@
+/*
+ * 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 "gc/z/zLock.hpp"
+#include "oops/oopsHierarchy.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+#ifndef SHARE_GC_Z_ZNMETHODDATA_HPP
+#define SHARE_GC_Z_ZNMETHODDATA_HPP
+
+class nmethod;
+template <typename T> class GrowableArray;
+
+class ZNMethodDataOops {
+private:
+  const size_t _nimmediates;
+  bool         _has_non_immediates;
+
+  static size_t header_size();
+
+  ZNMethodDataOops(const GrowableArray<oop*>& immediates, bool has_non_immediates);
+
+public:
+  static ZNMethodDataOops* create(const GrowableArray<oop*>& immediates, bool has_non_immediates);
+  static void destroy(ZNMethodDataOops* oops);
+
+  size_t immediates_count() const;
+  oop** immediates_begin() const;
+  oop** immediates_end() const;
+
+  bool has_non_immediates() const;
+};
+
+class ZNMethodData {
+private:
+  ZReentrantLock             _lock;
+  ZNMethodDataOops* volatile _oops;
+
+  ZNMethodData(nmethod* nm);
+
+public:
+  static ZNMethodData* create(nmethod* nm);
+  static void destroy(ZNMethodData* data);
+
+  ZReentrantLock* lock();
+
+  ZNMethodDataOops* oops() const;
+  ZNMethodDataOops* swap_oops(ZNMethodDataOops* oops);
+};
+
+#endif // SHARE_GC_Z_ZNMETHODDATA_HPP
--- a/src/hotspot/share/gc/z/zNMethodTable.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zNMethodTable.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,205 +27,38 @@
 #include "code/icBuffer.hpp"
 #include "gc/shared/barrierSet.hpp"
 #include "gc/shared/barrierSetNMethod.hpp"
-#include "gc/z/zArray.inline.hpp"
 #include "gc/z/zGlobals.hpp"
 #include "gc/z/zHash.inline.hpp"
 #include "gc/z/zLock.inline.hpp"
+#include "gc/z/zNMethodAllocator.hpp"
+#include "gc/z/zNMethodData.hpp"
 #include "gc/z/zNMethodTable.hpp"
+#include "gc/z/zNMethodTableEntry.hpp"
+#include "gc/z/zNMethodTableIteration.hpp"
 #include "gc/z/zOopClosures.inline.hpp"
 #include "gc/z/zTask.hpp"
 #include "gc/z/zWorkers.hpp"
 #include "logging/log.hpp"
-#include "memory/allocation.inline.hpp"
+#include "memory/allocation.hpp"
+#include "memory/iterator.hpp"
 #include "memory/resourceArea.hpp"
 #include "runtime/atomic.hpp"
 #include "runtime/orderAccess.hpp"
-#include "runtime/os.hpp"
 #include "utilities/debug.hpp"
 
-class ZNMethodDataImmediateOops {
-private:
-  const size_t _nimmediate_oops;
-
-  static size_t header_size();
-
-  ZNMethodDataImmediateOops(const GrowableArray<oop*>& immediate_oops);
-
-public:
-  static ZNMethodDataImmediateOops* create(const GrowableArray<oop*>& immediate_oops);
-  static void destroy(ZNMethodDataImmediateOops* data_immediate_oops);
-
-  size_t immediate_oops_count() const;
-  oop** immediate_oops_begin() const;
-  oop** immediate_oops_end() const;
-};
-
-size_t ZNMethodDataImmediateOops::header_size() {
-  const size_t size = sizeof(ZNMethodDataImmediateOops);
-  assert(is_aligned(size, sizeof(oop*)), "Header misaligned");
-  return size;
-}
-
-ZNMethodDataImmediateOops* ZNMethodDataImmediateOops::create(const GrowableArray<oop*>& immediate_oops) {
-  // Allocate memory for the ZNMethodDataImmediateOops object
-  // plus the immediate oop* array that follows right after.
-  const size_t size = ZNMethodDataImmediateOops::header_size() + (sizeof(oop*) * immediate_oops.length());
-  void* const data_immediate_oops = NEW_C_HEAP_ARRAY(uint8_t, size, mtGC);
-  return ::new (data_immediate_oops) ZNMethodDataImmediateOops(immediate_oops);
-}
-
-void ZNMethodDataImmediateOops::destroy(ZNMethodDataImmediateOops* data_immediate_oops) {
-  ZNMethodTable::safe_delete(data_immediate_oops);
-}
-
-ZNMethodDataImmediateOops::ZNMethodDataImmediateOops(const GrowableArray<oop*>& immediate_oops) :
-    _nimmediate_oops(immediate_oops.length()) {
-  // Save all immediate oops
-  for (size_t i = 0; i < _nimmediate_oops; i++) {
-    immediate_oops_begin()[i] = immediate_oops.at(i);
-  }
-}
-
-size_t ZNMethodDataImmediateOops::immediate_oops_count() const {
-  return _nimmediate_oops;
-}
-
-oop** ZNMethodDataImmediateOops::immediate_oops_begin() const {
-  // The immediate oop* array starts immediately after this object
-  return (oop**)((uintptr_t)this + header_size());
-}
-
-oop** ZNMethodDataImmediateOops::immediate_oops_end() const {
-  return immediate_oops_begin() + immediate_oops_count();
-}
-
-class ZNMethodData {
-private:
-  ZReentrantLock                      _lock;
-  ZNMethodDataImmediateOops* volatile _immediate_oops;
-
-  ZNMethodData(nmethod* nm);
-
-public:
-  static ZNMethodData* create(nmethod* nm);
-  static void destroy(ZNMethodData* data);
-
-  ZReentrantLock* lock();
-
-  ZNMethodDataImmediateOops* immediate_oops() const;
-  ZNMethodDataImmediateOops* swap_immediate_oops(const GrowableArray<oop*>& immediate_oops);
-};
-
-ZNMethodData* ZNMethodData::create(nmethod* nm) {
-  void* const method = NEW_C_HEAP_ARRAY(uint8_t, sizeof(ZNMethodData), mtGC);
-  return ::new (method) ZNMethodData(nm);
-}
-
-void ZNMethodData::destroy(ZNMethodData* data) {
-  ZNMethodDataImmediateOops::destroy(data->immediate_oops());
-  ZNMethodTable::safe_delete(data);
-}
-
-ZNMethodData::ZNMethodData(nmethod* nm) :
-    _lock(),
-    _immediate_oops(NULL) {}
-
-ZReentrantLock* ZNMethodData::lock() {
-  return &_lock;
-}
-
-ZNMethodDataImmediateOops* ZNMethodData::immediate_oops() const {
-  return OrderAccess::load_acquire(&_immediate_oops);
-}
-
-ZNMethodDataImmediateOops* ZNMethodData::swap_immediate_oops(const GrowableArray<oop*>& immediate_oops) {
-  ZNMethodDataImmediateOops* const data_immediate_oops =
-    immediate_oops.is_empty() ? NULL : ZNMethodDataImmediateOops::create(immediate_oops);
-  return Atomic::xchg(data_immediate_oops, &_immediate_oops);
-}
-
-static ZNMethodData* gc_data(const nmethod* nm) {
-  return nm->gc_data<ZNMethodData>();
-}
-
-static void set_gc_data(nmethod* nm, ZNMethodData* data) {
-  return nm->set_gc_data<ZNMethodData>(data);
-}
-
 ZNMethodTableEntry* ZNMethodTable::_table = NULL;
 size_t ZNMethodTable::_size = 0;
-ZLock ZNMethodTable::_iter_lock;
-ZNMethodTableEntry* ZNMethodTable::_iter_table = NULL;
-size_t ZNMethodTable::_iter_table_size = 0;
-ZArray<void*> ZNMethodTable::_iter_deferred_deletes;
 size_t ZNMethodTable::_nregistered = 0;
 size_t ZNMethodTable::_nunregistered = 0;
-volatile size_t ZNMethodTable::_claimed = 0;
-
-void ZNMethodTable::safe_delete(void* data) {
-  if (data == NULL) {
-    return;
-  }
+ZNMethodTableIteration ZNMethodTable::_iteration;
 
-  ZLocker<ZLock> locker(&_iter_lock);
-  if (_iter_table != NULL) {
-    // Iteration in progress, defer delete
-    _iter_deferred_deletes.add(data);
-  } else {
-    // Iteration not in progress, delete now
-    FREE_C_HEAP_ARRAY(uint8_t, data);
-  }
+ZNMethodTableEntry* ZNMethodTable::create(size_t size) {
+  void* const mem = ZNMethodAllocator::allocate(size * sizeof(ZNMethodTableEntry));
+  return ::new (mem) ZNMethodTableEntry[size];
 }
 
-ZNMethodTableEntry ZNMethodTable::create_entry(nmethod* nm) {
-  GrowableArray<oop*> immediate_oops;
-  bool non_immediate_oops = false;
-
-  // Find all oops relocations
-  RelocIterator iter(nm);
-  while (iter.next()) {
-    if (iter.type() != relocInfo::oop_type) {
-      // Not an oop
-      continue;
-    }
-
-    oop_Relocation* r = iter.oop_reloc();
-
-    if (!r->oop_is_immediate()) {
-      // Non-immediate oop found
-      non_immediate_oops = true;
-      continue;
-    }
-
-    if (r->oop_value() != NULL) {
-      // Non-NULL immediate oop found. NULL oops can safely be
-      // ignored since the method will be re-registered if they
-      // are later patched to be non-NULL.
-      immediate_oops.push(r->oop_addr());
-    }
-  }
-
-  // Attach GC data to nmethod
-  ZNMethodData* data = gc_data(nm);
-  if (data == NULL) {
-    data = ZNMethodData::create(nm);
-    set_gc_data(nm, data);
-  }
-
-  // Attach immediate oops in GC data
-  ZNMethodDataImmediateOops* const old_data_immediate_oops = data->swap_immediate_oops(immediate_oops);
-  ZNMethodDataImmediateOops::destroy(old_data_immediate_oops);
-
-  // Create entry
-  return ZNMethodTableEntry(nm, non_immediate_oops, !immediate_oops.is_empty());
-}
-
-ZReentrantLock* ZNMethodTable::lock_for_nmethod(nmethod* nm) {
-  ZNMethodData* const data = gc_data(nm);
-  if (data == NULL) {
-    return NULL;
-  }
-  return data->lock();
+void ZNMethodTable::destroy(ZNMethodTableEntry* table) {
+  ZNMethodAllocator::free(table);
 }
 
 size_t ZNMethodTable::first_index(const nmethod* nm, size_t size) {
@@ -241,8 +74,8 @@
   return (prev_index + 1) & mask;
 }
 
-bool ZNMethodTable::register_entry(ZNMethodTableEntry* table, size_t size, ZNMethodTableEntry entry) {
-  const nmethod* const nm = entry.method();
+bool ZNMethodTable::register_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm) {
+  const ZNMethodTableEntry entry(nm);
   size_t index = first_index(nm, size);
 
   for (;;) {
@@ -265,11 +98,6 @@
 }
 
 void ZNMethodTable::unregister_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm) {
-  if (size == 0) {
-    // Table is empty
-    return;
-  }
-
   size_t index = first_index(nm, size);
 
   for (;;) {
@@ -279,10 +107,6 @@
     if (table_entry.registered() && table_entry.method() == nm) {
       // Remove entry
       table[index] = ZNMethodTableEntry(true /* unregistered */);
-
-      // Destroy GC data
-      ZNMethodData::destroy(gc_data(nm));
-      set_gc_data(nm, NULL);
       return;
     }
 
@@ -291,7 +115,8 @@
 }
 
 void ZNMethodTable::rebuild(size_t new_size) {
-  ZLocker<ZLock> locker(&_iter_lock);
+  assert(CodeCache_lock->owned_by_self(), "Lock must be held");
+
   assert(is_power_of_2(new_size), "Invalid size");
 
   log_debug(gc, nmethod)("Rebuilding NMethod Table: "
@@ -303,20 +128,18 @@
                          _nunregistered, percent_of(_nunregistered, _size), 0.0);
 
   // Allocate new table
-  ZNMethodTableEntry* const new_table = new ZNMethodTableEntry[new_size];
+  ZNMethodTableEntry* const new_table = ZNMethodTable::create(new_size);
 
   // Transfer all registered entries
   for (size_t i = 0; i < _size; i++) {
     const ZNMethodTableEntry entry = _table[i];
     if (entry.registered()) {
-      register_entry(new_table, new_size, entry);
+      register_entry(new_table, new_size, entry.method());
     }
   }
 
-  if (_iter_table != _table) {
-    // Delete old table
-    delete [] _table;
-  }
+  // Free old table
+  ZNMethodTable::destroy(_table);
 
   // Install new table
   _table = new_table;
@@ -353,61 +176,6 @@
   }
 }
 
-void ZNMethodTable::log_register(const nmethod* nm, ZNMethodTableEntry entry) {
-  LogTarget(Trace, gc, nmethod) log;
-  if (!log.is_enabled()) {
-    return;
-  }
-
-  log.print("Register NMethod: %s.%s (" PTR_FORMAT "), "
-            "Compiler: %s, Oops: %d, ImmediateOops: " SIZE_FORMAT ", NonImmediateOops: %s",
-            nm->method()->method_holder()->external_name(),
-            nm->method()->name()->as_C_string(),
-            p2i(nm),
-            nm->compiler_name(),
-            nm->oops_count() - 1,
-            entry.immediate_oops() ? gc_data(nm)->immediate_oops()->immediate_oops_count() : 0,
-            entry.non_immediate_oops() ? "Yes" : "No");
-
-  LogTarget(Trace, gc, nmethod, oops) log_oops;
-  if (!log_oops.is_enabled()) {
-    return;
-  }
-
-  // Print nmethod oops table
-  oop* const begin = nm->oops_begin();
-  oop* const end = nm->oops_end();
-  for (oop* p = begin; p < end; p++) {
-    log_oops.print("           Oop[" SIZE_FORMAT "] " PTR_FORMAT " (%s)",
-                   (p - begin), p2i(*p), (*p)->klass()->external_name());
-  }
-
-  if (entry.immediate_oops()) {
-    // Print nmethod immediate oops
-    const ZNMethodDataImmediateOops* const nmi = gc_data(nm)->immediate_oops();
-    if (nmi != NULL) {
-      oop** const begin = nmi->immediate_oops_begin();
-      oop** const end = nmi->immediate_oops_end();
-      for (oop** p = begin; p < end; p++) {
-        log_oops.print("  ImmediateOop[" SIZE_FORMAT "] " PTR_FORMAT " @ " PTR_FORMAT " (%s)",
-                       (p - begin), p2i(**p), p2i(*p), (**p)->klass()->external_name());
-      }
-    }
-  }
-}
-
-void ZNMethodTable::log_unregister(const nmethod* nm) {
-  LogTarget(Debug, gc, nmethod) log;
-  if (!log.is_enabled()) {
-    return;
-  }
-
-  log.print("Unregister NMethod: %s.%s (" PTR_FORMAT ")",
-            nm->method()->method_holder()->external_name(),
-            nm->method()->name()->as_C_string(),
-            p2i(nm));
-}
-
 size_t ZNMethodTable::registered_nmethods() {
   return _nregistered;
 }
@@ -418,48 +186,29 @@
 
 void ZNMethodTable::register_nmethod(nmethod* nm) {
   assert(CodeCache_lock->owned_by_self(), "Lock must be held");
-  ResourceMark rm;
 
   // Grow/Shrink/Prune table if needed
   rebuild_if_needed();
 
-  // Create entry
-  const ZNMethodTableEntry entry = create_entry(nm);
-
-  log_register(nm, entry);
-
   // Insert new entry
-  if (register_entry(_table, _size, entry)) {
+  if (register_entry(_table, _size, nm)) {
     // New entry registered. When register_entry() instead returns
     // false the nmethod was already in the table so we do not want
     // to increase number of registered entries in that case.
     _nregistered++;
   }
-
-  // Disarm nmethod entry barrier
-  disarm_nmethod(nm);
 }
 
-void ZNMethodTable::sweeper_wait_for_iteration() {
-  // The sweeper must wait for any ongoing iteration to complete
-  // before it can unregister an nmethod.
-  if (!Thread::current()->is_Code_cache_sweeper_thread()) {
-    return;
-  }
+void ZNMethodTable::wait_until_iteration_done() {
+  assert(CodeCache_lock->owned_by_self(), "Lock must be held");
 
-  while (_iter_table != NULL) {
-    MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
-    os::naked_short_sleep(1);
+  while (_iteration.in_progress()) {
+    CodeCache_lock->wait(Monitor::_no_safepoint_check_flag);
   }
 }
 
 void ZNMethodTable::unregister_nmethod(nmethod* nm) {
   assert(CodeCache_lock->owned_by_self(), "Lock must be held");
-  ResourceMark rm;
-
-  sweeper_wait_for_iteration();
-
-  log_unregister(nm);
 
   // Remove entry
   unregister_entry(_table, _size, nm);
@@ -467,248 +216,29 @@
   _nregistered--;
 }
 
-void ZNMethodTable::disarm_nmethod(nmethod* nm) {
-  BarrierSetNMethod* const bs = BarrierSet::barrier_set()->barrier_set_nmethod();
-  if (bs != NULL) {
-    bs->disarm(nm);
-  }
-}
+void ZNMethodTable::nmethods_do_begin() {
+  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 
-void ZNMethodTable::nmethod_entries_do_begin() {
-  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
-  ZLocker<ZLock> locker(&_iter_lock);
+  // Make sure we don't free data while iterating
+  ZNMethodAllocator::activate_deferred_frees();
 
   // Prepare iteration
-  _iter_table = _table;
-  _iter_table_size = _size;
-  _claimed = 0;
-  assert(_iter_deferred_deletes.is_empty(), "Should be emtpy");
-}
-
-void ZNMethodTable::nmethod_entries_do_end() {
-  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
-  ZLocker<ZLock> locker(&_iter_lock);
-
-  // Finish iteration
-  if (_iter_table != _table) {
-    delete [] _iter_table;
-  }
-  _iter_table = NULL;
-  assert(_claimed >= _iter_table_size, "Failed to claim all table entries");
-
-  // Process deferred deletes
-  ZArrayIterator<void*> iter(&_iter_deferred_deletes);
-  for (void* data; iter.next(&data);) {
-    FREE_C_HEAP_ARRAY(uint8_t, data);
-  }
-  _iter_deferred_deletes.clear();
-}
-
-void ZNMethodTable::entry_oops_do(ZNMethodTableEntry entry, OopClosure* cl) {
-  nmethod* const nm = entry.method();
-
-  // Process oops table
-  oop* const begin = nm->oops_begin();
-  oop* const end = nm->oops_end();
-  for (oop* p = begin; p < end; p++) {
-    if (*p != Universe::non_oop_word()) {
-      cl->do_oop(p);
-    }
-  }
-
-  // Process immediate oops
-  if (entry.immediate_oops()) {
-    const ZNMethodDataImmediateOops* const nmi = gc_data(nm)->immediate_oops();
-    if (nmi != NULL) {
-      oop** const begin = nmi->immediate_oops_begin();
-      oop** const end = nmi->immediate_oops_end();
-      for (oop** p = begin; p < end; p++) {
-        if (**p != Universe::non_oop_word()) {
-          cl->do_oop(*p);
-        }
-      }
-    }
-  }
-
-  // Process non-immediate oops
-  if (entry.non_immediate_oops()) {
-    nmethod* const nm = entry.method();
-    nm->fix_oop_relocations();
-  }
-}
-
-class ZNMethodTableEntryToOopsDo : public ZNMethodTableEntryClosure {
-private:
-  OopClosure* _cl;
-
-public:
-  ZNMethodTableEntryToOopsDo(OopClosure* cl) :
-      _cl(cl) {}
-
-  void do_nmethod_entry(ZNMethodTableEntry entry) {
-    ZNMethodTable::entry_oops_do(entry, _cl);
-  }
-};
-
-void ZNMethodTable::oops_do(OopClosure* cl) {
-  ZNMethodTableEntryToOopsDo entry_cl(cl);
-  nmethod_entries_do(&entry_cl);
-}
-
-void ZNMethodTable::nmethod_entries_do(ZNMethodTableEntryClosure* cl) {
-  for (;;) {
-    // Claim table partition. Each partition is currently sized to span
-    // two cache lines. This number is just a guess, but seems to work well.
-    const size_t partition_size = (ZCacheLineSize * 2) / sizeof(ZNMethodTableEntry);
-    const size_t partition_start = MIN2(Atomic::add(partition_size, &_claimed) - partition_size, _iter_table_size);
-    const size_t partition_end = MIN2(partition_start + partition_size, _iter_table_size);
-    if (partition_start == partition_end) {
-      // End of table
-      break;
-    }
-
-    // Process table partition
-    for (size_t i = partition_start; i < partition_end; i++) {
-      const ZNMethodTableEntry entry = _iter_table[i];
-      if (entry.registered()) {
-        cl->do_nmethod_entry(entry);
-      }
-    }
-  }
+  _iteration.nmethods_do_begin(_table, _size);
 }
 
-class ZNMethodTableUnlinkClosure : public ZNMethodTableEntryClosure {
-private:
-  bool          _unloading_occurred;
-  volatile bool _failed;
-
-  void set_failed() {
-    Atomic::store(true, &_failed);
-  }
-
-public:
-  ZNMethodTableUnlinkClosure(bool unloading_occurred) :
-      _unloading_occurred(unloading_occurred),
-      _failed(false) {}
-
-  virtual void do_nmethod_entry(ZNMethodTableEntry entry) {
-    if (failed()) {
-      return;
-    }
-
-    nmethod* const nm = entry.method();
-    if (!nm->is_alive()) {
-      return;
-    }
+void ZNMethodTable::nmethods_do_end() {
+  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 
-    ZLocker<ZReentrantLock> locker(ZNMethodTable::lock_for_nmethod(nm));
-
-    if (nm->is_unloading()) {
-      // Unlinking of the dependencies must happen before the
-      // handshake separating unlink and purge.
-      nm->flush_dependencies(false /* delete_immediately */);
-
-      // We don't need to take the lock when unlinking nmethods from
-      // the Method, because it is only concurrently unlinked by
-      // the entry barrier, which acquires the per nmethod lock.
-      nm->unlink_from_method(false /* acquire_lock */);
-      return;
-    }
-
-    // Heal oops and disarm
-    ZNMethodOopClosure cl;
-    ZNMethodTable::entry_oops_do(entry, &cl);
-    ZNMethodTable::disarm_nmethod(nm);
-
-    // Clear compiled ICs and exception caches
-    if (!nm->unload_nmethod_caches(_unloading_occurred)) {
-      set_failed();
-    }
-  }
+  // Finish iteration
+  _iteration.nmethods_do_end();
 
-  bool failed() const {
-    return Atomic::load(&_failed);
-  }
-};
-
-class ZNMethodTableUnlinkTask : public ZTask {
-private:
-  ZNMethodTableUnlinkClosure _cl;
-  ICRefillVerifier*          _verifier;
-
-public:
-  ZNMethodTableUnlinkTask(bool unloading_occurred, ICRefillVerifier* verifier) :
-      ZTask("ZNMethodTableUnlinkTask"),
-      _cl(unloading_occurred),
-      _verifier(verifier) {
-    ZNMethodTable::nmethod_entries_do_begin();
-  }
-
-  ~ZNMethodTableUnlinkTask() {
-    ZNMethodTable::nmethod_entries_do_end();
-  }
+  // Process deferred frees
+  ZNMethodAllocator::deactivate_and_process_deferred_frees();
 
-  virtual void work() {
-    ICRefillVerifierMark mark(_verifier);
-    ZNMethodTable::nmethod_entries_do(&_cl);
-  }
-
-  bool success() const {
-    return !_cl.failed();
-  }
-};
-
-void ZNMethodTable::unlink(ZWorkers* workers, bool unloading_occurred) {
-  for (;;) {
-    ICRefillVerifier verifier;
-
-    {
-      ZNMethodTableUnlinkTask task(unloading_occurred, &verifier);
-      workers->run_concurrent(&task);
-      if (task.success()) {
-        return;
-      }
-    }
-
-    // Cleaning failed because we ran out of transitional IC stubs,
-    // so we have to refill and try again. Refilling requires taking
-    // a safepoint, so we temporarily leave the suspendible thread set.
-    SuspendibleThreadSetLeaver sts;
-    InlineCacheBuffer::refill_ic_stubs();
-  }
+  // Notify iteration done
+  CodeCache_lock->notify_all();
 }
 
-class ZNMethodTablePurgeClosure : public ZNMethodTableEntryClosure {
-public:
-  virtual void do_nmethod_entry(ZNMethodTableEntry entry) {
-    nmethod* const nm = entry.method();
-    if (nm->is_alive() && nm->is_unloading()) {
-      nm->make_unloaded();
-    }
-  }
-};
-
-class ZNMethodTablePurgeTask : public ZTask {
-private:
-  ZNMethodTablePurgeClosure _cl;
-
-public:
-  ZNMethodTablePurgeTask() :
-      ZTask("ZNMethodTablePurgeTask"),
-      _cl() {
-    ZNMethodTable::nmethod_entries_do_begin();
-  }
-
-  ~ZNMethodTablePurgeTask() {
-    ZNMethodTable::nmethod_entries_do_end();
-  }
-
-  virtual void work() {
-    ZNMethodTable::nmethod_entries_do(&_cl);
-  }
-};
-
-void ZNMethodTable::purge(ZWorkers* workers) {
-  ZNMethodTablePurgeTask task;
-  workers->run_concurrent(&task);
+void ZNMethodTable::nmethods_do(NMethodClosure* cl) {
+  _iteration.nmethods_do(cl);
 }
--- a/src/hotspot/share/gc/z/zNMethodTable.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zNMethodTable.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,66 +24,46 @@
 #ifndef SHARE_GC_Z_ZNMETHODTABLE_HPP
 #define SHARE_GC_Z_ZNMETHODTABLE_HPP
 
-#include "gc/z/zArray.hpp"
-#include "gc/z/zGlobals.hpp"
-#include "gc/z/zLock.hpp"
-#include "gc/z/zNMethodTableEntry.hpp"
+#include "gc/z/zNMethodTableIteration.hpp"
 #include "memory/allocation.hpp"
 
+class nmethod;
+class NMethodClosure;
+class ZNMethodTableEntry;
 class ZWorkers;
 
-class ZNMethodTableEntryClosure {
-public:
-  virtual void do_nmethod_entry(ZNMethodTableEntry entry) = 0;
-};
-
 class ZNMethodTable : public AllStatic {
 private:
-  static ZNMethodTableEntry* _table;
-  static size_t              _size;
-  static ZLock               _iter_lock;
-  static ZNMethodTableEntry* _iter_table;
-  static size_t              _iter_table_size;
-  static ZArray<void*>       _iter_deferred_deletes;
-  static size_t              _nregistered;
-  static size_t              _nunregistered;
-  static volatile size_t     _claimed ATTRIBUTE_ALIGNED(ZCacheLineSize);
+  static ZNMethodTableEntry*    _table;
+  static size_t                 _size;
+  static size_t                 _nregistered;
+  static size_t                 _nunregistered;
+  static ZNMethodTableIteration _iteration;
 
-  static ZNMethodTableEntry create_entry(nmethod* nm);
+  static ZNMethodTableEntry* create(size_t size);
+  static void destroy(ZNMethodTableEntry* table);
 
   static size_t first_index(const nmethod* nm, size_t size);
   static size_t next_index(size_t prev_index, size_t size);
 
-  static void sweeper_wait_for_iteration();
-
-  static bool register_entry(ZNMethodTableEntry* table, size_t size, ZNMethodTableEntry entry);
+  static bool register_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm);
   static void unregister_entry(ZNMethodTableEntry* table, size_t size, nmethod* nm);
 
   static void rebuild(size_t new_size);
   static void rebuild_if_needed();
 
-  static void log_register(const nmethod* nm, ZNMethodTableEntry entry);
-  static void log_unregister(const nmethod* nm);
-
 public:
-  static void safe_delete(void* data);
-
   static size_t registered_nmethods();
   static size_t unregistered_nmethods();
 
   static void register_nmethod(nmethod* nm);
   static void unregister_nmethod(nmethod* nm);
-  static void disarm_nmethod(nmethod* nm);
 
-  static ZReentrantLock* lock_for_nmethod(nmethod* nm);
-
-  static void oops_do(OopClosure* cl);
+  static void wait_until_iteration_done();
 
-  static void entry_oops_do(ZNMethodTableEntry entry, OopClosure* cl);
-
-  static void nmethod_entries_do_begin();
-  static void nmethod_entries_do_end();
-  static void nmethod_entries_do(ZNMethodTableEntryClosure* cl);
+  static void nmethods_do_begin();
+  static void nmethods_do_end();
+  static void nmethods_do(NMethodClosure* cl);
 
   static void unlink(ZWorkers* workers, bool unloading_occurred);
   static void purge(ZWorkers* workers);
--- a/src/hotspot/share/gc/z/zNMethodTableEntry.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zNMethodTableEntry.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -32,16 +32,16 @@
 // --------------------------
 //
 //   6
-//   3                                                                  3 2 1 0
-//  +--------------------------------------------------------------------+-+-+-+
-//  |11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111|1|1|1|
-//  +--------------------------------------------------------------------+-+-+-+
-//  |                                                                    | | |
-//  |                               2-2 Non-immediate Oops Flag (1-bits) * | |
-//  |                                                                      | |
-//  |                        1-1 Immediate Oops/Unregistered Flag (1-bits) * |
-//  |                                                                        |
-//  |                                           0-0 Registered Flag (1-bits) *
+//   3                                                                   2 1 0
+//  +---------------------------------------------------------------------+-+-+
+//  |11111111 11111111 11111111 11111111 11111111 11111111 11111111 111111|1|1|
+//  +---------------------------------------------------------------------+-+-+
+//  |                                                                     | |
+//  |                                                                     | |
+//  |                                                                     | |
+//  |                                      1-1 Unregistered Flag (1-bits) * |
+//  |                                                                       |
+//  |                                          0-0 Registered Flag (1-bits) *
 //  |
 //  * 63-3 NMethod Address (61-bits)
 //
@@ -52,22 +52,20 @@
 private:
   typedef ZBitField<uint64_t, bool,     0,  1>    field_registered;
   typedef ZBitField<uint64_t, bool,     1,  1>    field_unregistered;
-  typedef ZBitField<uint64_t, bool,     1,  1>    field_immediate_oops;
-  typedef ZBitField<uint64_t, bool,     2,  1>    field_non_immediate_oops;
-  typedef ZBitField<uint64_t, nmethod*, 3, 61, 3> field_method;
+  typedef ZBitField<uint64_t, nmethod*, 2, 62, 2> field_method;
 
   uint64_t _entry;
 
 public:
   explicit ZNMethodTableEntry(bool unregistered = false) :
-      _entry(field_unregistered::encode(unregistered) |
-             field_registered::encode(false)) {}
+      _entry(field_registered::encode(false) |
+             field_unregistered::encode(unregistered) |
+             field_method::encode(NULL)) {}
 
-  ZNMethodTableEntry(nmethod* method, bool non_immediate_oops, bool immediate_oops) :
-      _entry(field_method::encode(method) |
-             field_non_immediate_oops::encode(non_immediate_oops) |
-             field_immediate_oops::encode(immediate_oops) |
-             field_registered::encode(true)) {}
+  explicit ZNMethodTableEntry(nmethod* method) :
+      _entry(field_registered::encode(true) |
+             field_unregistered::encode(false) |
+             field_method::encode(method)) {}
 
   bool registered() const {
     return field_registered::decode(_entry);
@@ -77,14 +75,6 @@
     return field_unregistered::decode(_entry);
   }
 
-  bool immediate_oops() const {
-    return field_immediate_oops::decode(_entry);
-  }
-
-  bool non_immediate_oops() const {
-    return field_non_immediate_oops::decode(_entry);
-  }
-
   nmethod* method() const {
     return field_method::decode(_entry);
   }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethodTableIteration.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,76 @@
+/*
+ * 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/zNMethodTableEntry.hpp"
+#include "gc/z/zNMethodTableIteration.hpp"
+#include "memory/iterator.hpp"
+#include "runtime/atomic.hpp"
+#include "utilities/debug.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+ZNMethodTableIteration::ZNMethodTableIteration() :
+    _table(NULL),
+    _size(0),
+    _claimed(0) {}
+
+bool ZNMethodTableIteration::in_progress() const {
+  return _table != NULL;
+}
+
+void ZNMethodTableIteration::nmethods_do_begin(ZNMethodTableEntry* table, size_t size) {
+  assert(!in_progress(), "precondition");
+
+  _table = table;
+  _size = size;
+  _claimed = 0;
+}
+
+void ZNMethodTableIteration::nmethods_do_end() {
+  assert(_claimed >= _size, "Failed to claim all table entries");
+
+  // Finish iteration
+  _table = NULL;
+}
+
+void ZNMethodTableIteration::nmethods_do(NMethodClosure* cl) {
+  for (;;) {
+    // Claim table partition. Each partition is currently sized to span
+    // two cache lines. This number is just a guess, but seems to work well.
+    const size_t partition_size = (ZCacheLineSize * 2) / sizeof(ZNMethodTableEntry);
+    const size_t partition_start = MIN2(Atomic::add(partition_size, &_claimed) - partition_size, _size);
+    const size_t partition_end = MIN2(partition_start + partition_size, _size);
+    if (partition_start == partition_end) {
+      // End of table
+      break;
+    }
+
+    // Process table partition
+    for (size_t i = partition_start; i < partition_end; i++) {
+      const ZNMethodTableEntry entry = _table[i];
+      if (entry.registered()) {
+        cl->do_nmethod(entry.method());
+      }
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zNMethodTableIteration.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,48 @@
+/*
+ * 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 SHARE_GC_Z_ZNMETHODTABLEITERATION_HPP
+#define SHARE_GC_Z_ZNMETHODTABLEITERATION_HPP
+
+#include "gc/z/zGlobals.hpp"
+
+class NMethodClosure;
+class ZNMethodTableEntry;
+
+class ZNMethodTableIteration {
+private:
+  ZNMethodTableEntry* _table;
+  size_t              _size;
+  volatile size_t     _claimed ATTRIBUTE_ALIGNED(ZCacheLineSize);
+
+public:
+  ZNMethodTableIteration();
+
+  bool in_progress() const;
+
+  void nmethods_do_begin(ZNMethodTableEntry* table, size_t size);
+  void nmethods_do_end();
+  void nmethods_do(NMethodClosure* cl);
+};
+
+#endif // SHARE_GC_Z_ZNMETHODTABLEITERATION_HPP
--- a/src/hotspot/share/gc/z/zRelocate.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zRelocate.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -31,28 +31,20 @@
 #include "gc/z/zRelocationSet.inline.hpp"
 #include "gc/z/zRootsIterator.hpp"
 #include "gc/z/zTask.hpp"
+#include "gc/z/zThreadLocalAllocBuffer.hpp"
 #include "gc/z/zWorkers.hpp"
 
 ZRelocate::ZRelocate(ZWorkers* workers) :
     _workers(workers) {}
 
 class ZRelocateRootsIteratorClosure : public ZRootsIteratorClosure {
-private:
-  static void remap_address(HeapWord** p) {
-    *p = (HeapWord*)ZAddress::good_or_null((uintptr_t)*p);
-  }
-
 public:
   virtual void do_thread(Thread* thread) {
-    ZRootsIteratorClosure::do_thread(thread);
-
     // Update thread local address bad mask
     ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask);
 
     // Remap TLAB
-    if (UseTLAB && thread->is_Java_thread()) {
-      thread->tlab().addresses_do(remap_address);
-    }
+    ZThreadLocalAllocBuffer::remap(thread);
   }
 
   virtual void do_oop(oop* p) {
--- a/src/hotspot/share/gc/z/zRootsIterator.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zRootsIterator.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -33,7 +33,7 @@
 #include "gc/shared/suspendibleThreadSet.hpp"
 #include "gc/z/zBarrierSetNMethod.hpp"
 #include "gc/z/zGlobals.hpp"
-#include "gc/z/zNMethodTable.hpp"
+#include "gc/z/zNMethod.hpp"
 #include "gc/z/zOopClosures.inline.hpp"
 #include "gc/z/zRootsIterator.hpp"
 #include "gc/z/zStat.hpp"
@@ -135,29 +135,38 @@
   }
 }
 
-class ZCodeBlobClosure : public CodeBlobToOopClosure {
+class ZRootsIteratorCodeBlobClosure : public CodeBlobToOopClosure {
 private:
   BarrierSetNMethod* _bs;
 
 public:
-  ZCodeBlobClosure(OopClosure* cl) :
+  ZRootsIteratorCodeBlobClosure(OopClosure* cl) :
     CodeBlobToOopClosure(cl, true /* fix_relocations */),
     _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {}
 
   virtual void do_code_blob(CodeBlob* cb) {
     nmethod* const nm = cb->as_nmethod_or_null();
-    if (nm == NULL || nm->test_set_oops_do_mark()) {
-      return;
+    if (nm != NULL && !nm->test_set_oops_do_mark()) {
+      CodeBlobToOopClosure::do_code_blob(cb);
+      _bs->disarm(nm);
     }
-    CodeBlobToOopClosure::do_code_blob(cb);
-    _bs->disarm(nm);
   }
 };
 
-void ZRootsIteratorClosure::do_thread(Thread* thread) {
-  ZCodeBlobClosure code_cl(this);
-  thread->oops_do(this, ClassUnloading ? &code_cl : NULL);
-}
+class ZRootsIteratorThreadClosure : public ThreadClosure {
+private:
+  ZRootsIteratorClosure* _cl;
+
+public:
+  ZRootsIteratorThreadClosure(ZRootsIteratorClosure* cl) :
+      _cl(cl) {}
+
+  virtual void do_thread(Thread* thread) {
+    ZRootsIteratorCodeBlobClosure code_cl(_cl);
+    thread->oops_do(_cl, ClassUnloading ? &code_cl : NULL);
+    _cl->do_thread(thread);
+  }
+};
 
 ZRootsIterator::ZRootsIterator() :
     _universe(this),
@@ -175,7 +184,7 @@
   if (ClassUnloading) {
     nmethod::oops_do_marking_prologue();
   } else {
-    ZNMethodTable::nmethod_entries_do_begin();
+    ZNMethod::oops_do_begin();
   }
 }
 
@@ -185,7 +194,7 @@
   if (ClassUnloading) {
     nmethod::oops_do_marking_epilogue();
   } else {
-    ZNMethodTable::nmethod_entries_do_end();
+    ZNMethod::oops_do_end();
   }
   JvmtiExport::gc_epilogue();
 
@@ -227,12 +236,13 @@
 void ZRootsIterator::do_threads(ZRootsIteratorClosure* cl) {
   ZStatTimer timer(ZSubPhasePauseRootsThreads);
   ResourceMark rm;
-  Threads::possibly_parallel_threads_do(true, cl);
+  ZRootsIteratorThreadClosure thread_cl(cl);
+  Threads::possibly_parallel_threads_do(true, &thread_cl);
 }
 
 void ZRootsIterator::do_code_cache(ZRootsIteratorClosure* cl) {
   ZStatTimer timer(ZSubPhasePauseRootsCodeCache);
-  ZNMethodTable::oops_do(cl);
+  ZNMethod::oops_do(cl);
 }
 
 void ZRootsIterator::oops_do(ZRootsIteratorClosure* cl, bool visit_jvmti_weak_export) {
--- a/src/hotspot/share/gc/z/zRootsIterator.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zRootsIterator.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -31,9 +31,9 @@
 #include "runtime/thread.hpp"
 #include "utilities/globalDefinitions.hpp"
 
-class ZRootsIteratorClosure : public OopClosure, public ThreadClosure {
+class ZRootsIteratorClosure : public OopClosure {
 public:
-  virtual void do_thread(Thread* thread);
+  virtual void do_thread(Thread* thread) {}
 };
 
 typedef OopStorage::ParState<true /* concurrent */, false /* is_const */> ZOopStorageIterator;
--- a/src/hotspot/share/gc/z/zStatTLAB.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 "gc/z/zStatTLAB.hpp"
-
-ZPerWorker<ThreadLocalAllocStats>* ZStatTLAB::_stats = NULL;
-
-void ZStatTLAB::initialize() {
-  if (UseTLAB) {
-    assert(_stats == NULL, "Already initialized");
-    _stats = new ZPerWorker<ThreadLocalAllocStats>();
-    reset();
-  }
-}
-
-void ZStatTLAB::reset() {
-  if (UseTLAB) {
-    ZPerWorkerIterator<ThreadLocalAllocStats> iter(_stats);
-    for (ThreadLocalAllocStats* stats; iter.next(&stats);) {
-      stats->reset();
-    }
-  }
-}
-
-ThreadLocalAllocStats* ZStatTLAB::get() {
-  if (UseTLAB) {
-    return _stats->addr();
-  }
-
-  return NULL;
-}
-
-void ZStatTLAB::publish() {
-  if (UseTLAB) {
-    ThreadLocalAllocStats total;
-
-    ZPerWorkerIterator<ThreadLocalAllocStats> iter(_stats);
-    for (ThreadLocalAllocStats* stats; iter.next(&stats);) {
-      total.update(*stats);
-    }
-
-    total.publish();
-  }
-}
--- a/src/hotspot/share/gc/z/zStatTLAB.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 SHARE_GC_Z_ZSTATTLAB_HPP
-#define SHARE_GC_Z_ZSTATTLAB_HPP
-
-#include "gc/shared/threadLocalAllocBuffer.hpp"
-#include "gc/z/zValue.hpp"
-#include "memory/allocation.hpp"
-
-class ZStatTLAB : public AllStatic {
-private:
-  static ZPerWorker<ThreadLocalAllocStats>* _stats;
-
-public:
-  static void initialize();
-  static void reset();
-  static ThreadLocalAllocStats* get();
-  static void publish();
-};
-
-#endif // SHARE_GC_Z_ZSTATTLAB_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zThreadLocalAllocBuffer.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,79 @@
+/*
+ * 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/zAddress.inline.hpp"
+#include "gc/z/zThreadLocalAllocBuffer.hpp"
+#include "runtime/globals.hpp"
+#include "runtime/thread.hpp"
+
+ZPerWorker<ThreadLocalAllocStats>* ZThreadLocalAllocBuffer::_stats = NULL;
+
+void ZThreadLocalAllocBuffer::initialize() {
+  if (UseTLAB) {
+    assert(_stats == NULL, "Already initialized");
+    _stats = new ZPerWorker<ThreadLocalAllocStats>();
+    reset_statistics();
+  }
+}
+
+void ZThreadLocalAllocBuffer::reset_statistics() {
+  if (UseTLAB) {
+    ZPerWorkerIterator<ThreadLocalAllocStats> iter(_stats);
+    for (ThreadLocalAllocStats* stats; iter.next(&stats);) {
+      stats->reset();
+    }
+  }
+}
+
+void ZThreadLocalAllocBuffer::publish_statistics() {
+  if (UseTLAB) {
+    ThreadLocalAllocStats total;
+
+    ZPerWorkerIterator<ThreadLocalAllocStats> iter(_stats);
+    for (ThreadLocalAllocStats* stats; iter.next(&stats);) {
+      total.update(*stats);
+    }
+
+    total.publish();
+  }
+}
+
+static void fixup_address(HeapWord** p) {
+  *p = (HeapWord*)ZAddress::good_or_null((uintptr_t)*p);
+}
+
+void ZThreadLocalAllocBuffer::retire(Thread* thread) {
+  if (UseTLAB && thread->is_Java_thread()) {
+    ThreadLocalAllocStats* const stats = _stats->addr();
+    thread->tlab().addresses_do(fixup_address);
+    thread->tlab().retire(stats);
+    thread->tlab().resize();
+  }
+}
+
+void ZThreadLocalAllocBuffer::remap(Thread* thread) {
+  if (UseTLAB && thread->is_Java_thread()) {
+    thread->tlab().addresses_do(fixup_address);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zThreadLocalAllocBuffer.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+#ifndef SHARE_GC_Z_ZTHREADLOCALALLOCBUFFER_HPP
+#define SHARE_GC_Z_ZTHREADLOCALALLOCBUFFER_HPP
+
+#include "gc/shared/threadLocalAllocBuffer.hpp"
+#include "gc/z/zValue.hpp"
+#include "memory/allocation.hpp"
+
+class ZThreadLocalAllocBuffer : public AllStatic {
+private:
+  static ZPerWorker<ThreadLocalAllocStats>* _stats;
+
+public:
+  static void initialize();
+
+  static void reset_statistics();
+  static void publish_statistics();
+
+  static void retire(Thread* thread);
+  static void remap(Thread* thread);
+};
+
+#endif // SHARE_GC_Z_ZTHREADLOCALALLOCBUFFER_HPP
--- a/src/hotspot/share/gc/z/zUnload.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/gc/z/zUnload.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -30,7 +30,7 @@
 #include "gc/shared/gcBehaviours.hpp"
 #include "gc/shared/suspendibleThreadSet.hpp"
 #include "gc/z/zLock.inline.hpp"
-#include "gc/z/zNMethodTable.hpp"
+#include "gc/z/zNMethod.hpp"
 #include "gc/z/zOopClosures.hpp"
 #include "gc/z/zStat.hpp"
 #include "gc/z/zUnload.hpp"
@@ -75,7 +75,7 @@
 public:
   virtual bool is_unloading(CompiledMethod* method) const {
     nmethod* const nm = method->as_nmethod();
-    ZReentrantLock* const lock = ZNMethodTable::lock_for_nmethod(nm);
+    ZReentrantLock* const lock = ZNMethod::lock_for_nmethod(nm);
     if (lock == NULL) {
       return is_unloading(nm);
     } else {
@@ -89,7 +89,7 @@
 public:
   virtual bool lock(CompiledMethod* method) {
     nmethod* const nm = method->as_nmethod();
-    ZReentrantLock* const lock = ZNMethodTable::lock_for_nmethod(nm);
+    ZReentrantLock* const lock = ZNMethod::lock_for_nmethod(nm);
     if (lock != NULL) {
       lock->lock();
     }
@@ -98,7 +98,7 @@
 
   virtual void unlock(CompiledMethod* method) {
     nmethod* const nm = method->as_nmethod();
-    ZReentrantLock* const lock = ZNMethodTable::lock_for_nmethod(nm);
+    ZReentrantLock* const lock = ZNMethod::lock_for_nmethod(nm);
     if (lock != NULL) {
       lock->unlock();
     }
@@ -110,7 +110,7 @@
     }
 
     nmethod* const nm = method->as_nmethod();
-    ZReentrantLock* const lock = ZNMethodTable::lock_for_nmethod(nm);
+    ZReentrantLock* const lock = ZNMethod::lock_for_nmethod(nm);
     return lock == NULL || lock->is_owned();
   }
 };
@@ -149,7 +149,7 @@
 
   Klass::clean_weak_klass_links(unloading_occurred);
 
-  ZNMethodTable::unlink(_workers, unloading_occurred);
+  ZNMethod::unlink(_workers, unloading_occurred);
 
   DependencyContext::cleaning_end();
 }
@@ -157,7 +157,7 @@
 void ZUnload::purge() {
   {
     SuspendibleThreadSetJoiner sts;
-    ZNMethodTable::purge(_workers);
+    ZNMethod::purge(_workers);
   }
 
   ClassLoaderDataGraph::purge();
--- a/src/hotspot/share/interpreter/linkResolver.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/interpreter/linkResolver.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -39,6 +39,7 @@
 #include "logging/logStream.hpp"
 #include "memory/resourceArea.hpp"
 #include "memory/universe.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/cpCache.inline.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/method.hpp"
--- a/src/hotspot/share/interpreter/rewriter.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/interpreter/rewriter.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -28,6 +28,7 @@
 #include "interpreter/rewriter.hpp"
 #include "memory/metadataFactory.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/generateOopMap.hpp"
 #include "prims/methodHandles.hpp"
 #include "runtime/fieldDescriptor.inline.hpp"
--- a/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -43,6 +43,7 @@
 #include "memory/allocation.inline.hpp"
 #include "memory/resourceArea.hpp"
 #include "oops/array.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/method.hpp"
 #include "prims/jvmtiRedefineClasses.hpp"
--- a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -114,7 +114,7 @@
 NO_TRANSITION_END
 
 NO_TRANSITION(void, jfr_set_file_notification(JNIEnv* env, jobject jvm, jlong threshold))
-  JfrChunkRotation::set_threshold((intptr_t)threshold);
+  JfrChunkRotation::set_threshold(threshold);
 NO_TRANSITION_END
 
 NO_TRANSITION(void, jfr_set_sample_threads(JNIEnv* env, jobject jvm, jboolean sampleThreads))
--- a/src/hotspot/share/jfr/metadata/metadata.xml	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/metadata/metadata.xml	Fri Feb 22 20:36:42 2019 +0000
@@ -533,12 +533,6 @@
     <Field type="int" name="iterations" label="Iterations" description="Number of state check iterations" />
   </Event>
 
-  <Event name="SafepointWaitBlocked" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint Wait Blocked" description="Safepointing begin waiting on running threads to block"
-    thread="true">
-    <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
-    <Field type="int" name="runningThreadCount" label="Running Threads" description="The number running of threads wait for safe point" />
-  </Event>
-
   <Event name="SafepointCleanup" category="Java Virtual Machine, Runtime, Safepoint" label="Safepoint Cleanup" description="Safepointing begin running cleanup tasks"
     thread="true">
     <Field type="ulong" name="safepointId" label="Safepoint Identifier" relation="SafepointId" />
--- a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -44,13 +44,13 @@
   }
 }
 
-static void write_checkpoint_header(u1* pos, jlong size, jlong time, bool flushpoint, juint type_count) {
+static void write_checkpoint_header(u1* pos, int64_t size, jlong time, bool flushpoint, u4 type_count) {
   assert(pos != NULL, "invariant");
   JfrBigEndianWriter be_writer(pos, sizeof(JfrCheckpointEntry));
   be_writer.write(size);
   be_writer.write(time);
   be_writer.write(JfrTicks::now().value() - time);
-  be_writer.write(flushpoint ? (juint)1 : (juint)0);
+  be_writer.write(flushpoint ? (u4)1 : (u4)0);
   be_writer.write(type_count);
   assert(be_writer.is_valid(), "invariant");
 }
@@ -71,7 +71,7 @@
   assert(this->is_valid(), "invariant");
   assert(count() > 0, "invariant");
   assert(this->used_size() > sizeof(JfrCheckpointEntry), "invariant");
-  const jlong size = this->current_offset();
+  const int64_t size = this->current_offset();
   assert(size + this->start_pos() == this->current_pos(), "invariant");
   write_checkpoint_header(const_cast<u1*>(this->start_pos()), size, _time, is_flushpoint(), count());
   release();
@@ -85,11 +85,11 @@
   return _flushpoint;
 }
 
-juint JfrCheckpointWriter::count() const {
+u4 JfrCheckpointWriter::count() const {
   return _count;
 }
 
-void JfrCheckpointWriter::set_count(juint count) {
+void JfrCheckpointWriter::set_count(u4 count) {
   _count = count;
 }
 
@@ -111,7 +111,7 @@
 }
 
 void JfrCheckpointWriter::write_key(u8 key) {
-  write<u8>(key);
+  write(key);
 }
 
 void JfrCheckpointWriter::increment() {
@@ -119,10 +119,10 @@
 }
 
 void JfrCheckpointWriter::write_count(u4 nof_entries) {
-  write<u4>((u4)nof_entries);
+  write(nof_entries);
 }
 
-void JfrCheckpointWriter::write_count(u4 nof_entries, jlong offset) {
+void JfrCheckpointWriter::write_count(u4 nof_entries, int64_t offset) {
   write_padded_at_offset(nof_entries, offset);
 }
 
--- a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -49,21 +49,21 @@
 typedef EventWriterHost<BigEndianEncoder, CompressedIntegerEncoder, JfrTransactionalCheckpointWriter> JfrCheckpointWriterBase;
 
 struct JfrCheckpointContext {
-  jlong offset;
-  juint count;
+  int64_t offset;
+  u4 count;
 };
 
 class JfrCheckpointWriter : public JfrCheckpointWriterBase {
   friend class JfrSerializerRegistration;
  private:
   JfrTicks _time;
-  jlong _offset;
-  juint _count;
+  int64_t _offset;
+  u4 _count;
   bool _flushpoint;
   bool _header;
 
-  juint count() const;
-  void set_count(juint count);
+  u4 count() const;
+  void set_count(u4 count);
   void increment();
   void set_flushpoint(bool flushpoint);
   bool is_flushpoint() const;
@@ -75,7 +75,7 @@
   ~JfrCheckpointWriter();
   void write_type(JfrTypeId type_id);
   void write_count(u4 nof_entries);
-  void write_count(u4 nof_entries, jlong offset);
+  void write_count(u4 nof_entries, int64_t offset);
   void write_key(u8 key);
   const JfrCheckpointContext context() const;
   void set_context(const JfrCheckpointContext ctx);
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -65,7 +65,7 @@
  private:
   JfrCheckpointWriter& _writer;
   JfrCheckpointContext _ctx;
-  const intptr_t _count_position;
+  const int64_t _count_position;
   Thread* const _curthread;
   u4 _count;
 
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSetWriter.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSetWriter.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -35,7 +35,7 @@
   WriterImpl _impl;
   JfrCheckpointWriter* _writer;
   JfrCheckpointContext _ctx;
-  jlong _count_offset;
+  int64_t _count_offset;
   int _count;
   bool _skip_header;
  public:
--- a/src/hotspot/share/jfr/recorder/repository/jfrChunkRotation.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrChunkRotation.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -29,7 +29,7 @@
 #include "runtime/handles.inline.hpp"
 
 static jobject chunk_monitor = NULL;
-static intptr_t threshold = 0;
+static int64_t threshold = 0;
 static bool rotate = false;
 
 static jobject install_chunk_monitor(Thread* thread) {
@@ -62,7 +62,6 @@
     // already in progress
     return;
   }
-  assert(!rotate, "invariant");
   if (writer.size_written() > threshold) {
     rotate = true;
     notify();
@@ -77,6 +76,6 @@
   rotate = false;
 }
 
-void JfrChunkRotation::set_threshold(intptr_t bytes) {
+void JfrChunkRotation::set_threshold(int64_t bytes) {
   threshold = bytes;
 }
--- a/src/hotspot/share/jfr/recorder/repository/jfrChunkRotation.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrChunkRotation.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -36,7 +36,7 @@
 class JfrChunkRotation : AllStatic {
  public:
   static void evaluate(const JfrChunkWriter& writer);
-  static void set_threshold(intptr_t bytes);
+  static void set_threshold(int64_t bytes);
   static bool should_rotate();
   static void on_rotation();
 };
--- a/src/hotspot/share/jfr/recorder/repository/jfrChunkState.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrChunkState.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -53,19 +53,19 @@
   set_previous_checkpoint_offset(0);
 }
 
-void JfrChunkState::set_previous_checkpoint_offset(jlong offset) {
+void JfrChunkState::set_previous_checkpoint_offset(int64_t offset) {
   _previous_checkpoint_offset = offset;
 }
 
-jlong JfrChunkState::previous_checkpoint_offset() const {
+int64_t JfrChunkState::previous_checkpoint_offset() const {
   return _previous_checkpoint_offset;
 }
 
-jlong JfrChunkState::previous_start_ticks() const {
+int64_t JfrChunkState::previous_start_ticks() const {
   return _previous_start_ticks;
 }
 
-jlong JfrChunkState::previous_start_nanos() const {
+int64_t JfrChunkState::previous_start_nanos() const {
   return _previous_start_nanos;
 }
 
@@ -92,7 +92,7 @@
   save_current_and_update_start_ticks();
 }
 
-jlong JfrChunkState::last_chunk_duration() const {
+int64_t JfrChunkState::last_chunk_duration() const {
   return _start_nanos - _previous_start_nanos;
 }
 
--- a/src/hotspot/share/jfr/recorder/repository/jfrChunkState.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrChunkState.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -25,7 +25,6 @@
 #ifndef SHARE_JFR_RECORDER_REPOSITORY_JFRCHUNKSTATE_HPP
 #define SHARE_JFR_RECORDER_REPOSITORY_JFRCHUNKSTATE_HPP
 
-#include "jni.h"
 #include "jfr/utilities/jfrAllocation.hpp"
 #include "jfr/utilities/jfrTypes.hpp"
 
@@ -33,11 +32,11 @@
   friend class JfrChunkWriter;
  private:
   char* _path;
-  jlong _start_ticks;
-  jlong _start_nanos;
-  jlong _previous_start_ticks;
-  jlong _previous_start_nanos;
-  jlong _previous_checkpoint_offset;
+  int64_t _start_ticks;
+  int64_t _start_nanos;
+  int64_t _previous_start_ticks;
+  int64_t _previous_start_nanos;
+  int64_t _previous_checkpoint_offset;
 
   void update_start_ticks();
   void update_start_nanos();
@@ -47,11 +46,11 @@
   JfrChunkState();
   ~JfrChunkState();
   void reset();
-  jlong previous_checkpoint_offset() const;
-  void set_previous_checkpoint_offset(jlong offset);
-  jlong previous_start_ticks() const;
-  jlong previous_start_nanos() const;
-  jlong last_chunk_duration() const;
+  int64_t previous_checkpoint_offset() const;
+  void set_previous_checkpoint_offset(int64_t offset);
+  int64_t previous_start_ticks() const;
+  int64_t previous_start_nanos() const;
+  int64_t last_chunk_duration() const;
   void update_time_to_now();
   void set_path(const char* path);
   const char* path() const;
--- a/src/hotspot/share/jfr/recorder/repository/jfrChunkWriter.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrChunkWriter.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -32,9 +32,8 @@
 #include "runtime/os.hpp"
 #include "runtime/os.inline.hpp"
 
-const u2 JFR_VERSION_MAJOR = 2;
-const u2 JFR_VERSION_MINOR = 0;
-
+static const u2 JFR_VERSION_MAJOR = 2;
+static const u2 JFR_VERSION_MINOR = 0;
 static const size_t MAGIC_LEN = 4;
 static const size_t FILEHEADER_SLOT_SIZE = 8;
 static const size_t CHUNK_SIZE_OFFSET = 8;
@@ -79,14 +78,14 @@
   return is_open;
 }
 
-size_t JfrChunkWriter::close(intptr_t metadata_offset) {
+size_t JfrChunkWriter::close(int64_t metadata_offset) {
   write_header(metadata_offset);
   this->flush();
   this->close_fd();
-  return size_written();
+  return (size_t)size_written();
 }
 
-void JfrChunkWriter::write_header(intptr_t metadata_offset) {
+void JfrChunkWriter::write_header(int64_t metadata_offset) {
   assert(this->is_valid(), "invariant");
   // Chunk size
   this->write_be_at_offset(size_written(), CHUNK_SIZE_OFFSET);
@@ -106,15 +105,15 @@
   _chunkstate->set_path(chunk_path);
 }
 
-intptr_t JfrChunkWriter::size_written() const {
+int64_t JfrChunkWriter::size_written() const {
   return this->is_valid() ? this->current_offset() : 0;
 }
 
-intptr_t JfrChunkWriter::previous_checkpoint_offset() const {
+int64_t JfrChunkWriter::previous_checkpoint_offset() const {
   return _chunkstate->previous_checkpoint_offset();
 }
 
-void JfrChunkWriter::set_previous_checkpoint_offset(intptr_t offset) {
+void JfrChunkWriter::set_previous_checkpoint_offset(int64_t offset) {
   _chunkstate->set_previous_checkpoint_offset(offset);
 }
 
--- a/src/hotspot/share/jfr/recorder/repository/jfrChunkWriter.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrChunkWriter.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -41,16 +41,16 @@
   JfrChunkState* _chunkstate;
 
   bool open();
-  size_t close(intptr_t metadata_offset);
-  void write_header(intptr_t metadata_offset);
+  size_t close(int64_t metadata_offset);
+  void write_header(int64_t metadata_offset);
   void set_chunk_path(const char* chunk_path);
 
  public:
   JfrChunkWriter();
   bool initialize();
-  intptr_t size_written() const;
-  intptr_t previous_checkpoint_offset() const;
-  void set_previous_checkpoint_offset(intptr_t offset);
+  int64_t size_written() const;
+  int64_t previous_checkpoint_offset() const;
+  void set_previous_checkpoint_offset(int64_t offset);
   void time_stamp_chunk_now();
 };
 
--- a/src/hotspot/share/jfr/recorder/repository/jfrRepository.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrRepository.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -147,10 +147,10 @@
   iso8601_to_date_time(buffer);
 }
 
-static jlong file_size(fio_fd fd) {
+static int64_t file_size(fio_fd fd) {
   assert(fd != invalid_fd, "invariant");
-  const jlong current_offset = os::current_file_offset(fd);
-  const jlong size = os::lseek(fd, 0, SEEK_END);
+  const int64_t current_offset = os::current_file_offset(fd);
+  const int64_t size = os::lseek(fd, 0, SEEK_END);
   os::seek_to_file_offset(fd, current_offset);
   return size;
 }
@@ -218,7 +218,7 @@
   if (invalid_fd == entry_fd) {
     return NULL;
   }
-  const jlong entry_size = file_size(entry_fd);
+  const int64_t entry_size = file_size(entry_fd);
   os::close(entry_fd);
   if (0 == entry_size) {
     return NULL;
@@ -260,6 +260,7 @@
   }
 }
 #endif
+
 bool RepositoryIterator::has_next() const {
   return (_files != NULL && _iterator < _files->length());
 }
@@ -275,21 +276,27 @@
   if (file_copy_block == NULL) {
     return;
   }
- jlong bytes_written_total = 0;
+ int64_t bytes_written_total = 0;
   while (iterator.has_next()) {
     fio_fd current_fd = invalid_fd;
     const char* const fqn = iterator.next();
     if (fqn != NULL) {
       current_fd = open_existing(fqn);
       if (current_fd != invalid_fd) {
-        const jlong current_filesize = file_size(current_fd);
+        const int64_t current_filesize = file_size(current_fd);
         assert(current_filesize > 0, "invariant");
-        jlong bytes_read = 0;
-        jlong bytes_written = 0;
+        int64_t bytes_read = 0;
+        int64_t bytes_written = 0;
         while (bytes_read < current_filesize) {
-          bytes_read += (jlong)os::read_at(current_fd, file_copy_block, size_of_file_copy_block, bytes_read);
-          assert(bytes_read - bytes_written <= (jlong)size_of_file_copy_block, "invariant");
-          bytes_written += (jlong)os::write(emergency_fd, file_copy_block, bytes_read - bytes_written);
+          const ssize_t read_result = os::read_at(current_fd, file_copy_block, size_of_file_copy_block, bytes_read);
+          if (-1 == read_result) {
+            log_info(jfr) ( // For user, should not be "jfr, system"
+              "Unable to recover JFR data");
+            break;
+          }
+          bytes_read += (int64_t)read_result;
+          assert(bytes_read - bytes_written <= (int64_t)size_of_file_copy_block, "invariant");
+          bytes_written += (int64_t)os::write(emergency_fd, file_copy_block, bytes_read - bytes_written);
           assert(bytes_read == bytes_written, "invariant");
         }
         os::close(current_fd);
@@ -468,6 +475,6 @@
   return _chunkwriter->open();
 }
 
-size_t JfrRepository::close_chunk(jlong metadata_offset) {
+size_t JfrRepository::close_chunk(int64_t metadata_offset) {
   return _chunkwriter->close(metadata_offset);
 }
--- a/src/hotspot/share/jfr/recorder/repository/jfrRepository.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/repository/jfrRepository.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -55,7 +55,7 @@
   bool set_path(const char* path);
   void set_chunk_path(const char* path);
   bool open_chunk(bool vm_error = false);
-  size_t close_chunk(jlong metadata_offset);
+  size_t close_chunk(int64_t metadata_offset);
   void on_vm_error();
   static void notify_on_new_chunk_path();
   static JfrChunkWriter& chunkwriter();
--- a/src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -130,18 +130,18 @@
   bool not_acquired() const { return !_acquired; }
 };
 
-static intptr_t write_checkpoint_event_prologue(JfrChunkWriter& cw, u8 type_id) {
-  const intptr_t prev_cp_offset = cw.previous_checkpoint_offset();
-  const intptr_t prev_cp_relative_offset = 0 == prev_cp_offset ? 0 : prev_cp_offset - cw.current_offset();
+static int64_t write_checkpoint_event_prologue(JfrChunkWriter& cw, u8 type_id) {
+  const int64_t prev_cp_offset = cw.previous_checkpoint_offset();
+  const int64_t prev_cp_relative_offset = 0 == prev_cp_offset ? 0 : prev_cp_offset - cw.current_offset();
   cw.reserve(sizeof(u4));
   cw.write<u8>(EVENT_CHECKPOINT);
   cw.write(JfrTicks::now());
-  cw.write<jlong>((jlong)0);
+  cw.write((int64_t)0);
   cw.write(prev_cp_relative_offset); // write previous checkpoint offset delta
   cw.write<bool>(false); // flushpoint
-  cw.write<u4>((u4)1); // nof types in this checkpoint
-  cw.write<u8>(type_id);
-  const intptr_t number_of_elements_offset = cw.current_offset();
+  cw.write((u4)1); // nof types in this checkpoint
+  cw.write(type_id);
+  const int64_t number_of_elements_offset = cw.current_offset();
   cw.reserve(sizeof(u4));
   return number_of_elements_offset;
 }
@@ -161,8 +161,8 @@
   }
   bool process() {
     // current_cp_offset is also offset for the event size header field
-    const intptr_t current_cp_offset = _cw.current_offset();
-    const intptr_t num_elements_offset = write_checkpoint_event_prologue(_cw, _type_id);
+    const int64_t current_cp_offset = _cw.current_offset();
+    const int64_t num_elements_offset = write_checkpoint_event_prologue(_cw, _type_id);
     // invocation
     _content_functor.process();
     const u4 number_of_elements = (u4)_content_functor.processed();
@@ -468,9 +468,9 @@
   JfrMetadataEvent::lock();
 }
 
-static jlong write_metadata_event(JfrChunkWriter& chunkwriter) {
+static int64_t write_metadata_event(JfrChunkWriter& chunkwriter) {
   assert(chunkwriter.is_valid(), "invariant");
-  const jlong metadata_offset = chunkwriter.current_offset();
+  const int64_t metadata_offset = chunkwriter.current_offset();
   JfrMetadataEvent::write(chunkwriter, metadata_offset);
   return metadata_offset;
 }
--- a/src/hotspot/share/jfr/writers/jfrEventWriterHost.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrEventWriterHost.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -49,7 +49,7 @@
 inline intptr_t EventWriterHost<BE, IE, WriterPolicyImpl>::end_write(void) {
   assert(this->is_acquired(),
     "state corruption, calling end with writer with non-acquired state!");
-  return this->is_valid() ? this->used_offset() : 0;
+  return this->is_valid() ? (intptr_t)this->used_offset() : 0;
 }
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
--- a/src/hotspot/share/jfr/writers/jfrPosition.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrPosition.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -48,8 +48,8 @@
 
  public:
   size_t available_size() const;
-  intptr_t used_offset() const;
-  intptr_t current_offset() const;
+  int64_t used_offset() const;
+  int64_t current_offset() const;
   size_t used_size() const;
   void reset();
 };
--- a/src/hotspot/share/jfr/writers/jfrPosition.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrPosition.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -80,12 +80,12 @@
 }
 
 template <typename AP>
-inline intptr_t Position<AP>::used_offset() const {
+inline int64_t Position<AP>::used_offset() const {
   return _current_pos - _start_pos;
 }
 
 template <typename AP>
-inline intptr_t Position<AP>::current_offset() const {
+inline int64_t Position<AP>::current_offset() const {
   return this->used_offset();
 }
 
--- a/src/hotspot/share/jfr/writers/jfrStreamWriterHost.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrStreamWriterHost.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -33,9 +33,9 @@
  public:
   typedef typename Adapter::StorageType StorageType;
  private:
-  intptr_t _stream_pos;
+  int64_t _stream_pos;
   fio_fd _fd;
-  intptr_t current_stream_position() const;
+  int64_t current_stream_position() const;
 
  protected:
   StreamWriterHost(StorageType* storage, Thread* thread);
@@ -47,8 +47,8 @@
   bool has_valid_fd() const;
 
  public:
-  intptr_t current_offset() const;
-  void seek(intptr_t offset);
+  int64_t current_offset() const;
+  void seek(int64_t offset);
   void flush();
   void write_unbuffered(const void* src, size_t len);
   bool is_valid() const;
--- a/src/hotspot/share/jfr/writers/jfrStreamWriterHost.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrStreamWriterHost.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -44,7 +44,7 @@
 }
 
 template <typename Adapter, typename AP>
-inline intptr_t StreamWriterHost<Adapter, AP>::current_stream_position() const {
+inline int64_t StreamWriterHost<Adapter, AP>::current_stream_position() const {
   return this->used_offset() + _stream_pos;
 }
 
@@ -73,7 +73,7 @@
 inline void StreamWriterHost<Adapter, AP>::flush(size_t size) {
   assert(size > 0, "invariant");
   assert(this->is_valid(), "invariant");
-  _stream_pos += os::write(_fd, this->start_pos(), (int)size);
+  _stream_pos += os::write(_fd, this->start_pos(), (unsigned int)size);
   StorageHost<Adapter, AP>::reset();
   assert(0 == this->used_offset(), "invariant");
 }
@@ -84,12 +84,12 @@
 }
 
 template <typename Adapter, typename AP>
-inline intptr_t StreamWriterHost<Adapter, AP>::current_offset() const {
+inline int64_t StreamWriterHost<Adapter, AP>::current_offset() const {
   return current_stream_position();
 }
 
 template <typename Adapter, typename AP>
-void StreamWriterHost<Adapter, AP>::seek(intptr_t offset) {
+void StreamWriterHost<Adapter, AP>::seek(int64_t offset) {
   this->flush();
   assert(0 == this->used_offset(), "can only seek from beginning");
   _stream_pos = os::seek_to_file_offset(_fd, offset);
@@ -110,7 +110,7 @@
   this->flush();
   assert(0 == this->used_offset(), "can only seek from beginning");
   while (len > 0) {
-    const int n = MIN2<int>((int)len, INT_MAX);
+    const unsigned int n = MIN2((unsigned int)len, (unsigned int)INT_MAX);
     _stream_pos += os::write(_fd, buf, n);
     len -= n;
   }
--- a/src/hotspot/share/jfr/writers/jfrWriterHost.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrWriterHost.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -91,12 +91,12 @@
   void bytes(const void* buf, size_t len);
   void write_utf8_u2_len(const char* value);
   template <typename T>
-  void write_padded_at_offset(T value, intptr_t offset);
+  void write_padded_at_offset(T value, int64_t offset);
   template <typename T>
-  void write_at_offset(T value, intptr_t offset);
+  void write_at_offset(T value, int64_t offset);
   template <typename T>
-  void write_be_at_offset(T value, intptr_t offset);
-  intptr_t reserve(size_t size);
+  void write_be_at_offset(T value, int64_t offset);
+  int64_t reserve(size_t size);
 };
 
 #endif // SHARE_JFR_WRITERS_JFRWRITERHOST_HPP
--- a/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -196,7 +196,7 @@
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
 inline void WriterHost<BE, IE, WriterPolicyImpl>::write(double value) {
-  be_write(*(uintptr_t*)&(value));
+  be_write(*(u8*)&(value));
 }
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
@@ -317,9 +317,9 @@
 }
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
-inline intptr_t WriterHost<BE, IE, WriterPolicyImpl>::reserve(size_t size) {
+inline int64_t WriterHost<BE, IE, WriterPolicyImpl>::reserve(size_t size) {
   if (ensure_size(size) != NULL) {
-    intptr_t reserved_offset = this->current_offset();
+    const int64_t reserved_offset = this->current_offset();
     this->set_current_pos(size);
     return reserved_offset;
   }
@@ -329,9 +329,9 @@
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
 template <typename T>
-inline void WriterHost<BE, IE, WriterPolicyImpl>::write_padded_at_offset(T value, intptr_t offset) {
+inline void WriterHost<BE, IE, WriterPolicyImpl>::write_padded_at_offset(T value, int64_t offset) {
   if (this->is_valid()) {
-    const intptr_t current = this->current_offset();
+    const int64_t current = this->current_offset();
     this->seek(offset);
     write_padded(value);
     this->seek(current); // restore
@@ -340,9 +340,9 @@
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
 template <typename T>
-inline void WriterHost<BE, IE, WriterPolicyImpl>::write_at_offset(T value, intptr_t offset) {
+inline void WriterHost<BE, IE, WriterPolicyImpl>::write_at_offset(T value, int64_t offset) {
   if (this->is_valid()) {
-    const intptr_t current = this->current_offset();
+    const int64_t current = this->current_offset();
     this->seek(offset);
     write(value);
     this->seek(current); // restore
@@ -351,9 +351,9 @@
 
 template <typename BE, typename IE, typename WriterPolicyImpl>
 template <typename T>
-inline void WriterHost<BE, IE, WriterPolicyImpl>::write_be_at_offset(T value, intptr_t offset) {
+inline void WriterHost<BE, IE, WriterPolicyImpl>::write_be_at_offset(T value, int64_t offset) {
   if (this->is_valid()) {
-    const intptr_t current = this->current_offset();
+    const int64_t current = this->current_offset();
     this->seek(offset);
     be_write(value);
     this->seek(current); // restore
--- a/src/hotspot/share/logging/logFileOutput.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/logging/logFileOutput.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -51,6 +51,14 @@
   _file_name = make_file_name(name + strlen(Prefix), _pid_str, _vm_start_time_str);
 }
 
+const char* LogFileOutput::cur_log_file_name() {
+  if (strlen(_archive_name) == 0) {
+    return _file_name;
+  } else {
+    return _archive_name;
+  }
+}
+
 void LogFileOutput::set_file_name_parameters(jlong vm_start_time) {
   int res = jio_snprintf(_pid_str, sizeof(_pid_str), "%d", os::current_process_id());
   assert(res > 0, "PID buffer too small");
@@ -234,6 +242,7 @@
     _file_count_max_digits = number_of_digits(_file_count - 1);
     _archive_name_len = 2 + strlen(_file_name) + _file_count_max_digits;
     _archive_name = NEW_C_HEAP_ARRAY(char, _archive_name_len, mtLogging);
+    _archive_name[0] = 0;
   }
 
   log_trace(logging)("Initializing logging to file '%s' (filecount: %u"
--- a/src/hotspot/share/logging/logFileOutput.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/logging/logFileOutput.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -92,6 +92,7 @@
     return _name;
   }
 
+  const char* cur_log_file_name();
   static const char* const Prefix;
   static void set_file_name_parameters(jlong start_time);
 };
--- a/src/hotspot/share/memory/allocation.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/allocation.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -132,6 +132,7 @@
   f(mtArguments,     "Arguments")                                                   \
   f(mtModule,        "Module")                                                      \
   f(mtSafepoint,     "Safepoint")                                                   \
+  f(mtSynchronizer,  "Synchronization")                                             \
   f(mtNone,          "Unknown")                                                     \
   //end
 
--- a/src/hotspot/share/memory/filemap.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/filemap.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,6 +45,7 @@
 #include "prims/jvmtiExport.hpp"
 #include "runtime/arguments.hpp"
 #include "runtime/java.hpp"
+#include "runtime/mutexLocker.hpp"
 #include "runtime/os.inline.hpp"
 #include "runtime/vm_version.hpp"
 #include "services/memTracker.hpp"
@@ -501,6 +502,16 @@
   }
 
   _validating_shared_path_table = false;
+
+#if INCLUDE_JVMTI
+  if (_classpath_entries_for_jvmti != NULL) {
+    os::free(_classpath_entries_for_jvmti);
+  }
+  size_t sz = sizeof(ClassPathEntry*) *  _shared_path_table_size;
+  _classpath_entries_for_jvmti = (ClassPathEntry**)os::malloc(sz, mtClass);
+  memset(_classpath_entries_for_jvmti, 0, sz);
+#endif
+
   return true;
 }
 
@@ -1440,3 +1451,57 @@
     fail_stop("%s", msg);
   }
 }
+
+#if INCLUDE_JVMTI
+ClassPathEntry** FileMapInfo::_classpath_entries_for_jvmti = NULL;
+
+ClassPathEntry* FileMapInfo::get_classpath_entry_for_jvmti(int i, TRAPS) {
+  ClassPathEntry* ent = _classpath_entries_for_jvmti[i];
+  if (ent == NULL) {
+    if (i == 0) {
+      ent = ClassLoader:: get_jrt_entry();
+      assert(ent != NULL, "must be");
+    } else {
+      SharedClassPathEntry* scpe = shared_path(i);
+      assert(scpe->is_jar(), "must be"); // other types of scpe will not produce archived classes
+
+      const char* path = scpe->name();
+      struct stat st;
+      if (os::stat(path, &st) != 0) {
+        char *msg = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, strlen(path) + 128); ;
+        jio_snprintf(msg, strlen(path) + 127, "error in opening JAR file %s", path);
+        THROW_MSG_(vmSymbols::java_io_IOException(), msg, NULL);
+      } else {
+        ent = ClassLoader::create_class_path_entry(path, &st, /*throw_exception=*/true, false, CHECK_NULL);
+      }
+    }
+
+    MutexLocker mu(CDSClassFileStream_lock, THREAD);
+    if (_classpath_entries_for_jvmti[i] == NULL) {
+      _classpath_entries_for_jvmti[i] = ent;
+    } else {
+      // Another thread has beat me to creating this entry
+      delete ent;
+      ent = _classpath_entries_for_jvmti[i];
+    }
+  }
+
+  return ent;
+}
+
+ClassFileStream* FileMapInfo::open_stream_for_jvmti(InstanceKlass* ik, TRAPS) {
+  int path_index = ik->shared_classpath_index();
+  assert(path_index >= 0, "should be called for shared built-in classes only");
+  assert(path_index < (int)_shared_path_table_size, "sanity");
+
+  ClassPathEntry* cpe = get_classpath_entry_for_jvmti(path_index, CHECK_NULL);
+  assert(cpe != NULL, "must be");
+
+  Symbol* name = ik->name();
+  const char* const class_name = name->as_C_string();
+  const char* const file_name = ClassLoader::file_name_for_class_name(class_name,
+                                                                      name->utf8_length());
+  return cpe->open_stream(file_name, THREAD);
+}
+
+#endif
--- a/src/hotspot/share/memory/filemap.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/filemap.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -302,6 +302,10 @@
   bool validate_shared_path_table();
   static void update_shared_classpath(ClassPathEntry *cpe, SharedClassPathEntry* ent, TRAPS);
 
+#if INCLUDE_JVMTI
+  static ClassFileStream* open_stream_for_jvmti(InstanceKlass* ik, TRAPS);
+#endif
+
   static SharedClassPathEntry* shared_path(int index) {
     if (index < 0) {
       return NULL;
@@ -348,6 +352,11 @@
   }
 
   address decode_start_address(CDSFileMapRegion* spc, bool with_current_oop_encoding_mode);
+
+#if INCLUDE_JVMTI
+  static ClassPathEntry** _classpath_entries_for_jvmti;
+  static ClassPathEntry* get_classpath_entry_for_jvmti(int i, TRAPS);
+#endif
 };
 
 #endif // SHARE_MEMORY_FILEMAP_HPP
--- a/src/hotspot/share/memory/iterator.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/iterator.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -263,6 +263,11 @@
   virtual void do_code_blob(CodeBlob* cb);
 };
 
+class NMethodClosure : public Closure {
+ public:
+  virtual void do_nmethod(nmethod* n) = 0;
+};
+
 // MonitorClosure is used for iterating over monitors in the monitors cache
 
 class ObjectMonitor;
--- a/src/hotspot/share/memory/memRegion.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/memRegion.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -40,8 +40,6 @@
 // create MemRegions (in CardTableBarrierSet) in heap so operator
 // new and operator new [] added for this special case.
 
-class MetaWord;
-
 class MemRegion {
   friend class VMStructs;
 private:
--- a/src/hotspot/share/memory/metaspace.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/metaspace.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -57,7 +57,6 @@
 
 class ClassLoaderData;
 class MetaspaceTracer;
-class MetaWord;
 class Mutex;
 class outputStream;
 
--- a/src/hotspot/share/memory/metaspaceShared.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/metaspaceShared.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -207,7 +207,7 @@
 };
 
 
-DumpRegion _mc_region("mc"), _ro_region("ro"), _rw_region("rw"), _md_region("md"), _od_region("od");
+DumpRegion _mc_region("mc"), _ro_region("ro"), _rw_region("rw"), _md_region("md");
 size_t _total_closed_archive_region_size = 0, _total_open_archive_region_size = 0;
 
 char* MetaspaceShared::misc_code_space_alloc(size_t num_bytes) {
@@ -598,23 +598,6 @@
   }
 }
 
-static void relocate_cached_class_file() {
-  for (int i = 0; i < _global_klass_objects->length(); i++) {
-    Klass* k = _global_klass_objects->at(i);
-    if (k->is_instance_klass()) {
-      InstanceKlass* ik = InstanceKlass::cast(k);
-      JvmtiCachedClassFileData* p = ik->get_archived_class_data();
-      if (p != NULL) {
-        int size = offset_of(JvmtiCachedClassFileData, data) + p->length;
-        JvmtiCachedClassFileData* q = (JvmtiCachedClassFileData*)_od_region.allocate(size);
-        q->length = p->length;
-        memcpy(q->data, p->data, p->length);
-        ik->set_archived_class_data(q);
-      }
-    }
-  }
-}
-
 // Objects of the Metadata types (such as Klass and ConstantPool) have C++ vtables.
 // (In GCC this is the field <Type>::_vptr, i.e., first word in the object.)
 //
@@ -1438,15 +1421,11 @@
 
   char* vtbl_list = _md_region.top();
   MetaspaceShared::allocate_cpp_vtable_clones();
-  _md_region.pack(&_od_region);
+  _md_region.pack();
 
-  // Relocate the archived class file data into the od region
-  relocate_cached_class_file();
-  _od_region.pack();
-
-  // The 5 core spaces are allocated consecutively mc->rw->ro->md->od, so there total size
+  // The 4 core spaces are allocated consecutively mc->rw->ro->md, so there total size
   // is just the spaces between the two ends.
-  size_t core_spaces_size = _od_region.end() - _mc_region.base();
+  size_t core_spaces_size = _md_region.end() - _mc_region.base();
   assert(core_spaces_size == (size_t)align_up(core_spaces_size, Metaspace::reserve_alignment()),
          "should already be aligned");
 
@@ -1488,7 +1467,6 @@
     write_region(mapinfo, MetaspaceShared::rw, &_rw_region, /*read_only=*/false,/*allow_exec=*/false);
     write_region(mapinfo, MetaspaceShared::ro, &_ro_region, /*read_only=*/true, /*allow_exec=*/false);
     write_region(mapinfo, MetaspaceShared::md, &_md_region, /*read_only=*/false,/*allow_exec=*/false);
-    write_region(mapinfo, MetaspaceShared::od, &_od_region, /*read_only=*/true, /*allow_exec=*/false);
 
     _total_closed_archive_region_size = mapinfo->write_archive_heap_regions(
                                         _closed_archive_heap_regions,
@@ -1535,12 +1513,10 @@
   // Print statistics of all the regions
   const size_t total_reserved = _ro_region.reserved()  + _rw_region.reserved() +
                                 _mc_region.reserved()  + _md_region.reserved() +
-                                _od_region.reserved()  +
                                 _total_closed_archive_region_size +
                                 _total_open_archive_region_size;
   const size_t total_bytes = _ro_region.used()  + _rw_region.used() +
                              _mc_region.used()  + _md_region.used() +
-                             _od_region.used()  +
                              _total_closed_archive_region_size +
                              _total_open_archive_region_size;
   const double total_u_perc = percent_of(total_bytes, total_reserved);
@@ -1549,7 +1525,6 @@
   _rw_region.print(total_reserved);
   _ro_region.print(total_reserved);
   _md_region.print(total_reserved);
-  _od_region.print(total_reserved);
   print_heap_region_stats(_closed_archive_heap_regions, "ca", total_reserved);
   print_heap_region_stats(_open_archive_heap_regions, "oa", total_reserved);
 
@@ -1931,33 +1906,30 @@
   char* rw_base = NULL; char* rw_top;
   char* mc_base = NULL; char* mc_top;
   char* md_base = NULL; char* md_top;
-  char* od_base = NULL; char* od_top;
 
   // Map each shared region
   if ((mc_base = mapinfo->map_region(mc, &mc_top)) != NULL &&
       (rw_base = mapinfo->map_region(rw, &rw_top)) != NULL &&
       (ro_base = mapinfo->map_region(ro, &ro_top)) != NULL &&
       (md_base = mapinfo->map_region(md, &md_top)) != NULL &&
-      (od_base = mapinfo->map_region(od, &od_top)) != NULL &&
       (image_alignment == (size_t)os::vm_allocation_granularity()) &&
       mapinfo->validate_shared_path_table()) {
     // Success -- set up MetaspaceObj::_shared_metaspace_{base,top} for
     // fast checking in MetaspaceShared::is_in_shared_metaspace() and
     // MetaspaceObj::is_shared().
     //
-    // We require that mc->rw->ro->md->od to be laid out consecutively, with no
+    // We require that mc->rw->ro->md to be laid out consecutively, with no
     // gaps between them. That way, we can ensure that the OS won't be able to
     // allocate any new memory spaces inside _shared_metaspace_{base,top}, which
     // would mess up the simple comparision in MetaspaceShared::is_in_shared_metaspace().
-    assert(mc_base < ro_base && mc_base < rw_base && mc_base < md_base && mc_base < od_base, "must be");
-    assert(od_top  > ro_top  && od_top  > rw_top  && od_top  > md_top  && od_top  > mc_top , "must be");
+    assert(mc_base < ro_base && mc_base < rw_base && mc_base < md_base, "must be");
+    assert(md_top  > ro_top  && md_top  > rw_top  && md_top  > mc_top , "must be");
     assert(mc_top == rw_base, "must be");
     assert(rw_top == ro_base, "must be");
     assert(ro_top == md_base, "must be");
-    assert(md_top == od_base, "must be");
 
     _core_spaces_size = mapinfo->core_spaces_size();
-    MetaspaceObj::set_shared_metaspace_range((void*)mc_base, (void*)od_top);
+    MetaspaceObj::set_shared_metaspace_range((void*)mc_base, (void*)md_top);
     return true;
   } else {
     // If there was a failure in mapping any of the spaces, unmap the ones
@@ -1966,7 +1938,6 @@
     if (rw_base != NULL) mapinfo->unmap_region(rw);
     if (mc_base != NULL) mapinfo->unmap_region(mc);
     if (md_base != NULL) mapinfo->unmap_region(md);
-    if (od_base != NULL) mapinfo->unmap_region(od);
 #ifndef _WINDOWS
     // Release the entire mapped region
     shared_rs.release();
@@ -2049,7 +2020,6 @@
   _rw_region.print_out_of_space_msg(name, needed_bytes);
   _ro_region.print_out_of_space_msg(name, needed_bytes);
   _md_region.print_out_of_space_msg(name, needed_bytes);
-  _od_region.print_out_of_space_msg(name, needed_bytes);
 
   vm_exit_during_initialization(err_msg("Unable to allocate from '%s' region", name),
                                 "Please reduce the number of shared classes.");
--- a/src/hotspot/share/memory/metaspaceShared.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/memory/metaspaceShared.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -69,14 +69,10 @@
     ro = 2,  // read-only shared space in the heap
     md = 3,  // miscellaneous data for initializing tables, etc.
     num_core_spaces = 4, // number of non-string regions
-
-    // optional mapped spaces
-    // Currently it only contains class file data.
-    od = num_core_spaces,
-    num_non_heap_spaces = od + 1,
+    num_non_heap_spaces = 4,
 
     // mapped java heap regions
-    first_closed_archive_heap_region = od + 1,
+    first_closed_archive_heap_region = md + 1,
     max_closed_archive_heap_region = 2,
     last_closed_archive_heap_region = first_closed_archive_heap_region + max_closed_archive_heap_region - 1,
     first_open_archive_heap_region = last_closed_archive_heap_region + 1,
--- a/src/hotspot/share/oops/array.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/array.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -27,6 +27,7 @@
 
 #include "memory/allocation.hpp"
 #include "memory/metaspace.hpp"
+#include "runtime/orderAccess.hpp"
 #include "utilities/align.hpp"
 
 // Array for metadata allocation
@@ -121,8 +122,8 @@
   T*   adr_at(const int i)             { assert(i >= 0 && i< _length, "oob: 0 <= %d < %d", i, _length); return &_data[i]; }
   int  find(const T& x)                { return index_of(x); }
 
-  T at_acquire(const int which);
-  void release_at_put(int which, T contents);
+  T at_acquire(const int i)            { return OrderAccess::load_acquire(adr_at(i)); }
+  void release_at_put(int i, T x)      { OrderAccess::release_store(adr_at(i), x); }
 
   static int size(int length) {
     size_t bytes = align_up(byte_sizeof(length), BytesPerWord);
--- a/src/hotspot/share/oops/array.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- * 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.
- *
- */
-
-#ifndef SHARE_OOPS_ARRAY_INLINE_HPP
-#define SHARE_OOPS_ARRAY_INLINE_HPP
-
-#include "oops/array.hpp"
-#include "runtime/orderAccess.hpp"
-
-template <typename T>
-inline T Array<T>::at_acquire(const int which) { return OrderAccess::load_acquire(adr_at(which)); }
-
-template <typename T>
-inline void Array<T>::release_at_put(int which, T contents) { OrderAccess::release_store(adr_at(which), contents); }
-
-#endif // SHARE_OOPS_ARRAY_INLINE_HPP
--- a/src/hotspot/share/oops/constantPool.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/constantPool.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -39,7 +39,7 @@
 #include "memory/metaspaceShared.hpp"
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
-#include "oops/array.inline.hpp"
+#include "oops/array.hpp"
 #include "oops/constantPool.inline.hpp"
 #include "oops/cpCache.inline.hpp"
 #include "oops/instanceKlass.hpp"
@@ -56,10 +56,6 @@
 #include "runtime/vframe.inline.hpp"
 #include "utilities/copy.hpp"
 
-constantTag ConstantPool::tag_at(int which) const { return (constantTag)tags()->at_acquire(which); }
-
-void ConstantPool::release_tag_at_put(int which, jbyte t) { tags()->release_at_put(which, t); }
-
 ConstantPool* ConstantPool::allocate(ClassLoaderData* loader_data, int length, TRAPS) {
   Array<u1>* tags = MetadataFactory::new_array<u1>(loader_data, length, 0, CHECK_NULL);
   int size = ConstantPool::size(length);
--- a/src/hotspot/share/oops/constantPool.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/constantPool.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -131,7 +131,7 @@
 
   void set_tags(Array<u1>* tags)               { _tags = tags; }
   void tag_at_put(int which, jbyte t)          { tags()->at_put(which, t); }
-  void release_tag_at_put(int which, jbyte t);
+  void release_tag_at_put(int which, jbyte t)  { tags()->release_at_put(which, t); }
 
   u1* tag_addr_at(int which) const             { return tags()->adr_at(which); }
 
@@ -379,7 +379,7 @@
 
   // Tag query
 
-  constantTag tag_at(int which) const;
+  constantTag tag_at(int which) const { return (constantTag)tags()->at_acquire(which); }
 
   // Fetching constants
 
--- a/src/hotspot/share/oops/generateOopMap.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/generateOopMap.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -27,6 +27,7 @@
 #include "logging/log.hpp"
 #include "logging/logStream.hpp"
 #include "memory/allocation.inline.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/generateOopMap.hpp"
 #include "oops/oop.inline.hpp"
 #include "oops/symbol.hpp"
--- a/src/hotspot/share/oops/instanceKlass.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/instanceKlass.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -53,6 +53,7 @@
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
 #include "oops/fieldStreams.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/instanceClassLoaderKlass.hpp"
 #include "oops/instanceKlass.inline.hpp"
 #include "oops/instanceMirrorKlass.hpp"
@@ -182,8 +183,14 @@
       if (name == k->name()) {
         log_trace(class, nestmates)("- Found it at nest_members[%d] => cp[%d]", i, cp_index);
 
-        // names match so check actual klass - this may trigger class loading if
-        // it doesn't match (but that should be impossible)
+        // Names match so check actual klass - this may trigger class loading if
+        // it doesn't match (though that should be impossible). But to be safe we
+        // have to check for a compiler thread executing here.
+        if (!THREAD->can_call_java() && !_constants->tag_at(cp_index).is_klass()) {
+          log_trace(class, nestmates)("- validation required resolution in an unsuitable thread");
+          return false;
+        }
+
         Klass* k2 = _constants->klass_at(cp_index, CHECK_false);
         if (k2 == k) {
           log_trace(class, nestmates)("- class is listed as a nest member");
@@ -295,7 +302,7 @@
            error);
       }
 
-      if (validationException != NULL) {
+      if (validationException != NULL && THREAD->can_call_java()) {
         ResourceMark rm(THREAD);
         Exceptions::fthrow(THREAD_AND_LOCATION,
                            validationException,
@@ -2346,6 +2353,7 @@
 #if INCLUDE_JVMTI
   guarantee(_breakpoints == NULL, "must be");
   guarantee(_previous_versions == NULL, "must be");
+  _cached_class_file = NULL;
 #endif
 
   _init_thread = NULL;
@@ -2502,7 +2510,7 @@
   }
 
   // deallocate the cached class file
-  if (_cached_class_file != NULL && !MetaspaceShared::is_in_shared_metaspace(_cached_class_file)) {
+  if (_cached_class_file != NULL) {
     os::free(_cached_class_file);
     _cached_class_file = NULL;
   }
@@ -3963,12 +3971,7 @@
 
 #if INCLUDE_JVMTI
 JvmtiCachedClassFileData* InstanceKlass::get_cached_class_file() {
-  if (MetaspaceShared::is_in_shared_metaspace(_cached_class_file)) {
-    // Ignore the archived class stream data
-    return NULL;
-  } else {
-    return _cached_class_file;
-  }
+  return _cached_class_file;
 }
 
 jint InstanceKlass::get_cached_class_file_len() {
@@ -3978,19 +3981,4 @@
 unsigned char * InstanceKlass::get_cached_class_file_bytes() {
   return VM_RedefineClasses::get_cached_class_file_bytes(_cached_class_file);
 }
-
-#if INCLUDE_CDS
-JvmtiCachedClassFileData* InstanceKlass::get_archived_class_data() {
-  if (DumpSharedSpaces) {
-    return _cached_class_file;
-  } else {
-    assert(this->is_shared(), "class should be shared");
-    if (MetaspaceShared::is_in_shared_metaspace(_cached_class_file)) {
-      return _cached_class_file;
-    } else {
-      return NULL;
-    }
-  }
-}
 #endif
-#endif
--- a/src/hotspot/share/oops/instanceKlass.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/instanceKlass.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -847,14 +847,6 @@
   JvmtiCachedClassFieldMap* jvmti_cached_class_field_map() const {
     return _jvmti_cached_class_field_map;
   }
-
-#if INCLUDE_CDS
-  void set_archived_class_data(JvmtiCachedClassFileData* data) {
-    _cached_class_file = data;
-  }
-
-  JvmtiCachedClassFileData * get_archived_class_data();
-#endif // INCLUDE_CDS
 #else // INCLUDE_JVMTI
 
   static void purge_previous_versions(InstanceKlass* ik) { return; };
--- a/src/hotspot/share/oops/method.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/method.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -42,6 +42,7 @@
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
 #include "oops/constMethod.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/method.inline.hpp"
 #include "oops/methodData.hpp"
 #include "oops/objArrayOop.inline.hpp"
--- a/src/hotspot/share/oops/oopHandle.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/oopHandle.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -36,6 +36,7 @@
 // future uses for read barriers.
 
 class OopHandle {
+  friend class VMStructs;
 private:
   oop* _obj;
 
--- a/src/hotspot/share/oops/reflectionAccessorImplKlassHelper.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/oops/reflectionAccessorImplKlassHelper.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -26,6 +26,7 @@
 #include "precompiled.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/reflectionAccessorImplKlassHelper.hpp"
 #include "utilities/constantTag.hpp"
 #include "utilities/debug.hpp"
--- a/src/hotspot/share/opto/escape.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/opto/escape.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1726,6 +1726,18 @@
     // access its field since the field value is unknown after it.
     //
     Node* n = field->ideal_node();
+
+    // Test for an unsafe access that was parsed as maybe off heap
+    // (with a CheckCastPP to raw memory).
+    assert(n->is_AddP(), "expect an address computation");
+    if (n->in(AddPNode::Base)->is_top() &&
+        n->in(AddPNode::Address)->Opcode() == Op_CheckCastPP) {
+      assert(n->in(AddPNode::Address)->bottom_type()->isa_rawptr(), "raw address so raw cast expected");
+      assert(_igvn->type(n->in(AddPNode::Address)->in(1))->isa_oopptr(), "cast pattern at unsafe access expected");
+      jobj->set_scalar_replaceable(false);
+      return;
+    }
+
     for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
       Node* u = n->fast_out(i);
       if (u->is_LoadStore() || (u->is_Mem() && u->as_Mem()->is_mismatched_access())) {
--- a/src/hotspot/share/prims/jni.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/prims/jni.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -3953,9 +3953,6 @@
     }
 #endif
 
-    // Tracks the time application was running before GC
-    RuntimeService::record_application_start();
-
     // Notify JVMTI
     if (JvmtiExport::should_post_thread_life()) {
        JvmtiExport::post_thread_start(thread);
--- a/src/hotspot/share/prims/jvm.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/prims/jvm.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -45,6 +45,7 @@
 #include "memory/resourceArea.hpp"
 #include "memory/universe.hpp"
 #include "oops/access.inline.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/fieldStreams.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/method.hpp"
--- a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -39,6 +39,7 @@
 #include "memory/metaspaceShared.hpp"
 #include "memory/resourceArea.hpp"
 #include "memory/universe.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/fieldStreams.hpp"
 #include "oops/klassVtable.hpp"
 #include "oops/oop.inline.hpp"
--- a/src/hotspot/share/runtime/arguments.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/arguments.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -529,6 +529,7 @@
   { "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() },
 
   // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in:
   { "DefaultMaxRAMFraction",        JDK_Version::jdk(8),  JDK_Version::undefined(), JDK_Version::undefined() },
@@ -555,13 +556,13 @@
   { "UseImplicitStableValues",       JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
 
 #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
+  // These entries will generate build errors.  Their purpose is to test the macros.
   { "dep > obs",                    JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() },
   { "dep > exp ",                   JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(8) },
   { "obs > exp ",                   JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(8) },
   { "not deprecated or obsolete",   JDK_Version::undefined(), JDK_Version::undefined(), JDK_Version::jdk(9) },
   { "dup option",                   JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() },
   { "dup option",                   JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() },
-  { "BytecodeVerificationRemote",   JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::undefined() },
 #endif
 
   { NULL, JDK_Version(0), JDK_Version(0) }
@@ -2453,9 +2454,15 @@
           (is_absolute_path = match_option(option, "-agentpath:", &tail))) {
       if(tail != NULL) {
         const char* pos = strchr(tail, '=');
-        size_t len = (pos == NULL) ? strlen(tail) : pos - tail;
-        char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtArguments), tail, len);
-        name[len] = '\0';
+        char* name;
+        if (pos == NULL) {
+          name = os::strdup_check_oom(tail, mtArguments);
+        } else {
+          size_t len = pos - tail;
+          name = NEW_C_HEAP_ARRAY(char, len + 1, mtArguments);
+          memcpy(name, tail, len);
+          name[len] = '\0';
+        }
 
         char *options = NULL;
         if(pos != NULL) {
@@ -2749,6 +2756,7 @@
         if (FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, false) != JVMFlag::SUCCESS) {
           return JNI_EINVAL;
         }
+        warning("Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.");
       } else if (is_bad_option(option, args->ignoreUnrecognized, "verification")) {
         return JNI_EINVAL;
       }
--- a/src/hotspot/share/runtime/deoptimization.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/deoptimization.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -36,6 +36,7 @@
 #include "memory/allocation.inline.hpp"
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/method.hpp"
 #include "oops/objArrayOop.inline.hpp"
 #include "oops/oop.inline.hpp"
--- a/src/hotspot/share/runtime/fieldDescriptor.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/fieldDescriptor.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -28,6 +28,7 @@
 #include "memory/resourceArea.hpp"
 #include "memory/universe.hpp"
 #include "oops/annotations.hpp"
+#include "oops/constantPool.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/oop.inline.hpp"
 #include "oops/fieldStreams.hpp"
--- a/src/hotspot/share/runtime/init.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/init.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -174,10 +174,7 @@
       ObjectSynchronizer::audit_and_print_stats(true /* on_exit */);
     }
     perfMemory_exit();
-    if (log_is_enabled(Debug, safepoint, stats)) {
-      // Print the collected safepoint statistics.
-      SafepointSynchronize::print_stat_on_exit();
-    }
+    SafepointTracing::statistics_exit_log();
     if (PrintStringTableStatistics) {
       SymbolTable::dump(tty);
       StringTable::dump(tty);
--- a/src/hotspot/share/runtime/monitorChunk.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/monitorChunk.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 
 MonitorChunk::MonitorChunk(int number_on_monitors) {
   _number_of_monitors = number_on_monitors;
-  _monitors           = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors, mtInternal);
+  _monitors           = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors, mtSynchronizer);
   _next               = NULL;
 }
 
--- a/src/hotspot/share/runtime/monitorChunk.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/monitorChunk.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -30,7 +30,7 @@
 // Data structure for holding monitors for one activation during
 // deoptimization.
 
-class MonitorChunk: public CHeapObj<mtInternal> {
+class MonitorChunk: public CHeapObj<mtSynchronizer> {
  private:
   int              _number_of_monitors;
   BasicObjectLock* _monitors;
--- a/src/hotspot/share/runtime/mutex.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/mutex.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -39,7 +39,7 @@
 // TODO: Check if _name[MONITOR_NAME_LEN] should better get replaced by const char*.
 static const int MONITOR_NAME_LEN = 64;
 
-class Monitor : public CHeapObj<mtInternal> {
+class Monitor : public CHeapObj<mtSynchronizer> {
 
  public:
   // A special lock: Is a lock where you are guaranteed not to block while you are
--- a/src/hotspot/share/runtime/mutexLocker.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/mutexLocker.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -150,6 +150,9 @@
 #if INCLUDE_NMT
 Mutex*   NMTQuery_lock                = NULL;
 #endif
+#if INCLUDE_CDS && INCLUDE_JVMTI
+Mutex*   CDSClassFileStream_lock      = NULL;
+#endif
 
 #define MAX_NUM_MUTEX 128
 static Monitor * _mutex_array[MAX_NUM_MUTEX];
@@ -339,6 +342,9 @@
 #if INCLUDE_NMT
   def(NMTQuery_lock                , PaddedMutex  , max_nonleaf, false, Monitor::_safepoint_check_always);
 #endif
+#if INCLUDE_CDS && INCLUDE_JVMTI
+  def(CDSClassFileStream_lock      , PaddedMutex  , max_nonleaf, false, Monitor::_safepoint_check_always);
+#endif
 }
 
 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
--- a/src/hotspot/share/runtime/mutexLocker.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/mutexLocker.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -133,6 +133,9 @@
 #if INCLUDE_NMT
 extern Mutex*   NMTQuery_lock;                   // serialize NMT Dcmd queries
 #endif
+#if INCLUDE_CDS && INCLUDE_JVMTI
+extern Mutex*   CDSClassFileStream_lock;         // FileMapInfo::open_stream_for_jvmti
+#endif
 #if INCLUDE_JFR
 extern Mutex*   JfrStacktrace_lock;              // used to guard access to the JFR stacktrace table
 extern Monitor* JfrMsg_lock;                     // protects JFR messaging
--- a/src/hotspot/share/runtime/safepoint.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/safepoint.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -103,16 +103,6 @@
   }
 }
 
-static void post_safepoint_wait_blocked_event(EventSafepointWaitBlocked& event,
-                                              uint64_t safepoint_id,
-                                              int initial_threads_waiting_to_block) {
-  if (event.should_commit()) {
-    event.set_safepointId(safepoint_id);
-    event.set_runningThreadCount(initial_threads_waiting_to_block);
-    event.commit();
-  }
-}
-
 static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask& event,
                                               uint64_t safepoint_id,
                                               const char* name) {
@@ -138,27 +128,21 @@
 volatile uint64_t SafepointSynchronize::_safepoint_counter = 0;
 const uint64_t SafepointSynchronize::InactiveSafepointCounter = 0;
 int SafepointSynchronize::_current_jni_active_count = 0;
-long SafepointSynchronize::_end_of_last_safepoint = 0;
 
 WaitBarrier* SafepointSynchronize::_wait_barrier;
 
-// We need a place to save the desc since it is released before we need it.
-static char stopped_description[64] = "";
-static bool _vm_is_waiting = false;
-
 static volatile bool PageArmed = false;        // safepoint polling page is RO|RW vs PROT_NONE
 static bool timeout_error_printed = false;
 
 // Statistic related
-julong SafepointSynchronize::_coalesced_vmop_count = 0;
 static jlong _safepoint_begin_time = 0;
-static float _ts_of_current_safepoint = 0.0f;
 static volatile int _nof_threads_hit_polling_page = 0;
 
 void SafepointSynchronize::init(Thread* vmthread) {
   // WaitBarrier should never be destroyed since we will have
   // threads waiting on it while exiting.
   _wait_barrier = new WaitBarrier(vmthread);
+  SafepointTracing::init();
 }
 
 void SafepointSynchronize::increment_jni_active_count() {
@@ -244,16 +228,13 @@
   DEBUG_ONLY(assert_list_is_valid(tss_head, still_running);)
 
   *initial_running = still_running;
-  if (log_is_enabled(Debug, safepoint, stats)) {
-    begin_statistics(nof_threads, still_running);
-  }
 
   int iterations = 1; // The first iteration is above.
 
   while (still_running > 0) {
     // Check if this has taken too long:
     if (SafepointTimeout && safepoint_limit_time < os::javaTimeNanos()) {
-      print_safepoint_timeout(_spinning_timeout);
+      print_safepoint_timeout();
     }
     if (int(iterations) == -1) { // overflow - something is wrong.
       // We can only overflow here when we are using global
@@ -291,9 +272,6 @@
 
   assert(tss_head == NULL, "Must be empty");
 
-  if (log_is_enabled(Debug, safepoint, stats)) {
-    update_statistics_on_spin_end();
-  }
   return iterations;
 }
 
@@ -303,8 +281,11 @@
   // stopped by different mechanisms:
   //
   //  1. Running interpreted
-  //     The interpreter dispatch table is changed to force it to
-  //     check for a safepoint condition between bytecodes.
+  //     When executing branching/returning byte codes interpreter
+  //     checks if the poll is armed, if so blocks in SS::block().
+  //     When using global polling the interpreter dispatch table
+  //     is changed to force it to check for a safepoint condition
+  //     between bytecodes.
   //  2. Running in native code
   //     When returning from the native code, a Java thread must check
   //     the safepoint _state to see if we must block.  If the
@@ -322,9 +303,9 @@
   //     block condition until the safepoint operation is complete.
   //  5. In VM or Transitioning between states
   //     If a Java thread is currently running in the VM or transitioning
-  //     between states, the safepointing code will wait for the thread to
-  //     block itself when it attempts transitions to a new state.
-  //
+  //     between states, the safepointing code will poll the thread state
+  //     until the thread blocks itself when it attempts transitions to a
+  //     new state or locking a safepoint checked monitor.
 
   // We must never miss a thread with correct safepoint id, so we must make sure we arm
   // the wait barrier for the next safepoint id/counter.
@@ -363,17 +344,10 @@
 
 // Roll all threads forward to a safepoint and suspend them all
 void SafepointSynchronize::begin() {
-  EventSafepointBegin begin_event;
   assert(Thread::current()->is_VM_thread(), "Only VM thread may execute a safepoint");
 
-  strncpy(stopped_description, VMThread::vm_safepoint_description(), sizeof(stopped_description) - 1);
-  stopped_description[sizeof(stopped_description) - 1] = '\0';
-
-  if (log_is_enabled(Debug, safepoint, stats)) {
-    _safepoint_begin_time = os::javaTimeNanos();
-    _ts_of_current_safepoint = tty->time_stamp().seconds();
-    _nof_threads_hit_polling_page = 0;
-  }
+  EventSafepointBegin begin_event;
+  SafepointTracing::begin(VMThread::vm_op_type());
 
   Universe::heap()->safepoint_synchronize_begin();
 
@@ -385,9 +359,9 @@
 
   int nof_threads = Threads::number_of_threads();
 
-  log_debug(safepoint)("Safepoint synchronization initiated using %s wait barrier. (%d threads)", _wait_barrier->description(), nof_threads);
+  _nof_threads_hit_polling_page = 0;
 
-  RuntimeService::record_safepoint_begin();
+  log_debug(safepoint)("Safepoint synchronization initiated using %s wait barrier. (%d threads)", _wait_barrier->description(), nof_threads);
 
   // Reset the count of active JNI critical threads
   _current_jni_active_count = 0;
@@ -399,9 +373,9 @@
   if (SafepointTimeout) {
     // Set the limit time, so that it can be compared to see if this has taken
     // too long to complete.
-    safepoint_limit_time = os::javaTimeNanos() + (jlong)SafepointTimeoutDelay * MICROUNITS;
+    safepoint_limit_time = SafepointTracing::start_of_safepoint() + (jlong)SafepointTimeoutDelay * (NANOUNITS / MILLIUNITS);
+    timeout_error_printed = false;
   }
-  timeout_error_printed = false;
 
   EventSafepointStateSynchronization sync_event;
   int initial_running = 0;
@@ -413,20 +387,13 @@
   int iterations = synchronize_threads(safepoint_limit_time, nof_threads, &initial_running);
   assert(_waiting_to_block == 0, "No thread should be running");
 
-  post_safepoint_synchronize_event(sync_event, _safepoint_counter, initial_running,
-                                   _waiting_to_block, iterations);
-
-  // Keep event from now.
-  EventSafepointWaitBlocked wait_blocked_event;
-
 #ifndef PRODUCT
-  if (SafepointTimeout) {
+  if (safepoint_limit_time != 0) {
     jlong current_time = os::javaTimeNanos();
     if (safepoint_limit_time < current_time) {
       log_warning(safepoint)("# SafepointSynchronize: Finished after "
                     INT64_FORMAT_W(6) " ms",
-                    (int64_t)((current_time - safepoint_limit_time) / MICROUNITS +
-                              (jlong)SafepointTimeoutDelay));
+                    (int64_t)(current_time - SafepointTracing::start_of_safepoint()) / (NANOUNITS / MILLIUNITS));
     }
   }
 #endif
@@ -438,8 +405,6 @@
 
   OrderAccess::fence();
 
-  post_safepoint_wait_blocked_event(wait_blocked_event, _safepoint_counter, 0);
-
 #ifdef ASSERT
   // Make sure all the threads were visited.
   for (JavaThreadIteratorWithHandle jtiwh; JavaThread *cur = jtiwh.next(); ) {
@@ -450,12 +415,12 @@
   // Update the count of active JNI critical regions
   GCLocker::set_jni_lock_count(_current_jni_active_count);
 
-  log_info(safepoint)("Entering safepoint region: %s", stopped_description);
+  post_safepoint_synchronize_event(sync_event,
+                                   _safepoint_counter,
+                                   initial_running,
+                                   _waiting_to_block, iterations);
 
-  RuntimeService::record_safepoint_synchronized();
-  if (log_is_enabled(Debug, safepoint, stats)) {
-    update_statistics_on_sync_end(os::javaTimeNanos());
-  }
+  SafepointTracing::synchronized(nof_threads, initial_running, _nof_threads_hit_polling_page);
 
   // We do the safepoint cleanup first since a GC related safepoint
   // needs cleanup to be completed before running the GC op.
@@ -463,12 +428,8 @@
   do_cleanup_tasks();
   post_safepoint_cleanup_event(cleanup_event, _safepoint_counter);
 
-  if (log_is_enabled(Debug, safepoint, stats)) {
-    // Record how much time spend on the above cleanup tasks
-    update_statistics_on_cleanup_end(os::javaTimeNanos());
-  }
-
   post_safepoint_begin_event(begin_event, _safepoint_counter, nof_threads, _current_jni_active_count);
+  SafepointTracing::cleanup();
 }
 
 void SafepointSynchronize::disarm_safepoint() {
@@ -520,10 +481,6 @@
     }
   } // ~JavaThreadIteratorWithHandle
 
-  log_info(safepoint)("Leaving safepoint region");
-
-  RuntimeService::record_safepoint_end();
-
   // Release threads lock, so threads can be created/destroyed again.
   Threads_lock->unlock();
 
@@ -539,19 +496,11 @@
   uint64_t safepoint_id = _safepoint_counter;
   assert(Thread::current()->is_VM_thread(), "Only VM thread can execute a safepoint");
 
-  if (log_is_enabled(Debug, safepoint, stats)) {
-    end_statistics(os::javaTimeNanos());
-  }
-
   disarm_safepoint();
 
-  RuntimeService::record_safepoint_epilog(stopped_description);
-
   Universe::heap()->safepoint_synchronize_end();
 
-  // record this time so VMThread can keep track how much time has elapsed
-  // since last safepoint.
-  _end_of_last_safepoint = os::javaTimeMillis();
+  SafepointTracing::end();
 
   post_safepoint_end_event(event, safepoint_id);
 }
@@ -915,7 +864,7 @@
     assert(SafepointSynchronize::is_synchronizing(), "polling encountered outside safepoint synchronization");
   }
 
-  if (log_is_enabled(Debug, safepoint, stats)) {
+  if (log_is_enabled(Info, safepoint, stats)) {
     Atomic::inc(&_nof_threads_hit_polling_page);
   }
 
@@ -925,7 +874,7 @@
 }
 
 
-void SafepointSynchronize::print_safepoint_timeout(SafepointTimeoutReason reason) {
+void SafepointSynchronize::print_safepoint_timeout() {
   if (!timeout_error_printed) {
     timeout_error_printed = true;
     // Print out the thread info which didn't reach the safepoint for debugging
@@ -937,20 +886,10 @@
 
       ls.cr();
       ls.print_cr("# SafepointSynchronize::begin: Timeout detected:");
-      if (reason ==  _spinning_timeout) {
-        ls.print_cr("# SafepointSynchronize::begin: Timed out while spinning to reach a safepoint.");
-      } else if (reason == _blocking_timeout) {
-        ls.print_cr("# SafepointSynchronize::begin: Timed out while waiting for threads to stop.");
-      }
-
+      ls.print_cr("# SafepointSynchronize::begin: Timed out while spinning to reach a safepoint.");
       ls.print_cr("# SafepointSynchronize::begin: Threads which did not reach the safepoint:");
-      ThreadSafepointState *cur_state;
       for (JavaThreadIteratorWithHandle jtiwh; JavaThread *cur_thread = jtiwh.next(); ) {
-        cur_state = cur_thread->safepoint_state();
-
-        if (cur_thread->thread_state() != _thread_blocked &&
-          ((reason == _spinning_timeout && cur_state->is_running()) ||
-             (reason == _blocking_timeout))) {
+        if (cur_thread->safepoint_state()->is_running()) {
           ls.print("# ");
           cur_thread->print_on(&ls);
           ls.cr();
@@ -964,11 +903,10 @@
   // ShowMessageBoxOnError.
   if (AbortVMOnSafepointTimeout) {
     fatal("Safepoint sync time longer than " INTX_FORMAT "ms detected when executing %s.",
-          SafepointTimeoutDelay, VMThread::vm_safepoint_description());
+          SafepointTimeoutDelay, VMThread::vm_operation()->name());
   }
 }
 
-
 // -------------------------------------------------------------------------------------------------------
 // Implementation of ThreadSafepointState
 
@@ -1176,108 +1114,25 @@
 }
 
 
-//
-//                     Statistics & Instrumentations
-//
-struct SafepointStats {
-    float  _time_stamp;                        // record when the current safepoint occurs in seconds
-    int    _vmop_type;                         // tyep of VM operation triggers the safepoint
-    int    _nof_total_threads;                 // total number of Java threads
-    int    _nof_initial_running_threads;       // total number of initially seen running threads
-    int    _nof_threads_wait_to_block;         // total number of threads waiting for to block
-    bool   _page_armed;                        // true if polling page is armed, false otherwise
-    int _nof_threads_hit_page_trap;            // total number of threads hitting the page trap
-    jlong  _time_to_spin;                      // total time in millis spent in spinning
-    jlong  _time_to_wait_to_block;             // total time in millis spent in waiting for to block
-    jlong  _time_to_do_cleanups;               // total time in millis spent in performing cleanups
-    jlong  _time_to_sync;                      // total time in millis spent in getting to _synchronized
-    jlong  _time_to_exec_vmop;                 // total time in millis spent in vm operation itself
-};
-
-static const int _statistics_header_count = 30;
-static int _cur_stat_index = 0;
-static SafepointStats safepoint_stats = {0};  // zero initialize
-static SafepointStats* spstat = &safepoint_stats;
-
-static julong _safepoint_reasons[VM_Operation::VMOp_Terminating];
-static jlong  _max_sync_time = 0;
-static jlong  _max_vmop_time = 0;
-
-static jlong  cleanup_end_time = 0;
-
-void SafepointSynchronize::begin_statistics(int nof_threads, int nof_running) {
-
-  spstat->_time_stamp = _ts_of_current_safepoint;
-
-  VM_Operation *op = VMThread::vm_operation();
-  spstat->_vmop_type = op != NULL ? op->type() : VM_Operation::VMOp_None;
-  _safepoint_reasons[spstat->_vmop_type]++;
-
-  spstat->_nof_total_threads = nof_threads;
-  spstat->_nof_initial_running_threads = nof_running;
-
-  // Records the start time of spinning. The real time spent on spinning
-  // will be adjusted when spin is done. Same trick is applied for time
-  // spent on waiting for threads to block.
-  if (nof_running != 0) {
-    spstat->_time_to_spin = os::javaTimeNanos();
-  }  else {
-    spstat->_time_to_spin = 0;
-  }
-}
+// -------------------------------------------------------------------------------------------------------
+// Implementation of SafepointTracing
 
-void SafepointSynchronize::update_statistics_on_spin_end() {
-  jlong cur_time = os::javaTimeNanos();
-
-  spstat->_nof_threads_wait_to_block = _waiting_to_block;
-  if (spstat->_nof_initial_running_threads != 0) {
-    spstat->_time_to_spin = cur_time - spstat->_time_to_spin;
-  }
-
-  // Records the start time of waiting for to block. Updated when block is done.
-  if (_waiting_to_block != 0) {
-    spstat->_time_to_wait_to_block = cur_time;
-  } else {
-    spstat->_time_to_wait_to_block = 0;
-  }
-}
-
-void SafepointSynchronize::update_statistics_on_sync_end(jlong end_time) {
-
-  if (spstat->_nof_threads_wait_to_block != 0) {
-    spstat->_time_to_wait_to_block = end_time -
-      spstat->_time_to_wait_to_block;
-  }
+jlong SafepointTracing::_last_safepoint_begin_time_ns = 0;
+jlong SafepointTracing::_last_safepoint_sync_time_ns = 0;
+jlong SafepointTracing::_last_safepoint_cleanup_time_ns = 0;
+jlong SafepointTracing::_last_safepoint_end_time_ns = 0;
+jlong SafepointTracing::_last_app_time_ns = 0;
+int SafepointTracing::_nof_threads = 0;
+int SafepointTracing::_nof_running = 0;
+int SafepointTracing::_page_trap = 0;
+VM_Operation::VMOp_Type SafepointTracing::_current_type;
+jlong     SafepointTracing::_max_sync_time = 0;
+jlong     SafepointTracing::_max_vmop_time = 0;
+uint64_t  SafepointTracing::_op_count[VM_Operation::VMOp_Terminating] = {0};
 
-  // Records the end time of sync which will be used to calculate the total
-  // vm operation time. Again, the real time spending in syncing will be deducted
-  // from the start of the sync time later when end_statistics is called.
-  spstat->_time_to_sync = end_time - _safepoint_begin_time;
-  if (spstat->_time_to_sync > _max_sync_time) {
-    _max_sync_time = spstat->_time_to_sync;
-  }
-
-  spstat->_time_to_do_cleanups = end_time;
-}
-
-void SafepointSynchronize::update_statistics_on_cleanup_end(jlong end_time) {
-
-  // Record how long spent in cleanup tasks.
-  spstat->_time_to_do_cleanups = end_time - spstat->_time_to_do_cleanups;
-  cleanup_end_time = end_time;
-}
-
-void SafepointSynchronize::end_statistics(jlong vmop_end_time) {
-
-  // Update the vm operation time.
-  spstat->_time_to_exec_vmop = vmop_end_time -  cleanup_end_time;
-  if (spstat->_time_to_exec_vmop > _max_vmop_time) {
-    _max_vmop_time = spstat->_time_to_exec_vmop;
-  }
-
-  spstat->_nof_threads_hit_page_trap = _nof_threads_hit_polling_page;
-
-  print_statistics();
+void SafepointTracing::init() {
+  // Application start
+  _last_safepoint_end_time_ns = os::javaTimeNanos();
 }
 
 // Helper method to print the header.
@@ -1285,66 +1140,121 @@
   // The number of spaces is significant here, and should match the format
   // specifiers in print_statistics().
 
-  st->print("          vmop                            "
-            "[ threads:    total initially_running wait_to_block ]"
-            "[ time:    spin   block    sync cleanup    vmop ] ");
+  st->print("VM Operation                 "
+            "[ threads: total initial_running ]"
+            "[ time:       sync    cleanup       vmop      total ]");
 
-  st->print_cr("page_trap_count");
+  st->print_cr(" page_trap_count");
 }
 
 // This prints a nice table.  To get the statistics to not shift due to the logging uptime
-// decorator, use the option as: -Xlog:safepoint+stats=debug:[outputfile]:none
-void SafepointSynchronize::print_statistics() {
-  LogTarget(Debug, safepoint, stats) lt;
+// decorator, use the option as: -Xlog:safepoint+stats:[outputfile]:none
+void SafepointTracing::statistics_log() {
+  LogTarget(Info, safepoint, stats) lt;
   assert (lt.is_enabled(), "should only be called when printing statistics is enabled");
   LogStream ls(lt);
 
+  static int _cur_stat_index = 0;
+
   // Print header every 30 entries
-  if ((_cur_stat_index % _statistics_header_count) == 0) {
+  if ((_cur_stat_index % 30) == 0) {
     print_header(&ls);
     _cur_stat_index = 1;  // wrap
   } else {
     _cur_stat_index++;
   }
 
-  ls.print("%8.3f: ", spstat->_time_stamp);
-  ls.print("%-28s  [          "
-           INT32_FORMAT_W(8) " " INT32_FORMAT_W(17) " " INT32_FORMAT_W(13) " "
+  ls.print("%-28s [       "
+           INT32_FORMAT_W(8) "        " INT32_FORMAT_W(8) " "
            "]",
-           VM_Operation::name(spstat->_vmop_type),
-           spstat->_nof_total_threads,
-           spstat->_nof_initial_running_threads,
-           spstat->_nof_threads_wait_to_block);
-  // "/ MICROUNITS " is to convert the unit from nanos to millis.
+           VM_Operation::name(_current_type),
+           _nof_threads,
+           _nof_running);
   ls.print("[       "
-           INT64_FORMAT_W(7) " " INT64_FORMAT_W(7) " "
-           INT64_FORMAT_W(7) " " INT64_FORMAT_W(7) " "
-           INT64_FORMAT_W(7) " ] ",
-           (int64_t)(spstat->_time_to_spin / MICROUNITS),
-           (int64_t)(spstat->_time_to_wait_to_block / MICROUNITS),
-           (int64_t)(spstat->_time_to_sync / MICROUNITS),
-           (int64_t)(spstat->_time_to_do_cleanups / MICROUNITS),
-           (int64_t)(spstat->_time_to_exec_vmop / MICROUNITS));
+           INT64_FORMAT_W(10) " " INT64_FORMAT_W(10) " "
+           INT64_FORMAT_W(10) " " INT64_FORMAT_W(10) " ]",
+           (int64_t)(_last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns),
+           (int64_t)(_last_safepoint_cleanup_time_ns - _last_safepoint_sync_time_ns),
+           (int64_t)(_last_safepoint_end_time_ns - _last_safepoint_cleanup_time_ns),
+           (int64_t)(_last_safepoint_end_time_ns - _last_safepoint_begin_time_ns));
 
-  ls.print_cr(INT32_FORMAT_W(15) " ", spstat->_nof_threads_hit_page_trap);
+  ls.print_cr(INT32_FORMAT_W(16), _page_trap);
 }
 
 // This method will be called when VM exits. This tries to summarize the sampling.
 // Current thread may already be deleted, so don't use ResourceMark.
-void SafepointSynchronize::print_stat_on_exit() {
-
+void SafepointTracing::statistics_exit_log() {
+  if (!log_is_enabled(Info, safepoint, stats)) {
+    return;
+  }
   for (int index = 0; index < VM_Operation::VMOp_Terminating; index++) {
-    if (_safepoint_reasons[index] != 0) {
-      log_debug(safepoint, stats)("%-28s" UINT64_FORMAT_W(10), VM_Operation::name(index),
-                _safepoint_reasons[index]);
+    if (_op_count[index] != 0) {
+      log_info(safepoint, stats)("%-28s" UINT64_FORMAT_W(10), VM_Operation::name(index),
+               _op_count[index]);
     }
   }
 
-  log_debug(safepoint, stats)("VM operations coalesced during safepoint " INT64_FORMAT,
-                              _coalesced_vmop_count);
-  log_debug(safepoint, stats)("Maximum sync time  " INT64_FORMAT" ms",
-                              (int64_t)(_max_sync_time / MICROUNITS));
-  log_debug(safepoint, stats)("Maximum vm operation time (except for Exit VM operation)  "
-                              INT64_FORMAT " ms",
-                              (int64_t)(_max_vmop_time / MICROUNITS));
+  log_info(safepoint, stats)("VM operations coalesced during safepoint " INT64_FORMAT,
+                              VMThread::get_coalesced_count());
+  log_info(safepoint, stats)("Maximum sync time  " INT64_FORMAT" ns",
+                              (int64_t)(_max_sync_time));
+  log_info(safepoint, stats)("Maximum vm operation time (except for Exit VM operation)  "
+                              INT64_FORMAT " ns",
+                              (int64_t)(_max_vmop_time));
+}
+
+void SafepointTracing::begin(VM_Operation::VMOp_Type type) {
+  _op_count[type]++;
+  _current_type = type;
+
+  // update the time stamp to begin recording safepoint time
+  _last_safepoint_begin_time_ns = os::javaTimeNanos();
+  _last_safepoint_sync_time_ns = 0;
+  _last_safepoint_cleanup_time_ns = 0;
+
+  _last_app_time_ns = _last_safepoint_begin_time_ns - _last_safepoint_end_time_ns;
+  _last_safepoint_end_time_ns = 0;
+
+  RuntimeService::record_safepoint_begin(_last_app_time_ns);
+}
+
+void SafepointTracing::synchronized(int nof_threads, int nof_running, int traps) {
+  _last_safepoint_sync_time_ns = os::javaTimeNanos();
+  _nof_threads = nof_threads;
+  _nof_running = nof_running;
+  _page_trap   = traps;
+  RuntimeService::record_safepoint_synchronized(_last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns);
 }
+
+void SafepointTracing::cleanup() {
+  _last_safepoint_cleanup_time_ns = os::javaTimeNanos();
+}
+
+void SafepointTracing::end() {
+  _last_safepoint_end_time_ns = os::javaTimeNanos();
+
+  if (_max_sync_time < (_last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns)) {
+    _max_sync_time = _last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns;
+  }
+  if (_max_vmop_time < (_last_safepoint_end_time_ns - _last_safepoint_sync_time_ns)) {
+    _max_vmop_time = _last_safepoint_end_time_ns - _last_safepoint_sync_time_ns;
+  }
+  if (log_is_enabled(Info, safepoint, stats)) {
+    statistics_log();
+  }
+
+  log_info(safepoint)(
+     "Safepoint \"%s\", "
+     "Time since last: " JLONG_FORMAT " ns, "
+     "Reaching safepoint: " JLONG_FORMAT " ns, "
+     "At safepoint: " JLONG_FORMAT " ns, "
+     "Total: " JLONG_FORMAT " ns",
+      VM_Operation::name(_current_type),
+      _last_app_time_ns,
+      _last_safepoint_cleanup_time_ns - _last_safepoint_begin_time_ns,
+      _last_safepoint_end_time_ns     - _last_safepoint_cleanup_time_ns,
+      _last_safepoint_end_time_ns     - _last_safepoint_begin_time_ns
+     );
+
+  RuntimeService::record_safepoint_end(_last_safepoint_end_time_ns - _last_safepoint_cleanup_time_ns);
+}
--- a/src/hotspot/share/runtime/safepoint.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/safepoint.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -28,6 +28,7 @@
 #include "memory/allocation.hpp"
 #include "runtime/os.hpp"
 #include "runtime/thread.hpp"
+#include "runtime/vmOperations.hpp"
 #include "utilities/ostream.hpp"
 #include "utilities/waitBarrier.hpp"
 
@@ -77,11 +78,6 @@
   friend class ThreadSafepointState;
   friend class HandshakeState;
 
-  enum SafepointTimeoutReason {
-    _spinning_timeout = 0,
-    _blocking_timeout = 1
-  };
-
   // Threads might read this flag directly, without acquiring the Threads_lock:
   static volatile SynchronizeState _state;
   // Number of threads we are waiting for to block:
@@ -110,7 +106,7 @@
   static void print_statistics();
 
   // For debug long safepoint
-  static void print_safepoint_timeout(SafepointTimeoutReason timeout_reason);
+  static void print_safepoint_timeout();
 
   // Helper methods for safepoint procedure:
   static void arm_safepoint();
@@ -150,19 +146,9 @@
   // Exception handling for page polling
   static void handle_polling_page_exception(JavaThread *thread);
 
-  // VM Thread interface for determining safepoint rate
-  static long last_non_safepoint_interval() {
-    return os::javaTimeMillis() - _end_of_last_safepoint;
-  }
-  static long end_of_last_safepoint() {
-    return _end_of_last_safepoint;
-  }
   static bool is_cleanup_needed();
   static void do_cleanup_tasks();
 
-  static void print_stat_on_exit();
-  static void inc_vmop_coalesced_count() { _coalesced_vmop_count++; }
-
   static void set_is_at_safepoint()             { _state = _synchronized; }
   static void set_is_not_at_safepoint()         { _state = _not_synchronized; }
 
@@ -197,7 +183,7 @@
   assert(!SafepointSynchronize::is_at_safepoint(), __VA_ARGS__)
 
 // State class for a thread suspended at a safepoint
-class ThreadSafepointState: public CHeapObj<mtInternal> {
+class ThreadSafepointState: public CHeapObj<mtThread> {
  private:
   // At polling page safepoint (NOT a poll return safepoint):
   volatile bool                   _at_poll_safepoint;
@@ -247,6 +233,48 @@
   static void destroy(JavaThread *thread);
 };
 
+class SafepointTracing : public AllStatic {
+private:
+  // Absolute
+  static jlong _last_safepoint_begin_time_ns;
+  static jlong _last_safepoint_sync_time_ns;
+  static jlong _last_safepoint_cleanup_time_ns;
+  static jlong _last_safepoint_end_time_ns;
+  // Relative
+  static jlong _last_app_time_ns;
 
+  static int _nof_threads;
+  static int _nof_running;
+  static int _page_trap;
+
+  static VM_Operation::VMOp_Type _current_type;
+  static jlong     _max_sync_time;
+  static jlong     _max_vmop_time;
+  static uint64_t  _op_count[VM_Operation::VMOp_Terminating];
+
+  static void statistics_log();
+
+public:
+  static void init();
+
+  static void begin(VM_Operation::VMOp_Type type);
+  static void synchronized(int nof_threads, int nof_running, int traps);
+  static void cleanup();
+  static void end();
+
+  static void statistics_exit_log();
+
+  static jlong time_since_last_safepoint_ms() {
+    return (os::javaTimeNanos() - _last_safepoint_end_time_ns) / (NANOUNITS / MILLIUNITS);
+  }
+
+  static jlong end_of_last_safepoint_ms() {
+    return _last_safepoint_end_time_ns / (NANOUNITS / MILLIUNITS);
+  }
+
+  static jlong start_of_safepoint() {
+    return _last_safepoint_begin_time_ns;
+  }
+};
 
 #endif // SHARE_RUNTIME_SAFEPOINT_HPP
--- a/src/hotspot/share/runtime/semaphore.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/semaphore.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -40,7 +40,7 @@
 class JavaThread;
 
 // Implements the limited, platform independent Semaphore API.
-class Semaphore : public CHeapObj<mtInternal> {
+class Semaphore : public CHeapObj<mtSynchronizer> {
   SemaphoreImpl _impl;
 
   // Prevent copying and assignment of Semaphore instances.
--- a/src/hotspot/share/runtime/tieredThresholdPolicy.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/tieredThresholdPolicy.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -479,7 +479,7 @@
 
   // We don't update the rate if we've just came out of a safepoint.
   // delta_s is the time since last safepoint in milliseconds.
-  jlong delta_s = t - SafepointSynchronize::end_of_last_safepoint();
+  jlong delta_s = t - SafepointTracing::end_of_last_safepoint_ms();
   jlong delta_t = t - (m->prev_time() != 0 ? m->prev_time() : start_time()); // milliseconds since the last measurement
   // How many events were there since the last time?
   int event_count = m->invocation_count() + m->backedge_count();
@@ -504,7 +504,7 @@
 // Check if this method has been stale from a given number of milliseconds.
 // See select_task().
 bool TieredThresholdPolicy::is_stale(jlong t, jlong timeout, Method* m) {
-  jlong delta_s = t - SafepointSynchronize::end_of_last_safepoint();
+  jlong delta_s = t - SafepointTracing::end_of_last_safepoint_ms();
   jlong delta_t = t - m->prev_time();
   if (delta_t > timeout && delta_s > timeout) {
     int event_count = m->invocation_count() + m->backedge_count();
--- a/src/hotspot/share/runtime/vmOperations.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/vmOperations.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -41,6 +41,7 @@
 // Note: When new VM_XXX comes up, add 'XXX' to the template table.
 #define VM_OPS_DO(template)                       \
   template(None)                                  \
+  template(Cleanup)                               \
   template(ThreadStop)                            \
   template(ThreadDump)                            \
   template(PrintThreads)                          \
@@ -213,7 +214,7 @@
 
   // Debugging
   virtual void print_on_error(outputStream* st) const;
-  const char* name() const { return _names[type()]; }
+  virtual const char* name() const  { return _names[type()]; }
   static const char* name(int type) {
     assert(type >= 0 && type < VMOp_Terminating, "invalid VM operation type");
     return _names[type];
@@ -223,6 +224,21 @@
 #endif
 };
 
+class VM_None: public VM_Operation {
+  const char* _reason;
+ public:
+  VM_None(const char* reason) : _reason(reason) {}
+  const char* name() const { return _reason; }
+  VMOp_Type type() const { return VMOp_None; }
+  void doit() {};
+};
+
+class VM_Cleanup: public VM_Operation {
+ public:
+  VMOp_Type type() const { return VMOp_Cleanup; }
+  void doit() {};
+};
+
 class VM_ThreadStop: public VM_Operation {
  private:
   oop     _thread;        // The Thread that the Throwable is thrown against
--- a/src/hotspot/share/runtime/vmStructs.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/vmStructs.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -332,6 +332,7 @@
   unchecked_nonstatic_field(Symbol,            _body,                                         sizeof(u1)) /* NOTE: no type */        \
   nonstatic_field(Symbol,                      _body[0],                                      u1)                                    \
   nonstatic_field(TypeArrayKlass,              _max_length,                                   jint)                                  \
+  nonstatic_field(OopHandle,                   _obj,                                          oop*)                                  \
                                                                                                                                      \
   /***********************/                                                                                                          \
   /* Constant Pool Cache */                                                                                                          \
@@ -1299,7 +1300,8 @@
   declare_oop_type(oop)                                                   \
   declare_oop_type(narrowOop)                                             \
   declare_oop_type(typeArrayOop)                                          \
-  declare_oop_type(OopHandle)                                             \
+                                                                          \
+  declare_toplevel_type(OopHandle)                                        \
                                                                           \
   /*************************************/                                 \
   /* MethodOop-related data structures */                                 \
--- a/src/hotspot/share/runtime/vmThread.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/vmThread.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -48,19 +48,13 @@
 #include "utilities/vmError.hpp"
 #include "utilities/xmlstream.hpp"
 
-// Dummy VM operation to act as first element in our circular double-linked list
-class VM_None: public VM_Operation {
-  VMOp_Type type() const { return VMOp_None; }
-  void  doit() {};
-};
-
 VMOperationQueue::VMOperationQueue() {
   // The queue is a circular doubled-linked list, which always contains
   // one element (i.e., one element means empty).
   for(int i = 0; i < nof_priorities; i++) {
     _queue_length[i] = 0;
     _queue_counter = 0;
-    _queue[i] = new VM_None();
+    _queue[i] = new VM_None("QueueHead");
     _queue[i]->set_next(_queue[i]);
     _queue[i]->set_prev(_queue[i]);
   }
@@ -229,14 +223,14 @@
 //------------------------------------------------------------------------------------------------------------------
 // Implementation of VMThread stuff
 
-bool                VMThread::_should_terminate   = false;
+bool              VMThread::_should_terminate   = false;
 bool              VMThread::_terminated         = false;
 Monitor*          VMThread::_terminate_lock     = NULL;
 VMThread*         VMThread::_vm_thread          = NULL;
 VM_Operation*     VMThread::_cur_vm_operation   = NULL;
 VMOperationQueue* VMThread::_vm_queue           = NULL;
 PerfCounter*      VMThread::_perf_accumulated_vm_operation_time = NULL;
-const char*       VMThread::_no_op_reason       = NULL;
+uint64_t          VMThread::_coalesced_count = 0;
 VMOperationTimeoutTask* VMThread::_timeout_task = NULL;
 
 
@@ -283,6 +277,8 @@
   _vm_thread = NULL;      // VM thread is gone
 }
 
+static VM_None halt_op("Halt");
+
 void VMThread::run() {
   assert(this == vm_thread(), "check");
 
@@ -320,7 +316,7 @@
   }
 
   // 4526887 let VM thread exit at Safepoint
-  _no_op_reason = "Halt";
+  _cur_vm_operation = &halt_op;
   SafepointSynchronize::begin();
 
   if (VerifyBeforeExit) {
@@ -435,24 +431,25 @@
   }
 }
 
-bool VMThread::no_op_safepoint_needed(bool check_time) {
+static VM_None    safepointALot_op("SafepointALot");
+static VM_Cleanup cleanup_op;
+
+VM_Operation* VMThread::no_op_safepoint(bool check_time) {
   if (SafepointALot) {
-    _no_op_reason = "SafepointALot";
-    return true;
+    return &safepointALot_op;
   }
   if (!SafepointSynchronize::is_cleanup_needed()) {
-    return false;
+    return NULL;
   }
   if (check_time) {
-    long interval = SafepointSynchronize::last_non_safepoint_interval();
+    long interval_ms = SafepointTracing::time_since_last_safepoint_ms();
     bool max_time_exceeded = GuaranteedSafepointInterval != 0 &&
-                             (interval > GuaranteedSafepointInterval);
+                             (interval_ms > GuaranteedSafepointInterval);
     if (!max_time_exceeded) {
-      return false;
+      return NULL;
     }
   }
-  _no_op_reason = "Cleanup";
-  return true;
+  return &cleanup_op;
 }
 
 void VMThread::loop() {
@@ -494,7 +491,7 @@
           exit(-1);
         }
 
-        if (timedout && VMThread::no_op_safepoint_needed(false)) {
+        if (timedout && (_cur_vm_operation = VMThread::no_op_safepoint(false)) != NULL) {
           MutexUnlockerEx mul(VMOperationQueue_lock,
                               Mutex::_no_safepoint_check_flag);
           // Force a safepoint since we have not had one for at least
@@ -506,6 +503,7 @@
             if (GCALotAtAllSafepoints) InterfaceSupport::check_gc_alot();
           #endif
           SafepointSynchronize::end();
+          _cur_vm_operation = NULL;
         }
         _cur_vm_operation = _vm_queue->remove_next();
 
@@ -555,9 +553,7 @@
               _vm_queue->set_drain_list(next);
               evaluate_operation(_cur_vm_operation);
               _cur_vm_operation = next;
-              if (log_is_enabled(Debug, safepoint, stats)) {
-                SafepointSynchronize::inc_vmop_coalesced_count();
-              }
+              _coalesced_count++;
             } while (_cur_vm_operation != NULL);
           }
           // There is a chance that a thread enqueued a safepoint op
@@ -622,10 +618,11 @@
     //
     // We want to make sure that we get to a safepoint regularly.
     //
-    if (VMThread::no_op_safepoint_needed(true)) {
+    if ((_cur_vm_operation = VMThread::no_op_safepoint(false)) != NULL) {
       HandleMark hm(VMThread::vm_thread());
       SafepointSynchronize::begin();
       SafepointSynchronize::end();
+      _cur_vm_operation = NULL;
     }
   }
 }
--- a/src/hotspot/share/runtime/vmThread.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/runtime/vmThread.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -119,12 +119,11 @@
   static bool _terminated;
   static Monitor * _terminate_lock;
   static PerfCounter* _perf_accumulated_vm_operation_time;
-
-  static const char* _no_op_reason;
+  static uint64_t _coalesced_count;
 
   static VMOperationTimeoutTask* _timeout_task;
 
-  static bool no_op_safepoint_needed(bool check_time);
+  static VM_Operation* no_op_safepoint(bool check_time);
 
   void evaluate_operation(VM_Operation* op);
 
@@ -155,9 +154,8 @@
 
   // Returns the current vm operation if any.
   static VM_Operation* vm_operation()             { return _cur_vm_operation; }
-
-  // Returns the current vm operation name or set reason
-  static const char* vm_safepoint_description()   { return _cur_vm_operation != NULL ? _cur_vm_operation->name() : _no_op_reason; };
+  static VM_Operation::VMOp_Type vm_op_type()     { return _cur_vm_operation->type(); }
+  static uint64_t get_coalesced_count()           { return _coalesced_count; }
 
   // Returns the single instance of VMThread.
   static VMThread* vm_thread()                    { return _vm_thread; }
--- a/src/hotspot/share/services/attachListener.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/services/attachListener.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -257,19 +257,40 @@
 // See also: ClassHistogramDCmd class
 //
 // Input arguments :-
-//   arg0: "-live" or "-all"
+//   arg0: Name of the dump file or NULL
+//   arg1: "-live" or "-all"
 static jint heap_inspection(AttachOperation* op, outputStream* out) {
   bool live_objects_only = true;   // default is true to retain the behavior before this change is made
-  const char* arg0 = op->arg(0);
-  if (arg0 != NULL && (strlen(arg0) > 0)) {
-    if (strcmp(arg0, "-all") != 0 && strcmp(arg0, "-live") != 0) {
-      out->print_cr("Invalid argument to inspectheap operation: %s", arg0);
+  outputStream* os = out;   // if path not specified or path is NULL, use out
+  fileStream* fs = NULL;
+  const char* path = op->arg(0);
+  if (path != NULL) {
+    if (path[0] == '\0') {
+      out->print_cr("No dump file specified");
+    } else {
+      // create file
+      fs = new (ResourceObj::C_HEAP, mtInternal) fileStream(path);
+      if (fs == NULL) {
+        out->print_cr("Failed to allocate space for file: %s", path);
+        return JNI_ERR;
+      }
+      os = fs;
+    }
+  }
+  const char* arg1 = op->arg(1);
+  if (arg1 != NULL && (strlen(arg1) > 0)) {
+    if (strcmp(arg1, "-all") != 0 && strcmp(arg1, "-live") != 0) {
+      out->print_cr("Invalid argument to inspectheap operation: %s", arg1);
       return JNI_ERR;
     }
-    live_objects_only = strcmp(arg0, "-live") == 0;
+    live_objects_only = strcmp(arg1, "-live") == 0;
   }
-  VM_GC_HeapInspection heapop(out, live_objects_only /* request full gc */);
+  VM_GC_HeapInspection heapop(os, live_objects_only /* request full gc */);
   VMThread::execute(&heapop);
+  if (os != NULL && os != out) {
+    out->print_cr("Heap inspection file created: %s", path);
+    delete fs;
+  }
   return JNI_OK;
 }
 
--- a/src/hotspot/share/services/attachListener.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/services/attachListener.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -106,7 +106,7 @@
   enum {
     name_length_max = 16,       // maximum length of  name
     arg_length_max = 1024,      // maximum length of argument
-    arg_count_max = 3           // maximum number of arguments
+    arg_count_max = 4           // maximum number of arguments
   };
 
   // name of special operation that can be enqueued when all
--- a/src/hotspot/share/services/diagnosticArgument.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/services/diagnosticArgument.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -179,9 +179,9 @@
   if (str == NULL) {
     _value = NULL;
   } else {
-    _value = NEW_C_HEAP_ARRAY(char, len+1, mtInternal);
-    strncpy(_value, str, len);
-    _value[len] = 0;
+    _value = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal);
+    int n = snprintf(_value, len + 1, "%.*s", (int)len, str);
+    assert((size_t)n <= len, "Unexpected number of characters in string");
   }
 }
 
--- a/src/hotspot/share/services/runtimeService.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/services/runtimeService.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -25,7 +25,7 @@
 #include "precompiled.hpp"
 #include "classfile/classLoader.hpp"
 #include "logging/log.hpp"
-#include "runtime/timer.hpp"
+#include "logging/logStream.hpp"
 #include "runtime/vm_version.hpp"
 #include "services/attachListener.hpp"
 #include "services/management.hpp"
@@ -35,18 +35,12 @@
 #include "utilities/macros.hpp"
 
 #if INCLUDE_MANAGEMENT
-TimeStamp RuntimeService::_app_timer;
-TimeStamp RuntimeService::_safepoint_timer;
 PerfCounter*  RuntimeService::_sync_time_ticks = NULL;
 PerfCounter*  RuntimeService::_total_safepoints = NULL;
 PerfCounter*  RuntimeService::_safepoint_time_ticks = NULL;
 PerfCounter*  RuntimeService::_application_time_ticks = NULL;
-jlong RuntimeService::_last_safepoint_sync_time_ns = 0;
-jlong RuntimeService::_last_safepoint_end_time_ns = 0;
-jlong RuntimeService::_last_app_time_ns = 0;
 
 void RuntimeService::init() {
-
   if (UsePerfData) {
     EXCEPTION_MARK;
 
@@ -87,85 +81,27 @@
   }
 }
 
-void RuntimeService::record_safepoint_begin() {
+void RuntimeService::record_safepoint_begin(jlong app_ticks) {
   HS_PRIVATE_SAFEPOINT_BEGIN();
-
-  // Print the time interval in which the app was executing
-  if (_app_timer.is_updated()) {
-    _last_app_time_ns = _app_timer.ticks_since_update();
-    log_info(safepoint)("Application time: %3.7f seconds", TimeHelper::counter_to_seconds(_last_app_time_ns));
-  }
-
-  // update the time stamp to begin recording safepoint time
-  _last_safepoint_sync_time_ns = 0;
-  _last_safepoint_end_time_ns = 0;
-  _safepoint_timer.update();
   if (UsePerfData) {
     _total_safepoints->inc();
-    if (_app_timer.is_updated()) {
-      _application_time_ticks->inc(_app_timer.ticks_since_update());
-    }
-  }
-}
-
-void RuntimeService::record_safepoint_synchronized() {
-  if (UsePerfData) {
-    _sync_time_ticks->inc(_safepoint_timer.ticks_since_update());
-  }
-  if (log_is_enabled(Info, safepoint) || log_is_enabled(Info, safepoint, stats)) {
-    _last_safepoint_sync_time_ns = _safepoint_timer.ticks_since_update();
+    _application_time_ticks->inc(app_ticks);
   }
 }
 
-void RuntimeService::record_safepoint_end() {
-  HS_PRIVATE_SAFEPOINT_END();
-
-  // Logging of safepoint+stats=info needs _last_safepoint_end_time_ns to be set.
-  // Logging of safepoint=info needs _last_safepoint_end_time_ns for following log.
-  if (log_is_enabled(Info, safepoint) || log_is_enabled(Info, safepoint, stats)) {
-    _last_safepoint_end_time_ns = _safepoint_timer.ticks_since_update();
-    log_info(safepoint)(
-       "Total time for which application threads were stopped: %3.7f seconds, "
-       "Stopping threads took: %3.7f seconds",
-       TimeHelper::counter_to_seconds(_last_safepoint_end_time_ns),
-       TimeHelper::counter_to_seconds(_last_safepoint_sync_time_ns));
-  }
-
-  // update the time stamp to begin recording app time
-  _app_timer.update();
+void RuntimeService::record_safepoint_synchronized(jlong sync_ticks) {
   if (UsePerfData) {
-    _safepoint_time_ticks->inc(_safepoint_timer.ticks_since_update());
+    _sync_time_ticks->inc(sync_ticks);
   }
 }
 
-void RuntimeService::record_safepoint_epilog(const char* operation_name) {
-  if (!log_is_enabled(Info, safepoint, stats)) {
-    return;
+void RuntimeService::record_safepoint_end(jlong safepoint_ticks) {
+  HS_PRIVATE_SAFEPOINT_END();
+  if (UsePerfData) {
+    _safepoint_time_ticks->inc(safepoint_ticks);
   }
-
-  log_info(safepoint, stats)(
-     "Safepoint \"%s\", "
-     "Time since last: " JLONG_FORMAT " ns; "
-     "Reaching safepoint: " JLONG_FORMAT " ns; "
-     "At safepoint: " JLONG_FORMAT " ns; "
-     "Total: " JLONG_FORMAT " ns",
-      operation_name,
-      _last_app_time_ns,
-      _last_safepoint_sync_time_ns,
-      _last_safepoint_end_time_ns - _last_safepoint_sync_time_ns,
-      _last_safepoint_end_time_ns
-     );
 }
 
-void RuntimeService::record_application_start() {
-  // update the time stamp to begin recording app time
-  _app_timer.update();
-}
-
-// Don't need to record application end because we currently
-// exit at a safepoint and record_safepoint_begin() handles updating
-// the application time counter at VM exit.
-
 jlong RuntimeService::safepoint_sync_time_ms() {
   return UsePerfData ?
     Management::ticks_to_ms(_sync_time_ticks->get_value()) : -1;
--- a/src/hotspot/share/services/runtimeService.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/services/runtimeService.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -35,12 +35,6 @@
   static PerfCounter* _safepoint_time_ticks;   // Accumulated time at safepoints
   static PerfCounter* _application_time_ticks; // Accumulated time not at safepoints
 
-  static TimeStamp _safepoint_timer;
-  static TimeStamp _app_timer;
-  static jlong _last_safepoint_sync_time_ns;
-  static jlong _last_safepoint_end_time_ns;
-  static jlong _last_app_time_ns;
-
 public:
   static void init();
 
@@ -50,12 +44,9 @@
   static jlong application_time_ms();
 
   // callbacks
-  static void record_safepoint_begin() NOT_MANAGEMENT_RETURN;
-  static void record_safepoint_synchronized() NOT_MANAGEMENT_RETURN;
-  static void record_safepoint_end() NOT_MANAGEMENT_RETURN;
-  static void record_safepoint_epilog(const char* operation_name) NOT_MANAGEMENT_RETURN;
-  static void record_application_start() NOT_MANAGEMENT_RETURN;
-
+  static void record_safepoint_begin(jlong app_ticks) NOT_MANAGEMENT_RETURN;
+  static void record_safepoint_synchronized(jlong sync_ticks) NOT_MANAGEMENT_RETURN;
+  static void record_safepoint_end(jlong safepoint_ticks) NOT_MANAGEMENT_RETURN;
 };
 
 #endif // SHARE_SERVICES_RUNTIMESERVICE_HPP
--- a/src/hotspot/share/utilities/events.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/utilities/events.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -36,7 +36,7 @@
 
 EventLog* Events::_logs = NULL;
 StringEventLog* Events::_messages = NULL;
-ExtendedStringEventLog* Events::_exceptions = NULL;
+ExceptionsEventLog* Events::_exceptions = NULL;
 StringEventLog* Events::_redefinitions = NULL;
 UnloadingEventLog* Events::_class_unloading = NULL;
 StringEventLog* Events::_deopt_messages = NULL;
@@ -67,7 +67,7 @@
 void Events::init() {
   if (LogEvents) {
     _messages = new StringEventLog("Events");
-    _exceptions = new ExtendedStringEventLog("Internal exceptions");
+    _exceptions = new ExceptionsEventLog("Internal exceptions");
     _redefinitions = new StringEventLog("Classes redefined");
     _class_unloading = new UnloadingEventLog("Classes unloaded");
     _deopt_messages = new StringEventLog("Deoptimization events");
@@ -112,3 +112,20 @@
   st.print("Unloading class " INTPTR_FORMAT " ", p2i(ik));
   ik->name()->print_value_on(&st);
 }
+
+void ExceptionsEventLog::log(Thread* thread, Handle h_exception, const char* message, const char* file, int line) {
+  if (!should_log()) return;
+
+  double timestamp = fetch_timestamp();
+  MutexLockerEx ml(&_mutex, Mutex::_no_safepoint_check_flag);
+  int index = compute_log_index();
+  _records[index].thread = thread;
+  _records[index].timestamp = timestamp;
+  stringStream st = _records[index].data.stream();
+  st.print("Exception <");
+  h_exception->print_value_on(&st);
+  st.print("%s%s> (" INTPTR_FORMAT ") \n"
+           "thrown [%s, line %d]\nfor thread " INTPTR_FORMAT,
+           message ? ": " : "", message ? message : "",
+           p2i(h_exception()), file, line, p2i(thread));
+}
--- a/src/hotspot/share/utilities/events.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/utilities/events.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -183,6 +183,14 @@
   void log(Thread* thread, InstanceKlass* ik);
 };
 
+// Event log for exceptions
+class ExceptionsEventLog : public ExtendedStringEventLog {
+ public:
+  ExceptionsEventLog(const char* name, int count = LogEventsBufferEntries) : ExtendedStringEventLog(name, count) {}
+
+  void log(Thread* thread, Handle h_exception, const char* message, const char* file, int line);
+};
+
 
 class Events : AllStatic {
   friend class EventLog;
@@ -195,7 +203,7 @@
 
   // A log for internal exception related messages, like internal
   // throws and implicit exceptions.
-  static ExtendedStringEventLog* _exceptions;
+  static ExceptionsEventLog* _exceptions;
 
   // Deoptization related messages
   static StringEventLog* _deopt_messages;
@@ -216,6 +224,7 @@
 
   // Log exception related message
   static void log_exception(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
+  static void log_exception(Thread* thread, Handle h_exception, const char* message, const char* file, int line);
 
   static void log_redefinition(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
 
@@ -245,6 +254,12 @@
   }
 }
 
+inline void Events::log_exception(Thread* thread, Handle h_exception, const char* message, const char* file, int line) {
+  if (LogEvents) {
+    _exceptions->log(thread, h_exception, message, file, line);
+  }
+}
+
 inline void Events::log_redefinition(Thread* thread, const char* format, ...) {
   if (LogEvents) {
     va_list ap;
--- a/src/hotspot/share/utilities/exceptions.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/utilities/exceptions.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -131,15 +131,17 @@
 }
 
 void Exceptions::_throw(Thread* thread, const char* file, int line, Handle h_exception, const char* message) {
-  ResourceMark rm;
+  ResourceMark rm(thread);
   assert(h_exception() != NULL, "exception should not be NULL");
 
   // tracing (do this up front - so it works during boot strapping)
+  // Note, the print_value_string() argument is not called unless logging is enabled!
   log_info(exceptions)("Exception <%s%s%s> (" INTPTR_FORMAT ") \n"
                        "thrown [%s, line %d]\nfor thread " INTPTR_FORMAT,
                        h_exception->print_value_string(),
                        message ? ": " : "", message ? message : "",
                        p2i(h_exception()), file, line, p2i(thread));
+
   // for AbortVMOnException flag
   Exceptions::debug_check_abort(h_exception, message);
 
@@ -162,11 +164,7 @@
   thread->set_pending_exception(h_exception(), file, line);
 
   // vm log
-  if (LogEvents){
-    Events::log_exception(thread, "Exception <%s%s%s> (" INTPTR_FORMAT ") thrown at [%s, line %d]",
-                          h_exception->print_value_string(), message ? ": " : "", message ? message : "",
-                          p2i(h_exception()), file, line);
-  }
+  Events::log_exception(thread, h_exception, message, file, line);
 }
 
 
--- a/src/hotspot/share/utilities/globalDefinitions.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/utilities/globalDefinitions.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -165,29 +165,18 @@
 // Size of a char[] needed to represent a jint as a string in decimal.
 const int jintAsStringSize = 12;
 
-// An opaque struct of heap-word width, so that HeapWord* can be a generic
-// pointer into the heap.  We require that object sizes be measured in
-// units of heap words, so that that
-//   HeapWord* hw;
+// An opaque type, so that HeapWord* can be a generic pointer into the heap.
+// We require that object sizes be measured in units of heap words (e.g.
+// pointer-sized values), so that given HeapWord* hw,
 //   hw += oop(hw)->foo();
 // works, where foo is a method (like size or scavenge) that returns the
 // object size.
-class HeapWord {
-  friend class VMStructs;
- private:
-  char* i;
-#ifndef PRODUCT
- public:
-  char* value() { return i; }
-#endif
-};
+class HeapWordImpl;             // Opaque, never defined.
+typedef HeapWordImpl* HeapWord;
 
-// Analogous opaque struct for metadata allocated from
-// metaspaces.
-class MetaWord {
- private:
-  char* i;
-};
+// Analogous opaque struct for metadata allocated from metaspaces.
+class MetaWordImpl;             // Opaque, never defined.
+typedef MetaWordImpl* MetaWord;
 
 // HeapWordSize must be 2^LogHeapWordSize.
 const int HeapWordSize        = sizeof(HeapWord);
--- a/src/hotspot/share/utilities/xmlstream.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/hotspot/share/utilities/xmlstream.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, 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
@@ -353,11 +353,15 @@
   guarantee(format_len + 10 < sizeof(buffer), "bigger format buffer");
   const char* kind = format;
   const char* kind_end = strchr(kind, ' ');
-  size_t kind_len = (kind_end != NULL) ? (kind_end - kind) : format_len;
-  strncpy(buffer, kind, kind_len);
-  strcpy(buffer + kind_len, "_done");
+  size_t kind_len;
   if (kind_end != NULL) {
-    strncat(buffer, format + kind_len, sizeof(buffer) - (kind_len + 5 /* _done */) - 1);
+    kind_len = kind_end - kind;
+    int n = snprintf(buffer, sizeof(buffer), "%.*s_done", (int)kind_len, kind);
+    assert((size_t)n < sizeof(buffer), "Unexpected number of characters in string");
+  } else {
+    kind_len = format_len;
+    int n = snprintf(buffer, sizeof(buffer), "%s_done%s", kind, kind + kind_len);
+    assert((size_t)n < sizeof(buffer), "Unexpected number of characters in string");
   }
   // Output the trailing event with the timestamp.
   va_begin_elem(buffer, ap);
--- a/src/java.base/share/classes/java/nio/Bits.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/java/nio/Bits.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -172,7 +172,10 @@
             }
 
             // no luck
-            throw new OutOfMemoryError("Direct buffer memory");
+            throw new OutOfMemoryError
+                ("Cannot reserve "
+                 + size + " bytes of direct buffer memory (allocated: "
+                 + RESERVED_MEMORY.get() + ", limit: " + MAX_MEMORY +")");
 
         } finally {
             if (interrupted) {
--- a/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -29,6 +29,7 @@
 
 import java.io.FileDescriptor;
 import java.lang.ref.Reference;
+import java.util.Objects;
 import jdk.internal.misc.VM;
 import jdk.internal.ref.Cleaner;
 import sun.nio.ch.DirectBuffer;
@@ -325,6 +326,40 @@
 #end[rw]
     }
 
+    public $Type$Buffer get(int index, $type$[] dst, int offset, int length) {
+#if[rw]
+        if (((long)length << $LG_BYTES_PER_VALUE$) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) {
+            Objects.checkFromIndexSize(index, length, limit());
+            Objects.checkFromIndexSize(offset, length, dst.length);
+
+            long dstOffset = ARRAY_BASE_OFFSET + ((long)offset << $LG_BYTES_PER_VALUE$);
+            try {
+#if[!byte]
+                if (order() != ByteOrder.nativeOrder())
+                    UNSAFE.copySwapMemory(null,
+                                          ix(index),
+                                          dst,
+                                          dstOffset,
+                                          (long)length << $LG_BYTES_PER_VALUE$,
+                                          (long)1 << $LG_BYTES_PER_VALUE$);
+                else
+#end[!byte]
+                    UNSAFE.copyMemory(null,
+                                      ix(index),
+                                      dst,
+                                      dstOffset,
+                                      (long)length << $LG_BYTES_PER_VALUE$);
+            } finally {
+                Reference.reachabilityFence(this);
+            }
+        } else {
+            super.get(index, dst, offset, length);
+        }
+        return this;
+#else[rw]
+        throw new ReadOnlyBufferException();
+#end[rw]
+    }
 #end[rw]
 
     public $Type$Buffer put($type$ x) {
@@ -440,6 +475,42 @@
 #end[rw]
     }
 
+    public $Type$Buffer put(int index, $type$[] src, int offset, int length) {
+#if[rw]
+        if (((long)length << $LG_BYTES_PER_VALUE$) > Bits.JNI_COPY_FROM_ARRAY_THRESHOLD) {
+            Objects.checkFromIndexSize(index, length, limit());
+            Objects.checkFromIndexSize(offset, length, src.length);
+
+
+            long srcOffset = ARRAY_BASE_OFFSET + ((long)offset << $LG_BYTES_PER_VALUE$);
+            try {
+#if[!byte]
+                if (order() != ByteOrder.nativeOrder())
+                    UNSAFE.copySwapMemory(src,
+                                          srcOffset,
+                                          null,
+                                          ix(index),
+                                          (long)length << $LG_BYTES_PER_VALUE$,
+                                          (long)1 << $LG_BYTES_PER_VALUE$);
+                else
+#end[!byte]
+                    UNSAFE.copyMemory(src,
+                                      srcOffset,
+                                      null,
+                                      ix(index),
+                                      (long)length << $LG_BYTES_PER_VALUE$);
+            } finally {
+                Reference.reachabilityFence(this);
+            }
+        } else {
+            super.put(index, src, offset, length);
+        }
+        return this;
+#else[rw]
+        throw new ReadOnlyBufferException();
+#end[rw]
+    }
+
     public $Type$Buffer compact() {
 #if[rw]
         int pos = position();
--- a/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -38,6 +38,8 @@
 #end[rw]
  */
 
+import java.util.Objects;
+
 class Heap$Type$Buffer$RW$
     extends {#if[ro]?Heap}$Type$Buffer
 {
@@ -181,6 +183,13 @@
         return this;
     }
 
+    public $Type$Buffer get(int index, $type$[] dst, int offset, int length) {
+        Objects.checkFromIndexSize(index, length, limit());
+        Objects.checkFromIndexSize(offset, length, dst.length);
+        System.arraycopy(hb, ix(index), dst, offset, length);
+        return this;
+    }
+
     public boolean isDirect() {
         return false;
     }
@@ -250,6 +259,36 @@
 #end[rw]
     }
 
+    public $Type$Buffer put(int index, $type$[] src, int offset, int length) {
+#if[rw]
+        Objects.checkFromIndexSize(index, length, limit());
+        Objects.checkFromIndexSize(offset, length, src.length);
+        System.arraycopy(src, offset, hb, ix(index), length);
+        return this;
+#else[rw]
+        throw new ReadOnlyBufferException();
+#end[rw]
+    }
+
+#if[char]
+
+    public $Type$Buffer put(String src, int start, int end) {
+        int length = end - start;
+        checkBounds(start, length, src.length());
+        if (isReadOnly())
+            throw new ReadOnlyBufferException();
+        int pos = position();
+        int lim = limit();
+        int rem = (pos <= lim) ? lim - pos : 0;
+        if (length > rem)
+            throw new BufferOverflowException();
+        src.getChars(start, end, hb, ix(pos));
+        position(pos + length);
+        return this;
+    }
+
+#end[char]
+
     public $Type$Buffer compact() {
 #if[rw]
         System.arraycopy(hb, ix(position()), hb, ix(0), remaining());
--- a/src/java.base/share/classes/java/nio/X-Buffer.java.template	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/java/nio/X-Buffer.java.template	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -36,6 +36,7 @@
 import java.util.stream.$Streamtype$Stream;
 #end[streamableType]
 
+import java.util.Objects;
 import jdk.internal.util.ArraysSupport;
 
 /**
@@ -50,11 +51,11 @@
  *   {@link #put($type$) <i>put</i>} methods that read and write
  *   single $type$s; </p></li>
  *
- *   <li><p> Relative {@link #get($type$[]) <i>bulk get</i>}
+ *   <li><p> Absolute and relative {@link #get($type$[]) <i>bulk get</i>}
  *   methods that transfer contiguous sequences of $type$s from this buffer
  *   into an array; {#if[!byte]?and}</p></li>
  *
- *   <li><p> Relative {@link #put($type$[]) <i>bulk put</i>}
+ *   <li><p> Absolute and relative {@link #put($type$[]) <i>bulk put</i>}
  *   methods that transfer contiguous sequences of $type$s from $a$
  *   $type$ array{#if[char]?,&#32;a&#32;string,} or some other $type$
  *   buffer into this buffer;{#if[!byte]?&#32;and} </p></li>
@@ -209,6 +210,8 @@
  * <p> This class implements the {@link CharSequence} interface so that
  * character buffers may be used wherever character sequences are accepted, for
  * example in the regular-expression package {@link java.util.regex}.
+ * The methods defined by {@code CharSequence} operate relative to the current
+ * position of the buffer when they are invoked.
  * </p>
  *
 #end[char]
@@ -434,7 +437,6 @@
      * @return The number of characters added to the buffer, or
      *         -1 if this source of characters is at its end
      * @throws IOException if an I/O error occurs
-     * @throws NullPointerException if target is null
      * @throws ReadOnlyBufferException if target is a read only buffer
      * @since 1.5
      */
@@ -762,6 +764,89 @@
         return get(dst, 0, dst.length);
     }
 
+    /**
+     * Absolute bulk <i>get</i> method.
+     *
+     * <p> This method transfers {@code length} $type$s from this
+     * buffer into the given array, starting at the given index in this
+     * buffer and at the given offset in the array.  The position of this
+     * buffer is unchanged.
+     *
+     * <p> An invocation of this method of the form
+     * <code>src.get(index,&nbsp;dst,&nbsp;offset,&nbsp;length)</code>
+     * has exactly the same effect as the following loop except that it first
+     * checks the consistency of the supplied parameters and it is potentially
+     * much more efficient:
+     *
+     * <pre>{@code
+     *     for (int i = offset, j = index; i < offset + length; i++, j++)
+     *         dst[i] = src.get(j);
+     * }</pre>
+     *
+     * @param  index
+     *         The index in this buffer from which the first $type$ will be
+     *         read; must be non-negative and less than {@code limit()}
+     *
+     * @param  dst
+     *         The destination array
+     *
+     * @param  offset
+     *         The offset within the array of the first $type$ to be
+     *         written; must be non-negative and less than
+     *         {@code dst.length}
+     *
+     * @param  length
+     *         The number of $type$s to be written to the given array;
+     *         must be non-negative and no larger than the smaller of
+     *         {@code limit() - index} and {@code dst.length - offset}
+     *
+     * @return  This buffer
+     *
+     * @throws  IndexOutOfBoundsException
+     *          If the preconditions on the {@code index}, {@code offset}, and
+     *          {@code length} parameters do not hold
+     *
+     * @since 13
+     */
+    public $Type$Buffer get(int index, $type$[] dst, int offset, int length) {
+        Objects.checkFromIndexSize(index, length, limit());
+        Objects.checkFromIndexSize(offset, length, dst.length);
+        int end = offset + length;
+        for (int i = offset, j = index; i < end; i++, j++)
+            dst[i] = get(j);
+        return this;
+    }
+
+    /**
+     * Absolute bulk <i>get</i> method.
+     *
+     * <p> This method transfers $type$s from this buffer into the given
+     * destination array.  The position of this buffer is unchanged.  An
+     * invocation of this method of the form
+     * <code>src.get(index,&nbsp;dst)</code> behaves in exactly the same
+     * way as the invocation:
+     *
+     * <pre>
+     *     src.get(index, dst, 0, dst.length) </pre>
+     *
+     * @param  index
+     *         The index in this buffer from which the first $type$ will be
+     *         read; must be non-negative and less than {@code limit()}
+     *
+     * @param  dst
+     *         The destination array
+     *
+     * @return  This buffer
+     *
+     * @throws  IndexOutOfBoundsException
+     *          If {@code index} is negative, not smaller than {@code limit()},
+     *          or {@code limit() - index < dst.length}
+     *
+     * @since 13
+     */
+    public $Type$Buffer get(int index, $type$[] dst) {
+        return get(index, dst, 0, dst.length);
+    }
 
     // -- Bulk put operations --
 
@@ -840,7 +925,7 @@
      *
      * <pre>{@code
      *     for (int i = off; i < off + len; i++)
-     *         dst.put(a[i]);
+     *         dst.put(src[i]);
      * }</pre>
      *
      * except that it first checks that there is sufficient space in this
@@ -851,12 +936,12 @@
      *
      * @param  offset
      *         The offset within the array of the first $type$ to be read;
-     *         must be non-negative and no larger than {@code array.length}
+     *         must be non-negative and no larger than {@code src.length}
      *
      * @param  length
      *         The number of $type$s to be read from the given array;
      *         must be non-negative and no larger than
-     *         {@code array.length - offset}
+     *         {@code src.length - offset}
      *
      * @return  This buffer
      *
@@ -906,6 +991,95 @@
         return put(src, 0, src.length);
     }
 
+    /**
+     * Absolute bulk <i>put</i> method&nbsp;&nbsp;<i>(optional operation)</i>.
+     *
+     * <p> This method transfers {@code length} $type$s from the given
+     * array, starting at the given offset in the array and at the given index
+     * in this buffer.  The position of this buffer is unchanged.
+     *
+     * <p> An invocation of this method of the form
+     * <code>dst.put(index,&nbsp;src,&nbsp;offset,&nbsp;length)</code>
+     * has exactly the same effect as the following loop except that it first
+     * checks the consistency of the supplied parameters and it is potentially
+     * much more efficient:
+     *
+     * <pre>{@code
+     *     for (int i = offset, j = index; i < offset + length; i++, j++)
+     *         dst.put(j, src[i]);
+     * }</pre>
+     *
+     * @param  index
+     *         The index in this buffer at which the first $type$ will be
+     *         written; must be non-negative and less than {@code limit()}
+     *
+     * @param  src
+     *         The array from which $type$s are to be read
+     *
+     * @param  offset
+     *         The offset within the array of the first $type$ to be read;
+     *         must be non-negative and less than {@code src.length}
+     *
+     * @param  length
+     *         The number of $type$s to be read from the given array;
+     *         must be non-negative and no larger than the smaller of
+     *         {@code limit() - index} and {@code src.length - offset}
+     *
+     * @return  This buffer
+     *
+     * @throws  IndexOutOfBoundsException
+     *          If the preconditions on the {@code index}, {@code offset}, and
+     *          {@code length} parameters do not hold
+     *
+     * @throws  ReadOnlyBufferException
+     *          If this buffer is read-only
+     *
+     * @since 13
+     */
+    public $Type$Buffer put(int index, $type$[] src, int offset, int length) {
+        if (isReadOnly())
+            throw new ReadOnlyBufferException();
+        Objects.checkFromIndexSize(index, length, limit());
+        Objects.checkFromIndexSize(offset, length, src.length);
+        int end = offset + length;
+        for (int i = offset, j = index; i < end; i++, j++)
+            this.put(j, src[i]);
+        return this;
+    }
+
+    /**
+     * Absolute bulk <i>put</i> method&nbsp;&nbsp;<i>(optional operation)</i>.
+     *
+     * <p> This method copies $type$s into this buffer from the given source
+     * array.  The position of this buffer is unchanged.  An invocation of this
+     * method of the form <code>dst.put(index,&nbsp;src)</code>
+     * behaves in exactly the same way as the invocation:
+     *
+     * <pre>
+     *     dst.put(index, src, 0, src.length); </pre>
+     *
+     * @param  index
+     *         The index in this buffer at which the first $type$ will be
+     *         written; must be non-negative and less than {@code limit()}
+     *
+     * @param  src
+     *         The array from which $type$s are to be read
+     *
+     * @return  This buffer
+     *
+     * @throws  IndexOutOfBoundsException
+     *          If {@code index} is negative, not smaller than {@code limit()},
+     *          or {@code limit() - index < src.length}
+     *
+     * @throws  ReadOnlyBufferException
+     *          If this buffer is read-only
+     *
+     * @since 13
+     */
+    public $Type$Buffer put(int index, $type$[] src) {
+        return put(index, src, 0, src.length);
+    }
+
 #if[char]
 
     /**
--- a/src/java.base/share/classes/sun/security/ssl/ClientHello.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/security/ssl/ClientHello.java	Fri Feb 22 20:36:42 2019 +0000
@@ -803,13 +803,8 @@
                     shc.sslConfig.getEnabledExtensions(
                             SSLHandshake.CLIENT_HELLO);
 
-            ClientHelloMessage chm;
-            try {
-                chm = new ClientHelloMessage(shc, message, enabledExtensions);
-            } catch (Exception e) {
-                throw shc.conContext.fatal(Alert.HANDSHAKE_FAILURE,
-                        "ClientHelloMessage failure", e);
-            }
+            ClientHelloMessage chm =
+                    new ClientHelloMessage(shc, message, enabledExtensions);
             if (SSLLogger.isOn && SSLLogger.isOn("ssl,handshake")) {
                 SSLLogger.fine("Consuming ClientHello handshake message", chm);
             }
--- a/src/java.base/share/classes/sun/security/ssl/HandshakeContext.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/security/ssl/HandshakeContext.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,6 +26,8 @@
 package sun.security.ssl;
 
 import java.io.IOException;
+import java.nio.BufferOverflowException;
+import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
 import java.security.AlgorithmConstraints;
 import java.security.CryptoPrimitive;
@@ -443,6 +445,10 @@
             throw conContext.fatal(Alert.UNEXPECTED_MESSAGE,
                     "Unsupported handshake message: " +
                     SSLHandshake.nameOf(handshakeType), unsoe);
+        } catch (BufferUnderflowException | BufferOverflowException be) {
+            throw conContext.fatal(Alert.DECODE_ERROR,
+                    "Illegal handshake message: " +
+                    SSLHandshake.nameOf(handshakeType), be);
         }
 
         // update handshake hash after handshake message consumption.
--- a/src/java.base/share/classes/sun/security/ssl/PostHandshakeContext.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/security/ssl/PostHandshakeContext.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,6 +26,8 @@
 package sun.security.ssl;
 
 import java.io.IOException;
+import java.nio.BufferOverflowException;
+import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -74,6 +76,10 @@
             throw conContext.fatal(Alert.UNEXPECTED_MESSAGE,
                     "Unsupported post-handshake message: " +
                             SSLHandshake.nameOf(handshakeType), unsoe);
+        } catch (BufferUnderflowException | BufferOverflowException be) {
+            throw conContext.fatal(Alert.DECODE_ERROR,
+                    "Illegal handshake message: " +
+                    SSLHandshake.nameOf(handshakeType), be);
         }
     }
 }
--- a/src/java.base/share/classes/sun/security/ssl/SSLContextImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/security/ssl/SSLContextImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -921,29 +921,45 @@
 
         static {
             Exception reserved = null;
-            TrustManager[] tmMediator;
+            TrustManager[] tmMediator = null;
             try {
                 tmMediator = getTrustManagers();
             } catch (Exception e) {
                 reserved = e;
-                tmMediator = new TrustManager[0];
+                if (SSLLogger.isOn && SSLLogger.isOn("ssl,defaultctx")) {
+                    SSLLogger.warning(
+                            "Failed to load default trust managers", e);
+                }
             }
-            trustManagers = tmMediator;
 
+            KeyManager[] kmMediator = null;
             if (reserved == null) {
-                KeyManager[] kmMediator;
                 try {
                     kmMediator = getKeyManagers();
                 } catch (Exception e) {
                     reserved = e;
-                    kmMediator = new KeyManager[0];
+                    if (SSLLogger.isOn && SSLLogger.isOn("ssl,defaultctx")) {
+                        SSLLogger.warning(
+                                "Failed to load default key managers", e);
+                    }
                 }
-                keyManagers = kmMediator;
-            } else {
-                keyManagers = new KeyManager[0];
             }
 
-            reservedException = reserved;
+            if (reserved != null) {
+                trustManagers = new TrustManager[0];
+                keyManagers = new KeyManager[0];
+
+                // Important note: please don't reserve the original exception
+                // object, which may be not garbage collection friendly as
+                // 'reservedException' is a static filed.
+                reservedException =
+                        new KeyManagementException(reserved.getMessage());
+            } else {
+                trustManagers = tmMediator;
+                keyManagers = kmMediator;
+
+                reservedException = null;
+            }
         }
 
         private static TrustManager[] getTrustManagers() throws Exception {
@@ -1071,21 +1087,30 @@
     private static final class DefaultSSLContextHolder {
 
         private static final SSLContextImpl sslContext;
-        static Exception reservedException = null;
+        private static final Exception reservedException;
 
         static {
+            Exception reserved = null;
             SSLContextImpl mediator = null;
             if (DefaultManagersHolder.reservedException != null) {
-                reservedException = DefaultManagersHolder.reservedException;
+                reserved = DefaultManagersHolder.reservedException;
             } else {
                 try {
                     mediator = new DefaultSSLContext();
                 } catch (Exception e) {
-                    reservedException = e;
+                    // Important note: please don't reserve the original
+                    // exception object, which may be not garbage collection
+                    // friendly as 'reservedException' is a static filed.
+                    reserved = new KeyManagementException(e.getMessage());
+                    if (SSLLogger.isOn && SSLLogger.isOn("ssl,defaultctx")) {
+                        SSLLogger.warning(
+                                "Failed to load default SSLContext", e);
+                    }
                 }
             }
 
             sslContext = mediator;
+            reservedException = reserved;
         }
     }
 
--- a/src/java.base/share/classes/sun/security/x509/CertificateExtensions.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/security/x509/CertificateExtensions.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, 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
@@ -355,7 +355,7 @@
 
 class UnparseableExtension extends Extension {
     private String name;
-    private Throwable why;
+    private String exceptionDescription;
 
     public UnparseableExtension(Extension ext, Throwable why) {
         super(ext);
@@ -371,12 +371,13 @@
             // If we cannot find the name, just ignore it
         }
 
-        this.why = why;
+        this.exceptionDescription = why.toString();
     }
 
     @Override public String toString() {
         return super.toString() +
-                "Unparseable " + name + "extension due to\n" + why + "\n\n" +
+                "Unparseable " + name + "extension due to\n" +
+                exceptionDescription + "\n\n" +
                 new HexDumpEncoder().encodeBuffer(getExtensionValue());
     }
 }
--- a/src/java.base/share/classes/sun/util/cldr/CLDRCalendarDataProviderImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/util/cldr/CLDRCalendarDataProviderImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -80,7 +80,8 @@
         String region = locale.getCountry();
 
         if (region.isEmpty()) {
-            return 0;
+            // Use "US" as default
+            region = "US";
         }
 
         Integer val = map.get(region);
--- a/src/java.base/share/classes/sun/util/locale/provider/CalendarDataUtility.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/util/locale/provider/CalendarDataUtility.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -256,7 +256,9 @@
             default:
                 throw new InternalError("invalid requestID: " + requestID);
             }
-            return (value != 0) ? value : null;
+
+            assert value != 0;
+            return value;
         }
     }
 }
--- a/src/java.base/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, 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
@@ -283,8 +283,8 @@
                     return providersObj;
                 } else if (isObjectProvider) {
                     config(LocaleServiceProviderPool.class,
-                        "A locale sensitive service provider returned null for a localized objects,  which should not happen.  provider: "
-                            + lsp + " locale: " + locale);
+                        "A locale sensitive service object provider returned null, " +
+                        "which should not happen. Provider: " + lsp + " Locale: " + locale);
                 }
             }
         }
--- a/src/java.base/share/native/libjimage/imageFile.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/native/libjimage/imageFile.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -481,65 +481,6 @@
     return 0;            // not found
 }
 
-// Assemble the location path from the string fragments indicated in the location attributes.
-void ImageFileReader::location_path(ImageLocation& location, char* path, size_t max) const {
-    // Manage the image string table.
-    ImageStrings strings(_string_bytes, _header.strings_size(_endian));
-    // Position to first character of the path buffer.
-    char* next = path;
-    // Temp for string length.
-    size_t length;
-    // Get module string.
-    const char* module = location.get_attribute(ImageLocation::ATTRIBUTE_MODULE, strings);
-    // If module string is not empty string.
-    if (*module != '\0') {
-        // Get length of module name.
-        length = strlen(module);
-        // Make sure there is no buffer overflow.
-        assert(next - path + length + 2 < max && "buffer overflow");
-        // Append '/module/'.
-        *next++ = '/';
-        strncpy(next, module, length); next += length;
-        *next++ = '/';
-    }
-    // Get parent (package) string.
-    const char* parent = location.get_attribute(ImageLocation::ATTRIBUTE_PARENT, strings);
-    // If parent string is not empty string.
-    if (*parent != '\0') {
-        // Get length of module string.
-        length = strlen(parent);
-        // Make sure there is no buffer overflow.
-        assert(next - path + length + 1 < max && "buffer overflow");
-        // Append 'patent/' .
-        strncpy(next, parent, length); next += length;
-        *next++ = '/';
-    }
-    // Get base name string.
-    const char* base = location.get_attribute(ImageLocation::ATTRIBUTE_BASE, strings);
-    // Get length of base name.
-    length = strlen(base);
-    // Make sure there is no buffer overflow.
-    assert(next - path + length < max && "buffer overflow");
-    // Append base name.
-    strncpy(next, base, length); next += length;
-    // Get extension string.
-    const char* extension = location.get_attribute(ImageLocation::ATTRIBUTE_EXTENSION, strings);
-    // If extension string is not empty string.
-    if (*extension != '\0') {
-        // Get length of extension string.
-        length = strlen(extension);
-        // Make sure there is no buffer overflow.
-        assert(next - path + length + 1 < max && "buffer overflow");
-        // Append '.extension' .
-        *next++ = '.';
-        strncpy(next, extension, length); next += length;
-    }
-    // Make sure there is no buffer overflow.
-    assert((size_t)(next - path) < max && "buffer overflow");
-    // Terminate string.
-    *next = '\0';
-}
-
 // Verify that a found location matches the supplied path (without copying.)
 bool ImageFileReader::verify_location(ImageLocation& location, const char* path) const {
     // Manage the image string table.
--- a/src/java.base/share/native/libjimage/imageFile.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/native/libjimage/imageFile.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -564,9 +564,6 @@
     // ImageFileReader::NOT_FOUND otherwise.
     u4 find_location_index(const char* path, u8 *size) const;
 
-    // Assemble the location path.
-    void location_path(ImageLocation& location, char* path, size_t max) const;
-
     // Verify that a found location matches the supplied path.
     bool verify_location(ImageLocation& location, const char* path) const;
 
--- a/src/java.base/share/native/libjimage/jimage.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/native/libjimage/jimage.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -215,29 +215,3 @@
         }
     }
 }
-
-/*
- * JIMAGE_ResourcePath- Given an open image file, a location reference, a buffer
- * and a maximum buffer size, copy the path of the resource into the buffer.
- * Returns false if not a valid location reference.
- *
- * Ex.
- *   JImageLocationRef location = ...
- *   char path[JIMAGE_MAX_PATH];
- *    (*JImageResourcePath)(image, location, path, JIMAGE_MAX_PATH);
- */
-extern "C" JNIEXPORT bool
-JIMAGE_ResourcePath(JImageFile* image, JImageLocationRef locationRef,
-                                    char* path, size_t max) {
-    ImageFileReader* imageFile = (ImageFileReader*) image;
-
-    u4 offset = (u4) locationRef;
-    if (offset >= imageFile->locations_size()) {
-        return false;
-    }
-
-    ImageLocation location(imageFile->get_location_offset_data(offset));
-    imageFile->location_path(location, path, max);
-
-    return true;
-}
--- a/src/java.base/share/native/libjimage/jimage.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.base/share/native/libjimage/jimage.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -191,20 +191,3 @@
 
 typedef void (*JImageResourceIterator_t)(JImageFile* jimage,
         JImageResourceVisitor_t visitor, void* arg);
-
-/*
- * JIMAGE_ResourcePath- Given an open image file, a location reference, a buffer
- * and a maximum buffer size, copy the path of the resource into the buffer.
- * Returns false if not a valid location reference.
- *
- * Ex.
- *   JImageLocationRef location = ...
- *   char path[JIMAGE_MAX_PATH];
- *    (*JImageResourcePath)(image, location, path, JIMAGE_MAX_PATH);
- */
-extern "C" JNIEXPORT bool
-JIMAGE_ResourcePath(JImageFile* image, JImageLocationRef locationRef,
-                                    char* path, size_t max);
-
-typedef bool (*JImage_ResourcePath_t)(JImageFile* jimage, JImageLocationRef location,
-        char* buffer, jlong size);
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java	Fri Feb 22 20:36:42 2019 +0000
@@ -208,11 +208,13 @@
 
         CImage cimage = CImage.getCreator().createFromImage(image, observer);
         boolean imageAutoSize = target.isImageAutoSize();
-        cimage.execute(imagePtr -> {
-            execute(ptr -> {
-                setNativeImage(ptr, imagePtr, imageAutoSize);
+        if (cimage != null) {
+            cimage.execute(imagePtr -> {
+                execute(ptr -> {
+                    setNativeImage(ptr, imagePtr, imageAutoSize);
+                });
             });
-        });
+        }
     }
 
     private native void setNativeImage(final long model, final long nsimage, final boolean autosize);
@@ -357,7 +359,7 @@
     class IconObserver implements ImageObserver {
         @Override
         public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
-            if (image != target.getImage()) // if the image has been changed
+            if (target == null || image != target.getImage()) //if the image has been changed
             {
                 return false;
             }
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java	Fri Feb 22 20:36:42 2019 +0000
@@ -739,7 +739,8 @@
               region == Region.TOOL_BAR_DRAG_WINDOW ||
               region == Region.TOOL_TIP ||
               region == Region.TREE ||
-              region == Region.VIEWPORT) {
+              region == Region.VIEWPORT ||
+              region == Region.TEXT_PANE) {
             return true;
         }
         if (!GTKLookAndFeel.is3()) {
@@ -747,8 +748,7 @@
                   region == Region.FORMATTED_TEXT_FIELD ||
                   region == Region.PASSWORD_FIELD ||
                   region == Region.SPINNER ||
-                  region == Region.TEXT_FIELD ||
-                  region == Region.TEXT_PANE) {
+                  region == Region.TEXT_FIELD) {
                 return true;
             }
         }
@@ -767,6 +767,14 @@
         if (classKey != null) {
             Object value = getClassSpecificValue(classKey);
             if (value != null) {
+                //This is a workaround as the "slider-length" property has been
+                //deprecated for GtkScale from gtk 3.20, so default value of 31
+                //is used and makes redering of slider wrong. Value 14 is being
+                //used as default value for Slider.thumbHeight is 14 and making
+                //width 14 as well makes slider thumb render in proper shape
+                if ("Slider.thumbWidth".equals(key) && value.equals(31)) {
+                    return 14;
+                }
                 return value;
             }
         }
@@ -779,8 +787,15 @@
             return getColorForState(context, ColorType.FOREGROUND);
         }
         else if (key == "ScrollBar.minimumThumbSize") {
+            //This is a workaround as the "min-slider-length" property has been
+            //deprecated for GtkScrollBar from gtk 3.20, so default value of 21
+            //is used and makes ScrollBar thumb very small. Value 40 is being
+            //used as this is the value mentioned in css files
             int len =
                 getClassSpecificIntValue(context, "min-slider-length", 21);
+            if (len == 21) {
+                len = 40;
+            }
             JScrollBar sb = (JScrollBar)context.getComponent();
             if (sb.getOrientation() == JScrollBar.HORIZONTAL) {
                 return new DimensionUIResource(len, 0);
--- a/src/java.desktop/share/classes/java/awt/Font.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/classes/java/awt/Font.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -495,13 +495,7 @@
 
     private Font2D getFont2D() {
         FontManager fm = FontManagerFactory.getInstance();
-        if (fm.usingPerAppContextComposites() &&
-            font2DHandle != null &&
-            font2DHandle.font2D instanceof CompositeFont &&
-            ((CompositeFont)(font2DHandle.font2D)).isStdComposite()) {
-            return fm.findFont2D(name, style,
-                                          FontManager.LOGICAL_FALLBACK);
-        } else if (font2DHandle == null) {
+        if (font2DHandle == null) {
             font2DHandle =
                 fm.findFont2D(name, style,
                               FontManager.LOGICAL_FALLBACK).handle;
--- a/src/java.desktop/share/classes/sun/awt/AWTSecurityManager.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
- * 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 sun.awt;
-
-/**
-  * The AWTSecurityManager class provides the ability to secondarily
-  * index AppContext objects through SecurityManager extensions.
-  * As noted in AppContext.java, AppContexts are primarily indexed by
-  * ThreadGroup.  In the case where the ThreadGroup doesn't provide
-  * enough information to determine AppContext (e.g. system threads),
-  * if a SecurityManager is installed which derives from
-  * AWTSecurityManager, the AWTSecurityManager's getAppContext()
-  * method is called to determine the AppContext.
-  *
-  * A typical example of the use of this class is where an applet
-  * is called by a system thread, yet the system AppContext is
-  * inappropriate, because applet code is currently executing.
-  * In this case, the getAppContext() method can walk the call stack
-  * to determine the applet code being executed and return the applet's
-  * AppContext object.
-  *
-  * @author  Fred Ecks
-  */
-public class AWTSecurityManager extends SecurityManager {
-
-    /**
-      * Get the AppContext corresponding to the current context.
-      * The default implementation returns null, but this method
-      * may be overridden by various SecurityManagers
-      * (e.g. AppletSecurity) to index AppContext objects by the
-      * calling context.
-      *
-      * @return  the AppContext corresponding to the current context.
-      * @see     sun.awt.AppContext
-      * @see     java.lang.SecurityManager
-      * @since   1.2.1
-      */
-    public AppContext getAppContext() {
-        return null; // Default implementation returns null
-    }
-
-} /* class AWTSecurityManager */
--- a/src/java.desktop/share/classes/sun/awt/AppContext.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/classes/sun/awt/AppContext.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -123,17 +123,6 @@
  * therefore safely invoke any of its methods without worry of being
  * blocked.
  *
- * Note: If a SecurityManager is installed which derives from
- * sun.awt.AWTSecurityManager, it may override the
- * AWTSecurityManager.getAppContext() method to return the proper
- * AppContext based on the execution context, in the case where
- * the default ThreadGroup-based AppContext indexing would return
- * the main "system" AppContext.  For example, in an applet situation,
- * if a system thread calls into an applet, rather than returning the
- * main "system" AppContext (the one corresponding to the system thread),
- * an installed AWTSecurityManager may return the applet's AppContext
- * based on the execution context.
- *
  * @author  Thomas Ball
  * @author  Fred Ecks
  */
@@ -287,10 +276,7 @@
 
     /**
      * Returns the appropriate AppContext for the caller,
-     * as determined by its ThreadGroup.  If the main "system" AppContext
-     * would be returned and there's an AWTSecurityManager installed, it
-     * is called to get the proper AppContext based on the execution
-     * context.
+     * as determined by its ThreadGroup.
      *
      * @return  the AppContext for the caller.
      * @see     java.lang.ThreadGroup
@@ -384,18 +370,6 @@
         return (ctx != null && ctx == mainAppContext);
     }
 
-    private static AppContext getExecutionAppContext() {
-        SecurityManager securityManager = System.getSecurityManager();
-        if ((securityManager != null) &&
-            (securityManager instanceof AWTSecurityManager))
-        {
-            AWTSecurityManager awtSecMgr = (AWTSecurityManager) securityManager;
-            AppContext secAppContext = awtSecMgr.getAppContext();
-            return secAppContext; // Return what we're told
-        }
-        return null;
-    }
-
     private long DISPOSAL_TIMEOUT = 5000;  // Default to 5-second timeout
                                            // for disposal of all Frames
                                            // (we wait for this time twice,
@@ -872,8 +846,7 @@
                 // context since we don't need it.
                 if (numAppContexts.get() == 0) return null;
 
-                // Get the context from the security manager
-                AppContext ecx = getExecutionAppContext();
+                AppContext ecx = null;
 
                 // Not sure we really need to re-check numAppContexts here.
                 // If all applets have gone away then we could have a
--- a/src/java.desktop/share/classes/sun/font/FontDesignMetrics.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/classes/sun/font/FontDesignMetrics.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,22 +25,18 @@
 
 package sun.font;
 
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.SoftReference;
-
+import java.awt.Font;
 import java.awt.FontMetrics;
-import java.awt.Font;
 import java.awt.GraphicsEnvironment;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Rectangle2D;
 import java.awt.font.FontRenderContext;
 import java.awt.font.TextLayout;
-
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.SoftReference;
 import java.util.concurrent.ConcurrentHashMap;
 
 import sun.java2d.Disposer;
@@ -263,7 +259,7 @@
          * by this code as they use the metrics of the physical anyway.
          */
         SunFontManager fm = SunFontManager.getInstance();
-        if (fm.maybeUsingAlternateCompositeFonts() &&
+        if (fm.usingAlternateCompositeFonts() &&
             FontUtilities.getFont2D(font) instanceof CompositeFont) {
             return new FontDesignMetrics(font, frc);
         }
--- a/src/java.desktop/share/classes/sun/font/FontManager.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/classes/sun/font/FontManager.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -22,16 +22,12 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package sun.font;
 
 import java.awt.Font;
 import java.awt.FontFormatException;
 import java.io.File;
-import java.util.Locale;
-import java.util.TreeMap;
-
-import javax.swing.plaf.FontUIResource;
-
 
 /**
  * Interface between Java Fonts (java.awt.Font) and the underlying
@@ -93,13 +89,6 @@
         throws FontFormatException;
 
     /**
-     * If usingPerAppContextComposites is true, we are in "applet"
-     * (eg browser) environment and at least one context has selected
-     * an alternate composite font behaviour.
-     */
-    public boolean usingPerAppContextComposites();
-
-    /**
      * Creates a derived composite font from the specified font (handle).
      *
      * @param family the font family of the derived font
--- a/src/java.desktop/share/classes/sun/font/SunFontManager.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/classes/sun/font/SunFontManager.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2018, 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
@@ -50,7 +50,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.swing.plaf.FontUIResource;
-import sun.awt.AppContext;
+
 import sun.awt.FontConfiguration;
 import sun.awt.SunToolkit;
 import sun.awt.util.ThreadGroupUtils;
@@ -256,11 +256,6 @@
         return t1Filter;
     }
 
-    @Override
-    public boolean usingPerAppContextComposites() {
-        return _usingPerAppContextComposites;
-    }
-
     static {
 
         java.security.AccessController.doPrivileged(
@@ -1936,7 +1931,6 @@
     public Font2D findFont2D(String name, int style, int fallback) {
         String lowerCaseName = name.toLowerCase(Locale.ENGLISH);
         String mapName = lowerCaseName + dotStyleStr(style);
-        Font2D font;
 
         /* If preferLocaleFonts() or preferProportionalFonts() has been
          * called we may be using an alternate set of composite fonts in this
@@ -1944,19 +1938,7 @@
          * this is so, and gives access to the alternate composite for the
          * name.
          */
-        if (_usingPerAppContextComposites) {
-            @SuppressWarnings("unchecked")
-            ConcurrentHashMap<String, Font2D> altNameCache =
-                (ConcurrentHashMap<String, Font2D>)
-                AppContext.getAppContext().get(CompositeFont.class);
-            if (altNameCache != null) {
-                font = altNameCache.get(mapName);
-            } else {
-                font = null;
-            }
-        } else {
-            font = fontNameCache.get(mapName);
-        }
+        Font2D font = fontNameCache.get(mapName);
         if (font != null) {
             return font;
         }
@@ -2161,25 +2143,9 @@
          * cache for these.
          */
 
-        if (fontsAreRegistered || fontsAreRegisteredPerAppContext) {
-            Hashtable<String, FontFamily> familyTable = null;
-            Hashtable<String, Font2D> nameTable;
-
-            if (fontsAreRegistered) {
-                familyTable = createdByFamilyName;
-                nameTable = createdByFullName;
-            } else {
-                AppContext appContext = AppContext.getAppContext();
-                @SuppressWarnings("unchecked")
-                Hashtable<String,FontFamily> tmp1 =
-                    (Hashtable<String,FontFamily>)appContext.get(regFamilyKey);
-                familyTable = tmp1;
-
-                @SuppressWarnings("unchecked")
-                Hashtable<String, Font2D> tmp2 =
-                    (Hashtable<String,Font2D>)appContext.get(regFullNameKey);
-                nameTable = tmp2;
-            }
+        if (fontsAreRegistered) {
+            Hashtable<String, FontFamily> familyTable = createdByFamilyName;
+            Hashtable<String, Font2D> nameTable = createdByFullName;
 
             family = familyTable.get(lowerCaseName);
             if (family != null) {
@@ -2684,9 +2650,6 @@
      * Calling the methods below is "heavyweight" but it is expected that
      * these methods will be called very rarely.
      *
-     * If _usingPerAppContextComposites is true, we are in "applet"
-     * (eg browser) environment and at least one context has selected
-     * an alternate composite font behaviour.
      * If _usingAlternateComposites is true, we are not in an "applet"
      * environment and the (single) application has selected
      * an alternate composite font behaviour.
@@ -2698,21 +2661,13 @@
      * but that may have to wait. The results should be correct, just not
      * optimal.
      */
-    private static final Object altJAFontKey       = new Object();
-    private static final Object localeFontKey       = new Object();
-    private static final Object proportionalFontKey = new Object();
-    private boolean _usingPerAppContextComposites = false;
     private boolean _usingAlternateComposites = false;
 
-    /* These values are used only if we are running as a standalone
-     * application, as determined by maybeMultiAppContext();
-     */
     private static boolean gAltJAFont = false;
     private boolean gLocalePref = false;
     private boolean gPropPref = false;
 
-    /* This method doesn't check if alternates are selected in this app
-     * context. Its used by the FontMetrics caching code which in such
+    /* Its used by the FontMetrics caching code which in such
      * a case cannot retrieve a cached metrics solely on the basis of
      * the Font.equals() method since it needs to also check if the Font2D
      * is the same.
@@ -2724,26 +2679,8 @@
      * logical font definitions we may need to revisit this if GTK reports
      * combined metrics instead. For now though this test can be simple.
      */
-    public boolean maybeUsingAlternateCompositeFonts() {
-       return _usingAlternateComposites || _usingPerAppContextComposites;
-    }
-
     public boolean usingAlternateCompositeFonts() {
-        return (_usingAlternateComposites ||
-                (_usingPerAppContextComposites &&
-                AppContext.getAppContext().get(CompositeFont.class) != null));
-    }
-
-    private static boolean maybeMultiAppContext() {
-        Boolean appletSM = (Boolean)
-            java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction<Object>() {
-                        public Object run() {
-                            SecurityManager sm = System.getSecurityManager();
-                            return sm instanceof sun.awt.AWTSecurityManager;
-                        }
-                    });
-        return appletSM.booleanValue();
+        return _usingAlternateComposites;
     }
 
     /* Modifies the behaviour of a subsequent call to preferLocaleFonts()
@@ -2758,22 +2695,11 @@
         if (!FontUtilities.isWindows) {
             return;
         }
-
-        if (!maybeMultiAppContext()) {
-            gAltJAFont = true;
-        } else {
-            AppContext appContext = AppContext.getAppContext();
-            appContext.put(altJAFontKey, altJAFontKey);
-        }
+        gAltJAFont = true;
     }
 
     public boolean usingAlternateFontforJALocales() {
-        if (!maybeMultiAppContext()) {
-            return gAltJAFont;
-        } else {
-            AppContext appContext = AppContext.getAppContext();
-            return appContext.get(altJAFontKey) == altJAFontKey;
-        }
+        return gAltJAFont;
     }
 
     public synchronized void preferLocaleFonts() {
@@ -2784,29 +2710,12 @@
         if (!FontConfiguration.willReorderForStartupLocale()) {
             return;
         }
-
-        if (!maybeMultiAppContext()) {
-            if (gLocalePref == true) {
-                return;
-            }
-            gLocalePref = true;
-            createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
-            _usingAlternateComposites = true;
-        } else {
-            AppContext appContext = AppContext.getAppContext();
-            if (appContext.get(localeFontKey) == localeFontKey) {
-                return;
-            }
-            appContext.put(localeFontKey, localeFontKey);
-            boolean acPropPref =
-                appContext.get(proportionalFontKey) == proportionalFontKey;
-            ConcurrentHashMap<String, Font2D>
-                altNameCache = new ConcurrentHashMap<String, Font2D> ();
-            /* If there is an existing hashtable, we can drop it. */
-            appContext.put(CompositeFont.class, altNameCache);
-            _usingPerAppContextComposites = true;
-            createCompositeFonts(altNameCache, true, acPropPref);
+        if (gLocalePref == true) {
+            return;
         }
+        gLocalePref = true;
+        createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
+        _usingAlternateComposites = true;
     }
 
     public synchronized void preferProportionalFonts() {
@@ -2820,29 +2729,12 @@
         if (!FontConfiguration.hasMonoToPropMap()) {
             return;
         }
-
-        if (!maybeMultiAppContext()) {
-            if (gPropPref == true) {
-                return;
-            }
-            gPropPref = true;
-            createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
-            _usingAlternateComposites = true;
-        } else {
-            AppContext appContext = AppContext.getAppContext();
-            if (appContext.get(proportionalFontKey) == proportionalFontKey) {
-                return;
-            }
-            appContext.put(proportionalFontKey, proportionalFontKey);
-            boolean acLocalePref =
-                appContext.get(localeFontKey) == localeFontKey;
-            ConcurrentHashMap<String, Font2D>
-                altNameCache = new ConcurrentHashMap<String, Font2D> ();
-            /* If there is an existing hashtable, we can drop it. */
-            appContext.put(CompositeFont.class, altNameCache);
-            _usingPerAppContextComposites = true;
-            createCompositeFonts(altNameCache, acLocalePref, true);
+        if (gPropPref == true) {
+            return;
         }
+        gPropPref = true;
+        createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
+        _usingAlternateComposites = true;
     }
 
     private static HashSet<String> installedNames = null;
@@ -2865,13 +2757,10 @@
         return installedNames;
     }
 
-    /* Keys are used to lookup per-AppContext Hashtables */
-    private static final Object regFamilyKey  = new Object();
-    private static final Object regFullNameKey = new Object();
+    private static final Object regFamilyLock  = new Object();
     private Hashtable<String,FontFamily> createdByFamilyName;
     private Hashtable<String,Font2D>     createdByFullName;
     private boolean fontsAreRegistered = false;
-    private boolean fontsAreRegisteredPerAppContext = false;
 
     public boolean registerFont(Font font) {
         /* This method should not be called with "null".
@@ -2882,7 +2771,7 @@
         }
 
         /* Initialise these objects only once we start to use this API */
-        synchronized (regFamilyKey) {
+        synchronized (regFamilyLock) {
             if (createdByFamilyName == null) {
                 createdByFamilyName = new Hashtable<String,FontFamily>();
                 createdByFullName = new Hashtable<String,Font2D>();
@@ -2919,31 +2808,10 @@
         }
 
         /* Checks passed, now register the font */
-        Hashtable<String,FontFamily> familyTable;
-        Hashtable<String,Font2D> fullNameTable;
-        if (!maybeMultiAppContext()) {
-            familyTable = createdByFamilyName;
-            fullNameTable = createdByFullName;
-            fontsAreRegistered = true;
-        } else {
-            AppContext appContext = AppContext.getAppContext();
-            @SuppressWarnings("unchecked")
-            Hashtable<String,FontFamily> tmp1 =
-                (Hashtable<String,FontFamily>)appContext.get(regFamilyKey);
-            familyTable = tmp1;
-            @SuppressWarnings("unchecked")
-            Hashtable<String,Font2D> tmp2 =
-                (Hashtable<String,Font2D>)appContext.get(regFullNameKey);
-            fullNameTable = tmp2;
-
-            if (familyTable == null) {
-                familyTable = new Hashtable<String,FontFamily>();
-                fullNameTable = new Hashtable<String,Font2D>();
-                appContext.put(regFamilyKey, familyTable);
-                appContext.put(regFullNameKey, fullNameTable);
-            }
-            fontsAreRegisteredPerAppContext = true;
-        }
+        Hashtable<String, FontFamily> familyTable = createdByFamilyName;
+        Hashtable<String, Font2D> fullNameTable = createdByFullName;
+        fontsAreRegistered = true;
+
         /* Create the FontFamily and add font to the tables */
         Font2D font2D = FontUtilities.getFont2D(font);
         int style = font2D.getStyle();
@@ -2989,12 +2857,6 @@
         Hashtable<String,FontFamily> familyTable;
         if (fontsAreRegistered) {
             familyTable = createdByFamilyName;
-        } else if (fontsAreRegisteredPerAppContext) {
-            AppContext appContext = AppContext.getAppContext();
-            @SuppressWarnings("unchecked")
-            Hashtable<String,FontFamily> tmp =
-                (Hashtable<String,FontFamily>)appContext.get(regFamilyKey);
-            familyTable = tmp;
         } else {
             return null;
         }
@@ -3019,12 +2881,6 @@
         Hashtable<String,Font2D> nameTable;
         if (fontsAreRegistered) {
             nameTable = createdByFullName;
-        } else if (fontsAreRegisteredPerAppContext) {
-            AppContext appContext = AppContext.getAppContext();
-            @SuppressWarnings("unchecked")
-            Hashtable<String,Font2D> tmp =
-                (Hashtable<String,Font2D>)appContext.get(regFullNameKey);
-            nameTable = tmp;
         } else {
             return null;
         }
--- a/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-atomic-private.hh	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-atomic-private.hh	Fri Feb 22 20:36:42 2019 +0000
@@ -115,7 +115,7 @@
 #endif
 
 
-#elif !defined(HB_NO_MT) && defined(_AIX) && defined(__IBMCPP__)
+#elif !defined(HB_NO_MT) && defined(_AIX) && (defined(__IBMCPP__) || defined(__ibmxl__))
 
 #include <builtins.h>
 
--- a/src/java.desktop/share/native/liblcms/cmsxform.c	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/share/native/liblcms/cmsxform.c	Fri Feb 22 20:36:42 2019 +0000
@@ -836,7 +836,7 @@
 
                             // Save the day? (Ignore the warning)
                             if (Plugin->OldXform) {
-                                   p->OldXform = (_cmsTransformFn) p->xform;
+                                   p->OldXform = (_cmsTransformFn)(void*) p->xform;
                                    p->xform = _cmsTransform2toTransformAdaptor;
                             }
 
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c	Fri Feb 22 20:36:42 2019 +0000
@@ -258,6 +258,7 @@
 
 static gboolean gtk3_version_3_10 = TRUE;
 static gboolean gtk3_version_3_14 = FALSE;
+static gboolean gtk3_version_3_20 = FALSE;
 
 GtkApi* gtk3_load(JNIEnv *env, const char* lib_name)
 {
@@ -400,6 +401,18 @@
         }
         gtk3_version_3_14 = !fp_gtk_check_version(3, 14, 0);
 
+        if (!fp_gtk_check_version(3, 20, 0)) {
+            gtk3_version_3_20 = TRUE;
+            fp_gtk_widget_path_copy = dl_symbol("gtk_widget_path_copy");
+            fp_gtk_widget_path_new = dl_symbol("gtk_widget_path_new");
+            fp_gtk_widget_path_append_type = dl_symbol("gtk_widget_path_append_type");
+            fp_gtk_widget_path_iter_set_object_name = dl_symbol("gtk_widget_path_iter_set_object_name");
+            fp_gtk_style_context_set_path = dl_symbol("gtk_style_context_set_path");
+            fp_gtk_widget_path_unref = dl_symbol("gtk_widget_path_unref");
+            fp_gtk_style_context_get_path = dl_symbol("gtk_style_context_get_path");
+            fp_gtk_style_context_new = dl_symbol("gtk_style_context_new");
+        }
+
         fp_gdk_window_create_similar_surface =
                       dl_symbol("gdk_window_create_similar_surface");
         fp_gtk_settings_get_for_screen =
@@ -561,7 +574,6 @@
                                                 "gtk_combo_box_new_with_entry");
         fp_gtk_separator_tool_item_new = dlsym(gtk3_libhandle,
                                                  "gtk_separator_tool_item_new");
-
         fp_g_list_append = dl_symbol("g_list_append");
         fp_g_list_free = dl_symbol("g_list_free");
         fp_g_list_free_full = dl_symbol("g_list_free_full");
@@ -1362,6 +1374,90 @@
     return result;
 }
 
+static void append_element (GtkWidgetPath *path, const gchar *selector)
+{
+    fp_gtk_widget_path_append_type (path, G_TYPE_NONE);
+    fp_gtk_widget_path_iter_set_object_name (path, -1, selector);
+}
+
+static GtkWidgetPath* createWidgetPath(const GtkWidgetPath* path) {
+    if (path == NULL) {
+        return fp_gtk_widget_path_new();
+    } else {
+        return fp_gtk_widget_path_copy(path);
+    }
+}
+
+static GtkStyleContext* get_style(WidgetType widget_type, const gchar *detail)
+{
+    if (!gtk3_version_3_20) {
+        gtk3_widget = gtk3_get_widget(widget_type);
+        GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
+        fp_gtk_style_context_save (context);
+        if (detail != 0) {
+             transform_detail_string(detail, context);
+        }
+        return context;
+    } else {
+        gtk3_widget = gtk3_get_widget(widget_type);
+        GtkStyleContext* widget_context = fp_gtk_widget_get_style_context (gtk3_widget);
+        GtkWidgetPath *path = NULL;
+        if (detail != 0) {
+            if (strcmp(detail, "checkbutton") == 0) {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, "check");
+            } else if (strcmp(detail, "radiobutton") == 0) {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, "radio");
+            } else if (strcmp(detail, "vscale") == 0 || strcmp(detail, "hscale") == 0) {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, "slider");
+            } else if (strcmp(detail, "trough") == 0) {
+                //This is a fast solution to the scrollbar trough not being rendered properly
+                if (widget_type == HSCROLL_BAR || widget_type == HSCROLL_BAR_TRACK ||
+                    widget_type == VSCROLL_BAR || widget_type == VSCROLL_BAR_TRACK) {
+                    path = createWidgetPath (NULL);
+                } else {
+                    path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                }
+                append_element(path, detail);
+            } else if (strcmp(detail, "bar") == 0) {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, "trough");
+                append_element(path, "progress");
+            } else if (strcmp(detail, "vscrollbar") == 0 || strcmp(detail, "hscrollbar") == 0) {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, "button");
+            } else if (strcmp(detail, "check") == 0) {
+                path = createWidgetPath (NULL);
+                append_element(path, detail);
+            } else if (strcmp(detail, "option") == 0) {
+                path = createWidgetPath (NULL);
+                append_element(path, "radio");
+            } else {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, detail);
+            }
+        } else {
+            path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+        }
+
+        GtkStyleContext *context = fp_gtk_style_context_new ();
+        fp_gtk_style_context_set_path (context, path);
+        fp_gtk_widget_path_unref (path);
+        return context;
+    }
+}
+
+static void disposeOrRestoreContext(GtkStyleContext *context)
+{
+    if (!gtk3_version_3_20) {
+        fp_gtk_style_context_restore (context);
+    } else {
+        fp_g_object_unref (context);
+    }
+}
+
 static void gtk3_paint_arrow(WidgetType widget_type, GtkStateType state_type,
         GtkShadowType shadow_type, const gchar *detail,
         gint x, gint y, gint width, gint height,
@@ -1509,13 +1605,9 @@
      */
     gtk3_set_direction(gtk3_widget, dir);
 
-    GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
-    fp_gtk_style_context_save (context);
-
-    transform_detail_string(detail, context);
+    GtkStyleContext* context = get_style(widget_type, detail);
 
     GtkStateFlags flags = get_gtk_flags(state_type);
-
     if (shadow_type == GTK_SHADOW_IN && widget_type != COMBO_BOX_ARROW_BUTTON) {
         flags |= GTK_STATE_FLAG_ACTIVE;
     }
@@ -1532,23 +1624,31 @@
         fp_gtk_style_context_add_class (context, "default");
     }
 
+    if (fp_gtk_style_context_has_class(context, "trough")) {
+        flags |= GTK_STATE_FLAG_BACKDROP;
+    }
+
     fp_gtk_style_context_set_state (context, flags);
 
-    if (fp_gtk_style_context_has_class(context, "progressbar")) {
-        fp_gtk_render_activity (context, cr, x, y, width, height);
-    } else {
-        fp_gtk_render_background (context, cr, x, y, width, height);
-        if (shadow_type != GTK_SHADOW_NONE) {
-            fp_gtk_render_frame(context, cr, x, y, width, height);
-        }
+    fp_gtk_render_background (context, cr, x, y, width, height);
+    if (shadow_type != GTK_SHADOW_NONE) {
+        fp_gtk_render_frame(context, cr, x, y, width, height);
     }
 
-    fp_gtk_style_context_restore (context);
+    disposeOrRestoreContext(context);
+
     /*
      * Reset the text direction to the default value so that we don't
      * accidentally affect other operations and widgets.
      */
     gtk3_set_direction(gtk3_widget, GTK_TEXT_DIR_LTR);
+
+    //This is a fast solution to the scrollbar trough not being rendered properly
+    if ((widget_type == HSCROLL_BAR || widget_type == HSCROLL_BAR_TRACK ||
+        widget_type == VSCROLL_BAR || widget_type == VSCROLL_BAR_TRACK) && detail != 0) {
+        gtk3_paint_box(widget_type, state_type, shadow_type, NULL,
+                    x, y, width, height, synth_state, dir);
+    }
 }
 
 static void gtk3_paint_box_gap(WidgetType widget_type, GtkStateType state_type,
@@ -1580,23 +1680,19 @@
 static void gtk3_paint_check(WidgetType widget_type, gint synth_state,
         const gchar *detail, gint x, gint y, gint width, gint height)
 {
-    gtk3_widget = gtk3_get_widget(widget_type);
-
-    GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
-
-    fp_gtk_style_context_save (context);
+    GtkStyleContext* context = get_style(widget_type, detail);
 
     GtkStateFlags flags = get_gtk_state_flags(synth_state);
     if (gtk3_version_3_14 && (synth_state & SELECTED)) {
-        flags = GTK_STATE_FLAG_CHECKED;
+        flags &= ~GTK_STATE_FLAG_SELECTED;
+        flags |= GTK_STATE_FLAG_CHECKED;
     }
     fp_gtk_style_context_set_state(context, flags);
 
-    fp_gtk_style_context_add_class (context, "check");
-
-    fp_gtk_render_check (context, cr, x, y, width, height);
-
-    fp_gtk_style_context_restore (context);
+    fp_gtk_render_background(context, cr, x, y, width, height);
+    fp_gtk_render_frame(context, cr, x, y, width, height);
+    fp_gtk_render_check(context, cr, x, y, width, height);
+    disposeOrRestoreContext(context);
 }
 
 
@@ -1684,7 +1780,6 @@
     gtk3_widget = gtk3_get_widget(widget_type);
 
     GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
-
     fp_gtk_style_context_save (context);
 
     if (detail != 0) {
@@ -1787,25 +1882,19 @@
 static void gtk3_paint_option(WidgetType widget_type, gint synth_state,
         const gchar *detail, gint x, gint y, gint width, gint height)
 {
-     gtk3_widget = gtk3_get_widget(widget_type);
-
-     GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
-
-     fp_gtk_style_context_save (context);
+     GtkStyleContext* context = get_style(widget_type, detail);
 
      GtkStateFlags flags = get_gtk_state_flags(synth_state);
      if (gtk3_version_3_14 && (synth_state & SELECTED)) {
-         flags = GTK_STATE_FLAG_CHECKED;
+         flags &= ~GTK_STATE_FLAG_SELECTED;
+         flags |= GTK_STATE_FLAG_CHECKED;
      }
      fp_gtk_style_context_set_state(context, flags);
 
-     if (detail != 0) {
-         transform_detail_string(detail, context);
-     }
-
+     fp_gtk_render_background(context, cr, x, y, width, height);
+     fp_gtk_render_frame(context, cr, x, y, width, height);
      fp_gtk_render_option(context, cr, x, y, width, height);
-
-     fp_gtk_style_context_restore (context);
+     disposeOrRestoreContext(context);
 }
 
 static void gtk3_paint_shadow(WidgetType widget_type, GtkStateType state_type,
@@ -1864,15 +1953,7 @@
         gint x, gint y, gint width, gint height, GtkOrientation orientation,
         gboolean has_focus)
 {
-    gtk3_widget = gtk3_get_widget(widget_type);
-
-    GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
-
-    fp_gtk_style_context_save (context);
-
-    if (detail) {
-       transform_detail_string(detail, context);
-    }
+    GtkStyleContext *context = get_style(widget_type, detail);
 
     GtkStateFlags flags = get_gtk_flags(state_type);
 
@@ -1886,9 +1967,10 @@
 
     fp_gtk_style_context_set_state (context, flags);
 
+    fp_gtk_render_background (context, cr, x, y, width, height);
+    fp_gtk_render_frame(context, cr, x, y, width, height);
     (*fp_gtk_render_slider)(context, cr, x, y, width, height, orientation);
-
-    fp_gtk_style_context_restore (context);
+    disposeOrRestoreContext(context);
 }
 
 static void gtk3_paint_background(WidgetType widget_type,
@@ -2278,6 +2360,11 @@
 
     init_containers();
 
+    if (widget_type == TEXT_FIELD && state_type == GTK_STATE_SELECTED &&
+        color_type == TEXT_BACKGROUND) {
+        widget_type = TEXT_AREA;
+    }
+
     gtk3_widget = gtk3_get_widget(widget_type);
 
     GtkStyleContext* context = fp_gtk_widget_get_style_context(gtk3_widget);
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.h	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.h	Fri Feb 22 20:36:42 2019 +0000
@@ -162,6 +162,7 @@
 typedef void GtkRange;
 typedef void GtkProgressBar;
 typedef void GtkProgress;
+typedef void GtkWidgetPath;
 
 /* Some real structures */
 typedef struct
@@ -238,7 +239,6 @@
   GType    owner_type;
 } GParamSpec;
 
-
 static gchar* (*fp_glib_check_version)(guint required_major,
                            guint required_minor, guint required_micro);
 
@@ -573,5 +573,18 @@
 static void (*fp_gtk_widget_size_request)(GtkWidget *widget,
                                           GtkRequisition *requisition);
 static GtkAdjustment* (*fp_gtk_range_get_adjustment)(GtkRange* range);
+static GtkWidgetPath* (*fp_gtk_widget_path_copy)
+        (const GtkWidgetPath *path);
+static const GtkWidgetPath* (*fp_gtk_style_context_get_path)
+        (GtkStyleContext *context);
+static GtkWidgetPath* (*fp_gtk_widget_path_new) (void);
+static gint (*fp_gtk_widget_path_append_type)
+        (GtkWidgetPath *path, GType type);
+static void (*fp_gtk_widget_path_iter_set_object_name)
+        (GtkWidgetPath *path, gint pos, const char *name);
+static void (*fp_gtk_style_context_set_path)
+        (GtkStyleContext *context, GtkWidgetPath *path);
+static void (*fp_gtk_widget_path_unref) (GtkWidgetPath *path);
+static GtkStyleContext* (*fp_gtk_style_context_new) (void);
 
 #endif /* !_GTK3_INTERFACE_H */
--- a/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -65,6 +65,7 @@
     private Locale currentLocale;
     // indicate whether status window is hidden or not.
     private boolean statusWindowHidden = false;
+    private boolean hasCompositionString = false;
 
     // attribute definition in Win32 (in IMM.H)
     public static final byte ATTR_INPUT                 = 0x00;
@@ -246,6 +247,7 @@
         } else if (locale.getLanguage().equals(Locale.KOREAN.getLanguage())) {
             if (subset1 == UnicodeBlock.BASIC_LATIN || subset1 == InputSubset.LATIN_DIGITS) {
                 setOpenStatus(context, false);
+                setConversionStatus(context, IME_CMODE_ALPHANUMERIC);
             } else {
                 if (subset1 == UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                     || subset1 == InputSubset.HANJA
@@ -263,11 +265,14 @@
         } else if (locale.getLanguage().equals(Locale.CHINESE.getLanguage())) {
             if (subset1 == UnicodeBlock.BASIC_LATIN || subset1 == InputSubset.LATIN_DIGITS) {
                 setOpenStatus(context, false);
+                newmode = getConversionStatus(context);
+                newmode &= ~IME_CMODE_FULLSHAPE;
+                setConversionStatus(context, newmode);
             } else {
                 if (subset1 == UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                     || subset1 == InputSubset.TRADITIONAL_HANZI
                     || subset1 == InputSubset.SIMPLIFIED_HANZI)
-                    newmode = IME_CMODE_NATIVE;
+                    newmode = IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE;
                 else if (subset1 == InputSubset.FULLWIDTH_LATIN)
                     newmode = IME_CMODE_FULLSHAPE;
                 else
@@ -318,6 +323,15 @@
             setLocale(currentLocale, true);
         }
 
+        // Compare IM's composition string with Java's composition string
+        if (hasCompositionString && !isCompositionStringAvailable(context)) {
+            endCompositionNative(context, DISCARD_INPUT);
+            sendInputMethodEvent(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
+                EventQueue.getMostRecentEventTime(),
+                null, null, null, null, null, 0, 0, 0);
+            hasCompositionString = false;
+        }
+
         /* If the status window or Windows language bar is turned off due to
            native input method was switched to java input method, we
            have to turn it on otherwise it is gone for good until next time
@@ -345,6 +359,7 @@
             isLastFocussedActiveClient = haveActiveClient();
         }
         isActive = false;
+        hasCompositionString = isCompositionStringAvailable(context);
     }
 
     /**
@@ -649,4 +664,5 @@
     static native Locale getNativeLocale();
     static native boolean setNativeLocale(String localeName, boolean onActivate);
     private native void openCandidateWindow(WComponentPeer peer, int x, int y);
+    private native boolean isCompositionStringAvailable(int context);
 }
--- a/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3869,6 +3869,11 @@
         return;
     }
     COMPOSITIONFORM cf = {CFS_DEFAULT, {0, 0}, {0, 0, 0, 0}};
+    LOGFONT lf;
+    HFONT hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
+    if (GetObject(hFont, sizeof(lf), (LPVOID)&lf) == sizeof(lf)) {
+        ImmSetCompositionFont(hIMC, &lf);
+    }
     ImmSetCompositionWindow(hIMC, &cf);
     ImmReleaseContext(hwnd, hIMC);
 }
--- a/src/java.desktop/windows/native/libawt/windows/awt_InputMethod.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.desktop/windows/native/libawt/windows/awt_InputMethod.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, 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
@@ -528,6 +528,23 @@
     CATCH_BAD_ALLOC_RET(NULL);
 }
 
+/*
+ * Class:     sun_awt_windows_WInputMethod
+ * Method:    isCompositionStringAvailable
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WInputMethod_isCompositionStringAvailable
+  (JNIEnv *env, jobject self, jint context)
+{
+    LONG length;
+    length = ImmGetCompositionString((HIMC)IntToPtr(context), GCS_COMPSTR, NULL, 0);
+    if (length > 0) {
+        return JNI_TRUE;
+    } else {
+        return JNI_FALSE;
+    }
+}
+
 /**
  * Class:     sun_awt_windows_WInputMethod
  * Method:    getNativeIMMDescription
--- a/src/java.logging/share/classes/java/util/logging/Handler.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.logging/share/classes/java/util/logging/Handler.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, 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
@@ -329,12 +329,13 @@
      * handler from logging the {@code LogRecord}. It will return false if
      * the {@code LogRecord} is null.
      *
-     * @param record  a {@code LogRecord}
+     * @param record  a {@code LogRecord} (may be null).
      * @return true if the {@code LogRecord} would be logged.
      *
      */
     public boolean isLoggable(LogRecord record) {
         final int levelValue = getLevel().intValue();
+        if (record == null) return false;
         if (record.getLevel().intValue() < levelValue || levelValue == offValue) {
             return false;
         }
--- a/src/java.logging/share/classes/java/util/logging/MemoryHandler.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.logging/share/classes/java/util/logging/MemoryHandler.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, 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
@@ -270,7 +270,7 @@
      * check whether the {@code LogRecord} would result in a "push" of the
      * buffer contents. It will return false if the {@code LogRecord} is null.
      *
-     * @param record  a {@code LogRecord}
+     * @param record  a {@code LogRecord} (may be null).
      * @return true if the {@code LogRecord} would be logged.
      *
      */
--- a/src/java.logging/share/classes/java/util/logging/StreamHandler.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.logging/share/classes/java/util/logging/StreamHandler.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, 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
@@ -225,7 +225,7 @@
      * whether it satisfies any {@code Filter}.  It will also return false if
      * no output stream has been assigned yet or the LogRecord is null.
      *
-     * @param record  a {@code LogRecord}
+     * @param record  a {@code LogRecord} (may be null).
      * @return true if the {@code LogRecord} would be logged.
      *
      */
--- a/src/java.rmi/share/classes/java/rmi/server/RMIFailureHandler.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/java.rmi/share/classes/java/rmi/server/RMIFailureHandler.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,13 +26,13 @@
 package java.rmi.server;
 
 /**
- * An <code>RMIFailureHandler</code> can be registered via the
- * <code>RMISocketFactory.setFailureHandler</code> call. The
- * <code>failure</code> method of the handler is invoked when the RMI
- * runtime is unable to create a <code>ServerSocket</code> to listen
- * for incoming calls. The <code>failure</code> method returns a boolean
+ * An {@code RMIFailureHandler} can be registered via the
+ * {@code RMISocketFactory.setFailureHandler} call. The
+ * {@code failure} method of the handler is invoked when the RMI
+ * runtime is unable to create a {@code ServerSocket} to listen
+ * for incoming calls. The {@code failure} method returns a boolean
  * indicating whether the runtime should attempt to re-create the
- * <code>ServerSocket</code>.
+ * {@code ServerSocket}.
  *
  * @author      Ann Wollrath
  * @since       1.1
@@ -40,18 +40,18 @@
 public interface RMIFailureHandler {
 
     /**
-     * The <code>failure</code> callback is invoked when the RMI
-     * runtime is unable to create a <code>ServerSocket</code> via the
-     * <code>RMISocketFactory</code>. An <code>RMIFailureHandler</code>
+     * The {@code failure} callback is invoked when the RMI
+     * runtime is unable to create a {@code ServerSocket} via the
+     * {@code RMISocketFactory}. An {@code RMIFailureHandler}
      * is registered via a call to
-     * <code>RMISocketFacotry.setFailureHandler</code>.  If no failure
+     * {@code RMISocketFactory.setFailureHandler}.  If no failure
      * handler is installed, the default behavior is to attempt to
      * re-create the ServerSocket.
      *
-     * @param ex the exception that occurred during <code>ServerSocket</code>
+     * @param ex the exception that occurred during {@code ServerSocket}
      *           creation
      * @return if true, the RMI runtime attempts to retry
-     * <code>ServerSocket</code> creation
+     * {@code ServerSocket} creation
      * @see java.rmi.server.RMISocketFactory#setFailureHandler(RMIFailureHandler)
      * @since 1.1
      */
--- a/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2015, 2018, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -138,7 +138,7 @@
      * Execute the given command in the target VM.
      */
     InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {
-        assert args.length <= 3;                // includes null
+        assert args.length <= 4;                // includes null
 
         // did we detach?
         synchronized (this) {
@@ -166,7 +166,7 @@
             writeString(s, PROTOCOL_VERSION);
             writeString(s, cmd);
 
-            for (int i=0; i<3; i++) {
+            for (int i = 0; i < 4; i++) {
                 if (i < args.length && args[i] != null) {
                     writeString(s, (String)args[i]);
                 } else {
--- a/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -143,7 +143,7 @@
      * Execute the given command in the target VM.
      */
     InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {
-        assert args.length <= 3;                // includes null
+        assert args.length <= 4;                // includes null
 
         // did we detach?
         synchronized (this) {
@@ -171,7 +171,7 @@
             writeString(s, PROTOCOL_VERSION);
             writeString(s, cmd);
 
-            for (int i=0; i<3; i++) {
+            for (int i = 0; i < 4; i++) {
                 if (i < args.length && args[i] != null) {
                     writeString(s, (String)args[i]);
                 } else {
--- a/src/jdk.attach/macosx/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.attach/macosx/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
      * Execute the given command in the target VM.
      */
     InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {
-        assert args.length <= 3;                // includes null
+        assert args.length <= 4;                // includes null
 
         // did we detach?
         synchronized (this) {
@@ -167,7 +167,7 @@
             writeString(s, PROTOCOL_VERSION);
             writeString(s, cmd);
 
-            for (int i=0; i<3; i++) {
+            for (int i = 0; i < 4; i++) {
                 if (i < args.length && args[i] != null) {
                     writeString(s, (String)args[i]);
                 } else {
--- a/src/jdk.attach/solaris/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.attach/solaris/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -126,7 +126,7 @@
      * Execute the given command in the target VM.
      */
     InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {
-        assert args.length <= 3;                // includes null
+        assert args.length <= 4;                // includes null
 
         // first check that we are still attached
         int door;
--- a/src/jdk.attach/windows/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.attach/windows/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -77,7 +77,7 @@
     InputStream execute(String cmd, Object ... args)
         throws AgentLoadException, IOException
     {
-        assert args.length <= 3;        // includes null
+        assert args.length <= 4;        // includes null
 
         // create a pipe using a random name
         Random rnd = new Random();
--- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Key.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Key.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -106,7 +106,7 @@
     static {
         PrivilegedAction<String> getKeyExtractionProp =
                 () -> System.getProperty(
-                        "sun.security.pkcs11.disableKeyExtraction", "true");
+                        "sun.security.pkcs11.disableKeyExtraction", "false");
         String disableKeyExtraction =
                 AccessController.doPrivileged(getKeyExtractionProp);
         DISABLE_NATIVE_KEYS_EXTRACTION =
--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_keymgmt.c	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_keymgmt.c	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  */
 
 /* Copyright  (c) 2002 Graz University of Technology. All rights reserved.
@@ -151,14 +151,14 @@
     unsigned int i = 0U;
     unsigned long totalDataSize = 0UL, attributesCount = 0UL;
     unsigned long totalCkAttributesSize = 0UL, totalNativeKeyInfoArraySize = 0UL;
-    unsigned long* wrappedKeySizePtr = NULL;
+    jbyte* wrappedKeySizePtr = NULL;
     jbyte* nativeKeyInfoArrayRawCkAttributes = NULL;
     jbyte* nativeKeyInfoArrayRawCkAttributesPtr = NULL;
     jbyte* nativeKeyInfoArrayRawDataPtr = NULL;
     CK_MECHANISM ckMechanism;
     char iv[16] = {0x0};
     CK_ULONG ckWrappedKeyLength = 0U;
-    unsigned long* wrappedKeySizeWrappedKeyArrayPtr = NULL;
+    jbyte* wrappedKeySizeWrappedKeyArrayPtr = NULL;
     CK_BYTE_PTR wrappedKeyBufferPtr = NULL;
     CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
     CK_OBJECT_CLASS class;
@@ -234,7 +234,7 @@
     //     * sizes are expressed in bytes and data type is unsigned long
     totalCkAttributesSize = attributesCount * sizeof(CK_ATTRIBUTE);
     TRACE1("DEBUG: GetNativeKeyInfo attributesCount = %lu\n", attributesCount);
-    TRACE1("DEBUG: GetNativeKeyInfo sizeof CK_ATTRIBUTE = %lu\n", sizeof(CK_ATTRIBUTE));
+    TRACE1("DEBUG: GetNativeKeyInfo sizeof CK_ATTRIBUTE = %zu\n", sizeof(CK_ATTRIBUTE));
     TRACE1("DEBUG: GetNativeKeyInfo totalCkAttributesSize = %lu\n", totalCkAttributesSize);
     TRACE1("DEBUG: GetNativeKeyInfo totalDataSize = %lu\n", totalDataSize);
 
@@ -254,8 +254,8 @@
         goto cleanup;
     }
 
-    wrappedKeySizePtr = (unsigned long*)(nativeKeyInfoArrayRaw +
-            sizeof(unsigned long)*2 + totalCkAttributesSize + totalDataSize);
+    wrappedKeySizePtr = nativeKeyInfoArrayRaw +
+            sizeof(unsigned long)*2 + totalCkAttributesSize + totalDataSize;
     memcpy(nativeKeyInfoArrayRaw, &totalCkAttributesSize, sizeof(unsigned long));
 
     memcpy(nativeKeyInfoArrayRaw + sizeof(unsigned long) + totalCkAttributesSize,
@@ -330,15 +330,15 @@
                 memcpy(nativeKeyInfoWrappedKeyArrayRaw, nativeKeyInfoArrayRaw,
                         totalNativeKeyInfoArraySize);
                 wrappedKeySizeWrappedKeyArrayPtr =
-                        (unsigned long*)(nativeKeyInfoWrappedKeyArrayRaw +
+                        nativeKeyInfoWrappedKeyArrayRaw +
                         sizeof(unsigned long)*2 + totalCkAttributesSize +
-                        totalDataSize);
+                        totalDataSize;
                 memcpy(wrappedKeySizeWrappedKeyArrayPtr, &ckWrappedKeyLength, sizeof(unsigned long));
                 TRACE1("DEBUG: GetNativeKeyInfo 1st C_WrapKey wrappedKeyLength = %lu\n", ckWrappedKeyLength);
 
                 wrappedKeyBufferPtr =
-                        (unsigned char*)wrappedKeySizeWrappedKeyArrayPtr +
-                        sizeof(unsigned long);
+                        (CK_BYTE_PTR) (wrappedKeySizeWrappedKeyArrayPtr +
+                        sizeof(unsigned long));
                 rv = (*ckpFunctions->C_WrapKey)(ckSessionHandle, &ckMechanism,
                         jLongToCKULong(jWrappingKeyHandle),ckObjectHandle,
                         wrappedKeyBufferPtr, &ckWrappedKeyLength);
@@ -414,7 +414,7 @@
     jbyte* nativeKeyInfoArrayRawCkAttributesPtr = NULL;
     jbyte* nativeKeyInfoArrayRawDataPtr = NULL;
     unsigned long totalDataSize = 0UL;
-    unsigned long* wrappedKeySizePtr = NULL;
+    jbyte* wrappedKeySizePtr = NULL;
     unsigned int i = 0U;
     CK_MECHANISM ckMechanism;
     char iv[16] = {0x0};
@@ -443,8 +443,8 @@
             sizeof(unsigned long));
     TRACE1("DEBUG: createNativeKey totalDataSize = %lu\n", totalDataSize);
 
-    wrappedKeySizePtr = (unsigned long*)(nativeKeyInfoArrayRaw +
-            sizeof(unsigned long)*2 + totalCkAttributesSize + totalDataSize);
+    wrappedKeySizePtr = nativeKeyInfoArrayRaw +
+            sizeof(unsigned long)*2 + totalCkAttributesSize + totalDataSize;
 
     memcpy(&ckWrappedKeyLength, wrappedKeySizePtr, sizeof(unsigned long));
     TRACE1("DEBUG: createNativeKey wrappedKeyLength = %lu\n", ckWrappedKeyLength);
@@ -470,7 +470,8 @@
         jMechanismToCKMechanism(env, jWrappingMech, &ckMechanism);
         rv = (*ckpFunctions->C_UnwrapKey)(ckSessionHandle, &ckMechanism,
                 jLongToCKULong(jWrappingKeyHandle),
-                (CK_BYTE_PTR)(wrappedKeySizePtr + 1), ckWrappedKeyLength,
+                (CK_BYTE_PTR)(wrappedKeySizePtr + sizeof(unsigned long)),
+                ckWrappedKeyLength,
                 (CK_ATTRIBUTE_PTR)nativeKeyInfoArrayRawCkAttributes,
                 jLongToCKULong(nativeKeyInfoCkAttributesCount),
                 &ckObjectHandle);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/classfile/ClassLoaderData.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/classfile/ClassLoaderData.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,6 @@
 
 package sun.jvm.hotspot.classfile;
 
-import java.io.PrintStream;
 import sun.jvm.hotspot.debugger.*;
 import sun.jvm.hotspot.memory.*;
 import sun.jvm.hotspot.runtime.*;
@@ -42,14 +41,14 @@
 
   private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
     Type type      = db.lookupType("ClassLoaderData");
-    classLoaderField = type.getAddressField("_class_loader");
+    classLoaderFieldOffset = type.getAddressField("_class_loader").getOffset();
     nextField = type.getAddressField("_next");
     klassesField = new MetadataField(type.getAddressField("_klasses"), 0);
     isUnsafeAnonymousField = new CIntField(type.getCIntegerField("_is_unsafe_anonymous"), 0);
     dictionaryField = type.getAddressField("_dictionary");
   }
 
-  private static AddressField   classLoaderField;
+  private static long classLoaderFieldOffset;
   private static AddressField nextField;
   private static MetadataField  klassesField;
   private static CIntField isUnsafeAnonymousField;
@@ -72,13 +71,9 @@
   }
 
   public Oop getClassLoader() {
-    Address handle = classLoaderField.getValue(getAddress());
-    if (handle != null) {
-      // Load through the handle
-      OopHandle refs = handle.getOopHandleAt(0);
-      return (Instance)VM.getVM().getObjectHeap().newOop(refs);
-    }
-    return null;
+    Address addr = getAddress().addOffsetTo(classLoaderFieldOffset);
+    VMOopHandle vmOopHandle = VMObjectFactory.newObject(VMOopHandle.class, addr);
+    return vmOopHandle.resolve();
   }
 
   public boolean getisUnsafeAnonymous() {
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/cms/CompactibleFreeListSpace.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/cms/CompactibleFreeListSpace.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, 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
@@ -35,7 +35,7 @@
 import sun.jvm.hotspot.types.*;
 import sun.jvm.hotspot.utilities.*;
 
-public class CompactibleFreeListSpace extends CompactibleSpace {
+public class CompactibleFreeListSpace extends CompactibleSpace implements LiveRegionsProvider {
    private static AddressField collectorField;
    private static AddressField indexedFreeListField;
    private static AddressField dictionaryField;
@@ -93,10 +93,10 @@
    }
 
    public long used0() {
-      List regions = getLiveRegions();
+      List<MemRegion> regions = getLiveRegions();
       long usedSize = 0L;
-      for (Iterator itr = regions.iterator(); itr.hasNext();) {
-         MemRegion mr = (MemRegion) itr.next();
+      for (Iterator<MemRegion> itr = regions.iterator(); itr.hasNext();) {
+         MemRegion mr = itr.next();
          usedSize += mr.byteSize();
       }
       return usedSize;
@@ -154,8 +154,9 @@
        return addr;
    }
 
-   public List/*<MemRegion>*/ getLiveRegions() {
-      List res = new ArrayList(); // List<MemRegion>
+  @Override
+   public List<MemRegion> getLiveRegions() {
+      List<MemRegion> res = new ArrayList<>();
       VM vm = VM.getVM();
       Debugger dbg = vm.getDebugger();
       ObjectHeap heap = vm.getObjectHeap();
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/cms/ConcurrentMarkSweepGeneration.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/cms/ConcurrentMarkSweepGeneration.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, 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
@@ -66,6 +66,9 @@
   public void spaceIterate(SpaceClosure blk, boolean usedOnly) {
      blk.doSpace(cmsSpace());
   }
+  public void liveRegionsIterate(LiveRegionsClosure closure) {
+      closure.doLiveRegions(cmsSpace());
+  }
 
   public Generation.Name kind() {
     return Generation.Name.CONCURRENT_MARK_SWEEP;
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/epsilon/EpsilonHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/epsilon/EpsilonHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -66,11 +66,26 @@
     return CollectedHeapName.EPSILON;
   }
 
+  @Override
+  public long capacity() {
+    return space.capacity();
+  }
+
+  @Override
+  public long used() {
+    return space.used();
+  }
+
   public ContiguousSpace space() {
     return space;
   }
 
   @Override
+  public void liveRegionsIterate(LiveRegionsClosure closure) {
+    closure.doLiveRegions(space());
+  }
+
+  @Override
   public void printOn(PrintStream tty) {
      MemRegion mr = reservedRegion();
      tty.println("Epsilon heap");
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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,8 +32,9 @@
 import sun.jvm.hotspot.debugger.Address;
 import sun.jvm.hotspot.gc.shared.CollectedHeap;
 import sun.jvm.hotspot.gc.shared.CollectedHeapName;
+import sun.jvm.hotspot.gc.shared.LiveRegionsClosure;
+import sun.jvm.hotspot.gc.shared.PrintRegionClosure;
 import sun.jvm.hotspot.gc.shared.SpaceClosure;
-import sun.jvm.hotspot.gc.shared.PrintRegionClosure;
 import sun.jvm.hotspot.memory.MemRegion;
 import sun.jvm.hotspot.runtime.VM;
 import sun.jvm.hotspot.runtime.VMObjectFactory;
@@ -138,6 +139,15 @@
     }
 
     @Override
+    public void liveRegionsIterate(LiveRegionsClosure closure) {
+        Iterator<HeapRegion> iter = heapRegionIterator();
+        while (iter.hasNext()) {
+            HeapRegion hr = iter.next();
+            closure.doLiveRegions(hr);
+        }
+    }
+
+    @Override
     public void printOn(PrintStream tty) {
         MemRegion mr = reservedRegion();
 
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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,6 +32,7 @@
 import sun.jvm.hotspot.debugger.Address;
 import sun.jvm.hotspot.debugger.OopHandle;
 import sun.jvm.hotspot.gc.shared.CompactibleSpace;
+import sun.jvm.hotspot.gc.shared.LiveRegionsProvider;
 import sun.jvm.hotspot.memory.MemRegion;
 import sun.jvm.hotspot.runtime.VM;
 import sun.jvm.hotspot.runtime.VMObjectFactory;
@@ -43,7 +44,7 @@
 // Mirror class for HeapRegion. Currently we don't actually include
 // any of its fields but only iterate over it.
 
-public class HeapRegion extends CompactibleSpace {
+public class HeapRegion extends CompactibleSpace implements LiveRegionsProvider {
     // static int GrainBytes;
     static private CIntegerField grainBytesField;
     static private AddressField topField;
@@ -86,8 +87,8 @@
     }
 
     @Override
-    public List getLiveRegions() {
-        List res = new ArrayList();
+    public List<MemRegion> getLiveRegions() {
+        List<MemRegion> res = new ArrayList<>();
         res.add(new MemRegion(bottom(), top()));
         return res;
     }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/parallel/ImmutableSpace.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/parallel/ImmutableSpace.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, 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
@@ -73,7 +73,7 @@
    }
 
    /** returns all MemRegions where live objects are */
-   public abstract List/*<MemRegion>*/ getLiveRegions();
+   public abstract List<MemRegion> getLiveRegions();
 
    /** Returned value is in bytes */
    public long capacity() { return end().minus(bottom()); }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/parallel/MutableSpace.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/parallel/MutableSpace.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, 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
@@ -62,8 +62,8 @@
    }
 
    /** returns all MemRegions where live objects are */
-   public List/*<MemRegion>*/ getLiveRegions() {
-      List res = new ArrayList();
+   public List<MemRegion> getLiveRegions() {
+      List<MemRegion> res = new ArrayList<>();
       res.add(new MemRegion(bottom(), top()));
       return res;
    }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/parallel/ParallelScavengeHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/parallel/ParallelScavengeHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 
 import sun.jvm.hotspot.debugger.*;
 import sun.jvm.hotspot.gc.shared.*;
+import sun.jvm.hotspot.memory.MemRegion;
 import sun.jvm.hotspot.runtime.*;
 import sun.jvm.hotspot.types.*;
 
@@ -88,6 +89,35 @@
       return CollectedHeapName.PARALLEL;
    }
 
+   // Simple wrapper to provide toString() usable for debugging.
+   private class LiveRegionProviderImpl implements LiveRegionsProvider {
+      private String name;
+      private MutableSpace space;
+
+      public LiveRegionProviderImpl(String name, MutableSpace space) {
+         this.name = name;
+         this.space = space;
+      }
+
+      @Override
+      public List<MemRegion> getLiveRegions() {
+         return space.getLiveRegions();
+      }
+      @Override
+      public String toString() {
+         return name;
+      }
+   }
+
+   public void liveRegionsIterate(LiveRegionsClosure closure) {
+      // Add eden space
+      closure.doLiveRegions(new LiveRegionProviderImpl("eden", youngGen().edenSpace()));
+      // Add from-space but not to-space
+      closure.doLiveRegions(new LiveRegionProviderImpl("from", youngGen().fromSpace()));
+
+      closure.doLiveRegions(new LiveRegionProviderImpl("old ", oldGen().objectSpace()));
+   }
+
    public void printOn(PrintStream tty) {
       tty.print("ParallelScavengeHeap [ ");
       youngGen().printOn(tty);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/serial/DefNewGeneration.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/serial/DefNewGeneration.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -94,6 +94,11 @@
     }
   }
 
+  public void liveRegionsIterate(LiveRegionsClosure closure) {
+    closure.doLiveRegions(eden());
+    closure.doLiveRegions(from());
+  }
+
   public void printOn(PrintStream tty) {
     tty.print("  eden");
     eden().printOn(tty);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/serial/TenuredGeneration.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/serial/TenuredGeneration.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -76,6 +76,10 @@
     blk.doSpace(theSpace());
   }
 
+  public void liveRegionsIterate(LiveRegionsClosure closure) {
+    closure.doLiveRegions(theSpace());
+  }
+
   public void printOn(PrintStream tty) {
     tty.print("  old ");
     theSpace().printOn(tty);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -28,9 +28,12 @@
 import java.util.*;
 
 import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.gc.shared.*;
 import sun.jvm.hotspot.memory.*;
 import sun.jvm.hotspot.runtime.*;
 import sun.jvm.hotspot.types.*;
+import sun.jvm.hotspot.utilities.BitMapInterface;
+import sun.jvm.hotspot.utilities.BitMapSegmented;
 
 public abstract class CollectedHeap extends VMObject {
   private static long         reservedFieldOffset;
@@ -58,8 +61,8 @@
     return reservedRegion().start();
   }
 
-  public long capacity() { return 0; }
-  public long used()     { return 0; }
+  public abstract long capacity();
+  public abstract long used();
 
   public MemRegion reservedRegion() {
     return new MemRegion(addr.addOffsetTo(reservedFieldOffset));
@@ -75,6 +78,8 @@
 
   public abstract CollectedHeapName kind();
 
+  public abstract void liveRegionsIterate(LiveRegionsClosure closure);
+
   public String oopAddressDescription(OopHandle handle) {
       return handle.toString();
   }
@@ -83,10 +88,18 @@
       return handle.getOopHandleAt(offset);
   }
 
+  public OopHandle oop_load_in_native(Address addr) {
+      return addr.getOopHandleAt(0);
+  }
+
   public void print() { printOn(System.out); }
   public void printOn(PrintStream tty) {
     MemRegion mr = reservedRegion();
     tty.println("unknown subtype of CollectedHeap @ " + getAddress() + " (" +
                 mr.start() + "," + mr.end() + ")");
   }
+
+  public BitMapInterface createBitMap(long bits) {
+    return new BitMapSegmented(bits);
+  }
 }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/ContiguousSpace.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/ContiguousSpace.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -32,7 +32,7 @@
 import sun.jvm.hotspot.runtime.*;
 import sun.jvm.hotspot.types.*;
 
-public class ContiguousSpace extends CompactibleSpace {
+public class ContiguousSpace extends CompactibleSpace implements LiveRegionsProvider {
   private static AddressField topField;
 
   static {
@@ -79,8 +79,8 @@
   }
 
   /** Returns regions of Space where live objects live */
-  public List/*<MemRegion>*/ getLiveRegions() {
-    List res = new ArrayList();
+  public List<MemRegion> getLiveRegions() {
+    List<MemRegion> res = new ArrayList<>();
     res.add(new MemRegion(bottom(), top()));
     return res;
   }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -28,6 +28,7 @@
 import java.util.*;
 
 import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.gc.shared.*;
 import sun.jvm.hotspot.runtime.*;
 import sun.jvm.hotspot.types.*;
 import sun.jvm.hotspot.utilities.*;
@@ -134,6 +135,14 @@
     }
   }
 
+  public void liveRegionsIterate(LiveRegionsClosure closure) {
+    // Run through all generations, obtaining bottom-top pairs.
+    for (int i = 0; i < nGens(); i++) {
+      Generation gen = getGen(i);
+      gen.liveRegionsIterate(closure);
+    }
+  }
+
   public void printOn(PrintStream tty) {
     for (int i = 0; i < nGens(); i++) {
       tty.print("Gen " + i + ": ");
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/Generation.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/Generation.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -184,6 +184,7 @@
 
   /** Iteration - do not use for time critical operations */
   public abstract void spaceIterate(SpaceClosure blk, boolean usedOnly);
+  public abstract void liveRegionsIterate(LiveRegionsClosure closure);
 
   public void print() { printOn(System.out); }
   public abstract void printOn(PrintStream tty);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenerationFactory.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenerationFactory.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -65,6 +65,8 @@
                   }
                   public void spaceIterate(SpaceClosure blk, boolean usedOnly) {
                   }
+                  public void liveRegionsIterate(LiveRegionsClosure closure) {
+                  }
                   public void printOn(java.io.PrintStream tty) {
                       tty.println("unknown subtype of Generation @ " + getAddress() + " (" +
                                   virtualSpace().low() + "," + virtualSpace().high() + ")");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/LiveRegionsClosure.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.gc.shared;
+
+public interface LiveRegionsClosure {
+  public void doLiveRegions(LiveRegionsProvider lrp);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/LiveRegionsProvider.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.gc.shared;
+
+import java.util.List;
+
+import sun.jvm.hotspot.memory.MemRegion;
+
+public interface LiveRegionsProvider {
+  public List<MemRegion> getLiveRegions();
+}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/Space.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/Space.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, 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
@@ -89,9 +89,6 @@
     return handle.addOffsetToAsOopHandle(size);
   }
 
-  /** returns all MemRegions where live objects are */
-  public abstract List/*<MemRegion>*/ getLiveRegions();
-
   /** Returned value is in bytes */
   public long capacity() { return end().minus(bottom()); }
   /** Returned value is in bytes */
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -25,6 +25,7 @@
 
 import sun.jvm.hotspot.gc.shared.CollectedHeap;
 import sun.jvm.hotspot.gc.shared.CollectedHeapName;
+import sun.jvm.hotspot.gc.shared.LiveRegionsClosure;
 import sun.jvm.hotspot.debugger.Address;
 import sun.jvm.hotspot.runtime.VM;
 import sun.jvm.hotspot.types.Type;
@@ -64,6 +65,11 @@
     }
 
     @Override
+    public long capacity() {
+        return numOfRegions() * ShenandoahHeapRegion.regionSizeBytes();
+    }
+
+    @Override
     public long used() {
         return used.getValue(addr);
     }
@@ -73,6 +79,12 @@
     }
 
     @Override
+    public void liveRegionsIterate(LiveRegionsClosure closure) {
+        // Operation (currently) not supported with Shenandoah GC.
+        System.err.println("Warning: Operation not supported with Shenandoah GC");
+    }
+
+    @Override
     public void printOn(PrintStream tty) {
         MemRegion mr = reservedRegion();
         tty.print("Shenandoah heap");
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddress.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddress.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -61,7 +61,7 @@
             value |= ZGlobals.ZAddressSpaceStart;
         }
 
-        return ZOop.to_address(value);
+        return ZUtils.longToAddress(value);
     }
 
     static Address good(Address value) {
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddressRangeMapForPageTable.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddressRangeMapForPageTable.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -54,15 +54,38 @@
         return mapField.getValue(addr);
     }
 
+    public long size() {
+        return ZGlobals.ZAddressOffsetMax >> AddressRangeShift;
+    }
+
     private long index_for_addr(Address addr) {
         long index = ZAddress.offset(addr) >> AddressRangeShift;
 
         return index;
     }
 
+    Address at(long index) {
+        return map().getAddressAt(index * VM.getVM().getBytesPerLong());
+    }
+
     Address get(Address addr) {
         long index = index_for_addr(addr);
+        return at(index);
+    }
 
-        return map().getAddressAt(index * VM.getVM().getBytesPerLong());
+    public class Iterator {
+        private long next = 0;
+
+        boolean hasNext() {
+            return next < size();
+        }
+
+        Address next() {
+            if (next >= size()) {
+                throw new RuntimeException("OOIBE");
+            }
+
+            return at(next++);
+        }
     }
 }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZCollectedHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZCollectedHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,20 +25,22 @@
 package sun.jvm.hotspot.gc.z;
 
 import java.io.PrintStream;
+import java.util.Iterator;
 
 import sun.jvm.hotspot.debugger.Address;
 import sun.jvm.hotspot.debugger.OopHandle;
 import sun.jvm.hotspot.gc.shared.CollectedHeap;
 import sun.jvm.hotspot.gc.shared.CollectedHeapName;
+import sun.jvm.hotspot.gc.shared.LiveRegionsClosure;
 import sun.jvm.hotspot.runtime.VM;
 import sun.jvm.hotspot.runtime.VMObjectFactory;
 import sun.jvm.hotspot.types.Type;
 import sun.jvm.hotspot.types.TypeDataBase;
+import sun.jvm.hotspot.utilities.BitMapInterface;
 
 // Mirror class for ZCollectedHeap.
 
 public class ZCollectedHeap extends CollectedHeap {
-
     private static long zHeapFieldOffset;
 
     static {
@@ -70,11 +72,19 @@
         super(addr);
     }
 
-    public OopHandle oop_load_at(OopHandle handle, long offset) {
-        assert(!VM.getVM().isCompressedOopsEnabled());
+    @Override
+    public long capacity() {
+        return heap().capacity();
+    }
 
-        Address oopAddress = handle.getAddressAt(offset);
+    @Override
+    public long used() {
+        return heap().used();
+    }
 
+
+
+    private OopHandle oop_load_barrier(Address oopAddress) {
         oopAddress = ZBarrier.weak_barrier(oopAddress);
         if (oopAddress == null) {
             return null;
@@ -83,6 +93,23 @@
         return oopAddress.addOffsetToAsOopHandle(0);
     }
 
+    @Override
+    public OopHandle oop_load_at(OopHandle handle, long offset) {
+        assert(!VM.getVM().isCompressedOopsEnabled());
+
+        Address oopAddress = handle.getAddressAt(offset);
+
+        return oop_load_barrier(oopAddress);
+    }
+
+    // addr can be either in heap or in native
+    @Override
+    public OopHandle oop_load_in_native(Address addr) {
+        Address oopAddress = addr.getAddressAt(0);
+
+        return oop_load_barrier(oopAddress);
+    }
+
     public String oopAddressDescription(OopHandle handle) {
         Address origOop = ZOop.to_address(handle);
         Address loadBarrieredOop = ZBarrier.weak_barrier(origOop);
@@ -92,4 +119,19 @@
             return handle.toString();
         }
     }
+
+    @Override
+    public void liveRegionsIterate(LiveRegionsClosure closure) {
+        Iterator<ZPage> iter = heap().pageTable().activePagesIterator();
+        while (iter.hasNext()) {
+            ZPage page = iter.next();
+            closure.doLiveRegions(page);
+        }
+    }
+
+    @Override
+    public BitMapInterface createBitMap(long size) {
+        // Ignores the size
+        return new ZExternalBitMap(this);
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZExternalBitMap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.gc.z;
+
+import java.util.HashMap;
+
+import sun.jvm.hotspot.runtime.VM;
+import sun.jvm.hotspot.utilities.BitMap;
+import sun.jvm.hotspot.utilities.BitMapInterface;
+
+/** Discontiguous bitmap for ZGC. */
+public class ZExternalBitMap implements BitMapInterface {
+    private ZPageTable pageTable;
+    private final long oopSize;
+
+    private HashMap<ZPage, BitMap> pageToBitMap = new HashMap<ZPage, BitMap>();
+
+    public ZExternalBitMap(ZCollectedHeap collectedHeap) {
+        pageTable = collectedHeap.heap().pageTable();
+        oopSize = VM.getVM().getOopSize();
+    }
+
+    private ZPage getPage(long zOffset) {
+        if (zOffset > ZGlobals.ZAddressOffsetMask) {
+            throw new RuntimeException("Not a Z offset: " + zOffset);
+        }
+
+        ZPage page = pageTable.get(ZUtils.longToAddress(zOffset));
+        if (page == null) {
+            throw new RuntimeException("Address not in pageTable: " + zOffset);
+        }
+        return page;
+    }
+
+    private BitMap getOrAddBitMap(ZPage page) {
+        BitMap bitMap = pageToBitMap.get(page);
+        if (bitMap == null) {
+            long size = page.size();
+
+            long maxNumObjects = size >>> page.object_alignment_shift();
+            if (maxNumObjects > Integer.MAX_VALUE) {
+                throw new RuntimeException("int overflow");
+            }
+            int intMaxNumObjects = (int)maxNumObjects;
+
+            bitMap = new BitMap(intMaxNumObjects);
+            pageToBitMap.put(page,  bitMap);
+        }
+
+        return bitMap;
+    }
+
+    private int pageLocalBitMapIndex(ZPage page, long zOffset) {
+        long pageLocalZOffset = zOffset - page.start();
+        return (int)(pageLocalZOffset >>> page.object_alignment_shift());
+    }
+
+    private long convertToZOffset(long offset) {
+        long addr = ZGlobals.ZAddressSpaceStart + oopSize * offset;
+        return addr & ZGlobals.ZAddressOffsetMask;
+    }
+
+    @Override
+    public boolean at(long offset) {
+        long zOffset = convertToZOffset(offset);
+        ZPage page = getPage(zOffset);
+        BitMap bitMap = getOrAddBitMap(page);
+        int index = pageLocalBitMapIndex(page, zOffset);
+
+        return bitMap.at(index);
+    }
+
+    @Override
+    public void atPut(long offset, boolean value) {
+        long zOffset = convertToZOffset(offset);
+        ZPage page = getPage(zOffset);
+        BitMap bitMap = getOrAddBitMap(page);
+        int index = pageLocalBitMapIndex(page, zOffset);
+
+        bitMap.atPut(index, value);
+    }
+
+    @Override
+    public void clear() {
+        for (BitMap bitMap : pageToBitMap.values()) {
+            bitMap.clear();
+        }
+    }
+}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZGlobals.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZGlobals.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -54,6 +54,7 @@
     // Pointer part of address
     public static long ZAddressOffsetBits;
     public static long ZAddressOffsetMask;
+    public static long ZAddressOffsetMax;
 
     // Address space start/end/size
     public static long ZAddressSpaceStart;
@@ -84,6 +85,7 @@
 
         ZAddressOffsetBits = db.lookupLongConstant("ZAddressOffsetBits").longValue();
         ZAddressOffsetMask = db.lookupLongConstant("ZAddressOffsetMask").longValue();
+        ZAddressOffsetMax  = db.lookupLongConstant("ZAddressOffsetMax").longValue();
 
         ZAddressSpaceStart = db.lookupLongConstant("ZAddressSpaceStart").longValue();
     }
@@ -96,6 +98,10 @@
         return instance().ZGlobalPhase();
     }
 
+    public static int ZGlobalSeqNum() {
+        return instance().ZGlobalSeqNum();
+    }
+
     public static long ZAddressGoodMask() {
         return instance().ZAddressGoodMask();
     }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZGlobalsForVMStructs.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZGlobalsForVMStructs.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -33,6 +33,7 @@
 
 class ZGlobalsForVMStructs extends VMObject {
     private static AddressField ZGlobalPhaseField;
+    private static AddressField ZGlobalSeqNumField;
     private static AddressField ZAddressGoodMaskField;
     private static AddressField ZAddressBadMaskField;
     private static AddressField ZAddressWeakBadMaskField;
@@ -47,6 +48,7 @@
         Type type = db.lookupType("ZGlobalsForVMStructs");
 
         ZGlobalPhaseField = type.getAddressField("_ZGlobalPhase");
+        ZGlobalSeqNumField = type.getAddressField("_ZGlobalSeqNum");
         ZAddressGoodMaskField = type.getAddressField("_ZAddressGoodMask");
         ZAddressBadMaskField = type.getAddressField("_ZAddressBadMask");
         ZAddressWeakBadMaskField = type.getAddressField("_ZAddressWeakBadMask");
@@ -62,6 +64,10 @@
         return ZGlobalPhaseField.getValue(addr).getJIntAt(0);
     }
 
+    int ZGlobalSeqNum() {
+        return ZGlobalSeqNumField.getValue(addr).getJIntAt(0);
+    }
+
     long ZAddressGoodMask() {
         return ZAddressGoodMaskField.getValue(addr).getJLongAt(0);
     }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZOop.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZOop.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,23 +26,9 @@
 
 import sun.jvm.hotspot.debugger.Address;
 import sun.jvm.hotspot.debugger.OopHandle;
-import sun.jvm.hotspot.runtime.VM;
 
 class ZOop {
-    private static final long MSB = ~0L ^ (~0L >>> 1);
-
-    private static Address msbAddress() {
-        return VM.getVM().getUniverse().heap().start().orWithMask(MSB).andWithMask(MSB);
-    }
-
-    static Address to_address(long value) {
-        // If the value of an Address becomes 0, null is returned instead of an Address.
-        // Start with a one-bit address and as a last step, remove that bit.
-        Address oneAddress = msbAddress();
-        return oneAddress.orWithMask(value).xorWithMask(ZAddress.as_long(oneAddress));
-    }
-
     static Address to_address(OopHandle oop) {
-        return to_address(ZAddress.as_long(oop));
+        return ZUtils.longToAddress(ZAddress.as_long(oop));
     }
 }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPage.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPage.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,17 +24,29 @@
 
 package sun.jvm.hotspot.gc.z;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import sun.jvm.hotspot.debugger.Address;
+import sun.jvm.hotspot.debugger.OopHandle;
+import sun.jvm.hotspot.gc.shared.LiveRegionsProvider;
+import sun.jvm.hotspot.memory.MemRegion;
+import sun.jvm.hotspot.oops.Oop;
+import sun.jvm.hotspot.oops.UnknownOopException;
 import sun.jvm.hotspot.runtime.VM;
 import sun.jvm.hotspot.runtime.VMObject;
 import sun.jvm.hotspot.runtime.VMObjectFactory;
+import sun.jvm.hotspot.types.AddressField;
 import sun.jvm.hotspot.types.CIntegerField;
 import sun.jvm.hotspot.types.Type;
 import sun.jvm.hotspot.types.TypeDataBase;
 
-public class ZPage extends VMObject {
+public class ZPage extends VMObject implements LiveRegionsProvider {
     private static CIntegerField typeField;
+    private static CIntegerField seqnumField;
     private static long virtualFieldOffset;
+    private static AddressField topField;
+    private static CIntegerField refcountField;
     private static long forwardingFieldOffset;
 
     static {
@@ -45,7 +57,10 @@
         Type type = db.lookupType("ZPage");
 
         typeField = type.getCIntegerField("_type");
+        seqnumField = type.getCIntegerField("_seqnum");
         virtualFieldOffset = type.getField("_virtual").getOffset();
+        topField = type.getAddressField("_top");
+        refcountField = type.getCIntegerField("_refcount");
         forwardingFieldOffset = type.getField("_forwarding").getOffset();
     }
 
@@ -57,18 +72,50 @@
         return typeField.getJByte(addr);
     }
 
+    private int seqnum() {
+        return seqnumField.getJInt(addr);
+    }
+
     private ZVirtualMemory virtual() {
-        return (ZVirtualMemory)VMObjectFactory.newObject(ZVirtualMemory.class, addr.addOffsetTo(virtualFieldOffset));
+        return VMObjectFactory.newObject(ZVirtualMemory.class, addr.addOffsetTo(virtualFieldOffset));
+    }
+
+    private Address top() {
+        return topField.getValue(addr);
+    }
+
+    private int refcount() {
+        // refcount is uint32_t so need to be cautious when using this field.
+        return refcountField.getJInt(addr);
     }
 
     private ZForwardingTable forwarding() {
-        return (ZForwardingTable)VMObjectFactory.newObject(ZForwardingTable.class, addr.addOffsetTo(forwardingFieldOffset));
+        return VMObjectFactory.newObject(ZForwardingTable.class, addr.addOffsetTo(forwardingFieldOffset));
+    }
+
+    private boolean is_forwarding() {
+        return forwarding().table() != null;
+    }
+
+    private boolean is_relocatable() {
+        return is_active() && seqnum() < ZGlobals.ZGlobalSeqNum();
     }
 
-    private long start() {
+    private boolean isPageRelocating() {
+        assert(is_active());
+        // is_forwarding():  Has a (relocation) forwarding table
+        // is_relocatable(): Has not been freed yet
+        return is_forwarding() && is_relocatable();
+    }
+
+    long start() {
         return virtual().start();
     }
 
+    long size() {
+        return virtual().end() - virtual().start();
+    }
+
     Address forward_object(Address from) {
         // Lookup address in forwarding table
         long from_offset = ZAddress.offset(from);
@@ -94,7 +141,6 @@
         return ZAddress.good(from);
     }
 
-
     long object_alignment_shift() {
         if (type() == ZGlobals.ZPageTypeSmall) {
             return ZGlobals.ZObjectAlignmentSmallShift();
@@ -105,4 +151,94 @@
             return ZGlobals.ZObjectAlignmentLargeShift;
         }
     }
+
+    long objectAlignmentSize() {
+        return 1 << object_alignment_shift();
+    }
+
+    public boolean is_active() {
+        return refcount() != 0;
+    }
+
+    private long getObjectSize(Address good) {
+        OopHandle handle = good.addOffsetToAsOopHandle(0);
+        Oop obj = null;
+
+        try {
+           obj = VM.getVM().getObjectHeap().newOop(handle);
+        } catch (UnknownOopException exp) {
+          throw new RuntimeException(" UnknownOopException  " + exp);
+        }
+
+        return VM.getVM().alignUp(obj.getObjectSize(), objectAlignmentSize());
+    }
+
+    private void addNotRelocatedRegions(List<MemRegion> regions) {
+        MemRegion mr = null;
+
+        // Some objects have already been forwarded to new locations.
+        long topValue = top().asLongValue();
+        for (long offsetValue = start(); offsetValue < topValue;) {
+            Address from = ZAddress.good(ZUtils.longToAddress(offsetValue));
+
+            Address to = relocate_object(from);
+
+            long byteSize;
+            try {
+                byteSize = getObjectSize(to);
+            } catch (Exception e) {
+                // Parsing the ZHeap is inherently unsafe
+                // when classes have been unloaded. Dead objects
+                // might have stale Klass pointers, and there's
+                // no way to get the size of the dead object.
+                //
+                // If possible, run with -XX:-ClassUnloading
+                // to ensure that all Klasses are kept alive.
+                System.err.println("Unparsable regions found. Skipping: "
+                        + from
+                        + " "
+                        + from.addOffsetTo(topValue - offsetValue));
+
+                // Can't proceed further. Just return the collected regions.
+                return;
+            }
+
+            if (from.equals(to)) {
+                // Not relocated - add region
+                if (mr == null) {
+                    mr = new MemRegion(from, 0 /* wordSize */);
+                    regions.add(mr);
+                }
+
+                long wordSize = byteSize / VM.getVM().getBytesPerWord();
+                mr.setWordSize(mr.wordSize() + wordSize);
+            } else {
+                // Forwarded somewhere else, split region.
+                mr = null;
+            }
+
+            offsetValue += byteSize;
+        }
+    }
+
+    public List<MemRegion> getLiveRegions() {
+        List<MemRegion> res = new ArrayList<>();
+
+        if (isPageRelocating()) {
+            addNotRelocatedRegions(res);
+        } else {
+            Address start = ZAddress.good(ZUtils.longToAddress(start()));
+
+            // Can't convert top() to a "good" address because it might
+            // be at the top of the "offset" range, and therefore also
+            // looks like one of the color bits. Instead use the "good"
+            // address and add the size.
+            long size = top().asLongValue() - start();
+            Address end = start.addOffsetTo(size);
+
+            res.add(new MemRegion(start, end));
+        }
+
+        return res;
+    }
 }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageAllocator.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageAllocator.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -37,7 +37,7 @@
 
 public class ZPageAllocator extends VMObject {
 
-    private static AddressField physicalField;
+    private static long physicalFieldOffset;
     private static CIntegerField usedField;
 
     static {
@@ -47,12 +47,12 @@
     static private synchronized void initialize(TypeDataBase db) {
         Type type = db.lookupType("ZPageAllocator");
 
-        physicalField = type.getAddressField("_physical");
+        physicalFieldOffset = type.getAddressField("_physical").getOffset();
         usedField = type.getCIntegerField("_used");
     }
 
     private ZPhysicalMemoryManager physical() {
-      Address physicalAddr = physicalField.getValue(addr);
+      Address physicalAddr = addr.addOffsetTo(physicalFieldOffset);
       return (ZPhysicalMemoryManager)VMObjectFactory.newObject(ZPhysicalMemoryManager.class, physicalAddr);
     }
 
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageTable.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageTable.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,6 +24,8 @@
 
 package sun.jvm.hotspot.gc.z;
 
+import java.util.Iterator;
+
 import sun.jvm.hotspot.debugger.Address;
 import sun.jvm.hotspot.runtime.VM;
 import sun.jvm.hotspot.runtime.VMObject;
@@ -63,4 +65,112 @@
     boolean is_relocating(Address o) {
         return getEntry(o).relocating();
     }
+
+    private class ZPagesIterator implements Iterator<ZPage> {
+        private ZAddressRangeMapForPageTable.Iterator mapIter;
+        private ZPage next;
+
+        ZPagesIterator() {
+            mapIter = map().new Iterator();
+            positionToNext();
+        }
+
+        private ZPage positionToNext() {
+            ZPage current = next;
+
+            // Find next
+            ZPage found = null;
+            while (mapIter.hasNext()) {
+                ZPageTableEntry entry = new ZPageTableEntry(mapIter.next());
+                if (!entry.isEmpty()) {
+                    ZPage page = entry.page();
+                    // Medium pages have repeated entries for all covered slots,
+                    // therefore we need to compare against the current page.
+                    if (page != null && !page.equals(current)) {
+                        found = page;
+                        break;
+                    }
+                }
+            }
+
+            next = found;
+
+            return current;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return next != null;
+        }
+
+        @Override
+        public ZPage next() {
+            return positionToNext();
+        }
+
+        @Override
+        public void remove() {
+            /* not supported */
+        }
+    }
+
+    abstract class ZPageFilter {
+        public abstract boolean accept(ZPage page);
+    }
+
+    class ZPagesFilteredIterator implements Iterator<ZPage> {
+        private ZPage next;
+        private ZPagesIterator iter = new ZPagesIterator();
+        private ZPageFilter filter;
+
+        ZPagesFilteredIterator(ZPageFilter filter) {
+            this.filter = filter;
+            positionToNext();
+        }
+
+        public ZPage positionToNext() {
+            ZPage current = next;
+
+            // Find next
+            ZPage found = null;
+            while (iter.hasNext()) {
+                ZPage page = iter.next();
+                if (filter.accept(page)) {
+                    found = page;
+                    break;
+                }
+            }
+
+            next = found;
+
+            return current;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return next != null;
+        }
+
+        @Override
+        public ZPage next() {
+            return positionToNext();
+        }
+
+        @Override
+        public void remove() {
+            /* not supported */
+        }
+    }
+
+    public Iterator<ZPage> iterator() {
+        return new ZPagesIterator();
+    }
+
+    public Iterator<ZPage> activePagesIterator() {
+        return new ZPagesFilteredIterator(new ZPageFilter() {
+            public boolean accept(ZPage page) {
+                return page.is_active();
+            }
+        });
+    }
 }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageTableEntry.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageTableEntry.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -35,10 +35,18 @@
     }
 
     ZPage page() {
-        return (ZPage)VMObjectFactory.newObject(ZPage.class, entry.andWithMask(~1L));
+        return (ZPage)VMObjectFactory.newObject(ZPage.class, zPageBits());
+    }
+
+    private Address zPageBits() {
+        return entry.andWithMask(~1L);
     }
 
     boolean relocating() {
         return (entry.asLongValue() & 1) == 1;
     }
+
+    boolean isEmpty() {
+        return entry == null || zPageBits() == null;
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZUtils.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.gc.z;
+
+import sun.jvm.hotspot.debugger.Address;
+import sun.jvm.hotspot.runtime.VM;
+
+class ZUtils {
+    private static final long MSB = ~0L ^ (~0L >>> 1);
+
+    private static Address msbAddress() {
+        return VM.getVM().getUniverse().heap().start().orWithMask(MSB).andWithMask(MSB);
+    }
+
+    static Address longToAddress(long value) {
+        // If the value of an Address becomes 0, null is returned instead of an Address.
+        // Start with a one-bit address and as a last step, remove that bit.
+        Address oneAddress = msbAddress();
+        return oneAddress.orWithMask(value).xorWithMask(ZAddress.as_long(oneAddress));
+    }
+}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Klass.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Klass.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -51,7 +51,7 @@
 
   private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
     Type type    = db.lookupType("Klass");
-    javaMirror   = type.getAddressField("_java_mirror");
+    javaMirrorFieldOffset = type.getField("_java_mirror").getOffset();
     superField   = new MetadataField(type.getAddressField("_super"), 0);
     layoutHelper = new IntField(type.getJIntField("_layout_helper"), 0);
     name         = type.getAddressField("_name");
@@ -89,7 +89,7 @@
   public boolean isArrayKlass()        { return false; }
 
   // Fields
-  private static AddressField   javaMirror;
+  private static long javaMirrorFieldOffset;
   private static MetadataField  superField;
   private static IntField layoutHelper;
   private static AddressField  name;
@@ -101,23 +101,15 @@
   private static CIntField vtableLen;
   private static AddressField classLoaderData;
 
-  private Address getValue(AddressField field) {
-    return addr.getAddressAt(field.getOffset());
-  }
-
   protected Symbol getSymbol(AddressField field) {
     return Symbol.create(addr.getAddressAt(field.getOffset()));
   }
 
   // Accessors for declared fields
   public Instance getJavaMirror() {
-    Address handle = javaMirror.getValue(getAddress());
-    if (handle != null) {
-      // Load through the handle
-      OopHandle refs = handle.getOopHandleAt(0);
-      return (Instance)VM.getVM().getObjectHeap().newOop(refs);
-    }
-    return null;
+    Address addr = getAddress().addOffsetTo(javaMirrorFieldOffset);
+    VMOopHandle vmOopHandle = VMObjectFactory.newObject(VMOopHandle.class, addr);
+    return vmOopHandle.resolve();
   }
   public Klass    getSuper()            { return (Klass)    superField.getValue(this);   }
   public Klass    getJavaSuper()        { return null;  }
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -304,87 +304,48 @@
     visitor.epilogue();
   }
 
-  private void addLiveRegions(String name, List input, List output) {
-     for (Iterator itr = input.iterator(); itr.hasNext();) {
-        MemRegion reg = (MemRegion) itr.next();
+  private static class LiveRegionsCollector implements LiveRegionsClosure {
+    LiveRegionsCollector(List<Address> l) {
+      liveRegions = l;
+    }
+
+    @Override
+    public void doLiveRegions(LiveRegionsProvider lrp) {
+      for (MemRegion reg : lrp.getLiveRegions()) {
         Address top = reg.end();
         Address bottom = reg.start();
         if (Assert.ASSERTS_ENABLED) {
-           Assert.that(top != null, "top address in a live region should not be null");
+          Assert.that(top != null, "top address in a live region should not be null");
         }
         if (Assert.ASSERTS_ENABLED) {
-           Assert.that(bottom != null, "bottom address in a live region should not be null");
+          Assert.that(bottom != null, "bottom address in a live region should not be null");
         }
-        output.add(top);
-        output.add(bottom);
+        liveRegions.add(top);
+        liveRegions.add(bottom);
         if (DEBUG) {
-          System.err.println("Live region: " + name + ": " + bottom + ", " + top);
-        }
-     }
+          System.err.println("Live region: " + lrp + ": " + bottom + ", " + top);
+      }
+    }
   }
 
-  private class LiveRegionsCollector implements SpaceClosure {
-     LiveRegionsCollector(List l) {
-        liveRegions = l;
-     }
-
-     public void doSpace(Space s) {
-        addLiveRegions(s.toString(), s.getLiveRegions(), liveRegions);
-     }
-     private List liveRegions;
+     private List<Address> liveRegions;
   }
 
   // Returns a List<Address> where the addresses come in pairs. These
   // designate the live regions of the heap.
-  private List collectLiveRegions() {
+  private List<Address> collectLiveRegions() {
     // We want to iterate through all live portions of the heap, but
     // do not want to abort the heap traversal prematurely if we find
     // a problem (like an allocated but uninitialized object at the
     // top of a generation). To do this we enumerate all generations'
     // bottom and top regions, and factor in TLABs if necessary.
 
-    // List<Address>. Addresses come in pairs.
-    List liveRegions = new ArrayList();
+    // Addresses come in pairs.
+    List<Address> liveRegions = new ArrayList<>();
     LiveRegionsCollector lrc = new LiveRegionsCollector(liveRegions);
 
     CollectedHeap heap = VM.getVM().getUniverse().heap();
-
-    if (heap instanceof GenCollectedHeap) {
-       GenCollectedHeap genHeap = (GenCollectedHeap) heap;
-       // Run through all generations, obtaining bottom-top pairs.
-       for (int i = 0; i < genHeap.nGens(); i++) {
-         Generation gen = genHeap.getGen(i);
-         gen.spaceIterate(lrc, true);
-       }
-    } else if (heap instanceof ParallelScavengeHeap) {
-       ParallelScavengeHeap psh = (ParallelScavengeHeap) heap;
-       PSYoungGen youngGen = psh.youngGen();
-       // Add eden space
-       addLiveRegions("eden", youngGen.edenSpace().getLiveRegions(), liveRegions);
-       // Add from-space but not to-space
-       addLiveRegions("from", youngGen.fromSpace().getLiveRegions(), liveRegions);
-       PSOldGen oldGen = psh.oldGen();
-       addLiveRegions("old ", oldGen.objectSpace().getLiveRegions(), liveRegions);
-    } else if (heap instanceof G1CollectedHeap) {
-        G1CollectedHeap g1h = (G1CollectedHeap) heap;
-        g1h.heapRegionIterate(lrc);
-    } else if (heap instanceof ShenandoahHeap) {
-       // Operation (currently) not supported with Shenandoah GC. Print
-       // a warning and leave the list of live regions empty.
-       System.err.println("Warning: Operation not supported with Shenandoah GC");
-    } else if (heap instanceof ZCollectedHeap) {
-       // Operation (currently) not supported with ZGC. Print
-       // a warning and leave the list of live regions empty.
-       System.err.println("Warning: Operation not supported with ZGC");
-    } else if (heap instanceof EpsilonHeap) {
-       EpsilonHeap eh = (EpsilonHeap) heap;
-       liveRegions.add(eh.space().top());
-       liveRegions.add(eh.space().bottom());
-    } else {
-       if (Assert.ASSERTS_ENABLED) {
-          Assert.that(false, "Unexpected CollectedHeap type: " + heap.getClass().getName());
-       }
-    }
+    heap.liveRegionsIterate(lrc);
 
     // If UseTLAB is enabled, snip out regions associated with TLABs'
     // dead regions. Note that TLABs can be present in any generation.
@@ -440,11 +401,9 @@
     return liveRegions;
   }
 
-  private void sortLiveRegions(List liveRegions) {
-    Collections.sort(liveRegions, new Comparator() {
-        public int compare(Object o1, Object o2) {
-          Address a1 = (Address) o1;
-          Address a2 = (Address) o2;
+  private void sortLiveRegions(List<Address> liveRegions) {
+    Collections.sort(liveRegions, new Comparator<Address>() {
+        public int compare(Address a1, Address a2) {
           if (AddressOps.lt(a1, a2)) {
             return -1;
           } else if (AddressOps.gt(a1, a2)) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/VMOopHandle.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.oops;
+
+import sun.jvm.hotspot.debugger.Address;
+import sun.jvm.hotspot.debugger.OopHandle;
+import sun.jvm.hotspot.runtime.VM;
+import sun.jvm.hotspot.runtime.VMObject;
+import sun.jvm.hotspot.types.AddressField;
+import sun.jvm.hotspot.types.Type;
+import sun.jvm.hotspot.types.TypeDataBase;
+
+public class VMOopHandle extends VMObject {
+    private static AddressField objField;
+
+    static {
+        VM.registerVMInitializedObserver((o, d) -> initialize(VM.getVM().getTypeDataBase()));
+    }
+
+    private static synchronized void initialize(TypeDataBase db) {
+        Type type = db.lookupType("OopHandle");
+
+        objField = type.getAddressField("_obj");
+    }
+
+    public VMOopHandle(Address addr) {
+        super(addr);
+    }
+
+    public Address getObj() {
+        return objField.getValue(addr);
+    }
+
+    public Instance resolve() {
+        Address handle = getObj();
+        if (handle != null) {
+          // Load through the handle
+          OopHandle refs = VM.getVM().getUniverse().heap().oop_load_in_native(handle);
+          return (Instance)VM.getVM().getObjectHeap().newOop(refs);
+        }
+        return null;
+    }
+}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMObjectFactory.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMObjectFactory.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,14 +45,14 @@
 */
 
 public class VMObjectFactory {
-  public static Object newObject(Class clazz, Address addr)
+  public static <T> T newObject(Class<T> clazz, Address addr)
     throws ConstructionException {
     try {
       if (addr == null) {
         return null;
       }
 
-      Constructor c = clazz.getConstructor(new Class[] {
+      Constructor<T> c = clazz.getConstructor(new Class[] {
         Address.class
       });
       return c.newInstance(new Object[] { addr });
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/BitMapInterface.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.utilities;
+
+/** Minimal bitmap interface to support bitmaps spanning more than Integer.MAX_VALUE bits. */
+public interface BitMapInterface {
+  public boolean at(long offset);
+  public void atPut(long offset, boolean value);
+  public void clear();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/BitMapSegmented.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.utilities;
+
+/** A BitMap implementing the BitMapInterface. */
+public class BitMapSegmented implements BitMapInterface {
+  private static final int SegmentSizeBits = 30;
+  private static final int SegmentSize = 1 << (SegmentSizeBits - 1);
+
+  public BitMapSegmented(long sizeInBits) {
+    this.size = sizeInBits;
+
+    if (sizeInBits == 0) {
+      segmentBitMaps = new BitMap[0];
+      return;
+    }
+
+    int lastSegmentSize = (int)(sizeInBits % SegmentSize);
+
+    int segments = segmentIndex(sizeInBits - 1) + 1;
+    int completeSegments = segments - ((lastSegmentSize != 0) ? 1 : 0);
+
+    segmentBitMaps = new BitMap[segments];
+
+    for (int i = 0; i < completeSegments; i++) {
+      segmentBitMaps[i] = new BitMap(SegmentSize);
+    }
+
+    if (lastSegmentSize != 0) {
+      segmentBitMaps[completeSegments] = new BitMap(lastSegmentSize);
+    }
+  }
+
+  public long size() {
+    return size;
+  }
+
+  // Accessors
+  public boolean at(long offset) {
+    assert offset < size;
+
+    int segmentIndex = segmentIndex(offset);
+    int segmentOffset = segmentOffset(offset);
+    return segmentBitMaps[segmentIndex].at(segmentOffset);
+  }
+
+  public void atPut(long offset, boolean value) {
+    assert offset < size;
+
+    int segmentIndex = segmentIndex(offset);
+    int segmentOffset = segmentOffset(offset);
+    segmentBitMaps[segmentIndex].atPut(segmentOffset, value);
+  }
+
+  public void clear() {
+    for (BitMap map : segmentBitMaps) {
+      map.clear();
+    }
+  }
+
+  //----------------------------------------------------------------------
+  // Internals only below this point
+  //
+  private final long     size; // in bits
+  private final BitMap[] segmentBitMaps;
+
+  private int segmentIndex(long offset) {
+    long longIndex = offset / SegmentSize;
+
+    assert longIndex < Integer.MAX_VALUE;
+    return (int)longIndex;
+  }
+
+  private int segmentOffset(long offset) {
+    return (int)(offset % SegmentSize);
+  }
+}
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -390,9 +390,6 @@
 
     public synchronized void write(String fileName) throws IOException {
         VM vm = VM.getVM();
-        if (vm.getUniverse().heap() instanceof ZCollectedHeap) {
-            throw new RuntimeException("This operation is not supported with ZGC.");
-        }
 
         // open file stream and create buffered data output stream
         fos = new FileOutputStream(fileName);
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/MarkBits.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/MarkBits.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, 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
@@ -41,8 +41,7 @@
     start = reserved.start();
     end   = reserved.end();
     long numOopHandles = end.minus(start) / VM.getVM().getOopSize();
-    // FIXME: will have trouble with larger heap sizes
-    bits = new BitMap((int) numOopHandles);
+    bits = heap.createBitMap(numOopHandles);
   }
 
   public void clear() {
@@ -60,34 +59,22 @@
     }
 
     OopHandle handle = obj.getHandle();
-    // FIXME: will have trouble with larger heap sizes
     long idx = handle.minus(start) / VM.getVM().getOopSize();
-    if ((idx < 0) || (idx >= bits.size())) {
-      System.err.println("MarkBits: WARNING: object " + handle + " outside of heap, ignoring");
-      return false;
-    }
-    int intIdx = (int) idx;
-    if (bits.at(intIdx)) {
+    if (bits.at(idx)) {
       return false; // already marked
     }
-    bits.atPut(intIdx, true);
+    bits.atPut(idx, true);
     return true;
   }
 
   /** Forces clearing of a given mark bit. */
   public void clear(Oop obj) {
     OopHandle handle = obj.getHandle();
-    // FIXME: will have trouble with larger heap sizes
     long idx = handle.minus(start) / VM.getVM().getOopSize();
-    if ((idx < 0) || (idx >= bits.size())) {
-      System.err.println("MarkBits: WARNING: object " + handle + " outside of heap, ignoring");
-      return;
-    }
-    int intIdx = (int) idx;
-    bits.atPut(intIdx, false);
+    bits.atPut(idx, false);
   }
 
-  private BitMap  bits;
+  private BitMapInterface bits;
   private Address start;
   private Address end;
 }
--- a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/AbstractWindowsTerminal.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/AbstractWindowsTerminal.java	Fri Feb 22 20:36:42 2019 +0000
@@ -86,8 +86,8 @@
         super(name, type, selectCharset(encoding, codepage), signalHandler);
         NonBlockingPumpReader reader = NonBlocking.nonBlockingPumpReader();
         this.slaveInputPipe = reader.getWriter();
-        this.reader = reader;
         this.input = inputStreamWrapper.apply(NonBlocking.nonBlockingStream(reader, encoding()));
+        this.reader = NonBlocking.nonBlocking(name, input, encoding());
         this.writer = new PrintWriter(writer);
         this.output = new WriterOutputStream(writer, encoding());
         parseInfoCmp();
--- a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/utils/NonBlocking.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/utils/NonBlocking.java	Fri Feb 22 20:36:42 2019 +0000
@@ -123,9 +123,9 @@
             }
             if (bytes.hasRemaining()) {
                 if (isPeek) {
-                    return bytes.get(bytes.position());
+                    return Byte.toUnsignedInt(bytes.get(bytes.position()));
                 } else {
-                    return bytes.get();
+                    return Byte.toUnsignedInt(bytes.get());
                 }
             } else {
                 return READ_EXPIRED;
--- a/src/jdk.internal.le/windows/native/lible/Kernel32.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.internal.le/windows/native/lible/Kernel32.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -460,7 +460,7 @@
     HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));
     INPUT_RECORD *buffer = new INPUT_RECORD[in_nLength];
     DWORD numberOfEventsRead;
-    if (!ReadConsoleInput(h, buffer, in_nLength, &numberOfEventsRead)) {
+    if (!ReadConsoleInputW(h, buffer, in_nLength, &numberOfEventsRead)) {
         delete buffer;
         DWORD error = GetLastError();
         jobject exc = env->NewObject(lastErrorExceptionClass,
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotatedType.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents an annotated type.
- * For example:
- * <pre>
- *      {@code @NonNull String}
- *      {@code @Positive int}
- * </pre>
- *
- * @author Mahmood Ali
- * @since 1.8
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface AnnotatedType extends Type {
-
-    /**
-     * Returns the annotations associated with this type.
-     * @return the annotations associated with this type
-     */
-    AnnotationDesc[] annotations();
-
-    /**
-     * Returns the underlying type.
-     * @return the underlying type
-     */
-    Type underlyingType();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationDesc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents an annotation.
- * An annotation associates a value with each element of an annotation type.
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface AnnotationDesc {
-
-    /**
-     * Returns the annotation type of this annotation.
-     *
-     * @return the annotation type of this annotation.
-     */
-    AnnotationTypeDoc annotationType();
-
-    /**
-     * Returns this annotation's elements and their values.
-     * Only those explicitly present in the annotation are
-     * included, not those assuming their default values.
-     * Returns an empty array if there are none.
-     *
-     * @return this annotation's elements and their values.
-     */
-    ElementValuePair[] elementValues();
-
-    /**
-     * Check for the synthesized bit on the annotation.
-     *
-     * @return true if the annotation is synthesized.
-     */
-    boolean isSynthesized();
-
-    /**
-     * Represents an association between an annotation type element
-     * and one of its values.
-     *
-     * @author Scott Seligman
-     * @since 1.5
-     *
-     * @deprecated
-     *   The declarations in this package have been superseded by those
-     *   in the package {@code jdk.javadoc.doclet}.
-     *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
-     */
-    @Deprecated(since="9", forRemoval=true)
-    public interface ElementValuePair {
-
-        /**
-         * Returns the annotation type element.
-         *
-         * @return the annotation type element.
-         */
-        AnnotationTypeElementDoc element();
-
-        /**
-         * Returns the value associated with the annotation type element.
-         *
-         * @return the value associated with the annotation type element.
-         */
-        AnnotationValue value();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationTypeDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents an annotation type.
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface AnnotationTypeDoc extends ClassDoc {
-
-    /**
-     * Returns the elements of this annotation type.
-     * Returns an empty array if there are none.
-     *
-     * @return the elements of this annotation type.
-     */
-    AnnotationTypeElementDoc[] elements();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationTypeElementDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents an element of an annotation type.
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface AnnotationTypeElementDoc extends MethodDoc {
-
-    /**
-     * Returns the default value of this element.
-     * Returns null if this element has no default.
-     *
-     * @return the default value of this element.
-     */
-    AnnotationValue defaultValue();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/AnnotationValue.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents a value of an annotation type element.
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface AnnotationValue {
-
-    /**
-     * Returns the value.
-     * The type of the returned object is one of the following:
-     * <ul><li> a wrapper class for a primitive type
-     *     <li> {@code String}
-     *     <li> {@code Type} (representing a class literal)
-     *     <li> {@code FieldDoc} (representing an enum constant)
-     *     <li> {@code AnnotationDesc}
-     *     <li> {@code AnnotationValue[]}
-     * </ul>
-     *
-     * @return the value.
-     */
-    Object value();
-
-    /**
-     * Returns a string representation of the value.
-     *
-     * @return the text of a Java language annotation value expression
-     *          whose value is the value of this element.
-     */
-    String toString();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ClassDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,362 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents a java class or interface and provides access to
- * information about the class, the class's comment and tags, and the
- * members of the class.  A ClassDoc only exists if it was
- * processed in this run of javadoc.  References to classes
- * which may or may not have been processed in this run are
- * referred to using Type (which can be converted to ClassDoc,
- * if possible).
- *
- * @see Type
- *
- * @since 1.2
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ClassDoc extends ProgramElementDoc, Type {
-
-    /**
-     * Return true if this class is abstract.  Return true
-     * for all interfaces.
-     *
-     * @return true if this class is abstract.  Return true
-     *         for all interfaces.
-     */
-    boolean isAbstract();
-
-    /**
-     * Return true if this class implements or interface extends
-     * {@code java.io.Serializable}.
-     *
-     * Since {@code java.io.Externalizable} extends
-     * {@code java.io.Serializable},
-     * Externalizable objects are also Serializable.
-     *
-     * @return true if this class implements or interface extends
-     *         {@code java.io.Serializable}.
-     */
-    boolean isSerializable();
-
-    /**
-     * Return true if this class implements or interface extends
-     * {@code java.io.Externalizable}.
-     *
-     * @return true if this class implements or interface extends
-     *         {@code java.io.Externalizable}.
-     */
-    boolean isExternalizable();
-
-    /**
-     * Return the serialization methods for this class or
-     * interface.
-     *
-     * @return an array of MethodDoc objects that represents
-     *         the serialization methods for this class or interface.
-     */
-    MethodDoc[] serializationMethods();
-
-    /**
-     * Return the Serializable fields of this class or interface.
-     * <p>
-     * Return either a list of default fields documented by
-     * {@code serial} tag<br>
-     * or return a single {@code FieldDoc} for
-     * {@code serialPersistentField} member.
-     * There should be a {@code serialField} tag for
-     * each Serializable field defined by an {@code ObjectStreamField}
-     * array component of {@code serialPersistentField}.
-     *
-     * @return an array of {@code FieldDoc} objects for the Serializable
-     *         fields of this class or interface.
-     *
-     * @see #definesSerializableFields()
-     * @see SerialFieldTag
-     */
-    FieldDoc[] serializableFields();
-
-    /**
-     *  Return true if Serializable fields are explicitly defined with
-     *  the special class member {@code serialPersistentFields}.
-     *
-     * @return true if Serializable fields are explicitly defined with
-     *         the special class member {@code serialPersistentFields}.
-     *
-     * @see #serializableFields()
-     * @see SerialFieldTag
-     */
-    boolean definesSerializableFields();
-
-    /**
-     * Return the superclass of this class.  Return null if this is an
-     * interface.
-     *
-     * <p> <i>This method cannot accommodate certain generic type constructs.
-     * The {@code superclassType} method should be used instead.</i>
-     *
-     * @return the ClassDoc for the superclass of this class, null if
-     *         there is no superclass.
-     * @see #superclassType
-     */
-    ClassDoc superclass();
-
-    /**
-     * Return the superclass of this class.  Return null if this is an
-     * interface.  A superclass is represented by either a
-     * {@code ClassDoc} or a {@code ParametrizedType}.
-     *
-     * @return the superclass of this class, or null if there is no superclass.
-     * @since 1.5
-     */
-    Type superclassType();
-
-    /**
-     * Test whether this class is a subclass of the specified class.
-     * If this is an interface, return false for all classes except
-     * {@code java.lang.Object} (we must keep this unexpected
-     * behavior for compatibility reasons).
-     *
-     * @param cd the candidate superclass.
-     * @return true if cd is a superclass of this class.
-     */
-    boolean subclassOf(ClassDoc cd);
-
-    /**
-     * Return interfaces implemented by this class or interfaces extended
-     * by this interface. Includes only directly-declared interfaces, not
-     * inherited interfaces.
-     * Return an empty array if there are no interfaces.
-     *
-     * <p> <i>This method cannot accommodate certain generic type constructs.
-     * The {@code interfaceTypes} method should be used instead.</i>
-     *
-     * @return an array of ClassDoc objects representing the interfaces.
-     * @see #interfaceTypes
-     */
-    ClassDoc[] interfaces();
-
-    /**
-     * Return interfaces implemented by this class or interfaces extended
-     * by this interface. Includes only directly-declared interfaces, not
-     * inherited interfaces.
-     * Return an empty array if there are no interfaces.
-     *
-     * @return an array of interfaces, each represented by a
-     *         {@code ClassDoc} or a {@code ParametrizedType}.
-     * @since 1.5
-     */
-    Type[] interfaceTypes();
-
-    /**
-     * Return the formal type parameters of this class or interface.
-     * Return an empty array if there are none.
-     *
-     * @return the formal type parameters of this class or interface.
-     * @since 1.5
-     */
-    TypeVariable[] typeParameters();
-
-    /**
-     * Return the type parameter tags of this class or interface.
-     * Return an empty array if there are none.
-     *
-     * @return the type parameter tags of this class or interface.
-     * @since 1.5
-     */
-    ParamTag[] typeParamTags();
-
-    /**
-     * Return
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     * fields in this class or interface.
-     * Excludes enum constants if this is an enum type.
-     *
-     * @return an array of FieldDoc objects representing the included
-     *         fields in this class or interface.
-     */
-    FieldDoc[] fields();
-
-    /**
-     * Return fields in this class or interface, filtered to the specified
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
-     * modifier option</a>.
-     * Excludes enum constants if this is an enum type.
-     *
-     * @param filter Specify true to filter according to the specified access
-     *               modifier option.
-     *               Specify false to include all fields regardless of
-     *               access modifier option.
-     * @return       an array of FieldDoc objects representing the included
-     *               fields in this class or interface.
-     */
-    FieldDoc[] fields(boolean filter);
-
-    /**
-     * Return the enum constants if this is an enum type.
-     * Return an empty array if there are no enum constants, or if
-     * this is not an enum type.
-     *
-     * @return the enum constants if this is an enum type.
-     */
-    FieldDoc[] enumConstants();
-
-    /**
-     * Return
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     * methods in this class or interface.
-     * Same as {@code methods(true)}.
-     *
-     * @return an array of MethodDoc objects representing the included
-     *         methods in this class or interface.  Does not include
-     *         constructors or annotation type elements.
-     */
-    MethodDoc[] methods();
-
-    /**
-     * Return methods in this class or interface, filtered to the specified
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
-     * modifier option</a>.  Does not include constructors or annotation
-     *          type elements.
-     *
-     * @param filter Specify true to filter according to the specified access
-     *               modifier option.
-     *               Specify false to include all methods regardless of
-     *               access modifier option.
-     *
-     * @return       an array of MethodDoc objects representing the included
-     *               methods in this class or interface.
-     */
-    MethodDoc[] methods(boolean filter);
-
-    /**
-     * Return
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     * constructors in this class.  An array containing the default
-     * no-arg constructor is returned if no other constructors exist.
-     * Return empty array if this is an interface.
-     *
-     * @return an array of ConstructorDoc objects representing the included
-     *         constructors in this class.
-     */
-    ConstructorDoc[] constructors();
-
-    /**
-     * Return constructors in this class, filtered to the specified
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
-     * modifier option</a>.  Return an array containing the default
-     * no-arg constructor if no other constructors exist.
-     *
-     * @param filter Specify true to filter according to the specified access
-     *               modifier option.
-     *               Specify false to include all constructors regardless of
-     *               access modifier option.
-     * @return       an array of ConstructorDoc objects representing the included
-     *               constructors in this class.
-     */
-    ConstructorDoc[] constructors(boolean filter);
-
-
-    /**
-     * Return
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     * nested classes and interfaces within this class or interface.
-     * This includes both static and non-static nested classes.
-     * (This method should have been named {@code nestedClasses()},
-     * as inner classes are technically non-static.)  Anonymous and local classes
-     * or interfaces are not included.
-     *
-     * @return an array of ClassDoc objects representing the included classes
-     *         and interfaces defined in this class or interface.
-     */
-    ClassDoc[] innerClasses();
-
-    /**
-     * Return nested classes and interfaces within this class or interface
-     * filtered to the specified
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
-     * modifier option</a>.
-     * This includes both static and non-static nested classes.
-     * Anonymous and local classes are not included.
-     *
-     * @param filter Specify true to filter according to the specified access
-     *               modifier option.
-     *               Specify false to include all nested classes regardless of
-     *               access modifier option.
-     * @return       a filtered array of ClassDoc objects representing the included
-     *               classes and interfaces defined in this class or interface.
-     */
-    ClassDoc[] innerClasses(boolean filter);
-
-    /**
-     * Find the specified class or interface within the context of this class doc.
-     * Search order: 1) qualified name, 2) nested in this class or interface,
-     * 3) in this package, 4) in the class imports, 5) in the package imports.
-     * Return the ClassDoc if found, null if not found.
-     * @param className Specify the class name to find as a String.
-     * @return the ClassDoc if found, null if not found.
-     */
-    ClassDoc findClass(String className);
-
-    /**
-     * Get the list of classes and interfaces declared as imported.
-     * These are called "single-type-import declarations" in
-     * <cite>The Java&trade; Language Specification</cite>.
-     *
-     * @return an array of ClassDoc representing the imported classes.
-     *
-     * @deprecated  Import declarations are implementation details that
-     *          should not be exposed here.  In addition, not all imported
-     *          classes are imported through single-type-import declarations.
-     */
-    @Deprecated(since="9", forRemoval=true)
-    ClassDoc[] importedClasses();
-
-    /**
-     * Get the list of packages declared as imported.
-     * These are called "type-import-on-demand declarations" in
-     * <cite>The Java&trade; Language Specification</cite>.
-     *
-     * @return an array of PackageDoc representing the imported packages.
-     *
-     * @deprecated  Import declarations are implementation details that
-     *          should not be exposed here.  In addition, this method's
-     *          return type does not allow for all type-import-on-demand
-     *          declarations to be returned.
-     */
-    @Deprecated(since="9", forRemoval=true)
-    PackageDoc[] importedPackages();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ConstructorDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a constructor of a java class.
- *
- * @since 1.2
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ConstructorDoc extends ExecutableMemberDoc {
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/Doc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-import java.text.BreakIterator;
-import java.util.Locale;
-
-/**
- * Represents Java language constructs (package, class, constructor,
- * method, field) which have comments and have been processed by this
- * run of javadoc.  All Doc objects are unique, that is, they
- * are == comparable.
- *
- * @since 1.2
- * @author Robert Field
- * @author Scott Seligman (generics, enums, annotations)
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface Doc extends Comparable<Object> {
-
-    /**
-     * Return the text of the comment for this doc item.
-     * Tags have been removed.
-     *
-     * @return the text of the comment for this doc item.
-     */
-    String commentText();
-
-    /**
-     * Return all tags in this Doc item.
-     *
-     * @return an array of {@link Tag} objects containing all tags on
-     *         this Doc item.
-     */
-    Tag[] tags();
-
-    /**
-     * Return tags of the specified {@linkplain Tag#kind() kind} in
-     * this Doc item.
-     *
-     * For example, if 'tagname' has value "@serial", all tags in
-     * this Doc item of kind "@serial" will be returned.
-     *
-     * @param tagname name of the tag kind to search for.
-     * @return an array of Tag containing all tags whose 'kind()'
-     * matches 'tagname'.
-     */
-    Tag[] tags(String tagname);
-
-    /**
-     * Return the see also tags in this Doc item.
-     *
-     * @return an array of SeeTag containing all @see tags.
-     */
-    SeeTag[] seeTags();
-
-    /**
-     * Return comment as an array of tags. Includes inline tags
-     * (i.e. {&#64;link <i>reference</i>} tags)  but not
-     * block tags.
-     * Each section of plain text is represented as a {@link Tag}
-     * of {@linkplain Tag#kind() kind} "Text".
-     * Inline tags are represented as a {@link SeeTag} of kind "@see"
-     * and name "@link".
-     *
-     * @return an array of {@link Tag}s representing the comment
-     */
-    Tag[] inlineTags();
-
-    /**
-     * Return the first sentence of the comment as an array of tags.
-     * Includes inline tags
-     * (i.e. {&#64;link <i>reference</i>} tags)  but not
-     * block tags.
-     * Each section of plain text is represented as a {@link Tag}
-     * of {@linkplain Tag#kind() kind} "Text".
-     * Inline tags are represented as a {@link SeeTag} of kind "@see"
-     * and name "@link".
-     * <p>
-     * If the locale is English language, the first sentence is
-     * determined by the rules described in the Java Language
-     * Specification (first version): &quot;This sentence ends
-     * at the first period that is followed by a blank, tab, or
-     * line terminator or at the first tagline.&quot;, in
-     * addition a line will be terminated by block
-     * HTML tags: &lt;p&gt;  &lt;/p&gt;  &lt;h1&gt;
-     * &lt;h2&gt;  &lt;h3&gt; &lt;h4&gt;  &lt;h5&gt;  &lt;h6&gt;
-     * &lt;hr&gt;  &lt;pre&gt;  or &lt;/pre&gt;.
-     * If the locale is not English, the sentence end will be
-     * determined by
-     * {@link BreakIterator#getSentenceInstance(Locale)}.
-
-     * @return an array of {@link Tag}s representing the
-     * first sentence of the comment
-     */
-    Tag[] firstSentenceTags();
-
-    /**
-     * Return the full unprocessed text of the comment.  Tags
-     * are included as text.  Used mainly for store and retrieve
-     * operations like internalization.
-     *
-     * @return the full unprocessed text of the comment.
-     */
-    String getRawCommentText();
-
-    /**
-     * Set the full unprocessed text of the comment.  Tags
-     * are included as text.  Used mainly for store and retrieve
-     * operations like internalization.
-     *
-     * @param rawDocumentation A String containing the full unprocessed text of the comment.
-     */
-    void setRawCommentText(String rawDocumentation);
-
-    /**
-     * Returns the non-qualified name of this Doc item.
-     *
-     * @return  the name
-     */
-    String name();
-
-    /**
-     * Compares this doc object with the specified object for order.  Returns a
-     * negative integer, zero, or a positive integer as this doc object is less
-     * than, equal to, or greater than the given object.
-     * <p>
-     * This method satisfies the {@link java.lang.Comparable} interface.
-     *
-     * @param   obj  the {@code Object} to be compared.
-     * @return  a negative integer, zero, or a positive integer as this Object
-     *      is less than, equal to, or greater than the given Object.
-     * @exception ClassCastException the specified Object's type prevents it
-     *        from being compared to this Object.
-     */
-    int compareTo(Object obj);
-
-    /**
-     * Is this Doc item a field (but not an enum constant)?
-     *
-     * @return true if it represents a field
-     */
-    boolean isField();
-
-    /**
-     * Is this Doc item an enum constant?
-     *
-     * @return true if it represents an enum constant
-     * @since 1.5
-     */
-    boolean isEnumConstant();
-
-    /**
-     * Is this Doc item a constructor?
-     *
-     * @return true if it represents a constructor
-     */
-    boolean isConstructor();
-
-    /**
-     * Is this Doc item a method (but not a constructor or annotation
-     * type element)?
-     *
-     * @return true if it represents a method
-     */
-    boolean isMethod();
-
-    /**
-     * Is this Doc item an annotation type element?
-     *
-     * @return true if it represents an annotation type element
-     * @since 1.5
-     */
-    boolean isAnnotationTypeElement();
-
-    /**
-     * Is this Doc item an interface (but not an annotation type)?
-     *
-     * @return true if it represents an interface
-     */
-    boolean isInterface();
-
-    /**
-     * Is this Doc item an exception class?
-     *
-     * @return true if it represents an exception
-     */
-    boolean isException();
-
-    /**
-     * Is this Doc item an error class?
-     *
-     * @return true if it represents a error
-     */
-    boolean isError();
-
-    /**
-     * Is this Doc item an enum type?
-     *
-     * @return true if it represents an enum type
-     * @since 1.5
-     */
-    boolean isEnum();
-
-    /**
-     * Is this Doc item an annotation type?
-     *
-     * @return true if it represents an annotation type
-     * @since 1.5
-     */
-    boolean isAnnotationType();
-
-    /**
-     * Is this Doc item an
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#class">ordinary
-     * class</a>?
-     * (i.e. not an interface, annotation type, enum, exception, or error)?
-     *
-     * @return true if it represents an ordinary class
-     */
-    boolean isOrdinaryClass();
-
-    /**
-     * Is this Doc item a
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#class">class</a>
-     * (and not an interface or annotation type)?
-     * This includes ordinary classes, enums, errors and exceptions.
-     *
-     * @return true if it represents a class
-     */
-    boolean isClass();
-
-    /**
-     * Return true if this Doc item is
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     * in the result set.
-     *
-     * @return true if this Doc item is
-     *         <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     *         in the result set.
-     */
-    boolean isIncluded();
-
-    /**
-     * Return the source position of the first line of the
-     * corresponding declaration, or null if
-     * no position is available.  A default constructor returns
-     * null because it has no location in the source file.
-     *
-     * @since 1.4
-     * @return the source positino of the first line of the
-     *         corresponding declaration, or null if
-     *         no position is available.  A default constructor returns
-     *         null because it has no location in the source file.
-     */
-    SourcePosition position();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/DocErrorReporter.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * This interface provides error, warning and notice printing.
- *
- * @since 1.2
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface DocErrorReporter {
-
-    /**
-     * Print error message and increment error count.
-     *
-     * @param msg message to print
-     */
-    void printError(String msg);
-
-    /**
-     * Print an error message and increment error count.
-     *
-     * @param pos the position item where the error occurs
-     * @param msg message to print
-     * @since 1.4
-     */
-    void printError(SourcePosition pos, String msg);
-
-    /**
-     * Print warning message and increment warning count.
-     *
-     * @param msg message to print
-     */
-    void printWarning(String msg);
-
-    /**
-     * Print warning message and increment warning count.
-     *
-     * @param pos the position item where the warning occurs
-     * @param msg message to print
-     * @since 1.4
-     */
-    void printWarning(SourcePosition pos, String msg);
-
-    /**
-     * Print a message.
-     *
-     * @param msg message to print
-     */
-    void printNotice(String msg);
-
-    /**
-     * Print a message.
-     *
-     * @param pos the position item where the message occurs
-     * @param msg message to print
-     * @since 1.4
-     */
-    void printNotice(SourcePosition pos, String msg);
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/Doclet.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * This is an example of a starting class for a doclet,
- * showing the entry-point methods.  A starting class must
- * import com.sun.javadoc.* and implement the
- * {@code start(RootDoc)} method, as described in the
- * <a href="package-summary.html#package.description">package
- * description</a>.  If the doclet takes command line options,
- * it must also implement {@code optionLength} and
- * {@code validOptions}.
- *
- * <p> A doclet supporting the language features added since 1.1
- * (such as generics and annotations) should indicate this
- * by implementing {@code languageVersion}.  In the absence of
- * this the doclet should not invoke any of the Doclet API methods
- * added since 1.5, and
- * the results of several other methods are modified so as
- * to conceal the new constructs (such as type parameters) from
- * the doclet.
- *
- * <p> To start the doclet, pass
- * {@code -doclet} followed by the fully-qualified
- * name of the starting class on the javadoc tool command line.
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public abstract class Doclet {
-
-    /**
-     * Generate documentation here.
-     * This method is required for all doclets.
-     *
-     * @param root Supply the RootDoc to the method.
-     * @return true on success.
-     */
-    public static boolean start(RootDoc root) {
-        return true;
-    }
-
-    /**
-     * Check for doclet-added options.  Returns the number of
-     * arguments you must specify on the command line for the
-     * given option.  For example, "-d docs" would return 2.
-     * <P>
-     * This method is required if the doclet contains any options.
-     * If this method is missing, Javadoc will print an invalid flag
-     * error for every option.
-     *
-     * @param option the option for which the number of arguements is returned.
-     * @return number of arguments on the command line for an option
-     *         including the option name itself.  Zero return means
-     *         option not known.  Negative value means error occurred.
-     */
-    public static int optionLength(String option) {
-        return 0;  // default is option unknown
-    }
-
-    /**
-     * Check that options have the correct arguments.
-     * <P>
-     * This method is not required, but is recommended,
-     * as every option will be considered valid if this method
-     * is not present.  It will default gracefully (to true)
-     * if absent.
-     * <P>
-     * Printing option related error messages (using the provided
-     * DocErrorReporter) is the responsibility of this method.
-     *
-     * @param options Supply valid options as an array of Strings.
-     * @param reporter The DocErrorReporter responsible for these options.
-     * @return true if the options are valid.
-     */
-    public static boolean validOptions(String options[][],
-                                       DocErrorReporter reporter) {
-        return true;  // default is options are valid
-    }
-
-    /**
-     * Return the version of the Java Programming Language supported
-     * by this doclet.
-     * <p>
-     * This method is required by any doclet supporting a language version
-     * newer than 1.1.
-     *
-     * @return  the language version supported by this doclet.
-     * @since 1.5
-     */
-    public static LanguageVersion languageVersion() {
-        return LanguageVersion.JAVA_1_1;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ExecutableMemberDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a method or constructor of a java class.
- *
- * @since 1.2
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ExecutableMemberDoc extends MemberDoc {
-
-    /**
-     * Return exceptions this method or constructor throws.
-     * If the type of the exception is a type variable, return the
-     * {@code ClassDoc} of its erasure.
-     *
-     * <p> <i>The {@code thrownExceptions} method cannot
-     * accommodate certain generic type constructs.  The
-     * {@code thrownExceptionTypes} method should be used
-     * instead.</i>
-     *
-     * @return an array of ClassDoc[] representing the exceptions
-     *         thrown by this method.
-     * @see #thrownExceptionTypes
-     */
-    ClassDoc[] thrownExceptions();
-
-    /**
-     * Return exceptions this method or constructor throws.
-     *
-     * @return an array representing the exceptions thrown by this method.
-     *         Each array element is either a {@code ClassDoc} or a
-     *         {@code TypeVariable}.
-     * @since 1.5
-     */
-    Type[] thrownExceptionTypes();
-
-    /**
-     * Return true if this method is native
-     *
-     * @return true if this method is native
-     */
-    boolean isNative();
-
-    /**
-     * Return true if this method is synchronized
-     *
-     * @return true if this method is synchronized
-     */
-    boolean isSynchronized();
-
-    /**
-     * Return true if this method was declared to take a variable number
-     * of arguments.
-     *
-     * @since 1.5
-     * @return true if this method was declared to take a variable number of arguments.
-     */
-    public boolean isVarArgs();
-
-    /**
-     * Get argument information.
-     *
-     * @see Parameter
-     *
-     * @return an array of Parameter, one element per argument
-     * in the order the arguments are present.
-     */
-    Parameter[] parameters();
-
-    /**
-     * Get the receiver type of this executable element.
-     *
-     * @return the receiver type of this executable element.
-     * @since 1.8
-     */
-    Type receiverType();
-
-    /**
-     * Return the throws tags in this method.
-     *
-     * @return an array of ThrowTag containing all {@code @exception}
-     * and {@code @throws} tags.
-     */
-    ThrowsTag[] throwsTags();
-
-    /**
-     * Return the param tags in this method, excluding the type
-     * parameter tags.
-     *
-     * @return an array of ParamTag containing all {@code @param} tags
-     * corresponding to the parameters of this method.
-     */
-    ParamTag[] paramTags();
-
-    /**
-     * Return the type parameter tags in this method.
-     *
-     * @return an array of ParamTag containing all {@code @param} tags
-     * corresponding to the type parameters of this method.
-     * @since 1.5
-     */
-    ParamTag[] typeParamTags();
-
-    /**
-     * Get the signature. It is the parameter list, type is qualified.
-     *      For instance, for a method {@code mymethod(String x, int y)},
-     *      it will return {@code (java.lang.String,int)}.
-     *
-     * @return the parameter list where type is qualified.
-     */
-    String signature();
-
-    /**
-     * get flat signature.  all types are not qualified.
-     *      return a String, which is the flat signiture of this member.
-     *      It is the parameter list, type is not qualified.
-     *      For instance, for a method {@code mymethod(String x, int y)},
-     *      it will return {@code (String, int)}.
-     *
-     * @return a String, which is the flat signiture of this member.
-     */
-    String flatSignature();
-
-    /**
-     * Return the formal type parameters of this method or constructor.
-     * Return an empty array if this method or constructor is not generic.
-     *
-     * @return the formal type parameters of this method or constructor.
-     * @since 1.5
-     */
-    TypeVariable[] typeParameters();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/FieldDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a field in a java class.
- *
- * @see MemberDoc
- *
- * @since 1.2
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface FieldDoc extends MemberDoc {
-
-    /**
-     * Get type of this field.
-     *
-     * @return the type of this field.
-     */
-    Type type();
-
-    /**
-     * Return true if this field is transient
-     *
-     * @return true if this field is transient
-     */
-    boolean isTransient();
-
-    /**
-     * Return true if this field is volatile
-     *
-     * @return true if this field is volatile
-     */
-    boolean isVolatile();
-
-    /**
-     * Return the serialField tags in this FieldDoc item.
-     *
-     * @return an array of {@code SerialFieldTag} objects containing
-     *         all {@code @serialField} tags.
-     */
-    SerialFieldTag[] serialFieldTags();
-
-    /**
-     * Get the value of a constant field.
-     *
-     * @return the value of a constant field. The value is
-     * automatically wrapped in an object if it has a primitive type.
-     * If the field is not constant, returns null.
-     */
-    Object constantValue();
-
-    /**
-     * Get the value of a constant field.
-     *
-     * @return the text of a Java language expression whose value
-     * is the value of the constant. The expression uses no identifiers
-     * other than primitive literals. If the field is
-     * not constant, returns null.
-     */
-    String constantValueExpression();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/LanguageVersion.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Java Programming Language version.  The constants of this enum
- * identify the JDK and J2SE releases containing language changes
- * relevant to doclets.
- * <p>
- * All doclets support at least the 1.1 language version.
- * The first release subsequent to this with language changes
- * affecting doclets is 1.5.
- *
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public enum LanguageVersion {
-
-    /** 1.1 added nested classes and interfaces. */
-    JAVA_1_1,
-
-    /** 1.5 added generic types, annotations, enums, and varArgs. */
-    JAVA_1_5
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/MemberDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a member of a java class: field, constructor, or method.
- * This is an abstract class dealing with information common to
- * method, constructor and field members. Class members of a class
- * (innerclasses) are represented instead by ClassDoc.
- *
- * @see MethodDoc
- * @see FieldDoc
- * @see ClassDoc
- *
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface MemberDoc extends ProgramElementDoc {
-
-    /**
-     * Returns true if this member was synthesized by the compiler.
-     *
-     * @return true if this member was synthesized by the compiler.
-     */
-    boolean isSynthetic();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/MethodDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a method of a java class.
- *
- * @since 1.2
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface MethodDoc extends ExecutableMemberDoc {
-
-    /**
-     * Return true if this method is abstract
-     *
-     * @return true if this method is abstract
-     */
-    boolean isAbstract();
-
-    /**
-     * Return true if this method is default
-     *
-     * @return true if this method is default
-     */
-    boolean isDefault();
-
-    /**
-     * Get return type.
-     *
-     * @return the return type of this method, null if it
-     * is a constructor.
-     */
-    Type returnType();
-
-    /**
-     * Return the class containing the method that this method overrides.
-     *
-     * <p> <i>The {@code overriddenClass} method cannot
-     * accommodate certain generic type constructs.  The
-     * {@code overriddenType} method should be used instead.</i>
-     *
-     * @return a ClassDoc representing the superclass
-     *         defining a method that this method overrides, or null if
-     *         this method does not override.
-     */
-    ClassDoc overriddenClass();
-
-    /**
-     * Return the type containing the method that this method overrides.
-     * It may be a {@code ClassDoc} or a {@code ParameterizedType}.
-     *
-     * @return the supertype whose method is overridden, or null if this
-     *         method does not override another in a superclass
-     * @since 1.5
-     */
-    Type overriddenType();
-
-    /**
-     * Return the method that this method overrides.
-     *
-     * @return a MethodDoc representing a method definition
-     * in a superclass this method overrides, null if
-     * this method does not override.
-     */
-    MethodDoc overriddenMethod();
-
-    /**
-     * Tests whether this method overrides another.
-     * The overridden method may be one declared in a superclass or
-     * a superinterface (unlike {@link #overriddenMethod()}).
-     *
-     * <p> When a non-abstract method overrides an abstract one, it is
-     * also said to <i>implement</i> the other.
-     *
-     * @param meth  the other method to examine
-     * @return {@code true} if this method overrides the other
-     * @since 1.5
-     */
-    boolean overrides(MethodDoc meth);
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/PackageDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a java package.  Provides access to information
- * about the package, the package's comment and tags, and the
- * classes in the package.
- * <p>
- * Each method whose return type is an array will return an empty
- * array (never null) when there are no objects in the result.
- *
- * @since 1.2
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface PackageDoc extends Doc {
-
-    /**
-     * Get all classes and interfaces in the package, filtered to the specified
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
-     * modifier option</a>.
-     *
-     * @return       filtered classes and interfaces in this package
-     * @param filter Specifying true filters according to the specified access
-     *               modifier option.
-     *               Specifying false includes all classes and interfaces
-     *               regardless of access modifier option.
-     * @since 1.4
-     */
-    ClassDoc[] allClasses(boolean filter);
-
-    /**
-     * Get all
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
-     * classes and interfaces in the package.  Same as allClasses(true).
-     *
-     * @return all included classes and interfaces in this package.
-     */
-    ClassDoc[] allClasses();
-
-    /**
-     * Get included
-     * <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#class">ordinary</a>
-     * classes (that is, exclude exceptions, errors, enums, interfaces, and
-     * annotation types)
-     * in this package.
-     *
-     * @return included ordinary classes in this package.
-     */
-    ClassDoc[] ordinaryClasses();
-
-    /**
-     * Get included Exception classes in this package.
-     *
-     * @return included Exceptions in this package.
-     */
-    ClassDoc[] exceptions();
-
-    /**
-     * Get included Error classes in this package.
-     *
-     * @return included Errors in this package.
-     */
-    ClassDoc[] errors();
-
-    /**
-     * Get included enum types in this package.
-     *
-     * @return included enum types in this package.
-     * @since 1.5
-     */
-    ClassDoc[] enums();
-
-    /**
-     * Get included interfaces in this package, omitting annotation types.
-     *
-     * @return included interfaces in this package.
-     */
-    ClassDoc[] interfaces();
-
-    /**
-     * Get included annotation types in this package.
-     *
-     * @return included annotation types in this package.
-     * @since 1.5
-     */
-    AnnotationTypeDoc[] annotationTypes();
-
-    /**
-     * Get the annotations of this package.
-     * Return an empty array if there are none.
-     *
-     * @return the annotations of this package.
-     * @since 1.5
-     */
-    AnnotationDesc[] annotations();
-
-    /**
-     * Lookup a class or interface within this package.
-     *
-     * @param className A String containing the name of the class to look up.
-     * @return ClassDoc of found class or interface,
-     * or null if not found.
-     */
-    ClassDoc findClass(String className);
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ParamTag.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents an @param documentation tag.
- * Stores the name and comment parts of the parameter tag.
- * An @param tag may represent either a method or constructor parameter,
- * or a type parameter.
- *
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ParamTag extends Tag {
-
-    /**
-     * Return the name of the parameter or type parameter
-     * associated with this {@code ParamTag}.
-     * The angle brackets delimiting a type parameter are not part of
-     * its name.
-     *
-     * @return the parameter name.
-     */
-    String parameterName();
-
-    /**
-     * Return the parameter comment
-     * associated with this {@code ParamTag}.
-     *
-     * @return the parameter comment.
-     */
-    String parameterComment();
-
-    /**
-     * Return true if this {@code ParamTag} corresponds to a type
-     * parameter.  Return false if it corresponds to an ordinary parameter
-     * of a method or constructor.
-     *
-     * @return true if this {@code ParamTag} corresponds to a type
-     * parameter.
-     * @since 1.5
-     */
-    boolean isTypeParameter();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/Parameter.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Parameter information.
- * This includes a parameter type and parameter name.
- *
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface Parameter {
-
-    /**
-     * Get the type of this parameter.
-     *
-     * @return the type of this parameter.
-     */
-    Type type();
-
-    /**
-     * Get local name of this parameter.
-     * For example if parameter is the short 'index', returns "index".
-     *
-     * @return the name of this parameter as a string.
-     */
-    String name();
-
-    /**
-     * Get type name of this parameter.
-     * For example if parameter is the short 'index', returns "short".
-     * <p>
-     * This method returns a complete string
-     * representation of the type, including the dimensions of arrays and
-     * the type arguments of parameterized types.  Names are qualified.
-     *
-     * @return a complete string representation of the type.
-     */
-    String typeName();
-
-    /**
-     * Returns a string representation of the parameter.
-     * <p>
-     * For example if parameter is the short 'index', returns "short index".
-     *
-     * @return type and parameter name of this parameter.
-     */
-    String toString();
-
-    /**
-     * Get the annotations of this parameter.
-     * Return an empty array if there are none.
-     *
-     * @return the annotations of this parameter.
-     * @since 1.5
-     */
-    AnnotationDesc[] annotations();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ParameterizedType.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents an invocation of a generic class or interface.  For example,
- * given the generic interface {@code List<E>}, possible invocations
- * include:
- * <pre>
- *      {@code List<String>}
- *      {@code List<T extends Number>}
- *      {@code List<?>}
- * </pre>
- * A generic inner class {@code Outer<T>.Inner<S>} might be invoked as:
- * <pre>
- *      {@code Outer<Number>.Inner<String>}
- * </pre>
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ParameterizedType extends Type {
-
-    /**
-     * Return the generic class or interface that declared this type.
-     *
-     * @return the generic class or interface that declared this type.
-     */
-    ClassDoc asClassDoc();
-
-    /**
-     * Return the actual type arguments of this type.
-     * For a generic type that is nested within some other generic type
-     * (such as {@code Outer<T>.Inner<S>}),
-     * only the type arguments of the innermost type are included.
-     *
-     * @return the actual type arguments of this type.
-     */
-    Type[] typeArguments();
-
-    /**
-     * Return the class type that is a direct supertype of this one.
-     * This is the superclass of this type's declaring class,
-     * with type arguments substituted in.
-     * Return null if this is an interface type.
-     *
-     * <p> For example, if this parameterized type is
-     * {@code java.util.ArrayList<String>}, the result will be
-     * {@code java.util.AbstractList<String>}.
-     *
-     * @return the class type that is a direct supertype of this one.
-     */
-    Type superclassType();
-
-    /**
-     * Return the interface types directly implemented by or extended by this
-     * parameterized type.
-     * These are the interfaces directly implemented or extended
-     * by this type's declaring class or interface,
-     * with type arguments substituted in.
-     * Return an empty array if there are no interfaces.
-     *
-     * <p> For example, the interface extended by
-     * {@code java.util.Set<String>} is {@code java.util.Collection<String>}.
-     *
-     * @return the interface types directly implemented by or extended by this
-     * parameterized type.
-     */
-    Type[] interfaceTypes();
-
-    /**
-     * Return the type that contains this type as a member.
-     * Return null is this is a top-level type.
-     *
-     * <p> For example, the containing type of
-     * {@code AnInterface.Nested<Number>} is the {@code ClassDoc}
-     * representing {@code AnInterface}, and the containing type of
-     * {@code Outer<String>.Inner<Number>} is the
-     * {@code ParameterizedType} representing {@code Outer<String>}.
-     *
-     * @return the type that contains this type as a member.
-     */
-    Type containingType();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ProgramElementDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a java program element: class, interface, field,
- * constructor, or method.
- * This is an abstract class dealing with information common to
- * these elements.
- *
- * @see MemberDoc
- * @see ClassDoc
- *
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ProgramElementDoc extends Doc {
-
-    /**
-     * Get the containing class or interface of this program element.
-     *
-     * @return a ClassDoc for this element's containing class or interface.
-     * If this is a top-level class or interface, return null.
-     */
-    ClassDoc containingClass();
-
-    /**
-     * Get the package that this program element is contained in.
-     *
-     * @return a PackageDoc for this element containing package.
-     * If in the unnamed package, this PackageDoc will have the
-     * name "".
-     */
-    PackageDoc containingPackage();
-
-    /**
-     * Get the fully qualified name of this program element.
-     * For example, for the class {@code java.util.Hashtable},
-     * return "java.util.Hashtable".
-     * <p>
-     * For the method {@code bar()} in class {@code Foo}
-     * in the unnamed package, return "Foo.bar".
-     *
-     * @return the qualified name of the program element as a String.
-     */
-    String qualifiedName();
-
-    /**
-     * Get the modifier specifier integer.
-     *
-     * @see java.lang.reflect.Modifier
-     *
-     * @return Get the modifier specifier integer.
-     */
-    int modifierSpecifier();
-
-    /**
-     * Get modifiers string.
-     * For example, for:
-     * <pre>
-     *   public abstract int foo() { ... }
-     * </pre>
-     * return "public abstract".
-     * Annotations are not included.
-     *
-     * @return "public abstract".
-     */
-    String modifiers();
-
-    /**
-     * Get the annotations of this program element.
-     * Return an empty array if there are none.
-     *
-     * @return the annotations of this program element.
-     * @since 1.5
-     */
-    AnnotationDesc[] annotations();
-
-    /**
-     * Return true if this program element is public.
-     *
-     * @return true if this program element is public.
-     */
-    boolean isPublic();
-
-    /**
-     * Return true if this program element is protected.
-     *
-     * @return true if this program element is protected.
-     */
-    boolean isProtected();
-
-    /**
-     * Return true if this program element is private.
-     *
-     * @return true if this program element is private.
-     */
-    boolean isPrivate();
-
-    /**
-     * Return true if this program element is package private.
-     *
-     * @return true if this program element is package private.
-     */
-    boolean isPackagePrivate();
-    /**
-     * Return true if this program element is static.
-     *
-     * @return true if this program element is static.
-     */
-    boolean isStatic();
-
-    /**
-     * Return true if this program element is final.
-     *
-     * @return true if this program element is final.
-     */
-    boolean isFinal();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/RootDoc.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents the root of the program structure information
- * for one run of javadoc.  From this root all other program
- * structure information can be extracted.
- * Also represents the command line information -- the
- * packages, classes and options specified by the user.
- *
- * @since 1.2
- * @author Robert Field
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface RootDoc extends Doc, DocErrorReporter {
-
-    /**
-     * Command line options.
-     * <p>
-     * For example, given:
-     * <pre>
-     *     javadoc -foo this that -bar other ...</pre>
-     *
-     * this method will return:
-     * <pre>
-     *      options()[0][0] = "-foo"
-     *      options()[0][1] = "this"
-     *      options()[0][2] = "that"
-     *      options()[1][0] = "-bar"
-     *      options()[1][1] = "other"</pre>
-     *
-     * @return an array of arrays of String.
-     */
-    String[][] options();
-
-    /**
-     * Return the packages
-     * <a href="package-summary.html#included">specified</a>
-     * on the command line.
-     * If {@code -subpackages} and {@code -exclude} options
-     * are used, return all the non-excluded packages.
-     *
-     * @return packages specified on the command line.
-     */
-    PackageDoc[] specifiedPackages();
-
-    /**
-     * Return the classes and interfaces
-     * <a href="package-summary.html#included">specified</a>
-     * as source file names on the command line.
-     *
-     * @return classes and interfaces specified on the command line.
-     */
-    ClassDoc[] specifiedClasses();
-
-    /**
-     * Return the
-     * <a href="package-summary.html#included">included</a>
-      classes and interfaces in all packages.
-     *
-     * @return included classes and interfaces in all packages.
-     */
-    ClassDoc[] classes();
-
-    /**
-     * Return a PackageDoc for the specified package name.
-     *
-     * @param name package name
-     *
-     * @return a PackageDoc holding the specified package, null if
-     * this package is not referenced.
-     */
-    PackageDoc packageNamed(String name);
-
-    /**
-     * Return a ClassDoc for the specified class or interface name.
-     *
-     * @param qualifiedName
-     * <a href="package-summary.html#qualified">qualified</a>
-     * class or package name
-     *
-     * @return a ClassDoc holding the specified class, null if
-     * this class is not referenced.
-     */
-    ClassDoc classNamed(String qualifiedName);
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/SeeTag.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a user-defined cross-reference to related documentation.
- * The tag can reference a package, class or member, or can hold
- * plain text.  (The plain text might be a reference
- * to something not online, such as a printed book, or be a hard-coded
- * HTML link.)  The reference can either be inline with the comment,
- * using {@code {@link}}, or a separate block comment,
- * using {@code @see}.
- * Method {@code name()} returns "@link" (no curly braces) or
- * "@see", depending on the tag.
- * Method {@code kind()} returns "@see" for both tags.
- *
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- * @author Atul M Dambalkar
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface SeeTag extends Tag {
-
-    /**
-     * Get the label of the {@code @see} tag.
-     * Return null if no label is present.
-     * For example, for:
-     * <p>
-     *    &nbsp;&nbsp;{@code @see String#trim() the trim method}
-     * </p>
-     * return "the trim method".
-     *
-     * @return "the trim method".
-     */
-    String label();
-
-    /**
-     * Get the package doc when {@code @see} references only a package.
-     * Return null if the package cannot be found, or if
-     * {@code @see} references any other element (class,
-     * interface, field, constructor, method) or non-element.
-     * For example, for:
-     * <p>
-     *   &nbsp;&nbsp;{@code @see java.lang}
-     * </p>
-     * return the {@code PackageDoc} for {@code java.lang}.
-     *
-     * @return the {@code PackageDoc} for {@code java.lang}.
-     */
-    public PackageDoc referencedPackage();
-
-    /**
-     * Get the class or interface name of the {@code @see} reference.
-     * The name is fully qualified if the name specified in the
-     * original {@code @see} tag was fully qualified, or if the class
-     * or interface can be found; otherwise it is unqualified.
-     * If {@code @see} references only a package name, then return
-     * the package name instead.
-     * For example, for:
-     * <p>
-     *   &nbsp;&nbsp;{@code @see String#valueOf(java.lang.Object)}
-     * </p>
-     * return "java.lang.String".
-     * For "{@code @see java.lang}", return "java.lang".
-     * Return null if {@code @see} references a non-element, such as
-     * {@code @see <a href="java.sun.com">}.
-     *
-     * @return null if {@code @see} references a non-element, such as
-     * {@code @see <a href="java.sun.com">}.
-     */
-    String referencedClassName();
-
-    /**
-     * Get the class doc referenced by the class name part of @see.
-     * Return null if the class cannot be found.
-     * For example, for:
-     * <p>
-     *   &nbsp;&nbsp;{@code @see String#valueOf(java.lang.Object)}
-     * </p>
-     * return the {@code ClassDoc} for {@code java.lang.String}.
-     *
-     * @return the {@code ClassDoc} for {@code java.lang.String}.
-     */
-    ClassDoc referencedClass();
-
-    /**
-     * Get the field, constructor or method substring of the {@code @see}
-     * reference. Return null if the reference is to any other
-     * element or to any non-element.
-     * References to member classes (nested classes) return null.
-     * For example, for:
-     * <p>
-     *   &nbsp;&nbsp;{@code @see String#startsWith(String)}
-     * </p>
-     * return "startsWith(String)".
-     *
-     * @return "startsWith(String)".
-     */
-    String referencedMemberName();
-
-    /**
-     * Get the member doc for the field, constructor or method
-     * referenced by {@code @see}. Return null if the member cannot
-     * be found or if the reference is to any other element or to any
-     * non-element.
-     * References to member classes (nested classes) return null.
-     * For example, for:
-     * <p>
-     *   &nbsp;&nbsp;{@code @see String#startsWith(java.lang.String)}
-     * </p>
-     * return the {@code MethodDoc} for {@code startsWith}.
-     *
-     * @return the {@code MethodDoc} for {@code startsWith}.
-     */
-    MemberDoc referencedMember();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/SerialFieldTag.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Documents a Serializable field defined by an ObjectStreamField.
- * <pre>
- * The class parses and stores the three serialField tag parameters:
- *
- * - field name
- * - field type name
- *      (fully-qualified or visible from the current import context)
- * - description of the valid values for the field
-
- * </pre>
- * This tag is only allowed in the javadoc for the special member
- * serialPersistentFields.
- *
- * @author Joe Fialli
- *
- * @see java.io.ObjectStreamField
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface SerialFieldTag extends Tag, Comparable<Object> {
-
-    /**
-     * Return the serializable field name.
-     *
-     * @return the serializable field name.
-     */
-    public String fieldName();
-
-    /**
-     * Return the field type string.
-     *
-     * @return the field type string.
-     */
-    public String fieldType();
-
-    /**
-     * Return the ClassDoc for field type.
-     *
-     * @return null if no ClassDoc for field type is visible from
-     *         containingClass context.
-     */
-    public ClassDoc fieldTypeDoc();
-
-    /**
-     * Return the field comment. If there is no serialField comment, return
-     * javadoc comment of corresponding FieldDoc.
-     *
-     * @return the field comment. If there is no serialField comment, return
-     *         javadoc comment of corresponding FieldDoc.
-     */
-    public String description();
-
-    /**
-     * Compares this Object with the specified Object for order.  Returns a
-     * negative integer, zero, or a positive integer as this Object is less
-     * than, equal to, or greater than the given Object.
-     * <p>
-     * Included to make SerialFieldTag items java.lang.Comparable.
-     *
-     * @param   obj the {@code Object} to be compared.
-     * @return  a negative integer, zero, or a positive integer as this Object
-     *          is less than, equal to, or greater than the given Object.
-     * @exception ClassCastException the specified Object's type prevents it
-     *            from being compared to this Object.
-     * @since 1.2
-     */
-    public int compareTo(Object obj);
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/SourcePosition.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-import java.io.File;
-
-/**
- * This interface describes a source position: filename, line number,
- * and column number.
- *
- * @since 1.4
- * @author Neal M Gafter
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface SourcePosition {
-    /** The source file. Returns null if no file information is
-     *  available.
-     *
-     *  @return the source file as a File.
-     */
-    File file();
-
-    /** The line in the source file. The first line is numbered 1;
-     *  0 means no line number information is available.
-     *
-     *  @return the line number in the source file as an integer.
-     */
-    int line();
-
-    /** The column in the source file. The first column is
-     *  numbered 1; 0 means no column information is available.
-     *  Columns count characters in the input stream; a tab
-     *  advances the column number to the next 8-column tab stop.
-     *
-     *  @return the column on the source line as an integer.
-     */
-    int column();
-
-    /** Convert the source position to the form "Filename:line". */
-    String toString();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/Tag.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-import java.text.BreakIterator;
-import java.util.Locale;
-
-/**
- * Represents a simple documentation tag, such as @since, @author, @version.
- * Given a tag (e.g. "@since 1.2"), holds tag name (e.g. "@since")
- * and tag text (e.g. "1.2").  Tags with structure or which require
- * special processing are handled by subclasses such as ParamTag
- * (for @param), SeeTag (for @see and {@link}), and ThrowsTag
- * (for @throws).
- *
- * @author Robert Field
- * @author Atul M Dambalkar
- * @see SeeTag
- * @see ParamTag
- * @see ThrowsTag
- * @see SerialFieldTag
- * @see Doc#tags()
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface Tag {
-
-    /**
-     * Return the name of this tag.  The name is the string
-     * starting with "@" that is used in a doc comment, such as
-     * {@code @return}.  For inline tags, such as
-     * {@code {@link}}, the curly brackets
-     * are not part of the name, so in this example the name
-     * would be simply {@code @link}.
-     *
-     * @return the name of this tag
-     */
-    String name();
-
-    /**
-     * Return the containing {@link Doc} of this Tag element.
-     *
-     * @return the containing {@link Doc} of this Tag element
-     */
-    Doc holder();
-
-    /**
-     * Return the kind of this tag.
-     * For most tags,
-     * {@code kind() == name()};
-     * the following table lists those cases where there is more
-     * than one tag of a given kind:
-     *
-     * <table class="striped">
-     * <caption>Related Tags</caption>
-     * <thead>
-     * <tr><th scope="col">{@code name()  }  <th scope="col">{@code kind()      }
-     * </thead>
-     * <tbody style="text-align:left">
-     * <tr><th scope="row">{@code @exception  }  <td>{@code @throws }
-     * <tr><th scope="row">{@code @link       }  <td>{@code @see    }
-     * <tr><th scope="row">{@code @linkplain  }  <td>{@code @see    }
-     * <tr><th scope="row">{@code @see        }  <td>{@code @see    }
-     * <tr><th scope="row">{@code @serial     }  <td>{@code @serial }
-     * <tr><th scope="row">{@code @serialData }  <td>{@code @serial }
-     * <tr><th scope="row">{@code @throws     }  <td>{@code @throws }
-     * </tbody>
-     * </table>
-     *
-     * @return the kind of this tag.
-     */
-    String kind();
-
-    /**
-     * Return the text of this tag, that is, the portion beyond tag name.
-     *
-     * @return the text of this tag
-     */
-    String text();
-
-    /**
-     * Convert this object to a string.
-     */
-    String toString();
-
-    /**
-     * For a documentation comment with embedded {@code {@link}}
-     * tags, return an array of {@code Tag} objects.  The entire
-     * doc comment is broken down into strings separated by
-     * {@code {@link}} tags, where each successive element
-     * of the array represents either a string or
-     * {@code {@link}} tag, in order, from start to end.
-     * Each string is represented by a {@code Tag} object of
-     * name "Text", where {@link #text()} returns the string.  Each
-     * {@code {@link}} tag is represented by a
-     * {@link SeeTag} of name "@link" and kind "@see".
-     * For example, given the following comment
-     * tag:
-     * <p>
-     *  {@code This is a {@link Doc commentlabel} example.}
-     * <p>
-     * return an array of Tag objects:
-     * <ul>
-     *    <li> tags[0] is a {@link Tag} with name "Text" and text consisting
-     *         of "This is a "
-     *    <li> tags[1] is a {@link SeeTag} with name "@link", referenced
-     *         class {@code Doc} and label "commentlabel"
-     *    <li> tags[2] is a {@link Tag} with name "Text" and text consisting
-     *         of " example."
-     * </ul>
-     *
-     * @return Tag[] array of tags
-     * @see ParamTag
-     * @see ThrowsTag
-     */
-    Tag[] inlineTags();
-
-    /**
-     * Return the first sentence of the comment as an array of tags.
-     * Includes inline tags
-     * (i.e. {&#64;link <i>reference</i>} tags)  but not
-     * block tags.
-     * Each section of plain text is represented as a {@link Tag}
-     * of kind "Text".
-     * Inline tags are represented as a {@link SeeTag} of kind "@link".
-     * If the locale is English language, the first sentence is
-     * determined by the rules described in the Java Language
-     * Specification (first version): &quot;This sentence ends
-     * at the first period that is followed by a blank, tab, or
-     * line terminator or at the first tagline.&quot;, in
-     * addition a line will be terminated by paragraph and
-     * section terminating HTML tags: &lt;p&gt;  &lt;/p&gt;  &lt;h1&gt;
-     * &lt;h2&gt;  &lt;h3&gt; &lt;h4&gt;  &lt;h5&gt;  &lt;h6&gt;
-     * &lt;hr&gt;  &lt;pre&gt;  or &lt;/pre&gt;.
-     * If the locale is not English, the sentence end will be
-     * determined by
-     * {@link BreakIterator#getSentenceInstance(Locale)}.
-     *
-     * @return an array of {@link Tag} objects representing the
-     *         first sentence of the comment
-     */
-    Tag[] firstSentenceTags();
-
-    /**
-     * Return the source position of this tag.
-     * @return the source position of this tag.
-     */
-    public SourcePosition position();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/ThrowsTag.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a @throws or @exception documentation tag.
- * Parses and holds the exception name and exception comment.
- * Note: @exception is a backwards compatible synonymy for @throws.
- *
- * @author Robert Field
- * @author Atul M Dambalkar
- * @see ExecutableMemberDoc#throwsTags()
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface ThrowsTag extends Tag {
-
-    /**
-     * Return the name of the exception
-     * associated with this {@code ThrowsTag}.
-     *
-     * @return name of the exception.
-     */
-    String exceptionName();
-
-    /**
-     * Return the exception comment
-     * associated with this {@code ThrowsTag}.
-     *
-     * @return exception comment.
-     */
-    String exceptionComment();
-
-    /**
-     * Return a {@code ClassDoc} that represents the exception.
-     * If the type of the exception is a type variable, return the
-     * {@code ClassDoc} of its erasure.
-     *
-     * <p> <i>This method cannot accommodate certain generic type
-     * constructs.  The {@code exceptionType} method
-     * should be used instead.</i>
-     *
-     * @return {@code ClassDoc} that represents the exception.
-     * @see #exceptionType
-     */
-    ClassDoc exception();
-
-    /**
-     * Return the type of the exception
-     * associated with this {@code ThrowsTag}.
-     * This may be a {@code ClassDoc} or a {@code TypeVariable}.
-     *
-     * @return the type of the exception.
-     * @since 1.5
-     */
-    Type exceptionType();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/Type.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-/**
- * Represents a type.  A type can be a class or interface, an
- * invocation (like {@code List<String>}) of a generic class or interface,
- * a type variable, a wildcard type ("{@code ?}"),
- * or a primitive data type (like {@code char}).
- *
- * @since 1.2
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- * @author Scott Seligman (generics)
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface Type {
-
-    /**
-     * Return unqualified name of type excluding any dimension information.
-     * <p>
-     * For example, a two dimensional array of String returns
-     * "{@code String}".
-     * @return unqualified name of type excluding any dimension information.
-     */
-    String typeName();
-
-    /**
-     * Return qualified name of type excluding any dimension information.
-     *<p>
-     * For example, a two dimensional array of String
-     * returns "{@code java.lang.String}".
-     * @return qualified name of this type excluding any dimension information.
-     */
-    String qualifiedTypeName();
-
-    /**
-     * Return the simple name of this type excluding any dimension information.
-     * This is the unqualified name of the type, except that for nested types
-     * only the identifier of the innermost type is included.
-     * <p>
-     * For example, the class {@code Outer.Inner} returns
-     * "{@code Inner}".
-     *
-     * @since 1.5
-     * @return the simple name of this type excluding any dimension information.
-     */
-    String simpleTypeName();
-
-    /**
-     * Return the type's dimension information, as a string.
-     * <p>
-     * For example, a two dimensional array of String returns
-     * "{@code [][]}".
-     * @return the type's dimension information as a string.
-     */
-    String dimension();
-
-    /**
-     * Return a string representation of the type.
-     * This includes any dimension information and type arguments.
-     * <p>
-     * For example, a two dimensional array of String may return
-     * "{@code java.lang.String[][]}",
-     * and the parameterized type {@code List<Integer>} may return
-     * "{@code java.util.List<java.lang.Integer>}".
-     *
-     * @return a string representation of the type.
-     */
-    String toString();
-
-    /**
-     * Return true if this type represents a primitive type.
-     *
-     * @return true if this type represents a primitive type.
-     * @since 1.5
-     */
-    boolean isPrimitive();
-
-    /**
-     * Return this type as a {@code ClassDoc} if it represents a class
-     * or interface.  Array dimensions are ignored.
-     * If this type is a {@code ParameterizedType},
-     * {@code TypeVariable}, or {@code WildcardType}, return
-     * the {@code ClassDoc} of the type's erasure.  If this is an
-     * {@code AnnotationTypeDoc}, return this as a {@code ClassDoc}
-     * (but see {@link #asAnnotationTypeDoc()}).
-     * If this is a primitive type, return null.
-     *
-     * @return the {@code ClassDoc} of this type,
-     *         or null if it is a primitive type.
-     */
-    ClassDoc asClassDoc();
-
-    /**
-     * Return this type as a {@code ParameterizedType} if it represents
-     * an invocation of a generic class or interface.  Array dimensions
-     * are ignored.
-     *
-     * @return a {@code ParameterizedType} if the type is an
-     *         invocation of a generic type, or null if it is not.
-     * @since 1.5
-     */
-    ParameterizedType asParameterizedType();
-
-    /**
-     * Return this type as a {@code TypeVariable} if it represents
-     * a type variable.  Array dimensions are ignored.
-     *
-     * @return a {@code TypeVariable} if the type is a type variable,
-     *         or null if it is not.
-     * @since 1.5
-     */
-    TypeVariable asTypeVariable();
-
-    /**
-     * Return this type as a {@code WildcardType} if it represents
-     * a wildcard type.
-     *
-     * @return a {@code WildcardType} if the type is a wildcard type,
-     *         or null if it is not.
-     * @since 1.5
-     */
-    WildcardType asWildcardType();
-
-    /**
-     * Returns this type as a {@code AnnotatedType} if it represents
-     * an annotated type.
-     *
-     * @return a {@code AnnotatedType} if the type if an annotated type,
-     *         or null if it is not
-     * @since 1.8
-     */
-    AnnotatedType asAnnotatedType();
-
-    /**
-     * Return this type as an {@code AnnotationTypeDoc} if it represents
-     * an annotation type.  Array dimensions are ignored.
-     *
-     * @return an {@code AnnotationTypeDoc} if the type is an annotation
-     *         type, or null if it is not.
-     * @since 1.5
-     */
-    AnnotationTypeDoc asAnnotationTypeDoc();
-
-    /**
-     * If this type is an array type, return the element type of the
-     * array. Otherwise, return null.
-     *
-     * @return a {@code Type} representing the element type or null.
-     * @since 1.8
-     */
-    Type getElementType();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/TypeVariable.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents a type variable.
- * For example, the generic interface {@code List<E>} has a single
- * type variable {@code E}.
- * A type variable may have explicit bounds, as in
- * {@code C<R extends Remote>}.
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface TypeVariable extends Type {
-
-    /**
-     * Return the bounds of this type variable.
-     * These are the types given by the <i>extends</i> clause.
-     * Return an empty array if there are no explicit bounds.
-     *
-     * @return the bounds of this type variable.
-     */
-    Type[] bounds();
-
-    /**
-     * Return the class, interface, method, or constructor within
-     * which this type variable is declared.
-     *
-     * @return the class, interface, method, or constructor within
-     *         which this type variable is declared.
-     */
-    ProgramElementDoc owner();
-
-    /**
-     * Get the annotations of this program element.
-     * Return an empty array if there are none.
-     *
-     * @return the annotations of this program element or
-     *         an empty array if there are none.
-     */
-    public AnnotationDesc[] annotations();
-
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/WildcardType.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc;
-
-
-/**
- * Represents a wildcard type argument.
- * Examples include:    <pre>
- * {@code <?>}
- * {@code <? extends E>}
- * {@code <? super T>}
- * </pre>
- * A wildcard type can have explicit <i>extends</i> bounds
- * or explicit <i>super</i> bounds or neither, but not both.
- *
- * @author Scott Seligman
- * @since 1.5
- *
- * @deprecated
- *   The declarations in this package have been superseded by those
- *   in the package {@code jdk.javadoc.doclet}.
- *   For more information, see the <i>Migration Guide</i> in the documentation for that package.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public interface WildcardType extends Type {
-
-    /**
-     * Return the upper bounds of this wildcard type argument
-     * as given by the <i>extends</i> clause.
-     * Return an empty array if no such bounds are explicitly given.
-     *
-     * @return the extends bounds of this wildcard type argument
-     */
-    Type[] extendsBounds();
-
-    /**
-     * Return the lower bounds of this wildcard type argument
-     * as given by the <i>super</i> clause.
-     * Return an empty array if no such bounds are explicitly given.
-     *
-     * @return the super bounds of this wildcard type argument
-     */
-    Type[] superBounds();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/javadoc/package-info.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/**
-<p style="font-style: italic; font-size:larger">
-<b>Note:</b> The declarations in this package have been superseded by those
-in the package {@link jdk.javadoc.doclet}.
-For more information, see the <i>Migration Guide</i> in the documentation for that package.
-</p>
-
-The Doclet API (also called the Javadoc API) provides a mechanism
-for clients to inspect the source-level structure of programs and
-libraries, including javadoc comments embedded in the source.
-This is useful for documentation, program checking, automatic
-code generation and many other tools.
-<p>
-
-Doclets are invoked by javadoc and use this API to write out
-program information to files.  For example, the standard doclet is called
-by default and writes out documentation to HTML files.
-<p>
-
-The invocation is defined by the abstract {@link com.sun.javadoc.Doclet} class
--- the entry point is the {@link com.sun.javadoc.Doclet#start(RootDoc) start} method:
-<pre>
-    public static boolean <b>start</b>(RootDoc root)
-</pre>
-The {@link com.sun.javadoc.RootDoc} instance holds the root of the program structure
-information. From this root all other program structure
-information can be extracted.
-<p>
-
-<a id="terminology"></a>
-<h3>Terminology</h3>
-
-<a id="included"></a>
-When calling javadoc, you pass in package names and source file names --
-these are called the <em>specified</em> packages and classes.
-You also pass in Javadoc options; the <em>access control</em> Javadoc options
-({@code -public}, {@code -protected}, {@code -package},
-and {@code -private}) filter program elements, producing a
-result set, called the <em>included</em> set, or "documented" set.
-(The unfiltered set is also available through
-{@link com.sun.javadoc.PackageDoc#allClasses(boolean) allClasses(false)}.)
-<p>
-
-<a id="class"></a>
-Throughout this API, the term <em>class</em> is normally a
-shorthand for "class or interface", as in: {@link com.sun.javadoc.ClassDoc},
-{@link com.sun.javadoc.PackageDoc#allClasses() allClasses()}, and
-{@link com.sun.javadoc.PackageDoc#findClass(String) findClass(String)}.
-In only a couple of other places, it means "class, as opposed to interface",
-as in:  {@link com.sun.javadoc.Doc#isClass()}.
-In the second sense, this API calls out four kinds of classes:
-{@linkplain com.sun.javadoc.Doc#isOrdinaryClass() ordinary classes},
-{@linkplain com.sun.javadoc.Doc#isEnum() enums},
-{@linkplain com.sun.javadoc.Doc#isError() errors} and
-{@linkplain com.sun.javadoc.Doc#isException() exceptions}.
-Throughout the API, the detailed description of each program element
-describes explicitly which meaning is being used.
-<p>
-
-<a id="qualified"></a>
-A <em>qualified</em> class or interface name is one that has its package
-name prepended to it, such as {@code java.lang.String}.  A non-qualified
-name has no package name, such as {@code String}.
-<p>
-
-<a id="example"></a>
-<h3>Example</h3>
-
-The following is an example doclet that
-displays information in the {@code @param} tags of the processed
-classes:
-<pre>
-import com.sun.javadoc.*;
-
-public class ListParams extends <span style="color:#E00000" >Doclet</span> {
-
-    public static boolean start(<span style="color:#E00000" >RootDoc</span> root) {
-        <span style="color:#E00000" >ClassDoc</span>[] classes = root.<span style="color:#E00000" >classes</span>();
-        for (int i = 0; i &lt; classes.length; ++i) {
-            <span style="color:#E00000" >ClassDoc</span> cd = classes[i];
-            printMembers(cd.<span style="color:#E00000" >constructors</span>());
-            printMembers(cd.<span style="color:#E00000" >methods</span>());
-        }
-        return true;
-    }
-
-    static void printMembers(<span style="color:#E00000" >ExecutableMemberDoc</span>[] mems) {
-        for (int i = 0; i &lt; mems.length; ++i) {
-            <span style="color:#E00000" >ParamTag</span>[] params = mems[i].<span style="color:#E00000" >paramTags</span>();
-            System.out.println(mems[i].<span style="color:#E00000" >qualifiedName</span>());
-            for (int j = 0; j &lt; params.length; ++j) {
-                System.out.println("   " + params[j].<span style="color:#E00000" >parameterName</span>()
-                    + " - " + params[j].<span style="color:#E00000" >parameterComment</span>());
-            }
-        }
-    }
-}
-</pre>
-Interfaces and methods from the Javadoc API are marked in
-<span style="color:#E00000" >red</span>.
-{@link com.sun.javadoc.Doclet Doclet} is an abstract class that specifies
-the invocation interface for doclets,
-{@link com.sun.javadoc.Doclet Doclet} holds class or interface information,
-{@link com.sun.javadoc.ExecutableMemberDoc} is a
-superinterface of {@link com.sun.javadoc.MethodDoc} and
-{@link com.sun.javadoc.ConstructorDoc},
-and {@link com.sun.javadoc.ParamTag} holds information
-from "{@code @param}" tags.
-<p>
-This doclet when invoked with a command line like:
-<pre>
-    javadoc -doclet ListParams -sourcepath &lt;source-location&gt; java.util
-</pre>
-producing output like:
-<pre>
-    ...
-    java.util.ArrayList.add
-       index - index at which the specified element is to be inserted.
-       element - element to be inserted.
-    java.util.ArrayList.remove
-       index - the index of the element to removed.
-    ...
-
-</pre>
-@see com.sun.javadoc.Doclet
-@see com.sun.javadoc.RootDoc
-*/
-package com.sun.javadoc;
--- a/src/jdk.javadoc/share/classes/com/sun/tools/doclets/standard/Standard.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.doclets.standard;
-
-import com.sun.javadoc.RootDoc;
-
-/**
- * This is not the doclet you are looking for.
- * @deprecated The doclet has been superseded by its replacement,
- * {@link jdk.javadoc.doclet.StandardDoclet}.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-
-public class Standard {
-
-    public static boolean start(RootDoc root) {
-        root.printNotice("Notice: " + "This is not the Standard Doclet");
-        return true;
-    }
-
-    public static int optionLength(String option) {
-        return 0;  // all options are unsupported
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/doclets/standard/package-info.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/**
-<p style="font-style: italic; font-size:larger">
-<b>Note:</b> The declarations in this package have been replaced by those
-in the new package {@link jdk.javadoc.doclet}.
-</p>
-*/
-
-package com.sun.tools.doclets.standard;
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc;
-
-import java.io.PrintWriter;
-
-import com.sun.tools.javadoc.main.Start;
-
-/**
- * Provides external entry points (tool and programmatic)
- * for the javadoc program.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @deprecated
- * This class is now deprecated and may be removed in a future release.
- * See
- * {@code javax.tools.ToolProvider::getSystemDocumentationTool}
- * and
- * {@code javax.tools.DocumentationTool}
- * for replacement functionality.
- *
- * @since 1.4
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class Main {
-
-    /**
-     * Constructor should never be called.
-     */
-    private Main() {
-    }
-
-    /**
-     * Command line interface.
-     * @param args   The command line parameters.
-     */
-    public static void main(String... args) {
-        System.exit(execute(args));
-    }
-
-    /**
-     * Programmatic interface.
-     * @param args   The command line parameters.
-     * @return The return code.
-     */
-    public static int execute(String... args) {
-        Start jdoc = new Start();
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param args   The command line parameters.
-     * @param docletParentClassLoader The parent class loader used when
-     *  creating the doclet classloader. If null, the class loader used
-     *  to instantiate doclets will be created without specifying a parent
-     *  class loader.
-     * @return The return code.
-     * @since 1.7
-     */
-    public static int execute(ClassLoader docletParentClassLoader, String... args) {
-        Start jdoc = new Start(docletParentClassLoader);
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param programName  Name of the program (for error messages).
-     * @param args   The command line parameters.
-     * @return The return code.
-     */
-    public static int execute(String programName, String... args) {
-        Start jdoc = new Start(programName);
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param programName  Name of the program (for error messages).
-     * @param args   The command line parameters.
-     * @param docletParentClassLoader The parent class loader used when
-     *  creating the doclet classloader. If null, the class loader used
-     *  to instantiate doclets will be created without specifying a parent
-     *  class loader.
-     * @return The return code.
-     * @since 1.7
-     */
-    public static int execute(String programName, ClassLoader docletParentClassLoader, String... args) {
-        Start jdoc = new Start(programName, docletParentClassLoader);
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param programName  Name of the program (for error messages).
-     * @param defaultDocletClassName  Fully qualified class name.
-     * @param args   The command line parameters.
-     * @return The return code.
-     */
-    public static int execute(String programName,
-                              String defaultDocletClassName,
-                              String... args) {
-        Start jdoc = new Start(programName, defaultDocletClassName);
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param programName  Name of the program (for error messages).
-     * @param defaultDocletClassName  Fully qualified class name.
-     * @param docletParentClassLoader The parent class loader used when
-     *  creating the doclet classloader. If null, the class loader used
-     *  to instantiate doclets will be created without specifying a parent
-     *  class loader.
-     * @param args   The command line parameters.
-     * @return The return code.
-     * @since 1.7
-     */
-    public static int execute(String programName,
-                              String defaultDocletClassName,
-                              ClassLoader docletParentClassLoader,
-                              String... args) {
-        Start jdoc = new Start(programName, defaultDocletClassName, docletParentClassLoader);
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param programName  Name of the program (for error messages).
-     * @param errWriter    PrintWriter to receive error messages.
-     * @param warnWriter    PrintWriter to receive error messages.
-     * @param noticeWriter    PrintWriter to receive error messages.
-     * @param defaultDocletClassName  Fully qualified class name.
-     * @param args   The command line parameters.
-     * @return The return code.
-     */
-    public static int execute(String programName,
-                              PrintWriter errWriter,
-                              PrintWriter warnWriter,
-                              PrintWriter noticeWriter,
-                              String defaultDocletClassName,
-                              String... args) {
-        Start jdoc = new Start(programName,
-                               errWriter, warnWriter, noticeWriter,
-                               defaultDocletClassName);
-        return jdoc.begin(args);
-    }
-
-    /**
-     * Programmatic interface.
-     * @param programName  Name of the program (for error messages).
-     * @param errWriter    PrintWriter to receive error messages.
-     * @param warnWriter    PrintWriter to receive error messages.
-     * @param noticeWriter    PrintWriter to receive error messages.
-     * @param defaultDocletClassName  Fully qualified class name.
-     * @param docletParentClassLoader The parent class loader used when
-     *  creating the doclet classloader. If null, the class loader used
-     *  to instantiate doclets will be created without specifying a parent
-     *  class loader.
-     * @param args   The command line parameters.
-     * @return The return code.
-     * @since 1.7
-     */
-    public static int execute(String programName,
-                              PrintWriter errWriter,
-                              PrintWriter warnWriter,
-                              PrintWriter noticeWriter,
-                              String defaultDocletClassName,
-                              ClassLoader docletParentClassLoader,
-                              String... args) {
-        Start jdoc = new Start(programName,
-                               errWriter, warnWriter, noticeWriter,
-                               defaultDocletClassName,
-                               docletParentClassLoader);
-        return jdoc.begin(args);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AbstractTypeImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Type;
-
-
-/**
- * Abstract implementation of <code>Type</code>, with useful
- * defaults for the methods in <code>Type</code> (and a couple from
- * <code>ProgramElementDoc</code>).
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-abstract class AbstractTypeImpl implements com.sun.javadoc.Type {
-
-    protected final DocEnv env;
-    protected final Type type;
-
-    protected AbstractTypeImpl(DocEnv env, Type type) {
-        this.env = env;
-        this.type = type;
-    }
-
-    public String typeName() {
-        return type.tsym.name.toString();
-    }
-
-    public String qualifiedTypeName() {
-        return type.tsym.getQualifiedName().toString();
-    }
-
-    public com.sun.javadoc.Type getElementType() {
-        return null;
-    }
-
-    public String simpleTypeName() {
-        return type.tsym.name.toString();
-    }
-
-    public String name() {
-        return typeName();
-    }
-
-    public String qualifiedName() {
-        return qualifiedTypeName();
-    }
-
-    public String toString() {
-        return qualifiedTypeName();
-    }
-
-    public String dimension() {
-        return "";
-    }
-
-    public boolean isPrimitive() {
-        return false;
-    }
-
-    public ClassDoc asClassDoc() {
-        return null;
-    }
-
-    public TypeVariable asTypeVariable() {
-        return null;
-    }
-
-    public WildcardType asWildcardType() {
-        return null;
-    }
-
-    public ParameterizedType asParameterizedType() {
-        return null;
-    }
-
-    public AnnotationTypeDoc asAnnotationTypeDoc() {
-        return null;
-    }
-
-    public AnnotatedType asAnnotatedType() {
-        return null;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotatedTypeImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Attribute.TypeCompound;
-import com.sun.tools.javac.util.List;
-
-/**
- * Implementation of <code>AnnotatedType</code>, which
- * represents an annotated type.
- *
- * @author Mahmood Ali
- * @since 1.8
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class AnnotatedTypeImpl
-        extends AbstractTypeImpl implements AnnotatedType {
-
-    AnnotatedTypeImpl(DocEnv env, com.sun.tools.javac.code.Type type) {
-        super(env, type);
-    }
-
-    /**
-     * Get the annotations of this program element.
-     * Return an empty array if there are none.
-     */
-    @Override
-    public AnnotationDesc[] annotations() {
-        List<? extends TypeCompound> tas = type.getAnnotationMirrors();
-        if (tas == null ||
-                tas.isEmpty()) {
-            return new AnnotationDesc[0];
-        }
-        AnnotationDesc res[] = new AnnotationDesc[tas.length()];
-        int i = 0;
-        for (Attribute.Compound a : tas) {
-            res[i++] = new AnnotationDescImpl(env, a);
-        }
-        return res;
-    }
-
-    @Override
-    public com.sun.javadoc.Type underlyingType() {
-        return TypeMaker.getType(env, type, true, false);
-    }
-
-    @Override
-    public AnnotatedType asAnnotatedType() {
-        return this;
-    }
-
-    @Override
-    public String toString() {
-        return typeName();
-    }
-
-    @Override
-    public String typeName() {
-        return this.underlyingType().typeName();
-    }
-
-    @Override
-    public String qualifiedTypeName() {
-        return this.underlyingType().qualifiedTypeName();
-    }
-
-    @Override
-    public String simpleTypeName() {
-        return this.underlyingType().simpleTypeName();
-    }
-
-    @Override
-    public String dimension() {
-        return this.underlyingType().dimension();
-    }
-
-    @Override
-    public boolean isPrimitive() {
-        return this.underlyingType().isPrimitive();
-    }
-
-    @Override
-    public ClassDoc asClassDoc() {
-        return this.underlyingType().asClassDoc();
-    }
-
-    @Override
-    public TypeVariable asTypeVariable() {
-        return this.underlyingType().asTypeVariable();
-    }
-
-    @Override
-    public WildcardType asWildcardType() {
-        return this.underlyingType().asWildcardType();
-    }
-
-    @Override
-    public ParameterizedType asParameterizedType() {
-        return this.underlyingType().asParameterizedType();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationDescImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.Pair;
-
-
-/**
- * Represents an annotation.
- * An annotation associates a value with each element of an annotation type.
- * Sure it ought to be called "Annotation", but that clashes with
- * java.lang.annotation.Annotation.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class AnnotationDescImpl implements AnnotationDesc {
-
-    private final DocEnv env;
-    private final Attribute.Compound annotation;
-
-
-    AnnotationDescImpl(DocEnv env, Attribute.Compound annotation) {
-        this.env = env;
-        this.annotation = annotation;
-    }
-
-    /**
-     * Returns the annotation type of this annotation.
-     */
-    public AnnotationTypeDoc annotationType() {
-        ClassSymbol atsym = (ClassSymbol)annotation.type.tsym;
-        if (annotation.type.isErroneous()) {
-            env.warning(null, "javadoc.class_not_found", annotation.type.toString());
-            return new AnnotationTypeDocImpl(env, atsym);
-        } else {
-            return (AnnotationTypeDoc)env.getClassDoc(atsym);
-        }
-    }
-
-    /**
-     * Returns this annotation's elements and their values.
-     * Only those explicitly present in the annotation are
-     * included, not those assuming their default values.
-     * Returns an empty array if there are none.
-     */
-    public ElementValuePair[] elementValues() {
-        List<Pair<MethodSymbol,Attribute>> vals = annotation.values;
-        ElementValuePair res[] = new ElementValuePair[vals.length()];
-        int i = 0;
-        for (Pair<MethodSymbol,Attribute> val : vals) {
-            res[i++] = new ElementValuePairImpl(env, val.fst, val.snd);
-        }
-        return res;
-    }
-
-    /**
-     * Check for the synthesized bit on the annotation.
-     *
-     * @return true if the annotation is synthesized.
-     */
-    public boolean isSynthesized() {
-        return annotation.isSynthesized();
-    }
-
-    /**
-     * Returns a string representation of this annotation.
-     * String is of one of the forms:
-     * <pre>
-     *     {@code @com.example.foo(name1=val1, name2=val2)}
-     *     {@code @com.example.foo(val)}
-     *     {@code @com.example.foo}
-     * </pre>
-     * Omit parens for marker annotations, and omit "value=" when allowed.
-     */
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder("@");
-        sb.append(annotation.type.tsym);
-
-        ElementValuePair vals[] = elementValues();
-        if (vals.length > 0) {          // omit parens for marker annotation
-            sb.append('(');
-            boolean first = true;
-            for (ElementValuePair val : vals) {
-                if (!first) {
-                    sb.append(", ");
-                }
-                first = false;
-
-                String name = val.element().name();
-                if (vals.length == 1 && name.equals("value")) {
-                    sb.append(val.value());
-                } else {
-                    sb.append(val);
-                }
-            }
-            sb.append(')');
-        }
-        return sb.toString();
-    }
-
-
-    /**
-     * Represents an association between an annotation type element
-     * and one of its values.
-     */
-    public static class ElementValuePairImpl implements ElementValuePair {
-
-        private final DocEnv env;
-        private final MethodSymbol meth;
-        private final Attribute value;
-
-        ElementValuePairImpl(DocEnv env, MethodSymbol meth, Attribute value) {
-            this.env = env;
-            this.meth = meth;
-            this.value = value;
-        }
-
-        /**
-         * Returns the annotation type element.
-         */
-        public AnnotationTypeElementDoc element() {
-            return env.getAnnotationTypeElementDoc(meth);
-        }
-
-        /**
-         * Returns the value associated with the annotation type element.
-         */
-        public AnnotationValue value() {
-            return new AnnotationValueImpl(env, value);
-        }
-
-        /**
-         * Returns a string representation of this pair
-         * of the form "name=value".
-         */
-        @Override
-        public String toString() {
-            return meth.name + "=" + value();
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationTypeDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.util.List;
-
-import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
-
-import static com.sun.tools.javac.code.Kinds.Kind.*;
-
-/**
- * Represents an annotation type.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class AnnotationTypeDocImpl
-        extends ClassDocImpl implements AnnotationTypeDoc {
-
-    public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym) {
-        this(env, sym, null);
-    }
-
-    public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-    }
-
-    /**
-     * Returns true, as this is an annotation type.
-     * (For legacy doclets, return false.)
-     */
-    public boolean isAnnotationType() {
-        return !isInterface();
-    }
-
-    /**
-     * Returns false.  Though technically an interface, an annotation
-     * type is not considered an interface for this purpose.
-     * (For legacy doclets, returns true.)
-     */
-    public boolean isInterface() {
-        return env.legacyDoclet;
-    }
-
-    /**
-     * Returns an empty array, as all methods are annotation type elements.
-     * (For legacy doclets, returns the elements.)
-     * @see #elements()
-     */
-    public MethodDoc[] methods(boolean filter) {
-        return env.legacyDoclet
-                ? (MethodDoc[])elements()
-                : new MethodDoc[0];
-    }
-
-    /**
-     * Returns the elements of this annotation type.
-     * Returns an empty array if there are none.
-     * Elements are always public, so no need to filter them.
-     */
-    public AnnotationTypeElementDoc[] elements() {
-        List<AnnotationTypeElementDoc> elements = List.nil();
-        for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
-            if (sym != null && sym.kind == MTH) {
-                MethodSymbol s = (MethodSymbol)sym;
-                elements = elements.prepend(env.getAnnotationTypeElementDoc(s));
-            }
-        }
-        return
-            elements.toArray(new AnnotationTypeElementDoc[elements.length()]);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationTypeElementDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Symbol.*;
-
-/**
- * Represents an element of an annotation type.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class AnnotationTypeElementDocImpl
-        extends MethodDocImpl implements AnnotationTypeElementDoc {
-
-    public AnnotationTypeElementDocImpl(DocEnv env, MethodSymbol sym) {
-        super(env, sym);
-    }
-
-    public AnnotationTypeElementDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-    }
-
-    /**
-     * Returns true, as this is an annotation type element.
-     * (For legacy doclets, return false.)
-     */
-    public boolean isAnnotationTypeElement() {
-        return !isMethod();
-    }
-
-    /**
-     * Returns false.  Although this is technically a method, we don't
-     * consider it one for this purpose.
-     * (For legacy doclets, return true.)
-     */
-    public boolean isMethod() {
-        return env.legacyDoclet;
-    }
-
-    /**
-     * Returns false, even though this is indeed abstract.  See
-     * MethodDocImpl.isAbstract() for the (il)logic behind this.
-     */
-    public boolean isAbstract() {
-        return false;
-    }
-
-    /**
-     * Returns the default value of this element.
-     * Returns null if this element has no default.
-     */
-    public AnnotationValue defaultValue() {
-        return (sym.defaultValue == null)
-               ? null
-               : new AnnotationValueImpl(env, sym.defaultValue);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/AnnotationValueImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Attribute;
-
-import static com.sun.tools.javac.code.TypeTag.BOOLEAN;
-
-/**
- * Represents a value of an annotation type element.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class AnnotationValueImpl implements AnnotationValue {
-
-    private final DocEnv env;
-    private final Attribute attr;
-
-
-    AnnotationValueImpl(DocEnv env, Attribute attr) {
-        this.env = env;
-        this.attr = attr;
-    }
-
-    /**
-     * Returns the value.
-     * The type of the returned object is one of the following:
-     * <ul><li> a wrapper class for a primitive type
-     *     <li> <code>String</code>
-     *     <li> <code>Type</code> (representing a class literal)
-     *     <li> <code>FieldDoc</code> (representing an enum constant)
-     *     <li> <code>AnnotationDesc</code>
-     *     <li> <code>AnnotationValue[]</code>
-     * </ul>
-     */
-    public Object value() {
-        ValueVisitor vv = new ValueVisitor();
-        attr.accept(vv);
-        return vv.value;
-    }
-
-    private class ValueVisitor implements Attribute.Visitor {
-        public Object value;
-
-        public void visitConstant(Attribute.Constant c) {
-            if (c.type.hasTag(BOOLEAN)) {
-                // javac represents false and true as integers 0 and 1
-                value = Boolean.valueOf(
-                                ((Integer)c.value).intValue() != 0);
-            } else {
-                value = c.value;
-            }
-        }
-
-        public void visitClass(Attribute.Class c) {
-            value = TypeMaker.getType(env,
-                                      env.types.erasure(c.classType));
-        }
-
-        public void visitEnum(Attribute.Enum e) {
-            value = env.getFieldDoc(e.value);
-        }
-
-        public void visitCompound(Attribute.Compound c) {
-            value = new AnnotationDescImpl(env, c);
-        }
-
-        public void visitArray(Attribute.Array a) {
-            AnnotationValue vals[] = new AnnotationValue[a.values.length];
-            for (int i = 0; i < vals.length; i++) {
-                vals[i] = new AnnotationValueImpl(env, a.values[i]);
-            }
-            value = vals;
-        }
-
-        public void visitError(Attribute.Error e) {
-            value = "<error>";
-        }
-    }
-
-    /**
-     * Returns a string representation of the value.
-     *
-     * @return the text of a Java language annotation value expression
-     *          whose value is the value of this annotation type element.
-     */
-    @Override
-    public String toString() {
-        ToStringVisitor tv = new ToStringVisitor();
-        attr.accept(tv);
-        return tv.toString();
-    }
-
-    private class ToStringVisitor implements Attribute.Visitor {
-        private final StringBuilder sb = new StringBuilder();
-
-        @Override
-        public String toString() {
-            return sb.toString();
-        }
-
-        public void visitConstant(Attribute.Constant c) {
-            if (c.type.hasTag(BOOLEAN)) {
-                // javac represents false and true as integers 0 and 1
-                sb.append(((Integer)c.value).intValue() != 0);
-            } else {
-                sb.append(FieldDocImpl.constantValueExpression(c.value));
-            }
-        }
-
-        public void visitClass(Attribute.Class c) {
-            sb.append(c);
-        }
-
-        public void visitEnum(Attribute.Enum e) {
-            sb.append(e);
-        }
-
-        public void visitCompound(Attribute.Compound c) {
-            sb.append(new AnnotationDescImpl(env, c));
-        }
-
-        public void visitArray(Attribute.Array a) {
-            // Omit braces from singleton.
-            if (a.values.length != 1) sb.append('{');
-
-            boolean first = true;
-            for (Attribute elem : a.values) {
-                if (first) {
-                    first = false;
-                } else {
-                    sb.append(", ");
-                }
-                elem.accept(this);
-            }
-            // Omit braces from singleton.
-            if (a.values.length != 1) sb.append('}');
-        }
-
-        public void visitError(Attribute.Error e) {
-            sb.append("<error>");
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ClassDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1331 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Modifier;
-import java.net.URI;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.tools.FileObject;
-import javax.tools.JavaFileManager.Location;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.StandardLocation;
-
-import com.sun.javadoc.*;
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Kinds;
-import com.sun.tools.javac.code.Kinds.KindSelector;
-import com.sun.tools.javac.code.Scope;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.Type.ClassType;
-import com.sun.tools.javac.code.TypeTag;
-import com.sun.tools.javac.comp.AttrContext;
-import com.sun.tools.javac.comp.Env;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
-import com.sun.tools.javac.tree.JCTree.JCImport;
-import com.sun.tools.javac.tree.TreeInfo;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Name;
-import com.sun.tools.javac.util.Names;
-import com.sun.tools.javac.util.Position;
-import static com.sun.tools.javac.code.Kinds.Kind.*;
-import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
-import static com.sun.tools.javac.code.TypeTag.CLASS;
-import static com.sun.tools.javac.tree.JCTree.Tag.*;
-
-/**
- * Represents a java class and provides access to information
- * about the class, the class' comment and tags, and the
- * members of the class.  A ClassDocImpl only exists if it was
- * processed in this run of javadoc.  References to classes
- * which may or may not have been processed in this run are
- * referred to using Type (which can be converted to ClassDocImpl,
- * if possible).
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @see Type
- *
- * @since 1.2
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (generics, enums, annotations)
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class ClassDocImpl extends ProgramElementDocImpl implements ClassDoc {
-
-    public final ClassType type;        // protected->public for debugging
-    public final ClassSymbol tsym;
-
-    boolean isIncluded = false;         // Set in RootDocImpl
-
-    private SerializedForm serializedForm;
-
-    /**
-     * Constructor
-     */
-    public ClassDocImpl(DocEnv env, ClassSymbol sym) {
-        this(env, sym, null);
-    }
-
-    /**
-     * Constructor
-     */
-    public ClassDocImpl(DocEnv env, ClassSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-        this.type = (ClassType)sym.type;
-        this.tsym = sym;
-    }
-
-    public com.sun.javadoc.Type getElementType() {
-        return null;
-    }
-
-    /**
-     * Returns the flags in terms of javac's flags
-     */
-    protected long getFlags() {
-        return getFlags(tsym);
-    }
-
-    /**
-     * Returns the flags of a ClassSymbol in terms of javac's flags
-     */
-    static long getFlags(ClassSymbol clazz) {
-        try {
-            return clazz.flags();
-        } catch (CompletionFailure ex) {
-            /* Quietly ignore completion failures and try again - the type
-             * for which the CompletionFailure was thrown shouldn't be completed
-             * again by the completer that threw the CompletionFailure.
-             */
-            return getFlags(clazz);
-        }
-    }
-
-    /**
-     * Is a ClassSymbol an annotation type?
-     */
-    static boolean isAnnotationType(ClassSymbol clazz) {
-        return (getFlags(clazz) & Flags.ANNOTATION) != 0;
-    }
-
-    /**
-     * Identify the containing class
-     */
-    protected ClassSymbol getContainingClass() {
-        return tsym.owner.enclClass();
-    }
-
-    /**
-     * Return true if this is a class, not an interface.
-     */
-    @Override
-    public boolean isClass() {
-        return !Modifier.isInterface(getModifiers());
-    }
-
-    /**
-     * Return true if this is a ordinary class,
-     * not an enumeration, exception, an error, or an interface.
-     */
-    @Override
-    public boolean isOrdinaryClass() {
-        if (isEnum() || isInterface() || isAnnotationType()) {
-            return false;
-        }
-        for (Type t = type; t.hasTag(CLASS); t = env.types.supertype(t)) {
-            if (t.tsym == env.syms.errorType.tsym ||
-                t.tsym == env.syms.exceptionType.tsym) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Return true if this is an enumeration.
-     * (For legacy doclets, return false.)
-     */
-    @Override
-    public boolean isEnum() {
-        return (getFlags() & Flags.ENUM) != 0
-               &&
-               !env.legacyDoclet;
-    }
-
-    /**
-     * Return true if this is an interface, but not an annotation type.
-     * Overridden by AnnotationTypeDocImpl.
-     */
-    @Override
-    public boolean isInterface() {
-        return Modifier.isInterface(getModifiers());
-    }
-
-    /**
-     * Return true if this is an exception class
-     */
-    @Override
-    public boolean isException() {
-        if (isEnum() || isInterface() || isAnnotationType()) {
-            return false;
-        }
-        for (Type t = type; t.hasTag(CLASS); t = env.types.supertype(t)) {
-            if (t.tsym == env.syms.exceptionType.tsym) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return true if this is an error class
-     */
-    @Override
-    public boolean isError() {
-        if (isEnum() || isInterface() || isAnnotationType()) {
-            return false;
-        }
-        for (Type t = type; t.hasTag(CLASS); t = env.types.supertype(t)) {
-            if (t.tsym == env.syms.errorType.tsym) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return true if this is a throwable class
-     */
-    public boolean isThrowable() {
-        if (isEnum() || isInterface() || isAnnotationType()) {
-            return false;
-        }
-        for (Type t = type; t.hasTag(CLASS); t = env.types.supertype(t)) {
-            if (t.tsym == env.syms.throwableType.tsym) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return true if this class is abstract
-     */
-    public boolean isAbstract() {
-        return Modifier.isAbstract(getModifiers());
-    }
-
-    /**
-     * Returns true if this class was synthesized by the compiler.
-     */
-    public boolean isSynthetic() {
-        return (getFlags() & Flags.SYNTHETIC) != 0;
-    }
-
-    /**
-     * Return true if this class is included in the active set.
-     * A ClassDoc is included iff either it is specified on the
-     * commandline, or if it's containing package is specified
-     * on the command line, or if it is a member class of an
-     * included class.
-     */
-
-    public boolean isIncluded() {
-        if (isIncluded) {
-            return true;
-        }
-        if (env.shouldDocument(tsym)) {
-            // Class is nameable from top-level and
-            // the class and all enclosing classes
-            // pass the modifier filter.
-            if (containingPackage().isIncluded()) {
-                return isIncluded=true;
-            }
-            ClassDoc outer = containingClass();
-            if (outer != null && outer.isIncluded()) {
-                return isIncluded=true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return the package that this class is contained in.
-     */
-    @Override
-    public PackageDoc containingPackage() {
-        PackageDocImpl p = env.getPackageDoc(tsym.packge());
-        if (p.setDocPath == false) {
-            FileObject docPath;
-            try {
-                Location location = env.fileManager.hasLocation(StandardLocation.SOURCE_PATH)
-                    ? StandardLocation.SOURCE_PATH : StandardLocation.CLASS_PATH;
-
-                docPath = env.fileManager.getFileForInput(
-                        location, p.qualifiedName(), "package.html");
-            } catch (IOException e) {
-                docPath = null;
-            }
-
-            if (docPath == null) {
-                // fall back on older semantics of looking in same directory as
-                // source file for this class
-                SourcePosition po = position();
-                if (env.fileManager instanceof StandardJavaFileManager &&
-                        po instanceof SourcePositionImpl) {
-                    URI uri = ((SourcePositionImpl) po).filename.toUri();
-                    if ("file".equals(uri.getScheme())) {
-                        File f = new File(uri);
-                        File dir = f.getParentFile();
-                        if (dir != null) {
-                            File pf = new File(dir, "package.html");
-                            if (pf.exists()) {
-                                StandardJavaFileManager sfm = (StandardJavaFileManager) env.fileManager;
-                                docPath = sfm.getJavaFileObjects(pf).iterator().next();
-                            }
-                        }
-
-                    }
-                }
-            }
-
-            p.setDocPath(docPath);
-        }
-        return p;
-    }
-
-    /**
-     * Return the class name without package qualifier - but with
-     * enclosing class qualifier - as a String.
-     * <pre>
-     * Examples:
-     *  for java.util.Hashtable
-     *  return Hashtable
-     *  for java.util.Map.Entry
-     *  return Map.Entry
-     * </pre>
-     */
-    public String name() {
-        if (name == null) {
-            name = getClassName(tsym, false);
-        }
-        return name;
-    }
-
-    private String name;
-
-    /**
-     * Return the qualified class name as a String.
-     * <pre>
-     * Example:
-     *  for java.util.Hashtable
-     *  return java.util.Hashtable
-     *  if no qualifier, just return flat name
-     * </pre>
-     */
-    public String qualifiedName() {
-        if (qualifiedName == null) {
-            qualifiedName = getClassName(tsym, true);
-        }
-        return qualifiedName;
-    }
-
-    private String qualifiedName;
-
-    /**
-     * Return unqualified name of type excluding any dimension information.
-     * <p>
-     * For example, a two dimensional array of String returns 'String'.
-     */
-    public String typeName() {
-        return name();
-    }
-
-    /**
-     * Return qualified name of type excluding any dimension information.
-     *<p>
-     * For example, a two dimensional array of String
-     * returns 'java.lang.String'.
-     */
-    public String qualifiedTypeName() {
-        return qualifiedName();
-    }
-
-    /**
-     * Return the simple name of this type.
-     */
-    public String simpleTypeName() {
-        if (simpleTypeName == null) {
-            simpleTypeName = tsym.name.toString();
-        }
-        return simpleTypeName;
-    }
-
-    private String simpleTypeName;
-
-    /**
-     * Return the qualified name and any type parameters.
-     * Each parameter is a type variable with optional bounds.
-     */
-    @Override
-    public String toString() {
-        return classToString(env, tsym, true);
-    }
-
-    /**
-     * Return the class name as a string.  If "full" is true the name is
-     * qualified, otherwise it is qualified by its enclosing class(es) only.
-     */
-    static String getClassName(ClassSymbol c, boolean full) {
-        if (full) {
-            return c.getQualifiedName().toString();
-        } else {
-            String n = "";
-            for ( ; c != null; c = c.owner.enclClass()) {
-                n = c.name + (n.isEmpty() ? "" : ".") + n;
-            }
-            return n;
-        }
-    }
-
-    /**
-     * Return the class name with any type parameters as a string.
-     * Each parameter is a type variable with optional bounds.
-     * If "full" is true all names are qualified, otherwise they are
-     * qualified by their enclosing class(es) only.
-     */
-    static String classToString(DocEnv env, ClassSymbol c, boolean full) {
-        StringBuilder s = new StringBuilder();
-        if (!c.isInner()) {             // if c is not an inner class
-            s.append(getClassName(c, full));
-        } else {
-            // c is an inner class, so include type params of outer.
-            ClassSymbol encl = c.owner.enclClass();
-            s.append(classToString(env, encl, full))
-             .append('.')
-             .append(c.name);
-        }
-        s.append(TypeMaker.typeParametersString(env, c, full));
-        return s.toString();
-    }
-
-    /**
-     * Is this class (or any enclosing class) generic?  That is, does
-     * it have type parameters?
-     */
-    static boolean isGeneric(ClassSymbol c) {
-        return c.type.allparams().nonEmpty();
-    }
-
-    /**
-     * Return the formal type parameters of this class or interface.
-     * Return an empty array if there are none.
-     */
-    public TypeVariable[] typeParameters() {
-        if (env.legacyDoclet) {
-            return new TypeVariable[0];
-        }
-        TypeVariable res[] = new TypeVariable[type.getTypeArguments().length()];
-        TypeMaker.getTypes(env, type.getTypeArguments(), res);
-        return res;
-    }
-
-    /**
-     * Return the type parameter tags of this class or interface.
-     */
-    public ParamTag[] typeParamTags() {
-        return (env.legacyDoclet)
-            ? new ParamTag[0]
-            : comment().typeParamTags();
-    }
-
-    /**
-     * Return the modifier string for this class. If it's an interface
-     * exclude 'abstract' keyword from the modifier string
-     */
-    @Override
-    public String modifiers() {
-        return Modifier.toString(modifierSpecifier());
-    }
-
-    @Override
-    public int modifierSpecifier() {
-        int modifiers = getModifiers();
-        return (isInterface() || isAnnotationType())
-                ? modifiers & ~Modifier.ABSTRACT
-                : modifiers;
-    }
-
-    /**
-     * Return the superclass of this class
-     *
-     * @return the ClassDocImpl for the superclass of this class, null
-     * if there is no superclass.
-     */
-    public ClassDoc superclass() {
-        if (isInterface() || isAnnotationType()) return null;
-        if (tsym == env.syms.objectType.tsym) return null;
-        ClassSymbol c = (ClassSymbol)env.types.supertype(type).tsym;
-        if (c == null || c == tsym) c = (ClassSymbol)env.syms.objectType.tsym;
-        return env.getClassDoc(c);
-    }
-
-    /**
-     * Return the superclass of this class.  Return null if this is an
-     * interface.  A superclass is represented by either a
-     * <code>ClassDoc</code> or a <code>ParameterizedType</code>.
-     */
-    public com.sun.javadoc.Type superclassType() {
-        if (isInterface() || isAnnotationType() ||
-                (tsym == env.syms.objectType.tsym))
-            return null;
-        Type sup = env.types.supertype(type);
-        return TypeMaker.getType(env,
-                                 (sup.hasTag(TypeTag.NONE)) ? env.syms.objectType : sup);
-    }
-
-    /**
-     * Test whether this class is a subclass of the specified class.
-     *
-     * @param cd the candidate superclass.
-     * @return true if cd is a superclass of this class.
-     */
-    public boolean subclassOf(ClassDoc cd) {
-        return tsym.isSubClass(((ClassDocImpl)cd).tsym, env.types);
-    }
-
-    /**
-     * Return interfaces implemented by this class or interfaces
-     * extended by this interface.
-     *
-     * @return An array of ClassDocImpl representing the interfaces.
-     * Return an empty array if there are no interfaces.
-     */
-    public ClassDoc[] interfaces() {
-        ListBuffer<ClassDocImpl> ta = new ListBuffer<>();
-        for (Type t : env.types.interfaces(type)) {
-            ta.append(env.getClassDoc((ClassSymbol)t.tsym));
-        }
-        //### Cache ta here?
-        return ta.toArray(new ClassDocImpl[ta.length()]);
-    }
-
-    /**
-     * Return interfaces implemented by this class or interfaces extended
-     * by this interface. Includes only directly-declared interfaces, not
-     * inherited interfaces.
-     * Return an empty array if there are no interfaces.
-     */
-    public com.sun.javadoc.Type[] interfaceTypes() {
-        //### Cache result here?
-        return TypeMaker.getTypes(env, env.types.interfaces(type));
-    }
-
-    /**
-     * Return fields in class.
-     * @param filter include only the included fields if filter==true
-     */
-    public FieldDoc[] fields(boolean filter) {
-        return fields(filter, false);
-    }
-
-    /**
-     * Return included fields in class.
-     */
-    public FieldDoc[] fields() {
-        return fields(true, false);
-    }
-
-    /**
-     * Return the enum constants if this is an enum type.
-     */
-    public FieldDoc[] enumConstants() {
-        return fields(false, true);
-    }
-
-    /**
-     * Return fields in class.
-     * @param filter  if true, return only the included fields
-     * @param enumConstants  if true, return the enum constants instead
-     */
-    private FieldDoc[] fields(boolean filter, boolean enumConstants) {
-        List<FieldDocImpl> fields = List.nil();
-        for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
-            if (sym != null && sym.kind == VAR) {
-                VarSymbol s = (VarSymbol)sym;
-                boolean isEnum = ((s.flags() & Flags.ENUM) != 0) &&
-                                 !env.legacyDoclet;
-                if (isEnum == enumConstants &&
-                        (!filter || env.shouldDocument(s))) {
-                    fields = fields.prepend(env.getFieldDoc(s));
-                }
-            }
-        }
-        return fields.toArray(new FieldDocImpl[fields.length()]);
-    }
-
-    /**
-     * Return methods in class.
-     * This method is overridden by AnnotationTypeDocImpl.
-     *
-     * @param filter include only the included methods if filter==true
-     * @return an array of MethodDocImpl for representing the visible
-     * methods in this class.  Does not include constructors.
-     */
-    public MethodDoc[] methods(boolean filter) {
-        Names names = tsym.name.table.names;
-        List<MethodDocImpl> methods = List.nil();
-        for (Symbol sym :tsym.members().getSymbols(NON_RECURSIVE)) {
-            if (sym != null
-                && sym.kind == MTH
-                && sym.name != names.init
-                && sym.name != names.clinit) {
-                MethodSymbol s = (MethodSymbol)sym;
-                if (!filter || env.shouldDocument(s)) {
-                    methods = methods.prepend(env.getMethodDoc(s));
-                }
-            }
-        }
-        //### Cache methods here?
-        return methods.toArray(new MethodDocImpl[methods.length()]);
-    }
-
-    /**
-     * Return included methods in class.
-     *
-     * @return an array of MethodDocImpl for representing the visible
-     * methods in this class.  Does not include constructors.
-     */
-    public MethodDoc[] methods() {
-        return methods(true);
-    }
-
-    /**
-     * Return constructors in class.
-     *
-     * @param filter include only the included constructors if filter==true
-     * @return an array of ConstructorDocImpl for representing the visible
-     * constructors in this class.
-     */
-    public ConstructorDoc[] constructors(boolean filter) {
-        Names names = tsym.name.table.names;
-        List<ConstructorDocImpl> constructors = List.nil();
-        for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
-            if (sym != null &&
-                sym.kind == MTH && sym.name == names.init) {
-                MethodSymbol s = (MethodSymbol)sym;
-                if (!filter || env.shouldDocument(s)) {
-                    constructors = constructors.prepend(env.getConstructorDoc(s));
-                }
-            }
-        }
-        //### Cache constructors here?
-        return constructors.toArray(new ConstructorDocImpl[constructors.length()]);
-    }
-
-    /**
-     * Return included constructors in class.
-     *
-     * @return an array of ConstructorDocImpl for representing the visible
-     * constructors in this class.
-     */
-    public ConstructorDoc[] constructors() {
-        return constructors(true);
-    }
-
-    /**
-     * Adds all inner classes of this class, and their
-     * inner classes recursively, to the list l.
-     */
-    void addAllClasses(ListBuffer<ClassDocImpl> l, boolean filtered) {
-        try {
-            if (isSynthetic()) return;
-            // sometimes synthetic classes are not marked synthetic
-            if (!JavadocTool.isValidClassName(tsym.name.toString())) return;
-            if (filtered && !env.shouldDocument(tsym)) return;
-            if (l.contains(this)) return;
-            l.append(this);
-            List<ClassDocImpl> more = List.nil();
-            for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
-                if (sym != null && sym.kind == TYP) {
-                    ClassSymbol s = (ClassSymbol)sym;
-                    ClassDocImpl c = env.getClassDoc(s);
-                    if (c.isSynthetic()) continue;
-                    if (c != null) more = more.prepend(c);
-                }
-            }
-            // this extra step preserves the ordering from oldjavadoc
-            for (; more.nonEmpty(); more=more.tail) {
-                more.head.addAllClasses(l, filtered);
-            }
-        } catch (CompletionFailure e) {
-            // quietly ignore completion failures
-        }
-    }
-
-    /**
-     * Return inner classes within this class.
-     *
-     * @param filter include only the included inner classes if filter==true.
-     * @return an array of ClassDocImpl for representing the visible
-     * classes defined in this class. Anonymous and local classes
-     * are not included.
-     */
-    public ClassDoc[] innerClasses(boolean filter) {
-        ListBuffer<ClassDocImpl> innerClasses = new ListBuffer<>();
-        for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
-            if (sym != null && sym.kind == TYP) {
-                ClassSymbol s = (ClassSymbol)sym;
-                if ((s.flags_field & Flags.SYNTHETIC) != 0) continue;
-                if (!filter || env.isVisible(s)) {
-                    innerClasses.prepend(env.getClassDoc(s));
-                }
-            }
-        }
-        //### Cache classes here?
-        return innerClasses.toArray(new ClassDocImpl[innerClasses.length()]);
-    }
-
-    /**
-     * Return included inner classes within this class.
-     *
-     * @return an array of ClassDocImpl for representing the visible
-     * classes defined in this class. Anonymous and local classes
-     * are not included.
-     */
-    public ClassDoc[] innerClasses() {
-        return innerClasses(true);
-    }
-
-    /**
-     * Find a class within the context of this class.
-     * Search order: qualified name, in this class (inner),
-     * in this package, in the class imports, in the package
-     * imports.
-     * Return the ClassDocImpl if found, null if not found.
-     */
-    //### The specified search order is not the normal rule the
-    //### compiler would use.  Leave as specified or change it?
-    public ClassDoc findClass(String className) {
-        ClassDoc searchResult = searchClass(className);
-        if (searchResult == null) {
-            ClassDocImpl enclosingClass = (ClassDocImpl)containingClass();
-            //Expand search space to include enclosing class.
-            while (enclosingClass != null && enclosingClass.containingClass() != null) {
-                enclosingClass = (ClassDocImpl)enclosingClass.containingClass();
-            }
-            searchResult = enclosingClass == null ?
-                null : enclosingClass.searchClass(className);
-        }
-        return searchResult;
-    }
-
-    private ClassDoc searchClass(String className) {
-        Names names = tsym.name.table.names;
-
-        // search by qualified name first
-        ClassDoc cd = env.lookupClass(className);
-        if (cd != null) {
-            return cd;
-        }
-
-        // search inner classes
-        //### Add private entry point to avoid creating array?
-        //### Replicate code in innerClasses here to avoid consing?
-        for (ClassDoc icd : innerClasses()) {
-            if (icd.name().equals(className) ||
-                    //### This is from original javadoc but it looks suspicious to me...
-                    //### I believe it is attempting to compensate for the confused
-                    //### convention of including the nested class qualifiers in the
-                    //### 'name' of the inner class, rather than the true simple name.
-                    icd.name().endsWith("." + className)) {
-                return icd;
-            } else {
-                ClassDoc innercd = ((ClassDocImpl) icd).searchClass(className);
-                if (innercd != null) {
-                    return innercd;
-                }
-            }
-        }
-
-        // check in this package
-        cd = containingPackage().findClass(className);
-        if (cd != null) {
-            return cd;
-        }
-
-        // make sure that this symbol has been completed
-        tsym.complete();
-
-        // search imports
-
-        if (tsym.sourcefile != null) {
-
-            //### This information is available only for source classes.
-
-            Env<AttrContext> compenv = env.enter.getEnv(tsym);
-            if (compenv == null) return null;
-
-            Scope s = compenv.toplevel.namedImportScope;
-            for (Symbol sym : s.getSymbolsByName(names.fromString(className))) {
-                if (sym.kind == TYP) {
-                    ClassDoc c = env.getClassDoc((ClassSymbol)sym);
-                    return c;
-                }
-            }
-
-            s = compenv.toplevel.starImportScope;
-            for (Symbol sym : s.getSymbolsByName(names.fromString(className))) {
-                if (sym.kind == TYP) {
-                    ClassDoc c = env.getClassDoc((ClassSymbol)sym);
-                    return c;
-                }
-            }
-        }
-
-        return null; // not found
-    }
-
-
-    private boolean hasParameterTypes(MethodSymbol method, String[] argTypes) {
-
-        if (argTypes == null) {
-            // wildcard
-            return true;
-        }
-
-        int i = 0;
-        List<Type> types = method.type.getParameterTypes();
-
-        if (argTypes.length != types.length()) {
-            return false;
-        }
-
-        for (Type t : types) {
-            String argType = argTypes[i++];
-            // For vararg method, "T..." matches type T[].
-            if (i == argTypes.length) {
-                argType = argType.replace("...", "[]");
-            }
-            if (!hasTypeName(env.types.erasure(t), argType)) {  //###(gj)
-                return false;
-            }
-        }
-        return true;
-    }
-    // where
-    private boolean hasTypeName(Type t, String name) {
-        return
-            name.equals(TypeMaker.getTypeName(t, true))
-            ||
-            name.equals(TypeMaker.getTypeName(t, false))
-            ||
-            (qualifiedName() + "." + name).equals(TypeMaker.getTypeName(t, true));
-    }
-
-
-
-    /**
-     * Find a method in this class scope.
-     * Search order: this class, interfaces, superclasses, outerclasses.
-     * Note that this is not necessarily what the compiler would do!
-     *
-     * @param methodName the unqualified name to search for.
-     * @param paramTypes the array of Strings for method parameter types.
-     * @return the first MethodDocImpl which matches, null if not found.
-     */
-    public MethodDocImpl findMethod(String methodName, String[] paramTypes) {
-        // Use hash table 'searched' to avoid searching same class twice.
-        //### It is not clear how this could happen.
-        return searchMethod(methodName, paramTypes, new HashSet<ClassDocImpl>());
-    }
-
-    private MethodDocImpl searchMethod(String methodName,
-                                       String[] paramTypes, Set<ClassDocImpl> searched) {
-        //### Note that this search is not necessarily what the compiler would do!
-
-        Names names = tsym.name.table.names;
-        // do not match constructors
-        if (names.init.contentEquals(methodName)) {
-            return null;
-        }
-
-        ClassDocImpl cdi;
-        MethodDocImpl mdi;
-
-        if (searched.contains(this)) {
-            return null;
-        }
-        searched.add(this);
-
-        //DEBUG
-        /*---------------------------------*
-         System.out.print("searching " + this + " for " + methodName);
-         if (paramTypes == null) {
-         System.out.println("()");
-         } else {
-         System.out.print("(");
-         for (int k=0; k < paramTypes.length; k++) {
-         System.out.print(paramTypes[k]);
-         if ((k + 1) < paramTypes.length) {
-         System.out.print(", ");
-         }
-         }
-         System.out.println(")");
-         }
-         *---------------------------------*/
-
-        // search current class
-
-        //### Using modifier filter here isn't really correct,
-        //### but emulates the old behavior.  Instead, we should
-        //### apply the normal rules of visibility and inheritance.
-
-        if (paramTypes == null) {
-            // If no parameters specified, we are allowed to return
-            // any method with a matching name.  In practice, the old
-            // code returned the first method, which is now the last!
-            // In order to provide textually identical results, we
-            // attempt to emulate the old behavior.
-            MethodSymbol lastFound = null;
-            for (Symbol sym : tsym.members().getSymbolsByName(names.fromString(methodName))) {
-                if (sym.kind == MTH) {
-                    //### Should intern methodName as Name.
-                    if (sym.name.toString().equals(methodName)) {
-                        lastFound = (MethodSymbol)sym;
-                    }
-                }
-            }
-            if (lastFound != null) {
-                return env.getMethodDoc(lastFound);
-            }
-        } else {
-            for (Symbol sym : tsym.members().getSymbolsByName(names.fromString(methodName))) {
-                if (sym != null &&
-                    sym.kind == MTH) {
-                    //### Should intern methodName as Name.
-                    if (hasParameterTypes((MethodSymbol)sym, paramTypes)) {
-                        return env.getMethodDoc((MethodSymbol)sym);
-                    }
-                }
-            }
-        }
-
-        //### If we found a MethodDoc above, but which did not pass
-        //### the modifier filter, we should return failure here!
-
-        // search superclass
-        cdi = (ClassDocImpl)superclass();
-        if (cdi != null) {
-            mdi = cdi.searchMethod(methodName, paramTypes, searched);
-            if (mdi != null) {
-                return mdi;
-            }
-        }
-
-        // search interfaces
-        for (ClassDoc intf : interfaces()) {
-            cdi = (ClassDocImpl) intf;
-            mdi = cdi.searchMethod(methodName, paramTypes, searched);
-            if (mdi != null) {
-                return mdi;
-            }
-        }
-
-        // search enclosing class
-        cdi = (ClassDocImpl)containingClass();
-        if (cdi != null) {
-            mdi = cdi.searchMethod(methodName, paramTypes, searched);
-            if (mdi != null) {
-                return mdi;
-            }
-        }
-
-        //###(gj) As a temporary measure until type variables are better
-        //### handled, try again without the parameter types.
-        //### This should most often find the right method, and occassionally
-        //### find the wrong one.
-        //if (paramTypes != null) {
-        //    return findMethod(methodName, null);
-        //}
-
-        return null;
-    }
-
-    /**
-     * Find constructor in this class.
-     *
-     * @param constrName the unqualified name to search for.
-     * @param paramTypes the array of Strings for constructor parameters.
-     * @return the first ConstructorDocImpl which matches, null if not found.
-     */
-    public ConstructorDoc findConstructor(String constrName,
-                                          String[] paramTypes) {
-        Names names = tsym.name.table.names;
-        for (Symbol sym : tsym.members().getSymbolsByName(names.fromString("<init>"))) {
-            if (sym.kind == MTH) {
-                if (hasParameterTypes((MethodSymbol)sym, paramTypes)) {
-                    return env.getConstructorDoc((MethodSymbol)sym);
-                }
-            }
-        }
-
-        //###(gj) As a temporary measure until type variables are better
-        //### handled, try again without the parameter types.
-        //### This will often find the right constructor, and occassionally
-        //### find the wrong one.
-        //if (paramTypes != null) {
-        //    return findConstructor(constrName, null);
-        //}
-
-        return null;
-    }
-
-    /**
-     * Find a field in this class scope.
-     * Search order: this class, outerclasses, interfaces,
-     * superclasses. IMP: If see tag is defined in an inner class,
-     * which extends a super class and if outerclass and the super
-     * class have a visible field in common then Java compiler cribs
-     * about the ambiguity, but the following code will search in the
-     * above given search order.
-     *
-     * @param fieldName the unqualified name to search for.
-     * @return the first FieldDocImpl which matches, null if not found.
-     */
-    public FieldDoc findField(String fieldName) {
-        return searchField(fieldName, new HashSet<ClassDocImpl>());
-    }
-
-    private FieldDocImpl searchField(String fieldName, Set<ClassDocImpl> searched) {
-        Names names = tsym.name.table.names;
-        if (searched.contains(this)) {
-            return null;
-        }
-        searched.add(this);
-
-        for (Symbol sym : tsym.members().getSymbolsByName(names.fromString(fieldName))) {
-            if (sym.kind == VAR) {
-                //### Should intern fieldName as Name.
-                return env.getFieldDoc((VarSymbol)sym);
-            }
-        }
-
-        //### If we found a FieldDoc above, but which did not pass
-        //### the modifier filter, we should return failure here!
-
-        ClassDocImpl cdi = (ClassDocImpl)containingClass();
-        if (cdi != null) {
-            FieldDocImpl fdi = cdi.searchField(fieldName, searched);
-            if (fdi != null) {
-                return fdi;
-            }
-        }
-
-        // search superclass
-        cdi = (ClassDocImpl)superclass();
-        if (cdi != null) {
-            FieldDocImpl fdi = cdi.searchField(fieldName, searched);
-            if (fdi != null) {
-                return fdi;
-            }
-        }
-
-        // search interfaces
-        for (ClassDoc intf : interfaces()) {
-            cdi = (ClassDocImpl) intf;
-            FieldDocImpl fdi = cdi.searchField(fieldName, searched);
-            if (fdi != null) {
-                return fdi;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the list of classes declared as imported.
-     * These are called "single-type-import declarations" in the JLS.
-     * This method is deprecated in the ClassDoc interface.
-     *
-     * @return an array of ClassDocImpl representing the imported classes.
-     *
-     * @deprecated  Import declarations are implementation details that
-     *          should not be exposed here.  In addition, not all imported
-     *          classes are imported through single-type-import declarations.
-     */
-    @Deprecated(since="9", forRemoval=true)
-    public ClassDoc[] importedClasses() {
-        // information is not available for binary classfiles
-        if (tsym.sourcefile == null) return new ClassDoc[0];
-
-        ListBuffer<ClassDocImpl> importedClasses = new ListBuffer<>();
-
-        Env<AttrContext> compenv = env.enter.getEnv(tsym);
-        if (compenv == null) return new ClassDocImpl[0];
-
-        Name asterisk = tsym.name.table.names.asterisk;
-        for (JCTree t : compenv.toplevel.defs) {
-            if (t.hasTag(IMPORT)) {
-                JCTree imp = ((JCImport) t).qualid;
-                if ((TreeInfo.name(imp) != asterisk) &&
-                    imp.type.tsym.kind.matches(KindSelector.TYP)) {
-                    importedClasses.append(
-                            env.getClassDoc((ClassSymbol)imp.type.tsym));
-                }
-            }
-        }
-
-        return importedClasses.toArray(new ClassDocImpl[importedClasses.length()]);
-    }
-
-    /**
-     * Get the list of packages declared as imported.
-     * These are called "type-import-on-demand declarations" in the JLS.
-     * This method is deprecated in the ClassDoc interface.
-     *
-     * @return an array of PackageDocImpl representing the imported packages.
-     *
-     * ###NOTE: the syntax supports importing all inner classes from a class as well.
-     * @deprecated  Import declarations are implementation details that
-     *          should not be exposed here.  In addition, this method's
-     *          return type does not allow for all type-import-on-demand
-     *          declarations to be returned.
-     */
-    @Deprecated(since="9", forRemoval=true)
-    public PackageDoc[] importedPackages() {
-        // information is not available for binary classfiles
-        if (tsym.sourcefile == null) return new PackageDoc[0];
-
-        ListBuffer<PackageDocImpl> importedPackages = new ListBuffer<>();
-
-        //### Add the implicit "import java.lang.*" to the result
-        Names names = tsym.name.table.names;
-        importedPackages.append(env.getPackageDoc(env.syms.enterPackage(env.syms.java_base, names.java_lang)));
-
-        Env<AttrContext> compenv = env.enter.getEnv(tsym);
-        if (compenv == null) return new PackageDocImpl[0];
-
-        for (JCTree t : compenv.toplevel.defs) {
-            if (t.hasTag(IMPORT)) {
-                JCTree imp = ((JCImport) t).qualid;
-                if (TreeInfo.name(imp) == names.asterisk) {
-                    JCFieldAccess sel = (JCFieldAccess)imp;
-                    Symbol s = sel.selected.type.tsym;
-                    PackageDocImpl pdoc = env.getPackageDoc(s.packge());
-                    if (!importedPackages.contains(pdoc))
-                        importedPackages.append(pdoc);
-                }
-            }
-        }
-
-        return importedPackages.toArray(new PackageDocImpl[importedPackages.length()]);
-    }
-
-    /**
-     * Return the type's dimension information.
-     * Always return "", as this is not an array type.
-     */
-    public String dimension() {
-        return "";
-    }
-
-    /**
-     * Return this type as a class, which it already is.
-     */
-    public ClassDoc asClassDoc() {
-        return this;
-    }
-
-    /**
-     * Return null (unless overridden), as this is not an annotation type.
-     */
-    public AnnotationTypeDoc asAnnotationTypeDoc() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not a class instantiation.
-     */
-    public ParameterizedType asParameterizedType() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not a type variable.
-     */
-    public TypeVariable asTypeVariable() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not a wildcard type.
-     */
-    public WildcardType asWildcardType() {
-        return null;
-    }
-
-    /**
-     * Returns null, as this is not an annotated type.
-     */
-    public AnnotatedType asAnnotatedType() {
-        return null;
-    }
-
-    /**
-     * Return false, as this is not a primitive type.
-     */
-    public boolean isPrimitive() {
-        return false;
-    }
-
-    //--- Serialization ---
-
-    //### These methods ignore modifier filter.
-
-    /**
-     * Return true if this class implements <code>java.io.Serializable</code>.
-     *
-     * Since <code>java.io.Externalizable</code> extends
-     * <code>java.io.Serializable</code>,
-     * Externalizable objects are also Serializable.
-     */
-    public boolean isSerializable() {
-        try {
-            return env.types.isSubtype(type, env.syms.serializableType);
-        } catch (CompletionFailure ex) {
-            // quietly ignore completion failures
-            return false;
-        }
-    }
-
-    /**
-     * Return true if this class implements
-     * <code>java.io.Externalizable</code>.
-     */
-    public boolean isExternalizable() {
-        try {
-            return env.types.isSubtype(type, env.externalizableSym.type);
-        } catch (CompletionFailure ex) {
-            // quietly ignore completion failures
-            return false;
-        }
-    }
-
-    /**
-     * Return the serialization methods for this class.
-     *
-     * @return an array of <code>MethodDocImpl</code> that represents
-     * the serialization methods for this class.
-     */
-    public MethodDoc[] serializationMethods() {
-        if (serializedForm == null) {
-            serializedForm = new SerializedForm(env, tsym, this);
-        }
-        //### Clone this?
-        return serializedForm.methods();
-    }
-
-    /**
-     * Return the Serializable fields of class.<p>
-     *
-     * Return either a list of default fields documented by
-     * <code>serial</code> tag<br>
-     * or return a single <code>FieldDoc</code> for
-     * <code>serialPersistentField</code> member.
-     * There should be a <code>serialField</code> tag for
-     * each Serializable field defined by an <code>ObjectStreamField</code>
-     * array component of <code>serialPersistentField</code>.
-     *
-     * @return an array of {@code FieldDoc} for the Serializable fields
-     *         of this class.
-     *
-     * @see #definesSerializableFields()
-     * @see SerialFieldTagImpl
-     */
-    public FieldDoc[] serializableFields() {
-        if (serializedForm == null) {
-            serializedForm = new SerializedForm(env, tsym, this);
-        }
-        //### Clone this?
-        return serializedForm.fields();
-    }
-
-    /**
-     * Return true if Serializable fields are explicitly defined with
-     * the special class member <code>serialPersistentFields</code>.
-     *
-     * @see #serializableFields()
-     * @see SerialFieldTagImpl
-     */
-    public boolean definesSerializableFields() {
-        if (!isSerializable() || isExternalizable()) {
-            return false;
-        } else {
-            if (serializedForm == null) {
-                serializedForm = new SerializedForm(env, tsym, this);
-            }
-            //### Clone this?
-            return serializedForm.definesSerializableFields();
-        }
-    }
-
-    /**
-     * Determine if a class is a RuntimeException.
-     * <p>
-     * Used only by ThrowsTagImpl.
-     */
-    boolean isRuntimeException() {
-        return tsym.isSubClass(env.syms.runtimeExceptionType.tsym, env.types);
-    }
-
-    /**
-     * Return the source position of the entity, or null if
-     * no position is available.
-     */
-    @Override
-    public SourcePosition position() {
-        if (tsym.sourcefile == null) return null;
-        return SourcePositionImpl.make(tsym.sourcefile,
-                                       (tree==null) ? Position.NOPOS : tree.pos,
-                                       lineMap);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Comment.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,462 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import com.sun.javadoc.*;
-import com.sun.tools.javac.util.ListBuffer;
-
-/**
- * Comment contains all information in comment part.
- *      It allows users to get first sentence of this comment, get
- *      comment for different tags...
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- * @author Atul M Dambalkar
- * @author Neal Gafter (rewrite)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class Comment {
-
-    /**
-     * sorted comments with different tags.
-     */
-    private final ListBuffer<Tag> tagList = new ListBuffer<>();
-
-    /**
-     * text minus any tags.
-     */
-    private String text;
-
-    /**
-     * Doc environment
-     */
-    private final DocEnv docenv;
-
-    /**
-     * constructor of Comment.
-     */
-    Comment(final DocImpl holder, final String commentString) {
-        this.docenv = holder.env;
-
-        /**
-         * Separate the comment into the text part and zero to N tags.
-         * Simple state machine is in one of three states:
-         * <pre>
-         * IN_TEXT: parsing the comment text or tag text.
-         * TAG_NAME: parsing the name of a tag.
-         * TAG_GAP: skipping through the gap between the tag name and
-         * the tag text.
-         * </pre>
-         */
-        @SuppressWarnings("fallthrough")
-        class CommentStringParser {
-            /**
-             * The entry point to the comment string parser
-             */
-            void parseCommentStateMachine() {
-                final int IN_TEXT = 1;
-                final int TAG_GAP = 2;
-                final int TAG_NAME = 3;
-                int state = TAG_GAP;
-                boolean newLine = true;
-                String tagName = null;
-                int tagStart = 0;
-                int textStart = 0;
-                int lastNonWhite = -1;
-                int len = commentString.length();
-                for (int inx = 0; inx < len; ++inx) {
-                    char ch = commentString.charAt(inx);
-                    boolean isWhite = Character.isWhitespace(ch);
-                    switch (state)  {
-                        case TAG_NAME:
-                            if (isWhite) {
-                                tagName = commentString.substring(tagStart, inx);
-                                state = TAG_GAP;
-                            }
-                            break;
-                        case TAG_GAP:
-                            if (isWhite) {
-                                break;
-                            }
-                            textStart = inx;
-                            state = IN_TEXT;
-                            /* fall thru */
-                        case IN_TEXT:
-                            if (newLine && ch == '@') {
-                                parseCommentComponent(tagName, textStart,
-                                                      lastNonWhite+1);
-                                tagStart = inx;
-                                state = TAG_NAME;
-                            }
-                            break;
-                    }
-                    if (ch == '\n') {
-                        newLine = true;
-                    } else if (!isWhite) {
-                        lastNonWhite = inx;
-                        newLine = false;
-                    }
-                }
-                // Finish what's currently being processed
-                switch (state)  {
-                    case TAG_NAME:
-                        tagName = commentString.substring(tagStart, len);
-                        /* fall thru */
-                    case TAG_GAP:
-                        textStart = len;
-                        /* fall thru */
-                    case IN_TEXT:
-                        parseCommentComponent(tagName, textStart, lastNonWhite+1);
-                        break;
-                }
-            }
-
-            /**
-             * Save away the last parsed item.
-             */
-            void parseCommentComponent(String tagName,
-                                       int from, int upto) {
-                String tx = upto <= from ? "" : commentString.substring(from, upto);
-                if (tagName == null) {
-                    text = tx;
-                } else {
-                    TagImpl tag;
-                    switch (tagName) {
-                        case "@exception":
-                        case "@throws":
-                            warnIfEmpty(tagName, tx);
-                            tag = new ThrowsTagImpl(holder, tagName, tx);
-                            break;
-                        case "@param":
-                            warnIfEmpty(tagName, tx);
-                            tag = new ParamTagImpl(holder, tagName, tx);
-                            break;
-                        case "@see":
-                            warnIfEmpty(tagName, tx);
-                            tag = new SeeTagImpl(holder, tagName, tx);
-                            break;
-                        case "@serialField":
-                            warnIfEmpty(tagName, tx);
-                            tag = new SerialFieldTagImpl(holder, tagName, tx);
-                            break;
-                        case "@return":
-                            warnIfEmpty(tagName, tx);
-                            tag = new TagImpl(holder, tagName, tx);
-                            break;
-                        case "@author":
-                            warnIfEmpty(tagName, tx);
-                            tag = new TagImpl(holder, tagName, tx);
-                            break;
-                        case "@version":
-                            warnIfEmpty(tagName, tx);
-                            tag = new TagImpl(holder, tagName, tx);
-                            break;
-                        default:
-                            tag = new TagImpl(holder, tagName, tx);
-                            break;
-                    }
-                    tagList.append(tag);
-                }
-            }
-
-            void warnIfEmpty(String tagName, String tx) {
-                if (tx.length() == 0) {
-                    docenv.warning(holder, "tag.tag_has_no_arguments", tagName);
-                }
-            }
-
-        }
-
-        new CommentStringParser().parseCommentStateMachine();
-    }
-
-    /**
-     * Return the text of the comment.
-     */
-    String commentText() {
-        return text;
-    }
-
-    /**
-     * Return all tags in this comment.
-     */
-    Tag[] tags() {
-        return tagList.toArray(new Tag[tagList.length()]);
-    }
-
-    /**
-     * Return tags of the specified kind in this comment.
-     */
-    Tag[] tags(String tagname) {
-        ListBuffer<Tag> found = new ListBuffer<>();
-        String target = tagname;
-        if (target.charAt(0) != '@') {
-            target = "@" + target;
-        }
-        for (Tag tag : tagList) {
-            if (tag.kind().equals(target)) {
-                found.append(tag);
-            }
-        }
-        return found.toArray(new Tag[found.length()]);
-    }
-
-    /**
-     * Return throws tags in this comment.
-     */
-    ThrowsTag[] throwsTags() {
-        ListBuffer<ThrowsTag> found = new ListBuffer<>();
-        for (Tag next : tagList) {
-            if (next instanceof ThrowsTag) {
-                found.append((ThrowsTag)next);
-            }
-        }
-        return found.toArray(new ThrowsTag[found.length()]);
-    }
-
-    /**
-     * Return param tags (excluding type param tags) in this comment.
-     */
-    ParamTag[] paramTags() {
-        return paramTags(false);
-    }
-
-    /**
-     * Return type param tags in this comment.
-     */
-    ParamTag[] typeParamTags() {
-        return paramTags(true);
-    }
-
-    /**
-     * Return param tags in this comment.  If typeParams is true
-     * include only type param tags, otherwise include only ordinary
-     * param tags.
-     */
-    private ParamTag[] paramTags(boolean typeParams) {
-        ListBuffer<ParamTag> found = new ListBuffer<>();
-        for (Tag next : tagList) {
-            if (next instanceof ParamTag) {
-                ParamTag p = (ParamTag)next;
-                if (typeParams == p.isTypeParameter()) {
-                    found.append(p);
-                }
-            }
-        }
-        return found.toArray(new ParamTag[found.length()]);
-    }
-
-    /**
-     * Return see also tags in this comment.
-     */
-    SeeTag[] seeTags() {
-        ListBuffer<SeeTag> found = new ListBuffer<>();
-        for (Tag next : tagList) {
-            if (next instanceof SeeTag) {
-                found.append((SeeTag)next);
-            }
-        }
-        return found.toArray(new SeeTag[found.length()]);
-    }
-
-    /**
-     * Return serialField tags in this comment.
-     */
-    SerialFieldTag[] serialFieldTags() {
-        ListBuffer<SerialFieldTag> found = new ListBuffer<>();
-        for (Tag next : tagList) {
-            if (next instanceof SerialFieldTag) {
-                found.append((SerialFieldTag)next);
-            }
-        }
-        return found.toArray(new SerialFieldTag[found.length()]);
-    }
-
-    /**
-     * Return array of tags with text and inline See Tags for a Doc comment.
-     */
-    static Tag[] getInlineTags(DocImpl holder, String inlinetext) {
-        ListBuffer<Tag> taglist = new ListBuffer<>();
-        int delimend = 0, textstart = 0, len = inlinetext.length();
-        boolean inPre = false;
-        DocEnv docenv = holder.env;
-
-        if (len == 0) {
-            return taglist.toArray(new Tag[taglist.length()]);
-        }
-        while (true) {
-            int linkstart;
-            if ((linkstart = inlineTagFound(holder, inlinetext,
-                                            textstart)) == -1) {
-                taglist.append(new TagImpl(holder, "Text",
-                                           inlinetext.substring(textstart)));
-                break;
-            } else {
-                inPre = scanForPre(inlinetext, textstart, linkstart, inPre);
-                int seetextstart = linkstart;
-                for (int i = linkstart; i < inlinetext.length(); i++) {
-                    char c = inlinetext.charAt(i);
-                    if (Character.isWhitespace(c) ||
-                        c == '}') {
-                        seetextstart = i;
-                        break;
-                     }
-                }
-                String linkName = inlinetext.substring(linkstart+2, seetextstart);
-                if (!(inPre && (linkName.equals("code") || linkName.equals("literal")))) {
-                    //Move past the white space after the inline tag name.
-                    while (Character.isWhitespace(inlinetext.
-                                                      charAt(seetextstart))) {
-                        if (inlinetext.length() <= seetextstart) {
-                            taglist.append(new TagImpl(holder, "Text",
-                                                       inlinetext.substring(textstart, seetextstart)));
-                            docenv.warning(holder,
-                                           "tag.Improper_Use_Of_Link_Tag",
-                                           inlinetext);
-                            return taglist.toArray(new Tag[taglist.length()]);
-                        } else {
-                            seetextstart++;
-                        }
-                    }
-                }
-                taglist.append(new TagImpl(holder, "Text",
-                                           inlinetext.substring(textstart, linkstart)));
-                textstart = seetextstart;   // this text is actually seetag
-                if ((delimend = findInlineTagDelim(inlinetext, textstart)) == -1) {
-                    //Missing closing '}' character.
-                    // store the text as it is with the {@link.
-                    taglist.append(new TagImpl(holder, "Text",
-                                               inlinetext.substring(textstart)));
-                    docenv.warning(holder,
-                                   "tag.End_delimiter_missing_for_possible_SeeTag",
-                                   inlinetext);
-                    return taglist.toArray(new Tag[taglist.length()]);
-                } else {
-                    //Found closing '}' character.
-                    if (linkName.equals("see")
-                           || linkName.equals("link")
-                           || linkName.equals("linkplain")) {
-                        taglist.append( new SeeTagImpl(holder, "@" + linkName,
-                              inlinetext.substring(textstart, delimend)));
-                    } else {
-                        taglist.append( new TagImpl(holder, "@" + linkName,
-                              inlinetext.substring(textstart, delimend)));
-                    }
-                    textstart = delimend + 1;
-                }
-            }
-            if (textstart == inlinetext.length()) {
-                break;
-            }
-        }
-        return taglist.toArray(new Tag[taglist.length()]);
-    }
-
-    /** regex for case-insensitive match for {@literal <pre> } and  {@literal </pre> }. */
-    private static final Pattern prePat = Pattern.compile("(?i)<(/?)pre>");
-
-    private static boolean scanForPre(String inlinetext, int start, int end, boolean inPre) {
-        Matcher m = prePat.matcher(inlinetext).region(start, end);
-        while (m.find()) {
-            inPre = m.group(1).isEmpty();
-        }
-        return inPre;
-    }
-
-    /**
-     * Recursively find the index of the closing '}' character for an inline tag
-     * and return it.  If it can't be found, return -1.
-     * @param inlineText the text to search in.
-     * @param searchStart the index of the place to start searching at.
-     * @return the index of the closing '}' character for an inline tag.
-     * If it can't be found, return -1.
-     */
-    private static int findInlineTagDelim(String inlineText, int searchStart) {
-        int delimEnd, nestedOpenBrace;
-        if ((delimEnd = inlineText.indexOf("}", searchStart)) == -1) {
-            return -1;
-        } else if (((nestedOpenBrace = inlineText.indexOf("{", searchStart)) != -1) &&
-            nestedOpenBrace < delimEnd){
-            //Found a nested open brace.
-            int nestedCloseBrace = findInlineTagDelim(inlineText, nestedOpenBrace + 1);
-            return (nestedCloseBrace != -1) ?
-                findInlineTagDelim(inlineText, nestedCloseBrace + 1) :
-                -1;
-        } else {
-            return delimEnd;
-        }
-    }
-
-    /**
-     * Recursively search for the characters '{', '@', followed by
-     * name of inline tag and white space,
-     * if found
-     *    return the index of the text following the white space.
-     * else
-     *    return -1.
-     */
-    private static int inlineTagFound(DocImpl holder, String inlinetext, int start) {
-        DocEnv docenv = holder.env;
-        int linkstart = inlinetext.indexOf("{@", start);
-        if (start == inlinetext.length() || linkstart == -1) {
-            return -1;
-        } else if (inlinetext.indexOf('}', linkstart) == -1) {
-            //Missing '}'.
-            docenv.warning(holder, "tag.Improper_Use_Of_Link_Tag",
-                    inlinetext.substring(linkstart, inlinetext.length()));
-            return -1;
-        } else {
-            return linkstart;
-        }
-    }
-
-
-    /**
-     * Return array of tags for the locale specific first sentence in the text.
-     */
-    static Tag[] firstSentenceTags(DocImpl holder, String text) {
-        DocLocale doclocale = holder.env.doclocale;
-        return getInlineTags(holder,
-                             doclocale.localeSpecificFirstSentence(holder, text));
-    }
-
-    /**
-     * Return text for this Doc comment.
-     */
-    @Override
-    public String toString() {
-        return text;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ConstructorDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.MethodSymbol;
-
-/**
- * Represents a constructor of a java class.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class ConstructorDocImpl
-        extends ExecutableMemberDocImpl implements ConstructorDoc {
-
-    /**
-     * constructor.
-     */
-    public ConstructorDocImpl(DocEnv env, MethodSymbol sym) {
-        super(env, sym);
-    }
-
-    /**
-     * constructor.
-     */
-    public ConstructorDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-    }
-
-    /**
-     * Return true if it is a constructor, which it is.
-     *
-     * @return true
-     */
-    public boolean isConstructor() {
-        return true;
-    }
-
-    /**
-     * Get the name.
-     *
-     * @return the name of the member.
-     */
-    public String name() {
-        ClassSymbol c = sym.enclClass();
-        return c.name.toString();
-    }
-
-    /**
-     * Get the name.
-     *
-     * @return the qualified name of the member.
-     */
-    public String qualifiedName() {
-        return sym.enclClass().getQualifiedName().toString();
-    }
-
-    /**
-     * Returns a string representation of this constructor.  Includes the
-     * qualified signature and any type parameters.
-     * Type parameters precede the class name, as they do in the syntax
-     * for invoking constructors with explicit type parameters using "new".
-     * (This is unlike the syntax for invoking methods with explicit type
-     * parameters.)
-     */
-    public String toString() {
-        return typeParametersString() + qualifiedName() + signature();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocEnv.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,881 +0,0 @@
-/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-import javax.tools.JavaFileManager;
-
-import com.sun.javadoc.*;
-import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.util.JavacTask;
-import com.sun.source.util.TreePath;
-import com.sun.tools.doclint.DocLint;
-import com.sun.tools.javac.api.BasicJavacTask;
-import com.sun.tools.javac.code.*;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.CompletionFailure;
-import com.sun.tools.javac.code.Symbol.MethodSymbol;
-import com.sun.tools.javac.code.Symbol.PackageSymbol;
-import com.sun.tools.javac.code.Symbol.VarSymbol;
-import com.sun.tools.javac.code.Type.ClassType;
-import com.sun.tools.javac.comp.Check;
-import com.sun.tools.javac.comp.Enter;
-import com.sun.tools.javac.file.JavacFileManager;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCClassDecl;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.tree.JCTree.JCPackageDecl;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.Convert;
-import com.sun.tools.javac.util.Name;
-import com.sun.tools.javac.util.Names;
-
-/**
- * Holds the environment for a run of javadoc.
- * Holds only the information needed throughout the
- * run and not the compiler info that could be GC'ed
- * or ported.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.4
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (generics)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class DocEnv {
-    protected static final Context.Key<DocEnv> docEnvKey = new Context.Key<>();
-
-    public static DocEnv instance(Context context) {
-        DocEnv instance = context.get(docEnvKey);
-        if (instance == null)
-            instance = new DocEnv(context);
-        return instance;
-    }
-
-    DocLocale doclocale;
-
-    private final Messager messager;
-
-    /** Predefined symbols known to the compiler. */
-    final Symtab syms;
-
-    /** Referenced directly in RootDocImpl. */
-    private final ClassFinder finder;
-
-    /** Javadoc's own version of the compiler's enter phase. */
-    final Enter enter;
-
-    /** The name table. */
-    private final Names names;
-
-    /** The encoding name. */
-    private String encoding;
-
-    final Symbol externalizableSym;
-
-    /** Access filter (public, protected, ...).  */
-    protected ModifierFilter showAccess;
-
-    /** True if we are using a sentence BreakIterator. */
-    boolean breakiterator;
-
-    /**
-     * True if we do not want to print any notifications at all.
-     */
-    boolean quiet = false;
-
-    Check chk;
-    Types types;
-    JavaFileManager fileManager;
-    Context context;
-    DocLint doclint;
-    JavaScriptScanner javaScriptScanner;
-
-    WeakHashMap<JCTree, TreePath> treePaths = new WeakHashMap<>();
-
-    /** Allow documenting from class files? */
-    boolean docClasses = false;
-
-    /** Does the doclet only expect pre-1.5 doclet API? */
-    protected boolean legacyDoclet = true;
-
-    /**
-     * Set this to true if you would like to not emit any errors, warnings and
-     * notices.
-     */
-    private boolean silent = false;
-
-    /**
-     * The source language version.
-     */
-    protected Source source;
-
-    /**
-     * Constructor
-     *
-     * @param context      Context for this javadoc instance.
-     */
-    protected DocEnv(Context context) {
-        context.put(docEnvKey, this);
-        this.context = context;
-
-        messager = Messager.instance0(context);
-        syms = Symtab.instance(context);
-        finder = JavadocClassFinder.instance(context);
-        enter = JavadocEnter.instance(context);
-        names = Names.instance(context);
-        externalizableSym = syms.enterClass(syms.java_base, names.fromString("java.io.Externalizable"));
-        chk = Check.instance(context);
-        types = Types.instance(context);
-        fileManager = context.get(JavaFileManager.class);
-        if (fileManager instanceof JavacFileManager) {
-            ((JavacFileManager)fileManager).setSymbolFileEnabled(false);
-        }
-
-        // Default.  Should normally be reset with setLocale.
-        this.doclocale = new DocLocale(this, "", breakiterator);
-        source = Source.instance(context);
-    }
-
-    public void setSilent(boolean silent) {
-        this.silent = silent;
-    }
-
-    /**
-     * Look up ClassDoc by qualified name.
-     */
-    public ClassDocImpl lookupClass(String name) {
-        ClassSymbol c = getClassSymbol(name);
-        if (c != null) {
-            return getClassDoc(c);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Load ClassDoc by qualified name.
-     */
-    public ClassDocImpl loadClass(String name) {
-        try {
-            Name nameImpl = names.fromString(name);
-            ModuleSymbol mod = syms.inferModule(Convert.packagePart(nameImpl));
-            ClassSymbol c = finder.loadClass(mod != null ? mod : syms.errModule, nameImpl);
-            return getClassDoc(c);
-        } catch (CompletionFailure ex) {
-            chk.completionError(null, ex);
-            return null;
-        }
-    }
-
-    /**
-     * Look up PackageDoc by qualified name.
-     */
-    public PackageDocImpl lookupPackage(String name) {
-        //### Jing alleges that class check is needed
-        //### to avoid a compiler bug.  Most likely
-        //### instead a dummy created for error recovery.
-        //### Should investigate this.
-        Name nameImpl = names.fromString(name);
-        ModuleSymbol mod = syms.inferModule(nameImpl);
-        PackageSymbol p = mod != null ? syms.getPackage(mod, nameImpl) : null;
-        ClassSymbol c = getClassSymbol(name);
-        if (p != null && c == null) {
-            return getPackageDoc(p);
-        } else {
-            return null;
-        }
-    }
-        // where
-        /** Retrieve class symbol by fully-qualified name.
-         */
-        ClassSymbol getClassSymbol(String name) {
-            // Name may contain nested class qualification.
-            // Generate candidate flatnames with successively shorter
-            // package qualifiers and longer nested class qualifiers.
-            int nameLen = name.length();
-            char[] nameChars = name.toCharArray();
-            int idx = name.length();
-            for (;;) {
-                Name nameImpl = names.fromChars(nameChars, 0, nameLen);
-                ModuleSymbol mod = syms.inferModule(Convert.packagePart(nameImpl));
-                ClassSymbol s = mod != null ? syms.getClass(mod, nameImpl) : null;
-                if (s != null)
-                    return s; // found it!
-                idx = name.substring(0, idx).lastIndexOf('.');
-                if (idx < 0) break;
-                nameChars[idx] = '$';
-            }
-            return null;
-        }
-
-    /**
-     * Set the locale.
-     */
-    public void setLocale(String localeName) {
-        // create locale specifics
-        doclocale = new DocLocale(this, localeName, breakiterator);
-        // update Messager if locale has changed.
-        messager.setLocale(doclocale.locale);
-    }
-
-    /** Check whether this member should be documented. */
-    public boolean shouldDocument(VarSymbol sym) {
-        long mod = sym.flags();
-
-        if ((mod & Flags.SYNTHETIC) != 0) {
-            return false;
-        }
-
-        return showAccess.checkModifier(translateModifiers(mod));
-    }
-
-    /** Check whether this member should be documented. */
-    public boolean shouldDocument(MethodSymbol sym) {
-        long mod = sym.flags();
-
-        if ((mod & Flags.SYNTHETIC) != 0) {
-            return false;
-        }
-
-        return showAccess.checkModifier(translateModifiers(mod));
-    }
-
-    /** check whether this class should be documented. */
-    public boolean shouldDocument(ClassSymbol sym) {
-        return
-            (sym.flags_field&Flags.SYNTHETIC) == 0 && // no synthetics
-            (docClasses || getClassDoc(sym).tree != null) &&
-            isVisible(sym);
-    }
-
-    //### Comment below is inaccurate wrt modifier filter testing
-    /**
-     * Check the visibility if this is an nested class.
-     * if this is not a nested class, return true.
-     * if this is an static visible nested class,
-     *    return true.
-     * if this is an visible nested class
-     *    if the outer class is visible return true.
-     *    else return false.
-     * IMPORTANT: This also allows, static nested classes
-     * to be defined inside an nested class, which is not
-     * allowed by the compiler. So such an test case will
-     * not reach upto this method itself, but if compiler
-     * allows it, then that will go through.
-     */
-    protected boolean isVisible(ClassSymbol sym) {
-        long mod = sym.flags_field;
-        if (!showAccess.checkModifier(translateModifiers(mod))) {
-            return false;
-        }
-        ClassSymbol encl = sym.owner.enclClass();
-        return (encl == null || (mod & Flags.STATIC) != 0 || isVisible(encl));
-    }
-
-    //---------------- print forwarders ----------------//
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param msg message to print.
-     */
-    public void printError(String msg) {
-        if (silent)
-            return;
-        messager.printError(msg);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param key selects message from resource
-     */
-    public void error(DocImpl doc, String key) {
-        if (silent)
-            return;
-        messager.error(doc==null ? null : doc.position(), key);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param key selects message from resource
-     */
-    public void error(SourcePosition pos, String key) {
-        if (silent)
-            return;
-        messager.error(pos, key);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param msg message to print.
-     */
-    public void printError(SourcePosition pos, String msg) {
-        if (silent)
-            return;
-        messager.printError(pos, msg);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     */
-    public void error(DocImpl doc, String key, String a1) {
-        if (silent)
-            return;
-        messager.error(doc==null ? null : doc.position(), key, a1);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     */
-    public void error(DocImpl doc, String key, String a1, String a2) {
-        if (silent)
-            return;
-        messager.error(doc==null ? null : doc.position(), key, a1, a2);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     * @param a3 third argument
-     */
-    public void error(DocImpl doc, String key, String a1, String a2, String a3) {
-        if (silent)
-            return;
-        messager.error(doc==null ? null : doc.position(), key, a1, a2, a3);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param msg message to print.
-     */
-    public void printWarning(String msg) {
-        if (silent)
-            return;
-        messager.printWarning(msg);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param key selects message from resource
-     */
-    public void warning(DocImpl doc, String key) {
-        if (silent)
-            return;
-        messager.warning(doc==null ? null : doc.position(), key);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param msg message to print.
-     */
-    public void printWarning(SourcePosition pos, String msg) {
-        if (silent)
-            return;
-        messager.printWarning(pos, msg);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     */
-    public void warning(DocImpl doc, String key, String a1) {
-        if (silent)
-            return;
-        // suppress messages that have (probably) been covered by doclint
-        if (doclint != null && doc != null && key.startsWith("tag"))
-            return;
-        messager.warning(doc==null ? null : doc.position(), key, a1);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     */
-    public void warning(DocImpl doc, String key, String a1, String a2) {
-        if (silent)
-            return;
-        messager.warning(doc==null ? null : doc.position(), key, a1, a2);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     * @param a3 third argument
-     */
-    public void warning(DocImpl doc, String key, String a1, String a2, String a3) {
-        if (silent)
-            return;
-        messager.warning(doc==null ? null : doc.position(), key, a1, a2, a3);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     * @param a3 third argument
-     */
-    public void warning(DocImpl doc, String key, String a1, String a2, String a3,
-                        String a4) {
-        if (silent)
-            return;
-        messager.warning(doc==null ? null : doc.position(), key, a1, a2, a3, a4);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param msg message to print.
-     */
-    public void printNotice(String msg) {
-        if (silent || quiet)
-            return;
-        messager.printNotice(msg);
-    }
-
-
-    /**
-     * Print a message.
-     *
-     * @param key selects message from resource
-     */
-    public void notice(String key) {
-        if (silent || quiet)
-            return;
-        messager.notice(key);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param msg message to print.
-     */
-    public void printNotice(SourcePosition pos, String msg) {
-        if (silent || quiet)
-            return;
-        messager.printNotice(pos, msg);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     */
-    public void notice(String key, String a1) {
-        if (silent || quiet)
-            return;
-        messager.notice(key, a1);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     */
-    public void notice(String key, String a1, String a2) {
-        if (silent || quiet)
-            return;
-        messager.notice(key, a1, a2);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param key selects message from resource
-     * @param a1 first argument
-     * @param a2 second argument
-     * @param a3 third argument
-     */
-    public void notice(String key, String a1, String a2, String a3) {
-        if (silent || quiet)
-            return;
-        messager.notice(key, a1, a2, a3);
-    }
-
-    /**
-     * Exit, reporting errors and warnings.
-     */
-    public void exit() {
-        // Messager should be replaced by a more general
-        // compilation environment.  This can probably
-        // subsume DocEnv as well.
-        messager.exit();
-    }
-
-    protected Map<PackageSymbol, PackageDocImpl> packageMap = new HashMap<>();
-    /**
-     * Return the PackageDoc of this package symbol.
-     */
-    public PackageDocImpl getPackageDoc(PackageSymbol pack) {
-        PackageDocImpl result = packageMap.get(pack);
-        if (result != null) return result;
-        result = new PackageDocImpl(this, pack);
-        packageMap.put(pack, result);
-        return result;
-    }
-
-    /**
-     * Create the PackageDoc (or a subtype) for a package symbol.
-     */
-    void makePackageDoc(PackageSymbol pack, TreePath treePath) {
-        PackageDocImpl result = packageMap.get(pack);
-        if (result != null) {
-            if (treePath != null) result.setTreePath(treePath);
-        } else {
-            result = new PackageDocImpl(this, pack, treePath);
-            packageMap.put(pack, result);
-        }
-    }
-
-
-    protected Map<ClassSymbol, ClassDocImpl> classMap = new HashMap<>();
-    /**
-     * Return the ClassDoc (or a subtype) of this class symbol.
-     */
-    public ClassDocImpl getClassDoc(ClassSymbol clazz) {
-        ClassDocImpl result = classMap.get(clazz);
-        if (result != null) return result;
-        if (isAnnotationType(clazz)) {
-            result = new AnnotationTypeDocImpl(this, clazz);
-        } else {
-            result = new ClassDocImpl(this, clazz);
-        }
-        classMap.put(clazz, result);
-        return result;
-    }
-
-    /**
-     * Create the ClassDoc (or a subtype) for a class symbol.
-     */
-    protected void makeClassDoc(ClassSymbol clazz, TreePath treePath) {
-        ClassDocImpl result = classMap.get(clazz);
-        if (result != null) {
-            if (treePath != null) result.setTreePath(treePath);
-            return;
-        }
-        if (isAnnotationType((JCClassDecl) treePath.getLeaf())) {   // flags of clazz may not yet be set
-            result = new AnnotationTypeDocImpl(this, clazz, treePath);
-        } else {
-            result = new ClassDocImpl(this, clazz, treePath);
-        }
-        classMap.put(clazz, result);
-    }
-
-    protected static boolean isAnnotationType(ClassSymbol clazz) {
-        return ClassDocImpl.isAnnotationType(clazz);
-    }
-
-    protected static boolean isAnnotationType(JCClassDecl tree) {
-        return (tree.mods.flags & Flags.ANNOTATION) != 0;
-    }
-
-    protected Map<VarSymbol, FieldDocImpl> fieldMap = new HashMap<>();
-    /**
-     * Return the FieldDoc of this var symbol.
-     */
-    public FieldDocImpl getFieldDoc(VarSymbol var) {
-        FieldDocImpl result = fieldMap.get(var);
-        if (result != null) return result;
-        result = new FieldDocImpl(this, var);
-        fieldMap.put(var, result);
-        return result;
-    }
-    /**
-     * Create a FieldDoc for a var symbol.
-     */
-    protected void makeFieldDoc(VarSymbol var, TreePath treePath) {
-        FieldDocImpl result = fieldMap.get(var);
-        if (result != null) {
-            if (treePath != null) result.setTreePath(treePath);
-        } else {
-            result = new FieldDocImpl(this, var, treePath);
-            fieldMap.put(var, result);
-        }
-    }
-
-    protected Map<MethodSymbol, ExecutableMemberDocImpl> methodMap = new HashMap<>();
-    /**
-     * Create a MethodDoc for this MethodSymbol.
-     * Should be called only on symbols representing methods.
-     */
-    protected void makeMethodDoc(MethodSymbol meth, TreePath treePath) {
-        MethodDocImpl result = (MethodDocImpl)methodMap.get(meth);
-        if (result != null) {
-            if (treePath != null) result.setTreePath(treePath);
-        } else {
-            result = new MethodDocImpl(this, meth, treePath);
-            methodMap.put(meth, result);
-        }
-    }
-
-    /**
-     * Return the MethodDoc for a MethodSymbol.
-     * Should be called only on symbols representing methods.
-     */
-    public MethodDocImpl getMethodDoc(MethodSymbol meth) {
-        assert !meth.isConstructor() : "not expecting a constructor symbol";
-        MethodDocImpl result = (MethodDocImpl)methodMap.get(meth);
-        if (result != null) return result;
-        result = new MethodDocImpl(this, meth);
-        methodMap.put(meth, result);
-        return result;
-    }
-
-    /**
-     * Create the ConstructorDoc for a MethodSymbol.
-     * Should be called only on symbols representing constructors.
-     */
-    protected void makeConstructorDoc(MethodSymbol meth, TreePath treePath) {
-        ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth);
-        if (result != null) {
-            if (treePath != null) result.setTreePath(treePath);
-        } else {
-            result = new ConstructorDocImpl(this, meth, treePath);
-            methodMap.put(meth, result);
-        }
-    }
-
-    /**
-     * Return the ConstructorDoc for a MethodSymbol.
-     * Should be called only on symbols representing constructors.
-     */
-    public ConstructorDocImpl getConstructorDoc(MethodSymbol meth) {
-        assert meth.isConstructor() : "expecting a constructor symbol";
-        ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth);
-        if (result != null) return result;
-        result = new ConstructorDocImpl(this, meth);
-        methodMap.put(meth, result);
-        return result;
-    }
-
-    /**
-     * Create the AnnotationTypeElementDoc for a MethodSymbol.
-     * Should be called only on symbols representing annotation type elements.
-     */
-    protected void makeAnnotationTypeElementDoc(MethodSymbol meth, TreePath treePath) {
-        AnnotationTypeElementDocImpl result =
-            (AnnotationTypeElementDocImpl)methodMap.get(meth);
-        if (result != null) {
-            if (treePath != null) result.setTreePath(treePath);
-        } else {
-            result =
-                new AnnotationTypeElementDocImpl(this, meth, treePath);
-            methodMap.put(meth, result);
-        }
-    }
-
-    /**
-     * Return the AnnotationTypeElementDoc for a MethodSymbol.
-     * Should be called only on symbols representing annotation type elements.
-     */
-    public AnnotationTypeElementDocImpl getAnnotationTypeElementDoc(
-            MethodSymbol meth) {
-
-        AnnotationTypeElementDocImpl result =
-            (AnnotationTypeElementDocImpl)methodMap.get(meth);
-        if (result != null) return result;
-        result = new AnnotationTypeElementDocImpl(this, meth);
-        methodMap.put(meth, result);
-        return result;
-    }
-
-//  private Map<ClassType, ParameterizedTypeImpl> parameterizedTypeMap =
-//          new HashMap<ClassType, ParameterizedTypeImpl>();
-    /**
-     * Return the ParameterizedType of this instantiation.
-//   * ### Could use Type.sameTypeAs() instead of equality matching in hashmap
-//   * ### to avoid some duplication.
-     */
-    ParameterizedTypeImpl getParameterizedType(ClassType t) {
-        return new ParameterizedTypeImpl(this, t);
-//      ParameterizedTypeImpl result = parameterizedTypeMap.get(t);
-//      if (result != null) return result;
-//      result = new ParameterizedTypeImpl(this, t);
-//      parameterizedTypeMap.put(t, result);
-//      return result;
-    }
-
-    TreePath getTreePath(JCCompilationUnit tree) {
-        TreePath p = treePaths.get(tree);
-        if (p == null)
-            treePaths.put(tree, p = new TreePath(tree));
-        return p;
-    }
-
-    TreePath getTreePath(JCCompilationUnit toplevel, JCPackageDecl tree) {
-        TreePath p = treePaths.get(tree);
-        if (p == null)
-            treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree));
-        return p;
-    }
-
-    TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl tree) {
-        TreePath p = treePaths.get(tree);
-        if (p == null)
-            treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree));
-        return p;
-    }
-
-    TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl cdecl, JCTree tree) {
-        return new TreePath(getTreePath(toplevel, cdecl), tree);
-    }
-
-    /**
-     * Set the encoding.
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    /**
-     * Get the encoding.
-     */
-    public String getEncoding() {
-        return encoding;
-    }
-
-    /**
-     * Convert modifier bits from private coding used by
-     * the compiler to that of java.lang.reflect.Modifier.
-     */
-    static int translateModifiers(long flags) {
-        int result = 0;
-        if ((flags & Flags.ABSTRACT) != 0)
-            result |= Modifier.ABSTRACT;
-        if ((flags & Flags.FINAL) != 0)
-            result |= Modifier.FINAL;
-        if ((flags & Flags.INTERFACE) != 0)
-            result |= Modifier.INTERFACE;
-        if ((flags & Flags.NATIVE) != 0)
-            result |= Modifier.NATIVE;
-        if ((flags & Flags.PRIVATE) != 0)
-            result |= Modifier.PRIVATE;
-        if ((flags & Flags.PROTECTED) != 0)
-            result |= Modifier.PROTECTED;
-        if ((flags & Flags.PUBLIC) != 0)
-            result |= Modifier.PUBLIC;
-        if ((flags & Flags.STATIC) != 0)
-            result |= Modifier.STATIC;
-        if ((flags & Flags.SYNCHRONIZED) != 0)
-            result |= Modifier.SYNCHRONIZED;
-        if ((flags & Flags.TRANSIENT) != 0)
-            result |= Modifier.TRANSIENT;
-        if ((flags & Flags.VOLATILE) != 0)
-            result |= Modifier.VOLATILE;
-        return result;
-    }
-
-    void initDoclint(Collection<String> opts, Collection<String> customTagNames, String htmlVersion) {
-        ArrayList<String> doclintOpts = new ArrayList<>();
-        boolean msgOptionSeen = false;
-
-        for (String opt : opts) {
-            if (opt.startsWith(DocLint.XMSGS_OPTION)) {
-                if (opt.equals(DocLint.XMSGS_CUSTOM_PREFIX + "none"))
-                    return;
-                msgOptionSeen = true;
-            }
-            doclintOpts.add(opt);
-        }
-
-        if (!msgOptionSeen) {
-            doclintOpts.add(DocLint.XMSGS_OPTION);
-        }
-
-        String sep = "";
-        StringBuilder customTags = new StringBuilder();
-        for (String customTag : customTagNames) {
-            customTags.append(sep);
-            customTags.append(customTag);
-            sep = DocLint.SEPARATOR;
-        }
-        doclintOpts.add(DocLint.XCUSTOM_TAGS_PREFIX + customTags.toString());
-        doclintOpts.add(DocLint.XHTML_VERSION_PREFIX + htmlVersion);
-
-        JavacTask t = BasicJavacTask.instance(context);
-        doclint = new DocLint();
-        // standard doclet normally generates H1, H2
-        doclintOpts.add(DocLint.XIMPLICIT_HEADERS + "2");
-        doclint.init(t, doclintOpts.toArray(new String[doclintOpts.size()]), false);
-    }
-
-    JavaScriptScanner initJavaScriptScanner(boolean allowScriptInComments) {
-        if (allowScriptInComments) {
-            javaScriptScanner = null;
-        } else {
-            javaScriptScanner = new JavaScriptScanner();
-        }
-        return javaScriptScanner;
-    }
-
-    boolean showTagMessages() {
-        return (doclint == null);
-    }
-
-    Map<CompilationUnitTree, Boolean> shouldCheck = new HashMap<>();
-
-    boolean shouldCheck(CompilationUnitTree unit) {
-        return shouldCheck.computeIfAbsent(unit, doclint :: shouldCheck);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,455 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.CollationKey;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.tools.FileObject;
-
-import com.sun.javadoc.*;
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.util.Position;
-
-/**
- * abstract base class of all Doc classes.  Doc item's are representations
- * of java language constructs (class, package, method,...) which have
- * comments and have been processed by this run of javadoc.  All Doc items
- * are unique, that is, they are == comparable.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Neal Gafter (rewrite)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public abstract class DocImpl implements Doc, Comparable<Object> {
-
-    /**
-     * Doc environment
-     */
-    protected final DocEnv env;   //### Rename this everywhere to 'docenv' ?
-
-    /**
-     * Back pointer to the tree node for this doc item.
-     * May be null if there is no associated tree.
-     */
-    protected TreePath treePath;
-
-    /**
-     *  The complex comment object, lazily initialized.
-     */
-    private Comment comment;
-
-    /**
-     * The cached sort key, to take care of Natural Language Text sorting.
-     */
-    private CollationKey collationkey = null;
-
-    /**
-     *  Raw documentation string.
-     */
-    protected String documentation;  // Accessed in PackageDocImpl, RootDocImpl
-
-    /**
-     * Cached first sentence.
-     */
-    private Tag[] firstSentence;
-
-    /**
-     * Cached inline tags.
-     */
-    private Tag[] inlineTags;
-
-    /**
-     * Constructor.
-     */
-    DocImpl(DocEnv env, TreePath treePath) {
-        this.treePath = treePath;
-        this.documentation = getCommentText(treePath);
-        this.env = env;
-    }
-
-    private static String getCommentText(TreePath p) {
-        if (p == null)
-            return null;
-
-        JCCompilationUnit topLevel = (JCCompilationUnit) p.getCompilationUnit();
-        JCTree tree = (JCTree) p.getLeaf();
-        return topLevel.docComments.getCommentText(tree);
-    }
-
-    /**
-     * So subclasses have the option to do lazy initialization of
-     * "documentation" string.
-     */
-    protected String documentation() {
-        if (documentation == null) documentation = "";
-        return documentation;
-    }
-
-    /**
-     * For lazy initialization of comment.
-     */
-    Comment comment() {
-        if (comment == null) {
-            String d = documentation();
-            if (env.javaScriptScanner != null) {
-                env.javaScriptScanner.parse(d, new JavaScriptScanner.Reporter() {
-                    @Override
-                    public void report() {
-                        env.error(DocImpl.this, "javadoc.JavaScript_in_comment");
-                        throw new Error();
-                    }
-                });
-            }
-            if (env.doclint != null
-                    && treePath != null
-                    && env.shouldCheck(treePath.getCompilationUnit())
-                    && d.equals(getCommentText(treePath))) {
-                env.doclint.scan(treePath);
-            }
-            comment = new Comment(this, d);
-        }
-        return comment;
-    }
-
-    /**
-     * Return the text of the comment for this doc item.
-     * TagImpls have been removed.
-     */
-    public String commentText() {
-        return comment().commentText();
-    }
-
-    /**
-     * Return all tags in this Doc item.
-     *
-     * @return an array of TagImpl containing all tags on this Doc item.
-     */
-    public Tag[] tags() {
-        return comment().tags();
-    }
-
-    /**
-     * Return tags of the specified kind in this Doc item.
-     *
-     * @param tagname name of the tag kind to search for.
-     * @return an array of TagImpl containing all tags whose 'kind()'
-     * matches 'tagname'.
-     */
-    public Tag[] tags(String tagname) {
-        return comment().tags(tagname);
-    }
-
-    /**
-     * Return the see also tags in this Doc item.
-     *
-     * @return an array of SeeTag containing all &#64;see tags.
-     */
-    public SeeTag[] seeTags() {
-        return comment().seeTags();
-    }
-
-    public Tag[] inlineTags() {
-        if (inlineTags == null) {
-            inlineTags = Comment.getInlineTags(this, commentText());
-        }
-        return inlineTags;
-    }
-
-    public Tag[] firstSentenceTags() {
-        if (firstSentence == null) {
-            //Parse all sentences first to avoid duplicate warnings.
-            inlineTags();
-            try {
-                env.setSilent(true);
-                firstSentence = Comment.firstSentenceTags(this, commentText());
-            } finally {
-                env.setSilent(false);
-            }
-        }
-        return firstSentence;
-    }
-
-    /**
-     * Utility for subclasses which read HTML documentation files.
-     */
-    String readHTMLDocumentation(InputStream input, FileObject filename) throws IOException {
-        byte[] filecontents = new byte[input.available()];
-        try {
-            DataInputStream dataIn = new DataInputStream(input);
-            dataIn.readFully(filecontents);
-        } finally {
-            input.close();
-        }
-        String encoding = env.getEncoding();
-        String rawDoc = (encoding!=null)
-            ? new String(filecontents, encoding)
-            : new String(filecontents);
-        Pattern bodyPat = Pattern.compile("(?is).*<body\\b[^>]*>(.*)</body\\b.*");
-        Matcher m = bodyPat.matcher(rawDoc);
-        if (m.matches()) {
-            return m.group(1);
-        } else {
-            String key = rawDoc.matches("(?is).*<body\\b.*")
-                    ? "javadoc.End_body_missing_from_html_file"
-                    : "javadoc.Body_missing_from_html_file";
-            env.error(SourcePositionImpl.make(filename, Position.NOPOS, null), key);
-            return "";
-        }
-    }
-
-    /**
-     * Return the full unprocessed text of the comment.  Tags
-     * are included as text.  Used mainly for store and retrieve
-     * operations like internalization.
-     */
-    public String getRawCommentText() {
-        return documentation();
-    }
-
-    /**
-     * Set the full unprocessed text of the comment.  Tags
-     * are included as text.  Used mainly for store and retrieve
-     * operations like internalization.
-     */
-    public void setRawCommentText(String rawDocumentation) {
-        treePath = null;
-        documentation = rawDocumentation;
-        comment = null;
-    }
-
-    /**
-     * Set the full unprocessed text of the comment and tree path.
-     */
-    void setTreePath(TreePath treePath) {
-        this.treePath = treePath;
-        documentation = getCommentText(treePath);
-        comment = null;
-    }
-
-    /**
-     * return a key for sorting.
-     */
-    CollationKey key() {
-        if (collationkey == null) {
-            collationkey = generateKey();
-        }
-        return collationkey;
-    }
-
-    /**
-     * Generate a key for sorting.
-     * <p>
-     * Default is name().
-     */
-    CollationKey generateKey() {
-        String k = name();
-        // System.out.println("COLLATION KEY FOR " + this + " is \"" + k + "\"");
-        return env.doclocale.collator.getCollationKey(k);
-    }
-
-    /**
-     * Returns a string representation of this Doc item.
-     */
-    @Override
-    public String toString() {
-        return qualifiedName();
-    }
-
-    /**
-     * Returns the name of this Doc item.
-     *
-     * @return  the name
-     */
-    public abstract String name();
-
-    /**
-     * Returns the qualified name of this Doc item.
-     *
-     * @return  the name
-     */
-    public abstract String qualifiedName();
-
-    /**
-     * Compares this Object with the specified Object for order.  Returns a
-     * negative integer, zero, or a positive integer as this Object is less
-     * than, equal to, or greater than the given Object.
-     * <p>
-     * Included so that Doc item are java.lang.Comparable.
-     *
-     * @param   obj the {@code Object} to be compared.
-     * @return  a negative integer, zero, or a positive integer as this Object
-     *          is less than, equal to, or greater than the given Object.
-     * @exception ClassCastException the specified Object's type prevents it
-     *            from being compared to this Object.
-     */
-    public int compareTo(Object obj) {
-        // System.out.println("COMPARE \"" + this + "\" to \"" + obj + "\" = " + key().compareTo(((DocImpl)obj).key()));
-        return key().compareTo(((DocImpl)obj).key());
-    }
-
-    /**
-     * Is this Doc item a field?  False until overridden.
-     *
-     * @return true if it represents a field
-     */
-    public boolean isField() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item an enum constant?  False until overridden.
-     *
-     * @return true if it represents an enum constant
-     */
-    public boolean isEnumConstant() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item a constructor?  False until overridden.
-     *
-     * @return true if it represents a constructor
-     */
-    public boolean isConstructor() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item a method (but not a constructor or annotation
-     * type element)?
-     * False until overridden.
-     *
-     * @return true if it represents a method
-     */
-    public boolean isMethod() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item an annotation type element?
-     * False until overridden.
-     *
-     * @return true if it represents an annotation type element
-     */
-    public boolean isAnnotationTypeElement() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item a interface (but not an annotation type)?
-     * False until overridden.
-     *
-     * @return true if it represents a interface
-     */
-    public boolean isInterface() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item a exception class?  False until overridden.
-     *
-     * @return true if it represents a exception
-     */
-    public boolean isException() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item a error class?  False until overridden.
-     *
-     * @return true if it represents a error
-     */
-    public boolean isError() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item an enum type?  False until overridden.
-     *
-     * @return true if it represents an enum type
-     */
-    public boolean isEnum() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item an annotation type?  False until overridden.
-     *
-     * @return true if it represents an annotation type
-     */
-    public boolean isAnnotationType() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item an ordinary class (i.e. not an interface,
-     * annotation type, enumeration, exception, or error)?
-     * False until overridden.
-     *
-     * @return true if it represents an ordinary class
-     */
-    public boolean isOrdinaryClass() {
-        return false;
-    }
-
-    /**
-     * Is this Doc item a class
-     * (and not an interface or annotation type)?
-     * This includes ordinary classes, enums, errors and exceptions.
-     * False until overridden.
-     *
-     * @return true if it represents a class
-     */
-    public boolean isClass() {
-        return false;
-    }
-
-    /**
-     * return true if this Doc is include in the active set.
-     */
-    public abstract boolean isIncluded();
-
-    /**
-     * Return the source position of the entity, or null if
-     * no position is available.
-     */
-    public SourcePosition position() { return null; }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocLocale.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,243 +0,0 @@
-/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.text.BreakIterator;
-import java.text.Collator;
-import java.util.Locale;
-
-/**
- * This class holds the information about locales.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.4
- * @author Robert Field
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class DocLocale {
-
-    /**
-     * The locale name will be set by Main, if option is provided on the
-     * command line.
-     */
-    final String localeName;
-
-    /**
-     * The locale to be used. If user doesn't provide this,
-     * then set it to default locale value.
-     */
-    final Locale locale;
-
-    /**
-     * The collator for this application. This is to take care of Locale
-     * Specific or Natural Language Text sorting.
-     */
-    final Collator collator;
-
-    /**
-     * Enclosing DocEnv
-     */
-    private final DocEnv docenv;
-
-    /**
-     * Sentence instance from the BreakIterator.
-     */
-    private final BreakIterator sentenceBreaker;
-
-    /**
-     * True is we should use <code>BreakIterator</code>
-     * to compute first sentence.
-     */
-    private boolean useBreakIterator = false;
-
-    /**
-     * The HTML sentence terminators.
-     */
-    static final String[] sentenceTerminators =
-                    {
-                        "<p>", "</p>", "<h1>", "<h2>",
-                        "<h3>", "<h4>", "<h5>", "<h6>",
-                        "</h1>", "</h2>", "</h3>", "</h4>", "</h5>",
-                        "</h6>", "<hr>", "<pre>", "</pre>"
-                    };
-
-    /**
-     * Constructor
-     */
-    DocLocale(DocEnv docenv, String localeName, boolean useBreakIterator) {
-        this.docenv = docenv;
-        this.localeName = localeName;
-        this.useBreakIterator = useBreakIterator;
-        locale = getLocale();
-        if (locale == null) {
-            docenv.exit();
-        } else {
-            Locale.setDefault(locale); // NOTE: updating global state
-        }
-        collator = Collator.getInstance(locale);
-        sentenceBreaker = BreakIterator.getSentenceInstance(locale);
-    }
-
-    /**
-     * Get the locale if specified on the command line
-     * else return null and if locale option is not used
-     * then return default locale.
-     */
-    private Locale getLocale() {
-        Locale userlocale = null;
-        if (localeName.length() > 0) {
-            int firstuscore = localeName.indexOf('_');
-            int seconduscore = -1;
-            String language = null;
-            String country = null;
-            String variant = null;
-            if (firstuscore == 2) {
-                language = localeName.substring(0, firstuscore);
-                seconduscore = localeName.indexOf('_', firstuscore + 1);
-                if (seconduscore > 0) {
-                    if (seconduscore != firstuscore + 3 ||
-                           localeName.length() <= seconduscore + 1) {
-                        docenv.error(null, "main.malformed_locale_name", localeName);
-                        return null;
-                    }
-                    country = localeName.substring(firstuscore + 1,
-                                                   seconduscore);
-                    variant = localeName.substring(seconduscore + 1);
-                } else if (localeName.length() == firstuscore + 3) {
-                    country = localeName.substring(firstuscore + 1);
-                } else {
-                    docenv.error(null, "main.malformed_locale_name", localeName);
-                    return null;
-                }
-            } else if (firstuscore == -1 && localeName.length() == 2) {
-                language = localeName;
-            } else {
-                docenv.error(null, "main.malformed_locale_name", localeName);
-                return null;
-            }
-            userlocale = searchLocale(language, country, variant);
-            if (userlocale == null) {
-                docenv.error(null, "main.illegal_locale_name", localeName);
-                return null;
-            } else {
-                return userlocale;
-            }
-        } else {
-            return Locale.getDefault();
-        }
-    }
-
-    /**
-     * Search the locale for specified language, specified country and
-     * specified variant.
-     */
-    private Locale searchLocale(String language, String country,
-                                String variant) {
-        for (Locale loc : Locale.getAvailableLocales()) {
-            if (loc.getLanguage().equals(language) &&
-                (country == null || loc.getCountry().equals(country)) &&
-                (variant == null || loc.getVariant().equals(variant))) {
-                return loc;
-            }
-        }
-        return null;
-    }
-
-    String localeSpecificFirstSentence(DocImpl doc, String s) {
-        if (s == null || s.length() == 0) {
-            return "";
-        }
-        int index = s.indexOf("-->");
-        if(s.trim().startsWith("<!--") && index != -1) {
-            return localeSpecificFirstSentence(doc, s.substring(index + 3, s.length()));
-        }
-        if (useBreakIterator || !locale.getLanguage().equals("en")) {
-            sentenceBreaker.setText(s.replace('\n', ' '));
-            int start = sentenceBreaker.first();
-            int end = sentenceBreaker.next();
-            return s.substring(start, end).trim();
-        } else {
-            return englishLanguageFirstSentence(s).trim();
-        }
-    }
-
-    /**
-     * Return the first sentence of a string, where a sentence ends
-     * with a period followed be white space.
-     */
-    private String englishLanguageFirstSentence(String s) {
-        if (s == null) {
-            return null;
-        }
-        int len = s.length();
-        boolean period = false;
-        for (int i = 0 ; i < len ; i++) {
-            switch (s.charAt(i)) {
-                case '.':
-                    period = true;
-                    break;
-                case ' ':
-                case '\t':
-                case '\n':
-            case '\r':
-            case '\f':
-                    if (period) {
-                        return s.substring(0, i);
-                    }
-                    break;
-            case '<':
-                    if (i > 0) {
-                        if (htmlSentenceTerminatorFound(s, i)) {
-                            return s.substring(0, i);
-                        }
-                    }
-                    break;
-                default:
-                    period = false;
-            }
-        }
-        return s;
-    }
-
-    /**
-     * Find out if there is any HTML tag in the given string. If found
-     * return true else return false.
-     */
-    private boolean htmlSentenceTerminatorFound(String str, int index) {
-        for (String terminator : sentenceTerminators) {
-            if (str.regionMatches(true, index, terminator,
-                                  0, terminator.length())) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/DocletInvoker.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,438 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-
-import javax.tools.DocumentationTool;
-import javax.tools.JavaFileManager;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.util.ClientCodeException;
-import com.sun.tools.javac.util.List;
-
-/**
- * Class creates, controls and invokes doclets.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Neal Gafter (rewrite)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class DocletInvoker {
-
-    private final Class<?> docletClass;
-
-    private final String docletClassName;
-
-    private final ClassLoader appClassLoader;
-
-    private final Messager messager;
-
-    /**
-     * In API mode, exceptions thrown while calling the doclet are
-     * propagated using ClientCodeException.
-     */
-    private final boolean apiMode;
-
-    /**
-     * Whether javadoc internal API should be exported to doclets
-     * and (indirectly) to taglets
-     */
-    private final boolean exportInternalAPI;
-
-    private static class DocletInvokeException extends Exception {
-        private static final long serialVersionUID = 0;
-    }
-
-    private String appendPath(String path1, String path2) {
-        if (path1 == null || path1.length() == 0) {
-            return path2 == null ? "." : path2;
-        } else if (path2 == null || path2.length() == 0) {
-            return path1;
-        } else {
-            return path1  + File.pathSeparator + path2;
-        }
-    }
-
-    public DocletInvoker(Messager messager, Class<?> docletClass, boolean apiMode, boolean exportInternalAPI) {
-        this.messager = messager;
-        this.docletClass = docletClass;
-        docletClassName = docletClass.getName();
-        appClassLoader = null;
-        this.apiMode = apiMode;
-        this.exportInternalAPI = exportInternalAPI; // for backdoor use by standard doclet for taglets
-
-        // this may not be soon enough if the class has already been loaded
-        if (exportInternalAPI) {
-            exportInternalAPI(docletClass.getClassLoader());
-        }
-    }
-
-    public DocletInvoker(Messager messager, JavaFileManager fileManager,
-                         String docletClassName, String docletPath,
-                         ClassLoader docletParentClassLoader,
-                         boolean apiMode,
-                         boolean exportInternalAPI) {
-        this.messager = messager;
-        this.docletClassName = docletClassName;
-        this.apiMode = apiMode;
-        this.exportInternalAPI = exportInternalAPI; // for backdoor use by standard doclet for taglets
-
-        if (fileManager != null && fileManager.hasLocation(DocumentationTool.Location.DOCLET_PATH)) {
-            appClassLoader = fileManager.getClassLoader(DocumentationTool.Location.DOCLET_PATH);
-        } else {
-            // construct class loader
-            String cpString = null;   // make sure env.class.path defaults to dot
-
-            // do prepends to get correct ordering
-            cpString = appendPath(System.getProperty("env.class.path"), cpString);
-            cpString = appendPath(System.getProperty("java.class.path"), cpString);
-            cpString = appendPath(docletPath, cpString);
-            URL[] urls = pathToURLs(cpString);
-            if (docletParentClassLoader == null)
-                appClassLoader = new URLClassLoader(urls, getDelegationClassLoader(docletClassName));
-            else
-                appClassLoader = new URLClassLoader(urls, docletParentClassLoader);
-        }
-
-        if (exportInternalAPI) {
-            exportInternalAPI(appClassLoader);
-        }
-
-        // attempt to find doclet
-        Class<?> dc = null;
-        try {
-            dc = appClassLoader.loadClass(docletClassName);
-        } catch (ClassNotFoundException exc) {
-            messager.error(Messager.NOPOS, "main.doclet_class_not_found", docletClassName);
-            messager.exit();
-        }
-        docletClass = dc;
-    }
-
-    /*
-     * Returns the delegation class loader to use when creating
-     * appClassLoader (used to load the doclet).  The context class
-     * loader is the best choice, but legacy behavior was to use the
-     * default delegation class loader (aka system class loader).
-     *
-     * Here we favor using the context class loader.  To ensure
-     * compatibility with existing apps, we revert to legacy
-     * behavior if either or both of the following conditions hold:
-     *
-     * 1) the doclet is loadable from the system class loader but not
-     *    from the context class loader,
-     *
-     * 2) this.getClass() is loadable from the system class loader but not
-     *    from the context class loader.
-     */
-    private ClassLoader getDelegationClassLoader(String docletClassName) {
-        ClassLoader ctxCL = Thread.currentThread().getContextClassLoader();
-        ClassLoader sysCL = ClassLoader.getSystemClassLoader();
-        if (sysCL == null)
-            return ctxCL;
-        if (ctxCL == null)
-            return sysCL;
-
-        // Condition 1.
-        try {
-            sysCL.loadClass(docletClassName);
-            try {
-                ctxCL.loadClass(docletClassName);
-            } catch (ClassNotFoundException e) {
-                return sysCL;
-            }
-        } catch (ClassNotFoundException e) {
-        }
-
-        // Condition 2.
-        try {
-            if (getClass() == sysCL.loadClass(getClass().getName())) {
-                try {
-                    if (getClass() != ctxCL.loadClass(getClass().getName()))
-                        return sysCL;
-                } catch (ClassNotFoundException e) {
-                    return sysCL;
-                }
-            }
-        } catch (ClassNotFoundException e) {
-        }
-
-        return ctxCL;
-    }
-
-    /**
-     * Generate documentation here.  Return true on success.
-     */
-    public boolean start(RootDoc root) {
-        Object retVal;
-        String methodName = "start";
-        Class<?>[] paramTypes = { RootDoc.class };
-        Object[] params = { root };
-        try {
-            retVal = invoke(methodName, null, paramTypes, params);
-        } catch (DocletInvokeException exc) {
-            return false;
-        }
-        if (retVal instanceof Boolean) {
-            return ((Boolean)retVal);
-        } else {
-            messager.error(Messager.NOPOS, "main.must_return_boolean",
-                           docletClassName, methodName);
-            return false;
-        }
-    }
-
-    /**
-     * Check for doclet added options here. Zero return means
-     * option not known.  Positive value indicates number of
-     * arguments to option.  Negative value means error occurred.
-     */
-    public int optionLength(String option) {
-        Object retVal;
-        String methodName = "optionLength";
-        Class<?>[] paramTypes = { String.class };
-        Object[] params = { option };
-        try {
-            retVal = invoke(methodName, 0, paramTypes, params);
-        } catch (DocletInvokeException exc) {
-            return -1;
-        }
-        if (retVal instanceof Integer) {
-            return ((Integer)retVal);
-        } else {
-            messager.error(Messager.NOPOS, "main.must_return_int",
-                           docletClassName, methodName);
-            return -1;
-        }
-    }
-
-    /**
-     * Let doclet check that all options are OK. Returning true means
-     * options are OK.  If method does not exist, assume true.
-     */
-    public boolean validOptions(List<String[]> optlist) {
-        Object retVal;
-        String options[][] = optlist.toArray(new String[optlist.length()][]);
-        String methodName = "validOptions";
-        DocErrorReporter reporter = messager;
-        Class<?>[] paramTypes = { String[][].class, DocErrorReporter.class };
-        Object[] params = { options, reporter };
-        try {
-            retVal = invoke(methodName, Boolean.TRUE, paramTypes, params);
-        } catch (DocletInvokeException exc) {
-            return false;
-        }
-        if (retVal instanceof Boolean) {
-            return ((Boolean)retVal);
-        } else {
-            messager.error(Messager.NOPOS, "main.must_return_boolean",
-                           docletClassName, methodName);
-            return false;
-        }
-    }
-
-    /**
-     * Return the language version supported by this doclet.
-     * If the method does not exist in the doclet, assume version 1.1.
-     */
-    public LanguageVersion languageVersion() {
-        try {
-            Object retVal;
-            String methodName = "languageVersion";
-            Class<?>[] paramTypes = new Class<?>[0];
-            Object[] params = new Object[0];
-            try {
-                retVal = invoke(methodName, LanguageVersion.JAVA_1_1, paramTypes, params);
-            } catch (DocletInvokeException exc) {
-                return LanguageVersion.JAVA_1_1;
-            }
-            if (retVal instanceof LanguageVersion) {
-                return (LanguageVersion)retVal;
-            } else {
-                messager.error(Messager.NOPOS, "main.must_return_languageversion",
-                               docletClassName, methodName);
-                return LanguageVersion.JAVA_1_1;
-            }
-        } catch (NoClassDefFoundError ex) { // for boostrapping, no Enum class.
-            return null;
-        }
-    }
-
-    /**
-     * Utility method for calling doclet functionality
-     */
-    private Object invoke(String methodName, Object returnValueIfNonExistent,
-                          Class<?>[] paramTypes, Object[] params)
-        throws DocletInvokeException {
-            Method meth;
-            try {
-                meth = docletClass.getMethod(methodName, paramTypes);
-            } catch (NoSuchMethodException exc) {
-                if (returnValueIfNonExistent == null) {
-                    messager.error(Messager.NOPOS, "main.doclet_method_not_found",
-                                   docletClassName, methodName);
-                    throw new DocletInvokeException();
-                } else {
-                    return returnValueIfNonExistent;
-                }
-            } catch (SecurityException exc) {
-                messager.error(Messager.NOPOS, "main.doclet_method_not_accessible",
-                               docletClassName, methodName);
-                throw new DocletInvokeException();
-            }
-            if (!Modifier.isStatic(meth.getModifiers())) {
-                messager.error(Messager.NOPOS, "main.doclet_method_must_be_static",
-                               docletClassName, methodName);
-                throw new DocletInvokeException();
-            }
-            ClassLoader savedCCL =
-                Thread.currentThread().getContextClassLoader();
-            try {
-                if (appClassLoader != null) // will be null if doclet class provided via API
-                    Thread.currentThread().setContextClassLoader(appClassLoader);
-                return meth.invoke(null , params);
-            } catch (IllegalArgumentException | NullPointerException exc) {
-                messager.error(Messager.NOPOS, "main.internal_error_exception_thrown",
-                               docletClassName, methodName, exc.toString());
-                throw new DocletInvokeException();
-            } catch (IllegalAccessException exc) {
-                messager.error(Messager.NOPOS, "main.doclet_method_not_accessible",
-                               docletClassName, methodName);
-                throw new DocletInvokeException();
-            }
-            catch (InvocationTargetException exc) {
-                Throwable err = exc.getTargetException();
-                if (apiMode)
-                    throw new ClientCodeException(err);
-                if (err instanceof java.lang.OutOfMemoryError) {
-                    messager.error(Messager.NOPOS, "main.out.of.memory");
-                } else {
-                    messager.error(Messager.NOPOS, "main.exception_thrown",
-                               docletClassName, methodName, exc.toString());
-                    exc.getTargetException().printStackTrace(System.err);
-                }
-                throw new DocletInvokeException();
-            } finally {
-                Thread.currentThread().setContextClassLoader(savedCCL);
-            }
-    }
-
-    /**
-     * Export javadoc internal API to the unnamed module for a classloader.
-     * This is to support continued use of existing non-standard doclets that
-     * use the internal toolkit API and related classes.
-     * @param cl the classloader
-     */
-    private void exportInternalAPI(ClassLoader cl) {
-        String[] packages = {
-            "com.sun.tools.doclets",
-            "com.sun.tools.doclets.standard",
-            "com.sun.tools.doclets.internal.toolkit",
-            "com.sun.tools.doclets.internal.toolkit.taglets",
-            "com.sun.tools.doclets.internal.toolkit.builders",
-            "com.sun.tools.doclets.internal.toolkit.util",
-            "com.sun.tools.doclets.internal.toolkit.util.links",
-            "com.sun.tools.doclets.formats.html",
-            "com.sun.tools.doclets.formats.html.markup"
-        };
-
-        try {
-            Method getModuleMethod = Class.class.getDeclaredMethod("getModule");
-            Object thisModule = getModuleMethod.invoke(getClass());
-
-            Class<?> moduleClass = Class.forName("java.lang.Module");
-            Method addExportsMethod = moduleClass.getDeclaredMethod("addExports", String.class, moduleClass);
-
-            Method getUnnamedModuleMethod = ClassLoader.class.getDeclaredMethod("getUnnamedModule");
-            Object target = getUnnamedModuleMethod.invoke(cl);
-
-            for (String pack : packages) {
-                addExportsMethod.invoke(thisModule, pack, target);
-            }
-        } catch (Exception e) {
-            // do nothing
-        }
-    }
-
-    /**
-     * Utility method for converting a search path string to an array of directory and JAR file
-     * URLs.
-     *
-     * Note that this method is called by the DocletInvoker.
-     *
-     * @param path the search path string
-     * @return the resulting array of directory and JAR file URLs
-     */
-    private static URL[] pathToURLs(String path) {
-        java.util.List<URL> urls = new ArrayList<>();
-        for (String s: path.split(Pattern.quote(File.pathSeparator))) {
-            if (!s.isEmpty()) {
-                URL url = fileToURL(Paths.get(s));
-                if (url != null) {
-                    urls.add(url);
-                }
-            }
-        }
-        return urls.toArray(new URL[urls.size()]);
-    }
-
-    /**
-     * Returns the directory or JAR file URL corresponding to the specified local file name.
-     *
-     * @param file the Path object
-     * @return the resulting directory or JAR file URL, or null if unknown
-     */
-    private static URL fileToURL(Path file) {
-        Path p;
-        try {
-            p = file.toRealPath();
-        } catch (IOException e) {
-            p = file.toAbsolutePath();
-        }
-        try {
-            return p.normalize().toUri().toURL();
-        } catch (MalformedURLException e) {
-            return null;
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ExecutableMemberDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.lang.reflect.Modifier;
-import java.text.CollationKey;
-
-import com.sun.javadoc.*;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-
-/**
- * Represents a method or constructor of a java class.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (generics, annotations)
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public abstract class ExecutableMemberDocImpl
-        extends MemberDocImpl implements ExecutableMemberDoc {
-
-    protected final MethodSymbol sym;
-
-    /**
-     * Constructor.
-     */
-    public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-        this.sym = sym;
-    }
-
-    /**
-     * Constructor.
-     */
-    public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym) {
-        this(env, sym, null);
-    }
-
-    /**
-     * Returns the flags in terms of javac's flags
-     */
-    protected long getFlags() {
-        return sym.flags();
-    }
-
-    /**
-     * Identify the containing class
-     */
-    protected ClassSymbol getContainingClass() {
-        return sym.enclClass();
-    }
-
-    /**
-     * Return true if this method is native
-     */
-    public boolean isNative() {
-        return Modifier.isNative(getModifiers());
-    }
-
-    /**
-     * Return true if this method is synchronized
-     */
-    public boolean isSynchronized() {
-        return Modifier.isSynchronized(getModifiers());
-    }
-
-    /**
-     * Return true if this method was declared to take a variable number
-     * of arguments.
-     */
-    public boolean isVarArgs() {
-        return ((sym.flags() & Flags.VARARGS) != 0
-                && !env.legacyDoclet);
-    }
-
-    /**
-     * Returns true if this field was synthesized by the compiler.
-     */
-    public boolean isSynthetic() {
-        return ((sym.flags() & Flags.SYNTHETIC) != 0);
-    }
-
-    public boolean isIncluded() {
-        return containingClass().isIncluded() && env.shouldDocument(sym);
-    }
-
-    /**
-     * Return the throws tags in this method.
-     *
-     * @return an array of ThrowTagImpl containing all {@code @exception}
-     * and {@code @throws} tags.
-     */
-    public ThrowsTag[] throwsTags() {
-        return comment().throwsTags();
-    }
-
-    /**
-     * Return the param tags in this method, excluding the type
-     * parameter tags.
-     *
-     * @return an array of ParamTagImpl containing all {@code @param} tags.
-     */
-    public ParamTag[] paramTags() {
-        return comment().paramTags();
-    }
-
-    /**
-     * Return the type parameter tags in this method.
-     */
-    public ParamTag[] typeParamTags() {
-        return env.legacyDoclet
-            ? new ParamTag[0]
-            : comment().typeParamTags();
-    }
-
-    /**
-     * Return exceptions this method or constructor throws.
-     *
-     * @return an array of ClassDoc[] representing the exceptions
-     * thrown by this method.
-     */
-    public ClassDoc[] thrownExceptions() {
-        ListBuffer<ClassDocImpl> l = new ListBuffer<>();
-        for (Type ex : sym.type.getThrownTypes()) {
-            ex = env.types.erasure(ex);
-            //### Will these casts succeed in the face of static semantic
-            //### errors in the documented code?
-            ClassDocImpl cdi = env.getClassDoc((ClassSymbol)ex.tsym);
-            if (cdi != null) l.append(cdi);
-        }
-        return l.toArray(new ClassDocImpl[l.length()]);
-    }
-
-    /**
-     * Return exceptions this method or constructor throws.
-     * Each array element is either a <code>ClassDoc</code> or a
-     * <code>TypeVariable</code>.
-     */
-    public com.sun.javadoc.Type[] thrownExceptionTypes() {
-        return TypeMaker.getTypes(env, sym.type.getThrownTypes());
-    }
-
-    /**
-     * Get argument information.
-     *
-     * @see ParameterImpl
-     *
-     * @return an array of ParameterImpl, one element per argument
-     * in the order the arguments are present.
-     */
-    public Parameter[] parameters() {
-        // generate the parameters on the fly:  they're not cached
-        List<VarSymbol> params = sym.params();
-        Parameter result[] = new Parameter[params.length()];
-
-        int i = 0;
-        for (VarSymbol param : params) {
-            result[i++] = new ParameterImpl(env, param);
-        }
-        return result;
-    }
-
-    /**
-     * Get the receiver type of this executable element.
-     *
-     * @return the receiver type of this executable element.
-     * @since 1.8
-     */
-    public com.sun.javadoc.Type receiverType() {
-        Type recvtype = sym.type.asMethodType().recvtype;
-        return (recvtype != null) ? TypeMaker.getType(env, recvtype, false, true) : null;
-    }
-
-    /**
-     * Return the formal type parameters of this method or constructor.
-     * Return an empty array if there are none.
-     */
-    public TypeVariable[] typeParameters() {
-        if (env.legacyDoclet) {
-            return new TypeVariable[0];
-        }
-        TypeVariable res[] = new TypeVariable[sym.type.getTypeArguments().length()];
-        TypeMaker.getTypes(env, sym.type.getTypeArguments(), res);
-        return res;
-    }
-
-    /**
-     * Get the signature. It is the parameter list, type is qualified.
-     * For instance, for a method <code>mymethod(String x, int y)</code>,
-     * it will return <code>(java.lang.String,int)</code>.
-     */
-    public String signature() {
-        return makeSignature(true);
-    }
-
-    /**
-     * Get flat signature.  All types are not qualified.
-     * Return a String, which is the flat signiture of this member.
-     * It is the parameter list, type is not qualified.
-     * For instance, for a method <code>mymethod(String x, int y)</code>,
-     * it will return <code>(String, int)</code>.
-     */
-    public String flatSignature() {
-        return makeSignature(false);
-    }
-
-    private String makeSignature(boolean full) {
-        StringBuilder result = new StringBuilder();
-        result.append("(");
-        for (List<Type> types = sym.type.getParameterTypes(); types.nonEmpty(); ) {
-            Type t = types.head;
-            result.append(TypeMaker.getTypeString(env, t, full));
-            types = types.tail;
-            if (types.nonEmpty()) {
-                result.append(", ");
-            }
-        }
-        if (isVarArgs()) {
-            int len = result.length();
-            result.replace(len - 2, len, "...");
-        }
-        result.append(")");
-        return result.toString();
-    }
-
-    protected String typeParametersString() {
-        return TypeMaker.typeParametersString(env, sym, true);
-    }
-
-    /**
-     * Generate a key for sorting.
-     */
-    @Override
-    CollationKey generateKey() {
-        String k = name() + flatSignature() + typeParametersString();
-        // ',' and '&' are between '$' and 'a':  normalize to spaces.
-        k = k.replace(',', ' ').replace('&', ' ');
-        // System.out.println("COLLATION KEY FOR " + this + " is \"" + k + "\"");
-        return env.doclocale.collator.getCollationKey(k);
-    }
-
-    /**
-     * Return the source position of the entity, or null if
-     * no position is available.
-     */
-    @Override
-    public SourcePosition position() {
-        if (sym.enclClass().sourcefile == null) return null;
-        return SourcePositionImpl.make(sym.enclClass().sourcefile,
-                                       (tree==null) ? 0 : tree.pos,
-                                       lineMap);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/FieldDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.source.util.TreePath;
-import java.lang.reflect.Modifier;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.VarSymbol;
-
-import static com.sun.tools.javac.code.TypeTag.BOOLEAN;
-
-/**
- * Represents a field in a java class.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @see MemberDocImpl
- *
- * @since 1.2
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (generics, enums, annotations)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class FieldDocImpl extends MemberDocImpl implements FieldDoc {
-
-    protected final VarSymbol sym;
-
-    /**
-     * Constructor.
-     */
-    public FieldDocImpl(DocEnv env, VarSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-        this.sym = sym;
-    }
-
-    /**
-     * Constructor.
-     */
-    public FieldDocImpl(DocEnv env, VarSymbol sym) {
-        this(env, sym, null);
-    }
-
-    /**
-     * Returns the flags in terms of javac's flags
-     */
-    protected long getFlags() {
-        return sym.flags();
-    }
-
-    /**
-     * Identify the containing class
-     */
-    protected ClassSymbol getContainingClass() {
-        return sym.enclClass();
-    }
-
-    /**
-     * Get type of this field.
-     */
-    public com.sun.javadoc.Type type() {
-        return TypeMaker.getType(env, sym.type, false);
-    }
-
-    /**
-     * Get the value of a constant field.
-     *
-     * @return the value of a constant field. The value is
-     * automatically wrapped in an object if it has a primitive type.
-     * If the field is not constant, returns null.
-     */
-    public Object constantValue() {
-        Object result = sym.getConstValue();
-        if (result != null && sym.type.hasTag(BOOLEAN))
-            // javac represents false and true as Integers 0 and 1
-            result = Boolean.valueOf(((Integer)result).intValue() != 0);
-        return result;
-    }
-
-    /**
-     * Get the value of a constant field.
-     *
-     * @return the text of a Java language expression whose value
-     * is the value of the constant. The expression uses no identifiers
-     * other than primitive literals. If the field is
-     * not constant, returns null.
-     */
-    public String constantValueExpression() {
-        return constantValueExpression(constantValue());
-    }
-
-    /**
-     * A static version of the above.
-     */
-    static String constantValueExpression(Object cb) {
-        if (cb == null) return null;
-        if (cb instanceof Character) return sourceForm(((Character)cb).charValue());
-        if (cb instanceof Byte) return sourceForm(((Byte)cb).byteValue());
-        if (cb instanceof String) return sourceForm((String)cb);
-        if (cb instanceof Double) return sourceForm(((Double)cb).doubleValue(), 'd');
-        if (cb instanceof Float) return sourceForm(((Float)cb).doubleValue(), 'f');
-        if (cb instanceof Long) return cb + "L";
-        return cb.toString(); // covers int, short
-    }
-        // where
-        private static String sourceForm(double v, char suffix) {
-            if (Double.isNaN(v))
-                return "0" + suffix + "/0" + suffix;
-            if (v == Double.POSITIVE_INFINITY)
-                return "1" + suffix + "/0" + suffix;
-            if (v == Double.NEGATIVE_INFINITY)
-                return "-1" + suffix + "/0" + suffix;
-            return v + (suffix == 'f' || suffix == 'F' ? "" + suffix : "");
-        }
-        private static String sourceForm(char c) {
-            StringBuilder buf = new StringBuilder(8);
-            buf.append('\'');
-            sourceChar(c, buf);
-            buf.append('\'');
-            return buf.toString();
-        }
-        private static String sourceForm(byte c) {
-            return "0x" + Integer.toString(c & 0xff, 16);
-        }
-        private static String sourceForm(String s) {
-            StringBuilder buf = new StringBuilder(s.length() + 5);
-            buf.append('\"');
-            for (int i=0; i<s.length(); i++) {
-                char c = s.charAt(i);
-                sourceChar(c, buf);
-            }
-            buf.append('\"');
-            return buf.toString();
-        }
-        private static void sourceChar(char c, StringBuilder buf) {
-            switch (c) {
-            case '\b': buf.append("\\b"); return;
-            case '\t': buf.append("\\t"); return;
-            case '\n': buf.append("\\n"); return;
-            case '\f': buf.append("\\f"); return;
-            case '\r': buf.append("\\r"); return;
-            case '\"': buf.append("\\\""); return;
-            case '\'': buf.append("\\\'"); return;
-            case '\\': buf.append("\\\\"); return;
-            default:
-                if (isPrintableAscii(c)) {
-                    buf.append(c); return;
-                }
-                unicodeEscape(c, buf);
-                return;
-            }
-        }
-        private static void unicodeEscape(char c, StringBuilder buf) {
-            final String chars = "0123456789abcdef";
-            buf.append("\\u");
-            buf.append(chars.charAt(15 & (c>>12)));
-            buf.append(chars.charAt(15 & (c>>8)));
-            buf.append(chars.charAt(15 & (c>>4)));
-            buf.append(chars.charAt(15 & (c>>0)));
-        }
-        private static boolean isPrintableAscii(char c) {
-            return c >= ' ' && c <= '~';
-        }
-
-    /**
-     * Return true if this field is included in the active set.
-     */
-    public boolean isIncluded() {
-        return containingClass().isIncluded() && env.shouldDocument(sym);
-    }
-
-    /**
-     * Is this Doc item a field (but not an enum constant?
-     */
-    @Override
-    public boolean isField() {
-        return !isEnumConstant();
-    }
-
-    /**
-     * Is this Doc item an enum constant?
-     * (For legacy doclets, return false.)
-     */
-    @Override
-    public boolean isEnumConstant() {
-        return (getFlags() & Flags.ENUM) != 0 &&
-               !env.legacyDoclet;
-    }
-
-    /**
-     * Return true if this field is transient
-     */
-    public boolean isTransient() {
-        return Modifier.isTransient(getModifiers());
-    }
-
-    /**
-     * Return true if this field is volatile
-     */
-    public boolean isVolatile() {
-        return Modifier.isVolatile(getModifiers());
-    }
-
-    /**
-     * Returns true if this field was synthesized by the compiler.
-     */
-    public boolean isSynthetic() {
-        return (getFlags() & Flags.SYNTHETIC) != 0;
-    }
-
-    /**
-     * Return the serialField tags in this FieldDocImpl item.
-     *
-     * @return an array of <tt>SerialFieldTagImpl</tt> containing all
-     *         <code>&#64;serialField</code> tags.
-     */
-    public SerialFieldTag[] serialFieldTags() {
-        return comment().serialFieldTags();
-    }
-
-    public String name() {
-        if (name == null) {
-            name = sym.name.toString();
-        }
-        return name;
-    }
-
-    private String name;
-
-    public String qualifiedName() {
-        if (qualifiedName == null) {
-            qualifiedName = sym.enclClass().getQualifiedName() + "." + name();
-        }
-        return qualifiedName;
-    }
-
-    private String qualifiedName;
-
-    /**
-     * Return the source position of the entity, or null if
-     * no position is available.
-     */
-    @Override
-    public SourcePosition position() {
-        if (sym.enclClass().sourcefile == null) return null;
-        return SourcePositionImpl.make(sym.enclClass().sourcefile,
-                                       (tree==null) ? 0 : tree.pos,
-                                       lineMap);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavaScriptScanner.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1104 +0,0 @@
-/*
- * Copyright (c) 2012,2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  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 com.sun.tools.javadoc.main;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import com.sun.tools.javadoc.main.JavaScriptScanner.TagParser.Kind;
-
-import static com.sun.tools.javac.util.LayoutCharacters.EOI;
-
-/**
- * Parser to detect use of JavaScript in documentation comments.
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class JavaScriptScanner {
-    public static interface Reporter {
-        void report();
-    }
-
-    static class ParseException extends Exception {
-        private static final long serialVersionUID = 0;
-        ParseException(String key) {
-            super(key);
-        }
-    }
-
-    private Reporter reporter;
-
-    /** The input buffer, index of most recent character read,
-     *  index of one past last character in buffer.
-     */
-    protected char[] buf;
-    protected int bp;
-    protected int buflen;
-
-    /** The current character.
-     */
-    protected char ch;
-
-    private boolean newline = true;
-
-    Map<String, TagParser> tagParsers;
-    Set<String> eventAttrs;
-    Set<String> uriAttrs;
-
-    public JavaScriptScanner() {
-        initTagParsers();
-        initEventAttrs();
-        initURIAttrs();
-    }
-
-    public void parse(String comment, Reporter r) {
-        reporter = r;
-        String c = comment;
-        buf = new char[c.length() + 1];
-        c.getChars(0, c.length(), buf, 0);
-        buf[buf.length - 1] = EOI;
-        buflen = buf.length - 1;
-        bp = -1;
-        newline = true;
-        nextChar();
-
-        blockContent();
-        blockTags();
-    }
-
-    private void checkHtmlTag(String tag) {
-        if (tag.equalsIgnoreCase("script")) {
-            reporter.report();
-        }
-    }
-
-    private void checkHtmlAttr(String name, String value) {
-        String n = name.toLowerCase(Locale.ENGLISH);
-        if (eventAttrs.contains(n)
-                || uriAttrs.contains(n)
-                    && value != null && value.toLowerCase(Locale.ENGLISH).trim().startsWith("javascript:")) {
-            reporter.report();
-        }
-    }
-
-    void nextChar() {
-        ch = buf[bp < buflen ? ++bp : buflen];
-        switch (ch) {
-            case '\f': case '\n': case '\r':
-                newline = true;
-        }
-    }
-
-    /**
-     * Read block content, consisting of text, html and inline tags.
-     * Terminated by the end of input, or the beginning of the next block tag:
-     * i.e. @ as the first non-whitespace character on a line.
-     */
-    @SuppressWarnings("fallthrough")
-    protected void blockContent() {
-
-        loop:
-        while (bp < buflen) {
-            switch (ch) {
-                case '\n': case '\r': case '\f':
-                    newline = true;
-                    // fallthrough
-
-                case ' ': case '\t':
-                    nextChar();
-                    break;
-
-                case '&':
-                    entity(null);
-                    break;
-
-                case '<':
-                    html();
-                    break;
-
-                case '>':
-                    newline = false;
-                    nextChar();
-                    break;
-
-                case '{':
-                    inlineTag(null);
-                    break;
-
-                case '@':
-                    if (newline) {
-                        break loop;
-                    }
-                    // fallthrough
-
-                default:
-                    newline = false;
-                    nextChar();
-            }
-        }
-    }
-
-    /**
-     * Read a series of block tags, including their content.
-     * Standard tags parse their content appropriately.
-     * Non-standard tags are represented by {@link UnknownBlockTag}.
-     */
-    protected void blockTags() {
-        while (ch == '@')
-            blockTag();
-    }
-
-    /**
-     * Read a single block tag, including its content.
-     * Standard tags parse their content appropriately.
-     * Non-standard tags are represented by {@link UnknownBlockTag}.
-     */
-    protected void blockTag() {
-        int p = bp;
-        try {
-            nextChar();
-            if (isIdentifierStart(ch)) {
-                String name = readTagName();
-                TagParser tp = tagParsers.get(name);
-                if (tp == null) {
-                    blockContent();
-                } else {
-                    switch (tp.getKind()) {
-                        case BLOCK:
-                            tp.parse(p);
-                            return;
-                        case INLINE:
-                            return;
-                    }
-                }
-            }
-            blockContent();
-        } catch (ParseException e) {
-            blockContent();
-        }
-    }
-
-    protected void inlineTag(Void list) {
-        newline = false;
-        nextChar();
-        if (ch == '@') {
-            inlineTag();
-        }
-    }
-
-    /**
-     * Read a single inline tag, including its content.
-     * Standard tags parse their content appropriately.
-     * Non-standard tags are represented by {@link UnknownBlockTag}.
-     * Malformed tags may be returned as {@link Erroneous}.
-     */
-    protected void inlineTag() {
-        int p = bp - 1;
-        try {
-            nextChar();
-            if (isIdentifierStart(ch)) {
-                String name = readTagName();
-                TagParser tp = tagParsers.get(name);
-
-                if (tp == null) {
-                    skipWhitespace();
-                    inlineText(WhitespaceRetentionPolicy.REMOVE_ALL);
-                    nextChar();
-                } else {
-                    skipWhitespace();
-                    if (tp.getKind() == TagParser.Kind.INLINE) {
-                        tp.parse(p);
-                    } else { // handle block tags (ex: @see) in inline content
-                        inlineText(WhitespaceRetentionPolicy.REMOVE_ALL); // skip content
-                        nextChar();
-                    }
-                }
-            }
-        } catch (ParseException e) {
-        }
-    }
-
-    private static enum WhitespaceRetentionPolicy {
-        RETAIN_ALL,
-        REMOVE_FIRST_SPACE,
-        REMOVE_ALL
-    }
-
-    /**
-     * Read plain text content of an inline tag.
-     * Matching pairs of { } are skipped; the text is terminated by the first
-     * unmatched }. It is an error if the beginning of the next tag is detected.
-     */
-    private void inlineText(WhitespaceRetentionPolicy whitespacePolicy) throws ParseException {
-        switch (whitespacePolicy) {
-            case REMOVE_ALL:
-                skipWhitespace();
-                break;
-            case REMOVE_FIRST_SPACE:
-                if (ch == ' ')
-                    nextChar();
-                break;
-            case RETAIN_ALL:
-            default:
-                // do nothing
-                break;
-
-        }
-        int pos = bp;
-        int depth = 1;
-
-        loop:
-        while (bp < buflen) {
-            switch (ch) {
-                case '\n': case '\r': case '\f':
-                    newline = true;
-                    break;
-
-                case ' ': case '\t':
-                    break;
-
-                case '{':
-                    newline = false;
-                    depth++;
-                    break;
-
-                case '}':
-                    if (--depth == 0) {
-                        return;
-                    }
-                    newline = false;
-                    break;
-
-                case '@':
-                    if (newline)
-                        break loop;
-                    newline = false;
-                    break;
-
-                default:
-                    newline = false;
-                    break;
-            }
-            nextChar();
-        }
-        throw new ParseException("dc.unterminated.inline.tag");
-    }
-
-    /**
-     * Read Java class name, possibly followed by member
-     * Matching pairs of {@literal < >} are skipped. The text is terminated by the first
-     * unmatched }. It is an error if the beginning of the next tag is detected.
-     */
-    // TODO: boolean allowMember should be enum FORBID, ALLOW, REQUIRE
-    // TODO: improve quality of parse to forbid bad constructions.
-    // TODO: update to use ReferenceParser
-    @SuppressWarnings("fallthrough")
-    protected void reference(boolean allowMember) throws ParseException {
-        int pos = bp;
-        int depth = 0;
-
-        // scan to find the end of the signature, by looking for the first
-        // whitespace not enclosed in () or <>, or the end of the tag
-        loop:
-        while (bp < buflen) {
-            switch (ch) {
-                case '\n': case '\r': case '\f':
-                    newline = true;
-                    // fallthrough
-
-                case ' ': case '\t':
-                    if (depth == 0)
-                        break loop;
-                    break;
-
-                case '(':
-                case '<':
-                    newline = false;
-                    depth++;
-                    break;
-
-                case ')':
-                case '>':
-                    newline = false;
-                    --depth;
-                    break;
-
-                case '}':
-                    if (bp == pos)
-                        return;
-                    newline = false;
-                    break loop;
-
-                case '@':
-                    if (newline)
-                        break loop;
-                    // fallthrough
-
-                default:
-                    newline = false;
-
-            }
-            nextChar();
-        }
-
-        if (depth != 0)
-            throw new ParseException("dc.unterminated.signature");
-    }
-
-    /**
-     * Read Java identifier
-     * Matching pairs of { } are skipped; the text is terminated by the first
-     * unmatched }. It is an error if the beginning of the next tag is detected.
-     */
-    @SuppressWarnings("fallthrough")
-    protected void identifier() throws ParseException {
-        skipWhitespace();
-        int pos = bp;
-
-        if (isJavaIdentifierStart(ch)) {
-            readJavaIdentifier();
-            return;
-        }
-
-        throw new ParseException("dc.identifier.expected");
-    }
-
-    /**
-     * Read a quoted string.
-     * It is an error if the beginning of the next tag is detected.
-     */
-    @SuppressWarnings("fallthrough")
-    protected void quotedString() {
-        int pos = bp;
-        nextChar();
-
-        loop:
-        while (bp < buflen) {
-            switch (ch) {
-                case '\n': case '\r': case '\f':
-                    newline = true;
-                    break;
-
-                case ' ': case '\t':
-                    break;
-
-                case '"':
-                    nextChar();
-                    // trim trailing white-space?
-                    return;
-
-                case '@':
-                    if (newline)
-                        break loop;
-
-            }
-            nextChar();
-        }
-    }
-
-    /**
-     * Read a term ie. one word.
-     * It is an error if the beginning of the next tag is detected.
-     */
-    @SuppressWarnings("fallthrough")
-    protected void inlineWord() {
-        int pos = bp;
-        int depth = 0;
-        loop:
-        while (bp < buflen) {
-            switch (ch) {
-                case '\n':
-                    newline = true;
-                    // fallthrough
-
-                case '\r': case '\f': case ' ': case '\t':
-                    return;
-
-                case '@':
-                    if (newline)
-                        break loop;
-
-                case '{':
-                    depth++;
-                    break;
-
-                case '}':
-                    if (depth == 0 || --depth == 0)
-                        return;
-                    break;
-            }
-            newline = false;
-            nextChar();
-        }
-    }
-
-    /**
-     * Read general text content of an inline tag, including HTML entities and elements.
-     * Matching pairs of { } are skipped; the text is terminated by the first
-     * unmatched }. It is an error if the beginning of the next tag is detected.
-     */
-    @SuppressWarnings("fallthrough")
-    private void inlineContent() {
-
-        skipWhitespace();
-        int pos = bp;
-        int depth = 1;
-
-        loop:
-        while (bp < buflen) {
-
-            switch (ch) {
-                case '\n': case '\r': case '\f':
-                    newline = true;
-                    // fall through
-
-                case ' ': case '\t':
-                    nextChar();
-                    break;
-
-                case '&':
-                    entity(null);
-                    break;
-
-                case '<':
-                    newline = false;
-                    html();
-                    break;
-
-                case '{':
-                    newline = false;
-                    depth++;
-                    nextChar();
-                    break;
-
-                case '}':
-                    newline = false;
-                    if (--depth == 0) {
-                        nextChar();
-                        return;
-                    }
-                    nextChar();
-                    break;
-
-                case '@':
-                    if (newline)
-                        break loop;
-                    // fallthrough
-
-                default:
-                    nextChar();
-                    break;
-            }
-        }
-
-    }
-
-    protected void entity(Void list) {
-        newline = false;
-        entity();
-    }
-
-    /**
-     * Read an HTML entity.
-     * {@literal &identifier; } or {@literal &#digits; } or {@literal &#xhex-digits; }
-     */
-    protected void entity() {
-        nextChar();
-        String name = null;
-        if (ch == '#') {
-            int namep = bp;
-            nextChar();
-            if (isDecimalDigit(ch)) {
-                nextChar();
-                while (isDecimalDigit(ch))
-                    nextChar();
-                name = new String(buf, namep, bp - namep);
-            } else if (ch == 'x' || ch == 'X') {
-                nextChar();
-                if (isHexDigit(ch)) {
-                    nextChar();
-                    while (isHexDigit(ch))
-                        nextChar();
-                    name = new String(buf, namep, bp - namep);
-                }
-            }
-        } else if (isIdentifierStart(ch)) {
-            name = readIdentifier();
-        }
-
-        if (name != null) {
-            if (ch != ';')
-                return;
-            nextChar();
-        }
-    }
-
-    /**
-     * Read the start or end of an HTML tag, or an HTML comment
-     * {@literal <identifier attrs> } or {@literal </identifier> }
-     */
-    protected void html() {
-        int p = bp;
-        nextChar();
-        if (isIdentifierStart(ch)) {
-            String name = readIdentifier();
-            checkHtmlTag(name);
-            htmlAttrs();
-            if (ch == '/') {
-                nextChar();
-            }
-            if (ch == '>') {
-                nextChar();
-                return;
-            }
-        } else if (ch == '/') {
-            nextChar();
-            if (isIdentifierStart(ch)) {
-                readIdentifier();
-                skipWhitespace();
-                if (ch == '>') {
-                    nextChar();
-                    return;
-                }
-            }
-        } else if (ch == '!') {
-            nextChar();
-            if (ch == '-') {
-                nextChar();
-                if (ch == '-') {
-                    nextChar();
-                    while (bp < buflen) {
-                        int dash = 0;
-                        while (ch == '-') {
-                            dash++;
-                            nextChar();
-                        }
-                        // Strictly speaking, a comment should not contain "--"
-                        // so dash > 2 is an error, dash == 2 implies ch == '>'
-                        // See http://www.w3.org/TR/html-markup/syntax.html#syntax-comments
-                        // for more details.
-                        if (dash >= 2 && ch == '>') {
-                            nextChar();
-                            return;
-                        }
-
-                        nextChar();
-                    }
-                }
-            }
-        }
-
-        bp = p + 1;
-        ch = buf[bp];
-    }
-
-    /**
-     * Read a series of HTML attributes, terminated by {@literal > }.
-     * Each attribute is of the form {@literal identifier[=value] }.
-     * "value" may be unquoted, single-quoted, or double-quoted.
-     */
-    protected void htmlAttrs() {
-        skipWhitespace();
-
-        loop:
-        while (isIdentifierStart(ch)) {
-            int namePos = bp;
-            String name = readAttributeName();
-            skipWhitespace();
-            StringBuilder value = new StringBuilder();
-            if (ch == '=') {
-                nextChar();
-                skipWhitespace();
-                if (ch == '\'' || ch == '"') {
-                    char quote = ch;
-                    nextChar();
-                    while (bp < buflen && ch != quote) {
-                        if (newline && ch == '@') {
-                            // No point trying to read more.
-                            // In fact, all attrs get discarded by the caller
-                            // and superseded by a malformed.html node because
-                            // the html tag itself is not terminated correctly.
-                            break loop;
-                        }
-                        value.append(ch);
-                        nextChar();
-                    }
-                    nextChar();
-                } else {
-                    while (bp < buflen && !isUnquotedAttrValueTerminator(ch)) {
-                        value.append(ch);
-                        nextChar();
-                    }
-                }
-                skipWhitespace();
-            }
-            checkHtmlAttr(name, value.toString());
-        }
-    }
-
-    protected void attrValueChar(Void list) {
-        switch (ch) {
-            case '&':
-                entity(list);
-                break;
-
-            case '{':
-                inlineTag(list);
-                break;
-
-            default:
-                nextChar();
-        }
-    }
-
-    protected boolean isIdentifierStart(char ch) {
-        return Character.isUnicodeIdentifierStart(ch);
-    }
-
-    protected String readIdentifier() {
-        int start = bp;
-        nextChar();
-        while (bp < buflen && Character.isUnicodeIdentifierPart(ch))
-            nextChar();
-        return new String(buf, start, bp - start);
-    }
-
-    protected String readAttributeName() {
-        int start = bp;
-        nextChar();
-        while (bp < buflen && (Character.isUnicodeIdentifierPart(ch) || ch == '-'))
-            nextChar();
-        return new String(buf, start, bp - start);
-    }
-
-    protected String readTagName() {
-        int start = bp;
-        nextChar();
-        while (bp < buflen
-                && (Character.isUnicodeIdentifierPart(ch) || ch == '.'
-                || ch == '-' || ch == ':')) {
-            nextChar();
-        }
-        return new String(buf, start, bp - start);
-    }
-
-    protected boolean isJavaIdentifierStart(char ch) {
-        return Character.isJavaIdentifierStart(ch);
-    }
-
-    protected String readJavaIdentifier() {
-        int start = bp;
-        nextChar();
-        while (bp < buflen && Character.isJavaIdentifierPart(ch))
-            nextChar();
-        return new String(buf, start, bp - start);
-    }
-
-    protected boolean isDecimalDigit(char ch) {
-        return ('0' <= ch && ch <= '9');
-    }
-
-    protected boolean isHexDigit(char ch) {
-        return ('0' <= ch && ch <= '9')
-                || ('a' <= ch && ch <= 'f')
-                || ('A' <= ch && ch <= 'F');
-    }
-
-    protected boolean isUnquotedAttrValueTerminator(char ch) {
-        switch (ch) {
-            case '\f': case '\n': case '\r': case '\t':
-            case ' ':
-            case '"': case '\'': case '`':
-            case '=': case '<': case '>':
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    protected boolean isWhitespace(char ch) {
-        return Character.isWhitespace(ch);
-    }
-
-    protected void skipWhitespace() {
-        while (isWhitespace(ch)) {
-            nextChar();
-        }
-    }
-
-    /**
-     * @param start position of first character of string
-     * @param end position of character beyond last character to be included
-     */
-    String newString(int start, int end) {
-        return new String(buf, start, end - start);
-    }
-
-    static abstract class TagParser {
-        enum Kind { INLINE, BLOCK }
-
-        final Kind kind;
-        final String name;
-
-
-        TagParser(Kind k, String tk) {
-            kind = k;
-            name = tk;
-        }
-
-        TagParser(Kind k, String tk, boolean retainWhiteSpace) {
-            this(k, tk);
-        }
-
-        Kind getKind() {
-            return kind;
-        }
-
-        String getName() {
-            return name;
-        }
-
-        abstract void parse(int pos) throws ParseException;
-    }
-
-    /**
-     * @see <a href="http://docs.oracle.com/javase/8/docs/technotes/tools/unix/javadoc.html#CHDJGIJB">Javadoc Tags</a>
-     */
-    @SuppressWarnings("deprecation")
-    private void initTagParsers() {
-        TagParser[] parsers = {
-            // @author name-text
-            new TagParser(Kind.BLOCK, "author") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // {@code text}
-            new TagParser(Kind.INLINE, "code", true) {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    inlineText(WhitespaceRetentionPolicy.REMOVE_FIRST_SPACE);
-                    nextChar();
-                }
-            },
-
-            // @deprecated deprecated-text
-            new TagParser(Kind.BLOCK, "deprecated") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // {@docRoot}
-            new TagParser(Kind.INLINE, "docRoot") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    if (ch == '}') {
-                        nextChar();
-                        return;
-                    }
-                    inlineText(WhitespaceRetentionPolicy.REMOVE_ALL); // skip unexpected content
-                    nextChar();
-                    throw new ParseException("dc.unexpected.content");
-                }
-            },
-
-            // @exception class-name description
-            new TagParser(Kind.BLOCK, "exception") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    skipWhitespace();
-                    reference(false);
-                    blockContent();
-                }
-            },
-
-            // @hidden hidden-text
-            new TagParser(Kind.BLOCK, "hidden") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // @index search-term options-description
-            new TagParser(Kind.INLINE, "index") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    skipWhitespace();
-                    if (ch == '}') {
-                        throw new ParseException("dc.no.content");
-                    }
-                    if (ch == '"') quotedString(); else inlineWord();
-                    skipWhitespace();
-                    if (ch != '}') {
-                        inlineContent();
-                    } else {
-                        nextChar();
-                    }
-                }
-            },
-
-            // {@inheritDoc}
-            new TagParser(Kind.INLINE, "inheritDoc") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    if (ch == '}') {
-                        nextChar();
-                        return;
-                    }
-                    inlineText(WhitespaceRetentionPolicy.REMOVE_ALL); // skip unexpected content
-                    nextChar();
-                    throw new ParseException("dc.unexpected.content");
-                }
-            },
-
-            // {@link package.class#member label}
-            new TagParser(Kind.INLINE, "link") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    reference(true);
-                    inlineContent();
-                }
-            },
-
-            // {@linkplain package.class#member label}
-            new TagParser(Kind.INLINE, "linkplain") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    reference(true);
-                    inlineContent();
-                }
-            },
-
-            // {@literal text}
-            new TagParser(Kind.INLINE, "literal", true) {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    inlineText(WhitespaceRetentionPolicy.REMOVE_FIRST_SPACE);
-                    nextChar();
-                }
-            },
-
-            // @param parameter-name description
-            new TagParser(Kind.BLOCK, "param") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    skipWhitespace();
-
-                    boolean typaram = false;
-                    if (ch == '<') {
-                        typaram = true;
-                        nextChar();
-                    }
-
-                    identifier();
-
-                    if (typaram) {
-                        if (ch != '>')
-                            throw new ParseException("dc.gt.expected");
-                        nextChar();
-                    }
-
-                    skipWhitespace();
-                    blockContent();
-                }
-            },
-
-            // @return description
-            new TagParser(Kind.BLOCK, "return") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // @see reference | quoted-string | HTML
-            new TagParser(Kind.BLOCK, "see") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    skipWhitespace();
-                    switch (ch) {
-                        case '"':
-                            quotedString();
-                            skipWhitespace();
-                            if (ch == '@'
-                                    || ch == EOI && bp == buf.length - 1) {
-                                return;
-                            }
-                            break;
-
-                        case '<':
-                            blockContent();
-                            return;
-
-                        case '@':
-                            if (newline)
-                                throw new ParseException("dc.no.content");
-                            break;
-
-                        case EOI:
-                            if (bp == buf.length - 1)
-                                throw new ParseException("dc.no.content");
-                            break;
-
-                        default:
-                            if (isJavaIdentifierStart(ch) || ch == '#') {
-                                reference(true);
-                                blockContent();
-                            }
-                    }
-                    throw new ParseException("dc.unexpected.content");
-                }
-            },
-
-            // @serialData data-description
-            new TagParser(Kind.BLOCK, "@serialData") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // @serialField field-name field-type description
-            new TagParser(Kind.BLOCK, "serialField") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    skipWhitespace();
-                    identifier();
-                    skipWhitespace();
-                    reference(false);
-                    if (isWhitespace(ch)) {
-                        skipWhitespace();
-                        blockContent();
-                    }
-                }
-            },
-
-            // @serial field-description | include | exclude
-            new TagParser(Kind.BLOCK, "serial") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // @since since-text
-            new TagParser(Kind.BLOCK, "since") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-
-            // @throws class-name description
-            new TagParser(Kind.BLOCK, "throws") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    skipWhitespace();
-                    reference(false);
-                    blockContent();
-                }
-            },
-
-            // {@value package.class#field}
-            new TagParser(Kind.INLINE, "value") {
-                @Override
-                public void parse(int pos) throws ParseException {
-                    reference(true);
-                    skipWhitespace();
-                    if (ch == '}') {
-                        nextChar();
-                        return;
-                    }
-                    nextChar();
-                    throw new ParseException("dc.unexpected.content");
-                }
-            },
-
-            // @version version-text
-            new TagParser(Kind.BLOCK, "version") {
-                @Override
-                public void parse(int pos) {
-                    blockContent();
-                }
-            },
-        };
-
-        tagParsers = new HashMap<>();
-        for (TagParser p: parsers)
-            tagParsers.put(p.getName(), p);
-
-    }
-
-    private void initEventAttrs() {
-        eventAttrs = new HashSet<>(Arrays.asList(
-            // See https://www.w3.org/TR/html-markup/global-attributes.html#common.attrs.event-handler
-            "onabort",  "onblur",  "oncanplay",  "oncanplaythrough",
-            "onchange",  "onclick",  "oncontextmenu",  "ondblclick",
-            "ondrag",  "ondragend",  "ondragenter",  "ondragleave",
-            "ondragover",  "ondragstart",  "ondrop",  "ondurationchange",
-            "onemptied",  "onended",  "onerror",  "onfocus",  "oninput",
-            "oninvalid",  "onkeydown",  "onkeypress",  "onkeyup",
-            "onload",  "onloadeddata",  "onloadedmetadata",  "onloadstart",
-            "onmousedown",  "onmousemove",  "onmouseout",  "onmouseover",
-            "onmouseup",  "onmousewheel",  "onpause",  "onplay",
-            "onplaying",  "onprogress",  "onratechange",  "onreadystatechange",
-            "onreset",  "onscroll",  "onseeked",  "onseeking",
-            "onselect",  "onshow",  "onstalled",  "onsubmit",  "onsuspend",
-            "ontimeupdate",  "onvolumechange",  "onwaiting",
-
-            // See https://www.w3.org/TR/html4/sgml/dtd.html
-            // Most of the attributes that take a %Script are also defined as event handlers
-            // in HTML 5. The one exception is onunload.
-            // "onchange",  "onclick",   "ondblclick",  "onfocus",
-            // "onkeydown",  "onkeypress",  "onkeyup",  "onload",
-            // "onmousedown",  "onmousemove",  "onmouseout",  "onmouseover",
-            // "onmouseup",  "onreset",  "onselect",  "onsubmit",
-            "onunload"
-        ));
-    }
-
-    private void initURIAttrs() {
-        uriAttrs = new HashSet<>(Arrays.asList(
-            // See https://www.w3.org/TR/html4/sgml/dtd.html
-            //     https://www.w3.org/TR/html5/
-            // These are all the attributes that take a %URI or a valid URL potentially surrounded
-            // by spaces
-            "action",  "cite",  "classid",  "codebase",  "data",
-            "datasrc",  "for",  "href",  "longdesc",  "profile",
-            "src",  "usemap"
-        ));
-    }
-
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocClassFinder.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.util.EnumSet;
-import javax.tools.JavaFileObject;
-
-import com.sun.tools.javac.code.Symbol.PackageSymbol;
-import com.sun.tools.javac.code.ClassFinder;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.Context.Factory;
-
-/** Javadoc uses an extended class finder that records package.html entries
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- *  @author Neal Gafter
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class JavadocClassFinder extends ClassFinder {
-
-    public static JavadocClassFinder instance(Context context) {
-        ClassFinder instance = context.get(classFinderKey);
-        if (instance == null)
-            instance = new JavadocClassFinder(context);
-        return (JavadocClassFinder)instance;
-    }
-
-    public static void preRegister(Context context) {
-        context.put(classFinderKey, (Factory<ClassFinder>)JavadocClassFinder::new);
-    }
-
-    private DocEnv docenv;
-    private EnumSet<JavaFileObject.Kind> all = EnumSet.of(JavaFileObject.Kind.CLASS,
-                                                          JavaFileObject.Kind.SOURCE,
-                                                          JavaFileObject.Kind.HTML);
-    private EnumSet<JavaFileObject.Kind> noSource = EnumSet.of(JavaFileObject.Kind.CLASS,
-                                                               JavaFileObject.Kind.HTML);
-
-    public JavadocClassFinder(Context context) {
-        super(context);
-        docenv = DocEnv.instance(context);
-        preferSource = true;
-    }
-
-    /**
-     * Override getPackageFileKinds to include search for package.html
-     */
-    @Override
-    protected EnumSet<JavaFileObject.Kind> getPackageFileKinds() {
-        return docenv.docClasses ? noSource : all;
-    }
-
-    /**
-     * Override extraFileActions to check for package documentation
-     */
-    @Override
-    protected void extraFileActions(PackageSymbol pack, JavaFileObject fo) {
-        if (fo.isNameCompatible("package", JavaFileObject.Kind.HTML))
-            docenv.getPackageDoc(pack).setDocPath(fo);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocEnter.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import javax.tools.JavaFileObject;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.comp.Enter;
-import com.sun.tools.javac.tree.JCTree.*;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
-import com.sun.tools.javac.util.List;
-
-import static com.sun.tools.javac.code.Kinds.Kind.*;
-import com.sun.tools.javac.main.JavaCompiler;
-
-/**
- *  Javadoc's own enter phase does a few things above and beyond that
- *  done by javac.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- *  @author Neal Gafter
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class JavadocEnter extends Enter {
-    public static JavadocEnter instance(Context context) {
-        Enter instance = context.get(enterKey);
-        if (instance == null)
-            instance = new JavadocEnter(context);
-        return (JavadocEnter)instance;
-    }
-
-    public static void preRegister(Context context) {
-        context.put(enterKey, (Context.Factory<Enter>)JavadocEnter::new);
-    }
-
-    protected JavadocEnter(Context context) {
-        super(context);
-        messager = Messager.instance0(context);
-        docenv = DocEnv.instance(context);
-        compiler = JavaCompiler.instance(context);
-    }
-
-    final Messager messager;
-    final DocEnv docenv;
-    final JavaCompiler compiler;
-
-    @Override
-    public void main(List<JCCompilationUnit> trees) {
-        // count all Enter errors as warnings.
-        int nerrors = messager.nerrors;
-        super.main(trees);
-        compiler.enterDone();
-        messager.nwarnings += (messager.nerrors - nerrors);
-        messager.nerrors = nerrors;
-    }
-
-    @Override
-    public void visitTopLevel(JCCompilationUnit tree) {
-        super.visitTopLevel(tree);
-        if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) {
-            JCPackageDecl pd = tree.getPackage();
-            TreePath tp = pd == null ? docenv.getTreePath(tree) : docenv.getTreePath(tree, pd);
-            docenv.makePackageDoc(tree.packge, tp);
-        }
-    }
-
-    @Override
-    public void visitClassDef(JCClassDecl tree) {
-        super.visitClassDef(tree);
-        if (tree.sym == null) return;
-        if (tree.sym.kind == TYP || tree.sym.kind == ERR) {
-            ClassSymbol c = tree.sym;
-            docenv.makeClassDoc(c, docenv.getTreePath(env.toplevel, tree));
-        }
-    }
-
-    /** Don't complain about a duplicate class. */
-    @Override
-    protected void duplicateClass(DiagnosticPosition pos, ClassSymbol c) {}
-
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocMemberEnter.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.comp.MemberEnter;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.*;
-import com.sun.tools.javac.util.Context;
-
-import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.Kind.*;
-
-/**
- *  Javadoc's own memberEnter phase does a few things above and beyond that
- *  done by javac.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- *  @author Neal Gafter
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class JavadocMemberEnter extends MemberEnter {
-    public static JavadocMemberEnter instance0(Context context) {
-        MemberEnter instance = context.get(memberEnterKey);
-        if (instance == null)
-            instance = new JavadocMemberEnter(context);
-        return (JavadocMemberEnter)instance;
-    }
-
-    public static void preRegister(Context context) {
-        context.put(memberEnterKey, (Context.Factory<MemberEnter>)JavadocMemberEnter::new);
-    }
-
-    final DocEnv docenv;
-
-    protected JavadocMemberEnter(Context context) {
-        super(context);
-        docenv = DocEnv.instance(context);
-    }
-
-    @Override
-    public void visitMethodDef(JCMethodDecl tree) {
-        super.visitMethodDef(tree);
-        MethodSymbol meth = tree.sym;
-        if (meth == null || meth.kind != MTH) return;
-        TreePath treePath = docenv.getTreePath(env.toplevel, env.enclClass, tree);
-        if (meth.isConstructor())
-            docenv.makeConstructorDoc(meth, treePath);
-        else if (isAnnotationTypeElement(meth))
-            docenv.makeAnnotationTypeElementDoc(meth, treePath);
-        else
-            docenv.makeMethodDoc(meth, treePath);
-
-        // release resources
-        tree.body = null;
-    }
-
-    @Override
-    public void visitVarDef(JCVariableDecl tree) {
-        if (tree.init != null) {
-            boolean isFinal = (tree.mods.flags & FINAL) != 0
-                    || (env.enclClass.mods.flags & INTERFACE) != 0;
-            if (!isFinal || containsNonConstantExpression(tree.init)) {
-                // Avoid unnecessary analysis and release resources.
-                // In particular, remove non-constant expressions
-                // which may trigger Attr.attribClass, since
-                // method bodies are also removed, in visitMethodDef.
-                tree.init = null;
-            }
-        }
-        super.visitVarDef(tree);
-        if (tree.sym != null &&
-                tree.sym.kind == VAR &&
-                !isParameter(tree.sym)) {
-            docenv.makeFieldDoc(tree.sym, docenv.getTreePath(env.toplevel, env.enclClass, tree));
-        }
-    }
-
-    private static boolean isAnnotationTypeElement(MethodSymbol meth) {
-        return ClassDocImpl.isAnnotationType(meth.enclClass());
-    }
-
-    private static boolean isParameter(VarSymbol var) {
-        return (var.flags() & Flags.PARAMETER) != 0;
-    }
-
-    /**
-     * Simple analysis of an expression tree to see if it contains tree nodes
-     * for any non-constant expression. This does not include checking references
-     * to other fields which may or may not be constant.
-     */
-    private static boolean containsNonConstantExpression(JCExpression tree) {
-        return new MaybeConstantExpressionScanner().containsNonConstantExpression(tree);
-    }
-
-    /**
-     * See JLS 15.18, Constant Expression
-     */
-    private static class MaybeConstantExpressionScanner extends JCTree.Visitor {
-        boolean maybeConstantExpr = true;
-
-        public boolean containsNonConstantExpression(JCExpression tree) {
-            scan(tree);
-            return !maybeConstantExpr;
-        }
-
-        public void scan(JCTree tree) {
-            // short circuit scan when end result is definitely false
-            if (maybeConstantExpr && tree != null)
-                tree.accept(this);
-        }
-
-        @Override
-        /** default for any non-overridden visit method. */
-        public void visitTree(JCTree tree) {
-            maybeConstantExpr = false;
-        }
-
-        @Override
-        public void visitBinary(JCBinary tree) {
-            switch (tree.getTag()) {
-                case MUL: case DIV: case MOD:
-                case PLUS: case MINUS:
-                case SL: case SR: case USR:
-                case LT: case LE: case GT: case GE:
-                case EQ: case NE:
-                case BITAND: case BITXOR: case BITOR:
-                case AND: case OR:
-                    break;
-                default:
-                    maybeConstantExpr = false;
-            }
-        }
-
-        @Override
-        public void visitConditional(JCConditional tree) {
-            scan(tree.cond);
-            scan(tree.truepart);
-            scan(tree.falsepart);
-        }
-
-        @Override
-        public void visitIdent(JCIdent tree) { }
-
-        @Override
-        public void visitLiteral(JCLiteral tree) { }
-
-        @Override
-        public void visitParens(JCParens tree) {
-            scan(tree.expr);
-        }
-
-        @Override
-        public void visitSelect(JCTree.JCFieldAccess tree) {
-            scan(tree.selected);
-        }
-
-        @Override
-        public void visitTypeCast(JCTypeCast tree) {
-            scan(tree.clazz);
-            scan(tree.expr);
-        }
-
-        @Override
-        public void visitTypeIdent(JCPrimitiveTypeTree tree) { }
-
-        @Override
-        public void visitUnary(JCUnary tree) {
-            switch (tree.getTag()) {
-                case POS: case NEG: case COMPL: case NOT:
-                    break;
-                default:
-                    maybeConstantExpr = false;
-            }
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocTodo.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.tools.javac.comp.*;
-import com.sun.tools.javac.util.*;
-import com.sun.tools.javac.util.Context.Factory;
-
-/**
- *  Javadoc's own todo queue doesn't queue its inputs, as javadoc
- *  doesn't perform attribution of method bodies or semantic checking.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- *  @author Neal Gafter
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class JavadocTodo extends Todo {
-    public static void preRegister(Context context) {
-        context.put(todoKey, (Factory<Todo>)JavadocTodo::new);
-    }
-
-    protected JavadocTodo(Context context) {
-        super(context);
-    }
-
-    @Override
-    public void append(Env<AttrContext> e) {
-        // do nothing; Javadoc doesn't perform attribution.
-    }
-
-    @Override
-    public boolean offer(Env<AttrContext> e) {
-        return false;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/JavadocTool.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,440 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.tools.JavaFileManager;
-import javax.tools.JavaFileManager.Location;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.StandardLocation;
-
-import com.sun.tools.javac.code.ClassFinder;
-import com.sun.tools.javac.code.Symbol.Completer;
-import com.sun.tools.javac.code.Symbol.ModuleSymbol;
-import com.sun.tools.javac.code.Symbol.PackageSymbol;
-import com.sun.tools.javac.comp.Enter;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCClassDecl;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.util.Abort;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Name;
-
-
-/**
- *  This class could be the main entry point for Javadoc when Javadoc is used as a
- *  component in a larger software system. It provides operations to
- *  construct a new javadoc processor, and to run it on a set of source
- *  files.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- *  @author Neal Gafter
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class JavadocTool extends com.sun.tools.javac.main.JavaCompiler {
-    DocEnv docenv;
-
-    final Messager messager;
-    final ClassFinder javadocFinder;
-    final Enter javadocEnter;
-    final Set<JavaFileObject> uniquefiles;
-
-    /**
-     * Construct a new JavaCompiler processor, using appropriately
-     * extended phases of the underlying compiler.
-     */
-    protected JavadocTool(Context context) {
-        super(context);
-        messager = Messager.instance0(context);
-        javadocFinder = JavadocClassFinder.instance(context);
-        javadocEnter = JavadocEnter.instance(context);
-        uniquefiles = new HashSet<>();
-    }
-
-    /**
-     * For javadoc, the parser needs to keep comments. Overrides method from JavaCompiler.
-     */
-    @Override
-    protected boolean keepComments() {
-        return true;
-    }
-
-    /**
-     *  Construct a new javadoc tool.
-     */
-    public static JavadocTool make0(Context context) {
-        // force the use of Javadoc's class finder
-        JavadocClassFinder.preRegister(context);
-
-        // force the use of Javadoc's own enter phase
-        JavadocEnter.preRegister(context);
-
-        // force the use of Javadoc's own member enter phase
-        JavadocMemberEnter.preRegister(context);
-
-        // force the use of Javadoc's own todo phase
-        JavadocTodo.preRegister(context);
-
-        // force the use of Messager as a Log
-        Messager.instance0(context);
-
-        return new JavadocTool(context);
-    }
-
-    public RootDocImpl getRootDocImpl(String doclocale,
-                                      String encoding,
-                                      ModifierFilter filter,
-                                      List<String> args,
-                                      List<String[]> options,
-                                      Iterable<? extends JavaFileObject> fileObjects,
-                                      boolean breakiterator,
-                                      List<String> subPackages,
-                                      List<String> excludedPackages,
-                                      boolean docClasses,
-                                      boolean legacyDoclet,
-                      boolean quiet) throws IOException {
-        docenv = DocEnv.instance(context);
-        docenv.showAccess = filter;
-        docenv.quiet = quiet;
-        docenv.breakiterator = breakiterator;
-        docenv.setLocale(doclocale);
-        docenv.setEncoding(encoding);
-        docenv.docClasses = docClasses;
-        docenv.legacyDoclet = legacyDoclet;
-
-        javadocFinder.sourceCompleter = docClasses ? Completer.NULL_COMPLETER : sourceCompleter;
-
-        if (docClasses) {
-            // If -Xclasses is set, the args should be a series of class names
-            for (String arg: args) {
-                if (!isValidPackageName(arg)) // checks
-                    docenv.error(null, "main.illegal_class_name", arg);
-            }
-            if (messager.nerrors() != 0) {
-                return null;
-            }
-            return new RootDocImpl(docenv, args, options);
-        }
-
-        ListBuffer<JCCompilationUnit> classTrees = new ListBuffer<>();
-        Set<String> includedPackages = new LinkedHashSet<>();
-
-        try {
-            StandardJavaFileManager fm = docenv.fileManager instanceof StandardJavaFileManager
-                    ? (StandardJavaFileManager) docenv.fileManager : null;
-            Set<String> packageNames = new LinkedHashSet<>();
-            // Normally, the args should be a series of package names or file names.
-            // Parse the files and collect the package names.
-            for (String arg: args) {
-                if (fm != null && arg.endsWith(".java") && new File(arg).exists()) {
-                    if (new File(arg).getName().equals("module-info.java")) {
-                        docenv.warning(null, "main.file_ignored", arg);
-                    } else {
-                        parse(fm.getJavaFileObjects(arg), classTrees, true);
-                    }
-                } else if (isValidPackageName(arg)) {
-                    packageNames.add(arg);
-                } else if (arg.endsWith(".java")) {
-                    if (fm == null)
-                        throw new IllegalArgumentException();
-                    else
-                        docenv.error(null, "main.file_not_found", arg);
-                } else {
-                    docenv.error(null, "main.illegal_package_name", arg);
-                }
-            }
-
-            // Parse file objects provide via the DocumentationTool API
-            parse(fileObjects, classTrees, true);
-
-            modules.initModules(classTrees.toList());
-
-            // Build up the complete list of any packages to be documented
-            Location location = modules.multiModuleMode ? StandardLocation.MODULE_SOURCE_PATH
-                    : docenv.fileManager.hasLocation(StandardLocation.SOURCE_PATH) ? StandardLocation.SOURCE_PATH
-                    : StandardLocation.CLASS_PATH;
-
-            PackageTable t = new PackageTable(docenv.fileManager, location)
-                    .packages(packageNames)
-                    .subpackages(subPackages, excludedPackages);
-
-            includedPackages = t.getIncludedPackages();
-
-            // Parse the files in the packages to be documented
-            ListBuffer<JCCompilationUnit> packageTrees = new ListBuffer<>();
-            for (String packageName: includedPackages) {
-                List<JavaFileObject> files = t.getFiles(packageName);
-                docenv.notice("main.Loading_source_files_for_package", packageName);
-
-                if (files.isEmpty())
-                    messager.warning(Messager.NOPOS, "main.no_source_files_for_package", packageName);
-                parse(files, packageTrees, false);
-            }
-            modules.enter(packageTrees.toList(), null);
-
-            if (messager.nerrors() != 0) {
-                return null;
-            }
-
-            // Enter symbols for all files
-            docenv.notice("main.Building_tree");
-            javadocEnter.main(classTrees.toList().appendList(packageTrees.toList()));
-        } catch (Abort ex) {}
-
-        if (messager.nerrors() != 0)
-            return null;
-
-        return new RootDocImpl(docenv, listClasses(classTrees.toList()), List.from(includedPackages), options);
-    }
-
-    /** Is the given string a valid package name? */
-    boolean isValidPackageName(String s) {
-        int index;
-        while ((index = s.indexOf('.')) != -1) {
-            if (!isValidClassName(s.substring(0, index))) return false;
-            s = s.substring(index+1);
-        }
-        return isValidClassName(s);
-    }
-
-    private void parse(Iterable<? extends JavaFileObject> files, ListBuffer<JCCompilationUnit> trees,
-                       boolean trace) {
-        for (JavaFileObject fo: files) {
-            if (uniquefiles.add(fo)) { // ignore duplicates
-                if (trace)
-                    docenv.notice("main.Loading_source_file", fo.getName());
-                trees.append(parse(fo));
-            }
-        }
-    }
-
-    /** Are surrogates supported?
-     */
-    final static boolean surrogatesSupported = surrogatesSupported();
-    private static boolean surrogatesSupported() {
-        try {
-            boolean b = Character.isHighSurrogate('a');
-            return true;
-        } catch (NoSuchMethodError ex) {
-            return false;
-        }
-    }
-
-    /**
-     * Return true if given file name is a valid class name
-     * (including "package-info").
-     * @param s the name of the class to check.
-     * @return true if given class name is a valid class name
-     * and false otherwise.
-     */
-    public static boolean isValidClassName(String s) {
-        if (s.length() < 1) return false;
-        if (s.equals("package-info")) return true;
-        if (surrogatesSupported) {
-            int cp = s.codePointAt(0);
-            if (!Character.isJavaIdentifierStart(cp))
-                return false;
-            for (int j=Character.charCount(cp); j<s.length(); j+=Character.charCount(cp)) {
-                cp = s.codePointAt(j);
-                if (!Character.isJavaIdentifierPart(cp))
-                    return false;
-            }
-        } else {
-            if (!Character.isJavaIdentifierStart(s.charAt(0)))
-                return false;
-            for (int j=1; j<s.length(); j++)
-                if (!Character.isJavaIdentifierPart(s.charAt(j)))
-                    return false;
-        }
-        return true;
-    }
-
-    /**
-     * From a list of top level trees, return the list of contained class definitions
-     */
-    List<JCClassDecl> listClasses(List<JCCompilationUnit> trees) {
-        ListBuffer<JCClassDecl> result = new ListBuffer<>();
-        for (JCCompilationUnit t : trees) {
-            for (JCTree def : t.defs) {
-                if (def.hasTag(JCTree.Tag.CLASSDEF))
-                    result.append((JCClassDecl)def);
-            }
-        }
-        return result.toList();
-    }
-
-    /**
-     * A table to manage included and excluded packages.
-     */
-    class PackageTable {
-        private final Map<String, Entry> entries = new LinkedHashMap<>();
-        private final Set<String> includedPackages = new LinkedHashSet<>();
-        private final JavaFileManager fm;
-        private final Location location;
-        private final Set<JavaFileObject.Kind> sourceKinds = EnumSet.of(JavaFileObject.Kind.SOURCE);
-
-        /**
-         * Creates a table to manage included and excluded packages.
-         * @param fm The file manager used to locate source files
-         * @param locn the location used to locate source files
-         */
-        PackageTable(JavaFileManager fm, Location locn) {
-            this.fm = fm;
-            this.location = locn;
-            getEntry("").excluded = false;
-        }
-
-        PackageTable packages(Collection<String> packageNames) {
-            includedPackages.addAll(packageNames);
-            return this;
-        }
-
-        PackageTable subpackages(Collection<String> packageNames, Collection<String> excludePackageNames)
-                throws IOException {
-            for (String p: excludePackageNames) {
-                getEntry(p).excluded = true;
-            }
-
-            for (String packageName: packageNames) {
-                Location packageLocn = getLocation(packageName);
-                for (JavaFileObject fo: fm.list(packageLocn, packageName, sourceKinds, true)) {
-                    String binaryName = fm.inferBinaryName(packageLocn, fo);
-                    String pn = getPackageName(binaryName);
-                    String simpleName = getSimpleName(binaryName);
-                    Entry e = getEntry(pn);
-                    if (!e.isExcluded() && isValidClassName(simpleName)) {
-                        includedPackages.add(pn);
-                        e.files = (e.files == null ? List.of(fo) : e.files.prepend(fo));
-                    }
-                }
-            }
-            return this;
-        }
-
-        /**
-         * Returns the aggregate set of included packages.
-         * @return the aggregate set of included packages
-         */
-        Set<String> getIncludedPackages() {
-            return includedPackages;
-        }
-
-        /**
-         * Returns the set of source files for a package.
-         * @param packageName the specified package
-         * @return the set of file objects for the specified package
-         * @throws IOException if an error occurs while accessing the files
-         */
-        List<JavaFileObject> getFiles(String packageName) throws IOException {
-            Entry e = getEntry(packageName);
-            // The files may have been found as a side effect of searching for subpackages
-            if (e.files != null)
-                return e.files;
-
-            ListBuffer<JavaFileObject> lb = new ListBuffer<>();
-            Location packageLocn = getLocation(packageName);
-            for (JavaFileObject fo: fm.list(packageLocn, packageName, sourceKinds, false)) {
-                String binaryName = fm.inferBinaryName(packageLocn, fo);
-                String simpleName = getSimpleName(binaryName);
-                if (isValidClassName(simpleName)) {
-                    lb.append(fo);
-                }
-            }
-
-            return lb.toList();
-        }
-
-        private Location getLocation(String packageName) throws IOException {
-            if (location == StandardLocation.MODULE_SOURCE_PATH) {
-                // TODO: handle invalid results
-                Name pack = names.fromString(packageName);
-
-                for (ModuleSymbol msym : modules.allModules()) {
-                    PackageSymbol p = syms.getPackage(msym, pack);
-                    if (p != null && !p.members().isEmpty()) {
-                        return fm.getLocationForModule(location, msym.name.toString());
-                    }
-                }
-
-                return null;
-            } else {
-                return location;
-            }
-        }
-
-        private Entry getEntry(String name) {
-            Entry e = entries.get(name);
-            if (e == null)
-                entries.put(name, e = new Entry(name));
-            return e;
-        }
-
-        private String getPackageName(String name) {
-            int lastDot = name.lastIndexOf(".");
-            return (lastDot == -1 ? "" : name.substring(0, lastDot));
-        }
-
-        private String getSimpleName(String name) {
-            int lastDot = name.lastIndexOf(".");
-            return (lastDot == -1 ? name : name.substring(lastDot + 1));
-        }
-
-        class Entry {
-            final String name;
-            Boolean excluded;
-            List<JavaFileObject> files;
-
-            Entry(String name) {
-                this.name = name;
-            }
-
-            boolean isExcluded() {
-                if (excluded == null)
-                    excluded = getEntry(getPackageName(name)).isExcluded();
-                return excluded;
-            }
-        }
-    }
-
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/MemberDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Symbol;
-
-/**
- * Represents a member of a java class: field, constructor, or method.
- * This is an abstract class dealing with information common to
- * method, constructor and field members. Class members of a class
- * (nested classes) are represented instead by ClassDocImpl.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @see MethodDocImpl
- * @see FieldDocImpl
- * @see ClassDocImpl
- *
- * @author Robert Field
- * @author Neal Gafter
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public abstract class MemberDocImpl
-    extends ProgramElementDocImpl
-    implements MemberDoc {
-
-    /**
-     * constructor.
-     */
-    public MemberDocImpl(DocEnv env, Symbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-    }
-
-    /**
-     * Returns true if this field was synthesized by the compiler.
-     */
-    public abstract boolean isSynthetic();
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Messager.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.PrintWriter;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.Context.Factory;
-import com.sun.tools.javac.util.JCDiagnostic;
-import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
-import com.sun.tools.javac.util.JavacMessages;
-import com.sun.tools.javac.util.Log;
-
-/**
- * Utility for integrating with javadoc tools and for localization.
- * Handle Resources. Access to error and warning counts.
- * Message formatting.
- * <br>
- * Also provides implementation for DocErrorReporter.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @see java.util.ResourceBundle
- * @see java.text.MessageFormat
- * @author Neal Gafter (rewrite)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class Messager extends Log implements DocErrorReporter {
-    public static final SourcePosition NOPOS = null;
-
-    /** Get the current messager, which is also the compiler log. */
-    public static Messager instance0(Context context) {
-        Log instance = context.get(logKey);
-        if (instance == null || !(instance instanceof Messager))
-            throw new InternalError("no messager instance!");
-        return (Messager)instance;
-    }
-
-    public static void preRegister(Context context,
-                                   final String programName) {
-        context.put(logKey, (Factory<Log>)c -> new Messager(c, programName));
-    }
-    public static void preRegister(Context context,
-                                   final String programName,
-                                   final PrintWriter errWriter,
-                                   final PrintWriter warnWriter,
-                                   final PrintWriter noticeWriter) {
-        context.put(logKey, (Factory<Log>)c -> new Messager(c,
-                            programName,
-                            errWriter,
-                            warnWriter,
-                            noticeWriter));
-    }
-
-    public class ExitJavadoc extends Error {
-        private static final long serialVersionUID = 0;
-    }
-
-    final String programName;
-
-    private Locale locale;
-    private final JavacMessages messages;
-    private final JCDiagnostic.Factory javadocDiags;
-
-    /** The default writer for diagnostics
-     */
-    static final PrintWriter defaultErrWriter = new PrintWriter(System.err);
-    static final PrintWriter defaultWarnWriter = new PrintWriter(System.err);
-    static final PrintWriter defaultNoticeWriter = new PrintWriter(System.out);
-
-    /**
-     * Constructor
-     * @param programName  Name of the program (for error messages).
-     */
-    protected Messager(Context context, String programName) {
-        this(context, programName, defaultErrWriter, defaultWarnWriter, defaultNoticeWriter);
-    }
-
-    /**
-     * Constructor
-     * @param programName  Name of the program (for error messages).
-     * @param errWriter    Stream for error messages
-     * @param warnWriter   Stream for warnings
-     * @param noticeWriter Stream for other messages
-     */
-    @SuppressWarnings("deprecation")
-    protected Messager(Context context,
-                       String programName,
-                       PrintWriter errWriter,
-                       PrintWriter warnWriter,
-                       PrintWriter noticeWriter) {
-        super(context, errWriter, warnWriter, noticeWriter);
-        messages = JavacMessages.instance(context);
-        messages.add(locale -> ResourceBundle.getBundle("com.sun.tools.javadoc.resources.javadoc",
-                                                         locale));
-        javadocDiags = new JCDiagnostic.Factory(messages, "javadoc");
-        this.programName = programName;
-
-    }
-
-    public void setLocale(Locale locale) {
-        this.locale = locale;
-    }
-
-    /**
-     * get and format message string from resource
-     *
-     * @param key selects message from resource
-     * @param args arguments for the message
-     */
-    String getText(String key, Object... args) {
-        return messages.getLocalizedString(locale, key, args);
-    }
-
-    /**
-     * Print error message, increment error count.
-     * Part of DocErrorReporter.
-     *
-     * @param msg message to print
-     */
-    public void printError(String msg) {
-        printError(null, msg);
-    }
-
-    /**
-     * Print error message, increment error count.
-     * Part of DocErrorReporter.
-     *
-     * @param pos the position where the error occurs
-     * @param msg message to print
-     */
-    public void printError(SourcePosition pos, String msg) {
-        if (diagListener != null) {
-            report(DiagnosticType.ERROR, pos, msg);
-            return;
-        }
-
-        if (nerrors < MaxErrors) {
-            String prefix = (pos == null) ? programName : pos.toString();
-            PrintWriter errWriter = getWriter(WriterKind.ERROR);
-            errWriter.println(prefix + ": " + getText("javadoc.error") + " - " + msg);
-            errWriter.flush();
-            prompt();
-            nerrors++;
-        }
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     * Part of DocErrorReporter.
-     *
-     * @param msg message to print
-     */
-    public void printWarning(String msg) {
-        printWarning(null, msg);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     * Part of DocErrorReporter.
-     *
-     * @param pos the position where the error occurs
-     * @param msg message to print
-     */
-    public void printWarning(SourcePosition pos, String msg) {
-        if (diagListener != null) {
-            report(DiagnosticType.WARNING, pos, msg);
-            return;
-        }
-
-        if (nwarnings < MaxWarnings) {
-            String prefix = (pos == null) ? programName : pos.toString();
-            PrintWriter warnWriter = getWriter(WriterKind.WARNING);
-            warnWriter.println(prefix +  ": " + getText("javadoc.warning") +" - " + msg);
-            warnWriter.flush();
-            nwarnings++;
-        }
-    }
-
-    /**
-     * Print a message.
-     * Part of DocErrorReporter.
-     *
-     * @param msg message to print
-     */
-    public void printNotice(String msg) {
-        printNotice(null, msg);
-    }
-
-    /**
-     * Print a message.
-     * Part of DocErrorReporter.
-     *
-     * @param pos the position where the error occurs
-     * @param msg message to print
-     */
-    public void printNotice(SourcePosition pos, String msg) {
-        if (diagListener != null) {
-            report(DiagnosticType.NOTE, pos, msg);
-            return;
-        }
-
-        PrintWriter noticeWriter = getWriter(WriterKind.NOTICE);
-        if (pos == null)
-            noticeWriter.println(msg);
-        else
-            noticeWriter.println(pos + ": " + msg);
-        noticeWriter.flush();
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param key selects message from resource
-     */
-    public void error(SourcePosition pos, String key, Object... args) {
-        printError(pos, getText(key, args));
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param key selects message from resource
-     */
-    public void warning(SourcePosition pos, String key, Object... args) {
-        printWarning(pos, getText(key, args));
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param key selects message from resource
-     */
-    public void notice(String key, Object... args) {
-        printNotice(getText(key, args));
-    }
-
-    /**
-     * Return total number of errors, including those recorded
-     * in the compilation log.
-     */
-    public int nerrors() { return nerrors; }
-
-    /**
-     * Return total number of warnings, including those recorded
-     * in the compilation log.
-     */
-    public int nwarnings() { return nwarnings; }
-
-    /**
-     * Print exit message.
-     */
-    public void exitNotice() {
-        if (nerrors > 0) {
-            notice((nerrors > 1) ? "main.errors" : "main.error",
-                   "" + nerrors);
-        }
-        if (nwarnings > 0) {
-            notice((nwarnings > 1) ?  "main.warnings" : "main.warning",
-                   "" + nwarnings);
-        }
-    }
-
-    /**
-     * Force program exit, e.g., from a fatal error.
-     * <p>
-     * TODO: This method does not really belong here.
-     */
-    public void exit() {
-        throw new ExitJavadoc();
-    }
-
-    private void report(DiagnosticType type, SourcePosition pos, String msg) {
-        switch (type) {
-            case ERROR:
-            case WARNING:
-                Object prefix = (pos == null) ? programName : pos;
-                report(javadocDiags.create(type, null, null, "msg", prefix, msg));
-                break;
-
-            case NOTE:
-                String key = (pos == null) ? "msg" : "pos.msg";
-                report(javadocDiags.create(type, null, null, key, pos, msg));
-                break;
-
-            default:
-                throw new IllegalArgumentException(type.toString());
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/MethodDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.lang.reflect.Modifier;
-
-import com.sun.javadoc.*;
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.*;
-import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.code.Type;
-import static com.sun.tools.javac.code.TypeTag.CLASS;
-
-/**
- * Represents a method of a java class.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class MethodDocImpl
-        extends ExecutableMemberDocImpl implements MethodDoc {
-
-    /**
-     * constructor.
-     */
-    public MethodDocImpl(DocEnv env, MethodSymbol sym) {
-        super(env, sym);
-    }
-
-    /**
-     * constructor.
-     */
-    public MethodDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
-        super(env, sym, treePath);
-    }
-
-    /**
-     * Return true if it is a method, which it is.
-     * Note: constructors are not methods.
-     * This method is overridden by AnnotationTypeElementDocImpl.
-     *
-     * @return true
-     */
-    public boolean isMethod() {
-        return true;
-    }
-
-    /**
-     * Return true if this method is default
-     */
-    public boolean isDefault() {
-        return (sym.flags() & Flags.DEFAULT) != 0;
-    }
-
-    /**
-     * Return true if this method is abstract
-     */
-    public boolean isAbstract() {
-        return (Modifier.isAbstract(getModifiers()) && !isDefault());
-    }
-
-    /**
-     * Get return type.
-     *
-     * @return the return type of this method, null if it
-     * is a constructor.
-     */
-    public com.sun.javadoc.Type returnType() {
-        return TypeMaker.getType(env, sym.type.getReturnType(), false);
-    }
-
-    /**
-     * Return the class that originally defined the method that
-     * is overridden by the current definition, or null if no
-     * such class exists.
-     *
-     * @return a ClassDocImpl representing the superclass that
-     * originally defined this method, null if this method does
-     * not override a definition in a superclass.
-     */
-    public ClassDoc overriddenClass() {
-        com.sun.javadoc.Type t = overriddenType();
-        return (t != null) ? t.asClassDoc() : null;
-    }
-
-    /**
-     * Return the type containing the method that this method overrides.
-     * It may be a <code>ClassDoc</code> or a <code>ParameterizedType</code>.
-     */
-    public com.sun.javadoc.Type overriddenType() {
-
-        if ((sym.flags() & Flags.STATIC) != 0) {
-            return null;
-        }
-
-        ClassSymbol origin = (ClassSymbol)sym.owner;
-        for (Type t = env.types.supertype(origin.type);
-             t.hasTag(CLASS);
-             t = env.types.supertype(t)) {
-            ClassSymbol c = (ClassSymbol)t.tsym;
-            for (Symbol sym2 : membersOf(c).getSymbolsByName(sym.name)) {
-                if (sym.overrides(sym2, origin, env.types, true)) {
-                    return TypeMaker.getType(env, t);
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return the method that this method overrides.
-     *
-     * @return a MethodDoc representing a method definition
-     * in a superclass this method overrides, null if
-     * this method does not override.
-     */
-    public MethodDoc overriddenMethod() {
-
-        // Real overriding only.  Static members are simply hidden.
-        // Likewise for constructors, but the MethodSymbol.overrides
-        // method takes this into account.
-        if ((sym.flags() & Flags.STATIC) != 0) {
-            return null;
-        }
-
-        // Derived from  com.sun.tools.javac.comp.Check.checkOverride .
-
-        ClassSymbol origin = (ClassSymbol)sym.owner;
-        for (Type t = env.types.supertype(origin.type);
-             t.hasTag(CLASS);
-             t = env.types.supertype(t)) {
-            ClassSymbol c = (ClassSymbol)t.tsym;
-            for (Symbol sym2 : membersOf(c).getSymbolsByName(sym.name)) {
-                if (sym.overrides(sym2, origin, env.types, true)) {
-                    return env.getMethodDoc((MethodSymbol)sym2);
-                }
-            }
-        }
-        return null;
-    }
-
-    /**Retrieve members of c, ignoring any CompletionFailures that occur. */
-    private Scope membersOf(ClassSymbol c) {
-        try {
-            return c.members();
-        } catch (CompletionFailure cf) {
-            /* Quietly ignore completion failures and try again - the type
-             * for which the CompletionFailure was thrown shouldn't be completed
-             * again by the completer that threw the CompletionFailure.
-             */
-            return membersOf(c);
-        }
-    }
-
-    /**
-     * Tests whether this method overrides another.
-     * The overridden method may be one declared in a superclass or
-     * a superinterface (unlike {@link #overriddenMethod()}).
-     *
-     * <p> When a non-abstract method overrides an abstract one, it is
-     * also said to <i>implement</i> the other.
-     *
-     * @param meth  the other method to examine
-     * @return <tt>true</tt> if this method overrides the other
-     */
-    public boolean overrides(MethodDoc meth) {
-        MethodSymbol overridee = ((MethodDocImpl) meth).sym;
-        ClassSymbol origin = (ClassSymbol) sym.owner;
-
-        return sym.name == overridee.name &&
-
-               // not reflexive as per JLS
-               sym != overridee &&
-
-               // we don't care if overridee is static, though that wouldn't
-               // compile
-               !sym.isStatic() &&
-
-               // sym, whose declaring type is the origin, must be
-               // in a subtype of overridee's type
-               env.types.asSuper(origin.type, overridee.owner) != null &&
-
-               // check access and signatures; don't check return types
-               sym.overrides(overridee, origin, env.types, false);
-    }
-
-
-    public String name() {
-        if (name == null) {
-            name = sym.name.toString();
-        }
-        return name;
-    }
-
-    private String name;
-
-    public String qualifiedName() {
-        if (qualifiedName == null) {
-            qualifiedName =  sym.enclClass().getQualifiedName() + "." + sym.name;
-        }
-        return qualifiedName;
-    }
-
-    private String qualifiedName;
-
-    /**
-     * Returns a string representation of this method.  Includes the
-     * qualified signature, the qualified method name, and any type
-     * parameters.  Type parameters follow the class name, as they do
-     * in the syntax for invoking methods with explicit type parameters.
-     */
-    public String toString() {
-        return sym.enclClass().getQualifiedName() +
-                "." + typeParametersString() + name() + signature();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ModifierFilter.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import static com.sun.tools.javac.code.Flags.*;
-
-/**
- *   A class whose instances are filters over Modifier bits.
- *   Filtering is done by returning boolean values.
- *   Classes, methods and fields can be filtered, or filtering
- *   can be done directly on modifier bits.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- *   @see com.sun.tools.javac.code.Flags
- *   @author Robert Field
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class ModifierFilter {
-
-    /**
-    * Package private access.
-    * A "pseudo-" modifier bit that can be used in the
-    * constructors of this class to specify package private
-    * access. This is needed since there is no Modifier.PACKAGE.
-    */
-    public static final long PACKAGE = 0x8000000000000000L;
-
-    /**
-    * All access modifiers.
-    * A short-hand set of modifier bits that can be used in the
-    * constructors of this class to specify all access modifiers,
-    * Same as PRIVATE | PROTECTED | PUBLIC | PACKAGE.
-    */
-    public static final long ALL_ACCESS =
-                PRIVATE | PROTECTED | PUBLIC | PACKAGE;
-
-    private long oneOf;
-    private long must;
-    private long cannot;
-
-    private static final int ACCESS_BITS = PRIVATE | PROTECTED | PUBLIC;
-
-    /**
-     * Constructor - Specify a filter.
-     *
-     * @param   oneOf   If zero, everything passes the filter.
-     *                  If non-zero, at least one of the specified
-     *                  bits must be on in the modifier bits to
-     *                  pass the filter.
-     */
-    public ModifierFilter(long oneOf) {
-        this(oneOf, 0, 0);
-    }
-
-    /**
-     * Constructor - Specify a filter.
-     * For example, the filter below  will only pass synchronized
-     * methods that are private or package private access and are
-     * not native or static.
-     * <pre>
-     * ModifierFilter(  Modifier.PRIVATE | ModifierFilter.PACKAGE,
-     *                  Modifier.SYNCHRONIZED,
-     *                  Modifier.NATIVE | Modifier.STATIC)
-     * </pre><p>
-     * Each of the three arguments must either be
-     * zero or the or'ed combination of the bits specified in the
-     * class Modifier or this class. During filtering, these values
-     * are compared against the modifier bits as follows:
-     *
-     * @param   oneOf   If zero, ignore this argument.
-     *                  If non-zero, at least one of the bits must be on.
-     * @param   must    All bits specified must be on.
-     * @param   cannot  None of the bits specified can be on.
-     */
-    public ModifierFilter(long oneOf, long must, long cannot) {
-        this.oneOf = oneOf;
-        this.must = must;
-        this.cannot = cannot;
-    }
-
-    /**
-     * Filter on modifier bits.
-     *
-     * @param   modifierBits    Bits as specified in the Modifier class
-     *
-     * @return                  Whether the modifierBits pass this filter.
-     */
-    public boolean checkModifier(int modifierBits) {
-        // Add in the "pseudo-" modifier bit PACKAGE, if needed
-        long fmod = ((modifierBits & ACCESS_BITS) == 0) ?
-                        modifierBits | PACKAGE :
-                        modifierBits;
-        return ((oneOf == 0) || ((oneOf & fmod) != 0)) &&
-                ((must & fmod) == must) &&
-                ((cannot & fmod) == 0);
-    }
-
-} // end ModifierFilter
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/PackageDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.tools.FileObject;
-
-import com.sun.javadoc.*;
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.PackageSymbol;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Name;
-import com.sun.tools.javac.util.Position;
-
-import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
-
-/**
- * Represents a java package.  Provides access to information
- * about the package, the package's comment and tags, and the
- * classes in the package.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (package-info.java)
- */
-
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class PackageDocImpl extends DocImpl implements PackageDoc {
-
-    public final PackageSymbol sym;
-    private JCCompilationUnit tree = null;    // for source position
-
-    public FileObject docPath = null;
-    private boolean foundDoc;   // found a doc comment in either
-                                // package.html or package-info.java
-
-    boolean isIncluded = false;  // Set in RootDocImpl.
-    public boolean setDocPath = false;  //Flag to avoid setting doc path multiple times.
-
-    /**
-     * Constructor
-     */
-    public PackageDocImpl(DocEnv env, PackageSymbol sym) {
-        this(env, sym, null);
-    }
-
-    /**
-     * Constructor
-     */
-    public PackageDocImpl(DocEnv env, PackageSymbol sym, TreePath treePath) {
-        super(env, treePath);
-        this.sym = sym;
-        this.tree = (treePath == null) ? null : (JCCompilationUnit) treePath.getCompilationUnit();
-        foundDoc = (documentation != null);
-    }
-
-    void setTree(JCTree tree) {
-        this.tree = (JCCompilationUnit) tree;
-    }
-
-    public void setTreePath(TreePath treePath) {
-        super.setTreePath(treePath);
-        checkDoc();
-    }
-
-    /**
-     * Do lazy initialization of "documentation" string.
-     */
-    protected String documentation() {
-        if (documentation != null)
-            return documentation;
-        if (docPath != null) {
-            // read from file
-            try {
-                InputStream s = docPath.openInputStream();
-                documentation = readHTMLDocumentation(s, docPath);
-            } catch (IOException exc) {
-                documentation = "";
-                env.error(null, "javadoc.File_Read_Error", docPath.getName());
-            }
-        } else {
-            // no doc file to be had
-            documentation = "";
-        }
-        return documentation;
-    }
-
-    /**
-     * Cache of all classes contained in this package, including
-     * member classes of those classes, and their member classes, etc.
-     * Includes only those classes at the specified protection level
-     * and weaker.
-     */
-    private List<ClassDocImpl> allClassesFiltered = null;
-
-    /**
-     * Cache of all classes contained in this package, including
-     * member classes of those classes, and their member classes, etc.
-     */
-    private List<ClassDocImpl> allClasses = null;
-
-    /**
-     * Return a list of all classes contained in this package, including
-     * member classes of those classes, and their member classes, etc.
-     */
-    private List<ClassDocImpl> getClasses(boolean filtered) {
-        if (allClasses != null && !filtered) {
-            return allClasses;
-        }
-        if (allClassesFiltered != null && filtered) {
-            return allClassesFiltered;
-        }
-        ListBuffer<ClassDocImpl> classes = new ListBuffer<>();
-        for (Symbol enumerated : sym.members().getSymbols(NON_RECURSIVE)) {
-            if (enumerated != null) {
-                ClassSymbol s = (ClassSymbol)enumerated;
-                ClassDocImpl c = env.getClassDoc(s);
-                if (c != null && !c.isSynthetic())
-                    c.addAllClasses(classes, filtered);
-            }
-        }
-        if (filtered)
-            return allClassesFiltered = classes.toList();
-        else
-            return allClasses = classes.toList();
-    }
-
-    /**
-     * Add all included classes (including Exceptions and Errors)
-     * and interfaces.
-     */
-    public void addAllClassesTo(ListBuffer<ClassDocImpl> list) {
-        list.appendList(getClasses(true));
-    }
-
-    /**
-     * Get all classes (including Exceptions and Errors)
-     * and interfaces.
-     * @since J2SE1.4.
-     *
-     * @return all classes and interfaces in this package, filtered to include
-     * only the included classes if filter==true.
-     */
-    public ClassDoc[] allClasses(boolean filter) {
-        List<ClassDocImpl> classes = getClasses(filter);
-        return classes.toArray(new ClassDocImpl[classes.length()]);
-    }
-
-    /**
-     * Get all included classes (including Exceptions and Errors)
-     * and interfaces.  Same as allClasses(true).
-     *
-     * @return all included classes and interfaces in this package.
-     */
-    public ClassDoc[] allClasses() {
-        return allClasses(true);
-    }
-
-    /**
-     * Get ordinary classes (that is, exclude exceptions, errors,
-     * enums, interfaces, and annotation types) in this package.
-     *
-     * @return included ordinary classes in this package.
-     */
-    public ClassDoc[] ordinaryClasses() {
-        ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
-        for (ClassDocImpl c : getClasses(true)) {
-            if (c.isOrdinaryClass()) {
-                ret.append(c);
-            }
-        }
-        return ret.toArray(new ClassDocImpl[ret.length()]);
-    }
-
-    /**
-     * Get Exception classes in this package.
-     *
-     * @return included Exceptions in this package.
-     */
-    public ClassDoc[] exceptions() {
-        ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
-        for (ClassDocImpl c : getClasses(true)) {
-            if (c.isException()) {
-                ret.append(c);
-            }
-        }
-        return ret.toArray(new ClassDocImpl[ret.length()]);
-    }
-
-    /**
-     * Get Error classes in this package.
-     *
-     * @return included Errors in this package.
-     */
-    public ClassDoc[] errors() {
-        ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
-        for (ClassDocImpl c : getClasses(true)) {
-            if (c.isError()) {
-                ret.append(c);
-            }
-        }
-        return ret.toArray(new ClassDocImpl[ret.length()]);
-    }
-
-    /**
-     * Get included enum types in this package.
-     *
-     * @return included enum types in this package.
-     */
-    public ClassDoc[] enums() {
-        ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
-        for (ClassDocImpl c : getClasses(true)) {
-            if (c.isEnum()) {
-                ret.append(c);
-            }
-        }
-        return ret.toArray(new ClassDocImpl[ret.length()]);
-    }
-
-    /**
-     * Get included interfaces in this package, omitting annotation types.
-     *
-     * @return included interfaces in this package.
-     */
-    public ClassDoc[] interfaces() {
-        ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
-        for (ClassDocImpl c : getClasses(true)) {
-            if (c.isInterface()) {
-                ret.append(c);
-            }
-        }
-        return ret.toArray(new ClassDocImpl[ret.length()]);
-    }
-
-    /**
-     * Get included annotation types in this package.
-     *
-     * @return included annotation types in this package.
-     */
-    public AnnotationTypeDoc[] annotationTypes() {
-        ListBuffer<AnnotationTypeDocImpl> ret = new ListBuffer<>();
-        for (ClassDocImpl c : getClasses(true)) {
-            if (c.isAnnotationType()) {
-                ret.append((AnnotationTypeDocImpl)c);
-            }
-        }
-        return ret.toArray(new AnnotationTypeDocImpl[ret.length()]);
-    }
-
-    /**
-     * Get the annotations of this package.
-     * Return an empty array if there are none.
-     */
-    public AnnotationDesc[] annotations() {
-        AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
-        int i = 0;
-        for (Attribute.Compound a : sym.getRawAttributes()) {
-            res[i++] = new AnnotationDescImpl(env, a);
-        }
-        return res;
-    }
-
-
-    /**
-     * Lookup for a class within this package.
-     *
-     * @return ClassDocImpl of found class, or null if not found.
-     */
-    public ClassDoc findClass(String className) {
-        final boolean filtered = true;
-        for (ClassDocImpl c : getClasses(filtered)) {
-            if (c.name().equals(className)) {
-                return c;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return true if this package is included in the active set.
-     */
-    public boolean isIncluded() {
-        return isIncluded;
-    }
-
-    /**
-     * Get package name.
-     *
-     * Note that we do not provide a means of obtaining the simple
-     * name of a package -- package names are always returned in their
-     * uniquely qualified form.
-     */
-    public String name() {
-        return qualifiedName();
-    }
-
-    /**
-     * Get package name.
-     */
-    public String qualifiedName() {
-        if (qualifiedName == null) {
-            Name fullname = sym.getQualifiedName();
-            // Some bogus tests depend on the interned "" being returned.
-            // See 6457276.
-            qualifiedName = fullname.isEmpty() ? "" : fullname.toString();
-        }
-        return qualifiedName;
-    }
-
-    private String qualifiedName;
-
-    /**
-     * set doc path for an unzipped directory
-     */
-    public void setDocPath(FileObject path) {
-        setDocPath = true;
-        if (path == null)
-            return;
-        if (!path.equals(docPath)) {
-            docPath = path;
-            checkDoc();
-        }
-    }
-
-    // Has checkDoc() sounded off yet?
-    private boolean checkDocWarningEmitted = false;
-
-    /**
-     * Invoked when a source of package doc comments is located.
-     * Emits a diagnostic if this is the second one.
-     */
-    private void checkDoc() {
-        if (foundDoc) {
-            if (!checkDocWarningEmitted) {
-                env.warning(null, "javadoc.Multiple_package_comments", name());
-                checkDocWarningEmitted = true;
-            }
-        } else {
-            foundDoc = true;
-        }
-    }
-
-    /**
-     * Return the source position of the entity, or null if
-     * no position is available.
-     */
-    public SourcePosition position() {
-        return (tree != null)
-                ? SourcePositionImpl.make(tree.sourcefile, tree.pos, tree.lineMap)
-                : SourcePositionImpl.make(docPath, Position.NOPOS, null);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ParamTagImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.util.regex.*;
-
-import com.sun.javadoc.*;
-
-/**
- * Represents an @param documentation tag.
- * Parses and stores the name and comment parts of the parameter tag.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Robert Field
- *
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class ParamTagImpl extends TagImpl implements ParamTag {
-
-    private static final Pattern typeParamRE = Pattern.compile("<([^<>]+)>");
-
-    private final String parameterName;
-    private final String parameterComment;
-    private final boolean isTypeParameter;
-
-    /**
-     * Cached inline tags.
-     */
-    private Tag[] inlineTags;
-
-    ParamTagImpl(DocImpl holder, String name, String text) {
-        super(holder, name, text);
-        String[] sa = divideAtWhite();
-
-        Matcher m = typeParamRE.matcher(sa[0]);
-        isTypeParameter = m.matches();
-        parameterName = isTypeParameter ? m.group(1) : sa[0];
-        parameterComment = sa[1];
-    }
-
-    /**
-     * Return the parameter name.
-     */
-    public String parameterName() {
-        return parameterName;
-    }
-
-    /**
-     * Return the parameter comment.
-     */
-    public String parameterComment() {
-        return parameterComment;
-    }
-
-    /**
-     * Return the kind of this tag.
-     */
-    @Override
-    public String kind() {
-        return "@param";
-    }
-
-    /**
-     * Return true if this ParamTag corresponds to a type parameter.
-     */
-    public boolean isTypeParameter() {
-        return isTypeParameter;
-    }
-
-    /**
-     * convert this object to a string.
-     */
-    @Override
-    public String toString() {
-        return name + ":" + text;
-    }
-
-    /**
-     * For the parameter comment with embedded @link tags return the array of
-     * TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
-     *
-     * @return TagImpl[] Array of tags with inline SeeTagImpls.
-     * @see TagImpl#inlineTags()
-     * @see ThrowsTagImpl#inlineTags()
-     */
-    @Override
-    public Tag[] inlineTags() {
-        if (inlineTags == null) {
-            inlineTags = Comment.getInlineTags(holder, parameterComment);
-        }
-        return inlineTags;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ParameterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Symbol.VarSymbol;
-
-/**
- * ParameterImpl information.
- * This includes a parameter type and parameter name.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- * @author Scott Seligman (generics, annotations)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class ParameterImpl implements Parameter {
-
-    private final DocEnv env;
-    private final VarSymbol sym;
-    private final com.sun.javadoc.Type type;
-
-    /**
-     * Constructor of parameter info class.
-     */
-    ParameterImpl(DocEnv env, VarSymbol sym) {
-        this.env = env;
-        this.sym = sym;
-        this.type = TypeMaker.getType(env, sym.type, false);
-    }
-
-    /**
-     * Get the type of this parameter.
-     */
-    public com.sun.javadoc.Type type() {
-        return type;
-    }
-
-    /**
-     * Get local name of this parameter.
-     * For example if parameter is the short 'index', returns "index".
-     */
-    public String name() {
-        return sym.toString();
-    }
-
-    /**
-     * Get type name of this parameter.
-     * For example if parameter is the short 'index', returns "short".
-     */
-    public String typeName() {
-        return (type instanceof ClassDoc || type instanceof TypeVariable)
-                ? type.typeName()       // omit formal type params or bounds
-                : type.toString();
-    }
-
-    /**
-     * Returns a string representation of the parameter.
-     * <p>
-     * For example if parameter is the short 'index', returns "short index".
-     *
-     * @return type name and parameter name of this parameter.
-     */
-    public String toString() {
-        return typeName() + " " + sym;
-    }
-
-    /**
-     * Get the annotations of this parameter.
-     * Return an empty array if there are none.
-     */
-    public AnnotationDesc[] annotations() {
-        AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
-        int i = 0;
-        for (Attribute.Compound a : sym.getRawAttributes()) {
-            res[i++] = new AnnotationDescImpl(env, a);
-        }
-        return res;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ParameterizedTypeImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.Type.ClassType;
-
-import static com.sun.tools.javac.code.TypeTag.CLASS;
-
-
-/**
- * Implementation of <code>ParameterizedType</code>, which
- * represents an invocation of a generic class or interface.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class ParameterizedTypeImpl
-        extends AbstractTypeImpl implements ParameterizedType {
-
-    ParameterizedTypeImpl(DocEnv env, Type type) {
-        super(env, type);
-    }
-
-    /**
-     * Return the generic class or interface that declared this type.
-     */
-    @Override
-    public ClassDoc asClassDoc() {
-        return env.getClassDoc((ClassSymbol)type.tsym);
-    }
-
-    /**
-     * Return the actual type arguments of this type.
-     */
-    public com.sun.javadoc.Type[] typeArguments() {
-        return TypeMaker.getTypes(env, type.getTypeArguments());
-    }
-
-    /**
-     * Return the class type that is a direct supertype of this one.
-     * Return null if this is an interface type.
-     */
-    public com.sun.javadoc.Type superclassType() {
-        if (asClassDoc().isInterface()) {
-            return null;
-        }
-        Type sup = env.types.supertype(type);
-        return TypeMaker.getType(env,
-                                 (sup != type) ? sup : env.syms.objectType);
-    }
-
-    /**
-     * Return the interface types directly implemented by or extended by this
-     * parameterized type.
-     * Return an empty array if there are no interfaces.
-     */
-    public com.sun.javadoc.Type[] interfaceTypes() {
-        return TypeMaker.getTypes(env, env.types.interfaces(type));
-    }
-
-    /**
-     * Return the type that contains this type as a member.
-     * Return null is this is a top-level type.
-     */
-    public com.sun.javadoc.Type containingType() {
-        if (type.getEnclosingType().hasTag(CLASS)) {
-            // This is the type of an inner class.
-            return TypeMaker.getType(env, type.getEnclosingType());
-        }
-        ClassSymbol enclosing = type.tsym.owner.enclClass();
-        if (enclosing != null) {
-            // Nested but not inner.  Return the ClassDoc of the enclosing
-            // class or interface.
-            // See java.lang.reflect.ParameterizedType.getOwnerType().
-            return env.getClassDoc(enclosing);
-        }
-        return null;
-    }
-
-
-    // Asking for the "name" of a parameterized type doesn't exactly make
-    // sense.  It's a type expression.  Return the name of its generic
-    // type.
-    @Override
-    public String typeName() {
-        return TypeMaker.getTypeName(type, false);
-    }
-
-    @Override
-    public ParameterizedType asParameterizedType() {
-        return this;
-    }
-
-    @Override
-    public String toString() {
-        return parameterizedTypeToString(env, (ClassType)type, true);
-    }
-
-    static String parameterizedTypeToString(DocEnv env, ClassType cl,
-                                            boolean full) {
-        if (env.legacyDoclet) {
-            return TypeMaker.getTypeName(cl, full);
-        }
-        StringBuilder s = new StringBuilder();
-        if (!(cl.getEnclosingType().hasTag(CLASS))) {               // if not an inner class...
-            s.append(TypeMaker.getTypeName(cl, full));
-        } else {
-            ClassType encl = (ClassType)cl.getEnclosingType();
-            s.append(parameterizedTypeToString(env, encl, full))
-             .append('.')
-             .append(cl.tsym.name.toString());
-        }
-        s.append(TypeMaker.typeArgumentsString(env, cl, full));
-        return s.toString();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/PrimitiveType.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-/**
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class PrimitiveType implements com.sun.javadoc.Type {
-
-    private final String name;
-
-    static final PrimitiveType voidType = new PrimitiveType("void");
-    static final PrimitiveType booleanType = new PrimitiveType("boolean");
-    static final PrimitiveType byteType = new PrimitiveType("byte");
-    static final PrimitiveType charType = new PrimitiveType("char");
-    static final PrimitiveType shortType = new PrimitiveType("short");
-    static final PrimitiveType intType = new PrimitiveType("int");
-    static final PrimitiveType longType = new PrimitiveType("long");
-    static final PrimitiveType floatType = new PrimitiveType("float");
-    static final PrimitiveType doubleType = new PrimitiveType("double");
-
-    // error type, should never actually be used
-    static final PrimitiveType errorType = new PrimitiveType("");
-
-    PrimitiveType(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Return unqualified name of type excluding any dimension information.
-     * <p>
-     * For example, a two dimensional array of String returns 'String'.
-     */
-    public String typeName() {
-        return name;
-    }
-
-    public com.sun.javadoc.Type getElementType() {
-        return null;
-    }
-
-    /**
-     * Return qualified name of type excluding any dimension information.
-     *<p>
-     * For example, a two dimensional array of String
-     * returns 'java.lang.String'.
-     */
-    public String qualifiedTypeName() {
-        return name;
-    }
-
-    /**
-     * Return the simple name of this type.
-     */
-    public String simpleTypeName() {
-        return name;
-    }
-
-    /**
-     * Return the type's dimension information, as a string.
-     * <p>
-     * For example, a two dimensional array of String returns '[][]'.
-     */
-    public String dimension() {
-        return "";
-    }
-
-    /**
-     * Return this type as a class.  Array dimensions are ignored.
-     *
-     * @return a ClassDocImpl if the type is a Class.
-     * Return null if it is a primitive type..
-     */
-    public ClassDoc asClassDoc() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not an annotation type.
-     */
-    public AnnotationTypeDoc asAnnotationTypeDoc() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not an instantiation.
-     */
-    public ParameterizedType asParameterizedType() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not a type variable.
-     */
-    public TypeVariable asTypeVariable() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not a wildcard type.
-     */
-    public WildcardType asWildcardType() {
-        return null;
-    }
-
-    /**
-     * Return null, as this is not an annotated type.
-     */
-    public AnnotatedType asAnnotatedType() {
-        return null;
-    }
-
-    /**
-     * Returns a string representation of the type.
-     *
-     * Return name of type including any dimension information.
-     * <p>
-     * For example, a two dimensional array of String returns
-     * <code>String[][]</code>.
-     *
-     * @return name of type including any dimension information.
-     */
-    public String toString() {
-        return qualifiedTypeName();
-    }
-
-    /**
-     * Return true if this is a primitive type.
-     */
-    public boolean isPrimitive() {
-        return true;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ProgramElementDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,233 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.lang.reflect.Modifier;
-import java.text.CollationKey;
-
-import com.sun.javadoc.*;
-import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.util.Position;
-
-/**
- * Represents a java program element: class, interface, field,
- * constructor, or method.
- * This is an abstract class dealing with information common to
- * these elements.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @see MemberDocImpl
- * @see ClassDocImpl
- *
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (generics, enums, annotations)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public abstract class ProgramElementDocImpl
-        extends DocImpl implements ProgramElementDoc {
-
-    private final Symbol sym;
-
-    // For source position information.
-    JCTree tree = null;
-    Position.LineMap lineMap = null;
-
-
-    // Cache for getModifiers().
-    private int modifiers = -1;
-
-    protected ProgramElementDocImpl(DocEnv env, Symbol sym, TreePath treePath) {
-        super(env, treePath);
-        this.sym = sym;
-        if (treePath != null) {
-            tree = (JCTree) treePath.getLeaf();
-            lineMap = ((JCCompilationUnit) treePath.getCompilationUnit()).lineMap;
-        }
-    }
-
-    @Override
-    void setTreePath(TreePath treePath) {
-        super.setTreePath(treePath);
-        this.tree = (JCTree) treePath.getLeaf();
-        this.lineMap = ((JCCompilationUnit) treePath.getCompilationUnit()).lineMap;
-    }
-
-    /**
-     * Subclasses override to identify the containing class
-     */
-    protected abstract ClassSymbol getContainingClass();
-
-    /**
-     * Returns the flags in terms of javac's flags
-     */
-    abstract protected long getFlags();
-
-    /**
-     * Returns the modifier flags in terms of java.lang.reflect.Modifier.
-     */
-    protected int getModifiers() {
-        if (modifiers == -1) {
-            modifiers = DocEnv.translateModifiers(getFlags());
-        }
-        return modifiers;
-    }
-
-    /**
-     * Get the containing class of this program element.
-     *
-     * @return a ClassDocImpl for this element's containing class.
-     * If this is a class with no outer class, return null.
-     */
-    public ClassDoc containingClass() {
-        if (getContainingClass() == null) {
-            return null;
-        }
-        return env.getClassDoc(getContainingClass());
-    }
-
-    /**
-     * Return the package that this member is contained in.
-     * Return "" if in unnamed package.
-     */
-    public PackageDoc containingPackage() {
-        return env.getPackageDoc(getContainingClass().packge());
-    }
-
-    /**
-     * Get the modifier specifier integer.
-     *
-     * @see java.lang.reflect.Modifier
-     */
-    public int modifierSpecifier() {
-        int modifiers = getModifiers();
-        if (isMethod() && containingClass().isInterface())
-            // Remove the implicit abstract modifier.
-            return modifiers & ~Modifier.ABSTRACT;
-        return modifiers;
-    }
-
-    /**
-     * Get modifiers string.
-     * <pre>
-     * Example, for:
-     *   public abstract int foo() { ... }
-     * modifiers() would return:
-     *   'public abstract'
-     * </pre>
-     * Annotations are not included.
-     */
-    public String modifiers() {
-        int modifiers = getModifiers();
-        if (isAnnotationTypeElement() ||
-                (isMethod() && containingClass().isInterface())) {
-            // Remove the implicit abstract modifier.
-            return Modifier.toString(modifiers & ~Modifier.ABSTRACT);
-        } else {
-            return Modifier.toString(modifiers);
-        }
-    }
-
-    /**
-     * Get the annotations of this program element.
-     * Return an empty array if there are none.
-     */
-    public AnnotationDesc[] annotations() {
-        AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
-        int i = 0;
-        for (Attribute.Compound a : sym.getRawAttributes()) {
-            res[i++] = new AnnotationDescImpl(env, a);
-        }
-        return res;
-    }
-
-    /**
-     * Return true if this program element is public
-     */
-    public boolean isPublic() {
-        int modifiers = getModifiers();
-        return Modifier.isPublic(modifiers);
-    }
-
-    /**
-     * Return true if this program element is protected
-     */
-    public boolean isProtected() {
-        int modifiers = getModifiers();
-        return Modifier.isProtected(modifiers);
-    }
-
-    /**
-     * Return true if this program element is private
-     */
-    public boolean isPrivate() {
-        int modifiers = getModifiers();
-        return Modifier.isPrivate(modifiers);
-    }
-
-    /**
-     * Return true if this program element is package private
-     */
-    public boolean isPackagePrivate() {
-        return !(isPublic() || isPrivate() || isProtected());
-    }
-
-    /**
-     * Return true if this program element is static
-     */
-    public boolean isStatic() {
-        int modifiers = getModifiers();
-        return Modifier.isStatic(modifiers);
-    }
-
-    /**
-     * Return true if this program element is final
-     */
-    public boolean isFinal() {
-        int modifiers = getModifiers();
-        return Modifier.isFinal(modifiers);
-    }
-
-    /**
-     * Generate a key for sorting.
-     */
-    CollationKey generateKey() {
-        String k = name();
-        // System.out.println("COLLATION KEY FOR " + this + " is \"" + k + "\"");
-        return env.doclocale.collator.getCollationKey(k);
-    }
-
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/RootDocImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,401 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Locale;
-
-import javax.tools.JavaFileManager;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.code.Source.Feature;
-import com.sun.tools.javac.tree.JCTree.JCClassDecl;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Position;
-
-/**
- * This class holds the information from one run of javadoc.
- * Particularly the packages, classes and options specified
- * by the user.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Neal Gafter (rewrite)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class RootDocImpl extends DocImpl implements RootDoc {
-
-    /**
-     * list of classes specified on the command line.
-     */
-    private List<ClassDocImpl> cmdLineClasses;
-
-    /**
-     * list of packages specified on the command line.
-     */
-    private List<PackageDocImpl> cmdLinePackages;
-
-    /**
-     * a collection of all options.
-     */
-    private List<String[]> options;
-
-    /**
-     * Constructor used when reading source files.
-     *
-     * @param env the documentation environment, state for this javadoc run
-     * @param classes list of classes specified on the commandline
-     * @param packages list of package names specified on the commandline
-     * @param options list of options
-     */
-    public RootDocImpl(DocEnv env, List<JCClassDecl> classes, List<String> packages, List<String[]> options) {
-        super(env, null);
-        this.options = options;
-        setPackages(env, packages);
-        setClasses(env, classes);
-    }
-
-    /**
-     * Constructor used when reading class files.
-     *
-     * @param env the documentation environment, state for this javadoc run
-     * @param classes list of class names specified on the commandline
-     * @param options list of options
-     */
-    public RootDocImpl(DocEnv env, List<String> classes, List<String[]> options) {
-        super(env, null);
-        this.options = options;
-        cmdLinePackages = List.nil();
-        ListBuffer<ClassDocImpl> classList = new ListBuffer<>();
-        for (String className : classes) {
-            ClassDocImpl c = env.loadClass(className);
-            if (c == null)
-                env.error(null, "javadoc.class_not_found", className);
-            else
-                classList = classList.append(c);
-        }
-        cmdLineClasses = classList.toList();
-    }
-
-    /**
-     * Initialize classes information. Those classes are input from
-     * command line.
-     *
-     * @param env the compilation environment
-     * @param classes a list of ClassDeclaration
-     */
-    private void setClasses(DocEnv env, List<JCClassDecl> classes) {
-        ListBuffer<ClassDocImpl> result = new ListBuffer<>();
-        for (JCClassDecl def : classes) {
-            //### Do we want modifier check here?
-            if (env.shouldDocument(def.sym)) {
-                ClassDocImpl cd = env.getClassDoc(def.sym);
-                if (cd != null) {
-                    cd.isIncluded = true;
-                    result.append(cd);
-                } //else System.out.println(" (classdoc is null)");//DEBUG
-            } //else System.out.println(" (env.shouldDocument() returned false)");//DEBUG
-        }
-        cmdLineClasses = result.toList();
-    }
-
-    /**
-     * Initialize packages information.
-     *
-     * @param env the compilation environment
-     * @param packages a list of package names (String)
-     */
-    private void setPackages(DocEnv env, List<String> packages) {
-        ListBuffer<PackageDocImpl> packlist = new ListBuffer<>();
-        for (String name : packages) {
-            PackageDocImpl pkg = env.lookupPackage(name);
-            if (pkg != null) {
-                pkg.isIncluded = true;
-                packlist.append(pkg);
-            } else {
-                env.warning(null, "main.no_source_files_for_package", name);
-            }
-        }
-        cmdLinePackages = packlist.toList();
-    }
-
-    /**
-     * Command line options.
-     *
-     * <pre>
-     * For example, given:
-     *     javadoc -foo this that -bar other ...
-     *
-     * This method will return:
-     *      options()[0][0] = "-foo"
-     *      options()[0][1] = "this"
-     *      options()[0][2] = "that"
-     *      options()[1][0] = "-bar"
-     *      options()[1][1] = "other"
-     * </pre>
-     *
-     * @return an array of arrays of String.
-     */
-    public String[][] options() {
-        return options.toArray(new String[options.length()][]);
-    }
-
-    /**
-     * Packages specified on the command line.
-     */
-    public PackageDoc[] specifiedPackages() {
-        return (PackageDoc[])cmdLinePackages
-            .toArray(new PackageDocImpl[cmdLinePackages.length()]);
-    }
-
-    /**
-     * Classes and interfaces specified on the command line.
-     */
-    public ClassDoc[] specifiedClasses() {
-        ListBuffer<ClassDocImpl> classesToDocument = new ListBuffer<>();
-        for (ClassDocImpl cd : cmdLineClasses) {
-            cd.addAllClasses(classesToDocument, true);
-        }
-        return (ClassDoc[])classesToDocument.toArray(new ClassDocImpl[classesToDocument.length()]);
-    }
-
-    /**
-     * Return all classes and interfaces (including those inside
-     * packages) to be documented.
-     */
-    public ClassDoc[] classes() {
-        ListBuffer<ClassDocImpl> classesToDocument = new ListBuffer<>();
-        for (ClassDocImpl cd : cmdLineClasses) {
-            cd.addAllClasses(classesToDocument, true);
-        }
-        for (PackageDocImpl pd : cmdLinePackages) {
-            pd.addAllClassesTo(classesToDocument);
-        }
-        return classesToDocument.toArray(new ClassDocImpl[classesToDocument.length()]);
-    }
-
-    /**
-     * Return a ClassDoc for the specified class/interface name
-     *
-     * @param qualifiedName qualified class name
-     *                        (i.e. includes package name).
-     *
-     * @return a ClassDocImpl holding the specified class, null if
-     * this class is not referenced.
-     */
-    public ClassDoc classNamed(String qualifiedName) {
-        return env.lookupClass(qualifiedName);
-    }
-
-    /**
-     * Return a PackageDoc for the specified package name
-     *
-     * @param name package name
-     *
-     * @return a PackageDoc holding the specified package, null if
-     * this package is not referenced.
-     */
-    public PackageDoc packageNamed(String name) {
-        return env.lookupPackage(name);
-    }
-
-    /**
-     * Return the name of this Doc item.
-     *
-     * @return the string <code>"*RootDocImpl*"</code>.
-     */
-    public String name() {
-        return "*RootDocImpl*";
-    }
-
-    /**
-     * Return the name of this Doc item.
-     *
-     * @return the string <code>"*RootDocImpl*"</code>.
-     */
-    public String qualifiedName() {
-        return "*RootDocImpl*";
-    }
-
-    /**
-     * Return true if this Doc is include in the active set.
-     * RootDocImpl isn't even a program entity so it is always false.
-     */
-    public boolean isIncluded() {
-        return false;
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param msg message to print
-     */
-    public void printError(String msg) {
-        env.printError(msg);
-    }
-
-    /**
-     * Print error message, increment error count.
-     *
-     * @param msg message to print
-     */
-    public void printError(SourcePosition pos, String msg) {
-        env.printError(pos, msg);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param msg message to print
-     */
-    public void printWarning(String msg) {
-        env.printWarning(msg);
-    }
-
-    /**
-     * Print warning message, increment warning count.
-     *
-     * @param msg message to print
-     */
-    public void printWarning(SourcePosition pos, String msg) {
-        env.printWarning(pos, msg);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param msg message to print
-     */
-    public void printNotice(String msg) {
-        env.printNotice(msg);
-    }
-
-    /**
-     * Print a message.
-     *
-     * @param msg message to print
-     */
-    public void printNotice(SourcePosition pos, String msg) {
-        env.printNotice(pos, msg);
-    }
-
-    /**
-     * Return the path of the overview file and null if it does not exist.
-     * @return the path of the overview file and null if it does not exist.
-     */
-    private JavaFileObject getOverviewPath() {
-        for (String[] opt : options) {
-            if (opt[0].equals("-overview")) {
-                if (env.fileManager instanceof StandardJavaFileManager) {
-                    StandardJavaFileManager fm = (StandardJavaFileManager) env.fileManager;
-                    return fm.getJavaFileObjects(opt[1]).iterator().next();
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Do lazy initialization of "documentation" string.
-     */
-    @Override
-    protected String documentation() {
-        if (documentation == null) {
-            JavaFileObject overviewPath = getOverviewPath();
-            if (overviewPath == null) {
-                // no doc file to be had
-                documentation = "";
-            } else {
-                // read from file
-                try {
-                    documentation = readHTMLDocumentation(
-                        overviewPath.openInputStream(),
-                        overviewPath);
-                } catch (IOException exc) {
-                    documentation = "";
-                    env.error(null, "javadoc.File_Read_Error", overviewPath.getName());
-                }
-            }
-        }
-        return documentation;
-    }
-
-    /**
-     * Return the source position of the entity, or null if
-     * no position is available.
-     */
-    @Override
-    public SourcePosition position() {
-        JavaFileObject path;
-        return ((path = getOverviewPath()) == null) ?
-            null :
-            SourcePositionImpl.make(path, Position.NOPOS, null);
-    }
-
-    /**
-     * Return the locale provided by the user or the default locale value.
-     */
-    public Locale getLocale() {
-        return env.doclocale.locale;
-    }
-
-    /**
-     * Return the current file manager.
-     */
-    public JavaFileManager getFileManager() {
-        return env.fileManager;
-    }
-
-    public void initDocLint(Collection<String> opts, Collection<String> customTagNames,
-            String htmlVersion) {
-        env.initDoclint(opts, customTagNames, htmlVersion);
-    }
-
-    public JavaScriptScanner initJavaScriptScanner(boolean allowScriptInComments) {
-        return env.initJavaScriptScanner(allowScriptInComments);
-    }
-
-    public boolean isFunctionalInterface(AnnotationDesc annotationDesc) {
-        return Feature.LAMBDA.allowedInSource(env.source)
-            && annotationDesc.annotationType().qualifiedName().equals(
-                env.syms.functionalInterfaceType.toString());
-    }
-
-    public boolean showTagMessages() {
-        return env.showTagMessages();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SeeTagImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,544 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.File;
-import java.util.Locale;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.code.Printer;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Type.CapturedType;
-import com.sun.tools.javac.util.*;
-
-import static com.sun.tools.javac.code.Kinds.Kind.*;
-
-/**
- * Represents a see also documentation tag.
- * The @see tag can be plain text, or reference a class or member.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Kaiyang Liu (original)
- * @author Robert Field (rewrite)
- * @author Atul M Dambalkar
- *
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class SeeTagImpl extends TagImpl implements SeeTag, LayoutCharacters {
-
-    //### TODO: Searching for classes, fields, and methods
-    //### should follow the normal rules applied by the compiler.
-
-    /**
-     * where of  where#what - i.e. the class name (may be empty)
-     */
-    private String where;
-
-    /**
-     * what of  where#what - i.e. the member (may be null)
-     */
-    private String what;
-
-    private PackageDoc referencedPackage;
-    private ClassDoc referencedClass;
-    private MemberDoc referencedMember;
-
-    String label = "";
-
-    SeeTagImpl(DocImpl holder, String name, String text) {
-        super(holder, name, text);
-        parseSeeString();
-        if (where != null) {
-            ClassDocImpl container = null;
-            if (holder instanceof MemberDoc) {
-                container =
-                  (ClassDocImpl)((ProgramElementDoc)holder).containingClass();
-            } else if (holder instanceof ClassDoc) {
-                container = (ClassDocImpl)holder;
-            }
-            findReferenced(container);
-            if (showRef) showRef();
-        }
-    }
-
-    private static final boolean showRef = false;
-
-    private void showRef() {
-        Symbol sym;
-        if (referencedMember != null) {
-            if (referencedMember instanceof MethodDocImpl)
-                sym = ((MethodDocImpl) referencedMember).sym;
-            else if (referencedMember instanceof FieldDocImpl)
-                sym = ((FieldDocImpl) referencedMember).sym;
-            else
-                sym = ((ConstructorDocImpl) referencedMember).sym;
-        } else if (referencedClass != null) {
-            sym = ((ClassDocImpl) referencedClass).tsym;
-        } else if (referencedPackage != null) {
-            sym = ((PackageDocImpl) referencedPackage).sym;
-        } else
-            return;
-
-        final JavacMessages messages = JavacMessages.instance(docenv().context);
-        Locale locale = Locale.getDefault();
-        Printer printer = new Printer() {
-            int count;
-            @Override
-            protected String localize(Locale locale, String key, Object... args) {
-                return messages.getLocalizedString(locale, key, args);
-            }
-            @Override
-            protected String capturedVarId(CapturedType t, Locale locale) {
-                return "CAP#" + (++count);
-            }
-        };
-
-        String s = text.replaceAll("\\s+", " ");  // normalize white space
-        int sp = s.indexOf(" ");
-        int lparen = s.indexOf("(");
-        int rparen = s.indexOf(")");
-        String seetext = (sp == -1) ? s
-                : (lparen == -1 || sp < lparen) ? s.substring(0, sp)
-                : s.substring(0, rparen + 1);
-
-        File file = new File(holder.position().file().getAbsoluteFile().toURI().normalize());
-
-        StringBuilder sb = new StringBuilder();
-        sb.append("+++ ").append(file).append(": ")
-                .append(name()).append(" ").append(seetext).append(": ");
-        sb.append(sym.getKind()).append(" ");
-        if (sym.kind == MTH || sym.kind == VAR)
-            sb.append(printer.visit(sym.owner, locale)).append(".");
-        sb.append(printer.visit(sym, locale));
-
-        System.err.println(sb);
-    }
-
-    /**
-     * get the class name part of @see, For instance,
-     * if the comment is @see String#startsWith(java.lang.String) .
-     *      This function returns String.
-     * Returns null if format was not that of java reference.
-     * Return empty string if class name was not specified..
-     */
-    public String referencedClassName() {
-        return where;
-    }
-
-    /**
-     * get the package referenced by  @see. For instance,
-     * if the comment is @see java.lang
-     *      This function returns a PackageDocImpl for java.lang
-     * Returns null if no known package found.
-     */
-    public PackageDoc referencedPackage() {
-        return referencedPackage;
-    }
-
-    /**
-     * get the class referenced by the class name part of @see, For instance,
-     * if the comment is @see String#startsWith(java.lang.String) .
-     *      This function returns a ClassDocImpl for java.lang.String.
-     * Returns null if class is not a class specified on the javadoc command line..
-     */
-    public ClassDoc referencedClass() {
-        return referencedClass;
-    }
-
-    /**
-     * get the name of the member referenced by the prototype part of @see,
-     * For instance,
-     * if the comment is @see String#startsWith(java.lang.String) .
-     *      This function returns "startsWith(java.lang.String)"
-     * Returns null if format was not that of java reference.
-     * Return empty string if member name was not specified..
-     */
-    public String referencedMemberName() {
-        return what;
-    }
-
-    /**
-     * get the member referenced by the prototype part of @see,
-     * For instance,
-     * if the comment is @see String#startsWith(java.lang.String) .
-     *      This function returns a MethodDocImpl for startsWith.
-     * Returns null if member could not be determined.
-     */
-    public MemberDoc referencedMember() {
-        return referencedMember;
-    }
-
-
-    /**
-     * parse @see part of comment. Determine 'where' and 'what'
-     */
-    private void parseSeeString() {
-        int len = text.length();
-        if (len == 0) {
-            return;
-        }
-        switch (text.charAt(0)) {
-            case '<':
-                if (text.charAt(len-1) != '>') {
-                    docenv().warning(holder,
-                                     "tag.see.no_close_bracket_on_url",
-                                     name, text);
-                }
-                return;
-            case '"':
-                if (len == 1 || text.charAt(len-1) != '"') {
-                    docenv().warning(holder,
-                                     "tag.see.no_close_quote",
-                                     name, text);
-                } else {
-//                    text = text.substring(1,len-1); // strip quotes
-                }
-                return;
-        }
-
-        // check that the text is one word, with possible parentheses
-        // this part of code doesn't allow
-        // @see <a href=.....>asfd</a>
-        // comment it.
-
-        // the code assumes that there is no initial white space.
-        int parens = 0;
-        int commentstart = 0;
-        int start = 0;
-        int cp;
-        for (int i = start; i < len ; i += Character.charCount(cp)) {
-            cp = text.codePointAt(i);
-            switch (cp) {
-                case '(': parens++; break;
-                case ')': parens--; break;
-                case '[': case ']': case '.': case '#': break;
-                case ',':
-                    if (parens <= 0) {
-                        docenv().warning(holder,
-                                         "tag.see.malformed_see_tag",
-                                         name, text);
-                        return;
-                    }
-                    break;
-                case ' ': case '\t': case '\n': case CR:
-                    if (parens == 0) { //here onwards the comment starts.
-                        commentstart = i;
-                        i = len;
-                    }
-                    break;
-                default:
-                    if (!Character.isJavaIdentifierPart(cp)) {
-                        docenv().warning(holder,
-                                         "tag.see.illegal_character",
-                                         name, ""+cp, text);
-                    }
-                    break;
-            }
-        }
-        if (parens != 0) {
-            docenv().warning(holder,
-                             "tag.see.malformed_see_tag",
-                             name, text);
-            return;
-        }
-
-        String seetext = "";
-        String labeltext = "";
-
-        if (commentstart > 0) {
-            seetext = text.substring(start, commentstart);
-            labeltext = text.substring(commentstart + 1);
-            // strip off the white space which can be between seetext and the
-            // actual label.
-            for (int i = 0; i < labeltext.length(); i++) {
-                char ch2 = labeltext.charAt(i);
-                if (!(ch2 == ' ' || ch2 == '\t' || ch2 == '\n')) {
-                    label = labeltext.substring(i);
-                    break;
-                }
-            }
-        } else {
-            seetext = text;
-            label = "";
-        }
-
-        int sharp = seetext.indexOf('#');
-        if (sharp >= 0) {
-            // class#member
-            where = seetext.substring(0, sharp);
-            what = seetext.substring(sharp + 1);
-        } else {
-            if (seetext.indexOf('(') >= 0) {
-                docenv().warning(holder,
-                                 "tag.see.missing_sharp",
-                                 name, text);
-                where = "";
-                what = seetext;
-            }
-            else {
-                // no member specified, text names class
-                where = seetext;
-                what = null;
-            }
-        }
-    }
-
-    /**
-     * Find what is referenced by the see also.  If possible, sets
-     * referencedClass and referencedMember.
-     *
-     * @param containingClass the class containing the comment containing
-     * the tag. May be null, if, for example, it is a package comment.
-     */
-    private void findReferenced(ClassDocImpl containingClass) {
-        if (where.length() > 0) {
-            if (containingClass != null) {
-                referencedClass = containingClass.findClass(where);
-            } else {
-                referencedClass = docenv().lookupClass(where);
-            }
-            if (referencedClass == null && holder() instanceof ProgramElementDoc) {
-                referencedClass = docenv().lookupClass(
-                    ((ProgramElementDoc) holder()).containingPackage().name() + "." + where);
-            }
-
-            if (referencedClass == null) { /* may just not be in this run */
-                // check if it's a package name
-                referencedPackage = docenv().lookupPackage(where);
-                return;
-            }
-        } else {
-            if (containingClass == null) {
-                docenv().warning(holder,
-                                 "tag.see.class_not_specified",
-                                 name, text);
-                return;
-            } else {
-                referencedClass = containingClass;
-            }
-        }
-        where = referencedClass.qualifiedName();
-
-        if (what == null) {
-            return;
-        } else {
-            int paren = what.indexOf('(');
-            String memName = (paren >= 0 ? what.substring(0, paren) : what);
-            String[] paramarr;
-            if (paren > 0) {
-                // has parameter list -- should be method or constructor
-                paramarr = new ParameterParseMachine(what.
-                        substring(paren, what.length())).parseParameters();
-                if (paramarr != null) {
-                    referencedMember = findExecutableMember(memName, paramarr,
-                                                            referencedClass);
-                } else {
-                    referencedMember = null;
-                }
-            } else {
-                // no parameter list -- should be field
-                referencedMember = findExecutableMember(memName, null,
-                                                        referencedClass);
-                FieldDoc fd = ((ClassDocImpl)referencedClass).
-                                                            findField(memName);
-                // when no args given, prefer fields over methods
-                if (referencedMember == null ||
-                    (fd != null &&
-                     fd.containingClass()
-                         .subclassOf(referencedMember.containingClass()))) {
-                    referencedMember = fd;
-                }
-            }
-            if (referencedMember == null) {
-                docenv().warning(holder,
-                                 "tag.see.can_not_find_member",
-                                 name, what, where);
-            }
-        }
-    }
-
-    private MemberDoc findReferencedMethod(String memName, String[] paramarr,
-                                           ClassDoc referencedClass) {
-        MemberDoc meth = findExecutableMember(memName, paramarr, referencedClass);
-        if (meth == null) {
-            for (ClassDoc nestedClass : referencedClass.innerClasses()) {
-                meth = findReferencedMethod(memName, paramarr, nestedClass);
-                if (meth != null) {
-                    return meth;
-                }
-            }
-        }
-        return null;
-    }
-
-    private MemberDoc findExecutableMember(String memName, String[] paramarr,
-                                           ClassDoc referencedClass) {
-        String className = referencedClass.name();
-        if (memName.equals(className.substring(className.lastIndexOf(".") + 1))) {
-            return ((ClassDocImpl)referencedClass).findConstructor(memName,
-                                                                   paramarr);
-        } else {   // it's a method.
-            return ((ClassDocImpl)referencedClass).findMethod(memName,
-                                                              paramarr);
-        }
-    }
-
-    // separate "int, String" from "(int, String)"
-    // (int i, String s) ==> [0] = "int",  [1] = String
-    // (int[][], String[]) ==> [0] = "int[][]" // [1] = "String[]"
-    class ParameterParseMachine {
-        static final int START = 0;
-        static final int TYPE = 1;
-        static final int NAME = 2;
-        static final int TNSPACE = 3;  // space between type and name
-        static final int ARRAYDECORATION = 4;
-        static final int ARRAYSPACE = 5;
-
-        String parameters;
-
-        StringBuilder typeId;
-
-        ListBuffer<String> paramList;
-
-        ParameterParseMachine(String parameters) {
-            this.parameters = parameters;
-            this.paramList = new ListBuffer<>();
-            typeId = new StringBuilder();
-        }
-
-        public String[] parseParameters() {
-            if (parameters.equals("()")) {
-                return new String[0];
-            }   // now strip off '(' and ')'
-            int state = START;
-            int prevstate = START;
-            parameters = parameters.substring(1, parameters.length() - 1);
-            int cp;
-            for (int index = 0; index < parameters.length(); index += Character.charCount(cp)) {
-                cp = parameters.codePointAt(index);
-                switch (state) {
-                    case START:
-                        if (Character.isJavaIdentifierStart(cp)) {
-                            typeId.append(Character.toChars(cp));
-                            state = TYPE;
-                        }
-                        prevstate = START;
-                        break;
-                    case TYPE:
-                        if (Character.isJavaIdentifierPart(cp) || cp == '.') {
-                            typeId.append(Character.toChars(cp));
-                        } else if (cp == '[') {
-                            typeId.append('[');
-                            state = ARRAYDECORATION;
-                        } else if (Character.isWhitespace(cp)) {
-                            state = TNSPACE;
-                        } else if (cp == ',') {  // no name, just type
-                            addTypeToParamList();
-                            state = START;
-                        }
-                        prevstate = TYPE;
-                        break;
-                    case TNSPACE:
-                        if (Character.isJavaIdentifierStart(cp)) { // name
-                            if (prevstate == ARRAYDECORATION) {
-                                docenv().warning(holder,
-                                                 "tag.missing_comma_space",
-                                                 name,
-                                                 "(" + parameters + ")");
-                                return (String[])null;
-                            }
-                            addTypeToParamList();
-                            state = NAME;
-                        } else if (cp == '[') {
-                            typeId.append('[');
-                            state = ARRAYDECORATION;
-                        } else if (cp == ',') {   // just the type
-                            addTypeToParamList();
-                            state = START;
-                        } // consume rest all
-                        prevstate = TNSPACE;
-                        break;
-                    case ARRAYDECORATION:
-                        if (cp == ']') {
-                            typeId.append(']');
-                            state = TNSPACE;
-                        } else if (!Character.isWhitespace(cp)) {
-                            docenv().warning(holder,
-                                             "tag.illegal_char_in_arr_dim",
-                                             name,
-                                             "(" + parameters + ")");
-                            return (String[])null;
-                        }
-                        prevstate = ARRAYDECORATION;
-                        break;
-                    case NAME:
-                        if (cp == ',') {  // just consume everything till ','
-                            state = START;
-                        }
-                        prevstate = NAME;
-                        break;
-                }
-            }
-            if (state == ARRAYDECORATION ||
-                (state == START && prevstate == TNSPACE)) {
-                docenv().warning(holder,
-                                 "tag.illegal_see_tag",
-                                 "(" + parameters + ")");
-            }
-            if (typeId.length() > 0) {
-                paramList.append(typeId.toString());
-            }
-            return paramList.toArray(new String[paramList.length()]);
-        }
-
-        void addTypeToParamList() {
-            if (typeId.length() > 0) {
-                paramList.append(typeId.toString());
-                typeId.setLength(0);
-            }
-        }
-    }
-
-    /**
-     * Return the kind of this tag.
-     */
-    @Override
-    public String kind() {
-        return "@see";
-    }
-
-    /**
-     * Return the label of the see tag.
-     */
-    public String label() {
-        return label;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SerialFieldTagImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,269 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-/**
- * Documents a Serializable field defined by an ObjectStreamField.
- * <pre>
- * The class parses and stores the three serialField tag parameters:
- *
- * - field name
- * - field type name
- *      (fully-qualified or visible from the current import context)
- * - description of the valid values for the field
-
- * </pre>
- * This tag is only allowed in the javadoc for the special member
- * serialPersistentFields.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Joe Fialli
- * @author Neal Gafter
- *
- * @see java.io.ObjectStreamField
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class SerialFieldTagImpl
-    extends TagImpl
-    implements SerialFieldTag, Comparable<Object>
-{
-    //### These could be final, except that the constructor
-    //### does not set them directly.
-
-    private String fieldName;    // Required Argument 1 of serialField
-    private String fieldType;    // Required Argument 2 of serialField
-    private String description;  // Optional Remaining Arguments of serialField
-
-    private ClassDoc containingClass;   // Class containing serialPersistentField member
-    private ClassDoc fieldTypeDoc;      // ClassDocImpl of fieldType
-    private FieldDocImpl matchingField; // FieldDocImpl with same name as fieldName
-
-   /* Constructor. */
-   SerialFieldTagImpl(DocImpl holder, String name, String text) {
-        super(holder, name, text);
-        parseSerialFieldString();
-        if (holder instanceof MemberDoc) {
-            containingClass = ((MemberDocImpl)holder).containingClass();
-        }
-    }
-
-    /*
-     * The serialField tag is composed of three entities.
-     *
-     *   serialField  serializableFieldName serisliableFieldType
-     *                 description of field.
-     *
-     * The fieldName and fieldType must be legal Java Identifiers.
-     */
-    private void parseSerialFieldString() {
-        int len = text.length();
-        if (len == 0) {
-            return;
-        }
-
-        // if no white space found
-        /* Skip white space. */
-        int inx = 0;
-        int cp;
-        for (; inx < len; inx += Character.charCount(cp)) {
-             cp = text.codePointAt(inx);
-             if (!Character.isWhitespace(cp)) {
-                 break;
-             }
-        }
-
-        /* find first word. */
-        int first = inx;
-        int last = inx;
-        cp = text.codePointAt(inx);
-        if (! Character.isJavaIdentifierStart(cp)) {
-            docenv().warning(holder,
-                             "tag.serialField.illegal_character",
-                             new String(Character.toChars(cp)), text);
-            return;
-        }
-
-        for (inx += Character.charCount(cp); inx < len; inx += Character.charCount(cp)) {
-             cp = text.codePointAt(inx);
-             if (!Character.isJavaIdentifierPart(cp)) {
-                 break;
-             }
-        }
-
-        if (inx < len && ! Character.isWhitespace(cp = text.codePointAt(inx))) {
-            docenv().warning(holder,
-                             "tag.serialField.illegal_character",
-                             new String(Character.toChars(cp)), text);
-            return;
-        }
-
-        last = inx;
-        fieldName = text.substring(first, last);
-
-        /* Skip white space. */
-        for (; inx < len; inx += Character.charCount(cp)) {
-             cp = text.codePointAt(inx);
-             if (!Character.isWhitespace(cp)) {
-                 break;
-             }
-        }
-
-        /* find second word. */
-        first = inx;
-        last = inx;
-
-        for (; inx < len; inx += Character.charCount(cp)) {
-             cp = text.codePointAt(inx);
-             if (Character.isWhitespace(cp)) {
-                 break;
-             }
-        }
-        if (inx < len && ! Character.isWhitespace(cp = text.codePointAt(inx))) {
-            docenv().warning(holder,
-                             "tag.serialField.illegal_character",
-                             new String(Character.toChars(cp)), text);
-            return;
-        }
-        last = inx;
-        fieldType = text.substring(first, last);
-
-        /* Skip leading white space. Rest of string is description for serialField.*/
-        for (; inx < len; inx += Character.charCount(cp)) {
-             cp = text.codePointAt(inx);
-             if (!Character.isWhitespace(cp)) {
-                 break;
-             }
-        }
-        description = text.substring(inx);
-    }
-
-    /**
-     * return a key for sorting.
-     */
-    String key() {
-        return fieldName;
-    }
-
-    /*
-     * Optional. Link this serialField tag to its corrsponding
-     * field in the class. Note: there is no requirement that
-     * there be a field in the class that matches serialField tag.
-     */
-    void mapToFieldDocImpl(FieldDocImpl fd) {
-        matchingField = fd;
-    }
-
-    /**
-     * Return the serialziable field name.
-     */
-    public String fieldName() {
-        return fieldName;
-    }
-
-    /**
-     * Return the field type string.
-     */
-    public String fieldType() {
-        return fieldType;
-    }
-
-    /**
-     * Return the ClassDocImpl for field type.
-     *
-     * @returns null if no ClassDocImpl for field type is visible from
-     *          containingClass context.
-     */
-    public ClassDoc fieldTypeDoc() {
-        if (fieldTypeDoc == null && containingClass != null) {
-            fieldTypeDoc = containingClass.findClass(fieldType);
-        }
-        return fieldTypeDoc;
-    }
-
-    /**
-     * Return the corresponding FieldDocImpl for this SerialFieldTagImpl.
-     *
-     * @returns null if no matching FieldDocImpl.
-     */
-    FieldDocImpl getMatchingField() {
-        return matchingField;
-    }
-
-    /**
-     * Return the field comment. If there is no serialField comment, return
-     * javadoc comment of corresponding FieldDocImpl.
-     */
-    public String description() {
-        if (description.length() == 0 && matchingField != null) {
-
-            //check for javadoc comment of corresponding field.
-            Comment comment = matchingField.comment();
-            if (comment != null) {
-                return comment.commentText();
-            }
-        }
-        return description;
-    }
-
-    /**
-     * Return the kind of this tag.
-     */
-    public String kind() {
-        return "@serialField";
-    }
-
-    /**
-     * Convert this object to a string.
-     */
-    public String toString() {
-        return name + ":" + text;
-    }
-
-    /**
-     * Compares this Object with the specified Object for order.  Returns a
-     * negative integer, zero, or a positive integer as this Object is less
-     * than, equal to, or greater than the given Object.
-     * <p>
-     * Included to make SerialFieldTagImpl items java.lang.Comparable.
-     *
-     * @param   obj the <code>Object</code> to be compared.
-     * @return  a negative integer, zero, or a positive integer as this Object
-     *          is less than, equal to, or greater than the given Object.
-     * @exception ClassCastException the specified Object's type prevents it
-     *            from being compared to this Object.
-     * @since 1.2
-     */
-    public int compareTo(Object obj) {
-        return key().compareTo(((SerialFieldTagImpl)obj).key());
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SerializedForm.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.code.*;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.MethodSymbol;
-import com.sun.tools.javac.code.Symbol.VarSymbol;
-import com.sun.tools.javac.util.*;
-
-import static com.sun.tools.javac.code.Kinds.Kind.*;
-import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
-
-/**
- * The serialized form is the specification of a class' serialization
- * state. <p>
- *
- * It consists of the following information:<p>
- *
- * <pre>
- * 1. Whether class is Serializable or Externalizable.
- * 2. Javadoc for serialization methods.
- *    a. For Serializable, the optional readObject, writeObject,
- *       readResolve and writeReplace.
- *       serialData tag describes, in prose, the sequence and type
- *       of optional data written by writeObject.
- *    b. For Externalizable, writeExternal and readExternal.
- *       serialData tag describes, in prose, the sequence and type
- *       of optional data written by writeExternal.
- * 3. Javadoc for serialization data layout.
- *    a. For Serializable, the name,type and description
- *       of each Serializable fields.
- *    b. For Externalizable, data layout is described by 2(b).
- * </pre>
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Joe Fialli
- * @author Neal Gafter (rewrite but not too proud)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class SerializedForm {
-    ListBuffer<MethodDoc> methods = new ListBuffer<>();
-
-    /* List of FieldDocImpl - Serializable fields.
-     * Singleton list if class defines Serializable fields explicitly.
-     * Otherwise, list of default serializable fields.
-     * 0 length list for Externalizable.
-     */
-    private final ListBuffer<FieldDocImpl> fields = new ListBuffer<>();
-
-    /* True if class specifies serializable fields explicitly.
-     * using special static member, serialPersistentFields.
-     */
-    private boolean definesSerializableFields = false;
-
-    // Specially treated field/method names defined by Serialization.
-    private static final String SERIALIZABLE_FIELDS = "serialPersistentFields";
-    private static final String READOBJECT  = "readObject";
-    private static final String WRITEOBJECT = "writeObject";
-    private static final String READRESOLVE  = "readResolve";
-    private static final String WRITEREPLACE = "writeReplace";
-    private static final String READOBJECTNODATA = "readObjectNoData";
-
-    /**
-     * Constructor.
-     *
-     * Catalog Serializable fields for Serializable class.
-     * Catalog serialization methods for Serializable and
-     * Externalizable classes.
-     */
-    SerializedForm(DocEnv env, ClassSymbol def, ClassDocImpl cd) {
-        if (cd.isExternalizable()) {
-            /* look up required public accessible methods,
-             *   writeExternal and readExternal.
-             */
-            String[] readExternalParamArr = { "java.io.ObjectInput" };
-            String[] writeExternalParamArr = { "java.io.ObjectOutput" };
-            MethodDoc md = cd.findMethod("readExternal", readExternalParamArr);
-            if (md != null) {
-                methods.append(md);
-            }
-            md = cd.findMethod("writeExternal", writeExternalParamArr);
-            if (md != null) {
-                methods.append(md);
-                Tag tag[] = md.tags("serialData");
-            }
-        // } else { // isSerializable() //### ???
-        } else if (cd.isSerializable()) {
-
-            VarSymbol dsf = getDefinedSerializableFields(def);
-            if (dsf != null) {
-
-                /* Define serializable fields with array of ObjectStreamField.
-                 * Each ObjectStreamField should be documented by a
-                 * serialField tag.
-                 */
-                definesSerializableFields = true;
-                //### No modifier filtering applied here.
-                FieldDocImpl dsfDoc = env.getFieldDoc(dsf);
-                fields.append(dsfDoc);
-                mapSerialFieldTagImplsToFieldDocImpls(dsfDoc, env, def);
-            } else {
-
-                /* Calculate default Serializable fields as all
-                 * non-transient, non-static fields.
-                 * Fields should be documented by serial tag.
-                 */
-                computeDefaultSerializableFields(env, def, cd);
-            }
-
-           /* Check for optional customized readObject, writeObject,
-            * readResolve and writeReplace, which can all contain
-            * the serialData tag.        */
-            addMethodIfExist(env, def, READOBJECT);
-            addMethodIfExist(env, def, WRITEOBJECT);
-            addMethodIfExist(env, def, READRESOLVE);
-            addMethodIfExist(env, def, WRITEREPLACE);
-            addMethodIfExist(env, def, READOBJECTNODATA);
-        }
-    }
-
-    /*
-     * Check for explicit Serializable fields.
-     * Check for a private static array of ObjectStreamField with
-     * name SERIALIZABLE_FIELDS.
-     */
-    private VarSymbol getDefinedSerializableFields(ClassSymbol def) {
-        Names names = def.name.table.names;
-
-        /* SERIALIZABLE_FIELDS can be private,
-         * so must lookup by ClassSymbol, not by ClassDocImpl.
-         */
-        for (Symbol sym : def.members().getSymbolsByName(names.fromString(SERIALIZABLE_FIELDS))) {
-            if (sym.kind == VAR) {
-                VarSymbol f = (VarSymbol)sym;
-                if ((f.flags() & Flags.STATIC) != 0 &&
-                    (f.flags() & Flags.PRIVATE) != 0) {
-                    return f;
-                }
-            }
-        }
-        return null;
-    }
-
-    /*
-     * Compute default Serializable fields from all members of ClassSymbol.
-     *
-     * Since the fields of ClassDocImpl might not contain private or
-     * package accessible fields, must walk over all members of ClassSymbol.
-     */
-    private void computeDefaultSerializableFields(DocEnv env,
-                                                  ClassSymbol def,
-                                                  ClassDocImpl cd) {
-        for (Symbol sym : def.members().getSymbols(NON_RECURSIVE)) {
-            if (sym != null && sym.kind == VAR) {
-                VarSymbol f = (VarSymbol)sym;
-                if ((f.flags() & Flags.STATIC) == 0 &&
-                    (f.flags() & Flags.TRANSIENT) == 0) {
-                    //### No modifier filtering applied here.
-                    FieldDocImpl fd = env.getFieldDoc(f);
-                    //### Add to beginning.
-                    //### Preserve order used by old 'javadoc'.
-                    fields.prepend(fd);
-                }
-            }
-        }
-    }
-
-    /*
-     * Catalog Serializable method if it exists in current ClassSymbol.
-     * Do not look for method in superclasses.
-     *
-     * Serialization requires these methods to be non-static.
-     *
-     * @param method should be an unqualified Serializable method
-     *               name either READOBJECT, WRITEOBJECT, READRESOLVE
-     *               or WRITEREPLACE.
-     * @param visibility the visibility flag for the given method.
-     */
-    private void addMethodIfExist(DocEnv env, ClassSymbol def, String methodName) {
-        Names names = def.name.table.names;
-
-        for (Symbol sym : def.members().getSymbolsByName(names.fromString(methodName))) {
-            if (sym.kind == MTH) {
-                MethodSymbol md = (MethodSymbol)sym;
-                if ((md.flags() & Flags.STATIC) == 0) {
-                    /*
-                     * WARNING: not robust if unqualifiedMethodName is overloaded
-                     *          method. Signature checking could make more robust.
-                     * READOBJECT takes a single parameter, java.io.ObjectInputStream.
-                     * WRITEOBJECT takes a single parameter, java.io.ObjectOutputStream.
-                     */
-                    methods.append(env.getMethodDoc(md));
-                }
-            }
-        }
-    }
-
-    /*
-     * Associate serialField tag fieldName with FieldDocImpl member.
-     * Note: A serialField tag does not have to map an existing field
-     *       of a class.
-     */
-    private void mapSerialFieldTagImplsToFieldDocImpls(FieldDocImpl spfDoc,
-                                                       DocEnv env,
-                                                       ClassSymbol def) {
-        Names names = def.name.table.names;
-        for (SerialFieldTag tag : spfDoc.serialFieldTags()) {
-            if (tag.fieldName() == null || tag.fieldType() == null) // ignore malformed @serialField tags
-                continue;
-
-            Name fieldName = names.fromString(tag.fieldName());
-
-            // Look for a FieldDocImpl that is documented by serialFieldTagImpl.
-            for (Symbol sym : def.members().getSymbolsByName(fieldName)) {
-                if (sym.kind == VAR) {
-                    VarSymbol f = (VarSymbol) sym;
-                    FieldDocImpl fdi = env.getFieldDoc(f);
-                    ((SerialFieldTagImpl) (tag)).mapToFieldDocImpl(fdi);
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Return serializable fields in class. <p>
-     *
-     * Returns either a list of default fields documented by serial tag comment or
-     *         javadoc comment<p>
-     * Or Returns a single FieldDocImpl for serialPersistentField. There is a
-     *         serialField tag for each serializable field.<p>
-     *
-     * @return an array of FieldDocImpl for representing the visible
-     *         fields in this class.
-     */
-    FieldDoc[] fields() {
-        return (FieldDoc[])fields.toArray(new FieldDocImpl[fields.length()]);
-    }
-
-    /**
-     * Return serialization methods in class.
-     *
-     * @return an array of MethodDocImpl for serialization methods in this class.
-     */
-    MethodDoc[] methods() {
-        return methods.toArray(new MethodDoc[methods.length()]);
-    }
-
-    /**
-     * Returns true if Serializable fields are defined explicitly using
-     * member, serialPersistentFields.
-     *
-     * @see #fields()
-     */
-    boolean definesSerializableFields() {
-        return definesSerializableFields;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/SourcePositionImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.File;
-import javax.tools.FileObject;
-
-import com.sun.javadoc.SourcePosition;
-import com.sun.tools.javac.util.Position;
-
-
-/**
- * A source position: filename, line number, and column number.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since J2SE1.4
- * @author Neal M Gafter
- * @author Michael Van De Vanter (position representation changed to char offsets)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class SourcePositionImpl implements SourcePosition {
-    FileObject filename;
-    int position;
-    Position.LineMap lineMap;
-
-    /** The source file. Returns null if no file information is
-     *  available. */
-    public File file() {
-        return (filename == null) ? null : new File(filename.getName());
-    }
-
-    /** The source file. Returns null if no file information is
-     *  available. */
-    public FileObject fileObject() {
-        return filename;
-    }
-
-    /** The line in the source file. The first line is numbered 1;
-     *  0 means no line number information is available. */
-    public int line() {
-        if (lineMap == null) {
-            return 0;
-        } else {
-            return lineMap.getLineNumber(position);
-        }
-    }
-
-    /** The column in the source file. The first column is
-     *  numbered 1; 0 means no column information is available.
-     *  Columns count characters in the input stream; a tab
-     *  advances the column number to the next 8-column tab stop.
-     */
-    public int column() {
-        if (lineMap == null) {
-            return 0;
-        }else {
-            return lineMap.getColumnNumber(position);
-        }
-    }
-
-    private SourcePositionImpl(FileObject file, int position,
-                               Position.LineMap lineMap) {
-        super();
-        this.filename = file;
-        this.position = position;
-        this.lineMap = lineMap;
-    }
-
-    public static SourcePosition make(FileObject file, int pos,
-                                      Position.LineMap lineMap) {
-        if (file == null) return null;
-        return new SourcePositionImpl(file, pos, lineMap);
-    }
-
-    public String toString() {
-        // Backwards compatibility hack. ZipFileObjects use the format
-        // zipfile(zipentry) but javadoc has been using zipfile/zipentry
-        String fn = filename.getName();
-        if (fn.endsWith(")")) {
-            int paren = fn.lastIndexOf("(");
-            if (paren != -1) {
-                int i = paren+1;
-                if (fn.charAt(i) == '/')
-                    i++;
-                fn = fn.substring(0, paren)
-                        + File.separatorChar
-                        + fn.substring(i, fn.length() - 1);
-            }
-        }
-
-        if (position == Position.NOPOS)
-            return fn;
-        else
-            return fn + ":" + line();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Start.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,578 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Objects;
-
-import javax.tools.JavaFileManager;
-import javax.tools.JavaFileObject;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.file.JavacFileManager;
-import com.sun.tools.javac.file.BaseFileManager;
-import com.sun.tools.javac.main.Arguments;
-import com.sun.tools.javac.main.CommandLine;
-import com.sun.tools.javac.main.DelegatingJavaFileManager;
-import com.sun.tools.javac.main.Option;
-import com.sun.tools.javac.main.OptionHelper;
-import com.sun.tools.javac.main.OptionHelper.GrumpyHelper;
-import com.sun.tools.javac.platform.PlatformDescription;
-import com.sun.tools.javac.platform.PlatformUtils;
-import com.sun.tools.javac.util.ClientCodeException;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Log;
-import com.sun.tools.javac.util.Options;
-
-import static com.sun.tools.javac.code.Flags.*;
-
-/**
- * Main program of Javadoc.
- * Previously named "Main".
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @since 1.2
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class Start extends ToolOption.Helper {
-    /** Context for this invocation. */
-    private final Context context;
-
-    private final String defaultDocletClassName;
-    private final ClassLoader docletParentClassLoader;
-
-    private static final String javadocName = "javadoc";
-
-    private static final String standardDocletClassName =
-        "com.sun.tools.doclets.standard.Standard";
-
-    private final long defaultFilter = PUBLIC | PROTECTED;
-
-    private final Messager messager;
-
-    private DocletInvoker docletInvoker;
-
-    /**
-     * In API mode, exceptions thrown while calling the doclet are
-     * propagated using ClientCodeException.
-     */
-    private boolean apiMode;
-
-    private JavaFileManager fileManager;
-
-    public Start(String programName,
-          PrintWriter errWriter,
-          PrintWriter warnWriter,
-          PrintWriter noticeWriter,
-          String defaultDocletClassName) {
-        this(programName, errWriter, warnWriter, noticeWriter, defaultDocletClassName, null);
-    }
-
-    public Start(PrintWriter pw) {
-        this(javadocName, pw, pw, pw, standardDocletClassName);
-    }
-
-    public Start(String programName,
-          PrintWriter errWriter,
-          PrintWriter warnWriter,
-          PrintWriter noticeWriter,
-          String defaultDocletClassName,
-          ClassLoader docletParentClassLoader) {
-        context = new Context();
-        messager = new Messager(context, programName, errWriter, warnWriter, noticeWriter);
-        this.defaultDocletClassName = defaultDocletClassName;
-        this.docletParentClassLoader = docletParentClassLoader;
-    }
-
-    public Start(String programName, String defaultDocletClassName) {
-        this(programName, defaultDocletClassName, null);
-    }
-
-    public Start(String programName, String defaultDocletClassName,
-          ClassLoader docletParentClassLoader) {
-        context = new Context();
-        messager = new Messager(context, programName);
-        this.defaultDocletClassName = defaultDocletClassName;
-        this.docletParentClassLoader = docletParentClassLoader;
-    }
-
-    public Start(String programName, ClassLoader docletParentClassLoader) {
-        this(programName, standardDocletClassName, docletParentClassLoader);
-    }
-
-    public Start(String programName) {
-        this(programName, standardDocletClassName);
-    }
-
-    public Start(ClassLoader docletParentClassLoader) {
-        this(javadocName, docletParentClassLoader);
-    }
-
-    public Start() {
-        this(javadocName);
-    }
-
-    public Start(Context context) {
-        this.context = Objects.requireNonNull(context);
-        apiMode = true;
-        defaultDocletClassName = standardDocletClassName;
-        docletParentClassLoader = null;
-
-        Log log = context.get(Log.logKey);
-        if (log instanceof Messager)
-            messager = (Messager) log;
-        else {
-            PrintWriter out = context.get(Log.errKey);
-            messager = (out == null) ? new Messager(context, javadocName)
-                    : new Messager(context, javadocName, out, out, out);
-        }
-    }
-
-    /**
-     * Usage
-     */
-    @Override
-    void usage() {
-        usage(true);
-    }
-
-    void usage(boolean exit) {
-        usage("main.usage", "-help", "main.usage.foot", exit);
-    }
-
-    @Override
-    void Xusage() {
-        Xusage(true);
-    }
-
-    void Xusage(boolean exit) {
-        usage("main.Xusage", "-X", "main.Xusage.foot", exit);
-    }
-
-    private void usage(String main, String doclet, String foot, boolean exit) {
-        // RFE: it would be better to replace the following with code to
-        // write a header, then help for each option, then a footer.
-        messager.notice(main);
-
-        // let doclet print usage information (does nothing on error)
-        if (docletInvoker != null) {
-            // RFE: this is a pretty bad way to get the doclet to show
-            // help info. Moreover, the output appears on stdout,
-            // and <i>not</i> on any of the standard streams passed
-            // to javadoc, and in particular, not to the noticeWriter
-            // But, to fix this, we need to fix the Doclet API.
-            docletInvoker.optionLength(doclet);
-        }
-
-        if (foot != null)
-            messager.notice(foot);
-
-        if (exit) exit();
-    }
-
-    /**
-     * Exit
-     */
-    private void exit() {
-        messager.exit();
-    }
-
-
-    /**
-     * Main program - external wrapper
-     */
-    public int begin(String... argv) {
-        boolean ok = begin(null, argv, Collections.emptySet());
-        return ok ? 0 : 1;
-    }
-
-    public boolean begin(Class<?> docletClass, Iterable<String> options, Iterable<? extends JavaFileObject> fileObjects) {
-        Collection<String> opts = new ArrayList<>();
-        for (String opt: options) opts.add(opt);
-        return begin(docletClass, opts.toArray(new String[opts.size()]), fileObjects);
-    }
-
-    private boolean begin(Class<?> docletClass, String[] options, Iterable<? extends JavaFileObject> fileObjects) {
-        boolean failed = false;
-
-        try {
-            failed = !parseAndExecute(docletClass, options, fileObjects);
-        } catch (Messager.ExitJavadoc exc) {
-            // ignore, we just exit this way
-        } catch (OutOfMemoryError ee) {
-            messager.error(Messager.NOPOS, "main.out.of.memory");
-            failed = true;
-        } catch (ClientCodeException e) {
-            // simply rethrow these exceptions, to be caught and handled by JavadocTaskImpl
-            throw e;
-        } catch (Error ee) {
-            ee.printStackTrace(System.err);
-            messager.error(Messager.NOPOS, "main.fatal.error");
-            failed = true;
-        } catch (Exception ee) {
-            ee.printStackTrace(System.err);
-            messager.error(Messager.NOPOS, "main.fatal.exception");
-            failed = true;
-        } finally {
-            if (fileManager != null
-                    && fileManager instanceof BaseFileManager
-                    && ((BaseFileManager) fileManager).autoClose) {
-                try {
-                    fileManager.close();
-                } catch (IOException ignore) {
-                }
-            }
-            messager.exitNotice();
-            messager.flush();
-        }
-        failed |= messager.nerrors() > 0;
-        failed |= rejectWarnings && messager.nwarnings() > 0;
-        return !failed;
-    }
-
-    /**
-     * Main program - internal
-     */
-    private boolean parseAndExecute(
-            Class<?> docletClass,
-            String[] argv,
-            Iterable<? extends JavaFileObject> fileObjects) throws IOException {
-        long tm = System.currentTimeMillis();
-
-        ListBuffer<String> javaNames = new ListBuffer<>();
-
-        // Preprocess @file arguments
-        try {
-            argv = CommandLine.parse(argv);
-        } catch (FileNotFoundException e) {
-            messager.error(Messager.NOPOS, "main.cant.read", e.getMessage());
-            exit();
-        } catch (IOException e) {
-            e.printStackTrace(System.err);
-            exit();
-        }
-
-
-        fileManager = context.get(JavaFileManager.class);
-
-        setDocletInvoker(docletClass, fileManager, argv);
-
-        compOpts = Options.instance(context);
-        // Make sure no obsolete source/target messages are reported
-        compOpts.put("-Xlint:-options", "-Xlint:-options");
-
-        // Parse arguments
-        for (int i = 0 ; i < argv.length ; i++) {
-            String arg = argv[i];
-
-            ToolOption o = ToolOption.get(arg);
-            if (o != null) {
-                // hack: this restriction should be removed
-                if (o == ToolOption.LOCALE && i > 0)
-                    usageError("main.locale_first");
-
-                try {
-                    if (o.hasArg) {
-                        oneArg(argv, i++);
-                        o.process(this, argv[i]);
-                    } else {
-                        setOption(arg);
-                        o.process(this);
-                    }
-                } catch (Option.InvalidValueException e) {
-                    usageError("main.option.invalid.value", e.getMessage());
-                }
-            } else if (arg.equals("-XDaccessInternalAPI")) {
-                // pass this hidden option down to the doclet, if it wants it
-                if (docletInvoker.optionLength("-XDaccessInternalAPI") == 1) {
-                    setOption(arg);
-                }
-            } else if (arg.startsWith("-XD")) {
-                // hidden javac options
-                String s = arg.substring("-XD".length());
-                int eq = s.indexOf('=');
-                String key = (eq < 0) ? s : s.substring(0, eq);
-                String value = (eq < 0) ? s : s.substring(eq+1);
-                compOpts.put(key, value);
-            }
-            // call doclet for its options
-            // other arg starts with - is invalid
-            else if (arg.startsWith("-")) {
-                int optionLength;
-                optionLength = docletInvoker.optionLength(arg);
-                if (optionLength < 0) {
-                    // error already displayed
-                    exit();
-                } else if (optionLength == 0) {
-                    // option not found
-                    usageError("main.invalid_flag", arg);
-                } else {
-                    // doclet added option
-                    if ((i + optionLength) > argv.length) {
-                        usageError("main.requires_argument", arg);
-                    }
-                    ListBuffer<String> args = new ListBuffer<>();
-                    for (int j = 0; j < optionLength-1; ++j) {
-                        args.append(argv[++i]);
-                    }
-                    setOption(arg, args.toList());
-                }
-            } else {
-                javaNames.append(arg);
-            }
-        }
-
-        if (fileManager == null) {
-            JavacFileManager.preRegister(context);
-            fileManager = context.get(JavaFileManager.class);
-            if (fileManager instanceof BaseFileManager) {
-                ((BaseFileManager) fileManager).autoClose = true;
-            }
-        }
-        if (fileManager instanceof BaseFileManager) {
-            ((BaseFileManager) fileManager).handleOptions(fileManagerOpts);
-        }
-
-        Arguments arguments = Arguments.instance(context);
-        arguments.init(messager.programName);
-        arguments.allowEmpty();
-        arguments.validate();
-
-        String platformString = compOpts.get("--release");
-
-        if (platformString != null) {
-            if (compOpts.isSet(Option.SOURCE.primaryName)) {
-                usageError("main.release.bootclasspath.conflict", Option.SOURCE.primaryName);
-            }
-            if (fileManagerOpts.containsKey(Option.BOOT_CLASS_PATH)) {
-                usageError("main.release.bootclasspath.conflict", Option.BOOT_CLASS_PATH.getPrimaryName());
-            }
-
-            PlatformDescription platformDescription =
-                    PlatformUtils.lookupPlatformDescription(platformString);
-
-            if (platformDescription == null) {
-                usageError("main.unsupported.release.version", platformString);
-            }
-
-            compOpts.put(Option.SOURCE, platformDescription.getSourceVersion());
-
-            context.put(PlatformDescription.class, platformDescription);
-
-            JavaFileManager platformFM = platformDescription.getFileManager();
-            DelegatingJavaFileManager.installReleaseFileManager(context,
-                                                                platformFM,
-                                                                fileManager);
-        }
-
-        compOpts.notifyListeners();
-
-        if (javaNames.isEmpty() && subPackages.isEmpty() && isEmpty(fileObjects)) {
-            usageError("main.No_packages_or_classes_specified");
-        }
-
-        if (!docletInvoker.validOptions(options.toList())) {
-            // error message already displayed
-            exit();
-        }
-
-        JavadocTool comp = JavadocTool.make0(context);
-        if (comp == null) return false;
-
-        if (showAccess == null) {
-            setFilter(defaultFilter);
-        }
-
-        LanguageVersion languageVersion = docletInvoker.languageVersion();
-        RootDocImpl root = comp.getRootDocImpl(
-                docLocale,
-                encoding,
-                showAccess,
-                javaNames.toList(),
-                options.toList(),
-                fileObjects,
-                breakiterator,
-                subPackages.toList(),
-                excludedPackages.toList(),
-                docClasses,
-                // legacy?
-                languageVersion == null || languageVersion == LanguageVersion.JAVA_1_1,
-                quiet);
-
-        // release resources
-        comp = null;
-
-        // pass off control to the doclet
-        boolean ok = root != null;
-        if (ok) ok = docletInvoker.start(root);
-
-        // We're done.
-        if (compOpts.get("-verbose") != null) {
-            tm = System.currentTimeMillis() - tm;
-            messager.notice("main.done_in", Long.toString(tm));
-        }
-
-        return ok;
-    }
-
-    private <T> boolean isEmpty(Iterable<T> iter) {
-        return !iter.iterator().hasNext();
-    }
-
-    /**
-     * Init the doclet invoker.
-     * The doclet class may be given explicitly, or via the -doclet option in
-     * argv.
-     * If the doclet class is not given explicitly, it will be loaded from
-     * the file manager's DOCLET_PATH location, if available, or via the
-     * -doclet path option in argv.
-     * @param docletClass The doclet class. May be null.
-     * @param fileManager The file manager used to get the class loader to load
-     * the doclet class if required. May be null.
-     * @param argv Args containing -doclet and -docletpath, in case they are required.
-     */
-    private void setDocletInvoker(Class<?> docletClass, JavaFileManager fileManager, String[] argv) {
-        boolean exportInternalAPI = false;
-        String docletClassName = null;
-        String docletPath = null;
-
-        // Parse doclet specifying arguments
-        for (int i = 0 ; i < argv.length ; i++) {
-            String arg = argv[i];
-            if (arg.equals(ToolOption.DOCLET.opt)) {
-                oneArg(argv, i++);
-                if (docletClassName != null) {
-                    usageError("main.more_than_one_doclet_specified_0_and_1",
-                               docletClassName, argv[i]);
-                }
-                docletClassName = argv[i];
-            } else if (arg.equals(ToolOption.DOCLETPATH.opt)) {
-                oneArg(argv, i++);
-                if (docletPath == null) {
-                    docletPath = argv[i];
-                } else {
-                    docletPath += File.pathSeparator + argv[i];
-                }
-            } else if (arg.equals("-XDaccessInternalAPI")) {
-                exportInternalAPI = true;
-            }
-        }
-
-        if (docletClass != null) {
-            // TODO, check no -doclet, -docletpath
-            docletInvoker = new DocletInvoker(messager, docletClass, apiMode, exportInternalAPI);
-        } else {
-            if (docletClassName == null) {
-                docletClassName = defaultDocletClassName;
-            }
-
-            // attempt to find doclet
-            docletInvoker = new DocletInvoker(messager, fileManager,
-                    docletClassName, docletPath,
-                    docletParentClassLoader,
-                    apiMode,
-                    exportInternalAPI);
-        }
-    }
-
-    /**
-     * Set one arg option.
-     * Error and exit if one argument is not provided.
-     */
-    private void oneArg(String[] args, int index) {
-        if ((index + 1) < args.length) {
-            setOption(args[index], args[index+1]);
-        } else {
-            usageError("main.requires_argument", args[index]);
-        }
-    }
-
-    @Override
-    void usageError(String key, Object... args) {
-        messager.error(Messager.NOPOS, key, args);
-        usage(true);
-    }
-
-    /**
-     * indicate an option with no arguments was given.
-     */
-    private void setOption(String opt) {
-        String[] option = { opt };
-        options.append(option);
-    }
-
-    /**
-     * indicate an option with one argument was given.
-     */
-    private void setOption(String opt, String argument) {
-        String[] option = { opt, argument };
-        options.append(option);
-    }
-
-    /**
-     * indicate an option with the specified list of arguments was given.
-     */
-    private void setOption(String opt, List<String> arguments) {
-        String[] args = new String[arguments.length() + 1];
-        int k = 0;
-        args[k++] = opt;
-        for (List<String> i = arguments; i.nonEmpty(); i=i.tail) {
-            args[k++] = i.head;
-        }
-        options.append(args);
-    }
-
-    @Override
-    OptionHelper getOptionHelper() {
-        return new GrumpyHelper(messager) {
-            @Override
-            public String get(com.sun.tools.javac.main.Option option) {
-                return compOpts.get(option);
-            }
-
-            @Override
-            public void put(String name, String value) {
-                compOpts.put(name, value);
-            }
-        };
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/TagImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-/**
- * Represents a documentation tag, e.g. @since, @author, @version.
- * Given a tag (e.g. "@since 1.2"), holds tag name (e.g. "@since")
- * and tag text (e.g. "1.2").  TagImpls with structure or which require
- * special processing are handled by subclasses (ParamTagImpl, SeeTagImpl,
- * and ThrowsTagImpl
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Neal M Gafter
- * @see SeeTagImpl
- * @see ParamTagImpl
- * @see ThrowsTagImpl
- * @see Doc#tags()
- *
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class TagImpl implements Tag {
-
-    protected final String text;
-    protected final String name;
-    protected final DocImpl holder;
-
-    /**
-     * Cached first sentence.
-     */
-    private Tag[] firstSentence;
-
-    /**
-     * Cached inline tags.
-     */
-    private Tag[] inlineTags;
-
-    /**
-     *  Constructor
-     */
-    TagImpl(DocImpl holder, String name, String text) {
-        this.holder = holder;
-        this.name = name;
-        this.text = text;
-    }
-
-    /**
-     * Return the name of this tag.
-     */
-    public String name() {
-        return name;
-    }
-
-    /**
-     * Return the containing {@link Doc} of this Tag element.
-     */
-    public Doc holder() {
-        return holder;
-    }
-
-    /**
-     * Return the kind of this tag.
-     */
-    public String kind() {
-        return name;
-    }
-
-    /**
-     * Return the text of this tag, that is, portion beyond tag name.
-     */
-    public String text() {
-        return text;
-    }
-
-    DocEnv docenv() {
-        return holder.env;
-    }
-
-    /**
-     * for use by subclasses which have two part tag text.
-     */
-    String[] divideAtWhite() {
-        String[] sa = new String[2];
-        int len = text.length();
-        // if no white space found
-        sa[0] = text;
-        sa[1] = "";
-        for (int inx = 0; inx < len; ++inx) {
-            char ch = text.charAt(inx);
-            if (Character.isWhitespace(ch)) {
-                sa[0] = text.substring(0, inx);
-                for (; inx < len; ++inx) {
-                    ch = text.charAt(inx);
-                    if (!Character.isWhitespace(ch)) {
-                        sa[1] = text.substring(inx, len);
-                        break;
-                    }
-                }
-                break;
-            }
-        }
-        return sa;
-    }
-
-    /**
-     * convert this object to a string.
-     */
-    public String toString() {
-        return name + ":" + text;
-    }
-
-    /**
-     * For documentation comment with embedded @link tags, return the array of
-     * TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
-     * Within a comment string "This is an example of inline tags for a
-     * documentation comment {@link Doc {@link Doc commentlabel}}",
-     * where inside the inner braces, the first "Doc" carries exctly the same
-     * syntax as a SeeTagImpl and the second "commentlabel" is label for the Html
-     * Link, will return an array of TagImpl(s) with first element as TagImpl with
-     * comment text "This is an example of inline tags for a documentation
-     * comment" and second element as SeeTagImpl with referenced class as "Doc"
-     * and the label for the Html Link as "commentlabel".
-     *
-     * @return TagImpl[] Array of tags with inline SeeTagImpls.
-     * @see ParamTagImpl
-     * @see ThrowsTagImpl
-     */
-    public Tag[] inlineTags() {
-        if (inlineTags == null) {
-            inlineTags = Comment.getInlineTags(holder, text);
-        }
-        return inlineTags;
-    }
-
-    /**
-     * Return array of tags for the first sentence in the doc comment text.
-     */
-    public Tag[] firstSentenceTags() {
-        if (firstSentence == null) {
-            //Parse all sentences first to avoid duplicate warnings.
-            inlineTags();
-            try {
-                docenv().setSilent(true);
-                firstSentence = Comment.firstSentenceTags(holder, text);
-            } finally {
-                docenv().setSilent(false);
-            }
-        }
-        return firstSentence;
-    }
-
-    /**
-     * Return the doc item to which this tag is attached.
-     * @return the doc item to which this tag is attached.
-     */
-    public SourcePosition position() {
-        return holder.position();
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ThrowsTagImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-/**
- * Represents a @throws or @exception documentation tag.
- * Parses and holds the exception name and exception comment.
- * The exception name my be the name of a type variable.
- * Note: @exception is a backwards compatible synonymy for @throws.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Robert Field
- * @author Atul M Dambalkar
- * @see ExecutableMemberDocImpl#throwsTags()
- *
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-class ThrowsTagImpl extends TagImpl implements ThrowsTag {
-
-    private final String exceptionName;
-    private final String exceptionComment;
-
-    /**
-     * Cached inline tags.
-     */
-    private Tag[] inlineTags;
-
-    ThrowsTagImpl(DocImpl holder, String name, String text) {
-        super(holder, name, text);
-        String[] sa = divideAtWhite();
-        exceptionName = sa[0];
-        exceptionComment = sa[1];
-    }
-
-    /**
-     * Return the exception name.
-     */
-    public String exceptionName() {
-        return exceptionName;
-    }
-
-    /**
-     * Return the exception comment.
-     */
-    public String exceptionComment() {
-        return exceptionComment;
-    }
-
-    /**
-     * Return the exception as a ClassDocImpl.
-     */
-    public ClassDoc exception() {
-        ClassDocImpl exceptionClass;
-        if (!(holder instanceof ExecutableMemberDoc)) {
-            exceptionClass = null;
-        } else {
-            ExecutableMemberDocImpl emd = (ExecutableMemberDocImpl)holder;
-            ClassDocImpl con = (ClassDocImpl)emd.containingClass();
-            exceptionClass = (ClassDocImpl)con.findClass(exceptionName);
-        }
-        return exceptionClass;
-    }
-
-    /**
-     * Return the type that represents the exception.
-     * This may be a <code>ClassDoc</code> or a <code>TypeVariable</code>.
-     */
-    public Type exceptionType() {
-        //###(gj) TypeVariable not yet supported.
-        return exception();
-    }
-
-
-    /**
-     * Return the kind of this tag.  Always "@throws" for instances
-     * of ThrowsTagImpl.
-     */
-    @Override
-    public String kind() {
-        return "@throws";
-    }
-
-    /**
-     * For the exception comment with embedded @link tags return the array of
-     * TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
-     *
-     * @return TagImpl[] Array of tags with inline SeeTagImpls.
-     * @see TagImpl#inlineTags()
-     * @see ParamTagImpl#inlineTags()
-     */
-    @Override
-    public Tag[] inlineTags() {
-        if (inlineTags == null) {
-            inlineTags = Comment.getInlineTags(holder, exceptionComment());
-        }
-        return inlineTags;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ToolOption.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,454 +0,0 @@
-/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.main.Option;
-import com.sun.tools.javac.main.Option.InvalidValueException;
-import com.sun.tools.javac.main.OptionHelper;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.Options;
-
-
-/**
- * javadoc tool options.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public enum ToolOption {
-    // ----- options for underlying compiler -----
-
-    BOOTCLASSPATH("-bootclasspath", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
-        }
-    },
-
-    CLASSPATH("-classpath", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.CLASS_PATH, arg);
-        }
-    },
-
-    CP("-cp", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.CLASS_PATH, arg);
-        }
-    },
-
-    CLASS_PATH("--class-path", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.CLASS_PATH, arg);
-        }
-    },
-
-    EXTDIRS("-extdirs", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.EXTDIRS, arg);
-        }
-    },
-
-    SOURCEPATH("-sourcepath", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
-        }
-    },
-
-    SOURCE_PATH("--source-path", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
-        }
-    },
-
-    SYSCLASSPATH("-sysclasspath", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
-        }
-    },
-
-    MODULE_SOURCE_PATH("--module-source-path", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
-        }
-    },
-
-    UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
-        }
-    },
-
-    SYSTEM_("--system", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.SYSTEM, arg);
-        }
-    },
-
-    MODULE_PATH("--module-path", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
-        }
-    },
-
-    P("-p", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
-        }
-    },
-
-    ADD_MODULES("--add-modules", true) {
-        @Override
-        public void process(Helper helper, String arg) throws InvalidValueException {
-            Option.ADD_MODULES.process(helper.getOptionHelper(), opt, arg);
-        }
-    },
-
-    LIMIT_MODULES("--limit-modules", true) {
-        @Override
-        public void process(Helper helper, String arg) throws InvalidValueException {
-            Option.LIMIT_MODULES.process(helper.getOptionHelper(), opt, arg);
-        }
-    },
-
-    ENCODING("-encoding", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.encoding = arg;
-            helper.setCompilerOpt(opt, arg);
-            helper.setFileManagerOpt(Option.ENCODING, arg);
-        }
-    },
-
-    RELEASE("--release", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
-        }
-    },
-
-    SOURCE("-source", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt("--source", arg);
-        }
-    },
-
-    SOURCE2("--source", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
-        }
-    },
-
-    XMAXERRS("-Xmaxerrs", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
-        }
-    },
-
-    XMAXWARNS("-Xmaxwarns", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
-        }
-    },
-
-    ADD_READS("--add-reads", true) {
-        @Override
-        public void process(Helper helper, String arg) throws InvalidValueException {
-            Option.ADD_READS.process(helper.getOptionHelper(), opt, arg);
-        }
-    },
-
-    ADD_EXPORTS("--add-exports", true) {
-        @Override
-        public void process(Helper helper, String arg) throws InvalidValueException {
-            Option.ADD_EXPORTS.process(helper.getOptionHelper(), opt, arg);
-        }
-    },
-
-    PATCH_MODULE("--patch-module", true) {
-        @Override
-        public void process(Helper helper, String arg) throws InvalidValueException {
-            Option.PATCH_MODULE.process(helper.getOptionHelper(), opt, arg);
-        }
-    },
-
-    ADD_OPENS("--add-opens", true) {
-        @Override
-        public void process(Helper helper, String arg) throws InvalidValueException {
-            Option.ADD_OPENS.process(helper.getOptionHelper(), opt, arg);
-        }
-    },
-
-    // ----- doclet options -----
-
-    DOCLET("-doclet", true), // handled in setDocletInvoker
-
-    DOCLETPATH("-docletpath", true), // handled in setDocletInvoker
-
-    // ----- selection options -----
-
-    SUBPACKAGES("-subpackages", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.addToList(helper.subPackages, arg);
-        }
-    },
-
-    EXCLUDE("-exclude", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.addToList(helper.excludedPackages, arg);
-        }
-    },
-
-    // ----- filtering options -----
-
-    PACKAGE("-package") {
-        @Override
-        public void process(Helper helper) {
-            helper.setFilter(
-                    Flags.PUBLIC | Flags.PROTECTED | ModifierFilter.PACKAGE);
-        }
-    },
-
-    PRIVATE("-private") {
-        @Override
-        public void process(Helper helper) {
-            helper.setFilter(ModifierFilter.ALL_ACCESS);
-        }
-    },
-
-    PROTECTED("-protected") {
-        @Override
-        public void process(Helper helper) {
-            helper.setFilter(Flags.PUBLIC | Flags.PROTECTED);
-        }
-    },
-
-    PUBLIC("-public") {
-        @Override
-        public void process(Helper helper) {
-            helper.setFilter(Flags.PUBLIC);
-        }
-    },
-
-    // ----- output control options -----
-
-    PROMPT("-prompt") {
-        @Override
-        public void process(Helper helper) {
-            helper.compOpts.put("-prompt", "-prompt");
-            helper.promptOnError = true;
-        }
-    },
-
-    QUIET("-quiet") {
-        @Override
-        public void process(Helper helper) {
-            helper.quiet = true;
-        }
-    },
-
-    VERBOSE("-verbose") {
-        @Override
-        public void process(Helper helper) {
-            helper.compOpts.put("-verbose", "");
-        }
-    },
-
-    XWERROR("-Xwerror") {
-        @Override
-        public void process(Helper helper) {
-            helper.rejectWarnings = true;
-
-        }
-    },
-
-    // ----- other options -----
-
-    BREAKITERATOR("-breakiterator") {
-        @Override
-        public void process(Helper helper) {
-            helper.breakiterator = true;
-        }
-    },
-
-    LOCALE("-locale", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.docLocale = arg;
-        }
-    },
-
-    OVERVIEW("-overview", true),
-
-    XCLASSES("-Xclasses") {
-        @Override
-        public void process(Helper helper) {
-            helper.docClasses = true;
-
-        }
-    },
-
-    // ----- help options -----
-
-    HELP("-help") {
-        @Override
-        public void process(Helper helper) {
-            helper.usage();
-        }
-    },
-
-    X("-X") {
-        @Override
-        public void process(Helper helper) {
-            helper.Xusage();
-        }
-    };
-
-    public final String opt;
-    public final boolean hasArg;
-
-    ToolOption(String opt) {
-        this(opt, false);
-    }
-
-    ToolOption(String opt, boolean hasArg) {
-        this.opt = opt;
-        this.hasArg = hasArg;
-    }
-
-    void process(Helper helper, String arg) throws Option.InvalidValueException { }
-
-    void process(Helper helper) { }
-
-    static ToolOption get(String name) {
-        for (ToolOption o: values()) {
-            if (name.equals(o.opt))
-                return o;
-        }
-        return null;
-    }
-
-    static abstract class Helper {
-        /** List of decoded options. */
-        final ListBuffer<String[]> options = new ListBuffer<>();
-
-        /** Selected packages, from -subpackages. */
-        final ListBuffer<String> subPackages = new ListBuffer<>();
-
-        /** Excluded packages, from -exclude. */
-        final ListBuffer<String> excludedPackages = new ListBuffer<>();
-
-        // File manager options
-        final Map<Option, String> fileManagerOpts = new LinkedHashMap<>();
-
-        /** javac options, set by various options. */
-        Options compOpts; // = Options.instance(context)
-
-        /* Encoding for javac, and files written? set by -encoding. */
-        String encoding = null;
-
-        /** Set by -breakiterator. */
-        boolean breakiterator = false;
-
-        /** Set by -quiet. */
-        boolean quiet = false;
-
-        /** Set by -Xclasses. */
-        boolean docClasses = false;
-
-        /** Set by -Xwerror. */
-        boolean rejectWarnings = false;
-
-        /** Set by -prompt. */
-        boolean promptOnError;
-
-        /** Set by -locale. */
-        String docLocale = "";
-
-        /** Set by -public, private, -protected, -package. */
-        ModifierFilter showAccess = null;
-
-        abstract void usage();
-        abstract void Xusage();
-
-        abstract void usageError(String msg, Object... args);
-        abstract OptionHelper getOptionHelper();
-
-        void addToList(ListBuffer<String> list, String str){
-            StringTokenizer st = new StringTokenizer(str, ":");
-            String current;
-            while(st.hasMoreTokens()){
-                current = st.nextToken();
-                list.append(current);
-            }
-        }
-
-        void setFilter(long filterBits) {
-            if (showAccess != null) {
-                usageError("main.incompatible.access.flags");
-            }
-            showAccess = new ModifierFilter(filterBits);
-        }
-
-        void setCompilerOpt(String opt, String arg) {
-            if (compOpts.get(opt) != null) {
-                usageError("main.option.already.seen", opt);
-            }
-            compOpts.put(opt, arg);
-        }
-
-        void setFileManagerOpt(Option opt, String arg) {
-            fileManagerOpts.put(opt, arg);
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/TypeMaker.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,352 +0,0 @@
-/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.CompletionFailure;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.Type.ArrayType;
-import com.sun.tools.javac.code.Type.ClassType;
-import com.sun.tools.javac.code.Type.TypeVar;
-import com.sun.tools.javac.util.List;
-import static com.sun.tools.javac.code.TypeTag.ARRAY;
-
-/**
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class TypeMaker {
-
-    public static com.sun.javadoc.Type getType(DocEnv env, Type t) {
-        return getType(env, t, true);
-    }
-
-    /**
-     * @param errToClassDoc  if true, ERROR type results in a ClassDoc;
-     *          false preserves legacy behavior
-     */
-    public static com.sun.javadoc.Type getType(DocEnv env, Type t,
-            boolean errorToClassDoc) {
-        return getType(env, t, errorToClassDoc, true);
-    }
-
-    public static com.sun.javadoc.Type getType(DocEnv env, Type t,
-            boolean errToClassDoc, boolean considerAnnotations) {
-        try {
-            return getTypeImpl(env, t, errToClassDoc, considerAnnotations);
-        } catch (CompletionFailure cf) {
-            /* Quietly ignore completion failures and try again - the type
-             * for which the CompletionFailure was thrown shouldn't be completed
-             * again by the completer that threw the CompletionFailure.
-             */
-            return getType(env, t, errToClassDoc, considerAnnotations);
-        }
-    }
-
-    @SuppressWarnings("fallthrough")
-    private static com.sun.javadoc.Type getTypeImpl(DocEnv env, Type t,
-            boolean errToClassDoc, boolean considerAnnotations) {
-        if (env.legacyDoclet) {
-            t = env.types.erasure(t);
-        }
-
-        if (considerAnnotations && t.isAnnotated()) {
-            return new AnnotatedTypeImpl(env, t);
-        }
-
-        switch (t.getTag()) {
-        case CLASS:
-            if (ClassDocImpl.isGeneric((ClassSymbol)t.tsym)) {
-                return env.getParameterizedType((ClassType)t);
-            } else {
-                return env.getClassDoc((ClassSymbol)t.tsym);
-            }
-        case WILDCARD:
-            Type.WildcardType a = (Type.WildcardType)t;
-            return new WildcardTypeImpl(env, a);
-        case TYPEVAR: return new TypeVariableImpl(env, (TypeVar)t);
-        case ARRAY: return new ArrayTypeImpl(env, t);
-        case BYTE: return PrimitiveType.byteType;
-        case CHAR: return PrimitiveType.charType;
-        case SHORT: return PrimitiveType.shortType;
-        case INT: return PrimitiveType.intType;
-        case LONG: return PrimitiveType.longType;
-        case FLOAT: return PrimitiveType.floatType;
-        case DOUBLE: return PrimitiveType.doubleType;
-        case BOOLEAN: return PrimitiveType.booleanType;
-        case VOID: return PrimitiveType.voidType;
-        case ERROR:
-            if (errToClassDoc)
-                return env.getClassDoc((ClassSymbol)t.tsym);
-            // FALLTHRU
-        default:
-            return new PrimitiveType(t.tsym.getQualifiedName().toString());
-        }
-    }
-
-    /**
-     * Convert a list of javac types into an array of javadoc types.
-     */
-    public static com.sun.javadoc.Type[] getTypes(DocEnv env, List<Type> ts) {
-        return getTypes(env, ts, new com.sun.javadoc.Type[ts.length()]);
-    }
-
-    /**
-     * Like the above version, but use and return the array given.
-     */
-    public static com.sun.javadoc.Type[] getTypes(DocEnv env, List<Type> ts,
-                                                  com.sun.javadoc.Type res[]) {
-        int i = 0;
-        for (Type t : ts) {
-            res[i++] = getType(env, t);
-        }
-        return res;
-    }
-
-    public static String getTypeName(Type t, boolean full) {
-        switch (t.getTag()) {
-        case ARRAY:
-            StringBuilder s = new StringBuilder();
-            while (t.hasTag(ARRAY)) {
-                s.append("[]");
-                t = ((ArrayType)t).elemtype;
-            }
-            s.insert(0, getTypeName(t, full));
-            return s.toString();
-        case CLASS:
-            return ClassDocImpl.getClassName((ClassSymbol)t.tsym, full);
-        default:
-            return t.tsym.getQualifiedName().toString();
-        }
-    }
-
-    /**
-     * Return the string representation of a type use.  Bounds of type
-     * variables are not included; bounds of wildcard types are.
-     * Class names are qualified if "full" is true.
-     */
-    static String getTypeString(DocEnv env, Type t, boolean full) {
-        // TODO: should annotations be included here?
-        switch (t.getTag()) {
-        case ARRAY:
-            StringBuilder s = new StringBuilder();
-            while (t.hasTag(ARRAY)) {
-                s.append("[]");
-                t = env.types.elemtype(t);
-            }
-            s.insert(0, getTypeString(env, t, full));
-            return s.toString();
-        case CLASS:
-            return ParameterizedTypeImpl.
-                        parameterizedTypeToString(env, (ClassType)t, full);
-        case WILDCARD:
-            Type.WildcardType a = (Type.WildcardType)t;
-            return WildcardTypeImpl.wildcardTypeToString(env, a, full);
-        default:
-            return t.tsym.getQualifiedName().toString();
-        }
-    }
-
-    /**
-     * Return the formal type parameters of a class or method as an
-     * angle-bracketed string.  Each parameter is a type variable with
-     * optional bounds.  Class names are qualified if "full" is true.
-     * Return "" if there are no type parameters or we're hiding generics.
-     */
-    static String typeParametersString(DocEnv env, Symbol sym, boolean full) {
-        if (env.legacyDoclet || sym.type.getTypeArguments().isEmpty()) {
-            return "";
-        }
-        StringBuilder s = new StringBuilder();
-        for (Type t : sym.type.getTypeArguments()) {
-            s.append(s.length() == 0 ? "<" : ", ");
-            s.append(TypeVariableImpl.typeVarToString(env, (TypeVar)t, full));
-        }
-        s.append(">");
-        return s.toString();
-    }
-
-    /**
-     * Return the actual type arguments of a parameterized type as an
-     * angle-bracketed string.  Class name are qualified if "full" is true.
-     * Return "" if there are no type arguments or we're hiding generics.
-     */
-    static String typeArgumentsString(DocEnv env, ClassType cl, boolean full) {
-        if (env.legacyDoclet || cl.getTypeArguments().isEmpty()) {
-            return "";
-        }
-        StringBuilder s = new StringBuilder();
-        for (Type t : cl.getTypeArguments()) {
-            s.append(s.length() == 0 ? "<" : ", ");
-            s.append(getTypeString(env, t, full));
-        }
-        s.append(">");
-        return s.toString();
-    }
-
-
-    private static class ArrayTypeImpl implements com.sun.javadoc.Type {
-
-        Type arrayType;
-
-        DocEnv env;
-
-        ArrayTypeImpl(DocEnv env, Type arrayType) {
-            this.env = env;
-            this.arrayType = arrayType;
-        }
-
-        private com.sun.javadoc.Type skipArraysCache = null;
-
-        public com.sun.javadoc.Type getElementType() {
-            return TypeMaker.getType(env, env.types.elemtype(arrayType));
-        }
-
-        private com.sun.javadoc.Type skipArrays() {
-            if (skipArraysCache == null) {
-                Type t;
-                for (t = arrayType; t.hasTag(ARRAY); t = env.types.elemtype(t)) { }
-                skipArraysCache = TypeMaker.getType(env, t);
-            }
-            return skipArraysCache;
-        }
-
-        /**
-         * Return the type's dimension information, as a string.
-         * <p>
-         * For example, a two dimensional array of String returns '[][]'.
-         */
-        public String dimension() {
-            StringBuilder dimension = new StringBuilder();
-            for (Type t = arrayType; t.hasTag(ARRAY); t = env.types.elemtype(t)) {
-                dimension.append("[]");
-            }
-            return dimension.toString();
-        }
-
-        /**
-         * Return unqualified name of type excluding any dimension information.
-         * <p>
-         * For example, a two dimensional array of String returns 'String'.
-         */
-        public String typeName() {
-            return skipArrays().typeName();
-        }
-
-        /**
-         * Return qualified name of type excluding any dimension information.
-         *<p>
-         * For example, a two dimensional array of String
-         * returns 'java.lang.String'.
-         */
-        public String qualifiedTypeName() {
-            return skipArrays().qualifiedTypeName();
-        }
-
-        /**
-         * Return the simple name of this type excluding any dimension information.
-         */
-        public String simpleTypeName() {
-            return skipArrays().simpleTypeName();
-        }
-
-        /**
-         * Return this type as a class.  Array dimensions are ignored.
-         *
-         * @return a ClassDocImpl if the type is a Class.
-         * Return null if it is a primitive type..
-         */
-        public ClassDoc asClassDoc() {
-            return skipArrays().asClassDoc();
-        }
-
-        /**
-         * Return this type as a <code>ParameterizedType</code> if it
-         * represents a parameterized type.  Array dimensions are ignored.
-         */
-        public ParameterizedType asParameterizedType() {
-            return skipArrays().asParameterizedType();
-        }
-
-        /**
-         * Return this type as a <code>TypeVariable</code> if it represents
-         * a type variable.  Array dimensions are ignored.
-         */
-        public TypeVariable asTypeVariable() {
-            return skipArrays().asTypeVariable();
-        }
-
-        /**
-         * Return null, as there are no arrays of wildcard types.
-         */
-        public WildcardType asWildcardType() {
-            return null;
-        }
-
-        /**
-         * Return null, as there are no annotations of the type
-         */
-        public AnnotatedType asAnnotatedType() {
-            return null;
-        }
-
-        /**
-         * Return this type as an <code>AnnotationTypeDoc</code> if it
-         * represents an annotation type.  Array dimensions are ignored.
-         */
-        public AnnotationTypeDoc asAnnotationTypeDoc() {
-            return skipArrays().asAnnotationTypeDoc();
-        }
-
-        /**
-         * Return true if this is an array of a primitive type.
-         */
-        public boolean isPrimitive() {
-            return skipArrays().isPrimitive();
-        }
-
-        /**
-         * Return a string representation of the type.
-         *
-         * Return name of type including any dimension information.
-         * <p>
-         * For example, a two dimensional array of String returns
-         * <code>String[][]</code>.
-         *
-         * @return name of type including any dimension information.
-         */
-        @Override
-        public String toString() {
-            return qualifiedTypeName() + dimension();
-        }
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/TypeVariableImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Attribute.TypeCompound;
-import com.sun.tools.javac.code.Kinds;
-import com.sun.tools.javac.code.Kinds.KindSelector;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symbol.MethodSymbol;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.Type.TypeVar;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.Name;
-import com.sun.tools.javac.util.Names;
-
-/**
- * Implementation of <code>TypeVariable</code>, which
- * represents a type variable.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class TypeVariableImpl extends AbstractTypeImpl implements TypeVariable {
-
-    TypeVariableImpl(DocEnv env, TypeVar type) {
-        super(env, type);
-    }
-
-    /**
-     * Return the bounds of this type variable.
-     */
-    public com.sun.javadoc.Type[] bounds() {
-        return TypeMaker.getTypes(env, getBounds((TypeVar)type, env));
-    }
-
-    /**
-     * Return the class, interface, method, or constructor within
-     * which this type variable is declared.
-     */
-    public ProgramElementDoc owner() {
-        Symbol osym = type.tsym.owner;
-        if (osym.kind.matches(KindSelector.TYP)) {
-            return env.getClassDoc((ClassSymbol)osym);
-        }
-        Names names = osym.name.table.names;
-        if (osym.name == names.init) {
-            return env.getConstructorDoc((MethodSymbol)osym);
-        } else {
-            return env.getMethodDoc((MethodSymbol)osym);
-        }
-    }
-
-    /**
-     * Return the ClassDoc of the erasure of this type variable.
-     */
-    @Override
-    public ClassDoc asClassDoc() {
-        return env.getClassDoc((ClassSymbol)env.types.erasure(type).tsym);
-    }
-
-    @Override
-    public TypeVariable asTypeVariable() {
-        return this;
-    }
-
-    @Override
-    public String toString() {
-        return typeVarToString(env, (TypeVar)type, true);
-    }
-
-
-    /**
-     * Return the string form of a type variable along with any
-     * "extends" clause.  Class names are qualified if "full" is true.
-     */
-    static String typeVarToString(DocEnv env, TypeVar v, boolean full) {
-        StringBuilder s = new StringBuilder(v.toString());
-        List<Type> bounds = getBounds(v, env);
-        if (bounds.nonEmpty()) {
-            boolean first = true;
-            for (Type b : bounds) {
-                s.append(first ? " extends " : " & ");
-                s.append(TypeMaker.getTypeString(env, b, full));
-                first = false;
-            }
-        }
-        return s.toString();
-    }
-
-    /**
-     * Get the bounds of a type variable as listed in the "extends" clause.
-     */
-    private static List<Type> getBounds(TypeVar v, DocEnv env) {
-        final Type upperBound = v.getUpperBound();
-        Name boundname = upperBound.tsym.getQualifiedName();
-        if (boundname == boundname.table.names.java_lang_Object
-            && !upperBound.isAnnotated()) {
-            return List.nil();
-        } else {
-            return env.types.getBounds(v);
-        }
-    }
-
-    /**
-     * Get the annotations of this program element.
-     * Return an empty array if there are none.
-     */
-    public AnnotationDesc[] annotations() {
-        if (!type.isAnnotated()) {
-            return new AnnotationDesc[0];
-        }
-        List<? extends TypeCompound> tas = type.getAnnotationMirrors();
-        AnnotationDesc res[] = new AnnotationDesc[tas.length()];
-        int i = 0;
-        for (Attribute.Compound a : tas) {
-            res[i++] = new AnnotationDescImpl(env, a);
-        }
-        return res;
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/WildcardTypeImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.tools.javadoc.main;
-
-import com.sun.javadoc.*;
-
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.util.List;
-
-
-/**
- * Implementation of <code>WildcardType</code>, which
- * represents a wildcard type.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- *
- * @author Scott Seligman
- * @since 1.5
- */
-@Deprecated(since="9", forRemoval=true)
-@SuppressWarnings("removal")
-public class WildcardTypeImpl extends AbstractTypeImpl implements WildcardType {
-
-    WildcardTypeImpl(DocEnv env, Type.WildcardType type) {
-        super(env, type);
-    }
-
-    /**
-     * Return the upper bounds of this wildcard type argument
-     * as given by the <i>extends</i> clause.
-     * Return an empty array if no such bounds are explicitly given.
-     */
-    public com.sun.javadoc.Type[] extendsBounds() {
-        return TypeMaker.getTypes(env, getExtendsBounds((Type.WildcardType)type));
-    }
-
-    /**
-     * Return the lower bounds of this wildcard type argument
-     * as given by the <i>super</i> clause.
-     * Return an empty array if no such bounds are explicitly given.
-     */
-    public com.sun.javadoc.Type[] superBounds() {
-        return TypeMaker.getTypes(env, getSuperBounds((Type.WildcardType)type));
-    }
-
-    /**
-     * Return the ClassDoc of the erasure of this wildcard type.
-     */
-    @Override
-    public ClassDoc asClassDoc() {
-        return env.getClassDoc((ClassSymbol)env.types.erasure(type).tsym);
-    }
-
-    @Override
-    public WildcardType asWildcardType() {
-        return this;
-    }
-
-    @Override
-    public String typeName()            { return "?"; }
-    @Override
-    public String qualifiedTypeName()   { return "?"; }
-    @Override
-    public String simpleTypeName()      { return "?"; }
-
-    @Override
-    public String toString() {
-        return wildcardTypeToString(env, (Type.WildcardType)type, true);
-    }
-
-
-    /**
-     * Return the string form of a wildcard type ("?") along with any
-     * "extends" or "super" clause.  Delimiting brackets are not
-     * included.  Class names are qualified if "full" is true.
-     */
-    static String wildcardTypeToString(DocEnv env,
-                                       Type.WildcardType wildThing, boolean full) {
-        if (env.legacyDoclet) {
-            return TypeMaker.getTypeName(env.types.erasure(wildThing), full);
-        }
-        StringBuilder s = new StringBuilder("?");
-        List<Type> bounds = getExtendsBounds(wildThing);
-        if (bounds.nonEmpty()) {
-            s.append(" extends ");
-        } else {
-            bounds = getSuperBounds(wildThing);
-            if (bounds.nonEmpty()) {
-                s.append(" super ");
-            }
-        }
-        boolean first = true;   // currently only one bound is allowed
-        for (Type b : bounds) {
-            if (!first) {
-                s.append(" & ");
-            }
-            s.append(TypeMaker.getTypeString(env, b, full));
-            first = false;
-        }
-        return s.toString();
-    }
-
-    private static List<Type> getExtendsBounds(Type.WildcardType wild) {
-        return wild.isSuperBound()
-                ? List.nil()
-                : List.of(wild.type);
-    }
-
-    private static List<Type> getSuperBounds(Type.WildcardType wild) {
-        return wild.isExtendsBound()
-                ? List.nil()
-                : List.of(wild.type);
-    }
-}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/package-info.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  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 package and its contents are deprecated and
- * may be removed in a future release.
- * See
- * {@code javax.tools.ToolProvider.getSystemDocumentationTool}
- * and
- * {@code javax.tools.DocumentationTool}
- * for replacement functionality.
- */
-package com.sun.tools.javadoc;
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc.properties	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-#
-# Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-main.errors={0} errors
-main.error={0} error
-main.warnings={0} warnings
-main.warning={0} warning
-
-main.usage=Usage: javadoc [options] [packagenames] [sourcefiles] [@files]\n\
-\  -overview <file>                 Read overview documentation from HTML file\n\
-\  -public                          Show only public classes and members\n\
-\  -protected                       Show protected/public classes and members (default)\n\
-\  -package                         Show package/protected/public classes and members\n\
-\  -private                         Show all classes and members\n\
-\  --help                           Display command line options and exit\n\
-\  -doclet <class>                  Generate output via alternate doclet\n\
-\  -docletpath <path>               Specify where to find doclet class files\n\
-\  --module-source-path <path>      Specify where to find input source files for multiple modules\n\
-\  --upgrade-module-path <path>     Override location of upgradeable modules\n\
-\  --module-path <path>, -p <path>  Specify where to find application modules\n\
-\  --add-modules <module>(,<module>)*\n\
-\                                   Root modules to resolve in addition to the initial modules,\n\
-\                                   or all modules on the module path if <module> is ALL-MODULE-PATH.\n\
-\  --limit-modules <module>(,<module>)*\n\
-\                                   Limit the universe of observable modules\n\
-\  --source-path <path>             Specify where to find source files\n\
-\  -sourcepath <path>               Specify where to find source files\n\
-\  --class-path <path>              Specify where to find user class files\n\
-\  -classpath <path>                Specify where to find user class files\n\
-\  -cp <path>                       Specify where to find user class files\n\
-\  -exclude <pkglist>               Specify a list of packages to exclude\n\
-\  -subpackages <subpkglist>        Specify subpackages to recursively load\n\
-\  -breakiterator                   Compute first sentence with BreakIterator\n\
-\  -bootclasspath <path>            Override location of platform class files\n\
-\                                   used for non-modular releases\n\
-\  --system <jdk>                   Override location of system modules used\n\
-\                                   for modular releases.\n\
-\  -source <release>                Provide source compatibility with specified release\n\
-\  --release <release>              Provide source compatibility with specified release\n\
-\  -extdirs <dirlist>               Override location of installed extensions\n\
-\  -verbose                         Output messages about what Javadoc is doing\n\
-\  -locale <name>                   Locale to be used, e.g. en_US or en_US_WIN\n\
-\  -encoding <name>                 Source file encoding name\n\
-\  -quiet                           Do not display status messages\n\
-\  -J<flag>                         Pass <flag> directly to the runtime system\n\
-\  -X                               Print a synopsis of nonstandard options and exit\n
-
-main.usage.foot=\n\
-GNU-style options may use '=' instead whitespace to separate the name of an option\n\
-from its value.\n
-
-main.Xusage=\
-\  -Xmaxerrs <number>               Set the maximum number of errors to print\n\
-\  -Xmaxwarns <number>              Set the maximum number of warnings to print\n\
-\  --add-exports <module>/<package>=<other-module>(,<other-module>)*\n\
-\                                   Specify a package to be considered as exported from its \n\
-\                                   defining module to additional modules, or to all unnamed \n\
-\                                   modules if <other-module> is ALL-UNNAMED.\n\
-\  --add-reads <module>=<other-module>(,<other-module>)*\n\
-\                                   Specify additional modules to be considered as required by a\n\
-\                                   given module. <other-module> may be ALL-UNNAMED to require\n\
-\                                   the unnamed module.\n\
-\  --patch-module <module>=<file>(:<file>)*\n\
-\                                   Override or augment a module with classes and resources\n\
-\                                   in JAR files or directories\n
-
-main.Xusage.foot=\
-These options are non-standard and subject to change without notice.
-
-main.option.already.seen=The {0} option may be specified no more than once.
-main.requires_argument=option {0} requires an argument.
-main.locale_first=option -locale must be first on the command line.
-main.invalid_flag=invalid flag: {0}
-main.No_packages_or_classes_specified=No packages or classes specified.
-main.incompatible.access.flags=More than one of -public, -private, -package, or -protected specified.
-main.cant.read=cannot read {0}
-main.Loading_source_files_for_package=Loading source files for package {0}...
-main.Loading_source_file=Loading source file {0}...
-main.Building_tree=Constructing Javadoc information...
-main.no_source_files_for_package=No source files for package {0}
-main.fatal.error=fatal error
-main.fatal.exception=fatal exception
-main.out.of.memory=java.lang.OutOfMemoryError: Please increase memory.\n\
-For example, on the JDK Classic or HotSpot VMs, add the option -J-Xmx\n\
-such as -J-Xmx32m.
-main.done_in=[done in {0} ms]
-main.doclet_method_must_be_static=In doclet class {0}, method {1} must be static.
-main.must_return_int=In doclet class {0}, method {1} must return int.
-main.must_return_boolean=In doclet class {0}, method {1} must return boolean.
-main.must_return_languageversion=In doclet class {0}, method {1} must return LanguageVersion.
-main.more_than_one_doclet_specified_0_and_1=More than one doclet specified ({0} and {1}).
-main.doclet_class_not_found=Cannot find doclet class {0}
-main.doclet_method_not_found=Doclet class {0} does not contain a {1} method
-main.doclet_method_not_accessible=In doclet class {0},  method {1} not accessible
-main.internal_error_exception_thrown=Internal error: In doclet class {0},  method {1} has thrown an exception {2}
-main.exception_thrown=In doclet class {0},  method {1} has thrown an exception {2}
-main.illegal_locale_name=Locale not available: {0}
-main.malformed_locale_name=Malformed locale name: {0}
-main.file_not_found=File not found: "{0}"
-main.file_ignored=File ignored: "{0}" (not yet supported)
-main.illegal_class_name=Illegal class name: "{0}"
-main.illegal_package_name=Illegal package name: "{0}"
-main.release.bootclasspath.conflict=option {0} cannot be used together with -release
-main.unsupported.release.version=release version {0} not supported
-main.option.invalid.value={0}
-tag.illegal_char_in_arr_dim=Tag {0}: Syntax Error in array dimension, method parameters: {1}
-tag.illegal_see_tag=Tag {0}: Syntax Error in method parameters: {1}
-tag.missing_comma_space=Tag {0}: Missing comma or space in method parameters: {1}
-tag.tag_has_no_arguments={0} tag has no arguments.
-tag.see.missing_sharp=Tag {0}: missing ''#'': "{1}"
-tag.see.can_not_find_member=Tag {0}: can''t find {1} in {2}
-tag.see.no_close_bracket_on_url=Tag {0}: missing final ''>'': "{1}"
-tag.see.no_close_quote=Tag {0}: no final close quote: "{1}"
-tag.see.class_not_specified=Tag {0}: class not specified: "{1}"
-tag.see.illegal_character=Tag {0}:illegal character: "{1}" in "{2}"
-tag.see.malformed_see_tag=Tag {0}: malformed: "{1}"
-tag.End_delimiter_missing_for_possible_SeeTag=End Delimiter } missing for possible See Tag in comment string: "{0}"
-tag.Improper_Use_Of_Link_Tag=Missing closing ''}'' character for inline tag: "{0}"
-tag.serialField.illegal_character=illegal character {0} in @serialField tag: {1}.
-javadoc.File_Read_Error=Error while reading file {0}
-javadoc.Body_missing_from_html_file=Body tag missing from HTML file
-javadoc.End_body_missing_from_html_file=Close body tag missing from HTML file
-javadoc.Multiple_package_comments=Multiple sources of package comments found for package "{0}"
-javadoc.JavaScript_in_comment=JavaScript found in documentation comment.\n\
-    Use --allow-script-in-comments to allow use of JavaScript.
-javadoc.class_not_found=Class {0} not found.
-javadoc.error=error
-javadoc.warning=warning
-
-javadoc.error.msg={0}: error - {1}
-javadoc.warning.msg={0}: warning - {1}
-javadoc.note.msg = {1}
-javadoc.note.pos.msg= {0}: {1}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc_ja.properties	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#
-# Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-main.errors=\u30A8\u30E9\u30FC{0}\u500B
-main.error=\u30A8\u30E9\u30FC{0}\u500B
-main.warnings=\u8B66\u544A{0}\u500B
-main.warning=\u8B66\u544A{0}\u500B
-
-main.usage=\u4F7F\u7528\u65B9\u6CD5: javadoc [options] [packagenames] [sourcefiles] [@files]\n  -overview <file>                 HTML\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u6982\u8981\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8AAD\u307F\u8FBC\u3080\n  -public                          public\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u306E\u307F\u3092\u793A\u3059\n  -protected                       protected/public\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u793A\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8)\n  -package                         package/protected/public\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u793A\u3059\n  -private                         \u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u793A\u3059\n  --help                           \u30B3\u30DE\u30F3\u30C9\u884C\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8868\u793A\u3057\u3066\u7D42\u4E86\u3059\u308B\n  -doclet <class>                  \u4EE3\u66FFdoclet\u3092\u4ECB\u3057\u3066\u51FA\u529B\u3092\u751F\u6210\u3059\u308B\n  -docletpath <path>               doclet\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  --module-source-path <path>      \u8907\u6570\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u5165\u529B\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  --upgrade-module-path <path>     \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u53EF\u80FD\u306A\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n  --module-path <path>\u3001-p <path>  \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  --add-modules <module>(,<module>)*\n                                   \u521D\u671F\u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u52A0\u3048\u3066\u89E3\u6C7A\u3059\u308B\u30EB\u30FC\u30C8\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u307E\u305F\u306F\n                                   <module>\u304CALL-MODULE-PATH\u3067\u3042\u308B\u5834\u5408\u306F\u30E2\u30B8\u30E5\u30FC\u30EB\u30FB\u30D1\u30B9\u306E\u3059\u3079\u3066\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u3002\n  --limit-modules <module>(,<module>)*\n                                   \u53C2\u7167\u53EF\u80FD\u306A\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u9818\u57DF\u3092\u5236\u9650\u3059\u308B\n  --source-path <path>             \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  -sourcepath <path>               \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  --class-path <path>              \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  -classpath <path>                \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  -cp <path>                       \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n  -exclude <pkglist>               \u9664\u5916\u3059\u308B\u30D1\u30C3\u30B1\u30FC\u30B8\u30FB\u30EA\u30B9\u30C8\u3092\u6307\u5B9A\u3059\u308B\n  -subpackages <subpkglist>        \u518D\u5E30\u7684\u306B\u30ED\u30FC\u30C9\u3059\u308B\u30B5\u30D6\u30D1\u30C3\u30B1\u30FC\u30B8\u3092\u6307\u5B9A\u3059\u308B\n  -breakiterator                   BreakIterator\u3067\u6700\u521D\u306E\u6587\u3092\u8A08\u7B97\u3059\u308B\n  -bootclasspath <path>            \u975E\u30E2\u30B8\u30E5\u30E9\u30FB\u30EA\u30EA\u30FC\u30B9\u3067\u4F7F\u7528\u3055\u308C\u308B\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\n                                   \
-\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n  --system <jdk>                   \u30E2\u30B8\u30E5\u30E9\u30FB\u30EA\u30EA\u30FC\u30B9\u3067\u4F7F\u7528\u3055\u308C\u308B\u30B7\u30B9\u30C6\u30E0\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\n                                   \u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\u3002\n  -source <release>                \u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u63D0\u4F9B\u3059\u308B\n  --release <release>              \u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u63D0\u4F9B\u3059\u308B\n  -extdirs <dirlist>               \u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u305F\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n  -verbose                         Javadoc\u306E\u52D5\u4F5C\u306B\u3064\u3044\u3066\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n  -locale <name>                   en_US\u3084en_US_WIN\u306A\u3069\u306E\u4F7F\u7528\u3059\u308B\u30ED\u30B1\u30FC\u30EB\n  -encoding <name>                 \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u540D\n  -quiet                           \u72B6\u614B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3057\u306A\u3044\n  -J<flag>                         <flag>\u3092\u5B9F\u884C\u6642\u30B7\u30B9\u30C6\u30E0\u306B\u76F4\u63A5\u6E21\u3059\n  -X                               \u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u6982\u8981\u3092\u51FA\u529B\u3057\u7D42\u4E86\u3059\u308B\n
-
-main.usage.foot=\nGNU\u30B9\u30BF\u30A4\u30EB\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u306F\u3001\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u540D\u524D\u3068\u305D\u306E\u5024\u3092\u533A\u5207\u308B\u305F\u3081\u306B\u7A7A\u767D\u3067\u306F\u306A\u304F'='\u3092\n\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002\n
-
-main.Xusage=\  -Xmaxerrs <number>               \u51FA\u529B\u3059\u308B\u6700\u5927\u30A8\u30E9\u30FC\u6570\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n  -Xmaxwarns <number>              \u51FA\u529B\u3059\u308B\u6700\u5927\u8B66\u544A\u6570\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n  --add-exports <module>/<package>=<other-module>(,<other-module>)*\n                                   \u305D\u306E\u5B9A\u7FA9\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u3089\u3001\u8FFD\u52A0\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u307E\u305F\u306F<other-module>\u304C \n                                   ALL-UNNAMED\u3067\u3042\u308B\u5834\u5408\u306F\u3059\u3079\u3066\u306E\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u306B \n                                   \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u6E08\u3068\u307F\u306A\u3055\u308C\u308B\u3088\u3046\u306B\u30D1\u30C3\u30B1\u30FC\u30B8\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002\n  --add-reads <module>=<other-module>(,<other-module>)*\n                                   \u6307\u5B9A\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u3067\u5FC5\u9808\u3068\u307F\u306A\u3055\u308C\u308B\u3088\u3046\u306B\u8FFD\u52A0\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002\n                                   \u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u5FC5\u8981\u3068\u3059\u308B\u5834\u5408\u3001<other-module>\u306FALL-UNNAMED\n                                   \u306B\u3057\u307E\u3059\u3002\n  --patch-module <module>=<file>(:<file>)*\n                                   JAR\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30EA\u30BD\u30FC\u30B9\u3067\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\n                                   \u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u307E\u305F\u306F\u62E1\u5F35\u3057\u307E\u3059\n
-
-main.Xusage.foot=\u3053\u308C\u3089\u306F\u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3042\u308A\u4E88\u544A\u306A\u3057\u306B\u5909\u66F4\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
-
-main.option.already.seen={0}\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u8907\u6570\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
-main.requires_argument=\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306B\u306F\u5F15\u6570\u304C\u5FC5\u8981\u3067\u3059\u3002
-main.locale_first=\u30AA\u30D7\u30B7\u30E7\u30F3-locale\u306F\u3001\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u306E\u6700\u521D\u306B\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
-main.invalid_flag={0}\u306F\u7121\u52B9\u306A\u30D5\u30E9\u30B0\u3067\u3059
-main.No_packages_or_classes_specified=\u30D1\u30C3\u30B1\u30FC\u30B8\u307E\u305F\u306F\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
-main.incompatible.access.flags=-public\u3001-private\u3001-package\u307E\u305F\u306F-protected\u306E\u3046\u3061\u306E2\u3064\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u307E\u3057\u305F\u3002
-main.cant.read={0}\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093
-main.Loading_source_files_for_package=\u30D1\u30C3\u30B1\u30FC\u30B8{0}\u306E\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...
-main.Loading_source_file=\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB{0}\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...
-main.Building_tree=Javadoc\u60C5\u5831\u3092\u69CB\u7BC9\u3057\u3066\u3044\u307E\u3059...
-main.no_source_files_for_package=\u30D1\u30C3\u30B1\u30FC\u30B8{0}\u306E\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093
-main.fatal.error=\u81F4\u547D\u7684\u30A8\u30E9\u30FC
-main.fatal.exception=\u81F4\u547D\u7684\u4F8B\u5916
-main.out.of.memory=java.lang.OutOfMemoryError: \u30E1\u30E2\u30EA\u30FC\u3092\u5897\u3084\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u305F\u3068\u3048\u3070\u3001JDK\u306Eclassic\u3082\u3057\u304F\u306Fhotspot VM\u3067\u306F\u3001-J-Xmx32m\u306E\u3088\u3046\u306B\n-J-Xmx\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
-main.done_in=[{0}\u30DF\u30EA\u79D2\u3067\u5B8C\u4E86]
-main.doclet_method_must_be_static=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306Fstatic\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
-main.must_return_int=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306Fint\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
-main.must_return_boolean=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306Fboolean\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
-main.must_return_languageversion=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306FLanguageVersion\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
-main.more_than_one_doclet_specified_0_and_1=\u8907\u6570\u306Edoclet({0}\u3068{1})\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
-main.doclet_class_not_found=doclet\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
-main.doclet_method_not_found=doclet\u30AF\u30E9\u30B9{0}\u306B\u306F\u30E1\u30BD\u30C3\u30C9{1}\u304C\u3042\u308A\u307E\u305B\u3093
-main.doclet_method_not_accessible=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093
-main.internal_error_exception_thrown=doclet\u30AF\u30E9\u30B9{0}\u306E\u5185\u90E8\u30A8\u30E9\u30FC\u3067\u3059\u3002\u30E1\u30BD\u30C3\u30C9{1}\u306F\u4F8B\u5916{2}\u3092\u30B9\u30ED\u30FC\u3057\u307E\u3057\u305F
-main.exception_thrown=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306F\u4F8B\u5916{2}\u3092\u30B9\u30ED\u30FC\u3057\u307E\u3057\u305F
-main.illegal_locale_name=\u30ED\u30B1\u30FC\u30EB{0}\u304C\u7121\u52B9\u3067\u3059
-main.malformed_locale_name=\u30ED\u30B1\u30FC\u30EB\u540D{0}\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
-main.file_not_found=\u30D5\u30A1\u30A4\u30EB"{0}"\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
-main.file_ignored=\u30D5\u30A1\u30A4\u30EB\u306F\u7121\u8996\u3055\u308C\u307E\u3057\u305F: "{0}" (\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093)
-main.illegal_class_name=\u30AF\u30E9\u30B9\u540D\u304C\u4E0D\u6B63\u3067\u3059: "{0}"
-main.illegal_package_name=\u30D1\u30C3\u30B1\u30FC\u30B8\u540D"{0}"\u306F\u4E0D\u6B63\u3067\u3059
-main.release.bootclasspath.conflict=\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306F-release\u3068\u4E00\u7DD2\u306B\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
-main.unsupported.release.version=\u30EA\u30EA\u30FC\u30B9\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3{0}\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-main.option.invalid.value={0}
-tag.illegal_char_in_arr_dim=\u30BF\u30B0{0}: \u914D\u5217\u306E\u5927\u304D\u3055\u3001\u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF{1}\u306B\u69CB\u6587\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059
-tag.illegal_see_tag=\u30BF\u30B0{0}: \u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF{1}\u306B\u69CB\u6587\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059
-tag.missing_comma_space=\u30BF\u30B0{0}: \u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF{1}\u306B\u30AB\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u6587\u5B57\u304C\u3042\u308A\u307E\u305B\u3093
-tag.tag_has_no_arguments={0}\u30BF\u30B0\u306B\u5F15\u6570\u304C\u3042\u308A\u307E\u305B\u3093\u3002
-tag.see.missing_sharp=\u30BF\u30B0{0}: ''#''\u304C\u3042\u308A\u307E\u305B\u3093: "{1}"
-tag.see.can_not_find_member=\u30BF\u30B0{0}: {2}\u3067{1}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
-tag.see.no_close_bracket_on_url=\u30BF\u30B0{0}: \u9589\u3058\u30BF\u30B0''>''\u304C\u3042\u308A\u307E\u305B\u3093: "{1}"
-tag.see.no_close_quote=\u30BF\u30B0{0}: \u9589\u3058\u5F15\u7528\u7B26\u304C\u3042\u308A\u307E\u305B\u3093: "{1}"
-tag.see.class_not_specified=\u30BF\u30B0{0}: \u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093: "{1}"
-tag.see.illegal_character=\u30BF\u30B0{0}: "{2}"\u306B\u4E0D\u6B63\u306A\u6587\u5B57"{1}"\u304C\u3042\u308A\u307E\u3059
-tag.see.malformed_see_tag=\u30BF\u30B0{0}: \u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093: "{1}"
-tag.End_delimiter_missing_for_possible_SeeTag=\u30B3\u30E1\u30F3\u30C8\u6587\u5B57\u5217"{0}"\u3067\u3001\u6709\u52B9\u306Asee\u30BF\u30B0\u306B\u7D42\u7AEF\u30C7\u30EA\u30DF\u30BF}\u304C\u3042\u308A\u307E\u305B\u3093
-tag.Improper_Use_Of_Link_Tag=\u30A4\u30F3\u30E9\u30A4\u30F3\u30FB\u30BF\u30B0"{0}"\u306B\u7D42\u4E86\u6587\u5B57''}''\u304C\u3042\u308A\u307E\u305B\u3093
-tag.serialField.illegal_character=@serialField\u30BF\u30B0\u306B\u4E0D\u6B63\u306A\u6587\u5B57{0}\u304C\u3042\u308A\u307E\u3059: {1}\u3002
-javadoc.File_Read_Error=\u30D5\u30A1\u30A4\u30EB{0}\u306E\u8AAD\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
-javadoc.Body_missing_from_html_file=HTML\u306Bbody\u30BF\u30B0\u304C\u3042\u308A\u307E\u305B\u3093
-javadoc.End_body_missing_from_html_file=HTML\u30D5\u30A1\u30A4\u30EB\u306Bbody\u306E\u9589\u3058\u30BF\u30B0\u304C\u3042\u308A\u307E\u305B\u3093
-javadoc.Multiple_package_comments=\u30D1\u30C3\u30B1\u30FC\u30B8"{0}"\u306B\u8907\u6570\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u30FB\u30B3\u30E1\u30F3\u30C8\u306E\u30BD\u30FC\u30B9\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F
-javadoc.JavaScript_in_comment=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u306BJavaScript\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002\n--allow-script-in-comments\u3092\u4F7F\u7528\u3057\u3066\u3001JavaScript\u306E\u4F7F\u7528\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-javadoc.class_not_found=\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002
-javadoc.error=\u30A8\u30E9\u30FC
-javadoc.warning=\u8B66\u544A
-
-javadoc.error.msg={0}: \u30A8\u30E9\u30FC - {1}
-javadoc.warning.msg={0}: \u8B66\u544A - {1}
-javadoc.note.msg = {1}
-javadoc.note.pos.msg= {0}: {1}
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc_zh_CN.properties	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#
-# Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
-# 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.
-#
-
-main.errors={0} \u4E2A\u9519\u8BEF
-main.error={0} \u4E2A\u9519\u8BEF
-main.warnings={0} \u4E2A\u8B66\u544A
-main.warning={0} \u4E2A\u8B66\u544A
-
-main.usage=\u7528\u6CD5\uFF1Ajavadoc [\u9009\u9879] [\u7A0B\u5E8F\u5305\u540D\u79F0] [\u6E90\u6587\u4EF6] [@files]\n  -overview <\u6587\u4EF6>                 \u4ECE HTML \u6587\u4EF6\u8BFB\u53D6\u6982\u89C8\u6587\u6863\n  -public                          \u4EC5\u663E\u793A\u516C\u5171\u7C7B\u548C\u6210\u5458\n  -protected                       \u663E\u793A\u53D7\u4FDD\u62A4/\u516C\u5171\u7C7B\u548C\u6210\u5458\uFF08\u9ED8\u8BA4\u503C\uFF09\n  -package                         \u663E\u793A\u7A0B\u5E8F\u5305/\u53D7\u4FDD\u62A4/\u516C\u5171\u7C7B\u548C\u6210\u5458\n  -private                         \u663E\u793A\u6240\u6709\u7C7B\u548C\u6210\u5458\n  --help                           \u663E\u793A\u547D\u4EE4\u884C\u9009\u9879\u5E76\u9000\u51FA\n  -doclet <\u7C7B>                     \u901A\u8FC7\u66FF\u4EE3 doclet \u751F\u6210\u8F93\u51FA\n  -docletpath <\u8DEF\u5F84>               \u6307\u5B9A\u67E5\u627E doclet \u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n  --module-source-path <\u8DEF\u5F84>      \u6307\u5B9A\u67E5\u627E\u591A\u4E2A\u6A21\u5757\u7684\u8F93\u5165\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E\n  --upgrade-module-path <\u8DEF\u5F84>     \u8986\u76D6\u53EF\u5347\u7EA7\u6A21\u5757\u4F4D\u7F6E\n  --module-path <\u8DEF\u5F84>, -p <\u8DEF\u5F84>  \u6307\u5B9A\u67E5\u627E\u5E94\u7528\u7A0B\u5E8F\u6A21\u5757\u7684\u4F4D\u7F6E\n  --add-modules <\u6A21\u5757>(,<\u6A21\u5757>)*\n                                   \u9664\u4E86\u521D\u59CB\u6A21\u5757\u4E4B\u5916\u8981\u89E3\u6790\u7684\u6839\u6A21\u5757\uFF0C\n                                   \u5982\u679C <\u6A21\u5757>\u4E3A ALL-MODULE-PATH\uFF0C\u5219\u4E3A\u6A21\u5757\u8DEF\u5F84\u4E2D\u7684\u6240\u6709\u6A21\u5757\u3002\n  --limit-modules <\u6A21\u5757>(,<\u6A21\u5757>)*\n                                   \u9650\u5236\u53EF\u89C2\u5BDF\u6A21\u5757\u7684\u9886\u57DF\n  --source-path <\u8DEF\u5F84>             \u6307\u5B9A\u67E5\u627E\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E\n  -sourcepath <\u8DEF\u5F84>               \u6307\u5B9A\u67E5\u627E\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E\n  --class-path <\u8DEF\u5F84>              \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n  -classpath <\u8DEF\u5F84>                \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n  -cp <\u8DEF\u5F84>                       \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n  -exclude <\u7A0B\u5E8F\u5305\u5217\u8868>            \u6307\u5B9A\u8981\u6392\u9664\u7684\u7A0B\u5E8F\u5305\u5217\u8868\n  -subpackages <\u7A0B\u5E8F\u5305\u5217\u8868>        \u6307\u5B9A\u8981\u9012\u5F52\u52A0\u8F7D\u7684\u5B50\u7A0B\u5E8F\u5305\n  -breakiterator                   \u8BA1\u7B97\u5E26\u6709 BreakIterator \u7684\u7B2C\u4E00\u4E2A\u8BED\u53E5\n  -bootclasspath <\u8DEF\u5F84>            \u8986\u76D6\u7528\u4E8E\u975E\u6A21\u5757\u5316\u53D1\u884C\u7248\u7684\n                                   \u5E73\u53F0\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n  --system <jdk>                   \u8986\u76D6\u7528\u4E8E\u6A21\u5757\u5316\u53D1\u884C\u7248\u7684\n                                   \u7CFB\u7EDF\u6A21\u5757\u7684\u4F4D\u7F6E\u3002\n  -source <\u53D1\u884C\u7248>                 \u63D0\u4F9B\u4E0E\u6307\u5B9A\u53D1\u884C\u7248\u7684\u6E90\u517C\u5BB9\u6027\n  --release <\u53D1\u884C\u7248>               \u63D0\u4F9B\u4E0E\u6307\u5B9A\u53D1\u884C\u7248\u7684\u6E90\u517C\u5BB9\u6027\n  -extdirs <\u76EE\u5F55\u5217\u8868>              \u8986\u76D6\u6240\u5B89\u88C5\u6269\u5C55\u7684\u4F4D\u7F6E\n  -verbose                         \u8F93\u51FA\u6709\u5173 Javadoc \u6B63\u5728\u6267\u884C\u7684\u64CD\u4F5C\u7684\u6D88\u606F\n  -locale <\u540D\u79F0>                   \u8981\u4F7F\u7528\u7684\u533A\u57DF\u8BBE\u7F6E\uFF0C\u4F8B\u5982 en_US \u6216 en_US_WIN\n  -encoding <\u540D\u79F0>                 \u6E90\u6587\u4EF6\u7F16\u7801\u540D\u79F0\n  -quiet                           \u4E0D\u663E\u793A\u72B6\u6001\u6D88\u606F\n  -J<\u6807\u8BB0>                         \
-\u76F4\u63A5\u5C06 <\u6807\u8BB0> \u4F20\u9012\u5230\u8FD0\u884C\u65F6\u7CFB\u7EDF\n  -X                               \u8F93\u51FA\u975E\u6807\u51C6\u9009\u9879\u7684\u63D0\u8981\u5E76\u9000\u51FA\n
-
-main.usage.foot=\nGNU \u6837\u5F0F\u7684\u9009\u9879\u53EF\u4F7F\u7528 '=' (\u800C\u975E\u7A7A\u767D) \u6765\u5206\u9694\u9009\u9879\u540D\u79F0\n\u53CA\u5176\u503C\u3002\n
-
-main.Xusage=\  -Xmaxerrs <\u6570\u5B57>                 \u8BBE\u7F6E\u8981\u8F93\u51FA\u7684\u9519\u8BEF\u7684\u6700\u5927\u6570\u76EE\n  -Xmaxwarns <\u6570\u5B57>                \u8BBE\u7F6E\u8981\u8F93\u51FA\u7684\u8B66\u544A\u7684\u6700\u5927\u6570\u76EE\n  --add-exports <\u6A21\u5757>/<\u7A0B\u5E8F\u5305>=<\u5176\u4ED6\u6A21\u5757>(,<\u5176\u4ED6\u6A21\u5757>)*\n                                   \u6307\u5B9A\u5C06\u7A0B\u5E8F\u5305\u89C6\u4E3A\u4ECE\u5176\u5B9A\u4E49\u6A21\u5757\u5BFC\u51FA\u5230\u5176\u4ED6\u6A21\u5757, \n                                   \u5982\u679C <\u5176\u4ED6\u6A21\u5757> \u4E3A ALL-UNNAMED, \u5219\u89C6\u4E3A \n                                   \u5BFC\u51FA\u5230\u6240\u6709\u672A\u547D\u540D\u6A21\u5757\u3002\n  --add-reads <\u6A21\u5757>=<\u5176\u4ED6\u6A21\u5757>(,<\u5176\u4ED6\u6A21\u5757>)*\n                                   \u6307\u5B9A\u88AB\u89C6\u4E3A\u7ED9\u5B9A\u6A21\u5757\u9700\u8981\u7684\u5176\u4ED6\u6A21\u5757\u3002\n                                   <\u5176\u4ED6\u6A21\u5757> \u53EF\u4EE5\u4E3A ALL-UNNAMED \u4EE5\u4FBF\u8981\u6C42\n                                   \u672A\u547D\u540D\u6A21\u5757\u3002\n  --patch-module <\u6A21\u5757>=<\u6587\u4EF6>(:<\u6587\u4EF6>)*\n                                   \u4F7F\u7528 JAR \u6587\u4EF6\u6216\u76EE\u5F55\u4E2D\u7684\u7C7B\u548C\u8D44\u6E90\n                                   \u8986\u76D6\u6216\u589E\u5F3A\u6A21\u5757\n
-
-main.Xusage.foot=\u8FD9\u4E9B\u9009\u9879\u90FD\u662F\u975E\u6807\u51C6\u9009\u9879, \u5982\u6709\u66F4\u6539, \u6055\u4E0D\u53E6\u884C\u901A\u77E5\u3002
-
-main.option.already.seen={0}\u9009\u9879\u53EA\u80FD\u6307\u5B9A\u4E00\u6B21\u3002
-main.requires_argument=\u9009\u9879{0}\u9700\u8981\u53C2\u6570\u3002
-main.locale_first=\u5728\u547D\u4EE4\u884C\u4E2D, \u9009\u9879 -locale \u5FC5\u987B\u4E3A\u7B2C\u4E00\u4E2A\u9009\u9879\u3002
-main.invalid_flag=\u65E0\u6548\u7684\u6807\u8BB0: {0}
-main.No_packages_or_classes_specified=\u672A\u6307\u5B9A\u7A0B\u5E8F\u5305\u6216\u7C7B\u3002
-main.incompatible.access.flags=\u6307\u5B9A\u4E86\u591A\u4E2A -public, -private, -package \u6216 -protected\u3002
-main.cant.read=\u65E0\u6CD5\u8BFB\u53D6{0}
-main.Loading_source_files_for_package=\u6B63\u5728\u52A0\u8F7D\u7A0B\u5E8F\u5305{0}\u7684\u6E90\u6587\u4EF6...
-main.Loading_source_file=\u6B63\u5728\u52A0\u8F7D\u6E90\u6587\u4EF6{0}...
-main.Building_tree=\u6B63\u5728\u6784\u9020 Javadoc \u4FE1\u606F...
-main.no_source_files_for_package=\u6CA1\u6709\u7A0B\u5E8F\u5305{0}\u7684\u6E90\u6587\u4EF6
-main.fatal.error=\u81F4\u547D\u9519\u8BEF
-main.fatal.exception=\u81F4\u547D\u5F02\u5E38\u9519\u8BEF
-main.out.of.memory=java.lang.OutOfMemoryError: \u8BF7\u589E\u5927\u5185\u5B58\u3002\n\u4F8B\u5982, \u5BF9\u4E8E JDK \u7ECF\u5178\u6216 HotSpot VM, \u8BF7\u589E\u5927\u9009\u9879 -J-Xmx,\n\u4F8B\u5982 -J-Xmx32m\u3002
-main.done_in=[\u5728 {0} \u6BEB\u79D2\u5185\u5B8C\u6210]
-main.doclet_method_must_be_static=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u4E3A\u9759\u6001\u3002
-main.must_return_int=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u8FD4\u56DE\u6574\u578B\u503C\u3002
-main.must_return_boolean=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u8FD4\u56DE\u5E03\u5C14\u503C\u3002
-main.must_return_languageversion=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u8FD4\u56DE\u8BED\u8A00\u7248\u672C\u3002
-main.more_than_one_doclet_specified_0_and_1=\u6307\u5B9A\u4E86\u591A\u4E2A doclet ({0}\u548C{1})\u3002
-main.doclet_class_not_found=\u627E\u4E0D\u5230 doclet \u7C7B{0}
-main.doclet_method_not_found=doclet \u7C7B{0}\u4E0D\u5305\u542B{1}\u65B9\u6CD5
-main.doclet_method_not_accessible=\u5728 doclet \u7C7B{0}\u4E2D, \u65E0\u6CD5\u8BBF\u95EE\u65B9\u6CD5{1}
-main.internal_error_exception_thrown=\u5185\u90E8\u9519\u8BEF: \u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5DF2\u629B\u51FA\u5F02\u5E38\u9519\u8BEF{2}
-main.exception_thrown=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5DF2\u629B\u51FA\u5F02\u5E38\u9519\u8BEF{2}
-main.illegal_locale_name=\u8BED\u8A00\u73AF\u5883\u4E0D\u53EF\u7528: {0}
-main.malformed_locale_name=\u683C\u5F0F\u9519\u8BEF\u7684\u8BED\u8A00\u73AF\u5883\u540D\u79F0: {0}
-main.file_not_found=\u627E\u4E0D\u5230\u6587\u4EF6: "{0}"
-main.file_ignored=\u5DF2\u5FFD\u7565\u6587\u4EF6: "{0}" (\u5C1A\u4E0D\u652F\u6301)
-main.illegal_class_name=\u975E\u6CD5\u7C7B\u540D: "{0}"
-main.illegal_package_name=\u975E\u6CD5\u7684\u7A0B\u5E8F\u5305\u540D\u79F0: "{0}"
-main.release.bootclasspath.conflict=\u9009\u9879{0}\u65E0\u6CD5\u4E0E -release \u4E00\u8D77\u4F7F\u7528
-main.unsupported.release.version=\u4E0D\u652F\u6301\u53D1\u884C\u7248\u672C {0}
-main.option.invalid.value={0}
-tag.illegal_char_in_arr_dim=\u6807\u8BB0{0}: \u6570\u7EC4\u7EF4\u4E2D\u6709\u8BED\u6CD5\u9519\u8BEF, \u65B9\u6CD5\u53C2\u6570: {1}
-tag.illegal_see_tag=\u6807\u8BB0{0}: \u65B9\u6CD5\u53C2\u6570\u4E2D\u6709\u8BED\u6CD5\u9519\u8BEF: {1}
-tag.missing_comma_space=\u6807\u8BB0{0}: \u65B9\u6CD5\u53C2\u6570\u4E2D\u7F3A\u5C11\u9017\u53F7\u6216\u7A7A\u683C: {1}
-tag.tag_has_no_arguments={0} \u6807\u8BB0\u6CA1\u6709\u53C2\u6570\u3002
-tag.see.missing_sharp=\u6807\u8BB0{0}: \u7F3A\u5C11 ''#'': "{1}"
-tag.see.can_not_find_member=\u6807\u8BB0{0}: \u5728{2}\u4E2D\u627E\u4E0D\u5230{1}
-tag.see.no_close_bracket_on_url=\u6807\u8BB0{0}: \u7F3A\u5C11\u6700\u540E\u7684 ''>'': "{1}"
-tag.see.no_close_quote=\u6807\u8BB0{0}: \u65E0\u53F3\u5F15\u53F7: "{1}"
-tag.see.class_not_specified=\u6807\u8BB0{0}: \u672A\u6307\u5B9A\u7C7B: "{1}"
-tag.see.illegal_character=\u6807\u8BB0{0}: "{2}" \u4E2D\u7684 "{1}" \u4E3A\u975E\u6CD5\u5B57\u7B26
-tag.see.malformed_see_tag=\u6807\u8BB0{0}: \u683C\u5F0F\u9519\u8BEF: "{1}"
-tag.End_delimiter_missing_for_possible_SeeTag=\u6CE8\u91CA\u5B57\u7B26\u4E32\u4E2D\u53EF\u80FD\u51FA\u73B0\u7684 See \u6807\u8BB0\u7F3A\u5C11\u7ED3\u675F\u5206\u9694\u7B26 }: "{0}"
-tag.Improper_Use_Of_Link_Tag=\u5185\u5D4C\u6807\u8BB0\u7F3A\u5C11\u7ED3\u675F ''}'' \u5B57\u7B26: "{0}"
-tag.serialField.illegal_character=@serialField \u6807\u8BB0\u4E2D\u7684\u975E\u6CD5\u5B57\u7B26 {0}: {1}\u3002
-javadoc.File_Read_Error=\u8BFB\u53D6\u6587\u4EF6{0}\u65F6\u51FA\u9519
-javadoc.Body_missing_from_html_file=HTML \u6587\u4EF6\u4E2D\u7F3A\u5C11\u4E3B\u4F53\u6807\u8BB0
-javadoc.End_body_missing_from_html_file=HTML \u6587\u4EF6\u4E2D\u7F3A\u5C11\u4E3B\u4F53\u7ED3\u675F\u6807\u8BB0
-javadoc.Multiple_package_comments=\u627E\u5230\u7A0B\u5E8F\u5305 "{0}" \u7684\u591A\u4E2A\u7A0B\u5E8F\u5305\u6CE8\u91CA\u6E90
-javadoc.JavaScript_in_comment=\u6587\u6863\u6CE8\u91CA\u4E2D\u53D1\u73B0 JavaScript\u3002\n\u4F7F\u7528 --allow-script-in-comments \u53EF\u5141\u8BB8\u4F7F\u7528 JavaScript\u3002
-javadoc.class_not_found=\u627E\u4E0D\u5230\u7C7B{0}\u3002
-javadoc.error=\u9519\u8BEF
-javadoc.warning=\u8B66\u544A
-
-javadoc.error.msg={0}: \u9519\u8BEF - {1}
-javadoc.warning.msg={0}: \u8B66\u544A - {1}
-javadoc.note.msg = {1}
-javadoc.note.pos.msg= {0}: {1}
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractModuleIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractModuleIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, 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
@@ -33,7 +33,6 @@
 import javax.lang.model.element.ModuleElement;
 import javax.lang.model.element.PackageElement;
 
-import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
@@ -124,11 +123,13 @@
      * methods from the sub-class in order to generate Frame or Non
      * Frame format.
      *
-     * @param title the title of the window.
+     * @param title the title of the window
+     * @param description the content for the description META tag
      * @param includeScript boolean set true if windowtitle script is to be included
      * @throws DocFileIOException if there is a problem building the module index file
      */
-    protected void buildModuleIndexFile(String title, boolean includeScript) throws DocFileIOException {
+    protected void buildModuleIndexFile(String title, String description, boolean includeScript)
+            throws DocFileIOException {
         String windowOverview = resources.getText(title);
         Content body = getBody(includeScript, getWindowTitle(windowOverview));
         Content header = HtmlTree.HEADER();
@@ -142,8 +143,10 @@
         body.addContent(header);
         body.addContent(main);
         body.addContent(footer);
-        printHtmlDocument(configuration.metakeywords.getOverviewMetaKeywords(title,
-                configuration.doctitle), includeScript, body);
+        printHtmlDocument(
+                configuration.metakeywords.getOverviewMetaKeywords(title, configuration.doctitle),
+                description,
+                body);
     }
 
     /**
@@ -152,11 +155,12 @@
      * Frame format.
      *
      * @param title the title of the window.
+     * @param description the content for the description META tag
      * @param includeScript boolean set true if windowtitle script is to be included
      * @param mdle the name of the module being documented
      * @throws DocFileIOException if there is an exception building the module packages index file
      */
-    protected void buildModulePackagesIndexFile(String title,
+    protected void buildModulePackagesIndexFile(String title, String description,
             boolean includeScript, ModuleElement mdle) throws DocFileIOException {
         String windowOverview = resources.getText(title);
         Content body = getBody(includeScript, getWindowTitle(windowOverview));
@@ -171,8 +175,10 @@
         body.addContent(header);
         body.addContent(main);
         body.addContent(footer);
-        printHtmlDocument(configuration.metakeywords.getOverviewMetaKeywords(title,
-                configuration.doctitle), includeScript, body);
+        printHtmlDocument(
+                configuration.metakeywords.getOverviewMetaKeywords(title, configuration.doctitle),
+                description,
+                body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractPackageIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractPackageIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -29,7 +29,6 @@
 
 import javax.lang.model.element.PackageElement;
 
-import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
@@ -109,11 +108,13 @@
      * methods from the sub-class in order to generate Frame or Non
      * Frame format.
      *
-     * @param title the title of the window.
+     * @param title the title of the window
+     * @param description the content for the description META tag
      * @param includeScript boolean set true if windowtitle script is to be included
      * @throws DocFileIOException if there is a problem building the package index file
      */
-    protected void buildPackageIndexFile(String title, boolean includeScript) throws DocFileIOException {
+    protected void buildPackageIndexFile(String title, String description, boolean includeScript)
+            throws DocFileIOException {
         String windowOverview = resources.getText(title);
         Content body = getBody(includeScript, getWindowTitle(windowOverview));
         Content header = HtmlTree.HEADER();
@@ -127,8 +128,9 @@
         body.addContent(header);
         body.addContent(main);
         body.addContent(footer);
-        printHtmlDocument(configuration.metakeywords.getOverviewMetaKeywords(title,
-                configuration.doctitle), includeScript, body);
+        printHtmlDocument(
+                configuration.metakeywords.getOverviewMetaKeywords(title, configuration.doctitle),
+                description, body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AllClassesFrameWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AllClassesFrameWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -29,7 +29,6 @@
 import javax.lang.model.element.Element;
 import javax.lang.model.element.TypeElement;
 
-import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
@@ -122,7 +121,7 @@
         HtmlTree div = HtmlTree.DIV(HtmlStyle.indexContainer, ul);
         htmlTree.addContent(div);
         body.addContent(htmlTree);
-        printHtmlDocument(null, false, body);
+        printHtmlDocument(null, "all classes (frame)", body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AllClassesIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AllClassesIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -117,7 +117,7 @@
         footer.addContent(navBar.getContent(false));
         addBottom(footer);
         bodyTree.addContent(footer);
-        printHtmlDocument(null, true, bodyTree);
+        printHtmlDocument(null, "class index", bodyTree);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AllPackagesIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AllPackagesIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -105,7 +105,7 @@
         footer.addContent(navBar.getContent(false));
         addBottom(footer);
         bodyTree.addContent(footer);
-        printHtmlDocument(null, true, bodyTree);
+        printHtmlDocument(null, "package index", bodyTree);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -152,8 +152,11 @@
      */
     @Override
     public void printDocument(Content contentTree) throws DocFileIOException {
+        String description = getDescription("declaration", annotationType);
+        PackageElement pkg = utils.containingPackage(this.annotationType);
+        Content stylesheetContent = getLocalStylesheetContent(pkg);
         printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType),
-                true, contentTree);
+                description, stylesheetContent, contentTree);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -27,7 +27,6 @@
 
 import jdk.javadoc.internal.doclets.formats.html.markup.Table;
 
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -241,7 +240,8 @@
         footer.addContent(navBar.getContent(false));
         addBottom(footer);
         body.addContent(footer);
-        printHtmlDocument(null, true, body);
+        String description = getDescription("use", typeElement);
+        printHtmlDocument(null, description, body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -177,8 +177,11 @@
      */
     @Override
     public void printDocument(Content contentTree) throws DocFileIOException {
+        String description = getDescription("declaration", typeElement);
+        PackageElement pkg = utils.containingPackage(typeElement);
+        Content stylesheetContent = getLocalStylesheetContent(pkg);
         printHtmlDocument(configuration.metakeywords.getMetaKeywords(typeElement),
-                true, contentTree);
+                description, stylesheetContent, contentTree);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstantsSummaryWriterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstantsSummaryWriterImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -328,6 +328,6 @@
      */
     @Override
     public void printDocument(Content contentTree) throws DocFileIOException {
-        printHtmlDocument(null, true, contentTree);
+        printHtmlDocument(null, "summary of constants", contentTree);
     }
 }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DeprecatedListWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DeprecatedListWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -308,7 +308,8 @@
         htmlTree.addContent(navBar.getContent(false));
         addBottom(htmlTree);
         body.addContent(htmlTree);
-        printHtmlDocument(null, true, body);
+        String description = "deprecated elements";
+        printHtmlDocument(null, description, body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,7 +31,6 @@
 import com.sun.source.doctree.TextTree;
 import com.sun.source.util.DocTreeFactory;
 import com.sun.tools.doclint.HtmlTag;
-import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
 import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
 import jdk.javadoc.internal.doclets.toolkit.Content;
@@ -125,6 +124,16 @@
         }
     }
 
+    public List<DocPath> getStylesheets() throws DocFileIOException {
+        List<DocPath> stylesheets = new ArrayList<DocPath>();
+        for (DocFile srcdir : DocFile.list(configuration, location, source)) {
+            for (DocFile srcFile : srcdir.list()) {
+                if (srcFile.getName().endsWith(".css"))
+                    stylesheets.add(DocPaths.DOC_FILES.resolve(srcFile.getName()));
+            }
+        }
+        return stylesheets;
+    }
 
     private void copyDirectory(DocFile srcdir, final DocPath dstDocPath,
                                boolean first) throws DocFileIOException {
@@ -197,7 +206,7 @@
         footer.addContent(navBar.getContent(false));
         docletWriter.addBottom(footer);
         htmlContent.addContent(footer);
-        docletWriter.printHtmlDocument(Collections.emptyList(), false, localTagsContent, htmlContent);
+        docletWriter.printHtmlDocument(Collections.emptyList(), null, localTagsContent, htmlContent);
     }
 
 
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FrameOutputWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FrameOutputWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,6 +128,8 @@
         Head head = new Head(path, configuration.docletVersion)
                 .setTimestamp(!configuration.notimestamp)
                 .setTitle(title)
+                .setDescription("frames")
+                .setGenerator(getGenerator(getClass()))
                 .setCharset(configuration.charset)
                 .setStylesheets(configuration.getMainStylesheet(), configuration.getAdditionalStylesheets())
                 .addDefaultScript(false)
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HelpWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HelpWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -100,7 +100,7 @@
         htmlTree.addContent(navBar.getContent(false));
         addBottom(htmlTree);
         body.addContent(htmlTree);
-        printHtmlDocument(null, true, body);
+        printHtmlDocument(null, "help", body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java	Fri Feb 22 20:36:42 2019 +0000
@@ -240,6 +240,8 @@
 
     public DocPaths docPaths;
 
+    public Map<Element, List<DocPath>> localStylesheetMap = new HashMap<>();
+
     /**
      * Creates an object to hold the configuration for a doclet.
      *
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -41,6 +41,7 @@
 import javax.lang.model.element.ModuleElement;
 import javax.lang.model.element.Name;
 import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.QualifiedNameable;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.DeclaredType;
@@ -421,14 +422,15 @@
      * @param metakeywords Array of String keywords for META tag. Each element
      *                     of the array is assigned to a separate META tag.
      *                     Pass in null for no array
-     * @param includeScript true if printing windowtitle script
-     *                      false for files that appear in the left-hand frames
+     * @param description the content for the description META tag.
      * @param body the body htmltree to be included in the document
      * @throws DocFileIOException if there is a problem writing the file
      */
-    public void printHtmlDocument(List<String> metakeywords, boolean includeScript,
-                                  Content body) throws DocFileIOException {
-        printHtmlDocument(metakeywords, includeScript, new ContentBuilder(), body);
+    public void printHtmlDocument(List<String> metakeywords,
+                                  String description,
+                                  Content body)
+            throws DocFileIOException {
+        printHtmlDocument(metakeywords, description, new ContentBuilder(), body);
     }
 
     /**
@@ -437,24 +439,28 @@
      * @param metakeywords Array of String keywords for META tag. Each element
      *                     of the array is assigned to a separate META tag.
      *                     Pass in null for no array
-     * @param includeScript true if printing windowtitle script
-     *                      false for files that appear in the left-hand frames
-     * @param extraContent any additional content to be included in the HEAD element
+     * @param description the content for the description META tag.
+     * @param extraHeadContent any additional content to be included in the HEAD element
      * @param body the body htmltree to be included in the document
      * @throws DocFileIOException if there is a problem writing the file
      */
-    public void printHtmlDocument(List<String> metakeywords, boolean includeScript, Content extraContent,
-                                  Content body) throws DocFileIOException {
+    public void printHtmlDocument(List<String> metakeywords,
+                                  String description,
+                                  Content extraHeadContent,
+                                  Content body)
+            throws DocFileIOException {
         Content htmlComment = contents.newPage;
         Head head = new Head(path, configuration.docletVersion)
                 .setTimestamp(!configuration.notimestamp)
+                .setDescription(description)
+                .setGenerator(getGenerator(getClass()))
                 .setTitle(winTitle)
                 .setCharset(configuration.charset)
                 .addKeywords(metakeywords)
                 .setStylesheets(configuration.getMainStylesheet(), configuration.getAdditionalStylesheets())
                 .setUseModuleDirectories(configuration.useModuleDirectories)
                 .setIndex(configuration.createindex, mainBodyScript)
-                .addContent(extraContent);
+                .addContent(extraHeadContent);
 
         Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(), head.toContent(), body);
         HtmlDocument htmlDocument = new HtmlDocument(htmlComment, htmlTree);
@@ -1646,7 +1652,7 @@
      * If this link appeared in the index, we would redirect
      * the link like this:
      *
-     * {@literal <a href="./com/sun/javadoc/package-summary.html">The package Page</a>}
+     * {@literal <a href="./jdk/javadoc/doclet/package-summary.html">The package Page</a>}
      *
      * @param element the Element object whose documentation is being written.
      * @param tt the text being written.
@@ -2111,6 +2117,55 @@
     }
 
     /**
+     * Generates a string for use in a description meta element,
+     * based on an element and its enclosing elements
+     * @param prefix a prefix for the string
+     * @param elem the element
+     * @return the description
+     */
+    static String getDescription(String prefix, Element elem) {
+        LinkedList<Element> chain = new LinkedList<>();
+        for (Element e = elem; e != null; e = e.getEnclosingElement()) {
+            // ignore unnamed enclosing elements
+            if (e.getSimpleName().length() == 0 && e != elem) {
+                break;
+            }
+            chain.addFirst(e);
+        }
+        StringBuilder sb = new StringBuilder();
+        for (Element e: chain) {
+            CharSequence name;
+            switch (e.getKind()) {
+                case MODULE:
+                case PACKAGE:
+                    name = ((QualifiedNameable) e).getQualifiedName();
+                    if (name.length() == 0) {
+                        name = "<unnamed>";
+                    }
+                    break;
+
+                default:
+                    name = e.getSimpleName();
+                    break;
+            }
+
+            if (sb.length() == 0) {
+                sb.append(prefix).append(": ");
+            } else {
+                sb.append(", ");
+            }
+            sb.append(e.getKind().toString().toLowerCase(Locale.US).replace("_", " "))
+                    .append(": ")
+                    .append(name);
+        }
+        return sb.toString();
+    }
+
+    static String getGenerator(Class<?> clazz) {
+        return "javadoc/" + clazz.getSimpleName();
+    }
+
+    /**
      * Returns an HtmlTree for the SCRIPT tag.
      *
      * @return an HtmlTree for the SCRIPT tag
@@ -2158,4 +2213,21 @@
     Script getMainBodyScript() {
         return mainBodyScript;
     }
+
+    Content getLocalStylesheetContent(Element element) throws DocFileIOException {
+        Content stylesheetContent = new ContentBuilder();
+        List<DocPath> localStylesheets = configuration.localStylesheetMap.get(element);
+        if (localStylesheets == null) {
+            DocFilesHandlerImpl docFilesHandler = (DocFilesHandlerImpl)configuration
+                    .getWriterFactory().getDocFilesHandler(element);
+            localStylesheets = docFilesHandler.getStylesheets();
+            configuration.localStylesheetMap.put(element, localStylesheets);
+        }
+        for (DocPath stylesheet : localStylesheets) {
+            stylesheetContent.addContent(HtmlTree.LINK("stylesheet",
+                    "text/css", stylesheet.getPath(), "Style"));
+        }
+        return stylesheetContent;
+    }
+
 }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/IndexRedirectWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/IndexRedirectWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -79,6 +79,8 @@
         Content htmlComment = contents.newPage;
         Head head = new Head(path, configuration.docletVersion)
                 .setTimestamp(true)
+                .setDescription("index redirect")
+                .setGenerator(getGenerator(getClass()))
                 .setStylesheets(configuration.getMainStylesheet(), Collections.emptyList()) // avoid reference to default stylesheet
                 .addDefaultScript(false);
 
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -36,7 +36,6 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.Content;
 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
@@ -111,7 +110,9 @@
         htmlTree.addContent(div);
         body.addContent(htmlTree);
         mdlgen.printHtmlDocument(
-                configuration.metakeywords.getMetaKeywordsForModule(moduleElement), false, body);
+                configuration.metakeywords.getMetaKeywordsForModule(moduleElement),
+                "module summary (frame)",
+                body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, 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
@@ -77,7 +77,7 @@
     public static void generate(HtmlConfiguration configuration) throws DocFileIOException {
         DocPath filename = DocPaths.MODULE_OVERVIEW_FRAME;
         ModuleIndexFrameWriter modulegen = new ModuleIndexFrameWriter(configuration, filename);
-        modulegen.buildModuleIndexFile("doclet.Window_Overview", false);
+        modulegen.buildModuleIndexFile("doclet.Window_Overview", "module overview (frame)", false);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -74,7 +74,7 @@
     public static void generate(HtmlConfiguration configuration) throws DocFileIOException {
         DocPath filename = DocPaths.overviewSummary(configuration.frames);
         ModuleIndexWriter mdlgen = new ModuleIndexWriter(configuration, filename);
-        mdlgen.buildModuleIndexFile("doclet.Window_Overview_Summary", true);
+        mdlgen.buildModuleIndexFile("doclet.Window_Overview_Summary", "module index", true);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, 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
@@ -77,7 +77,10 @@
     public static void generate(HtmlConfiguration configuration, ModuleElement mdle) throws DocFileIOException {
         DocPath filename = configuration.docPaths.moduleFrame(mdle);
         ModulePackageIndexFrameWriter modpackgen = new ModulePackageIndexFrameWriter(configuration, filename);
-        modpackgen.buildModulePackagesIndexFile("doclet.Window_Overview", false, mdle);
+        modpackgen.buildModulePackagesIndexFile("doclet.Window_Overview",
+                getDescription("module package index", mdle) + " (frame)",
+                false,
+                mdle);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -915,7 +915,8 @@
     @Override
     public void printDocument(Content contentTree) throws DocFileIOException {
         printHtmlDocument(configuration.metakeywords.getMetaKeywordsForModule(mdle),
-                true, contentTree);
+                getDescription("declaration", mdle),
+                contentTree);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -89,7 +89,7 @@
 
     /**
      * Generate a package summary page for the left-hand bottom frame. Construct
-     * the PackageFrameWriter object and then uses it generate the file.
+     * the PackageFrameWriter object and then use it generate the file.
      *
      * @param configuration the current configuration of the doclet.
      * @param packageElement The package for which "pacakge-frame.html" is to be generated.
@@ -111,7 +111,9 @@
         htmlTree.addContent(div);
         body.addContent(htmlTree);
         packgen.printHtmlDocument(
-                configuration.metakeywords.getMetaKeywords(packageElement), false, body);
+                configuration.metakeywords.getMetaKeywords(packageElement),
+                getDescription("package summary (frame)", packageElement),
+                body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexFrameWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexFrameWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -31,7 +31,6 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.Content;
@@ -70,7 +69,9 @@
     public static void generate(HtmlConfiguration configuration) throws DocFileIOException {
         DocPath filename = DocPaths.OVERVIEW_FRAME;
         PackageIndexFrameWriter packgen = new PackageIndexFrameWriter(configuration, filename);
-        packgen.buildPackageIndexFile("doclet.Window_Overview", false);
+        packgen.buildPackageIndexFile("doclet.Window_Overview",
+                "package index (frame)",
+                false);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -78,7 +78,7 @@
     public static void generate(HtmlConfiguration configuration) throws DocFileIOException {
         DocPath filename = DocPaths.overviewSummary(configuration.frames);
         PackageIndexWriter packgen = new PackageIndexWriter(configuration, filename);
-        packgen.buildPackageIndexFile("doclet.Window_Overview_Summary", true);
+        packgen.buildPackageIndexFile("doclet.Window_Overview_Summary", "package index", true);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -121,7 +121,7 @@
         footer.addContent(navBar.getContent(false));
         addBottom(footer);
         body.addContent(footer);
-        printHtmlDocument(null, true, body);
+        printHtmlDocument(null, getDescription("tree", packageElement), body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -141,7 +141,9 @@
         footer.addContent(navBar.getContent(false));
         addBottom(footer);
         body.addContent(footer);
-        printHtmlDocument(null, true, body);
+        printHtmlDocument(null,
+                getDescription("use", packageElement),
+                body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -316,7 +316,9 @@
      */
     @Override
     public void printDocument(Content contentTree) throws DocFileIOException {
+        String description = getDescription("declaration", packageElement);
+        Content stylesheetContent = getLocalStylesheetContent(packageElement);
         printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageElement),
-                true, contentTree);
+                description, stylesheetContent, contentTree);
     }
 }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -255,7 +255,7 @@
      */
     @Override
     public void printDocument(Content serializedTree) throws DocFileIOException {
-        printHtmlDocument(null, true, serializedTree);
+        printHtmlDocument(null, "serialized forms", serializedTree);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -121,7 +121,7 @@
         addBottom(htmlTree);
         body.addContent(htmlTree);
         createSearchIndexFiles();
-        printHtmlDocument(null, true, body);
+        printHtmlDocument(null, "index", body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -196,7 +196,7 @@
             addBlankLines(pre);
             Content div = HtmlTree.DIV(HtmlStyle.sourceContainer, pre);
             body.addContent(HtmlTree.MAIN(div));
-            writeToFile(body, outputdir.resolve(configuration.docPaths.forClass(te)));
+            writeToFile(body, outputdir.resolve(configuration.docPaths.forClass(te)), te);
         } catch (IOException e) {
             String message = resources.getText("doclet.exception.read.file", fo.getName());
             throw new SimpleDocletException(message, e);
@@ -209,11 +209,13 @@
      * @param body the documentation content to be written to the file.
      * @param path the path for the file.
      */
-    private void writeToFile(Content body, DocPath path) throws DocFileIOException {
+    private void writeToFile(Content body, DocPath path, TypeElement te) throws DocFileIOException {
         Head head = new Head(path, configuration.docletVersion)
 //                .setTimestamp(!configuration.notimestamp) // temporary: compatibility!
                 .setTitle(resources.getText("doclet.Window_Source_title"))
 //                .setCharset(configuration.charset) // temporary: compatibility!
+                .setDescription(HtmlDocletWriter.getDescription("source", te))
+                .setGenerator(HtmlDocletWriter.getGenerator(getClass()))
                 .addDefaultScript(false)
                 .setStylesheets(configuration.getMainStylesheet(), configuration.getAdditionalStylesheets());
         Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -144,7 +144,8 @@
         footer.addContent(navBar.getContent(false));
         addBottom(footer);
         body.addContent(footer);
-        printHtmlDocument(null, true, body);
+        String description = "index: " + unicode;
+        printHtmlDocument(null, description, body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -127,7 +127,7 @@
         htmlTree.addContent(navBar.getContent(false));
         addBottom(htmlTree);
         body.addContent(htmlTree);
-        printHtmlDocument(null, true, body);
+        printHtmlDocument(null, "class tree", body);
     }
 
     /**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,8 @@
     private String title;
     private String charset;
     private final List<String> keywords;
+    private String description;
+    private String generator;
     private boolean showTimestamp;
     private boolean useModuleDirectories;
     private DocFile mainStylesheetFile;
@@ -111,6 +113,22 @@
     }
 
     /**
+     * Sets the content for the description META element.
+     */
+    public Head setDescription(String description) {
+        this.description = description;
+        return this;
+    }
+
+    /**
+     * Sets the content for the generator META element.
+     */
+    public Head setGenerator(String generator) {
+        this.generator = generator;
+        return this;
+    }
+
+    /**
      * Adds a list of keywords to appear in META [@code keywords} elements.
      *
      * @param keywords the list of keywords, or null if none need to be added
@@ -245,6 +263,14 @@
             tree.addContent(HtmlTree.META("dc.created", dateFormat.format(now)));
         }
 
+        if (description != null) {
+            tree.addContent(HtmlTree.META("description", description));
+        }
+
+        if (generator != null) {
+            tree.addContent(HtmlTree.META("generator", generator));
+        }
+
         for (String k : keywords) {
             tree.addContent(HtmlTree.META("keywords", k));
         }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/DocFilesHandler.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/DocFilesHandler.java	Fri Feb 22 20:36:42 2019 +0000
@@ -26,6 +26,9 @@
 
 package jdk.javadoc.internal.doclets.toolkit;
 
+import java.util.List;
+
+import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
 /**
  * The interface for copying doc-files to the output.
  *
@@ -37,4 +40,5 @@
 
 public interface DocFilesHandler {
     void copyDocFiles() throws DocletException;
+    List<DocPath> getStylesheets() throws DocletException;
 }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/package-info.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/package-info.java	Fri Feb 22 20:36:42 2019 +0000
@@ -35,16 +35,6 @@
  *  while doclets provide a user-selectable backend for determining
  *  how to process the documentation comments.
  *
- *  <p><em>Historical Note:</em> Prior to the introduction of the
- *  {@link javax.lang.model Language Model API} in JDK 6, it was
- *  not unusual to use the {@link com.sun.javadoc} API as a
- *  modeling API. But the Language Model API, and associated
- *  {@link javax.annotation.processing Annotation Processing API}
- *  provided a better way to model programs, and in JDK 9,
- *  javadoc itself was converted to using the Language Model API,
- *  with the {@code com.sun.javadoc API} being deprecated for
- *  eventual removal.
- *  </p>
  *
  *  <p><b>This is NOT part of any supported API.
  *  If you write code that depends on this, you do so at your own risk.
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,8 +25,9 @@
 
 package jdk.javadoc.internal.tool;
 
-
-import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -165,7 +166,7 @@
             // Normally, the args should be a series of package names or file names.
             // Parse the files and collect the package names.
             for (String arg: javaNames) {
-                if (fm != null && arg.endsWith(".java") && new File(arg).exists()) {
+                if (fm != null && arg.endsWith(".java") && isRegularFile(arg)) {
                     parse(fm.getJavaFileObjects(arg), classTrees, true);
                 } else if (isValidPackageName(arg)) {
                     packageNames.add(arg);
@@ -247,6 +248,14 @@
         return toolEnv.docEnv;
     }
 
+    private boolean isRegularFile(String s) {
+        try {
+            return Files.isRegularFile(Paths.get(s));
+        } catch (InvalidPathException e) {
+            return false;
+        }
+    }
+
     /** Is the given string a valid package name? */
     boolean isValidPackageName(String s) {
         if (s.contains("/")) {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java	Fri Feb 22 20:36:42 2019 +0000
@@ -408,23 +408,8 @@
                 return ERROR;
             }
         } else {
-            if (apiMode) {
-                com.sun.tools.javadoc.main.Start ostart
-                        = new com.sun.tools.javadoc.main.Start(context);
-                return ostart.begin(docletClass, options, fileObjects)
-                        ? OK
-                        : ERROR;
-            }
-            warn("main.legacy_api");
-            String[] array = options.toArray(new String[options.size()]);
-            int rc = com.sun.tools.javadoc.Main.execute(
-                    messager.programName,
-                    messager.getWriter(WriterKind.ERROR),
-                    messager.getWriter(WriterKind.WARNING),
-                    messager.getWriter(WriterKind.NOTICE),
-                    docletClass.getName(),
-                    array);
-            return (rc == 0) ? OK : ERROR;
+            error("main.not_a_doclet", docletClass.getName());
+            return ERROR;
         }
 
         Result result = OK;
@@ -771,6 +756,13 @@
                 }
                 String text = messager.getText("main.doclet_class_not_found", userDocletName);
                 throw new ToolException(CMDERR, text, cnfe);
+            } catch (NoClassDefFoundError ncfe) {
+                if (ncfe.getMessage().contains("com/sun/javadoc/Doclet")) {
+                    String text = messager.getText("main.not_a_doclet", userDocletName);
+                    throw new ToolException(ERROR, text, ncfe);
+                } else {
+                    throw ncfe;
+                }
             }
         }
 
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties	Fri Feb 22 20:36:42 2019 +0000
@@ -299,12 +299,9 @@
 Please file a bug against the javadoc tool via the Java bug reporting page\n\
 (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com)\n\
 for duplicates. Include error messages and the following diagnostic in your report. Thank you.
-main.legacy_api=The old Doclet and Taglet APIs in the packages\n\
-    com.sun.javadoc, com.sun.tools.doclets and their implementations\n\
-    are planned to be removed in a future JDK release. These\n\
-    components have been superseded by the new APIs in jdk.javadoc.doclet.\n\
-    Users are strongly recommended to migrate to the new APIs.\n
-
+main.not_a_doclet=\
+    Class {0} is not a valid doclet.\n\
+    Note: As of JDK 13, the com.sun.javadoc API is no longer supported.
 javadoc.class_not_found=Class {0} not found.
 javadoc.error=error
 javadoc.warning=warning
--- a/src/jdk.javadoc/share/classes/module-info.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.javadoc/share/classes/module-info.java	Fri Feb 22 20:36:42 2019 +0000
@@ -63,9 +63,6 @@
     requires transitive java.compiler;
     requires transitive jdk.compiler;
 
-    exports com.sun.javadoc;
-    exports com.sun.tools.javadoc;
-
     exports jdk.javadoc.doclet;
 
     provides java.util.spi.ToolProvider with
--- a/src/jdk.jcmd/share/classes/sun/tools/jmap/JMap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.jcmd/share/classes/sun/tools/jmap/JMap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -145,22 +145,52 @@
         vm.detach();
     }
 
+    private static String parseFileName(String opt) {
+        // opt starts with "file="
+        if (opt.length() > 5) {
+            //  pass whole "file=" string
+            String filename = opt.substring(5);
+            try {
+                // Get the canonical path - important to avoid just
+                // passing a "heap.bin" and having the dump created
+                // in the target VM working directory rather than the
+                // directory where jmap is executed.
+                return new File(filename).getCanonicalPath();
+            } catch (IOException ioe) {
+              return null;
+            }
+        }
+        // no filename
+        return null;
+    }
+
     private static void histo(String pid, String options)
         throws AttachNotSupportedException, IOException,
                UnsupportedEncodingException {
         String liveopt = "-all";
-        if (options.isEmpty() || options.equals("all")) {
-            //  pass
-        }
-        else if (options.equals("live")) {
-            liveopt = "-live";
-        }
-        else {
-            usage(1);
+        String filename = null;
+        String subopts[] = options.split(",");
+
+        for (int i = 0; i < subopts.length; i++) {
+            String subopt = subopts[i];
+            if (subopt.equals("") || subopt.equals("all")) {
+                // pass
+            } else if (subopt.equals("live")) {
+                liveopt = "-live";
+            } else if (subopt.startsWith("file=")) {
+                filename = parseFileName(subopt);
+                if (filename == null) {
+                    usage(1); // invalid options or no filename
+                }
+            } else {
+                usage(1);
+            }
         }
 
+        System.out.flush();
+
         // inspectHeap is not the same as jcmd GC.class_histogram
-        executeCommandForPid(pid, "inspectheap", liveopt);
+        executeCommandForPid(pid, "inspectheap", filename, liveopt);
     }
 
     private static void dump(String pid, String options)
@@ -176,10 +206,7 @@
             if (subopt.equals("live")) {
                 liveopt = "-live";
             } else if (subopt.startsWith("file=")) {
-                // file=<file> - check that <file> is specified
-                if (subopt.length() > 5) {
-                    filename = subopt.substring(5);
-                }
+                filename = parseFileName(subopt);
             }
         }
 
@@ -187,11 +214,6 @@
             usage(1);  // invalid options or no filename
         }
 
-        // get the canonical path - important to avoid just passing
-        // a "heap.bin" and having the dump created in the target VM
-        // working directory rather than the directory where jmap
-        // is executed.
-        filename = new File(filename).getCanonicalPath();
         // dumpHeap is not the same as jcmd GC.heap_dump
         executeCommandForPid(pid, "dumpheap", filename, liveopt);
     }
@@ -246,21 +268,27 @@
         System.err.println("        to connect to running process and print class loader statistics");
         System.err.println("    jmap -finalizerinfo <pid>");
         System.err.println("        to connect to running process and print information on objects awaiting finalization");
-        System.err.println("    jmap -histo[:live] <pid>");
+        System.err.println("    jmap -histo[:[<histo-options>]] <pid>");
         System.err.println("        to connect to running process and print histogram of java object heap");
-        System.err.println("        if the \"live\" suboption is specified, only count live objects");
         System.err.println("    jmap -dump:<dump-options> <pid>");
         System.err.println("        to connect to running process and dump java heap");
         System.err.println("    jmap -? -h --help");
         System.err.println("        to print this help message");
         System.err.println("");
         System.err.println("    dump-options:");
-        System.err.println("      live         dump only live objects; if not specified,");
-        System.err.println("                   all objects in the heap are dumped.");
+        System.err.println("      live         dump only live objects");
+        System.err.println("      all          dump all objects in the heap (default if one of \"live\" or \"all\" is not specified");
         System.err.println("      format=b     binary format");
         System.err.println("      file=<file>  dump heap to <file>");
         System.err.println("");
         System.err.println("    Example: jmap -dump:live,format=b,file=heap.bin <pid>");
+        System.err.println("");
+        System.err.println("    histo-options:");
+        System.err.println("      live         count only live objects");
+        System.err.println("      all          count all objects in the heap (default if one of \"live\" or \"all\" is not specified)");
+        System.err.println("      file=<file>  dump data to <file>");
+        System.err.println("");
+        System.err.println("    Example: jmap -histo:live,file=/tmp/histo.data <pid>");
         System.exit(exit);
     }
 }
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/Env.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/Env.java	Fri Feb 22 20:36:42 2019 +0000
@@ -211,58 +211,14 @@
         ReferenceType clazz = ref.referenceType();
         long id = ref.uniqueID();
         if (clazz == null) {
-            return toHex(id);
+            return Long.toString(id);
         } else {
-            return MessageOutput.format("object description and hex id",
+            return MessageOutput.format("object description and id",
                                         new Object [] {clazz.name(),
-                                                       toHex(id)});
+                                                       Long.toString(id)});
         }
     }
 
-    /** Convert a long to a hexadecimal string. */
-    static String toHex(long n) {
-        char s1[] = new char[16];
-        char s2[] = new char[18];
-
-        /* Store digits in reverse order. */
-        int i = 0;
-        do {
-            long d = n & 0xf;
-            s1[i++] = (char)((d < 10) ? ('0' + d) : ('a' + d - 10));
-        } while ((n >>>= 4) > 0);
-
-        /* Now reverse the array. */
-        s2[0] = '0';
-        s2[1] = 'x';
-        int j = 2;
-        while (--i >= 0) {
-            s2[j++] = s1[i];
-        }
-        return new String(s2, 0, j);
-    }
-
-    /** Convert hexadecimal strings to longs. */
-    static long fromHex(String hexStr) {
-        String str = hexStr.startsWith("0x") ?
-            hexStr.substring(2).toLowerCase() : hexStr.toLowerCase();
-        if (hexStr.length() == 0) {
-            throw new NumberFormatException();
-        }
-
-        long ret = 0;
-        for (int i = 0; i < str.length(); i++) {
-            int c = str.charAt(i);
-            if (c >= '0' && c <= '9') {
-                ret = (ret * 16) + (c - '0');
-            } else if (c >= 'a' && c <= 'f') {
-                ret = (ret * 16) + (c - 'a' + 10);
-            } else {
-                throw new NumberFormatException();
-            }
-        }
-        return ret;
-    }
-
     static ReferenceType getReferenceTypeFromToken(String idToken) {
         ReferenceType cls = null;
         if (Character.isDigit(idToken.charAt(0))) {
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java	Fri Feb 22 20:36:42 2019 +0000
@@ -931,7 +931,7 @@
                    // Old-style options (These should remain in place as long as
                    //  the standard VM accepts them)
                    token.equals("-noasyncgc") || token.equals("-prof") ||
-                   token.equals("-verify") || token.equals("-noverify") ||
+                   token.equals("-verify") ||
                    token.equals("-verifyremote") ||
                    token.equals("-verbosegc") ||
                    token.startsWith("-ms") || token.startsWith("-mx") ||
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources.java	Fri Feb 22 20:36:42 2019 +0000
@@ -235,7 +235,7 @@
         {"Not owned", "  Not owned"},
         {"Not waiting for a monitor", "  Not waiting for a monitor"},
         {"Nothing suspended.", "Nothing suspended."},
-        {"object description and hex id", "({0}){1}"},
+        {"object description and id", "({0}){1}"},
         {"Operation is not supported on the target VM", "Operation is not supported on the target VM"},
         {"operation not yet supported", "operation not yet supported"},
         {"Owned by:", "  Owned by: {0}, entry count: {1,number,integer}"},
--- a/src/jdk.jfr/share/conf/jfr/default.jfc	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.jfr/share/conf/jfr/default.jfc	Fri Feb 22 20:36:42 2019 +0000
@@ -133,11 +133,6 @@
       <setting name="threshold">10 ms</setting>
     </event>
 
-    <event name="jdk.SafepointWaitBlocked">
-      <setting name="enabled">false</setting>
-      <setting name="threshold">10 ms</setting>
-    </event>
-
     <event name="jdk.SafepointCleanup">
       <setting name="enabled">false</setting>
       <setting name="threshold">10 ms</setting>
--- a/src/jdk.jfr/share/conf/jfr/profile.jfc	Fri Feb 22 17:03:09 2019 +0000
+++ b/src/jdk.jfr/share/conf/jfr/profile.jfc	Fri Feb 22 20:36:42 2019 +0000
@@ -133,11 +133,6 @@
       <setting name="threshold">0 ms</setting>
     </event>
 
-    <event name="jdk.SafepointWaitBlocked">
-      <setting name="enabled">false</setting>
-      <setting name="threshold">0 ms</setting>
-    </event>
-
     <event name="jdk.SafepointCleanup">
       <setting name="enabled">false</setting>
       <setting name="threshold">0 ms</setting>
--- a/test/hotspot/gtest/logging/logTestFixture.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/gtest/logging/logTestFixture.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -33,11 +33,12 @@
 #include "utilities/ostream.hpp"
 
 LogTestFixture::LogTestFixture() : _n_snapshots(0), _configuration_snapshot(NULL) {
-  // Set up TestLogFileName to include PID, testcase name and test name
-  int ret = jio_snprintf(_filename, sizeof(_filename), "testlog.pid%d.%s.%s.log",
-                         os::current_process_id(),
-                         ::testing::UnitTest::GetInstance()->current_test_info()->test_case_name(),
-                         ::testing::UnitTest::GetInstance()->current_test_info()->name());
+
+  // Set up TestLogFileName to include temp_dir, PID, testcase name and test name.
+  const testing::TestInfo* test_info = ::testing::UnitTest::GetInstance()->current_test_info();
+  int ret = jio_snprintf(_filename, sizeof(_filename), "%s%stestlog.pid%d.%s.%s.log",
+                         os::get_temp_directory(), os::file_separator(), os::current_process_id(),
+                         test_info->test_case_name(), test_info->name());
   EXPECT_GT(ret, 0) << "_filename buffer issue";
   TestLogFileName = _filename;
 
--- a/test/hotspot/gtest/logging/logTestUtils.inline.hpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/gtest/logging/logTestUtils.inline.hpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -88,6 +88,30 @@
   guarantee(success, "Failed to disable logging to file '%s'", filename);
 }
 
+static const char* tmp_dir = os::get_temp_directory();
+static const char* file_sep = os::file_separator();
+
+// Prepend filename with the temp directory and pid and return the result as a
+// resource allocated string.
+static inline char* prepend_temp_dir(const char* filename) {
+  size_t temp_file_len = strlen(tmp_dir) + strlen(file_sep) + strlen(filename) + 28;
+  char* temp_file = NEW_RESOURCE_ARRAY(char, temp_file_len);
+  int ret = jio_snprintf(temp_file, temp_file_len, "%s%spid%d.%s",
+                         tmp_dir, file_sep,
+                         os::current_process_id(), filename);
+  return temp_file;
+}
+
+// Prepend filename with specified prefix and the temp directory and return the
+// result as a malloc allocated string.  This is used by test_logFileOutput.cpp.
+static inline char* prepend_prefix_temp_dir(const char* prefix, const char* filename) {
+  size_t temp_file_len = strlen(prefix) + strlen(tmp_dir) + strlen(file_sep) + strlen(filename) + 1;
+  char* temp_file = (char*)os::malloc(temp_file_len, mtLogging);
+  int ret = jio_snprintf(temp_file, temp_file_len, "%s%s%s%s",
+                         prefix, tmp_dir, file_sep, filename);
+  return temp_file;
+}
+
 // Read a complete line from fp and return it as a resource allocated string.
 // Returns NULL on EOF.
 static inline char* read_line(FILE* fp) {
--- a/test/hotspot/gtest/logging/test_logConfiguration.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/gtest/logging/test_logConfiguration.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -403,16 +403,15 @@
 
   // Make sure prefixes are ignored when used within quotes
   // (this should create a log with "file=" in its filename)
-  int ret = jio_snprintf(buf, sizeof(buf), "\"file=%s\"", TestLogFileName);
-  ASSERT_NE(-1, ret);
-  set_log_config(buf, "logging=trace");
+  // Note that the filename cannot contain directories because
+  // it is being prefixed with "file=".
+  const char* leafFileName = "\"file=leaf_file_name\"";
+  set_log_config(leafFileName, "logging=trace");
   EXPECT_TRUE(is_described("#3: ")) << "prefix within quotes not ignored as it should be";
-  set_log_config(buf, "all=off");
+  set_log_config(leafFileName, "all=off");
 
   // Remove the extra log file created
-  ret = jio_snprintf(buf, sizeof(buf), "file=%s", TestLogFileName);
-  ASSERT_NE(-1, ret);
-  delete_file(buf);
+  delete_file("file=leaf_file_name");
 }
 
 static size_t count_occurrences(const char* haystack, const char* needle) {
--- a/test/hotspot/gtest/logging/test_logFileOutput.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/gtest/logging/test_logFileOutput.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, 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
@@ -31,7 +31,7 @@
 #include "utilities/globalDefinitions.hpp"
 #include "utilities/ostream.hpp"
 
-static const char* name = "file=testlog.pid%p.%t.log";
+static const char* name = prepend_prefix_temp_dir("file=", "testlog.pid%p.%t.log");
 
 // Test parsing a bunch of valid file output options
 TEST_VM(LogFileOutput, parse_valid) {
@@ -46,11 +46,6 @@
 
   // Override LogOutput's vm_start time to get predictable file name
   LogFileOutput::set_file_name_parameters(0);
-  char expected_filename[1 * K];
-  int ret = jio_snprintf(expected_filename, sizeof(expected_filename),
-                         "testlog.pid%d.1970-01-01_01-00-00.log",
-                         os::current_process_id());
-  ASSERT_GT(ret, 0) << "Buffer too small";
 
   for (size_t i = 0; i < ARRAY_SIZE(valid_options); i++) {
     ResourceMark rm;
@@ -60,8 +55,8 @@
       EXPECT_STREQ(name, fo.name());
       EXPECT_TRUE(fo.initialize(valid_options[i], &ss))
         << "Did not accept valid option(s) '" << valid_options[i] << "': " << ss.as_string();
+      remove(fo.cur_log_file_name());
     }
-    remove(expected_filename);
   }
 }
 
@@ -105,11 +100,11 @@
 }
 
 TEST_VM(LogFileOutput, startup_rotation) {
+  ResourceMark rm;
   const size_t rotations = 5;
-  const char* filename = "start-rotate-test";
+  const char* filename = prepend_temp_dir("start-rotate-test");
   char* rotated_file[rotations];
 
-  ResourceMark rm;
   for (size_t i = 0; i < rotations; i++) {
     size_t len = strlen(filename) + 3;
     rotated_file[i] = NEW_RESOURCE_ARRAY(char, len);
@@ -142,8 +137,9 @@
 }
 
 TEST_VM(LogFileOutput, startup_truncation) {
-  const char* filename = "start-truncate-test";
-  const char* archived_filename = "start-truncate-test.0";
+  ResourceMark rm;
+  const char* filename = prepend_temp_dir("start-truncate-test");
+  const char* archived_filename = prepend_temp_dir("start-truncate-test.0");
 
   delete_file(filename);
   delete_file(archived_filename);
--- a/test/hotspot/gtest/logging/test_logMessageTest.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/gtest/logging/test_logMessageTest.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -39,6 +39,8 @@
   ~LogMessageTest();
 };
 
+Log(logging) LogMessageTest::_log;
+
 const char* LogMessageTest::_level_filename[] = {
   NULL, // LogLevel::Off
 #define LOG_LEVEL(name, printname) "multiline-" #printname ".log",
--- a/test/hotspot/gtest/logging/test_logTagSetDescriptions.cpp	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/gtest/logging/test_logTagSetDescriptions.cpp	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -48,7 +48,8 @@
 }
 
 TEST_VM(LogTagSetDescriptions, command_line_help) {
-  const char* filename = "logtagset_descriptions";
+  ResourceMark rm;
+  const char* filename = prepend_temp_dir("logtagset_descriptions");
   FILE* fp = fopen(filename, "w+");
   ASSERT_NE((void*)NULL, fp);
   fileStream stream(fp);
--- a/test/hotspot/jtreg/ProblemList-graal.txt	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/ProblemList-graal.txt	Fri Feb 22 20:36:42 2019 +0000
@@ -226,4 +226,4 @@
 
 org.graalvm.compiler.hotspot.test.ReservedStackAccessTest        8213567   windows-all
 
-org.graalvm.compiler.hotspot.test.CheckGraalIntrinsics           8218698
+org.graalvm.compiler.hotspot.test.CheckGraalIntrinsics           8218074
--- a/test/hotspot/jtreg/ProblemList.txt	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/ProblemList.txt	Fri Feb 22 20:36:42 2019 +0000
@@ -57,9 +57,9 @@
 
 compiler/runtime/Test8168712.java 8211769,8211771 generic-ppc64,generic-ppc64le,linux-s390x
 
-applications/ctw/modules/java_desktop.java   8189604 windows-all
-applications/ctw/modules/java_desktop_2.java 8189604 windows-all
-applications/ctw/modules/jdk_jconsole.java   8189604 windows-all
+applications/ctw/modules/java_desktop.java   8205016 windows-all
+applications/ctw/modules/java_desktop_2.java 8205016 windows-all
+applications/ctw/modules/jdk_jconsole.java   8205016 windows-all
 
 #############################################################################
 
@@ -81,6 +81,7 @@
 # :hotspot_runtime
 
 runtime/handshake/HandshakeWalkSuspendExitTest.java 8214174 generic-all
+runtime/NMT/CheckForProperDetailStackTrace.java 8218458 generic-all
 runtime/SharedArchiveFile/SASymbolTableTest.java 8193639 solaris-all
 
 #############################################################################
@@ -188,7 +189,7 @@
 vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java 8058176 generic-all
 vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java 8058176 generic-all
 vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java 8058176 generic-all
-vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java 8208278 generic-all
+vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java 8208278 macosx-all
 vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java 8013267 generic-all
 vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java 8013267 generic-all
 vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java 8013267 generic-all
--- a/test/hotspot/jtreg/TEST.ROOT	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/TEST.ROOT	Fri Feb 22 20:36:42 2019 +0000
@@ -70,7 +70,7 @@
     test.vm.gc.nvdimm
 
 # Minimum jtreg version
-requiredVersion=4.2 b13
+requiredVersion=4.2 b14
 
 # Path to libraries in the topmost test directory. This is needed so @library
 # does not need ../../../ notation to reach them
@@ -81,3 +81,6 @@
 
 # Use --patch-module instead of -Xmodule:
 useNewPatchModule=true
+
+# disabled till JDK-8219140 is fixed
+allowSmartActionArgs=false
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c1/TestGotoIf.jasm	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,171 @@
+/*
+ * 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.
+ *
+ */
+
+public class compiler/c1/TestGotoIf version 52:0 {
+    public Field f1:"I";
+    public Field f2:"I";
+    public static Field i:"I";
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    public Method test1:"()I" stack 3 locals 1 {
+        aload_0;
+        getfield Field f1:"I";
+        aload_0;
+        getfield Field f2:"I";
+        iconst_1;
+        isub;
+        // Without the fix, if got eliminated by CEE
+        if_icmpgt Null;
+        iconst_1;
+      Return: stack_frame_type stack1;
+      stack_map int;
+        ireturn;
+      Null: stack_frame_type same;
+        iconst_0;
+        goto Return; // Backbranch (t_goto) with safepoint
+    }
+
+    public Method test2:"()I" stack 3 locals 1 {
+        aload_0;
+        getfield Field f1:"I";
+        aload_0;
+        getfield Field f2:"I";
+        iconst_1;
+        isub;
+        goto Skip;
+      Return: stack_frame_type full;
+      stack_map int;
+        ireturn;
+      Skip: stack_frame_type full;
+      stack_map int, int;
+        // Without the fix, if got eliminated by CEE
+        if_icmpgt Null;
+        iconst_1;
+        goto Return; // Backbranch (f_goto) with safepoint
+      Null: stack_frame_type full;
+      stack_map;
+        iconst_0;
+        goto Return; // Backbranch (t_goto) with safepoint
+    }
+
+    public Method test3:"()I" stack 3 locals 1 {
+        aload_0;
+        getfield Field f1:"I";
+        aload_0;
+        getfield Field f2:"I";
+        iconst_1;
+        isub;
+        goto Skip;
+      Return: stack_frame_type full;
+      stack_map int;
+        ireturn;
+      Null: stack_frame_type full;
+      stack_map;
+        iconst_0;
+        goto Return; // Backbranch (t_goto) with safepoint
+      Skip: stack_frame_type full;
+      stack_map int, int;
+        // If will be eliminated by CEE
+        if_icmpgt Null; // Backbranch (if) with safepoint
+        iconst_1;
+        goto Return; // Backbranch (f_goto) with safepoint
+    }
+
+    public Method test4:"()I" stack 3 locals 1 {
+        aload_0;
+        getfield Field f1:"I";
+        aload_0;
+        getfield Field f2:"I";
+        iconst_1;
+        isub;
+        goto Skip;
+      Null: stack_frame_type full;
+      stack_map;
+        iconst_0;
+      Return: stack_frame_type full;
+      stack_map int;
+        ireturn; 
+      Skip: stack_frame_type full;
+      stack_map int, int;
+        // If will be eliminated by CEE
+        if_icmpgt Null; // Backbranch (if) with safepoint
+        iconst_1;
+        goto Return; // Backbranch (f_goto) with safepoint
+    }
+
+    public Method test5:"()I" stack 3 locals 2 {
+        aload_0;
+        getfield Field f1:"I";
+        aload_0;
+        getfield Field f2:"I";
+        iconst_1;
+        isub;
+        goto Skip;
+      Null: stack_frame_type full;
+      stack_map;
+        iconst_0;
+        goto Return;
+      Skip: stack_frame_type full;
+      stack_map int, int;
+        // If will be eliminated by CEE
+        if_icmpgt Null; // Backbranch (if) with safepoint
+        iconst_1;
+      Return: stack_frame_type full;
+      stack_map int;
+        ireturn; 
+    }
+
+    public Method test6:"()I" stack 4 locals 1 {
+        getstatic Field i:"I";
+      Loop: stack_frame_type full;
+      stack_map int;
+        // Decrement i and exit loop if < 0
+        iconst_0;
+        getstatic Field i:"I";
+        iconst_1;
+        isub;
+        dup;
+        putstatic Field i:"I";
+        if_icmpgt Exit;
+
+        iconst_1;
+        // Without the fix, if got eliminated by CEE
+        if_icmpgt Null;
+        iconst_1;
+        goto Loop; // Backbranch (f_goto) with safepoint
+      Null: stack_frame_type same;
+        iconst_0;
+        goto Loop; // Backbranch (t_goto) with safepoint
+
+      Exit: stack_frame_type full;
+      stack_map int;
+        iconst_0;
+        ireturn; 
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c1/TestGotoIfMain.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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 8218721
+ * @compile TestGotoIf.jasm
+ * @run main/othervm -XX:TieredStopAtLevel=1 -Xcomp
+ *                   -XX:CompileCommand=compileonly,compiler.c1.TestGotoIf::test*
+ *                   compiler.c1.TestGotoIfMain
+ */
+
+package compiler.c1;
+
+public class TestGotoIfMain {
+    public static void main(String[] args) {
+        TestGotoIf test = new TestGotoIf();
+        test.i = 5;
+        test.test1();
+        test.test2();
+        test.test3();
+        test.test4();
+        test.test5();
+        test.test6();
+    }
+}
--- a/test/hotspot/jtreg/compiler/linkage/TestLinkageErrorInGenerateOopMap.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/compiler/linkage/TestLinkageErrorInGenerateOopMap.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -42,7 +42,9 @@
     public static void main(String args[]) throws Exception {
         if (args.length == 0) {
             // Spawn new VM instance to execute test
-            String[] flags = {"-noverify", "-XX:-TieredCompilation",
+            String[] flags = {"-XX:-BytecodeVerificationRemote",
+                              "-XX:-BytecodeVerificationLocal",
+                              "-XX:-TieredCompilation",
                               "-XX:CompileCommand=dontinline,compiler/linkage/OSRWithBadOperandStack.m*",
                               "compiler.linkage.TestLinkageErrorInGenerateOopMap", "run"};
             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/unsafe/MaybeOffHeapUnsafeAccessToNewObject.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 8219335
+ * @summary "failed: unexpected type" assert failure in ConnectionGraph::split_unique_types() with unsafe accesses
+ *
+ * @modules java.base/jdk.internal.misc
+ * @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:-TieredCompilation -Xcomp -XX:CompileOnly=MaybeOffHeapUnsafeAccessToNewObject::test1 -XX:+IgnoreUnrecognizedVMOptions -XX:+AlwaysIncrementalInline MaybeOffHeapUnsafeAccessToNewObject
+ */
+
+import java.lang.reflect.Field;
+import jdk.internal.misc.Unsafe;
+
+public class MaybeOffHeapUnsafeAccessToNewObject {
+    public volatile int f_int = -1;
+
+
+    public static Unsafe unsafe = Unsafe.getUnsafe();
+    public static final long f_int_off;
+
+    static {
+        Field f_int_field = null;
+        try {
+            f_int_field = MaybeOffHeapUnsafeAccessToNewObject.class.getField("f_int");
+        } catch (Exception e) {
+            System.out.println("reflection failed " + e);
+            e.printStackTrace();
+        }
+        f_int_off = unsafe.objectFieldOffset(f_int_field);
+    }
+
+    static public void main(String[] args) {
+        MaybeOffHeapUnsafeAccessToNewObject o = new MaybeOffHeapUnsafeAccessToNewObject();
+        test1();
+    }
+
+    static Object test1_helper1(Object t) {
+        return t;
+    }
+
+    static long test1_helper2(long off) {
+        return off;
+    }
+
+    static int test1() {
+        MaybeOffHeapUnsafeAccessToNewObject t = new MaybeOffHeapUnsafeAccessToNewObject();
+        Object o = test1_helper1(t);
+        long off = test1_helper2(f_int_off);
+        return unsafe.getInt(o, off);
+    }
+
+}
--- a/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java	Fri Feb 22 20:36:42 2019 +0000
@@ -120,19 +120,16 @@
 
   public static void main(String args[]) throws Exception {
     String gcName = args[0];
-    final int M32 = 32 * 1024 * 1024;
-    final int M64 = 64 * 1024 * 1024;
-    final int M96 = 96 * 1024 * 1024;
-    final int M128 = 128 * 1024 * 1024;
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M" }, M128);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=5" }, M128);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M" }, M128);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:OldSize=96M" }, M128);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:MaxNewSize=32M" }, M32);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M", "-XX:MaxNewSize=32M" }, M32);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=6", "-XX:MaxNewSize=32M" }, M32);
-    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-Xms96M" }, M128);
-    checkMaxNewSize(new String[] { gcName, "-Xmx96M", "-Xms96M" }, M96);
-    checkMaxNewSize(new String[] { gcName, "-XX:NewSize=128M", "-XX:MaxNewSize=50M"}, M128);
+    final int M = 1024 * 1024;
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M" }, 128 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=5" }, 128 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M" }, 128 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:OldSize=96M" }, 128 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:MaxNewSize=32M" }, 32 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M", "-XX:MaxNewSize=32M" }, 32 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=6", "-XX:MaxNewSize=32M" }, 32 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-Xms96M" }, 128 * M);
+    checkMaxNewSize(new String[] { gcName, "-Xmx96M", "-Xms96M" }, 96 * M);
+    checkMaxNewSize(new String[] { gcName, "-XX:NewSize=128M", "-XX:MaxNewSize=50M"}, 128 * M);
   }
 }
--- a/test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/arguments/TestTargetSurvivorRatioFlag.java	Fri Feb 22 20:36:42 2019 +0000
@@ -23,6 +23,8 @@
 
 package gc.arguments;
 
+import static java.lang.ref.Reference.reachabilityFence;
+
 /*
  * @test TestTargetSurvivorRatioFlag
  * @key gc
@@ -297,7 +299,7 @@
 
             // force minor GC
             while (youngGCBean.getCollectionCount() <= initialGcId + MAX_TENURING_THRESHOLD * 2) {
-                byte b[] = new byte[ARRAY_LENGTH];
+                reachabilityFence(new byte[ARRAY_LENGTH]);
             }
 
             allocator.release();
--- a/test/hotspot/jtreg/gc/cms/DisableResizePLAB.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/cms/DisableResizePLAB.java	Fri Feb 22 20:36:42 2019 +0000
@@ -23,6 +23,8 @@
 
 package gc.cms;
 
+import static java.lang.ref.Reference.reachabilityFence;
+
 /*
  * @test DisableResizePLAB
  * @key gc
@@ -41,7 +43,7 @@
         }
         long startTime = System.currentTimeMillis();
         while (System.currentTimeMillis() - startTime < 10_000) {
-            Object o = new byte[1024];
+            reachabilityFence(new byte[1024]);
         }
     }
 }
--- a/test/hotspot/jtreg/gc/cslocker/TestCSLocker.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/cslocker/TestCSLocker.java	Fri Feb 22 20:36:42 2019 +0000
@@ -23,6 +23,8 @@
 
 package gc.cslocker;
 
+import static java.lang.ref.Reference.reachabilityFence;
+
 /*
  * @test TestCSLocker
  * @key gc
@@ -73,8 +75,7 @@
 
         while (isRunning) {
             try {
-                int[] arr = null;
-                arr = new int[size];
+                reachabilityFence(new int[size]);
                 sleep(sleepTime);
             } catch (InterruptedException e) {
                 isRunning = false;
--- a/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java	Fri Feb 22 20:36:42 2019 +0000
@@ -57,8 +57,8 @@
         MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
         long heapInit = memoryMXBean.getHeapMemoryUsage().getInit();
         long heapMax = memoryMXBean.getHeapMemoryUsage().getMax();
-        long nonHeapInit = memoryMXBean.getNonHeapMemoryUsage().getInit();
-        long nonHeapMax = memoryMXBean.getNonHeapMemoryUsage().getMax();
+        memoryMXBean.getNonHeapMemoryUsage().getInit(); // value not used
+        memoryMXBean.getNonHeapMemoryUsage().getMax();  // value not used
 
         if (initSize > 0 && heapInit != initSize) {
             throw new IllegalStateException("Init heap size is wrong: " + heapInit + " vs " + initSize);
--- a/test/hotspot/jtreg/gc/g1/TestFromCardCacheIndex.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/TestFromCardCacheIndex.java	Fri Feb 22 20:36:42 2019 +0000
@@ -130,7 +130,7 @@
             if (target == null) {
                 continue;
             }
-            final long startAddress = WB.getObjectAddress(target);
+            WB.getObjectAddress(target); // startAddress not used
             final long lastAddress = getObjectLastAddress(target);
             final int card = getCardIndex32bit(lastAddress);
             if (card == -1) {
--- a/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java	Fri Feb 22 20:36:42 2019 +0000
@@ -100,12 +100,16 @@
         new LogMessageWithLevel("Processed Buffers", Level.DEBUG),
         new LogMessageWithLevel("Scanned Cards", Level.DEBUG),
         new LogMessageWithLevel("Skipped Cards", Level.DEBUG),
-        new LogMessageWithLevel("Scan HCC", Level.TRACE),
+        new LogMessageWithLevel("Scan HCC", Level.DEBUG),
         // Scan RS
         new LogMessageWithLevel("Scan RS", Level.DEBUG),
         new LogMessageWithLevel("Scanned Cards", Level.DEBUG),
         new LogMessageWithLevel("Claimed Cards", Level.DEBUG),
         new LogMessageWithLevel("Skipped Cards", Level.DEBUG),
+        // Object Copy
+        new LogMessageWithLevel("Object Copy", Level.DEBUG),
+        new LogMessageWithLevel("Scanned Cards", Level.DEBUG),
+        new LogMessageWithLevel("Claimed Cards", Level.DEBUG),
         // Ext Root Scan
         new LogMessageWithLevel("Thread Roots", Level.TRACE),
         new LogMessageWithLevel("Universe Roots", Level.TRACE),
--- a/test/hotspot/jtreg/gc/g1/TestHumongousAllocNearlyFullRegion.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/TestHumongousAllocNearlyFullRegion.java	Fri Feb 22 20:36:42 2019 +0000
@@ -23,6 +23,8 @@
 
 package gc.g1;
 
+import static java.lang.ref.Reference.reachabilityFence;
+
 /*
  * @test TestHumongousAllocNearlyFullRegion
  * @bug 8143587
@@ -62,7 +64,7 @@
             for (int i = 0; i < heapSize; i++) {
                 // 131069 is the number of longs it takes to fill a heapRegion except
                 // for 8 bytes on 64 bit.
-                long[] largeObect = new long[131069];
+                reachabilityFence(new long[131069]);
             }
         }
     }
--- a/test/hotspot/jtreg/gc/g1/TestRemsetLoggingThreads.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/TestRemsetLoggingThreads.java	Fri Feb 22 20:36:42 2019 +0000
@@ -54,10 +54,6 @@
 
     OutputAnalyzer output = new OutputAnalyzer(pb.start());
 
-    // a zero in refinement thread numbers indicates that the value in ParallelGCThreads should be used.
-    // Additionally use at least one thread.
-    int expectedNumRefinementThreads = refinementThreads;
-
     String pattern = "Concurrent RS threads times \\(s\\)$";
     Matcher m = Pattern.compile(pattern, Pattern.MULTILINE).matcher(output.getStdout());
 
--- a/test/hotspot/jtreg/gc/g1/humongousObjects/TestHumongousClassLoader.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/humongousObjects/TestHumongousClassLoader.java	Fri Feb 22 20:36:42 2019 +0000
@@ -156,6 +156,7 @@
         URLClassLoader urlLoader = new URLClassLoader(url);
 
         Class<?> simpleClassLoaderClass = urlLoader.loadClass(SIMPLE_CLASSLOADER_NAME);
+        urlLoader.close();
 
         ClassLoader simpleClassLoader = (ClassLoader) simpleClassLoaderClass
                 .getConstructor(java.lang.ClassLoader.class)
--- a/test/hotspot/jtreg/gc/g1/humongousObjects/TestNoAllocationsInHRegions.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/humongousObjects/TestNoAllocationsInHRegions.java	Fri Feb 22 20:36:42 2019 +0000
@@ -26,6 +26,8 @@
 import jdk.test.lib.Utils;
 import sun.hotspot.WhiteBox;
 
+import static java.lang.ref.Reference.reachabilityFence;
+
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
@@ -139,7 +141,7 @@
                     // Dead object allocation
                     () -> {
                         int size = RND.nextInt(DEAD_OBJECT_MAX_SIZE);
-                        byte[] deadObject = new byte[size];
+                        reachabilityFence(new byte[size]);
                     },
 
                     // Check
--- a/test/hotspot/jtreg/gc/g1/plab/lib/LogParser.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/g1/plab/lib/LogParser.java	Fri Feb 22 20:36:42 2019 +0000
@@ -95,36 +95,37 @@
     }
 
     private PlabReport parseLines() throws NumberFormatException {
-        Scanner lineScanner = new Scanner(log);
-        PlabReport plabReport = new PlabReport();
-        Optional<Long> gc_id;
-        while (lineScanner.hasNextLine()) {
-            String line = lineScanner.nextLine();
-            gc_id = getGcId(line, GC_ID_PATTERN);
-            if (gc_id.isPresent()) {
-                Matcher matcher = PAIRS_PATTERN.matcher(line);
-                if (matcher.find()) {
-                    if (!plabReport.containsKey(gc_id.get())) {
-                        plabReport.put(gc_id.get(), new PlabGCStatistics());
+        try (Scanner lineScanner = new Scanner(log)) {
+            PlabReport plabReport = new PlabReport();
+            Optional<Long> gc_id;
+            while (lineScanner.hasNextLine()) {
+                String line = lineScanner.nextLine();
+                gc_id = getGcId(line, GC_ID_PATTERN);
+                if (gc_id.isPresent()) {
+                    Matcher matcher = PAIRS_PATTERN.matcher(line);
+                    if (matcher.find()) {
+                        if (!plabReport.containsKey(gc_id.get())) {
+                            plabReport.put(gc_id.get(), new PlabGCStatistics());
+                        }
+                        ReportType reportType = line.contains("Young") ? ReportType.SURVIVOR_STATS : ReportType.OLD_STATS;
+
+                        PlabGCStatistics gcStat = plabReport.get(gc_id.get());
+                        if (!gcStat.containsKey(reportType)) {
+                            gcStat.put(reportType, new PlabInfo());
+                        }
+
+                        // Extract all pairs from log.
+                        PlabInfo plabInfo = gcStat.get(reportType);
+                        do {
+                            String pair = matcher.group();
+                            String[] nameValue = pair.replaceAll(": ", ":").split(":");
+                            plabInfo.put(nameValue[0].trim(), Long.parseLong(nameValue[1]));
+                        } while (matcher.find());
                     }
-                    ReportType reportType = line.contains("Young") ? ReportType.SURVIVOR_STATS : ReportType.OLD_STATS;
-
-                    PlabGCStatistics gcStat = plabReport.get(gc_id.get());
-                    if (!gcStat.containsKey(reportType)) {
-                        gcStat.put(reportType, new PlabInfo());
-                    }
-
-                    // Extract all pairs from log.
-                    PlabInfo plabInfo = gcStat.get(reportType);
-                    do {
-                        String pair = matcher.group();
-                        String[] nameValue = pair.replaceAll(": ", ":").split(":");
-                        plabInfo.put(nameValue[0].trim(), Long.parseLong(nameValue[1]));
-                    } while (matcher.find());
                 }
             }
+            return plabReport;
         }
-        return plabReport;
     }
 
     private static Optional<Long> getGcId(String line, Pattern pattern) {
--- a/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java	Fri Feb 22 20:36:42 2019 +0000
@@ -27,7 +27,6 @@
 import java.io.File;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.function.Predicate;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 
@@ -67,8 +66,6 @@
   }
 
   private static void verifyContainsMetaSpaceUpdate(OutputAnalyzer output) {
-    Predicate<String> collectedMetaSpace = line -> check(line);
-
     // At least one metaspace line from GC should show GC being collected.
     boolean foundCollectedMetaSpace = output.asLines().stream()
         .filter(s -> s.contains("[gc,metaspace"))
--- a/test/hotspot/jtreg/gc/logging/TestPrintReferences.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/logging/TestPrintReferences.java	Fri Feb 22 20:36:42 2019 +0000
@@ -131,7 +131,6 @@
 
     // Find the first Reference Processing log and check its format.
     private static void checkLogFormat(OutputAnalyzer output, boolean parallelRefProcEnabled) {
-        String countRegex = "[0-9]+";
         String timeRegex = doubleRegex + "ms";
 
         /* Total Reference processing time */
--- a/test/hotspot/jtreg/gc/logging/TestUnifiedLoggingSwitchStress.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/logging/TestUnifiedLoggingSwitchStress.java	Fri Feb 22 20:36:42 2019 +0000
@@ -31,6 +31,9 @@
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 import javax.management.ReflectionException;
+
+import static java.lang.ref.Reference.reachabilityFence;
+
 import java.lang.management.ManagementFactory;
 import java.util.LinkedList;
 import java.util.List;
@@ -128,7 +131,7 @@
             // Dead object allocation
             () -> {
                 int size = RND.nextInt(DEAD_OBJECT_MAX_SIZE);
-                byte[] deadObject = new byte[size];
+                reachabilityFence(new byte[size]);
             }
     };
 
--- a/test/hotspot/jtreg/gc/metaspace/G1AddMetaspaceDependency.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/metaspace/G1AddMetaspaceDependency.java	Fri Feb 22 20:36:42 2019 +0000
@@ -111,13 +111,12 @@
     Loader f_loader = new Loader(b_name, b_bytes, a_name, a_loader);
     Loader g_loader = new Loader(b_name, b_bytes, a_name, a_loader);
 
-    Class<?> c;
-    c = b_loader.loadClass(b_name);
-    c = c_loader.loadClass(b_name);
-    c = d_loader.loadClass(b_name);
-    c = e_loader.loadClass(b_name);
-    c = f_loader.loadClass(b_name);
-    c = g_loader.loadClass(b_name);
+    b_loader.loadClass(b_name);
+    c_loader.loadClass(b_name);
+    d_loader.loadClass(b_name);
+    e_loader.loadClass(b_name);
+    f_loader.loadClass(b_name);
+    g_loader.loadClass(b_name);
   }
   public class A {
   }
--- a/test/hotspot/jtreg/gc/metaspace/TestMetaspaceInitialization.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/metaspace/TestMetaspaceInitialization.java	Fri Feb 22 20:36:42 2019 +0000
@@ -33,6 +33,7 @@
  */
 public class TestMetaspaceInitialization {
     private class Internal {
+        @SuppressWarnings("unused")
         public int x;
         public Internal(int x) {
             this.x = x;
--- a/test/hotspot/jtreg/gc/shenandoah/mxbeans/TestMemoryMXBeans.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/shenandoah/mxbeans/TestMemoryMXBeans.java	Fri Feb 22 20:36:42 2019 +0000
@@ -52,8 +52,10 @@
     public static void testMemoryBean(long initSize, long maxSize) {
         MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
         long heapInit = memoryMXBean.getHeapMemoryUsage().getInit();
+        long heapCommitted = memoryMXBean.getHeapMemoryUsage().getCommitted();
         long heapMax = memoryMXBean.getHeapMemoryUsage().getMax();
         long nonHeapInit = memoryMXBean.getNonHeapMemoryUsage().getInit();
+        long nonHeapCommitted = memoryMXBean.getNonHeapMemoryUsage().getCommitted();
         long nonHeapMax = memoryMXBean.getNonHeapMemoryUsage().getMax();
 
         if (initSize > 0 && heapInit != initSize) {
@@ -62,5 +64,9 @@
         if (maxSize > 0 && heapMax != maxSize) {
             throw new IllegalStateException("Max heap size is wrong: " + heapMax + " vs " + maxSize);
         }
+        if (initSize > 0 && maxSize > 0 && initSize != maxSize && heapCommitted == heapMax) {
+            throw new IllegalStateException("Init committed heap size is wrong: " + heapCommitted +
+                                            " (init: " + initSize + ", max: " + maxSize + ")");
+        }
     }
 }
--- a/test/hotspot/jtreg/gc/stress/gcbasher/Decompiler.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/stress/gcbasher/Decompiler.java	Fri Feb 22 20:36:42 2019 +0000
@@ -132,7 +132,7 @@
                             byteCodeIndex++;
                         }
 
-                        int def = cursor.readIntAt(byteCodeIndex);
+                        cursor.readIntAt(byteCodeIndex); // def
                         byteCodeIndex +=4;
 
                         int npairs = cursor.readIntAt(byteCodeIndex);
@@ -149,7 +149,7 @@
                             byteCodeIndex++;
                         }
 
-                        int def = cursor.readIntAt(byteCodeIndex);
+                        cursor.readIntAt(byteCodeIndex); // def
                         byteCodeIndex +=4;
 
                         int low = cursor.readIntAt(byteCodeIndex);
@@ -245,7 +245,7 @@
 
     private ConstantPoolEntry[] decodeConstantPool() {
         final int CONSTANT_Utf8 = 1;
-        final int CONSTANT_Unicode = 2;
+        // final int CONSTANT_Unicode = 2;
         final int CONSTANT_Integer = 3;
         final int CONSTANT_Float = 4;
         final int CONSTANT_Long = 5;
--- a/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasher.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasher.java	Fri Feb 22 20:36:42 2019 +0000
@@ -38,14 +38,15 @@
         HashMap<String, ClassInfo> deps = new HashMap<>();
 
         FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
-        Stream<Path> s = Files.walk(fs.getPath("/"));
-        for (Path p : (Iterable<Path>)s::iterator) {
-            if (p.toString().endsWith(".class") &&
-                !p.getFileName().toString().equals("module-info.class")) {
-                byte[] data = Files.readAllBytes(p);
-                Decompiler d = new Decompiler(data);
-                ClassInfo ci = d.getClassInfo();
-                deps.put(ci.getName(), ci);
+        try (Stream<Path> s = Files.walk(fs.getPath("/"))) {
+            for (Path p : (Iterable<Path>)s::iterator) {
+                if (p.toString().endsWith(".class") &&
+                    !p.getFileName().toString().equals("module-info.class")) {
+                    byte[] data = Files.readAllBytes(p);
+                    Decompiler d = new Decompiler(data);
+                    ClassInfo ci = d.getClassInfo();
+                    deps.put(ci.getName(), ci);
+                }
             }
         }
     }
--- a/test/hotspot/jtreg/runtime/Nestmates/privateMethods/TestInvokeErrors.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/Nestmates/privateMethods/TestInvokeErrors.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@
  *          MissingMethodWithSuper.jcod
  *          MissingNestHost.jcod
  * @run main TestInvokeErrors true
- * @run main/othervm -Xverify:none TestInvokeErrors false
+ * @run main/othervm -XX:-BytecodeVerificationRemote -XX:-BytecodeVerificationLocal TestInvokeErrors false
  */
 
 public class TestInvokeErrors {
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SpaceUtilizationCheck.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SpaceUtilizationCheck.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -102,8 +102,8 @@
                 }
             }
         }
-        if (checked.size() != 5) {
-          throw new RuntimeException("Must have 5 consecutive, fully utilized regions");
+        if (checked.size() != 4) {
+          throw new RuntimeException("Must have 4 consecutive, fully utilized regions");
         }
     }
 }
--- a/test/hotspot/jtreg/runtime/appcds/VerifierTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -38,7 +38,7 @@
     // Test verification settings for dumping & runtime
     static final String VFY_ALL = "-Xverify:all";
     static final String VFY_REMOTE = "-Xverify:remote"; // default
-    static final String VFY_NONE = "-Xverify:none";
+    static final String VFY_NONE = "-XX:-BytecodeVerificationRemote, -XX:-BytecodeVerificationLocal";
 
     static final String ERR =
         "ERROR: class VerifierTestC was loaded unexpectedly";
@@ -140,7 +140,7 @@
             {"app",   VFY_ALL,    VFY_REMOTE, VFY_ERR },
             {"app",   VFY_ALL,    VFY_ALL,    VFY_ERR },
             {"app",   VFY_ALL,    VFY_NONE,   ERR },
-            // Dump app/ext with -Xverify:none
+            // Dump app/ext with verifier turned off
             {"app",   VFY_NONE,   VFY_REMOTE, VFY_ERR},
             {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
             {"app",   VFY_NONE,   VFY_NONE,   ERR },
@@ -152,7 +152,7 @@
             {"noApp", VFY_ALL, VFY_REMOTE,    VFY_ERR},
             {"noApp", VFY_ALL, VFY_ALL,       VFY_ERR},
             {"noApp", VFY_ALL, VFY_NONE,      ERR},
-            // Dump sys only with -Xverify:none
+            // Dump sys only with verifier turned off
             {"noApp", VFY_NONE, VFY_REMOTE,   VFY_ERR},
             {"noApp", VFY_NONE, VFY_ALL,      VFY_ERR},
             {"noApp", VFY_NONE, VFY_NONE,     ERR},
@@ -186,8 +186,19 @@
                                " with " + dump_setting +
                                ", run with " + runtime_setting);
             if (!dump_setting.equals(prev_dump_setting)) {
+                String dump_arg1;
+                String dump_arg2;
+                // Need to break this into two separate arguments.
+                if (dump_setting.equals(VFY_NONE)) {
+                    dump_arg1 = "-XX:-BytecodeVerificationRemote";
+                    dump_arg2 = "-XX:-BytecodeVerificationLocal";
+                } else {
+                    // Redundant args should be harmless.
+                    dump_arg1 = dump_arg2 = dump_setting;
+                }
+
                 OutputAnalyzer dumpOutput = TestCommon.dump(
-                                                            jar, dump_list, dump_setting,
+                                                            jar, dump_list, dump_arg1, dump_arg2,
                                                             CDS_LOGGING,
                                                             // FIXME: the following options are for working around a GC
                                                             // issue - assert failure when dumping archive with the -Xverify:all
@@ -198,8 +209,17 @@
                     dumpOutput.shouldContain(VFY_INFO_MESSAGE);
                 }
             }
+            String runtime_arg1;
+            String runtime_arg2;
+            if (runtime_setting.equals(VFY_NONE)) {
+                runtime_arg1 = "-XX:-BytecodeVerificationRemote";
+                runtime_arg2 = "-XX:-BytecodeVerificationLocal";
+            } else {
+                // Redundant args should be harmless.
+                runtime_arg1 = runtime_arg2 = runtime_setting;
+            }
             TestCommon.run("-cp", jar,
-                           runtime_setting,
+                           runtime_arg1, runtime_arg2,
                            "VerifierTest0")
                 .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str));
             prev_dump_setting = dump_setting;
@@ -229,7 +249,7 @@
             {"app",   VFY_ALL,    VFY_REMOTE, PASS_RESULT },
             {"app",   VFY_ALL,    VFY_ALL,    PASS_RESULT },
             {"app",   VFY_ALL,    VFY_NONE,   PASS_RESULT },
-            // Dump app/ext with -Xverify:none
+            // Dump app/ext with verifier turned off
             {"app",   VFY_NONE,   VFY_REMOTE, PASS_RESULT},
             {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
             {"app",   VFY_NONE,   VFY_NONE,   PASS_RESULT },
@@ -244,8 +264,17 @@
                                " with " + dump_setting +
                                ", run with " + runtime_setting);
             if (!dump_setting.equals(prev_dump_setting)) {
+                String dump_arg1;
+                String dump_arg2;
+                if (dump_setting.equals(VFY_NONE)) {
+                    dump_arg1 = "-XX:-BytecodeVerificationRemote";
+                    dump_arg2 = "-XX:-BytecodeVerificationLocal";
+                } else {
+                    // Redundant args should be harmless.
+                    dump_arg1 = dump_arg2 = dump_setting;
+                }
                 OutputAnalyzer dumpOutput = TestCommon.dump(
-                                                            jar, appClasses, dump_setting,
+                                                            jar, appClasses, dump_arg1, dump_arg2,
                                                             CDS_LOGGING,
                                                             // FIXME: the following options are for working around a GC
                                                             // issue - assert failure when dumping archive with the -Xverify:all
@@ -256,8 +285,17 @@
                     dumpOutput.shouldContain(VFY_INFO_MESSAGE);
                 }
             }
+            String runtime_arg1;
+            String runtime_arg2;
+            if (runtime_setting.equals(VFY_NONE)) {
+                runtime_arg1 = "-XX:-BytecodeVerificationRemote";
+                runtime_arg2 = "-XX:-BytecodeVerificationLocal";
+            } else {
+                // Redundant args should be harmless.
+                runtime_arg1 = runtime_arg2 = runtime_setting;
+            }
             TestCommon.run("-cp", jar,
-                           runtime_setting,
+                           runtime_arg1, runtime_arg2,
                            "Hi")
                 .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str));
            prev_dump_setting = dump_setting;
--- a/test/hotspot/jtreg/runtime/clone/invokevirtual/HasLocalClone.jasm	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/HasLocalClone.jasm	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -28,7 +28,7 @@
  * @summary Check that invokevirtual of clone() finds the clone() method that
  *          is local to the calling class.
  * @compile DefMethClone.jasm SuperClass.jasm I1.java HasLocalClone.jasm
- * @run main/othervm -noverify HasLocalClone
+ * @run main/othervm -XX:-BytecodeVerificationRemote -XX:-BytecodeVerificationLocal HasLocalClone
  */
 
 // The below .jasm code implements the following java code:
--- a/test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalClone.jasm	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalClone.jasm	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -28,7 +28,7 @@
  * @summary Check that invokevirtual of clone() calls java.lang.Object.clone()
  *          even if a superinterface has a default method named clone().
  * @compile DefMethClone.jasm SuperClass.jasm I1.java NoLocalClone.jasm
- * @run main/othervm -noverify NoLocalClone
+ * @run main/othervm -XX:-BytecodeVerificationRemote -XX:-BytecodeVerificationLocal NoLocalClone
  */
 
 // The below .jasm code implements the following java code:
--- a/test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalCloneAbstr.jasm	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalCloneAbstr.jasm	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -28,7 +28,7 @@
  * @summary Check that invokevirtual of clone() calls java.lang.Object.clone()
  *          even if a superinterface has an abstract method named clone().
  * @compile DefMethClone.jasm SuperClass.jasm I1Abstr.java NoLocalCloneAbstr.jasm
- * @run main/othervm -noverify NoLocalCloneAbstr
+ * @run main/othervm -XX:-BytecodeVerificationRemote -XX:-BytecodeVerificationLocal NoLocalCloneAbstr
  */
 
 // The below .jasm code implements the following java code:
--- a/test/hotspot/jtreg/runtime/lambda-features/TestStaticandInstance.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/lambda-features/TestStaticandInstance.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, 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
@@ -26,7 +26,7 @@
  * @bug 8087342
  * @summary Test linkresolver search static, instance and overpass duplicates
  * @modules java.base/jdk.internal.org.objectweb.asm
- * @run main/othervm -Xverify:none TestStaticandInstance
+ * @run main/othervm -XX:-BytecodeVerificationRemote -XX:-BytecodeVerificationLocal TestStaticandInstance
  */
 
 
@@ -94,7 +94,7 @@
   default int q() { return 3; } // trigger defmeth processing: C gets AME overpass
 }
 
-// C gets static, private and AME overpass m()I with -Xverify:none
+// C gets static, private and AME overpass m()I with the verifier turned off
 class C implements I {
   static int m() { return 1;}  // javac with "n()" and patch to "m()"
   private int m() { return 2;} // javac with public and patch to private
--- a/test/hotspot/jtreg/runtime/logging/SafepointTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/runtime/logging/SafepointTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -41,8 +41,6 @@
                                                                   InnerClass.class.getName());
         OutputAnalyzer output = new OutputAnalyzer(pb.start());
         output.shouldContain("Safepoint synchronization initiated");
-        output.shouldContain("Entering safepoint region: ");
-        output.shouldContain("Leaving safepoint region");
         output.shouldHaveExitValue(0);
     }
 
--- a/test/hotspot/jtreg/serviceability/sa/ClhsdbJhisto.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbJhisto.java	Fri Feb 22 20:36:42 2019 +0000
@@ -36,7 +36,6 @@
  * @summary Test clhsdb jhisto command
  * @requires vm.hasSA
  * @requires vm.gc != "Shenandoah"
- * @requires vm.gc != "Z"
  * @library /test/lib
  * @run main/othervm ClhsdbJhisto
  */
--- a/test/hotspot/jtreg/serviceability/sa/TestHeapDumpForInvokeDynamic.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/TestHeapDumpForInvokeDynamic.java	Fri Feb 22 20:36:42 2019 +0000
@@ -50,7 +50,6 @@
  * @test
  * @library /test/lib
  * @requires vm.hasSAandCanAttach & os.family != "mac"
- * @requires vm.gc != "Z"
  * @modules java.base/jdk.internal.misc
  *          jdk.hotspot.agent/sun.jvm.hotspot
  *          jdk.hotspot.agent/sun.jvm.hotspot.utilities
--- a/test/hotspot/jtreg/serviceability/sa/TestHeapDumpForLargeArray.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/TestHeapDumpForLargeArray.java	Fri Feb 22 20:36:42 2019 +0000
@@ -48,7 +48,6 @@
  * @bug 8171084
  * @requires vm.hasSAandCanAttach & (vm.bits == "64" & os.maxMemory > 8g)
  * @requires vm.gc != "Shenandoah"
- * @requires vm.gc != "Z"
  * @modules java.base/jdk.internal.misc
  *          jdk.hotspot.agent/sun.jvm.hotspot
  *          jdk.hotspot.agent/sun.jvm.hotspot.utilities
--- a/test/hotspot/jtreg/serviceability/sa/TestJmapCore.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/TestJmapCore.java	Fri Feb 22 20:36:42 2019 +0000
@@ -138,19 +138,8 @@
         if (dumpFile.exists() && dumpFile.isFile()) {
             HprofParser.parse(dumpFile);
         } else {
-            boolean ZGCUsed = false;
-
-            for (String opt: Utils.getFilteredTestJavaOpts()) {
-                if (opt.contains("+UseZGC")) {
-                    ZGCUsed = true;
-                    break;
-                }
-            }
-
-            if (!ZGCUsed) {
-                throw new RuntimeException(
-                    "Could not find dump file " + dumpFile.getAbsolutePath());
-            }
+          throw new RuntimeException(
+            "Could not find dump file " + dumpFile.getAbsolutePath());
         }
 
         System.out.println("PASSED");
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdb/interrupt/interrupt001/interrupt001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdb/interrupt/interrupt001/interrupt001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -94,7 +94,13 @@
 
     static int numThreads = nsk.jdb.interrupt.interrupt001.interrupt001a.numThreads;
 
-    private static Pattern tidPattern = Pattern.compile("(0x[0-9a-f]+)");
+    /*
+     * Pattern for finding the thread ID in a line like the following:
+     *   (nsk.jdb.interrupt.interrupt001.interrupt001a$MyThread)651 Thread-0          cond. waiting
+     * Note we can't match on DEBUGGEE_THREAD because it includes a $, which Pattern
+     * uses to match the end of a line.
+     */
+    private static Pattern tidPattern = Pattern.compile("\\(.+" + MYTHREAD + "\\)(\\S+)");
 
     protected void runCases() {
         String[] reply;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/invokeMethod/invokemethod001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/invokeMethod/invokemethod001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -159,7 +159,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("location001a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/newInstance/newinstance001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/newInstance/newinstance001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -170,7 +170,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/newInstance/newinstance002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/newInstance/newinstance002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -167,7 +167,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -150,7 +150,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -143,7 +143,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue004.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue004.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -135,7 +135,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue005.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassType/setValue/setvalue005.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -132,7 +132,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/LocalVariable/isVisible/isvisible001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/LocalVariable/isVisible/isvisible001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -159,7 +159,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Locatable/location/location001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Locatable/location/location001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -133,7 +133,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("location001a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Locatable/location/location004.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Locatable/location/location004.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -148,7 +148,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Locatable/location/location005.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Locatable/location/location005.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -148,7 +148,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/codeIndex/codeindex001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/codeIndex/codeindex001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -131,7 +131,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/declaringType/declaringtype001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/declaringType/declaringtype001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -137,7 +137,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/equals/equals001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/equals/equals001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -136,7 +136,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/hashCode/hashcode001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/hashCode/hashcode001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -136,7 +136,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/lineNumber/linenumber001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/lineNumber/linenumber001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -129,7 +129,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/lineNumber_s/linenumber_s001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/lineNumber_s/linenumber_s001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -124,7 +124,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourceName/sourcename001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourceName/sourcename001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -135,7 +135,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourceName_s/sourcename_s001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourceName_s/sourcename_s001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -130,7 +130,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourcePath/sourcepath001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourcePath/sourcepath001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourcePath_s/sourcepath_s001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Location/sourcePath_s/sourcepath_s001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/allLineLocations/alllinelocations001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/allLineLocations/alllinelocations001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -125,7 +125,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/allLineLocations/alllinelocations002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/allLineLocations/alllinelocations002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -127,7 +127,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/allLineLocations_ss/alllinelocations_ss001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/allLineLocations_ss/alllinelocations_ss001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -127,7 +127,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/locationOfCodeIndex/locationofcodeindex001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/locationOfCodeIndex/locationofcodeindex001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/locationsOfLine/locationsofline001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/locationsOfLine/locationsofline001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -132,7 +132,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/locationsOfLine_ssi/locationsofline_ssi001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Method/locationsOfLine_ssi/locationsofline_ssi001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -130,7 +130,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Mirror/toString/tostring001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Mirror/toString/tostring001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -133,7 +133,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Mirror/virtualMachine/virtualmachine001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Mirror/virtualMachine/virtualmachine001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -133,7 +133,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/disableCollection/disablecollection001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/disableCollection/disablecollection001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -133,7 +133,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/entryCount/entrycount001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/entryCount/entrycount001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -134,7 +134,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/equals/equals001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/equals/equals001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -142,7 +142,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -154,7 +154,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -158,7 +158,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -135,7 +135,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue004.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValue/getvalue004.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -135,7 +135,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValues/getvalues001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValues/getvalues001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValues/getvalues002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValues/getvalues002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValues/getvalues003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/getValues/getvalues003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -142,7 +142,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/hashCode/hashcode001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/hashCode/hashcode001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -142,7 +142,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/invokeMethod/invokemethod001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -162,7 +162,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/isCollected/iscollected001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/isCollected/iscollected001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -132,7 +132,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/owningThread/owningthread001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/owningThread/owningthread001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -136,7 +136,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -137,7 +137,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -137,7 +137,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype004.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype004.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -138,7 +138,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype005.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype005.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype006.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype006.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype007.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/referenceType/referencetype007.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -138,7 +138,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/setValue/setvalue001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/setValue/setvalue001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -130,7 +130,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/uniqueID/uniqueid001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/uniqueID/uniqueid001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -131,7 +131,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/PathSearchingVirtualMachine/baseDirectory/directory001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/PathSearchingVirtualMachine/baseDirectory/directory001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -124,7 +124,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/PathSearchingVirtualMachine/bootClassPath/bootpath001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/PathSearchingVirtualMachine/bootClassPath/bootpath001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -125,7 +125,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/PrimitiveValue/doubleValue/doublevalue002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/PrimitiveValue/doubleValue/doublevalue002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -139,7 +139,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/allLineLocations/alllinelocations001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/allLineLocations/alllinelocations001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -125,7 +125,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/allLineLocations_ss/alllinelocations_ss001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/allLineLocations_ss/alllinelocations_ss001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -124,7 +124,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/availableStrata/availablestrata001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/availableStrata/availablestrata001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -131,7 +131,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/defaultStratum/defaultstratum001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/defaultStratum/defaultstratum001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/locationsOfLine_i/locationsofline_i001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/locationsOfLine_i/locationsofline_i001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -127,7 +127,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/locationsOfLine_ssi/locationsofline_ssi001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/locationsOfLine_ssi/locationsofline_ssi001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/sourceNames/sourcenames001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/sourceNames/sourcenames001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -130,7 +130,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/sourcePaths/sourcepaths001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/sourcePaths/sourcepaths001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -131,7 +131,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/location/location001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/location/location001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -160,7 +160,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("location001a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/setValue/setvalue003/setvalue003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/setValue/setvalue003/setvalue003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -247,7 +247,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/thisObject/thisobject001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/thisObject/thisobject001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -156,7 +156,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/thisObject/thisobject002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/thisObject/thisobject002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -155,7 +155,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/thread/thread001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/thread/thread001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -153,7 +153,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("location001a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariableByName/visiblevarbyname001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariableByName/visiblevarbyname001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -158,7 +158,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariableByName/visiblevarbyname002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariableByName/visiblevarbyname002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -149,7 +149,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariables/visiblevariables001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariables/visiblevariables001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -153,7 +153,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariables/visiblevariables002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/StackFrame/visibleVariables/visiblevariables002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -150,7 +150,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/name/name001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/name/name001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -154,7 +154,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/parent/parent001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/parent/parent001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -156,7 +156,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/resume/resume001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/resume/resume001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -153,7 +153,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/suspend/suspend001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/suspend/suspend001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -152,7 +152,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/threadGroups/threadgroups001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/threadGroups/threadgroups001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -151,7 +151,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/threads/threads001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadGroupReference/threads/threads001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -151,7 +151,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/currentContendedMonitor/currentcm001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/currentContendedMonitor/currentcm001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -144,7 +144,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frame/frame001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frame/frame001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -170,7 +170,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frameCount/framecount001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frameCount/framecount001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -161,7 +161,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frames/frames001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frames/frames001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -175,7 +175,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frames_ii/frames_ii001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frames_ii/frames_ii001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -176,7 +176,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frames_ii/frames_ii002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/frames_ii/frames_ii002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -159,7 +159,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/interrupt/interrupt001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/interrupt/interrupt001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -153,7 +153,7 @@
         pipe = debuggee.createIOPipe();
 
         debuggee.redirectStderr(out);
-        log2("interrupt002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         try {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/isAtBreakpoint/isatbreakpoint001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/isAtBreakpoint/isatbreakpoint001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -153,7 +153,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/isSuspended/issuspended002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/isSuspended/issuspended002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -159,7 +159,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/name/name001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/name/name001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -148,7 +148,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/resume/resume001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/resume/resume001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -153,7 +153,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/stop/stop001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/stop/stop001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -154,7 +154,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/suspend/suspend001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/suspend/suspend001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -152,7 +152,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/suspendCount/suspendcount001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/suspendCount/suspendcount001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -152,7 +152,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/threadGroup/threadgroup001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/threadGroup/threadgroup001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -161,7 +161,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Value/_itself_/value001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Value/_itself_/value001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -146,7 +146,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/Value/type/type002/type002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/Value/type/type002/type002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -196,7 +196,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/allThreads/allthreads001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/allThreads/allthreads001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -155,7 +155,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("location001a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetBytecodes/cangetbytecodes001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetBytecodes/cangetbytecodes001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -140,7 +140,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetCurrentContendedMonitor/cangccm001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetCurrentContendedMonitor/cangccm001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -151,7 +151,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetMonitorInfo/cangetmonitorinfo001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetMonitorInfo/cangetmonitorinfo001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -159,7 +159,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetOwnedMonitorInfo/cangetinfo001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetOwnedMonitorInfo/cangetinfo001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -151,7 +151,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetSourceDebugExtension/cangetsde001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetSourceDebugExtension/cangetsde001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -123,7 +123,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetSyntheticAttribute/cangetattr001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canGetSyntheticAttribute/cangetattr001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -140,7 +140,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/description/description001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/description/description001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -124,7 +124,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -134,7 +134,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -150,7 +150,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -143,7 +143,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose004.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose004.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -144,7 +144,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose005.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose005.java	Fri Feb 22 20:36:42 2019 +0000
@@ -192,7 +192,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/eventQueue/eventqueue001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/eventQueue/eventqueue001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -133,7 +133,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/eventRequestManager/eventrmanager001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/eventRequestManager/eventrmanager001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -134,7 +134,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/exit/exit001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/exit/exit001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -136,7 +136,7 @@
         IOPipe pipe = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/exit/exit002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/exit/exit002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -135,7 +135,7 @@
         IOPipe pipe = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/getDefaultStratum/getdefaultstratum001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/getDefaultStratum/getdefaultstratum001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/name/name001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/name/name001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -124,7 +124,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/process/process001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/process/process001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/setDefaultStratum/setdefaultstratum001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/setDefaultStratum/setdefaultstratum001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/suspend/suspend001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/suspend/suspend001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -155,7 +155,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/topLevelThreadGroups/toplevelgroups001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/topLevelThreadGroups/toplevelgroups001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -128,7 +128,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/version/version001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/version/version001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -124,7 +124,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachineManager/connectedVirtualMachines/convm001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachineManager/connectedVirtualMachines/convm001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -143,7 +143,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachineManager/connectedVirtualMachines/convm002.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachineManager/connectedVirtualMachines/convm002.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -145,7 +145,7 @@
         IOPipe pipe = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachineManager/connectedVirtualMachines/convm003.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachineManager/connectedVirtualMachines/convm003.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -142,7 +142,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("issuspended002a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VoidValue/equals/equals001/equals001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VoidValue/equals/equals001/equals001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -204,7 +204,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VoidValue/hashCode/hashcode001/hashcode001.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VoidValue/hashCode/hashcode001/hashcode001.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -204,7 +204,7 @@
         IOPipe pipe     = new IOPipe(debuggee);
 
         debuggee.redirectStderr(out);
-        log2("setvalue003a debuggee launched");
+        log2(debuggeeName + " debuggee launched");
         debuggee.resume();
 
         String line = pipe.readln();
--- a/test/jaxp/TEST.ROOT	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jaxp/TEST.ROOT	Fri Feb 22 20:36:42 2019 +0000
@@ -23,7 +23,7 @@
 groups=TEST.groups
 
 # Minimum jtreg version
-requiredVersion=4.2 b13
+requiredVersion=4.2 b14
 
 # Path to libraries in the topmost test directory. This is needed so @library
 # does not need ../../ notation to reach them
--- a/test/jdk/ProblemList-Xcomp.txt	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/ProblemList-Xcomp.txt	Fri Feb 22 20:36:42 2019 +0000
@@ -28,5 +28,4 @@
 #############################################################################
 
 java/lang/invoke/MethodHandles/CatchExceptionTest.java 8146623 generic-all
-java/util/concurrent/CountDownLatch/Basic.java 8195057 generic-all
 java/util/stream/test/org/openjdk/tests/java/util/stream/StreamLinkTest.java 8216317 solaris-all
--- a/test/jdk/ProblemList.txt	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/ProblemList.txt	Fri Feb 22 20:36:42 2019 +0000
@@ -114,8 +114,6 @@
 
 # jdk_awt
 
-java/awt/BasicStroke/DashScaleMinWidth.java 8198411 windows-all
-java/awt/BasicStroke/DashZeroWidth.java 8198411 windows-all
 java/awt/event/MouseEvent/MouseClickTest/MouseClickTest.html 8168389 windows-all,macosx-all
 java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8168408 windows-all,macosx-all
 java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all
--- a/test/jdk/TEST.ROOT	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/TEST.ROOT	Fri Feb 22 20:36:42 2019 +0000
@@ -49,7 +49,7 @@
     release.implementor
 
 # Minimum jtreg version
-requiredVersion=4.2 b13
+requiredVersion=4.2 b14
 
 # Path to libraries in the topmost test directory. This is needed so @library
 # does not need ../../ notation to reach them
@@ -60,3 +60,6 @@
 
 # Use --patch-module instead of -Xmodule:
 useNewPatchModule=true
+
+# disabled till JDK-8219408 is fixed
+allowSmartActionArgs=false
--- a/test/jdk/TEST.groups	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/TEST.groups	Fri Feb 22 20:36:42 2019 +0000
@@ -375,7 +375,8 @@
     :jdk_swing \
     :jdk_sound \
     :jdk_imageio \
-    :jfc_demo
+    :jfc_demo \
+    :jdk_client_sanity
 
 # SwingSet3 tests.
 jdk_client_sanity = \
--- a/test/jdk/com/sun/java/swing/plaf/windows/AltFocusIssueTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/com/sun/java/swing/plaf/windows/AltFocusIssueTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -21,13 +21,15 @@
  * questions.
  */
 
-/* @test
-   @bug 8211987
-   @requires (os.family == "windows")
-   @summary Verify if Menu bar gets input focus even if Alt-released event is consumed.
-   @modules java.desktop/com.sun.java.swing.plaf.windows
-   @run main AltFocusIssueTest
-*/
+/**
+ * @test
+ * @bug 8211987
+ * @key headful
+ * @requires (os.family == "windows")
+ * @summary Verify if Menu bar gets input focus even if Alt-released event is consumed.
+ * @modules java.desktop/com.sun.java.swing.plaf.windows
+ * @run main AltFocusIssueTest
+ */
 
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
@@ -145,7 +147,9 @@
         try {
             testAltEvents();
         } finally {
-            SwingUtilities.invokeAndWait(() -> frame.dispose());
+            if (frame != null) {
+                SwingUtilities.invokeAndWait(() -> frame.dispose());
+            }
         }
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/BasicStroke/DashOffset.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,241 @@
+/*
+ * 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
+ * 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.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.awt.image.IndexColorModel;
+import java.awt.image.VolatileImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+import javax.imageio.ImageIO;
+
+import static java.awt.image.BufferedImage.TYPE_INT_RGB;
+
+/*
+ * @test
+ * @bug 4469881 8217263 8218682
+ * @key headful
+ * @summary Verifies that dashed rectangles drawn to the screen line
+ *          up with their undashed counterparts
+ * @author flar
+ * @run main/othervm -Dsun.java2d.uiScale=1 DashOffset
+ */
+public class DashOffset {
+
+    private static final BasicStroke dash =
+            new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
+                            BasicStroke.JOIN_MITER, 10.0f,
+                            new float[] {2.0f, 2.0f}, 0.0f);
+
+    private static final Color COLOR1 = Color.BLUE;
+    private static final Color COLOR2 = Color.GREEN;
+
+    private static final Color BACKGROUND = Color.WHITE;
+
+    private static final int WIDTH = 20;
+    private static final int HEIGHT = 20;
+
+    private static final int OFFSET = 2;
+
+    private static final int MAX_DASH_LENGTH = 3;
+
+    public static void main(String[] argv) throws Exception {
+        final boolean saveImage = argv.length > 0 && "-save".equals(argv[0]);
+
+        final BufferedImage img = new BufferedImage(WIDTH, HEIGHT,
+                                                    TYPE_INT_RGB);
+        try {
+            draw(img);
+            validate(img);
+        } finally {
+            if (saveImage) {
+                save(img, "bufferedImage.png");
+            }
+        }
+
+        BufferedImage snapshot = null;
+        try {
+            final GraphicsConfiguration gc =
+                    GraphicsEnvironment.getLocalGraphicsEnvironment()
+                                       .getDefaultScreenDevice()
+                                       .getDefaultConfiguration();
+            if (gc.getColorModel() instanceof IndexColorModel) {
+                System.err.println("Skipping VolatileImage because of IndexColorModel");
+                return;
+            }
+
+            VolatileImage vi = gc.createCompatibleVolatileImage(WIDTH, HEIGHT);
+            int attempt = 0;
+            do {
+                vi.validate(gc);
+                draw(vi);
+                snapshot = vi.getSnapshot();
+            } while (vi.contentsLost() && ++attempt <= 10);
+            if (attempt > 10) {
+                throw new RuntimeException("Too many attempts: " + attempt);
+            }
+            validate(snapshot);
+        } finally {
+            if (saveImage && snapshot != null) {
+                save(snapshot, "volatileImage.png");
+            }
+        }
+    }
+
+    private static void draw(final Image img) {
+        Graphics g = img.getGraphics();
+        g.setColor(BACKGROUND);
+        g.fillRect(0, 0, WIDTH, HEIGHT);
+        g.setColor(COLOR1);
+        g.drawRect(OFFSET, OFFSET, WIDTH - OFFSET * 2, HEIGHT - OFFSET * 2);
+        g.setColor(COLOR2);
+        g.clipRect(OFFSET, OFFSET, WIDTH - OFFSET * 2 + 1, HEIGHT - OFFSET * 2 + 1);
+        ((Graphics2D) g).setStroke(dash);
+        g.drawRect(OFFSET, OFFSET, WIDTH - OFFSET * 2, HEIGHT - OFFSET * 2);
+        g.dispose();
+    }
+
+    private static void validate(final BufferedImage img) {
+        checkHorizontalLine(img, OFFSET);
+        checkHorizontalLine(img, HEIGHT - OFFSET);
+        checkVerticalLine(img, OFFSET);
+        checkVerticalLine(img, WIDTH - OFFSET);
+        checkCorners(img);
+    }
+
+    private static void checkHorizontalLine(final BufferedImage img,
+                                            final int y) {
+        int prev = img.getRGB(OFFSET, y);
+        int curr;
+        int count = 1;
+        checkColor(OFFSET, y, prev, COLOR1, COLOR2);
+        for (int x = OFFSET + 1; x <= WIDTH - OFFSET; x++) {
+            curr = img.getRGB(x, y);
+            if (curr != prev) {
+                checkColor(x, y, curr, COLOR1, COLOR2);
+                checkCount(x, y, count);
+                prev = curr;
+                count = 1;
+            } else {
+                count++;
+            }
+            if (x < WIDTH - OFFSET) {
+                checkColor(x, y - 1, img.getRGB(x, y - 1), BACKGROUND);
+                checkColor(x, y + 1, img.getRGB(x, y + 1), BACKGROUND);
+            }
+        }
+        checkCount(WIDTH - OFFSET, y, count);
+    }
+
+    private static void checkVerticalLine(final BufferedImage img,
+                                          final int x) {
+        int prev = img.getRGB(x, OFFSET);
+        checkColor(x, OFFSET, prev, COLOR1, COLOR2);
+        int count = 1;
+        for (int y = OFFSET + 1; y <= HEIGHT - OFFSET; y++) {
+            int curr = img.getRGB(x, y);
+            if (curr != prev) {
+                checkColor(x, y, curr, COLOR1, COLOR2);
+                checkCount(x, y, count);
+                prev = curr;
+                count = 1;
+            } else {
+                count++;
+            }
+            if (y < HEIGHT - OFFSET) {
+                checkColor(x - 1, y, img.getRGB(x - 1, y), BACKGROUND);
+                checkColor(x + 1, y, img.getRGB(x + 1, y), BACKGROUND);
+            }
+        }
+        checkCount(x, HEIGHT - OFFSET, count);
+    }
+
+    private static void checkCorners(final BufferedImage img) {
+        int[][] corners = {
+                {OFFSET - 1, OFFSET - 1},
+                {OFFSET,     OFFSET - 1},
+                {OFFSET - 1, OFFSET + 1},
+
+                {OFFSET - 1, HEIGHT - OFFSET},
+                {OFFSET - 1, HEIGHT - OFFSET + 1},
+                {OFFSET,     HEIGHT - OFFSET + 1},
+
+                {WIDTH - OFFSET,     OFFSET - 1},
+                {WIDTH - OFFSET + 1, OFFSET - 1},
+                {WIDTH - OFFSET + 1, OFFSET},
+
+                {WIDTH - OFFSET + 1, HEIGHT - OFFSET},
+                {WIDTH - OFFSET + 1, HEIGHT - OFFSET + 1},
+                {WIDTH - OFFSET,     HEIGHT - OFFSET + 1},
+        };
+
+        for (int[] corner : corners) {
+            int color = img.getRGB(corner[0], corner[1]);
+            checkColor(corner[0], corner[1], color, BACKGROUND);
+        }
+    }
+
+    private static void checkColor(final int x, final int y,
+                                   final int color,
+                                   final Color... validColors) {
+        checkColor(x, y, color, Arrays.stream(validColors)
+                                      .mapToInt(Color::getRGB)
+                                      .toArray());
+    }
+
+    private static void checkColor(final int x, final int y,
+                                   final int color,
+                                   final int... validColors) {
+        for (int valid : validColors) {
+            if (color == valid) {
+                return;
+            }
+        }
+        throw new RuntimeException("Unexpected color at " + x + ", " + y
+                + ": " + Integer.toHexString(color) + "; expected: "
+                + Arrays.stream(validColors)
+                        .mapToObj(Integer::toHexString)
+                        .collect(Collectors.joining(", ")));
+    }
+
+    private static void checkCount(final int x, final int y, final int count) {
+        if (count > MAX_DASH_LENGTH) {
+            throw new RuntimeException("Dash is longer than " + MAX_DASH_LENGTH
+                    + " at " + x + ", " + y);
+        }
+    }
+
+    private static void save(final BufferedImage img,
+                             final String fileName) throws IOException {
+        ImageIO.write(img, "png", new File(fileName));
+    }
+
+}
--- a/test/jdk/java/awt/BasicStroke/DashScaleMinWidth.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/awt/BasicStroke/DashScaleMinWidth.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, 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
@@ -29,13 +29,15 @@
 import java.awt.Image;
 import java.awt.geom.Line2D;
 import java.awt.image.BufferedImage;
+import java.awt.image.IndexColorModel;
 import java.awt.image.VolatileImage;
 
 import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
 
 /**
  * @test
- * @bug 4917097 8019816
+ * @bug 4917097 8019816 8198411
+ * @key headful
  * @summary 1.4.1 REGRESSION: BasicStroke Dashes don't show when scale * line width = 1.0
  * @run main/othervm -Dsun.java2d.uiScale=1 DashScaleMinWidth
  */
@@ -46,13 +48,13 @@
         draw(img);
         validate(img);
 
-        if (GraphicsEnvironment.isHeadless()) {
-            return;
-        }
-
         GraphicsConfiguration gc =
                 GraphicsEnvironment.getLocalGraphicsEnvironment()
                         .getDefaultScreenDevice().getDefaultConfiguration();
+        if (gc.getColorModel() instanceof IndexColorModel) {
+            System.err.println("Skipping VolatileImage because of IndexColorModel");
+            return;
+        }
 
         VolatileImage vi = gc.createCompatibleVolatileImage(200, 40);
         BufferedImage snapshot;
--- a/test/jdk/java/awt/BasicStroke/DashZeroWidth.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/awt/BasicStroke/DashZeroWidth.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, 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
@@ -29,13 +29,15 @@
 import java.awt.Image;
 import java.awt.geom.Line2D;
 import java.awt.image.BufferedImage;
+import java.awt.image.IndexColorModel;
 import java.awt.image.VolatileImage;
 
 import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
 
 /**
  * @test
- * @bug 4779211 8019816
+ * @bug 4779211 8019816 8198411
+ * @key headful
  * @summary REGRESSION: 1.4 Dashed lines disappear if BasicStroke width=0.0
  * @run main/othervm -Dsun.java2d.uiScale=1 DashZeroWidth
  */
@@ -46,13 +48,13 @@
         draw(img);
         validate(img);
 
-        if (GraphicsEnvironment.isHeadless()) {
-            return;
-        }
-
         GraphicsConfiguration gc =
                 GraphicsEnvironment.getLocalGraphicsEnvironment()
                         .getDefaultScreenDevice().getDefaultConfiguration();
+        if (gc.getColorModel() instanceof IndexColorModel) {
+            System.err.println("Skipping VolatileImage because of IndexColorModel");
+            return;
+        }
 
         VolatileImage vi = gc.createCompatibleVolatileImage(200, 40);
         BufferedImage snapshot;
--- a/test/jdk/java/lang/instrument/appendToClassLoaderSearch/ClassUnloadTest.sh	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/lang/instrument/appendToClassLoaderSearch/ClassUnloadTest.sh	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -80,5 +80,5 @@
 
 # Finally we run the test
 (cd "${TESTCLASSES}"; \
-  $JAVA ${TESTVMOPTS} -Xverify:none -Xlog:class+unload \
+  $JAVA ${TESTVMOPTS} -Xlog:class+unload \
     -javaagent:ClassUnloadTest.jar ClassUnloadTest "${OTHERDIR}" Bar.jar)
--- a/test/jdk/java/nio/Buffer/Basic-X.java.template	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/Basic-X.java.template	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet($Type$Buffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        $type$[] a = new $type$[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)(($type$)ic(i)));
+        }
+    }
+
     private static void relPut($Type$Buffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray($Type$Buffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        $type$[] a = new $type$[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = ($type$)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset($Type$Buffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 #if[char]
 
         bulkPutString(b);
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, ($type$[])null, 0, 42));
+
+        $type$[] tmpa = new $type$[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put($Type$Buffer) should not change source position
         final $Type$Buffer src = $Type$Buffer.allocate(1);
@@ -903,6 +960,13 @@
         b.position(6);
         ck(b, b.subSequence(0,3).toString().equals("ghi"));
 
+        // absolute bulk get
+        char[] c = new char[end + 1 - (start - 1) + 1]; // [start - 1, end + 1]
+        b.limit(end + 2);
+        b.get(start - 1, c, 0, c.length);
+        for (int i = 0; i < c.length; i++)
+            ck(b, c[i], s.charAt(start - 1 + i));
+
         // The index, relative to the position, must be non-negative and
         // smaller than remaining().
         catchIndexOutOfBounds(b, () -> b.charAt(-1));
--- a/test/jdk/java/nio/Buffer/Basic.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/Basic.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -24,9 +24,9 @@
 /* @test
  * @summary Unit test for buffers
  * @bug 4413135 4414911 4416536 4416562 4418782 4471053 4472779 4490253 4523725
- *      4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 6231529
- *      6221101 6234263 6535542 6591971 6593946 6795561 7190219 7199551 8065556
- *      8149469
+ *      4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 5029431
+ *      6231529 6221101 6234263 6535542 6591971 6593946 6795561 7190219 7199551
+ *      8065556 8149469
  * @modules java.base/java.nio:open
  *          java.base/jdk.internal.misc
  * @author Mark Reinhold
--- a/test/jdk/java/nio/Buffer/BasicByte.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicByte.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(ByteBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        byte[] a = new byte[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((byte)ic(i)));
+        }
+    }
+
     private static void relPut(ByteBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(ByteBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        byte[] a = new byte[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (byte)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(ByteBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
 
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (byte[])null, 0, 42));
+
+        byte[] tmpa = new byte[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(ByteBuffer) should not change source position
         final ByteBuffer src = ByteBuffer.allocate(1);
@@ -928,6 +985,13 @@
 
 
 
+
+
+
+
+
+
+
     public static void test(final byte [] ba) {
         int offset = 47;
         int length = 900;
--- a/test/jdk/java/nio/Buffer/BasicChar.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicChar.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(CharBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        char[] a = new char[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((char)ic(i)));
+        }
+    }
+
     private static void relPut(CharBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(CharBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        char[] a = new char[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (char)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(CharBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
         bulkPutString(b);
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (char[])null, 0, 42));
+
+        char[] tmpa = new char[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(CharBuffer) should not change source position
         final CharBuffer src = CharBuffer.allocate(1);
@@ -903,6 +960,13 @@
         b.position(6);
         ck(b, b.subSequence(0,3).toString().equals("ghi"));
 
+        // absolute bulk get
+        char[] c = new char[end + 1 - (start - 1) + 1]; // [start - 1, end + 1]
+        b.limit(end + 2);
+        b.get(start - 1, c, 0, c.length);
+        for (int i = 0; i < c.length; i++)
+            ck(b, c[i], s.charAt(start - 1 + i));
+
         // The index, relative to the position, must be non-negative and
         // smaller than remaining().
         catchIndexOutOfBounds(b, () -> b.charAt(-1));
--- a/test/jdk/java/nio/Buffer/BasicDouble.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicDouble.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(DoubleBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        double[] a = new double[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((double)ic(i)));
+        }
+    }
+
     private static void relPut(DoubleBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(DoubleBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        double[] a = new double[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (double)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(DoubleBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
 
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (double[])null, 0, 42));
+
+        double[] tmpa = new double[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(DoubleBuffer) should not change source position
         final DoubleBuffer src = DoubleBuffer.allocate(1);
@@ -928,6 +985,13 @@
 
 
 
+
+
+
+
+
+
+
     public static void test(final double [] ba) {
         int offset = 47;
         int length = 900;
--- a/test/jdk/java/nio/Buffer/BasicFloat.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicFloat.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(FloatBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        float[] a = new float[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((float)ic(i)));
+        }
+    }
+
     private static void relPut(FloatBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(FloatBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        float[] a = new float[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (float)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(FloatBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
 
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (float[])null, 0, 42));
+
+        float[] tmpa = new float[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(FloatBuffer) should not change source position
         final FloatBuffer src = FloatBuffer.allocate(1);
@@ -928,6 +985,13 @@
 
 
 
+
+
+
+
+
+
+
     public static void test(final float [] ba) {
         int offset = 47;
         int length = 900;
--- a/test/jdk/java/nio/Buffer/BasicInt.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicInt.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(IntBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        int[] a = new int[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((int)ic(i)));
+        }
+    }
+
     private static void relPut(IntBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(IntBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        int[] a = new int[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (int)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(IntBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
 
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (int[])null, 0, 42));
+
+        int[] tmpa = new int[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(IntBuffer) should not change source position
         final IntBuffer src = IntBuffer.allocate(1);
@@ -928,6 +985,13 @@
 
 
 
+
+
+
+
+
+
+
     public static void test(final int [] ba) {
         int offset = 47;
         int length = 900;
--- a/test/jdk/java/nio/Buffer/BasicLong.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicLong.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(LongBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        long[] a = new long[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((long)ic(i)));
+        }
+    }
+
     private static void relPut(LongBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(LongBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        long[] a = new long[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (long)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(LongBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
 
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (long[])null, 0, 42));
+
+        long[] tmpa = new long[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(LongBuffer) should not change source position
         final LongBuffer src = LongBuffer.allocate(1);
@@ -928,6 +985,13 @@
 
 
 
+
+
+
+
+
+
+
     public static void test(final long [] ba) {
         int offset = 47;
         int length = 900;
--- a/test/jdk/java/nio/Buffer/BasicShort.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/nio/Buffer/BasicShort.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,18 @@
         }
     }
 
+    private static void absBulkGet(ShortBuffer b) {
+        int n = b.capacity();
+        int len = n - 7*2;
+        short[] a = new short[n + 7];
+        b.position(42);
+        b.get(7, a, 7, len);
+        ck(b, b.position() == 42);
+        for (int i = 0; i < len; i++) {
+            ck(b, (long)a[i + 7], (long)((short)ic(i)));
+        }
+    }
+
     private static void relPut(ShortBuffer b) {
         int n = b.capacity();
         b.clear();
@@ -136,6 +148,20 @@
         }
     }
 
+    private static void absBulkPutArray(ShortBuffer b) {
+        int n = b.capacity();
+        b.clear();
+        int lim = n - 7;
+        int len = lim - 7;
+        b.limit(lim);
+        short[] a = new short[len + 7];
+        for (int i = 0; i < len; i++)
+            a[i + 7] = (short)ic(i);
+        b.position(42);
+        b.put(7, a, 7, len);
+        ck(b, b.position() == 42);
+    }
+
     //6231529
     private static void callReset(ShortBuffer b) {
         b.position(0);
@@ -452,6 +478,10 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
+    private static void catchNullArgument(Buffer b, Runnable thunk) {
+        tryCatch(b, NullPointerException.class, thunk);
+    }
+
     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
         tryCatch(b, IllegalArgumentException.class, thunk);
     }
@@ -476,7 +506,10 @@
             if (ex.isAssignableFrom(x.getClass())) {
                 caught = true;
             } else {
-                fail(x.getMessage() + " not expected");
+                String s = x.getMessage();
+                if (s == null)
+                    s = x.getClass().getName();
+                fail(s + " not expected");
             }
         }
         if (!caught) {
@@ -513,6 +546,9 @@
         bulkPutBuffer(b);
         relGet(b);
 
+        absBulkPutArray(b);
+        absBulkGet(b);
+
 
 
 
@@ -612,6 +648,26 @@
             }
         }
 
+        // Exceptions in absolute bulk operations
+
+        catchNullArgument(b, () -> b.get(7, null, 0, 42));
+        catchNullArgument(b, () -> b.put(7, (short[])null, 0, 42));
+
+        short[] tmpa = new short[42];
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.get(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.get(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.get(b.limit() - 41, tmpa, 0, 42));
+
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, -1, 42));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 42, 1));
+        catchIndexOutOfBounds(b, () -> b.put(7, tmpa, 41, -1));
+        catchIndexOutOfBounds(b, () -> b.put(-1, tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit(), tmpa, 0, 1));
+        catchIndexOutOfBounds(b, () -> b.put(b.limit() - 41, tmpa, 0, 42));
+
         // Values
 
         b.clear();
@@ -819,6 +875,7 @@
         catchReadOnlyBuffer(b, () -> absPut(rb));
         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
+        catchReadOnlyBuffer(b, () -> absBulkPutArray(rb));
 
         // put(ShortBuffer) should not change source position
         final ShortBuffer src = ShortBuffer.allocate(1);
@@ -928,6 +985,13 @@
 
 
 
+
+
+
+
+
+
+
     public static void test(final short [] ba) {
         int offset = 47;
         int length = 900;
--- a/test/jdk/java/util/Base64/TestEncodingDecodingLength.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/util/Base64/TestEncodingDecodingLength.java	Fri Feb 22 20:36:42 2019 +0000
@@ -30,7 +30,7 @@
  * @bug 8210583 8217969 8218265
  * @summary Tests Base64.Encoder.encode and Base64.Decoder.decode
  *          with the large size of input array/buffer
- * @requires os.maxMemory >= 8g
+ * @requires os.maxMemory >= 10g
  * @run main/othervm -Xms6g -Xmx8g TestEncodingDecodingLength
  *
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/logging/IsLoggableHandlerTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,96 @@
+/*
+ * 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 8216363
+ * @summary Test that Handler.isLoggable(null) returns false
+ * @run main/othervm IsLoggableHandlerTest
+ */
+import java.io.File;
+import java.io.IOException;
+import java.util.UUID;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.FileHandler;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.MemoryHandler;
+import java.util.logging.StreamHandler;
+import java.util.stream.Stream;
+
+public class IsLoggableHandlerTest {
+
+
+    public static void main(String... args) throws IOException {
+        String userDir = System.getProperty("user.dir", ".");
+        File logfile = new File(userDir, "IsLoggableHandlerTest_" + UUID.randomUUID() + ".log");
+        try {
+            System.out.println("Dummy logfile: " + logfile.getAbsolutePath());
+            Handler h = new CustomHandler();
+            testIsLoggable(h);
+            testIsLoggable(new MemoryHandler(h, 1, Level.ALL));
+            testIsLoggable(new StreamHandler(System.out, new java.util.logging.SimpleFormatter()));
+            testIsLoggable(new FileHandler(logfile.getAbsolutePath()));
+            testIsLoggable(new ConsoleHandler());
+        } finally {
+            if (logfile.canRead()) {
+                try {
+                    System.out.println("Deleting dummy logfile: " + logfile.getAbsolutePath());
+                    logfile.delete();
+                } catch (Throwable t) {
+                    System.out.println("Warning: failed to delete dummy logfile: " + t);
+                    t.printStackTrace();
+                }
+            }
+        }
+    }
+
+    public static void testIsLoggable(Handler h) {
+        System.out.println("Testing " + h.getClass().getName());
+        // should not throw NPE but return false
+        if (h.isLoggable(null)) {
+            throw new AssertionError(h.getClass().getName()
+                    + ": null record should not be loggable");
+        }
+        h.setLevel(Level.ALL);
+        // should still not throw NPE but return false
+        if (h.isLoggable(null)) {
+            throw new AssertionError(h.getClass().getName()
+                    + ": null record should not be loggable");
+        }
+        // should not throw NPE
+        h.publish(null);
+    }
+
+    public static final class CustomHandler extends Handler {
+        @Override
+        public void publish(LogRecord record) { }
+        @Override
+        public void flush() { }
+        @Override
+        public void close() throws SecurityException { }
+    }
+
+
+}
--- a/test/jdk/java/util/logging/TestLoggerWeakRefLeak.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/java/util/logging/TestLoggerWeakRefLeak.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -123,7 +123,7 @@
     }
 
     /**
-     * 'vm.heapHisto("-live")' will request a full GC
+     * 'vm.heapHisto("", "-live")' will request a full GC
      */
     private static int getInstanceCountFromHeapHisto() throws AttachNotSupportedException, Exception {
         int instanceCount = 0;
@@ -131,7 +131,7 @@
         HotSpotVirtualMachine vm = (HotSpotVirtualMachine) VirtualMachine
                 .attach(Long.toString(ProcessTools.getProcessId()));
         try {
-            try (InputStream heapHistoStream = vm.heapHisto("-live");
+            try (InputStream heapHistoStream = vm.heapHisto("", "-live");
                     BufferedReader in = new BufferedReader(new InputStreamReader(heapHistoStream))) {
                 String inputLine;
                 while ((inputLine = in.readLine()) != null) {
--- a/test/jdk/javax/net/ssl/interop/ClientHelloBufferUnderflowException.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/javax/net/ssl/interop/ClientHelloBufferUnderflowException.java	Fri Feb 22 20:36:42 2019 +0000
@@ -28,7 +28,7 @@
 
 /*
  * @test
- * @bug 8215790
+ * @bug 8215790 8219389
  * @summary Verify exception
  * @modules java.base/sun.security.util
  * @run main/othervm ClientHelloBufferUnderflowException
@@ -45,12 +45,15 @@
         try {
             (new ClientHelloBufferUnderflowException()).run();
         } catch (SSLHandshakeException e) {
-            System.out.println("Correct exception thrown");
+            System.out.println("Correct exception thrown: " + e);
+            return;
         } catch (Exception e) {
             System.out.println("Failed: Exception not SSLHandShakeException");
             System.out.println(e.getMessage());
             throw e;
         }
+
+        throw new Exception("No expected exception");
     }
 
     @Override
@@ -76,6 +79,7 @@
         } catch (Exception e) {
             // ignore
         }
+
         return bytes;
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/internal/jline/AbstractWindowsTerminalTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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.
+ *
+ * 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 8218287
+ * @summary Verify the wrapper input stream is used when using Terminal.reader()
+ * @modules jdk.internal.le/jdk.internal.org.jline.terminal
+ *          jdk.internal.le/jdk.internal.org.jline.terminal.impl
+ *          jdk.internal.le/jdk.internal.org.jline.utils
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Function;
+
+import jdk.internal.org.jline.terminal.Size;
+import jdk.internal.org.jline.terminal.Terminal.SignalHandler;
+import jdk.internal.org.jline.terminal.impl.AbstractWindowsTerminal;
+
+
+public class AbstractWindowsTerminalTest {
+    public static void main(String... args) throws IOException {
+        new AbstractWindowsTerminalTest().run();
+    }
+
+    void run() throws IOException {
+        var out = new StringWriter();
+        AtomicBoolean called = new AtomicBoolean();
+        Function<InputStream, InputStream> isWrapper = is -> new InputStream() {
+            @Override
+            public int read() throws IOException {
+                called.set(true);
+                return is.read();
+            }
+        };
+        var t = new AbstractWindowsTerminal(out, "test", "vt100", null, -1, false, SignalHandler.SIG_DFL, isWrapper) {
+            @Override
+            protected int getConsoleOutputCP() {
+                throw new UnsupportedOperationException("unexpected.");
+            }
+
+            @Override
+            protected int getConsoleMode() {
+                return -1;
+            }
+
+            @Override
+            protected void setConsoleMode(int mode) {
+                throw new UnsupportedOperationException("unexpected.");
+            }
+
+            @Override
+            protected boolean processConsoleInput() throws IOException {
+                throw new UnsupportedOperationException("unexpected.");
+            }
+
+            @Override
+            public Size getSize() {
+                throw new UnsupportedOperationException("unexpected.");
+            }
+        };
+        t.processInputChar(' ');
+        if (t.reader().read() != ' ') {
+            throw new AssertionError("Unexpected input!");
+        }
+        if (!called.get()) {
+            throw new AssertionError("The wrapper was not called!");
+        }
+    }
+}
--- a/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java	Fri Feb 22 20:36:42 2019 +0000
@@ -55,7 +55,6 @@
     static final String[] EVENT_NAMES = new String[] {
         EventNames.SafepointBegin,
         EventNames.SafepointStateSynchronization,
-        EventNames.SafepointWaitBlocked,
         EventNames.SafepointCleanup,
         EventNames.SafepointCleanupTask,
         EventNames.SafepointEnd
--- a/test/jdk/sun/security/ssl/SSLContextImpl/BadKSProvider.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/sun/security/ssl/SSLContextImpl/BadKSProvider.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, 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,14 +21,16 @@
  * questions.
  */
 
+//
+// SunJSSE does not support dynamic system properties, no way to re-use
+// system properties in samevm/agentvm mode.
+//
+
 /*
  * @test
- * @bug 4919147
+ * @bug 4919147 8168069
  * @summary Support for token-based KeyStores
  * @run main/othervm BadKSProvider
- *
- *     SunJSSE does not support dynamic system properties, no way to re-use
- *     system properties in samevm/agentvm mode.
  */
 
 import java.io.*;
@@ -176,16 +178,16 @@
             // catching the exception is ok,
             // but let's try to confirm it is the right exception.
             //
-            // XXX this test must be updated if the exception message changes
+            // Note: this test must be updated if the exception message changes
 
             Throwable cause = se.getCause();
-            if (cause instanceof java.security.NoSuchAlgorithmException == false) {
+            if (!(cause instanceof java.security.NoSuchAlgorithmException)) {
                 se.printStackTrace();
                 throw new Exception("Unexpected exception" + se);
             }
 
             cause = cause.getCause();
-            if (cause instanceof java.security.NoSuchProviderException == false) {
+            if (!(cause instanceof java.security.KeyManagementException)) {
                 se.printStackTrace();
                 throw new Exception("Unexpected exception" + se);
             }
--- a/test/jdk/sun/security/ssl/SSLContextImpl/BadTSProvider.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/sun/security/ssl/SSLContextImpl/BadTSProvider.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -28,7 +28,7 @@
 
 /*
  * @test
- * @bug 4919147
+ * @bug 4919147 8168069
  * @summary Support for token-based KeyStores
  * @run main/othervm BadTSProvider
  */
@@ -175,12 +175,10 @@
             new BadTSProvider();
             throw new SecurityException("expected no-such-provider exception");
         } catch (SocketException se) {
-
             // catching the exception is ok,
             // but let's try to confirm it is the right exception.
             //
-            // XXX this test must be updated if the exception message changes
-
+            // Note: this test must be updated if the exception message changes
             Throwable cause = se.getCause();
             if (!(cause instanceof NoSuchAlgorithmException)) {
                 se.printStackTrace();
@@ -188,13 +186,7 @@
             }
 
             cause = cause.getCause();
-            if (!(cause instanceof KeyStoreException)) {
-                se.printStackTrace();
-                throw new Exception("Unexpected exception" + se);
-            }
-
-            cause = cause.getCause();
-            if (!(cause instanceof NoSuchProviderException)) {
+            if (!(cause instanceof KeyManagementException)) {
                 se.printStackTrace();
                 throw new Exception("Unexpected exception" + se);
             }
--- a/test/jdk/sun/tools/jmap/BasicJMapTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/jdk/sun/tools/jmap/BasicJMapTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -50,15 +50,22 @@
     public static void main(String[] args) throws Exception {
         testHisto();
         testHistoLive();
+        testHistoAll();
+        testHistoToFile();
+        testHistoLiveToFile();
+        testHistoAllToFile();
         testFinalizerInfo();
         testClstats();
         testDump();
         testDumpLive();
+        testDumpAll();
     }
 
     private static void testHisto() throws Exception {
-        OutputAnalyzer output = jmap("-histo");
+        OutputAnalyzer output = jmap("-histo:");
         output.shouldHaveExitValue(0);
+        OutputAnalyzer output1 = jmap("-histo");
+        output1.shouldHaveExitValue(0);
     }
 
     private static void testHistoLive() throws Exception {
@@ -66,6 +73,50 @@
         output.shouldHaveExitValue(0);
     }
 
+    private static void testHistoAll() throws Exception {
+        OutputAnalyzer output = jmap("-histo:all");
+        output.shouldHaveExitValue(0);
+    }
+
+    private static void testHistoToFile() throws Exception {
+        histoToFile(false);
+    }
+
+    private static void testHistoLiveToFile() throws Exception {
+        histoToFile(true);
+    }
+
+    private static void testHistoAllToFile() throws Exception {
+        boolean explicitAll = true;
+        histoToFile(false, explicitAll);
+    }
+
+    private static void histoToFile(boolean live) throws Exception {
+        boolean explicitAll = false;
+        histoToFile(live, explicitAll);
+    }
+
+    private static void histoToFile(boolean live, boolean explicitAll) throws Exception {
+        if (live == true && explicitAll == true) {
+            fail("Illegal argument setting for jmap -histo");
+        }
+        File file = new File("jmap.histo.file" + System.currentTimeMillis() + ".histo");
+        if (file.exists()) {
+            file.delete();
+        }
+        OutputAnalyzer output;
+        if (live) {
+            output = jmap("-histo:live,file=" + file.getName());
+        } else if (explicitAll == true) {
+            output = jmap("-histo:all,file=" + file.getName());
+        } else {
+            output = jmap("-histo:file=" + file.getName());
+        }
+        output.shouldHaveExitValue(0);
+        output.shouldContain("Heap inspection file created");
+        file.delete();
+    }
+
     private static void testFinalizerInfo() throws Exception {
         OutputAnalyzer output = jmap("-finalizerinfo");
         output.shouldHaveExitValue(0);
@@ -84,7 +135,20 @@
         dump(true);
     }
 
+    private static void testDumpAll() throws Exception {
+        boolean explicitAll = true;
+        dump(false, explicitAll);
+    }
+
     private static void dump(boolean live) throws Exception {
+        boolean explicitAll = false;
+        dump(live, explicitAll);
+    }
+
+    private static void dump(boolean live, boolean explicitAll) throws Exception {
+        if (live == true && explicitAll == true) {
+          fail("Illegal argument setting for jmap -dump");
+        }
         File dump = new File("jmap.dump." + System.currentTimeMillis() + ".hprof");
         if (dump.exists()) {
             dump.delete();
@@ -92,6 +156,8 @@
         OutputAnalyzer output;
         if (live) {
             output = jmap("-dump:live,format=b,file=" + dump.getName());
+        } else if (explicitAll == true) {
+            output = jmap("-dump:all,format=b,file=" + dump.getName());
         } else {
             output = jmap("-dump:format=b,file=" + dump.getName());
         }
@@ -121,7 +187,7 @@
         launcher.addToolArg(Long.toString(ProcessTools.getProcessId()));
 
         processBuilder.command(launcher.getCommand());
-        System.out.println(Arrays.toString(processBuilder.command().toArray()).replace(",", ""));
+        System.out.println(Arrays.toString(processBuilder.command().toArray()));
         OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
         System.out.println(output.getOutput());
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/util/locale/provider/CheckLoggingFromLocaleProvider.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,63 @@
+/*
+ * 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 8218960
+ * @modules java.base/sun.util.locale.provider
+ * @modules java.logging
+ * @summary Check that no CONFIG messages are logged on instantiating
+ *     SimpleDateFormat with the language-only locale.
+ * @run main CheckLoggingFromLocaleProvider
+ */
+import java.text.*;
+import java.util.*;
+import java.util.logging.*;
+import sun.util.locale.provider.*;
+
+public class CheckLoggingFromLocaleProvider extends StreamHandler {
+
+    @Override
+    public boolean isLoggable(LogRecord lr) {
+        if (lr.getLevel() == Level.CONFIG &&
+            lr.getLoggerName().equals(
+                LocaleServiceProviderPool.class.getCanonicalName())) {
+            throw new RuntimeException("CONFIG message was logged in " +
+                lr.getLoggerName() + ". Message: " + lr.getMessage());
+        }
+        return false;
+    }
+
+    public CheckLoggingFromLocaleProvider() {
+        setLevel(Level.CONFIG);
+        Logger l = LogManager.getLogManager().getLogger("");
+        l.setLevel(Level.CONFIG);
+        l.addHandler(this);
+
+        new SimpleDateFormat("", Locale.ENGLISH);
+    }
+
+    public static void main(String[] args) {
+        new CheckLoggingFromLocaleProvider();
+    }
+}
--- a/test/langtools/TEST.ROOT	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/TEST.ROOT	Fri Feb 22 20:36:42 2019 +0000
@@ -15,7 +15,7 @@
 groups=TEST.groups
 
 # Minimum jtreg version
-requiredVersion=4.2 b13
+requiredVersion=4.2 b14
 
 # Use new module options
 useNewOptions=true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testJavaPackage/TestJavaPackage.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,86 @@
+/*
+ * 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     8216170
+ * @summary java.lang.IllegalArgumentException: directories not supported
+ * @library /tools/lib ../../lib
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.main
+ *          jdk.javadoc/jdk.javadoc.internal.api
+ *          jdk.javadoc/jdk.javadoc.internal.tool
+ * @build toolbox.ToolBox javadoc.tester.*
+ * @run main TestJavaPackage
+ */
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+import toolbox.ModuleBuilder;
+import toolbox.ToolBox;
+
+import javadoc.tester.JavadocTester;
+
+public class TestJavaPackage extends JavadocTester {
+    public static void main(String... args) throws Exception {
+        TestJavaPackage tester = new TestJavaPackage();
+        tester.runTests();
+    }
+
+    private final ToolBox tb = new ToolBox();
+
+    @Test
+    public void testPackage() throws IOException {
+        Path src = Path.of("src");
+        tb.writeJavaFiles(src,
+            "module com.example.java { exports com.example.java; }",
+            "package com.example.java; public class C { }");
+
+        // Disable the standard check that the output directory is empty.
+        // It is a significant part of the test case that the output directory
+        // is set to the current directory, which (in this case) also contains
+        // the src/ directory.
+        setOutputDirectoryCheck(DirectoryCheck.NONE);
+
+        javadoc("-d", ".",  // using "." is important for the test case
+                "-sourcepath", src.toString(),
+                "com.example.java");
+        checkExit(Exit.OK);
+        checkFiles(true,
+            "com.example.java/com/example/java/C.html");
+
+        // repeat the call, to verify the package name "com.example.java" is not
+        // confused with the output directory for the "com.example.java" module,
+        // created by the first call
+
+        javadoc("-d", ".",  // using "." is important for the test case
+                "-sourcepath", src.toString(),
+                "com.example.java");
+        checkExit(Exit.OK);
+        checkFiles(true,
+            "com.example.java/com/example/java/C.html");
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testMetadata/TestMetadata.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,357 @@
+/*
+ * 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 8218998
+ * @summary Add metadata to generated API documentation files
+ * @library /tools/lib ../../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.main
+ *          jdk.javadoc/jdk.javadoc.internal.api
+ *          jdk.javadoc/jdk.javadoc.internal.tool
+ * @build toolbox.ToolBox toolbox.JavacTask javadoc.tester.*
+ * @run main TestMetadata
+ */
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import toolbox.ModuleBuilder;
+import toolbox.ToolBox;
+
+import javadoc.tester.JavadocTester;
+
+public class TestMetadata extends JavadocTester {
+    public static void main(String... args) throws Exception {
+        TestMetadata tester = new TestMetadata();
+        tester.runTests();
+    }
+
+    enum Frames { NO_FRAMES, FRAMES };
+    enum Index  { SINGLE, SPLIT };
+    enum Source { PACKAGES, MODULES };
+
+    final ToolBox tb = new ToolBox();
+    final Set<String> allGeneratorsFound = new HashSet<>();
+
+    public void runTests() throws Exception {
+        for (Source s : Source.values()) {
+            Path src = genSource(s);
+            for (Frames f : Frames.values()) {
+                 for (Index i : Index.values()) {
+                     List<String> args = new ArrayList<>();
+                     args.add("-d");
+                     args.add(String.format("out-%s-%s-%s", s, f, i));
+                     args.add("-use");
+                     if (s != Source.MODULES) {
+                         args.add("-linksource"); // broken, with modules: JDK-8219060
+                     }
+                     args.add(f == Frames.NO_FRAMES ? "--no-frames" : "--frames");
+                     if (i == Index.SPLIT) {
+                         args.add("-splitIndex");
+                     }
+                     if (s == Source.PACKAGES) {
+                         args.add("-sourcepath");
+                         args.add(src.toString());
+                         args.add("pA");
+                         args.add("pB");
+                     } else {
+                         args.add("--module-source-path");
+                         args.add(src.toString());
+                         args.add("--module");
+                         args.add("mA,mB");
+                     }
+                     javadoc(args.toArray(new String[args.size()]));
+                     checkExit(Exit.OK);
+                     checkMetadata();
+
+                     // spot check the descriptions for declarations
+                     switch (s) {
+                         case PACKAGES:
+                             checkOutput("pA/package-summary.html", true,
+                                     "<meta name=\"description\" content=\"declaration: package: pA\">");
+                             checkOutput("pA/CA.html", true,
+                                     "<meta name=\"description\" content=\"declaration: package: pA, class: CA\">");
+                             break;
+
+                         case MODULES:
+                             checkOutput("mA/module-summary.html", true,
+                                     "<meta name=\"description\" content=\"declaration: module: mA\">");
+                             checkOutput("mA/pA/package-summary.html", true,
+                                     "<meta name=\"description\" content=\"declaration: module: mA, package: pA\">");
+                             checkOutput("mA/pA/CA.html", true,
+                                     "<meta name=\"description\" content=\"declaration: module: mA, package: pA, class: CA\">");
+                             break;
+                     }
+                 }
+            }
+        }
+
+        checking ("all generators");
+        if (allGeneratorsFound.equals(allGenerators)) {
+            passed("all generators found");
+        } else {
+            Set<String> notFound = new TreeSet<>(allGenerators);
+            notFound.removeAll(allGeneratorsFound);
+            failed("not found: " + notFound);
+        }
+
+        printSummary();
+    }
+
+    final Pattern nl = Pattern.compile("[\\r\\n]+");
+    final Pattern contentPattern = Pattern.compile("content=\"([^\"]+)\">");
+    final Pattern generatorPattern = Pattern.compile("content=\"javadoc/([^\"]+)\">");
+    final Set<String> allGenerators = Set.of(
+            "AllClassesFrameWriter",
+            "AllClassesIndexWriter",
+            "AllPackagesIndexWriter",
+            "AnnotationTypeWriterImpl",
+            "ClassUseWriter",
+            "ClassWriterImpl",
+            "ConstantsSummaryWriterImpl",
+            "DeprecatedListWriter",
+            "DocFileWriter",
+            "FrameOutputWriter",
+            "HelpWriter",
+            "IndexRedirectWriter",
+            "ModuleFrameWriter",
+            "ModuleIndexFrameWriter",
+            "ModuleIndexWriter",
+            "ModulePackageIndexFrameWriter",
+            "ModuleWriterImpl",
+            "PackageFrameWriter",
+            "PackageIndexFrameWriter",
+            "PackageIndexWriter",
+            "PackageTreeWriter",
+            "PackageUseWriter",
+            "PackageWriterImpl",
+            "SerializedFormWriterImpl",
+            "SingleIndexWriter",
+            "SourceToHTMLConverter",
+            "SplitIndexWriter",
+            "TreeWriter"
+            );
+
+    void checkMetadata() throws IOException {
+        Path outputDirPath = outputDir.toPath();
+        for (Path p : tb.findFiles(".html", outputDirPath)) {
+            checkMetadata(outputDirPath.relativize(p));
+        }
+    }
+
+    void checkMetadata(Path p) {
+        checking("Check generator: " + p);
+
+        List<String> generators = nl.splitAsStream(readOutputFile(p.toString()))
+                .filter(s -> s.contains("<meta name=\"generator\""))
+                .collect(Collectors.toList());
+
+        String generator;
+        switch (generators.size()) {
+            case 0:
+                 failed("Not found: <meta name=\"generator\"");
+                 return;
+            case 1:
+                 generator = generators.get(0);
+                 break;
+            default:
+                 failed("Multiple found: <meta name=\"generator\"");
+                 return;
+        }
+
+        Matcher m = generatorPattern.matcher(generator);
+        if (m.find()) {
+            String content = m.group(1);
+            if (allGenerators.contains(content)) {
+                passed("found: " + content);
+                allGeneratorsFound.add(content);
+                checkDescription(p, content);
+            } else {
+                failed("Unrecognized content: " + content);
+            }
+        } else {
+            failed("Unrecognized line:\n" + generator);
+        }
+
+    }
+
+    void checkDescription(Path p, String generator) {
+        checking("Check description: " + p);
+
+        List<String> descriptions = nl.splitAsStream(readOutputFile(p.toString()))
+                .filter(s -> s.contains("<meta name=\"description\""))
+                .collect(Collectors.toList());
+
+        String description;
+        switch (descriptions.size()) {
+            case 0:
+                if (generator.equals("DocFileWriter")) {
+                    passed("Not found, as expected");
+                } else {
+                    failed("Not found: <meta name=\"description\"");
+                }
+                return;
+            case 1:
+                description = descriptions.get(0);
+                break;
+            default:
+                failed("Multiple found: <meta name=\"description\"");
+                return;
+        }
+
+        String content;
+        Matcher m = contentPattern.matcher(description);
+        if (m.find()) {
+            content = m.group(1);
+        } else {
+            failed("Unrecognized line:\n" + description);
+            return;
+        }
+
+        switch (generator) {
+            case "AllClassesFrameWriter":
+            case "FrameOutputWriter":
+            case "ModuleFrameWriter":
+            case "ModuleIndexFrameWriter":
+            case "ModulePackageIndexFrameWriter":
+            case "PackageFrameWriter":
+            case "PackageIndexFrameWriter":
+                check(generator, content, content.contains("frame"));
+                break;
+
+            case "AllClassesIndexWriter":
+            case "AllPackagesIndexWriter":
+            case "ModuleIndexWriter":
+            case "PackageIndexWriter":
+                check(generator, content, content.contains("index"));
+                break;
+
+
+            case "AnnotationTypeWriterImpl":
+            case "ClassWriterImpl":
+            case "ModuleWriterImpl":
+            case "PackageWriterImpl":
+                check(generator, content, content.startsWith("declaration: "));
+                break;
+
+            case "ClassUseWriter":
+            case "PackageUseWriter":
+                check(generator, content, content.startsWith("use: "));
+                break;
+
+            case "ConstantsSummaryWriterImpl":
+                check(generator, content, content.contains("constants"));
+                break;
+
+            case "DeprecatedListWriter":
+                check(generator, content, content.contains("deprecated"));
+                break;
+
+            case "DocFileWriter":
+                passed("no constraint for user-provided doc-files");
+                break;
+
+            case "HelpWriter":
+                check(generator, content, content.contains("help"));
+                break;
+
+            case "IndexRedirectWriter":
+                check(generator, content, content.contains("redirect"));
+                break;
+
+            case "PackageTreeWriter":
+            case "TreeWriter":
+                check(generator, content, content.contains("tree"));
+                break;
+
+            case "SerializedFormWriterImpl":
+                check(generator, content, content.contains("serialized"));
+                break;
+
+            case "SingleIndexWriter":
+            case "SplitIndexWriter":
+                check(generator, content, content.startsWith("index"));
+                break;
+
+            case "SourceToHTMLConverter":
+                check(generator, content, content.startsWith("source:"));
+                break;
+
+            default:
+                failed("unexpected generator: " + generator);
+                break;
+        }
+    }
+
+    void check(String generator, String content, boolean ok) {
+        if (ok) {
+            passed("OK: " + generator + " " + content);
+        } else {
+            failed("unexpected value for " + generator + ": " + content);
+        }
+    }
+
+    Path genSource(Source s) throws IOException {
+        Path src = Path.of("src-" + s);
+        switch (s) {
+            case PACKAGES:
+                tb.writeJavaFiles(src,
+                    "/** Package pA. */ package pA;",
+                    "/** Class pA.CA. */ package pA; public class CA { }",
+                    "/** Anno pA.Anno, */ package pA; public @interface Anno { }",
+                    "/** Serializable pA.Ser, */ package pA; public class Ser implements java.io.Serializable { }",
+                    "/** Package pB. */ package pB;",
+                    "/** Class pB.CB. */ package pB; public class CB { }");
+                tb.writeFile(src.resolve("pA").resolve("doc-files").resolve("extra.html"),
+                        "<!doctype html>\n<html><head></head><body>Extra</body></html>");
+                break;
+
+            case MODULES:
+                new ModuleBuilder(tb, "mA")
+                        .exports("pA")
+                        .classes("/** Package mA/pA. */ package pA;")
+                        .classes("/** Class mA/pA.CA. */ package pA; public class CA { }")
+                        .write(src);
+                new ModuleBuilder(tb, "mB")
+                        .exports("pB")
+                        .classes("/** Package mB/pB. */ package pB;")
+                        .classes("/** Class mB/pB.CB. */ package pB; public class CB { }")
+                        .write(src);
+                break;
+        }
+
+        return src;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testPackageSpecificStylesheet/TestPackageSpecificStylesheet.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,96 @@
+/*
+ * 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 8213354
+ * @summary Support package-specific stylesheets
+ * @library /tools/lib ../../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder
+ * @run main TestPackageSpecificStylesheet
+ */
+
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import builder.ClassBuilder;
+import toolbox.ToolBox;
+
+import javadoc.tester.JavadocTester;
+
+public class TestPackageSpecificStylesheet extends JavadocTester {
+
+    final ToolBox tb;
+
+    public static void main(String... args) throws Exception {
+        TestPackageSpecificStylesheet tester = new TestPackageSpecificStylesheet();
+        tester.runTests(m -> new Object[]{Paths.get(m.getName())});
+    }
+
+    TestPackageSpecificStylesheet() {
+        tb = new ToolBox();
+    }
+
+    @Test
+    public void test(Path base) throws Exception {
+        Path srcDir = base.resolve("src");
+        Path outDir = base.resolve("out");
+
+        new ClassBuilder(tb, "pkg.A")
+                .setComments("<span>test span style</span>")
+                .setModifiers("public", "class")
+                .write(srcDir);
+
+        Path docFilesDir = Files.createDirectories(srcDir.resolve("pkg").resolve("doc-files"));
+        Path stylesheet = docFilesDir.resolve("spanstyle.css");
+        Files.createFile(stylesheet);
+        Files.write(stylesheet, List.of("span{ color:blue; }"));
+
+        new ClassBuilder(tb, "pkg2.B")
+                .setModifiers("public", "class")
+                .write(srcDir);
+
+        javadoc("-d", outDir.toString(),
+                "-sourcepath", srcDir.toString(),
+                "pkg", "pkg2");
+
+        checkExit(Exit.OK);
+
+        checkOutput("pkg/A.html", true,
+                "<link rel=\"stylesheet\" type=\"text/css\" href=\"doc-files/spanstyle.css\"" +
+                        " title=\"Style\">");
+
+        checkOutput("pkg/package-summary.html", true,
+                "<link rel=\"stylesheet\" type=\"text/css\" href=\"doc-files/spanstyle.css\"" +
+                        " title=\"Style\">");
+
+        checkOutput("pkg2/B.html", false,
+                "<link rel=\"stylesheet\" type=\"text/css\" href=\"doc-files/spanstyle.css\"" +
+                        " title=\"Style\">");
+
+    }
+}
--- a/test/langtools/jdk/javadoc/tool/EncodingTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/jdk/javadoc/tool/EncodingTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -29,7 +29,7 @@
  * @modules jdk.compiler/com.sun.tools.javac.main
  * @modules jdk.javadoc/jdk.javadoc.internal.api
  * @modules jdk.javadoc/jdk.javadoc.internal.tool
- * @library /tools/lib /tools/javadoc/lib
+ * @library /tools/lib
  * @build toolbox.JavacTask toolbox.JavadocTask toolbox.TestRunner toolbox.ToolBox
  * @run main EncodingTest
  */
--- a/test/langtools/jdk/javadoc/tool/EnsureNewOldDoclet.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/jdk/javadoc/tool/EnsureNewOldDoclet.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, 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
@@ -36,13 +36,11 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import javax.lang.model.element.Element;
 
-import com.sun.javadoc.Tag;
 import com.sun.source.doctree.DocTree;
 
 import toolbox.*;
@@ -76,9 +74,6 @@
     final static String NEW_DOCLET_MARKER = "NEW_DOCLET_MARKER";
     final static String NEW_TAGLET_MARKER = "Registered Taglet " + CLASS_NAME + "\\$NewTaglet";
 
-    final static Pattern WARN_TEXT = Pattern.compile("Users are strongly recommended to migrate" +
-                                                    " to the new APIs.");
-
     final static String NEW_STDDOCLET = "jdk.javadoc.doclet.StandardDoclet";
 
 
@@ -118,23 +113,6 @@
         checkOutput(testName, out, NEW_HEADER);
     }
 
-    // input: old doclet
-    // outcome: old tool
-    @Test
-    public void testOldDoclet() throws Exception {
-        setArgs("-classpath", ".", // ambient classpath insulation
-                "-doclet",
-                OLD_DOCLET_CLASS_NAME,
-                "-docletpath",
-                testClasses,
-                testSrc.toString());
-        Task.Result tr = task.run(Task.Expect.SUCCESS);
-        List<String> out = tr.getOutputLines(Task.OutputKind.STDOUT);
-        List<String> err = tr.getOutputLines(Task.OutputKind.STDERR);
-        checkOutput(testName, out, OLD_DOCLET_MARKER);
-        checkOutput(testName, err, WARN_TEXT);
-    }
-
     // input: new doclet and new taglet
     // outcome: new doclet and new taglet should register
     @Test
@@ -175,13 +153,6 @@
         throw new Exception(testCase + ": Expected string not found: " +  toFind);
     }
 
-    public static class OldDoclet extends com.sun.javadoc.Doclet {
-        public static boolean start(com.sun.javadoc.RootDoc root) {
-            System.out.println(OLD_DOCLET_MARKER);
-            return true;
-        }
-    }
-
     public static class NewTaglet implements jdk.javadoc.doclet.Taglet {
 
         @Override
--- a/test/langtools/jdk/javadoc/tool/api/basic/GetTask_DocletClassTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules jdk.javadoc
- * @build APITest
- * @run main GetTask_DocletClassTest
- * @key randomness
- */
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Random;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-import com.sun.javadoc.DocErrorReporter;
-import com.sun.javadoc.LanguageVersion;
-import com.sun.javadoc.RootDoc;
-
-/**
- * Tests for DocumentationTool.getTask  docletClass  parameter.
- */
-public class GetTask_DocletClassTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_DocletClassTest().run();
-    }
-
-    /**
-     * Verify that an alternate doclet can be specified.
-     *
-     * There is no standard interface or superclass for a doclet;
-     * the only requirement is that it provides static methods that
-     * can be invoked via reflection. So, for now, the doclet is
-     * specified as a class.
-     * Because we cannot create and use a unique instance of the class,
-     * we verify that the doclet has been called by having it record
-     * (in a static field!) the comment from the last time it was invoked,
-     * which is randomly generated each time the test is run.
-     */
-    @Test
-    public void testDoclet() throws Exception {
-        Random r = new Random();
-        int key = r.nextInt();
-        JavaFileObject srcFile = createSimpleJavaFileObject(
-                "pkg/C",
-                "package pkg; /** " + key + "*/ public class C { }");
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, TestDoclet.class, null, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                if (TestDoclet.lastCaller.equals(String.valueOf(key)))
-                    System.err.println("found expected key: " + key);
-                else
-                    error("Expected key not found");
-                checkFiles(outDir, Collections.<String>emptySet());
-            } else {
-                throw new Exception("task failed");
-            }
-        }
-    }
-
-    public static class TestDoclet {
-        static String lastCaller;
-        public static boolean start(RootDoc root) {
-            lastCaller = root.classNamed("pkg.C").commentText().trim();
-            return true;
-        }
-
-        public static int optionLength(String option) {
-            return 0;  // default is option unknown
-        }
-
-        public static boolean validOptions(String options[][],
-                DocErrorReporter reporter) {
-            return true;  // default is options are valid
-        }
-
-        public static LanguageVersion languageVersion() {
-            return LanguageVersion.JAVA_1_1;
-        }
-    }
-
-    /**
-     * Verify that exceptions from a doclet are thrown as expected.
-     */
-    @Test
-    public void testBadDoclet() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, BadDoclet.class, null, files);
-            try {
-                t.call();
-                error("call completed without exception");
-            } catch (RuntimeException e) {
-                e.printStackTrace();
-                Throwable c = e.getCause();
-                if (c.getClass() == UnexpectedError.class)
-                    System.err.println("exception caught as expected: " + c);
-                else
-                    throw e;
-            }
-        }
-    }
-
-    public static class UnexpectedError extends Error { }
-
-    public static class BadDoclet {
-        public static boolean start(RootDoc root) {
-            throw new UnexpectedError();
-        }
-
-        public static int optionLength(String option) {
-            return 0;  // default is option unknown
-        }
-
-        public static boolean validOptions(String options[][],
-                DocErrorReporter reporter) {
-            return true;  // default is options are valid
-        }
-
-        public static LanguageVersion languageVersion() {
-            return LanguageVersion.JAVA_1_1;
-        }
-    }
-
-}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/tool/removeOldDoclet/OldDoclet.jasm	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,28 @@
+
+super public class OldDoclet
+	extends com/sun/javadoc/Doclet
+	version 55:0
+{
+
+
+public Method "<init>":"()V"
+	stack 1 locals 1
+{
+		aload_0;
+		invokespecial	Method com/sun/javadoc/Doclet."<init>":"()V";
+		return;
+	
+}
+
+public static Method start:"(Lcom/sun/javadoc/RootDoc;)Z"
+	stack 2 locals 1
+{
+		getstatic	Field java/lang/System.out:"Ljava/io/PrintStream;";
+		ldc	String "OLD_DOCLET_MARKER";
+		invokevirtual	Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
+		iconst_1;
+		ireturn;
+	
+}
+
+} // end Class OldDoclet
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/tool/removeOldDoclet/RemoveOldDoclet.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,77 @@
+/*
+ * 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 8215584
+ * @summary Remove support for the "old" doclet API in com/sun/javadoc
+ * @library /tools/lib ../../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder
+ * @compile OldDoclet.jasm
+ * @run main RemoveOldDoclet
+ */
+
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import builder.ClassBuilder;
+import toolbox.ToolBox;
+
+import javadoc.tester.JavadocTester;
+
+public class RemoveOldDoclet extends JavadocTester {
+
+    final ToolBox tb;
+
+    public static void main(String... args) throws Exception {
+        RemoveOldDoclet tester = new RemoveOldDoclet();
+        tester.runTests(m -> new Object[]{Paths.get(m.getName())});
+    }
+
+    RemoveOldDoclet() {
+        tb = new ToolBox();
+    }
+
+    @Test
+    public void testInvokeOldDoclet(Path base) throws Exception {
+        Path srcDir = base.resolve("src");
+        Path outDir = base.resolve("out");
+
+        new ClassBuilder(tb, "pkg.A")
+                .setModifiers("public", "class")
+                .write(srcDir);
+
+        javadoc("-d", outDir.toString(),
+                "-doclet", "OldDoclet",
+                "-docletpath", System.getProperty("test.classes", "."),
+                "-sourcepath", srcDir.toString(),
+                "pkg");
+
+        checkExit(Exit.ERROR);
+        checkOutput(Output.OUT, true,
+                "javadoc: error - Class OldDoclet is not a valid doclet.\n"
+                + "Note: As of JDK 13, the com.sun.javadoc API is no longer supported.");
+    }
+}
--- a/test/langtools/tools/javac/6330997/T6330997.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/6330997/T6330997.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -32,8 +32,8 @@
  *          jdk.compiler/com.sun.tools.javac.main
  *          jdk.compiler/com.sun.tools.javac.util
  * @clean T1 T2
- * @compile -source 12 -target 13 T1.java
- * @compile -source 12 -target 13 T2.java
+ * @compile T1.java
+ * @compile T2.java
  * @run main/othervm T6330997
  */
 
--- a/test/langtools/tools/javac/ConditionalWithVoid.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/ConditionalWithVoid.java	Fri Feb 22 20:36:42 2019 +0000
@@ -4,7 +4,7 @@
  * @summary The compiler was allowing void types in its parsing of conditional expressions.
  * @author tball
  *
- * @compile/fail/ref=ConditionalWithVoid.out --enable-preview -source 13 -XDrawDiagnostics ConditionalWithVoid.java
+ * @compile/fail/ref=ConditionalWithVoid.out --enable-preview -source ${jdk.version} -XDrawDiagnostics ConditionalWithVoid.java
  */
 public class ConditionalWithVoid {
     public void test(Object o, String s) {
--- a/test/langtools/tools/javac/diags/Example.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/Example.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017, 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
@@ -288,7 +288,7 @@
         opts.add("-d");
         opts.add(classesDir.getPath());
         if (options != null)
-            opts.addAll(options);
+            opts.addAll(evalProperties(options));
 
         if (procFiles.size() > 0) {
             List<String> pOpts = new ArrayList<>(Arrays.asList("-d", classesDir.getPath()));
@@ -355,6 +355,51 @@
         }
     }
 
+    private static List<String> evalProperties(List<String> args) {
+        boolean fast = true;
+        for (String arg : args) {
+            fast = fast && (arg.indexOf("${") == -1);
+        }
+        if (fast) {
+            return args;
+        }
+        List<String> newArgs = new ArrayList<>();
+        for (String arg : args) {
+            newArgs.add(evalProperties(arg));
+        }
+        return newArgs;
+    }
+
+    private static final Pattern namePattern = Pattern.compile("\\$\\{([A-Za-z0-9._]+)\\}");
+    private static final String jdkVersion = Integer.toString(Runtime.version().feature());
+
+    private static String evalProperties(String arg) {
+        Matcher m = namePattern.matcher(arg);
+        StringBuilder sb = null;
+        while (m.find()) {
+            if (sb == null) {
+                sb = new StringBuilder();
+            }
+            String propName = m.group(1);
+            String propValue;
+            switch (propName) {
+                case "jdk.version":
+                    propValue = jdkVersion;
+                    break;
+                default:
+                    propValue = System.getProperty(propName);
+                    break;
+            }
+            m.appendReplacement(sb, propValue != null ? propValue : m.group(0).replace("$", "\\$"));
+        }
+        if (sb == null) {
+            return arg;
+        } else {
+            m.appendTail(sb);
+            return sb.toString();
+        }
+    }
+
     void createAnnotationServicesFile(File dir, List<File> procFiles) throws IOException {
         File servicesDir = new File(new File(dir, "META-INF"), "services");
         servicesDir.mkdirs();
--- a/test/langtools/tools/javac/diags/examples/BreakAmbiguousTarget.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/BreakAmbiguousTarget.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.break.ambiguous.target
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class BreakAmbiguousTarget {
     void m(int i, int j) {
--- a/test/langtools/tools/javac/diags/examples/BreakExprNotImmediate.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/BreakExprNotImmediate.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -33,7 +33,7 @@
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
 // key: compiler.note.note
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 // run: backdoor
 
 class BreakExprNotImmediate {
--- a/test/langtools/tools/javac/diags/examples/BreakMissingValue.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/BreakMissingValue.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.break.missing.value
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class BreakMissingValue {
     int t(int i) {
--- a/test/langtools/tools/javac/diags/examples/BreakOutsideSwitchExpression.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/BreakOutsideSwitchExpression.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.break.outside.switch.expression
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class BreakOutsideSwitchExpression {
     int t(int i) {
--- a/test/langtools/tools/javac/diags/examples/ContinueOutsideSwitchExpression.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/ContinueOutsideSwitchExpression.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.continue.outside.switch.expression
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class ContinueOutsideSwitchExpression {
     int t(int i) {
--- a/test/langtools/tools/javac/diags/examples/IncompatibleTypesInSwitchExpression.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/IncompatibleTypesInSwitchExpression.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,7 +26,7 @@
 // key: compiler.misc.inconvertible.types
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 
 class IncompatibleTypesInSwitchExpression {
--- a/test/langtools/tools/javac/diags/examples/MultipleCaseLabels.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/MultipleCaseLabels.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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 @@
 
 // key: compiler.misc.feature.multiple.case.labels
 // key: compiler.warn.preview.feature.use.plural
-// options: --enable-preview -source 13 -Xlint:preview
+// options: --enable-preview -source ${jdk.version} -Xlint:preview
 
 class MultipleCaseLabels {
     void m(int i) {
--- a/test/langtools/tools/javac/diags/examples/NotExhaustive.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/NotExhaustive.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.not.exhaustive
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class NotExhaustive {
     int t(int i) {
--- a/test/langtools/tools/javac/diags/examples/PreviewFeatureUse.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureUse.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
 //key: compiler.warn.preview.feature.use.plural
 //key: compiler.misc.feature.diamond
 //key: compiler.misc.feature.lambda
-//options: -Xlint:preview -XDforcePreview -source 13 --enable-preview
+//options: -Xlint:preview -XDforcePreview -source ${jdk.version} --enable-preview
 
 import java.util.ArrayList;
 
--- a/test/langtools/tools/javac/diags/examples/PreviewFilename.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFilename.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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 @@
 
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: -XDforcePreview  -source 13 --enable-preview
+// options: -XDforcePreview  -source ${jdk.version} --enable-preview
 
 import java.util.ArrayList;
 import java.util.List;
--- a/test/langtools/tools/javac/diags/examples/PreviewFilenameAdditional.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewFilenameAdditional.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.note.preview.filename.additional
 // key: compiler.warn.preview.feature.use
 // key: compiler.misc.feature.diamond
-// options: -Xlint:preview -Xmaxwarns 1 -XDforcePreview  -source 13 --enable-preview
+// options: -Xlint:preview -Xmaxwarns 1 -XDforcePreview  -source ${jdk.version} --enable-preview
 
 import java.util.ArrayList;
 
--- a/test/langtools/tools/javac/diags/examples/PreviewPlural/PreviewPlural.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/PreviewPlural/PreviewPlural.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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 @@
 
 // key: compiler.note.preview.plural
 // key: compiler.note.preview.recompile
-// options: -XDforcePreview  -source 13 --enable-preview
+// options: -XDforcePreview  -source ${jdk.version} --enable-preview
 
 import java.util.ArrayList;
 
--- a/test/langtools/tools/javac/diags/examples/ReturnOutsideSwitchExpression.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/ReturnOutsideSwitchExpression.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.return.outside.switch.expression
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class ReturnOutsideSwitchExpression {
     int t(int i) {
--- a/test/langtools/tools/javac/diags/examples/RuleCompletesNormally.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/RuleCompletesNormally.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.rule.completes.normally
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class RuleCompletesNormally {
     public String convert(int i) {
--- a/test/langtools/tools/javac/diags/examples/SwitchCaseUnexpectedStatement.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchCaseUnexpectedStatement.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.switch.case.unexpected.statement
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class ReturnOutsideSwitchExpression {
     void t(int i) {
--- a/test/langtools/tools/javac/diags/examples/SwitchExpressionCompletesNormally.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchExpressionCompletesNormally.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.switch.expression.completes.normally
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class SwitchExpressionCompletesNormally {
     public String convert(int i) {
--- a/test/langtools/tools/javac/diags/examples/SwitchExpressionEmpty.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchExpressionEmpty.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.switch.expression.empty
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class BreakOutsideSwitchExpression {
     String t(E e) {
--- a/test/langtools/tools/javac/diags/examples/SwitchExpressionTargetCantBeVoid.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchExpressionTargetCantBeVoid.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,7 +26,7 @@
 // key: compiler.misc.switch.expression.target.cant.be.void
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class SwitchExpressionTargetCantBeVoid {
 
--- a/test/langtools/tools/javac/diags/examples/SwitchExpressions.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchExpressions.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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 @@
 
 // key: compiler.misc.feature.switch.expressions
 // key: compiler.warn.preview.feature.use.plural
-// options: --enable-preview -source 13 -Xlint:preview
+// options: --enable-preview -source ${jdk.version} -Xlint:preview
 
 class SwitchExpressions {
     int m(int i) {
--- a/test/langtools/tools/javac/diags/examples/SwitchMixingCaseTypes.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchMixingCaseTypes.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -24,7 +24,7 @@
 // key: compiler.err.switch.mixing.case.types
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
-// options: --enable-preview -source 13
+// options: --enable-preview -source ${jdk.version}
 
 class SwitchMixingCaseTypes {
 
--- a/test/langtools/tools/javac/diags/examples/SwitchRules.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchRules.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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 @@
 
 // key: compiler.misc.feature.switch.rules
 // key: compiler.warn.preview.feature.use.plural
-// options: --enable-preview -source 13 -Xlint:preview
+// options: --enable-preview -source ${jdk.version} -Xlint:preview
 
 class SwitchExpressions {
     void m(int i) {
--- a/test/langtools/tools/javac/expswitch/ExpSwitchNestingTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/expswitch/ExpSwitchNestingTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -75,7 +75,8 @@
         }
     }
 
-    private static String[] PREVIEW_OPTIONS = {"--enable-preview", "-source", "13"};
+    private static String[] PREVIEW_OPTIONS = {"--enable-preview", "-source",
+                                               Integer.toString(Runtime.version().feature())};
 
     private void program(String... constructs) {
         String s = "class C { static boolean cond = false; static int x = 0; void m() { # } }";
--- a/test/langtools/tools/javac/lambda/BadSwitchExpressionLambda.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/lambda/BadSwitchExpressionLambda.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Adding switch expressions
- * @compile/fail/ref=BadSwitchExpressionLambda.out -XDrawDiagnostics --enable-preview -source 13 BadSwitchExpressionLambda.java
+ * @compile/fail/ref=BadSwitchExpressionLambda.out -XDrawDiagnostics --enable-preview -source ${jdk.version} BadSwitchExpressionLambda.java
  */
 
 class BadSwitchExpressionLambda {
--- a/test/langtools/tools/javac/lambda/MethodReference66.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/lambda/MethodReference66.java	Fri Feb 22 20:36:42 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8009299
  * @summary Javac crashes when compiling method reference to static interface method
- * @run main/othervm -Xverify:none MethodReference66
+ * @run main/othervm MethodReference66
  */
 public class MethodReference66 {
 
--- a/test/langtools/tools/javac/parser/JavacParserTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/parser/JavacParserTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -88,14 +88,14 @@
 public class JavacParserTest extends TestCase {
     static final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
     static final JavaFileManager fm = tool.getStandardFileManager(null, null, null);
+    public static final String SOURCE_VERSION =
+        Integer.toString(Runtime.version().feature());
 
     private JavacParserTest(){}
 
     public static void main(String... args) throws Exception {
-        try {
+        try (fm) {
             new JavacParserTest().run(args);
-        } finally {
-            fm.close();
         }
     }
 
@@ -1096,7 +1096,7 @@
         String expectedErrors = "Test.java:1:178: compiler.err.switch.case.unexpected.statement\n";
         StringWriter out = new StringWriter();
         JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(out, fm, null,
-                Arrays.asList("-XDrawDiagnostics", "--enable-preview", "-source", "13"),
+                Arrays.asList("-XDrawDiagnostics", "--enable-preview", "-source", SOURCE_VERSION),
                 null, Arrays.asList(new MyFileObject(code)));
 
         CompilationUnitTree cut = ct.parse().iterator().next();
--- a/test/langtools/tools/javac/preview/classReaderTest/Client.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,9 +2,9 @@
  * @test /nodynamiccopyright/
  * @bug 8199194
  * @summary smoke test for --enabled-preview classreader support
- * @compile -XDforcePreview --enable-preview -source 13 Bar.java
+ * @compile -XDforcePreview --enable-preview -source ${jdk.version} Bar.java
  * @compile/fail/ref=Client.nopreview.out -Xlint:preview -XDrawDiagnostics Client.java
- * @compile/fail/ref=Client.preview.out -Werror -Xlint:preview -XDrawDiagnostics --enable-preview -source 13 Client.java
+ * @compile/fail/ref=Client.preview.out -Werror -Xlint:preview -XDrawDiagnostics --enable-preview -source ${jdk.version} Client.java
  */
 
 public class Client {
--- a/test/langtools/tools/javac/switchexpr/BlockExpression.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/BlockExpression.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Verify rule cases with expression statements and throw statements work.
- * @compile --enable-preview -source 13 BlockExpression.java
+ * @compile --enable-preview -source ${jdk.version} BlockExpression.java
  * @run main/othervm --enable-preview BlockExpression
  */
 
--- a/test/langtools/tools/javac/switchexpr/BooleanNumericNonNumeric.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/BooleanNumericNonNumeric.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify the type of a conditional expression with nested switch expression is computed properly
- * @compile/fail/ref=BooleanNumericNonNumeric.out -XDrawDiagnostics --enable-preview -source 13 BooleanNumericNonNumeric.java
+ * @compile/fail/ref=BooleanNumericNonNumeric.out -XDrawDiagnostics --enable-preview -source ${jdk.version} BooleanNumericNonNumeric.java
  */
 
 public class BooleanNumericNonNumeric {
--- a/test/langtools/tools/javac/switchexpr/BreakTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/BreakTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -61,12 +61,13 @@
 
     public static void main(String[] args) throws Exception {
         final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
+        String sourceVersion = Integer.toString(Runtime.version().feature());
         assert tool != null;
         DiagnosticListener<JavaFileObject> noErrors = d -> {};
 
         StringWriter out = new StringWriter();
         JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
-            List.of("-XDdev", "--enable-preview", "-source", "13"), null,
+            List.of("-XDdev", "--enable-preview", "-source", sourceVersion), null,
             Arrays.asList(new MyFileObject(CODE)));
         List<String> labels = new ArrayList<>();
         new TreePathScanner<Void, Void>() {
--- a/test/langtools/tools/javac/switchexpr/CRT.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/CRT.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -48,6 +48,8 @@
         new CRT().run();
     }
 
+    private static final String SOURCE_VERSION = Integer.toString(Runtime.version().feature());
+
     private ToolBox tb = new ToolBox();
 
     private void run() throws Exception {
@@ -151,7 +153,7 @@
         new JavacTask(tb)
                 .options("-Xjcov",
                          "--enable-preview",
-                         "-source", "13")
+                         "-source", SOURCE_VERSION)
                 .outdir(classes)
                 .sources("public class Test {\n" +
                          code +
--- a/test/langtools/tools/javac/switchexpr/DefiniteAssignment1.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/DefiniteAssignment1.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8214031
  * @summary Verify that definite assignment when true works (legal code)
- * @compile --enable-preview --source 13 DefiniteAssignment1.java
+ * @compile --enable-preview --source ${jdk.version} DefiniteAssignment1.java
  * @run main/othervm --enable-preview DefiniteAssignment1
  */
 public class DefiniteAssignment1 {
--- a/test/langtools/tools/javac/switchexpr/DefiniteAssignment2.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/DefiniteAssignment2.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8214031
  * @summary Verify that definite assignment when true works (illegal code)
- * @compile/fail/ref=DefiniteAssignment2.out --enable-preview --source 13 -XDrawDiagnostics DefiniteAssignment2.java
+ * @compile/fail/ref=DefiniteAssignment2.out --enable-preview --source ${jdk.version} -XDrawDiagnostics DefiniteAssignment2.java
  */
 public class DefiniteAssignment2 {
 
--- a/test/langtools/tools/javac/switchexpr/EmptySwitch.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/EmptySwitch.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Verify than an empty switch expression is rejected.
- * @compile/fail/ref=EmptySwitch.out --enable-preview -source 13 -XDrawDiagnostics EmptySwitch.java
+ * @compile/fail/ref=EmptySwitch.out --enable-preview -source ${jdk.version} -XDrawDiagnostics EmptySwitch.java
  */
 
 public class EmptySwitch {
--- a/test/langtools/tools/javac/switchexpr/ExhaustiveEnumSwitch.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExhaustiveEnumSwitch.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Verify that an switch expression over enum can be exhaustive without default.
- * @compile --enable-preview -source 13 ExhaustiveEnumSwitch.java
+ * @compile --enable-preview -source ${jdk.version} ExhaustiveEnumSwitch.java
  * @compile ExhaustiveEnumSwitchExtra.java
  * @run main/othervm --enable-preview ExhaustiveEnumSwitch
  */
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitch.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitch.java	Fri Feb 22 20:36:42 2019 +0000
@@ -3,7 +3,7 @@
  * @bug 8206986
  * @summary Check expression switch works.
  * @compile/fail/ref=ExpressionSwitch-old.out -source 9 -Xlint:-options -XDrawDiagnostics ExpressionSwitch.java
- * @compile --enable-preview -source 13 ExpressionSwitch.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitch.java
  * @run main/othervm --enable-preview ExpressionSwitch
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchBreaks1.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchBreaks1.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Verify behavior of various kinds of breaks.
- * @compile --enable-preview -source 13 ExpressionSwitchBreaks1.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchBreaks1.java
  * @run main/othervm --enable-preview ExpressionSwitchBreaks1
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchBreaks2.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchBreaks2.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Check behavior for invalid breaks.
- * @compile/fail/ref=ExpressionSwitchBreaks2.out -XDrawDiagnostics --enable-preview -source 13 ExpressionSwitchBreaks2.java
+ * @compile/fail/ref=ExpressionSwitchBreaks2.out -XDrawDiagnostics --enable-preview -source ${jdk.version} ExpressionSwitchBreaks2.java
  */
 
 public class ExpressionSwitchBreaks2 {
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchBugs.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchBugs.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986 8214114 8214529
  * @summary Verify various corner cases with nested switch expressions.
- * @compile --enable-preview -source 13 ExpressionSwitchBugs.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchBugs.java
  * @run main/othervm --enable-preview ExpressionSwitchBugs
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchBugsInGen.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchBugsInGen.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8214031
  * @summary Verify various corner cases with nested switch expressions.
- * @compile --enable-preview -source 13 ExpressionSwitchBugsInGen.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchBugsInGen.java
  * @run main/othervm --enable-preview ExpressionSwitchBugsInGen
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchCodeFromJLS.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchCodeFromJLS.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Check switch expressions
- * @compile --enable-preview -source 13 ExpressionSwitchCodeFromJLS.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchCodeFromJLS.java
  * @run main/othervm --enable-preview ExpressionSwitchCodeFromJLS
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchDA.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchDA.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Check definite (un)assignment for in switch expressions.
- * @compile --enable-preview -source 13 ExpressionSwitchDA.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchDA.java
  * @run main/othervm --enable-preview ExpressionSwitchDA
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchEmbedding.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchEmbedding.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8214031 8214114
  * @summary Verify switch expressions embedded in various statements work properly.
- * @compile --enable-preview -source 13 ExpressionSwitchEmbedding.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchEmbedding.java
  * @run main/othervm --enable-preview ExpressionSwitchEmbedding
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchFallThrough.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchFallThrough.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Check fall through in switch expressions.
- * @compile --enable-preview -source 13 ExpressionSwitchFallThrough.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchFallThrough.java
  * @run main/othervm --enable-preview ExpressionSwitchFallThrough
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchFallThrough1.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchFallThrough1.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Check fall through in switch expressions.
- * @compile --enable-preview -source 13 ExpressionSwitchFallThrough1.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchFallThrough1.java
  * @run main/othervm --enable-preview ExpressionSwitchFallThrough1
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchFlow.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchFlow.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8212982
  * @summary Verify a compile-time error is produced if switch expression does not provide a value
- * @compile/fail/ref=ExpressionSwitchFlow.out --enable-preview -source 13 -XDrawDiagnostics ExpressionSwitchFlow.java
+ * @compile/fail/ref=ExpressionSwitchFlow.out --enable-preview -source ${jdk.version} -XDrawDiagnostics ExpressionSwitchFlow.java
  */
 
 public class ExpressionSwitchFlow {
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchInExpressionSwitch.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchInExpressionSwitch.java	Fri Feb 22 20:36:42 2019 +0000
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Check switch expressions embedded in switch expressions.
- * @compile --enable-preview -source 13 ExpressionSwitchInExpressionSwitch.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchInExpressionSwitch.java
  * @run main/othervm --enable-preview ExpressionSwitchInExpressionSwitch
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchInfer.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchInfer.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Check types inferred for switch expressions.
- * @compile/fail/ref=ExpressionSwitchInfer.out -XDrawDiagnostics --enable-preview -source 13 ExpressionSwitchInfer.java
+ * @compile/fail/ref=ExpressionSwitchInfer.out -XDrawDiagnostics --enable-preview -source ${jdk.version} ExpressionSwitchInfer.java
  */
 
 import java.util.ArrayList;
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchIntersectionTypes.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchIntersectionTypes.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8206986
  * @summary Verify behavior when an intersection type is inferred for switch expression.
- * @compile --enable-preview -source 13 ExpressionSwitchIntersectionTypes.java
+ * @compile --enable-preview -source ${jdk.version} ExpressionSwitchIntersectionTypes.java
  * @run main/othervm --enable-preview ExpressionSwitchIntersectionTypes
  */
 
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchNotExhaustive.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchNotExhaustive.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify behavior of not exhaustive switch expressions.
- * @compile/fail/ref=ExpressionSwitchNotExhaustive.out -XDrawDiagnostics --enable-preview -source 13 ExpressionSwitchNotExhaustive.java
+ * @compile/fail/ref=ExpressionSwitchNotExhaustive.out -XDrawDiagnostics --enable-preview -source ${jdk.version} ExpressionSwitchNotExhaustive.java
  */
 
 public class ExpressionSwitchNotExhaustive {
--- a/test/langtools/tools/javac/switchexpr/ExpressionSwitchUnreachable.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchUnreachable.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify reachability in switch expressions.
- * @compile/fail/ref=ExpressionSwitchUnreachable.out -XDrawDiagnostics --enable-preview -source 13 ExpressionSwitchUnreachable.java
+ * @compile/fail/ref=ExpressionSwitchUnreachable.out -XDrawDiagnostics --enable-preview -source ${jdk.version} ExpressionSwitchUnreachable.java
  */
 
 public class ExpressionSwitchUnreachable {
--- a/test/langtools/tools/javac/switchexpr/ParseIncomplete.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ParseIncomplete.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -61,13 +61,14 @@
         final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
         assert tool != null;
         DiagnosticListener<JavaFileObject> noErrors = d -> {};
+        String sourceVersion = Integer.toString(Runtime.version().feature());
 
         for (int i = 0; i < CODE.length(); i++) {
             String code = CODE.substring(0, i + 1);
             StringWriter out = new StringWriter();
             try {
                 JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
-                    List.of("-XDdev", "--enable-preview", "-source", "13"), null,
+                    List.of("-XDdev", "--enable-preview", "-source", sourceVersion), null,
                     Arrays.asList(new MyFileObject(code)));
                 ct.parse().iterator().next();
             } catch (Throwable t) {
--- a/test/langtools/tools/javac/switchexpr/ParserRecovery.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/ParserRecovery.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify the parser handles broken input gracefully.
- * @compile/fail/ref=ParserRecovery.out -XDrawDiagnostics --enable-preview -source 13 ParserRecovery.java
+ * @compile/fail/ref=ParserRecovery.out -XDrawDiagnostics --enable-preview -source ${jdk.version} ParserRecovery.java
  */
 
 public class ParserRecovery {
--- a/test/langtools/tools/javac/switchexpr/SwitchExpressionIsNotAConstant.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/SwitchExpressionIsNotAConstant.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -26,7 +26,7 @@
  * @bug 8214113
  * @summary Verify the switch expression's type does not have a constant attached,
  *          and so the switch expression is not elided.
- * @compile --enable-preview --source 13 SwitchExpressionIsNotAConstant.java
+ * @compile --enable-preview --source ${jdk.version} SwitchExpressionIsNotAConstant.java
  * @run main/othervm --enable-preview SwitchExpressionIsNotAConstant
  */
 public class SwitchExpressionIsNotAConstant {
--- a/test/langtools/tools/javac/switchexpr/SwitchExpressionScopesIsolated.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/SwitchExpressionScopesIsolated.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify that scopes in rule cases are isolated.
- * @compile/fail/ref=SwitchExpressionScopesIsolated.out -XDrawDiagnostics --enable-preview -source 13 SwitchExpressionScopesIsolated.java
+ * @compile/fail/ref=SwitchExpressionScopesIsolated.out -XDrawDiagnostics --enable-preview -source ${jdk.version} SwitchExpressionScopesIsolated.java
  */
 
 public class SwitchExpressionScopesIsolated {
--- a/test/langtools/tools/javac/switchexpr/SwitchExpressionSimpleVisitorTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/SwitchExpressionSimpleVisitorTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -89,7 +89,7 @@
 
         StringWriter out = new StringWriter();
         JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
-            List.of("--enable-preview", "-source", "13"), null,
+            List.of("--enable-preview", "-source", Integer.toString(Runtime.version().feature())), null,
             Arrays.asList(new MyFileObject(code)));
         return ct.parse().iterator().next();
     }
--- a/test/langtools/tools/javac/switchexpr/TryCatch.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchexpr/TryCatch.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -25,7 +25,7 @@
  * @test
  * @bug 8214114
  * @summary Verify try-catch inside a switch expression works properly.
- * @compile --enable-preview -source 13 TryCatch.java
+ * @compile --enable-preview -source ${jdk.version} TryCatch.java
  * @run main/othervm --enable-preview TryCatch
  */
 public class TryCatch {
--- a/test/langtools/tools/javac/switchextra/CaseTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/CaseTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -47,12 +47,13 @@
 public class CaseTest {
 
     public static void main(String[] args) throws Exception {
-        new CaseTest().testLabels();
-        new CaseTest().testStatement();
-        new CaseTest().testRule();
+        String sourceVersion = Integer.toString(Runtime.version().feature());
+        new CaseTest().testLabels(sourceVersion);
+        new CaseTest().testStatement(sourceVersion);
+        new CaseTest().testRule(sourceVersion);
     }
 
-    void testLabels() throws Exception {
+    void testLabels(String sourceVersion) throws Exception {
         String code = "class Test {\n" +
                       "    void t(int i) {\n" +
                       "         switch(i) {\n" +
@@ -72,7 +73,7 @@
                                                 .collect(Collectors.joining(",", "[", "]")));
                 return super.visitCase(node, p);
             }
-        }.scan(parse(code), null);
+        }.scan(parse(code, sourceVersion), null);
 
         List<String> expected = Arrays.asList("0", "[0]", "1", "[1,2]", "null", "[]");
 
@@ -81,7 +82,7 @@
         }
     }
 
-    void testStatement() throws Exception {
+    void testStatement(String sourceVersion) throws Exception {
         String code = "class Test {\n" +
                       "    void t(int i) {\n" +
                       "         switch(i) {\n" +
@@ -102,10 +103,10 @@
                 }
                 return super.visitCase(node, p);
             }
-        }.scan(parse(code), null);
+        }.scan(parse(code, sourceVersion), null);
     }
 
-    void testRule() throws Exception {
+    void testRule(String sourceVersion) throws Exception {
         String code = "class Test {\n" +
                       "    void t(int i) {\n" +
                       "         switch(i) {\n" +
@@ -126,17 +127,17 @@
                 }
                 return super.visitCase(node, p);
             }
-        }.scan(parse(code), null);
+        }.scan(parse(code, sourceVersion), null);
     }
 
-    private CompilationUnitTree parse(String code) throws IOException {
+    private CompilationUnitTree parse(String code, String sourceVersion) throws IOException {
         final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
         assert tool != null;
         DiagnosticListener<JavaFileObject> noErrors = d -> {};
 
         StringWriter out = new StringWriter();
         JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
-            List.of("-XDdev", "--enable-preview", "-source", "13"), null,
+            List.of("-XDdev", "--enable-preview", "-source", sourceVersion), null,
             Arrays.asList(new MyFileObject(code)));
         return ct.parse().iterator().next();
     }
--- a/test/langtools/tools/javac/switchextra/MultipleLabelsExpression.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/MultipleLabelsExpression.java	Fri Feb 22 20:36:42 2019 +0000
@@ -3,7 +3,7 @@
  * @bug 8206986
  * @summary Verify cases with multiple labels work properly.
  * @compile/fail/ref=MultipleLabelsExpression-old.out -source 9 -Xlint:-options -XDrawDiagnostics MultipleLabelsExpression.java
- * @compile --enable-preview -source 13 MultipleLabelsExpression.java
+ * @compile --enable-preview -source ${jdk.version} MultipleLabelsExpression.java
  * @run main/othervm --enable-preview MultipleLabelsExpression
  */
 
--- a/test/langtools/tools/javac/switchextra/MultipleLabelsStatement.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/MultipleLabelsStatement.java	Fri Feb 22 20:36:42 2019 +0000
@@ -3,7 +3,7 @@
  * @bug 8206986
  * @summary Verify cases with multiple labels work properly.
  * @compile/fail/ref=MultipleLabelsStatement-old.out -source 9 -Xlint:-options -XDrawDiagnostics MultipleLabelsStatement.java
- * @compile --enable-preview -source 13 MultipleLabelsStatement.java
+ * @compile --enable-preview -source ${jdk.version} MultipleLabelsStatement.java
  * @run main/othervm --enable-preview MultipleLabelsStatement
  */
 
--- a/test/langtools/tools/javac/switchextra/RuleParsingTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/RuleParsingTest.java	Fri Feb 22 20:36:42 2019 +0000
@@ -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
@@ -48,10 +48,11 @@
 public class RuleParsingTest {
 
     public static void main(String[] args) throws Exception {
-        new RuleParsingTest().testParseComplexExpressions();
+        String sourceVersion = Integer.toString(Runtime.version().feature());
+        new RuleParsingTest().testParseComplexExpressions(sourceVersion);
     }
 
-    void testParseComplexExpressions() throws Exception {
+    void testParseComplexExpressions(String sourceVersion) throws Exception {
         String[] expressions = {
             "(a)",
             "a",
@@ -94,7 +95,7 @@
 
         StringWriter out = new StringWriter();
         JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
-            List.of("--enable-preview", "-source", "13"), null,
+            List.of("--enable-preview", "-source", sourceVersion), null,
             Arrays.asList(new MyFileObject(code.toString())));
         CompilationUnitTree cut = ct.parse().iterator().next();
         Trees trees = Trees.instance(ct);
--- a/test/langtools/tools/javac/switchextra/SwitchArrowBrokenConstant.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/SwitchArrowBrokenConstant.java	Fri Feb 22 20:36:42 2019 +0000
@@ -3,7 +3,7 @@
  * @bug 8206986
  * @summary Verify reasonable errors are produced when neither ':' nor '->'
  *          is found are the expression of a case
- * @compile/fail/ref=SwitchArrowBrokenConstant.out -source 13 --enable-preview -Xlint:-preview -XDrawDiagnostics SwitchArrowBrokenConstant.java
+ * @compile/fail/ref=SwitchArrowBrokenConstant.out -source ${jdk.version} --enable-preview -Xlint:-preview -XDrawDiagnostics SwitchArrowBrokenConstant.java
  */
 
 public class SwitchArrowBrokenConstant {
--- a/test/langtools/tools/javac/switchextra/SwitchStatementArrow.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/SwitchStatementArrow.java	Fri Feb 22 20:36:42 2019 +0000
@@ -3,7 +3,7 @@
  * @bug 8206986
  * @summary Verify rule cases work properly.
  * @compile/fail/ref=SwitchStatementArrow-old.out -source 9 -Xlint:-options -XDrawDiagnostics SwitchStatementArrow.java
- * @compile --enable-preview -source 13 SwitchStatementArrow.java
+ * @compile --enable-preview -source ${jdk.version} SwitchStatementArrow.java
  * @run main/othervm --enable-preview SwitchStatementArrow
  */
 
--- a/test/langtools/tools/javac/switchextra/SwitchStatementBroken.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/SwitchStatementBroken.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify that rule and ordinary cases cannot be mixed.
- * @compile/fail/ref=SwitchStatementBroken.out -XDrawDiagnostics --enable-preview -source 13 SwitchStatementBroken.java
+ * @compile/fail/ref=SwitchStatementBroken.out -XDrawDiagnostics --enable-preview -source ${jdk.version} SwitchStatementBroken.java
  */
 
 public class SwitchStatementBroken {
--- a/test/langtools/tools/javac/switchextra/SwitchStatementBroken2.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/SwitchStatementBroken2.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify that not allowed types of statements cannot be used in rule case.
- * @compile/fail/ref=SwitchStatementBroken2.out -XDrawDiagnostics --enable-preview -source 13 SwitchStatementBroken2.java
+ * @compile/fail/ref=SwitchStatementBroken2.out -XDrawDiagnostics --enable-preview -source ${jdk.version} SwitchStatementBroken2.java
  */
 
 public class SwitchStatementBroken2 {
--- a/test/langtools/tools/javac/switchextra/SwitchStatementScopesIsolated.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/langtools/tools/javac/switchextra/SwitchStatementScopesIsolated.java	Fri Feb 22 20:36:42 2019 +0000
@@ -2,7 +2,7 @@
  * @test /nodynamiccopyright/
  * @bug 8206986
  * @summary Verify that scopes in rule cases are isolated.
- * @compile/fail/ref=SwitchStatementScopesIsolated.out -XDrawDiagnostics --enable-preview -source 13 SwitchStatementScopesIsolated.java
+ * @compile/fail/ref=SwitchStatementScopesIsolated.out -XDrawDiagnostics --enable-preview -source ${jdk.version} SwitchStatementScopesIsolated.java
  */
 
 public class SwitchStatementScopesIsolated {
--- a/test/langtools/tools/javadoc/6176978/T6176978.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6176978
- * @summary current Javadoc's invocation and extension (Doclet) mechanisms are problematic
- * @modules jdk.javadoc
- * @build T6176978
- * @run main T6176978
- */
-
-import java.io.*;
-import java.net.*;
-
-public class T6176978
-{
-    public static void main(String[] args) throws Exception {
-        // create and use a temp dir that will not be on jtreg's
-        // default class path
-        File tmpDir = new File("tmp");
-        tmpDir.mkdirs();
-
-        File testSrc = new File(System.getProperty("test.src", "."));
-        String[] javac_args = {
-            "-d",
-            "tmp",
-            new File(testSrc, "X.java").getPath()
-        };
-
-        int rc = com.sun.tools.javac.Main.compile(javac_args);
-        if (rc != 0)
-            throw new Error("javac exit code: " + rc);
-
-        String[] jdoc_args = {
-            "-doclet",
-            "X",
-            new File(testSrc, "T6176978.java").getPath()
-        };
-
-        rc = com.sun.tools.javadoc.Main.execute(jdoc_args);
-        if (rc == 0)
-            throw new Error("javadoc unexpectedly succeeded");
-
-
-
-        Thread currThread = Thread.currentThread();
-        ClassLoader saveClassLoader = currThread.getContextClassLoader();
-        URLClassLoader urlCL = new URLClassLoader(new URL[] { tmpDir.toURL() });
-        currThread.setContextClassLoader(urlCL);
-
-        try {
-            rc = com.sun.tools.javadoc.Main.execute(jdoc_args);
-            if (rc != 0)
-                throw new Error("javadoc exit: " + rc);
-        }
-        finally {
-            currThread.setContextClassLoader(saveClassLoader);
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/6176978/X.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * 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 com.sun.javadoc.*;
-
-public class X {
-    public static boolean start(RootDoc root) {
-        System.out.println("X.start");
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/6227454/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6227454
- * @summary package.html and overview.html may not be read fully
- * @modules jdk.javadoc
- */
-
-import java.io.*;
-
-import com.sun.javadoc.Doclet;
-import com.sun.javadoc.RootDoc;
-
-public class Test extends Doclet {
-    public static void main(String... args) throws Exception {
-        new Test().run();
-    }
-
-    void run() throws Exception {
-        test("<body>ABC      XYZ</body>");
-        test("<body>ABC      XYZ</BODY>");
-        test("<BODY>ABC      XYZ</body>");
-        test("<BODY>ABC      XYZ</BODY>");
-        test("<BoDy>ABC      XYZ</bOdY>");
-        test("      ABC      XYZ</bOdY>", "Body tag missing from HTML");
-        test("<body>ABC      XYZ       ", "Close body tag missing from HTML");
-        test("      ABC      XYZ       ", "Body tag missing from HTML");
-        test("<body>ABC" + bigText(8192, 40) + "XYZ</body>");
-
-        if (errors > 0)
-            throw new Exception(errors + " errors occurred");
-    }
-
-    void test(String body) throws IOException {
-        test(body, null);
-    }
-
-    void test(String body, String expectError) throws IOException {
-        String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "
-                         + "\"http://www.w3.org/TR/html4/loose.dtd\">";
-        String headTag = "<head><title>Title </title></head>";
-        String text = docType + "<html>" + headTag + body + "</html>";
-        testNum++;
-        System.err.println("test " + testNum);
-        File file = writeFile("overview" + testNum + ".html", text);
-        String thisClassName = Test.class.getName();
-        File testSrc = new File(System.getProperty("test.src"));
-        String[] args = {
-            "-classpath", ".",
-            "-package",
-            "-overview", file.getPath(),
-            new File(testSrc, thisClassName + ".java").getPath()
-        };
-
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        int rc = com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                pw, pw, pw,
-                thisClassName,
-                args);
-        pw.close();
-        String out = sw.toString();
-        if (!out.isEmpty())
-            System.err.println(out);
-        System.err.println("javadoc exit: rc=" + rc);
-
-        if (expectError == null) {
-            if (rc != 0)
-                error("unexpected exit from javadoc; rc:" + rc);
-        } else {
-            if (!out.contains(expectError))
-                error("expected error text not found: " + expectError);
-        }
-    }
-
-    String bigText(int lines, int lineLength) {
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < lineLength; i++)
-            sb.append(String.valueOf(i % 10));
-        sb.append("\n");
-        String line = sb.toString();
-        sb.setLength(0);
-        for (int i = 0; i < lines; i++)
-            sb.append(line);
-        return sb.toString();
-    }
-
-    File writeFile(String path, String body) throws IOException {
-        File f = new File(path);
-        FileWriter out = new FileWriter(f);
-        try {
-            out.write(body);
-        } finally {
-            out.close();
-        }
-        return f;
-    }
-
-    void error(String msg) {
-        System.err.println("Error: " + msg);
-        errors++;
-    }
-
-    int testNum;
-    int errors;
-
-    public static boolean start(RootDoc root) {
-        String text = root.commentText();
-        if (text.length() < 64)
-            System.err.println("text: '" + text + "'");
-        else
-            System.err.println("text: '"
-                    + text.substring(0, 20)
-                    + "..."
-                    + text.substring(text.length() - 20)
-                    + "'");
-        return text.startsWith("ABC") && text.endsWith("XYZ");
-    }
-}
--- a/test/langtools/tools/javadoc/6942366/T6942366.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 6942366
- * @summary javadoc no longer inherits doc from sourcepath
- * @modules jdk.javadoc
- * @library /tools/javadoc/lib
- * @build p.Base Test ToyDoclet
- * @run main T6942366
- */
-
-import java.io.*;
-import java.util.*;
-
-public class T6942366 {
-    public static void main(String... args) throws Exception {
-        new T6942366().run();
-    }
-
-    File testSrc;
-    File testClasses;
-    int count;
-    int errors;
-
-    void run() throws Exception {
-        testSrc = new File(System.getProperty("test.src"));
-        testClasses = new File(System.getProperty("test.classes"));
-
-        test(true,  false);
-        test(false, true);
-        test(true,  true);
-
-        if (errors > 0)
-            throw new Exception(errors + " errors found");
-    }
-
-    void test(boolean useSourcePath, boolean useClassPath) throws Exception {
-        System.out.println("test " + (++count) + " sp:" + useSourcePath + " cp:" + useClassPath);
-        File testDir = new File("test" + count);
-        testDir.mkdirs();
-
-        List<String> args = new ArrayList<String>();
-        args.add("-doclet");
-        args.add("ToyDoclet");
-        if (useSourcePath) {
-            args.add("-sourcepath");
-            args.add(testSrc.getPath());
-        }
-        if (useClassPath) {
-            args.add("-classpath");
-            args.add(testClasses.getPath());
-        } else {
-            // override classpath to avoid stuff jtreg might have put on papth
-            args.add("-classpath");
-            args.add(".");
-        }
-
-        args.add(new File(testSrc, "Test.java").getPath());
-        System.out.println("ToyDoclet: " + args);
-
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-
-        int rc = com.sun.tools.javadoc.Main.execute("ToyDoclet", pw, pw, pw,
-                "ToyDoclet", getClass().getClassLoader(),
-                args.toArray(new String[args.size()]));
-
-        if (rc != 0)
-            throw new Exception("unexpected exit from javadoc, rc=" + rc);
-
-        if (useSourcePath && useClassPath) {
-            long srcLastMod = new File(testSrc, "Test.java").lastModified();
-            long classLastMod = new File(testClasses, "Test.class").lastModified();
-            System.out.println("Test.java last modified:  " + new Date(srcLastMod));
-            System.out.println("Test.class last modified: " + new Date(classLastMod));
-            System.out.println((srcLastMod > classLastMod ? "source" : "class") + " is newer");
-        }
-
-        String s = "javadoc-for-Base.m";
-        boolean expect = useSourcePath;
-        boolean found = sw.toString().contains(s);
-        if (found) {
-            if (expect)
-                System.out.println("javadoc content \"" + s + "\" found, as expected");
-            else
-                error("javadoc content \"" + s + "\" found unexpectedly");
-        } else {
-            if (expect)
-                error("javadoc content \"" + s + "\" not found");
-            else
-                System.out.println("javadoc content \"" + s + "\" not found, as expected");
-        }
-
-        System.out.println();
-    }
-
-    boolean contains(File f, String s) throws Exception {
-        byte[] buf = new byte[(int) f.length()];
-        try (DataInputStream in = new DataInputStream(new FileInputStream(f))) {
-            in.readFully(buf);
-        }
-        return new String(buf).contains(s);
-    }
-
-    void error(String msg) {
-        System.out.println("Error: " + msg);
-        errors++;
-    }
-
-}
-
--- a/test/langtools/tools/javadoc/6942366/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class Test extends p.Base {
-    // overrides Base.m
-    public void m() { }
-}
-
--- a/test/langtools/tools/javadoc/6942366/p/Base.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * 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 p;
-
-public class Base {
-    /** javadoc-for-Base.m. */
-    public void m() { }
-}
-
--- a/test/langtools/tools/javadoc/6958836/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 6958836 8002168
- * @summary javadoc should support -Xmaxerrs and -Xmaxwarns
- * @modules jdk.javadoc
- */
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.javadoc.DocErrorReporter;
-import com.sun.javadoc.RootDoc;
-
-
-
-public class Test {
-    private static final String ERROR_MARKER = "Error-count";
-    private static final String WARNING_MARKER = "Warning-count";
-
-    public static void main(String... args) throws Exception {
-        new Test().run();
-    }
-
-    void run() throws Exception {
-        javadoc("Errors",  list(),                   10,  0);
-        javadoc("Errors",  list("-Xmaxerrs",   "0"), 10,  0);
-        javadoc("Errors",  list("-Xmaxerrs",   "2"),  2,  0);
-        javadoc("Errors",  list("-Xmaxerrs",   "4"),  4,  0);
-        javadoc("Errors",  list("-Xmaxerrs",  "20"), 10,  0);
-
-        javadoc("Warnings", list(),                    0, 10);
-        javadoc("Warnings", list("-Xmaxwarns",  "0"),  0, 10);
-        javadoc("Warnings", list("-Xmaxwarns",  "2"),  0,  2);
-        javadoc("Warnings", list("-Xmaxwarns",  "4"),  0,  4);
-        javadoc("Warnings", list("-Xmaxwarns", "20"),  0, 10);
-
-        if (errors > 0)
-            throw new Exception(errors + " errors occurred.");
-    }
-
-    void javadoc(String selector, List<String> testOpts,
-                int expectErrs, int expectWarns) {
-        System.err.println("Test " + (++count) + ": " + selector + " " + testOpts);
-        File testOutDir = new File("test" + count);
-
-        List<String> opts = new ArrayList<String>();
-        // Force en_US locale in lieu of something like -XDrawDiagnostics.
-        // For some reason, this must be the first option when used.
-        opts.addAll(list("-locale", "en_US"));
-        opts.add(new File(System.getProperty("test.src"),
-                Test.class.getSimpleName() + ".java").getPath());
-        opts.addAll(testOpts);
-        opts.add("-gen" + selector);
-
-        StringWriter errSW = new StringWriter();
-        PrintWriter errPW = new PrintWriter(errSW);
-        StringWriter warnSW = new StringWriter();
-        PrintWriter warnPW = new PrintWriter(warnSW);
-        StringWriter noteSW = new StringWriter();
-        PrintWriter notePW = new PrintWriter(noteSW);
-
-        int rc = com.sun.tools.javadoc.Main.execute("javadoc",
-                              errPW, warnPW, notePW,
-                              "Test$TestDoclet",
-                              getClass().getClassLoader(),
-                              opts.toArray(new String[opts.size()]));
-        System.err.println("rc: " + rc);
-
-        errPW.close();
-        String errOut = errSW.toString();
-        System.err.println("Errors:\n" + errOut);
-        warnPW.close();
-        String warnOut = warnSW.toString();
-        System.err.println("Warnings:\n" + warnOut);
-        notePW.close();
-        String noteOut = noteSW.toString();
-        System.err.println("Notes:\n" + noteOut);
-
-        check(errOut, ERROR_MARKER, expectErrs);
-        check(warnOut, WARNING_MARKER, expectWarns); // requires -locale en_US
-    }
-
-    void check(String text, String expectText, int expectCount) {
-        int foundCount = 0;
-        for (String line: text.split("[\r\n]+")) {
-            if (line.contains(expectText))
-                foundCount++;
-        }
-        if (foundCount != expectCount) {
-            error("incorrect number of matches found: " + foundCount
-                  + ", expected: " + expectCount);
-        }
-    }
-
-    private List<String> list(String... args) {
-        return Arrays.asList(args);
-    }
-
-    void error(String msg) {
-        System.err.println(msg);
-        errors++;
-    }
-
-    int count;
-    int errors;
-
-    public static class TestDoclet {
-        static boolean genErrors = false;
-        static boolean genWarnings = false;
-
-        public static boolean start(RootDoc root) {
-            // generate 10 errors or warnings
-            for (int i = 1 ; i <= 10 ; i++) {
-                if (genErrors)
-                    root.printError(ERROR_MARKER + " " + i);
-                if (genWarnings)
-                    root.printWarning(WARNING_MARKER + " " + i);
-            }
-            return true;
-        }
-
-        public static int optionLength(String option) {
-            if (option == null) {
-                throw new Error("invalid usage: ");
-            }
-            System.out.println("option: " + option);
-            switch (option.trim()) {
-                case "-genErrors":
-                    return 1;
-                case "-genWarnings":
-                    return 1;
-                default:
-                    return 0;
-            }
-        }
-
-        public static boolean validOptions(String[][] options, DocErrorReporter reporter) {
-            for (int i = 0 ; i < options.length; i++) {
-               String opt = options[i][0].trim();
-               switch (opt) {
-                   case "-genErrors":
-                       genErrors = true;
-                       genWarnings = false;
-                       break;
-                   case "-genWarnings":
-                       genErrors = false;
-                       genWarnings = true;
-                       break;
-               }
-            }
-            return true;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/6964914/Error.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class Error {
-    Object x // no semicolon
-}
--- a/test/langtools/tools/javadoc/6964914/JavacWarning.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class JavacWarning {
-    String _ = null; // this will cause a warning with -source 8 (this is an error as of -source 9)
-}
--- a/test/langtools/tools/javadoc/6964914/JavadocWarning.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class JavadocWarning {
-    /** @see DoesNotExist */
-    int x;
-}
--- a/test/langtools/tools/javadoc/6964914/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 6964914
- * @summary javadoc does not output number of warnings using user written doclet
- * @modules jdk.javadoc/com.sun.tools.doclets.standard
- */
-
-import java.io.*;
-
-public class Test {
-    public static void main(String... args) throws Exception {
-        new Test().run();
-    }
-
-    public void run() throws Exception {
-        javadoc("Error.java", "1 error");
-        javadoc("JavacWarning.java", "1 warning");
-        if (errors > 0)
-            throw new Exception(errors + " errors found");
-    }
-
-    void javadoc(String path, String expect) {
-        File testSrc = new File(System.getProperty("test.src"));
-        String[] args = {
-            "-source", "8",
-            "-classpath", ".",
-            "-package",
-            new File(testSrc, path).getPath()
-        };
-
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        int rc = com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                pw, pw, pw,
-                com.sun.tools.doclets.standard.Standard.class.getName(),
-                args);
-        pw.close();
-        String out = sw.toString();
-        if (!out.isEmpty())
-            System.err.println(out);
-        System.err.println("javadoc exit: rc=" + rc);
-
-        if (!out.contains(expect))
-            error("expected text not found: " + expect);
-    }
-
-    void error(String msg) {
-        System.err.println("Error: " + msg);
-        errors++;
-    }
-
-    int errors;
-}
--- a/test/langtools/tools/javadoc/6964914/TestStdDoclet.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 6964914 8182765
- * @summary javadoc does not output number of warnings using user written doclet
- */
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Dummy javadoc comment.
- * @author jjg
- * @see DoesNotExist
- */
-public class TestStdDoclet {
-    public static void main(String... args) throws Exception {
-        new TestStdDoclet().run();
-    }
-
-    /**
-     * More dummy comments.
-     * @throws DoesNotExist   oops, javadoc does not see this
-     * @see DoesNotExist
-     */
-    void run() throws Exception {
-        File javaHome = new File(System.getProperty("java.home"));
-        File javadoc = new File(new File(javaHome, "bin"), "javadoc");
-        File testSrc = new File(System.getProperty("test.src"));
-
-        // run javadoc in separate process to ensure doclet executed under
-        // normal user conditions w.r.t. classloader
-        String thisClassName = TestStdDoclet.class.getName();
-        List<String> cmdArgs = new ArrayList<>();
-        cmdArgs.add(javadoc.getPath());
-        cmdArgs.addAll(Arrays.asList(
-                "-classpath", ".", // insulates us from ambient classpath
-                "-Xdoclint:none",
-                "-package",
-                new File(testSrc, thisClassName + ".java").getPath()
-        ));
-        Process p = new ProcessBuilder()
-            .command(cmdArgs)
-            .redirectErrorStream(true)
-            .start();
-
-        int actualDocletWarnCount = 0;
-        int reportedDocletWarnCount = 0;
-        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        try {
-            String line;
-            while ((line = in.readLine()) != null) {
-                System.err.println(line);
-                if (line.contains("DoesNotExist"))
-                    actualDocletWarnCount++;
-                if (line.matches("[0-9]+ warning(s)?"))
-                    reportedDocletWarnCount =
-                            Integer.valueOf(line.substring(0, line.indexOf(" ")));
-            }
-        } finally {
-            in.close();
-        }
-        int rc = p.waitFor();
-        if (rc != 0)
-            System.err.println("javadoc failed, rc:" + rc);
-
-        int expectedDocletWarnCount = 2;
-        checkEqual("actual", actualDocletWarnCount, "expected", expectedDocletWarnCount);
-        checkEqual("actual", actualDocletWarnCount, "reported", reportedDocletWarnCount);
-    }
-
-    /**
-     * Private method should not cause a warning.
-     * @see DoesNotExist
-     */
-    private void checkEqual(String l1, int i1, String l2, int i2) throws Exception {
-        if (i1 != i2)
-            throw new Exception(l1 + " warn count, " + i1 + ", does not match "
-                        + l2 + " warn count, " + i2);
-    }
-
-}
--- a/test/langtools/tools/javadoc/6964914/TestUserDoclet.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 6964914
- * @summary javadoc does not output number of warnings using user written doclet
- * @modules jdk.javadoc
- */
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.javadoc.Doclet;
-import com.sun.javadoc.RootDoc;
-
-public class TestUserDoclet extends Doclet {
-    public static void main(String... args) throws Exception {
-        new TestUserDoclet().run();
-    }
-
-    static final String docletWarning = "warning from test doclet";
-
-    /** Main doclet method. */
-    public static boolean start(RootDoc root) {
-        root.printWarning(null, docletWarning);
-        return true;
-    }
-
-    /** Main test method. */
-    void run() throws Exception {
-        File javaHome = new File(System.getProperty("java.home"));
-        File javadoc = new File(new File(javaHome, "bin"), "javadoc");
-        File testSrc = new File(System.getProperty("test.src"));
-        File testClasses = new File(System.getProperty("test.classes"));
-
-        // run javadoc in separate process to ensure doclet executed under
-        // normal user conditions w.r.t. classloader
-        String thisClassName = TestUserDoclet.class.getName();
-        List<String> cmdArgs = new ArrayList<>();
-        cmdArgs.add(javadoc.getPath());
-        cmdArgs.addAll(Arrays.asList(
-                "-doclet", thisClassName,
-                "-docletpath", testClasses.getPath(),
-                new File(testSrc, thisClassName + ".java").getPath()
-        ));
-        Process p = new ProcessBuilder()
-            .command(cmdArgs)
-            .redirectErrorStream(true)
-            .start();
-
-        int actualDocletWarnCount = 0;
-        int reportedDocletWarnCount = 0;
-        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        try {
-            String line;
-            while ((line = in.readLine()) != null) {
-                System.err.println(line);
-                if (line.contains(docletWarning))
-                    actualDocletWarnCount++;
-                if (line.matches("[0-9]+ warning(s)?"))
-                    reportedDocletWarnCount =
-                            Integer.valueOf(line.substring(0, line.indexOf(" ")));
-            }
-        } finally {
-            in.close();
-        }
-        int rc = p.waitFor();
-        if (rc != 0)
-            System.err.println("javadoc failed, rc:" + rc);
-
-        int expectedDocletWarnCount = 1;
-        checkEqual("actual", actualDocletWarnCount, "expected", expectedDocletWarnCount);
-        checkEqual("actual", actualDocletWarnCount, "reported", reportedDocletWarnCount);
-    }
-
-    void checkEqual(String l1, int i1, String l2, int i2) throws Exception {
-        if (i1 != i2)
-            throw new Exception(l1 + " warn count, " + i1 + ", does not match "
-                        + l2 + " warn count, " + i2);
-    }
-
-}
--- a/test/langtools/tools/javadoc/8025693/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 8025693
- * @summary javadoc should ignore <clinit> methods found in classes on classpath
- * @modules jdk.javadoc
- */
-
-import java.io.*;
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        new Test().run();
-    }
-
-    final File baseFile = new File("src/Base.java");
-    final String baseText =
-        "package p;\n" +
-        "public class Base { static { } }\n";
-
-    final File srcFile = new File("src/C.java");
-    final String srcText =
-        "package p;\n" +
-        "/** comment */\n" +
-        "public abstract class C extends Base { }\n";
-
-    void run() throws Exception {
-        File classesDir = new File("classes");
-        classesDir.mkdirs();
-        writeFile(baseFile, baseText);
-        String[] javacArgs = {
-            "-d", classesDir.getPath(),
-            baseFile.getPath()
-        };
-        com.sun.tools.javac.Main.compile(javacArgs);
-
-        writeFile(srcFile, srcText);
-        String[] args = {
-            "-d", "api",
-            "-classpath", classesDir.getPath(),
-            "-package", "p",
-            srcFile.getPath()
-        };
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        PrintStream ps = new PrintStream(baos);
-        PrintStream prev = System.err;
-        System.setErr(ps);
-        try {
-            int rc = com.sun.tools.javadoc.Main.execute(args);
-        } finally {
-            System.err.flush();
-            System.setErr(prev);
-        }
-        String out = baos.toString();
-        System.out.println(out);
-
-        String errorMessage = "java.lang.IllegalArgumentException: <clinit>";
-        if (out.contains(errorMessage))
-            throw new Exception("error message found: " + errorMessage);
-    }
-
-    void writeFile(File file, String body) throws IOException {
-        file.getParentFile().mkdirs();
-        try (FileWriter out = new FileWriter(file)) {
-            out.write(body);
-        }
-    }
-}
-
--- a/test/langtools/tools/javadoc/8147801/T8147801.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 8147801
- * @summary java.nio.file.ClosedFileSystemException when using Javadoc API's in JDK9
- * @modules jdk.javadoc/com.sun.tools.javadoc
- * @library jarsrc
- * @build lib.* p.*
- * @run main T8147801
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.nio.file.ClosedFileSystemException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
-import java.util.stream.Stream;
-
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.FieldDoc;
-import com.sun.javadoc.RootDoc;
-
-/*
- * This test verifies the use of the hidden fileManager.deferClose
- * option, to work around the limitation that javadoc objects
- * (like RootDoc and related types) should cannot normally be used
- * after javadoc exits, closing its file manager (if it opened it.)
- *
- * The test runs javadoc on a chain of classes, 1 in source form,
- * and 2 in a jar file. javadoc/javac will "complete" classes found
- * in source, but will eagerly "classes" in class form.
- * The chain is p/Test.java -> lib/Lib1.class -> lib/Lib2.class.
- * After javadoc exits, the classes are examined, to finally force
- * the classes to be completed, possibly causing javac to try and access
- * references into a .jar file system which has now been closed.
- *
- * The test runs two test cases -- one without the workaround option,
- * to test the validity of the test case, and one with the workaround
- * option, to test that it works as expected.
- */
-public class T8147801 {
-    public static void main(String... args) throws Exception {
-        new T8147801().run();
-    }
-
-    void run() throws Exception {
-        initJar();
-        test(false);
-        test(true);
-        if (errors > 0) {
-            throw new Exception(errors + " errors occurred");
-        }
-    }
-
-    void test(boolean withOption) {
-        System.err.println("Testing " + (withOption ? "with" : "without") + " option");
-        try {
-            String dump = "";
-            RootDoc root = getRootDoc(withOption);
-            for (ClassDoc cd: root.specifiedClasses()) {
-                dump += dump(cd);
-            }
-            if (dump.contains("lib.Lib2.i")) {
-                if (!withOption) {
-                    error("control case failed: Lib2 class file was read, unexpectedly, without using option");
-                }
-            } else {
-                if (withOption) {
-                    error("test case failed: could not read Lib2 class file, using option");
-                }
-            }
-        } catch (ClosedFileSystemException e) {
-            error("Unexpected exception: " + e);
-        }
-        System.err.println();
-    }
-
-    RootDoc getRootDoc(boolean withOption) {
-        List<String> opts = new ArrayList<>();
-        if (withOption)
-            opts.add("-XDfileManager.deferClose=10");
-        opts.add("-doclet");
-        opts.add(getClass().getName());
-        opts.add("-classpath");
-        opts.add(jarPath.toString());
-        opts.add(Paths.get(System.getProperty("test.src"), "p", "Test.java").toString());
-        System.err.println("javadoc opts: " + opts);
-        int rc = com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                // by specifying our own class loader, we get the same Class instance as this
-                getClass().getClassLoader(),
-                opts.toArray(new String[opts.size()]));
-        if (rc != 0) {
-            error("unexpected exit from javadoc or doclet: " + rc);
-        }
-        return cachedRoot;
-    }
-
-    String dump(ClassDoc cd) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        dump(pw, "", cd);
-        String out = sw.toString();
-        System.err.println(out);
-        return out;
-    }
-
-    void dump(PrintWriter out, String prefix, ClassDoc cd) {
-        out.println(prefix + "class: " + cd);
-        for (FieldDoc fd: cd.fields()) {
-            out.println(prefix + "  " + fd);
-            if (fd.type().asClassDoc() != null) {
-                dump(out, prefix + "    ", fd.type().asClassDoc());
-            }
-        }
-    }
-
-    void initJar() throws IOException {
-        String testClassPath = System.getProperty("test.class.path", "");
-        Path jarsrc = Stream.of(testClassPath.split(File.pathSeparator))
-                .map(Paths::get)
-                .filter(e -> e.endsWith("jarsrc"))
-                .findAny()
-                .orElseThrow(() -> new InternalError("jarsrc not found"));
-        jarPath = Paths.get("lib.jar");
-        try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(jarPath))) {
-            String[] classNames = {"Lib1.class", "Lib2.class"};
-            for (String cn : classNames) {
-                out.putNextEntry(new JarEntry("lib/" + cn));
-                Path libClass = jarsrc.resolve("lib").resolve(cn);
-                out.write(Files.readAllBytes(libClass));
-            }
-        }
-    }
-
-    void error(String msg) {
-        System.err.println("Error: " + msg);
-        errors++;
-    }
-
-    Path jarPath;
-    int errors;
-
-    // Bad doclet caches the RootDoc for later use
-
-    static RootDoc cachedRoot;
-
-    public static boolean start(RootDoc root) {
-        cachedRoot = root;
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/8147801/jarsrc/lib/Lib1.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package lib;
-
-public class Lib1 {
-    public Lib2 lib2;
-}
--- a/test/langtools/tools/javadoc/8147801/jarsrc/lib/Lib2.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 lib;
-
-public class Lib2 {
-    public int i;
-}
--- a/test/langtools/tools/javadoc/8147801/p/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package p;
-
-public class Test {
-    public lib.Lib1 lib1;
-}
-
--- a/test/langtools/tools/javadoc/AddOpensTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 8181878
- * @summary javadoc should support/ignore --add-opens
- * @modules jdk.compiler/com.sun.tools.javac.api
- * @modules jdk.compiler/com.sun.tools.javac.main
- * @modules jdk.javadoc/jdk.javadoc.internal.api
- * @modules jdk.javadoc/jdk.javadoc.internal.tool
- * @library /tools/lib /tools/javadoc/lib
- * @build toolbox.JavacTask toolbox.JavadocTask toolbox.TestRunner toolbox.ToolBox ToyDoclet
- * @run main AddOpensTest
- */
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-import toolbox.JavadocTask;
-import toolbox.Task;
-import toolbox.TestRunner;
-import toolbox.ToolBox;
-
-public class AddOpensTest extends TestRunner {
-    public static void main(String... args) throws Exception {
-        AddOpensTest t = new AddOpensTest();
-        t.runTests();
-    }
-
-    private final ToolBox tb = new ToolBox();
-    private final Path src = Paths.get("src");
-    private final Path api = Paths.get("api");
-
-    AddOpensTest() throws Exception {
-        super(System.err);
-        init();
-    }
-
-    void init() throws IOException {
-        tb.writeJavaFiles(src, "public class C { }");
-    }
-
-    @Test
-    public void testEncoding() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.EXEC)
-                .options("-docletpath", System.getProperty("test.class.path"),
-                        "-doclet", "ToyDoclet",
-                        "--add-opens", "some.module")
-                .files(src.resolve("C.java"))
-                .run(Task.Expect.SUCCESS)
-                .writeAll();
-    }
-}
-
--- a/test/langtools/tools/javadoc/BadOptionsTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 8169676
- * @summary boolean result of Option.process is often ignored
- * @modules jdk.compiler/com.sun.tools.javac.api
- * @modules jdk.compiler/com.sun.tools.javac.main
- * @modules jdk.javadoc/jdk.javadoc.internal.api
- * @modules jdk.javadoc/jdk.javadoc.internal.tool
- * @library /tools/lib /tools/javadoc/lib
- * @build toolbox.JavacTask toolbox.JavadocTask toolbox.TestRunner toolbox.ToolBox ToyDoclet
- * @run main BadOptionsTest
- */
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Locale;
-import java.util.Objects;
-import java.util.Set;
-
-import javax.lang.model.SourceVersion;
-
-import jdk.javadoc.doclet.Doclet;
-import jdk.javadoc.doclet.DocletEnvironment;
-import jdk.javadoc.doclet.Reporter;
-
-import toolbox.JavadocTask;
-import toolbox.ModuleBuilder;
-import toolbox.Task;
-import toolbox.TestRunner;
-import toolbox.ToolBox;
-
-/*
- * This is primarily a test of the error reporting mechanisms
- * for bad options provided by javac and utilized by javadoc.
- * It is not an exhaustive test of all bad option forms detected
- * by javac/javadoc.
- */
-public class BadOptionsTest extends TestRunner {
-
-    public static void main(String... args) throws Exception {
-        BadOptionsTest t = new BadOptionsTest();
-        t.runTests();
-    }
-
-    private final ToolBox tb = new ToolBox();
-    private final Path src = Paths.get("src");
-    private final Class<?> docletClass;
-
-    BadOptionsTest() throws Exception {
-        super(System.err);
-        docletClass = getClass().getClassLoader().loadClass("ToyDoclet");
-        init();
-    }
-
-    void init() throws IOException {
-        tb.writeJavaFiles(src,
-                "public class C { }");
-
-    }
-
-    @Test
-    public void testAddModulesEmptyArg() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.API)
-                .docletClass(docletClass)
-                .options("--add-modules", "")
-                .files(src.resolve("C.java"))
-                .run(Task.Expect.FAIL)
-                .writeAll();
-        checkFound(result.getOutput(Task.OutputKind.DIRECT),
-                "javadoc: error - error: no value for --add-modules option");
-        checkNotFound(result, "Exception", "at jdk.javadoc/");
-    }
-
-    @Test
-    public void testAddModulesBadName() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.API)
-                .docletClass(docletClass)
-                .options("--add-modules", "123")
-                .files(src.resolve("C.java"))
-                .run(Task.Expect.FAIL)
-                .writeAll();
-        checkFound(result.getOutput(Task.OutputKind.DIRECT),
-                "error: bad name in value for --add-modules option: '123'");
-        checkNotFound(result, "Exception", "at jdk.javadoc/");
-    }
-
-    @Test
-    public void testAddExportsEmptyArg() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.API)
-                .docletClass(docletClass)
-                .options("--add-exports", "")
-                .files(src.resolve("C.java"))
-                .run(Task.Expect.FAIL)
-                .writeAll();
-        checkFound(result.getOutput(Task.OutputKind.DIRECT),
-                "javadoc: error - error: no value for --add-exports option");
-        checkNotFound(result, "Exception", "at jdk.javadoc/");
-    }
-
-    @Test
-    public void testAddExportsBadArg() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.API)
-                .docletClass(docletClass)
-                .options("--add-exports", "m/p")
-                .files(src.resolve("C.java"))
-                .run(Task.Expect.FAIL)
-                .writeAll();
-        checkFound(result.getOutput(Task.OutputKind.DIRECT),
-                "javadoc: error - error: bad value for --add-exports option: 'm/p'");
-        checkNotFound(result, "Exception", "at jdk.javadoc/");
-    }
-
-    @Test
-    public void testAddExportsBadName() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.API)
-                .docletClass(docletClass)
-                .options("--add-exports", "m!/p1=m2")
-                .files(src.resolve("C.java"))
-                .run()
-                .writeAll();
-        checkFound(result.getOutput(Task.OutputKind.DIRECT),
-                "warning: bad name in value for --add-exports option: 'm!'");
-        checkNotFound(result, "Exception", "at jdk.javadoc/");
-    }
-
-    private void checkFound(String log, String... expect) {
-        for (String e : expect) {
-            if (!log.contains(e)) {
-                error("Expected string not found: '" + e + "'");
-            }
-        }
-    }
-
-    private void checkNotFound(Task.Result result, String... unexpected) {
-        for (Task.OutputKind k : Task.OutputKind.values()) {
-            String r = result.getOutput(k);
-            for (String u : unexpected) {
-                if (r.contains(u)) {
-                    error("Unexpected string found: '" + u + "'");
-                }
-            }
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/BooleanConst.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4587494
- * @summary Constant field values for boolean Data-Types don't use true and false
- * @author gafter
- * @modules jdk.javadoc
- * @run main BooleanConst
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-public class BooleanConst extends Doclet
-{
-    public static void main(String[] args) {
-        // run javadoc on package p
-        if (com.sun.tools.javadoc.Main.
-            execute("javadoc", "BooleanConst", BooleanConst.class.getClassLoader(),
-                    new String[] {System.getProperty("test.src", ".") + java.io.File.separatorChar + "BooleanConst.java"}) != 0)
-            throw new Error();
-    }
-
-    public static final boolean b1 = false;
-    public static final boolean b2 = true;
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc[] classes = root.classes();
-        if (classes.length != 1)
-            throw new Error("1 " + Arrays.asList(classes));
-        ClassDoc self = classes[0];
-        FieldDoc[] fields = self.fields();
-        if (fields.length != 2)
-            throw new Error("2 " + Arrays.asList(fields));
-        for (int i=0; i<fields.length; i++) {
-            FieldDoc f = fields[i];
-            if (f.name().equals("b1")) {
-                Object value = f.constantValue();
-                if (value == null || !(value instanceof Boolean) || ((Boolean)value).booleanValue())
-                    throw new Error("4 " + value);
-            } else if (f.name().equals("b2")) {
-                Object value = f.constantValue();
-                if (value == null || !(value instanceof Boolean) || !((Boolean)value).booleanValue())
-                    throw new Error("5 " + value);
-            } else throw new Error("3 " + f.name());
-        }
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/BreakIteratorWarning.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4959985
- * @summary Verify that (verbose) warnings are no longer generated when
- *          the default first-sentence algorithm doesn't match the
- *          BreakIterator algorithm.
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-
-public class BreakIteratorWarning extends Doclet {
-
-    public static void main(String[] args) {
-        String thisFile = "" +
-            new java.io.File(System.getProperty("test.src", "."),
-                             "BreakIteratorWarning.java");
-
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "BreakIteratorWarning",
-                BreakIteratorWarning.class.getClassLoader(),
-                new String[] {"-Xwerror", thisFile}) != 0)
-            throw new Error("Javadoc encountered warnings or errors.");
-    }
-
-    public static boolean start(RootDoc root) {
-        ClassDoc cd = root.classes()[0];
-        FieldDoc fd = cd.fields()[0];
-        fd.firstSentenceTags();
-        return true;
-    }
-
-
-    /**
-     * "He'll never catch up!" the Sicilian cried.  "Inconceivable!"
-     * "You keep using that word!" the Spaniard snapped.  "I do not
-     * think it means what you think it means."
-     *
-     * <p> This comment used to trigger a warning, but no longer does.
-     */
-    public String author = "William Goldman";
-}
--- a/test/langtools/tools/javadoc/CheckResourceKeys.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 8000612
- * @summary need test program to validate javadoc resource bundles
- * @modules jdk.javadoc/com.sun.tools.javadoc.resources:open
- *          jdk.jdeps/com.sun.tools.classfile
- */
-
-import java.io.*;
-import java.util.*;
-import javax.tools.*;
-import com.sun.tools.classfile.*;
-
-/**
- * Compare string constants in javadoc classes against keys in javadoc resource bundles.
- */
-public class CheckResourceKeys {
-    /**
-     * Main program.
-     * Options:
-     * -finddeadkeys
-     *      look for keys in resource bundles that are no longer required
-     * -findmissingkeys
-     *      look for keys in resource bundles that are missing
-     *
-     * @throws Exception if invoked by jtreg and errors occur
-     */
-    public static void main(String... args) throws Exception {
-        CheckResourceKeys c = new CheckResourceKeys();
-        if (c.run(args))
-            return;
-
-        if (is_jtreg())
-            throw new Exception(c.errors + " errors occurred");
-        else
-            System.exit(1);
-    }
-
-    static boolean is_jtreg() {
-        return (System.getProperty("test.src") != null);
-    }
-
-    /**
-     * Main entry point.
-     */
-    boolean run(String... args) throws Exception {
-        boolean findDeadKeys = false;
-        boolean findMissingKeys = false;
-
-        if (args.length == 0) {
-            if (is_jtreg()) {
-                findDeadKeys = true;
-                findMissingKeys = true;
-            } else {
-                System.err.println("Usage: java CheckResourceKeys <options>");
-                System.err.println("where options include");
-                System.err.println("  -finddeadkeys      find keys in resource bundles which are no longer required");
-                System.err.println("  -findmissingkeys   find keys in resource bundles that are required but missing");
-                return true;
-            }
-        } else {
-            for (String arg: args) {
-                if (arg.equalsIgnoreCase("-finddeadkeys"))
-                    findDeadKeys = true;
-                else if (arg.equalsIgnoreCase("-findmissingkeys"))
-                    findMissingKeys = true;
-                else
-                    error("bad option: " + arg);
-            }
-        }
-
-        if (errors > 0)
-            return false;
-
-        Set<String> codeKeys = getCodeKeys();
-        Set<String> resourceKeys = getResourceKeys();
-
-        System.err.println("found " + codeKeys.size() + " keys in code");
-        System.err.println("found " + resourceKeys.size() + " keys in resource bundles");
-
-        if (findDeadKeys)
-            findDeadKeys(codeKeys, resourceKeys);
-
-        if (findMissingKeys)
-            findMissingKeys(codeKeys, resourceKeys);
-
-        return (errors == 0);
-    }
-
-    /**
-     * Find keys in resource bundles which are probably no longer required.
-     * A key is required if there is a string in the code that is a resource key,
-     * or if the key is well-known according to various pragmatic rules.
-     */
-    void findDeadKeys(Set<String> codeKeys, Set<String> resourceKeys) {
-        for (String rk: resourceKeys) {
-            if (codeKeys.contains(rk))
-                continue;
-
-            error("Resource key not found in code: '" + rk + "'");
-        }
-    }
-
-    /**
-     * For all strings in the code that look like they might be
-     * a resource key, verify that a key exists.
-     */
-    void findMissingKeys(Set<String> codeKeys, Set<String> resourceKeys) {
-        for (String ck: codeKeys) {
-            if (resourceKeys.contains(ck))
-                continue;
-            error("No resource for \"" + ck + "\"");
-        }
-    }
-
-    /**
-     * Get the set of strings from (most of) the javadoc classfiles.
-     */
-    Set<String> getCodeKeys() throws IOException {
-        Set<String> results = new TreeSet<String>();
-        JavaCompiler c = ToolProvider.getSystemJavaCompiler();
-        try (JavaFileManager fm = c.getStandardFileManager(null, null, null)) {
-            JavaFileManager.Location javadocLoc = findJavadocLocation(fm);
-            String[] pkgs = {
-                "com.sun.tools.javadoc"
-            };
-            for (String pkg: pkgs) {
-                for (JavaFileObject fo: fm.list(javadocLoc,
-                        pkg, EnumSet.of(JavaFileObject.Kind.CLASS), true)) {
-                    String name = fo.getName();
-                    // ignore resource files
-                    if (name.matches(".*resources.[A-Za-z_0-9]+\\.class.*"))
-                        continue;
-                    scan(fo, results);
-                }
-            }
-
-            // special handling for code strings synthesized in
-            // com.sun.tools.doclets.internal.toolkit.util.Util.getTypeName
-            String[] extras = {
-                "AnnotationType", "Class", "Enum", "Error", "Exception", "Interface"
-            };
-            for (String s: extras) {
-                if (results.contains("doclet." + s))
-                    results.add("doclet." + s.toLowerCase());
-            }
-
-            // special handling for code strings synthesized in
-            // com.sun.tools.javadoc.Messager
-            results.add("javadoc.error.msg");
-            results.add("javadoc.note.msg");
-            results.add("javadoc.note.pos.msg");
-            results.add("javadoc.warning.msg");
-
-            return results;
-        }
-    }
-
-    // depending on how the test is run, javadoc may be on bootclasspath or classpath
-    JavaFileManager.Location findJavadocLocation(JavaFileManager fm) {
-        JavaFileManager.Location[] locns =
-            { StandardLocation.PLATFORM_CLASS_PATH, StandardLocation.CLASS_PATH };
-        try {
-            for (JavaFileManager.Location l: locns) {
-                JavaFileObject fo = fm.getJavaFileForInput(l,
-                    "com.sun.tools.javadoc.Main", JavaFileObject.Kind.CLASS);
-                if (fo != null) {
-                    System.err.println("found javadoc in " + l);
-                    return l;
-                }
-            }
-        } catch (IOException e) {
-            throw new Error(e);
-        }
-        throw new IllegalStateException("Cannot find javadoc");
-    }
-
-    /**
-     * Get the set of strings from a class file.
-     * Only strings that look like they might be a resource key are returned.
-     */
-    void scan(JavaFileObject fo, Set<String> results) throws IOException {
-        //System.err.println("scan " + fo.getName());
-        InputStream in = fo.openInputStream();
-        try {
-            ClassFile cf = ClassFile.read(in);
-            for (ConstantPool.CPInfo cpinfo: cf.constant_pool.entries()) {
-                if (cpinfo.getTag() == ConstantPool.CONSTANT_Utf8) {
-                    String v = ((ConstantPool.CONSTANT_Utf8_info) cpinfo).value;
-                    if (v.matches("(doclet|main|javadoc|tag)\\.[A-Za-z0-9-_.]+"))
-                        results.add(v);
-                }
-            }
-        } catch (ConstantPoolException ignore) {
-        } finally {
-            in.close();
-        }
-    }
-
-    /**
-     * Get the set of keys from the javadoc resource bundles.
-     */
-    Set<String> getResourceKeys() {
-        Module jdk_javadoc = ModuleLayer.boot().findModule("jdk.javadoc").get();
-        String[] names = {
-                "com.sun.tools.javadoc.resources.javadoc",
-        };
-        Set<String> results = new TreeSet<String>();
-        for (String name : names) {
-            ResourceBundle b = ResourceBundle.getBundle(name, jdk_javadoc);
-            results.addAll(b.keySet());
-        }
-        return results;
-    }
-
-    /**
-     * Report an error.
-     */
-    void error(String msg) {
-        System.err.println("Error: " + msg);
-        errors++;
-    }
-
-    int errors;
-}
--- a/test/langtools/tools/javadoc/CompletionError.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 8135307
- * @summary Check that CompletionFailures for missing classes are not incorrectly passed to
- *          the javadoc API clients.
- * @library /tools/lib
- * @modules jdk.compiler/com.sun.tools.javac.api
- *          jdk.compiler/com.sun.tools.javac.main
- *          jdk.jdeps/com.sun.tools.javap
- * @build toolbox.JavacTask toolbox.ToolBox
- * @run main CompletionError
- */
-
-import java.io.File;
-
-import com.sun.javadoc.*;
-import com.sun.tools.javadoc.Main;
-
-import toolbox.JavacTask;
-import toolbox.ToolBox;
-
-public class CompletionError extends Doclet
-{
-    private static final String template =
-            "public class CompletionErrorAuxiliary #extends CompletionErrorMissing# #implements CompletionErrorIntfMissing# {" +
-            "   #public CompletionErrorMissing tf;#" +
-            "   #public CompletionErrorMissing tm() { return null; }#" +
-            "   #public void tm(CompletionErrorMissing m) {}#" +
-            "   #public void tm() throws CompletionErrorExcMissing {}#" +
-            "   #public <T extends CompletionErrorMissing> void tm() {}#" +
-            "   public String toString() { return null; }" +
-            "}";
-
-    private static final String testSrc = System.getProperty("test.src");
-    private static final String testClassPath = System.getProperty("test.class.path");
-
-    public static void main(String[] args) throws Exception {
-        String[] templateParts = template.split("#");
-        int sources = templateParts.length / 2;
-        for (int source = 0; source < sources; source++) {
-            StringBuilder testSource = new StringBuilder();
-            for (int i = 0; i < templateParts.length; i += 2) {
-                testSource.append(templateParts[i]);
-                if (i == 2 * source) {
-                    testSource.append(templateParts[i + 1]);
-                }
-            }
-            test = 0;
-            testsDone = false;
-            while (!testsDone) {
-                ToolBox tb = new ToolBox();
-                new JavacTask(tb)
-                  .sources(testSource.toString(),
-                           "public class CompletionErrorMissing {}",
-                           "public interface CompletionErrorIntfMissing {}",
-                           "public class CompletionErrorExcMissing extends Exception {}")
-                  .outdir(".")
-                  .run()
-                  .writeAll();
-                tb.deleteFiles("CompletionErrorMissing.class", "CompletionErrorIntfMissing.class", "CompletionErrorExcMissing.class");
-                // run javadoc:
-                if (Main.execute("javadoc", "CompletionError", CompletionError.class.getClassLoader(),
-                                 "-classpath", "." + File.pathSeparator + testClassPath,
-                                 new File(testSrc, "CompletionError.java").getPath()) != 0)
-                    throw new Error();
-            }
-        }
-    }
-
-    private static int test;
-    private static boolean testsDone;
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc aux = root.classNamed("CompletionErrorAuxiliary");
-        if (aux == null)
-            throw new AssertionError("Cannot find CompletionErrorAuxiliary");
-
-        FieldDoc tf = findField(aux, "tf");
-        MethodDoc tm = findMethod(aux, "tm");
-        MethodDoc cm = findMethod(aux, "toString");
-        switch (test) {
-            case 0: aux.superclass(); break;
-            case 1: aux.superclassType(); break;
-            case 2: aux.interfaces(); break;
-            case 3: aux.interfaceTypes(); break;
-            case 4: if (tf != null) tf.type(); break;
-            case 5: if (tm != null) tm.overriddenClass(); break;
-            case 6: if (tm != null) tm.overriddenMethod(); break;
-            case 7: if (tm != null) tm.overriddenType(); break;
-            case 8:
-                if (tm != null) {
-                    for (Parameter p : tm.parameters()) {
-                        p.type();
-                    }
-                }
-                break;
-            case 9: if (tm != null) tm.receiverType(); break;
-            case 10: if (tm != null) tm.returnType(); break;
-            case 11: if (tm != null) tm.thrownExceptionTypes(); break;
-            case 12: if (tm != null) tm.thrownExceptions(); break;
-            case 13:
-                if (tm != null) {
-                    for (TypeVariable tv : tm.typeParameters()) {
-                        tv.bounds();
-                    }
-                }
-                break;
-            case 14: if (cm != null) cm.overriddenClass(); break;
-            case 15: if (cm != null) cm.overriddenMethod(); break;
-            case 16: if (cm != null) cm.overriddenType(); testsDone = true; break;
-            default:
-                throw new IllegalStateException("Unrecognized test!");
-        }
-        test++;
-        return true;
-    }
-
-    private static MethodDoc findMethod(ClassDoc cd, String name) {
-        for (MethodDoc m : cd.methods()) {
-            if (name.equals(m.name()))
-                return m;
-        }
-
-        return null;
-    }
-
-    private static FieldDoc findField(ClassDoc cd, String name) {
-        for (FieldDoc m : cd.fields()) {
-            if (name.equals(m.name()))
-                return m;
-        }
-
-        return null;
-    }
-}
--- a/test/langtools/tools/javadoc/EncodingTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
- * 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 8188649
- * @summary javadoc -encoding doesn't work when using the old doclet API
- * @modules jdk.compiler/com.sun.tools.javac.api
- * @modules jdk.compiler/com.sun.tools.javac.main
- * @modules jdk.javadoc/jdk.javadoc.internal.api
- * @modules jdk.javadoc/jdk.javadoc.internal.tool
- * @library /tools/lib /tools/javadoc/lib
- * @build toolbox.JavacTask toolbox.JavadocTask toolbox.TestRunner toolbox.ToolBox ToyDoclet
- * @run main EncodingTest
- */
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-import toolbox.JavadocTask;
-import toolbox.Task;
-import toolbox.TestRunner;
-import toolbox.ToolBox;
-
-public class EncodingTest extends TestRunner {
-    public static void main(String... args) throws Exception {
-        EncodingTest t = new EncodingTest();
-        t.runTests();
-    }
-
-    private final ToolBox tb = new ToolBox();
-    private final Path src = Paths.get("src");
-
-    EncodingTest() throws Exception {
-        super(System.err);
-        init();
-    }
-
-    void init() throws IOException {
-        Files.createDirectories(src);
-        Files.write(src.resolve("C.java"),
-                "/** \u03b1\u03b2\u03b3 */ public class C { }".getBytes(StandardCharsets.UTF_8));
-    }
-
-    @Test
-    public void testEncoding() {
-        Task.Result result = new JavadocTask(tb, Task.Mode.EXEC)
-                .options("-docletpath", System.getProperty("test.class.path"),
-                        "-doclet", "ToyDoclet",
-                        "-J-Dfile.encoding=ASCII",
-                        "-encoding", "UTF-8")
-                .files(src.resolve("C.java"))
-                .run(Task.Expect.SUCCESS)
-                .writeAll();
-    }
-}
-
--- a/test/langtools/tools/javadoc/FlagsTooEarly.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4904495
- * @summary Compilation may go awry if we ask a symbol for its flags during
- *          javac's Enter phase, before the flags are generally available.
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-
-public class FlagsTooEarly extends Doclet {
-
-    public static void main(String[] args) {
-        String thisFile = "" +
-            new java.io.File(System.getProperty("test.src", "."),
-                             "FlagsTooEarly.java");
-
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "FlagsTooEarly",
-                FlagsTooEarly.class.getClassLoader(),
-                new String[] {"-Xwerror", thisFile}) != 0)
-            throw new Error("Javadoc encountered warnings or errors.");
-    }
-
-    /*
-     * The world's simplest doclet.
-     */
-    public static boolean start(RootDoc root) {
-        return true;
-    }
-
-
-    /*
-     * The following sets up the scenario for triggering the (potential) bug.
-     */
-    C2 c;
-    static class C1 { }
-    static class C2 { }
-}
--- a/test/langtools/tools/javadoc/InlineTagsWithBraces.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4965490
- * @summary Verify that matching braces can appear within inline tags.
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-
-/**
- * This is a {@code test} comment.
- * It is {@bold {@underline only} a test}.
- * We would like some code
- * {@code for (int i : nums) { doit(i); } return; }
- * to be embedded {@maybe {even {a couple {of levels}}} deep}.
- */
-public class InlineTagsWithBraces extends Doclet {
-
-    private static String[] expectedTags = {
-        "Text", "@code", "Text",
-        "@bold", "Text", "@code", "Text",
-        "@maybe", "Text"
-    };
-    private static String[] expectedText = {
-        "This is a ", "test", " comment.\n" +
-        " It is ", "{@underline only} a test", ".\n" +
-        " We would like some code\n" +
-        " ", "for (int i : nums) { doit(i); } return; ", "\n" +
-        " to be embedded ", "{even {a couple {of levels}}} deep", "."
-    };
-
-
-    public static void main(String[] args) {
-        String thisFile = "" +
-            new java.io.File(System.getProperty("test.src", "."),
-                             "InlineTagsWithBraces.java");
-
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "InlineTagsWithBraces",
-                InlineTagsWithBraces.class.getClassLoader(),
-                new String[] {"-Xwerror", thisFile}) != 0)
-            throw new Error("Javadoc encountered warnings or errors.");
-    }
-
-    public static boolean start(RootDoc root) {
-        ClassDoc cd = root.classes()[0];
-        Tag[] tags = cd.inlineTags();
-
-        for (int i = 0; i < tags.length; i++) {
-            if (!tags[i].name().equals(expectedTags[i]) ||
-                        !tags[i].text().equals(expectedText[i])) {
-                throw new Error("Tag \"" + tags[i] + "\" not as expected");
-            }
-        }
-
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/LangVers.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4909767
- * @summary Verify that omitting Doclet.languageVersion() hides 1.5 language
- *      features from the doclet.
- * @modules jdk.javadoc
- */
-
-import java.util.List;
-import com.sun.javadoc.*;
-
-public class LangVers extends Doclet {
-
-    public static void main(String[] args) {
-        String thisFile = "" +
-            new java.io.File(System.getProperty("test.src", "."),
-                             "LangVers.java");
-
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "LangVers",
-                LangVers.class.getClassLoader(),
-                new String[] {thisFile}) != 0)
-            throw new Error("Javadoc encountered warnings or errors.");
-    }
-
-    public static boolean start(RootDoc root) {
-        ClassDoc fishdoc = root.classNamed("LangVers.Fish");
-        System.out.println(fishdoc);
-        if (fishdoc.isEnum()) {
-            throw new Error("Enums are not hidden.");
-        }
-
-        for (MethodDoc meth : fishdoc.methods()) {
-            System.out.println(meth);
-            if (meth.flatSignature().indexOf('<') >= 0) {
-                throw new Error("Type parameters are not hidden.");
-            }
-        }
-
-        return true;
-    }
-
-    public enum Fish {
-        One, Two, Red, Blue;
-
-        public void enroll(List<? super Fish> school) {
-            school.add(this);
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/MaxWarns.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 8005644
- * @summary set default max errs and max warns
- * @modules jdk.javadoc/com.sun.tools.doclets.standard
- */
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import com.sun.javadoc.DocErrorReporter;
-import com.sun.javadoc.RootDoc;
-
-public class MaxWarns {
-    public static void main(String... args) throws Exception {
-        new MaxWarns().run();
-    }
-
-    void run() throws Exception {
-        final int defaultMaxWarns = 100;
-        File f = new File(System.getProperty("test.src"), "MaxWarns.java");
-        String out = javadoc(f);
-        check(out, defaultMaxWarns);
-
-        if (errors > 0)
-            throw new Exception(errors + " errors occurred");
-    }
-
-    String javadoc(File f) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        String[] args = { f.getPath() };
-        int rc = com.sun.tools.javadoc.Main.execute("javadoc", pw, pw, pw,
-                "MaxWarns$TestDoclet",
-                getClass().getClassLoader(), args);
-        pw.flush();
-        return sw.toString();
-    }
-
-    private static final String WARNING_TEXT = "count ";
-
-    void check(String out, int count) {
-        System.err.println(out);
-        Pattern warn = Pattern.compile("warning - " + WARNING_TEXT + "[0-9]+");
-        Matcher m = warn.matcher(out);
-        int n = 0;
-        for (int start = 0; m.find(start); start = m.start() + 1) {
-            n++;
-        }
-        if (n != count)
-            error("unexpected number of warnings reported: " + n + "; expected: " + count);
-
-        Pattern warnCount = Pattern.compile("(?ms).*^([0-9]+) warnings$.*");
-        m = warnCount.matcher(out);
-        if (m.matches()) {
-            n = Integer.parseInt(m.group(1));
-            if (n != count)
-                error("unexpected number of warnings reported: " + n + "; expected: " + count);
-        } else
-            error("total count not found");
-    }
-
-    void error(String msg) {
-        System.err.println("Error: " + msg);
-        errors++;
-    }
-
-    int errors;
-
-    public static class TestDoclet {
-
-        public static boolean start(RootDoc root) {
-            // generate 150 warnings
-            for (int i = 1 ; i <= 150 ; i++) {
-                root.printWarning(WARNING_TEXT + i);
-            }
-            return true;
-        }
-
-        public static int optionLength(String option) {
-            return 0;
-        }
-
-        public static boolean validOptions(String[][] options, DocErrorReporter reporter) {
-            return true;
-        }
-    }
-}
-
--- a/test/langtools/tools/javadoc/MethodLinks.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4628281
- * @summary Int. links missing from return/param types when .java files passd in
- * @author gafter
- * @modules jdk.javadoc
- * @run main MethodLinks
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-public class MethodLinks extends Doclet
-{
-    public static void main(String[] args) {
-        if (com.sun.tools.javadoc.Main.
-            execute("javadoc", "MethodLinks", MethodLinks.class.getClassLoader(),
-                    new String[] {System.getProperty("test.src", ".") +
-                                  java.io.File.separatorChar + "MethodLinks.java"}
-                    ) != 0)
-            throw new Error();
-    }
-
-    /** The parameter type and return type should link to the current
-     *  class. */
-    public MethodLinks SAMPLE(MethodLinks x) {
-        return x;
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc[] classes = root.classes();
-        if (classes.length != 1)
-            throw new Error("1 " + Arrays.asList(classes));
-        ClassDoc self = classes[0];
-        MethodDoc[] allMethods = self.methods();
-        MethodDoc SAMPLE = null;
-        for (int i=0; i<allMethods.length; i++)
-            if (allMethods[i].name().equals("SAMPLE"))
-                SAMPLE = allMethods[i];
-        return
-            self == SAMPLE.parameters()[0].type().asClassDoc()
-            &&
-            self == SAMPLE.returnType().asClassDoc()
-            ;
-    }
-}
--- a/test/langtools/tools/javadoc/NoStar.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4587562
- * @summary tool: Indentation messed up for javadoc comments omitting preceding *
- * @author gafter
- * @modules jdk.javadoc
- * @run main NoStar
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-/** First sentence.
-0
- 1
-  2
-   3
-    4
-     5
-*/
-public class NoStar extends Doclet
-{
-    public static void main(String[] args) {
-        if (com.sun.tools.javadoc.Main.
-            execute("javadoc", "NoStar", NoStar.class.getClassLoader(),
-                    new String[] {System.getProperty("test.src", ".") + java.io.File.separatorChar + "NoStar.java"}) != 0)
-            throw new Error();
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc[] classes = root.classes();
-        if (classes.length != 1)
-            throw new Error("1 " + Arrays.asList(classes));
-        ClassDoc self = classes[0];
-        String c = self.commentText();
-        System.out.println("\"" + c + "\"");
-        return c.equals("First sentence.\n0\n 1\n  2\n   3\n    4\n     5");
-    }
-}
--- a/test/langtools/tools/javadoc/ReleaseOption.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.function.Predicate;
-
-import com.sun.tools.javadoc.Main;
-
-/**
- * @test
- * @bug 8086737
- * @summary Test --release option in javadoc
- * @run main ReleaseOption
- */
-public class ReleaseOption {
-    public static void main(String... args) {
-        new ReleaseOption().run();
-    }
-
-    void run() {
-        doRunTest(0, out -> out.contains("compiler.err.doesnt.exist: java.util.stream"), "--release", "7");
-        doRunTest(0, out -> !out.contains("compiler.err.doesnt.exist: java.util.stream"), "--release", "8");
-        doRunTest(1, out -> true, "--release", "7", "-source", "7");
-        doRunTest(1, out -> true, "--release", "7", "-bootclasspath", "any");
-    }
-
-    void doRunTest(int expectedResult, Predicate<String> validate, String... args) {
-        System.err.println("running with args: " + Arrays.asList(args));
-        List<String> options = new ArrayList<>();
-        options.addAll(Arrays.asList(args));
-        options.add("-XDrawDiagnostics");
-        options.add(new File(System.getProperty("test.src", "."), "ReleaseOptionSource.java").getPath());
-        StringWriter out = new StringWriter();
-        PrintWriter pw = new PrintWriter(out);
-        int actualResult = Main.execute("javadoc", pw, pw, pw, "com.sun.tools.doclets.standard.Standard", options.toArray(new String[0]));
-        System.err.println("actual result=" + actualResult);
-        System.err.println("actual output=" + out.toString());
-        if (actualResult != expectedResult)
-            throw new Error("Exit code not as expected");
-        if (!validate.test(out.toString())) {
-            throw new Error("Output not as expected");
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/ReleaseOptionSource.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * 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.stream.Stream;
-
-public class ReleaseOptionSource {
-    public Stream s;
-}
--- a/test/langtools/tools/javadoc/T4994049/FileWithTabs.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class FileWithTabs {
-\tpublic void tabbedMethod() {}
-}
--- a/test/langtools/tools/javadoc/T4994049/T4994049.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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     4994049
- * @summary Unit test for SourcePosition.column with respect to tab expansion
- * @author  Peter von der Ah\u00e9
- * @modules jdk.javadoc
- * @run main T4994049 FileWithTabs.java
- */
-
-import com.sun.javadoc.*;
-import java.io.*;
-import static com.sun.tools.javadoc.Main.execute;
-
-public class T4994049 extends Doclet {
-
-    public static boolean start(RootDoc root) {
-        for (ClassDoc klass : root.classes()) {
-            for (MethodDoc method : klass.methods()) {
-                if (method.name().equals("tabbedMethod")) {
-                    if (method.position().column() == 21) {
-                        System.out.println(method.position().column() + ": OK!");
-                        return true;
-                    } else {
-                        System.err.println(method.position() + ": wrong tab expansion");
-                        return false;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    public static void main(String... args) throws Exception {
-        File testSrc = new File(System.getProperty("test.src"));
-        File tmpSrc = new File("tmpSrc");
-        initTabs(testSrc, tmpSrc);
-
-        for (String file : args) {
-            File source = new File(tmpSrc, file);
-            int rc = execute("javadoc", "T4994049", T4994049.class.getClassLoader(),
-                        new String[]{ source.getPath() } );
-            if (rc != 0)
-                throw new Error("Unexpected return code from javadoc: " + rc);
-        }
-    }
-
-    static void initTabs(File from, File to) throws IOException {
-        for (File f: from.listFiles()) {
-            File t = new File(to, f.getName());
-            if (f.isDirectory()) {
-                initTabs(f, t);
-            } else if (f.getName().endsWith(".java")) {
-                write(t, read(f).replace("\\t", "\t"));
-            }
-        }
-    }
-
-    static String read(File f) throws IOException {
-        StringBuilder sb = new StringBuilder();
-        try (BufferedReader in = new BufferedReader(new FileReader(f))) {
-            String line;
-            while ((line = in.readLine()) != null) {
-                sb.append(line);
-                sb.append("\n");
-            }
-        }
-        return sb.toString();
-    }
-
-    static void write(File f, String s) throws IOException {
-        f.getParentFile().mkdirs();
-        try (Writer out = new FileWriter(f)) {
-            out.write(s);
-        }
-    }
-
-}
--- a/test/langtools/tools/javadoc/T6968833.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 6968833
- * @summary javadoc reports error but still returns 0
- * @modules jdk.javadoc
- * @library lib
- * @build ToyDoclet
- * @run main T6968833
- */
-
-import java.io.*;
-
-public class T6968833 {
-    public static void main(String... args) throws IOException {
-        new T6968833().run();
-    }
-
-    void run() throws IOException {
-        String testClasses = System.getProperty("test.classes");
-
-        File srcDir = new File("src");
-        // following file cause a doclet error, as there is nothing to document
-        File f = writeFile(srcDir, "Foo.java", "class Foo { }");
-        String[] args = { "-docletpath", testClasses,
-                "-doclet", "ToyDoclet",
-                f.getPath() };
-        int rc = com.sun.tools.javadoc.Main.execute(args);
-        if (rc == 0)
-            throw new Error("Unexpected exit from javadoc: " + rc);
-    }
-
-    File writeFile(File dir, String path, String s) throws IOException {
-        File f = new File(dir, path);
-        f.getParentFile().mkdirs();
-        try (Writer out = new FileWriter(f)) {
-            out.write(s);
-        }
-        return f;
-    }
-}
-
--- a/test/langtools/tools/javadoc/XWerror.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4099527
- * @summary javadoc tool: want flag to exit nonzero if there were warnings.
- * @author gafter
- * @modules jdk.javadoc
- * @run main XWerror
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-public class XWerror extends Doclet
-{
-    public static void main(String[] args) {
-        if (com.sun.tools.javadoc.Main.
-            execute("javadoc", "XWerror", XWerror.class.getClassLoader(),
-                    new String[] {"-Xwerror",
-                                  System.getProperty("test.src", ".") +
-                                  java.io.File.separatorChar +
-                                  "XWerror.java"}) == 0)
-            throw new Error();
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        root.printWarning(null, "warning message");
-        return false;
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/annotateMethodsFields/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4904495 5008037
- * @summary Test annotations of methods, fields, enum constants, and
- *          annotation type elements.
- *          Test an annotation type with a type nested within.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (PackageDoc p : root.specifiedPackages()) {
-                for (AnnotationTypeDoc a : p.annotationTypes()) {
-                    for (AnnotationTypeElementDoc e : a.elements()) {
-                        tester.printAnnotationTypeElement(e);
-                    }
-                    tester.println();
-                }
-                for (ClassDoc e : p.enums()) {
-                    for (FieldDoc ec : e.enumConstants()) {
-                        tester.printField(ec);
-                    }
-                    tester.println();
-                }
-                for (ClassDoc cd : p.ordinaryClasses()) {
-                    for (FieldDoc f : cd.fields()) {
-                        tester.printField(f);
-                    }
-                    tester.println();
-                    for (MethodDoc m : cd.methods()) {
-                        tester.printMethod(m);
-                    }
-                    tester.println();
-                }
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/annotateMethodsFields/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-element pkg1.A.value()
-  annotations:
-    @pkg1.A("value")
-  returns:
-    String
-
-field E econst
-  annotations:
-    @pkg1.A("econst")
-
-field int f
-  annotations:
-    @pkg1.A("f")
-
-method pkg1.B.m1(int)
-  signature: (int)
-             (int)
-  annotations:
-    @pkg1.A("m1")
-  returns:
-    void
-
--- a/test/langtools/tools/javadoc/annotations/annotateMethodsFields/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface A {
-    interface N {
-    }
-
-    @A("value")
-    String value();
-}
--- a/test/langtools/tools/javadoc/annotations/annotateMethodsFields/pkg1/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class B {
-    @A("f")
-    public int f;
-
-    @A("m1")
-    public void m1(int i) {
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/annotateMethodsFields/pkg1/E.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public enum E {
-    @A("econst")
-    econst
-}
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 5031168
- * @summary Test package annotations and package-info.java package comments.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.*;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1", "pkg2");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (PackageDoc pkg : root.specifiedPackages()) {
-                tester.println("/**");
-                tester.println(pkg.commentText());
-                for (Tag tag : pkg.tags())
-                    tester.println(tag);
-                tester.println("*/");
-
-                tester.printPackage(pkg);
-                tester.println();
-            }
-            for (ClassDoc cd : root.classes()) {
-                tester.println(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-/**
-This is package pkg1.
-
- For every problem, there is a solution that is simple, elegant, and wrong.
-@author:H. L. Mencken
-@since:1880
-*/
-package pkg1
-  annotations:
-    @java.lang.Deprecated
-    @pkg1.A(boolean.class)
-
-/**
-Albert Einstein commenting on the book
-<i>110 German Scientists Against Einstein</i>:
-"If I had been wrong it would only have needed one."
-*/
-package pkg2
-
-pkg1.A
-pkg2.B
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/**
- * Doc comment here is ignored.
- */
-package pkg1;
-
-public @interface A {
-    Class value();
-}
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/pkg1/package-info.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/**
- * This is package pkg1.
- *
- * For every problem, there is a solution that is simple, elegant, and wrong.
- *
- * @author H. L. Mencken
- * @since 1880
- */
-
-@Deprecated
-@A(boolean.class)
-package pkg1;
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/pkg1/package.html	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-<html>
-
-<head>
-<!---------- This file, and these words, will be ignored. ---------->
-</head>
-
-<body>
-
-Voice or no voice, the people can always be brought to the bidding of
-the leaders.  That is easy.  All you have to do is tell them they are
-being attacked, and denounce the peacemakers for lack of patriotism
-and exposing the country to danger.  It works the same in any country.
-<pre>
-        Hermann Goering
-        Commander in Chief, Luftwaffe
-</pre>
-
-</body>
-</html>
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/pkg2/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/**
- * Doc comment here is ignored.
- */
-package pkg2;
-
-public class B {
-}
--- a/test/langtools/tools/javadoc/annotations/annotatePackage/pkg2/package.html	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<html>
-
-<body>
-
-Albert Einstein commenting on the book
-<i>110 German Scientists Against Einstein</i>:
-"If I had been wrong it would only have needed one."
-
-</body>
-
-</html>
--- a/test/langtools/tools/javadoc/annotations/annotateParams/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 5031171
- * @summary Test parameter annotations.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (PackageDoc pkg : root.specifiedPackages()) {
-                for (ClassDoc cd : pkg.ordinaryClasses()) {
-                    for (ConstructorDoc c : cd.constructors()) {
-                        tester.println(c);
-                        tester.println();
-                        for (Parameter p : c.parameters()) {
-                            tester.printParameter(p);
-                        }
-                        tester.println();
-                    }
-                    for (MethodDoc m : cd.methods()) {
-                        tester.println(m);
-                        tester.println();
-                        for (Parameter p : m.parameters()) {
-                            tester.printParameter(p);
-                        }
-                        tester.println();
-                    }
-                }
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/annotateParams/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-pkg1.C(boolean)
-
-parameter boolean p0
-  annotations:
-    @pkg1.A("p0")
-
-pkg1.C.m(int, int, java.lang.String)
-
-parameter int p1
-  annotations:
-    @pkg1.A("p1")
-parameter int p2
-parameter String p3
-  annotations:
-    @java.lang.Deprecated
-    @pkg1.A("p3")
-
--- a/test/langtools/tools/javadoc/annotations/annotateParams/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface A {
-    String value();
-}
--- a/test/langtools/tools/javadoc/annotations/annotateParams/pkg1/C.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class C {
-
-    public C(@A("p0") boolean p0) {
-    }
-
-    public void m(@A("p1") int p1,
-                  int p2,
-                  @Deprecated @A("p3") String p3) {
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/badVals/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 5029874
- * @summary Verify that bad annotation values don't result in NPE
- * @library ../../lib
- * @modules jdk.javadoc
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/badVals/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-import java.lang.annotation.*;
-
-public class A {
-
-    @Retention(BOGUS)           // illegal
-    public @interface A1 {}
-
-    @Target({BOGUS})            // illegal
-    public @interface A2 {}
-
-    @Retention(true)            // illegal
-    public @interface A3 {}
-
-    public @interface A4 {
-        ElementType value() default BOGUS;      // illegal
-    }
-
-    public @interface A5 {
-        int[] value() default {true};           // illegal
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/defaults/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4904495
- * @summary Test an annotation type with default element values, and
- *          annotations that use them.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-import com.sun.javadoc.AnnotationDesc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (AnnotationTypeDoc at :
-                     root.specifiedPackages()[0].annotationTypes()) {
-                tester.printAnnotationType(at);
-                tester.println();
-            }
-
-            for (ClassDoc cd :
-                     root.specifiedPackages()[0].interfaces()) {
-                for (MethodDoc m : cd.methods()) {
-                    tester.printMethod(m);
-                }
-                tester.println();
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/defaults/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-@interface pkg1.A
-  elements:
-    String value() default "sigh"
-    int i() default 2
-    double d() default 3.14
-    boolean b() default true
-    java.lang.Class c() default java.lang.Boolean.class
-    java.lang.Class<? extends java.lang.Number> w() default java.lang.Long.class
-    ElementType e() default java.lang.annotation.ElementType.TYPE
-    A a() default @pkg1.A(d=2.718)
-    java.lang.String[] sa() default {"up", "down"}
-
-method pkg1.B.m1()
-  signature: ()
-             ()
-  annotations:
-    @pkg1.A
-  returns:
-    void
-method pkg1.B.m2()
-  signature: ()
-             ()
-  annotations:
-    @pkg1.A("flip")
-  returns:
-    void
-method pkg1.B.m3()
-  signature: ()
-             ()
-  annotations:
-    @pkg1.A("flop")
-  returns:
-    void
-method pkg1.B.m4()
-  signature: ()
-             ()
-  annotations:
-    @pkg1.A(c=java.lang.Boolean.class, w=java.lang.Long.class, sa={})
-  returns:
-    void
-method pkg1.B.m5()
-  signature: ()
-             ()
-  annotations:
-    @pkg1.A(i=0, e=java.lang.annotation.ElementType.FIELD)
-  returns:
-    void
-method pkg1.B.m6()
-  signature: ()
-             ()
-  annotations:
-    @pkg1.A(a=@pkg1.A("splat"))
-  returns:
-    void
-
--- a/test/langtools/tools/javadoc/annotations/defaults/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface A {
-    String value() default "sigh";
-    int i() default 1+1;
-    double d() default 3.14;
-    boolean b() default true;
-    Class c() default Boolean.class;
-    Class<? extends Number> w() default Long.class;
-    java.lang.annotation.ElementType e() default java.lang.annotation.ElementType.TYPE;
-    A a() default @A(d=2.718);
-    String[] sa() default {"up", "down"};
-}
--- a/test/langtools/tools/javadoc/annotations/defaults/pkg1/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public interface B {
-    @A                  void m1();
-    @A("flip")          void m2();
-    @A(value="flop")    void m3();
-    @A(c=Boolean.class, w=Long.class, sa={})
-                        void m4();
-    @A(i=0, e=java.lang.annotation.ElementType.FIELD)   void m5();
-    @A(a=@A("splat"))   void m6();
-}
--- a/test/langtools/tools/javadoc/annotations/elementTypes/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4904495
- * @summary Test an annotation type and annotations with elements of various
- *          types.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import java.util.Arrays;
-import com.sun.javadoc.*;
-import com.sun.javadoc.AnnotationDesc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            ClassDoc[] cds = root.classes();
-            Arrays.sort(cds);
-            for (ClassDoc cd : cds) {
-                tester.printClass(cd);
-                tester.println();
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/elementTypes/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-@interface pkg1.A
-  elements:
-    int i()
-    double d()
-    boolean b()
-    String s()
-    java.lang.Class c()
-    java.lang.Class<? extends java.lang.Number> w()
-    ElementType e()
-    A a()
-    java.lang.String[] sa()
-
-interface pkg1.B
-  name: B / B / pkg1.B
-  annotations:
-    @pkg1.A(i=2, d=3.14, b=true, s="sigh", c=java.lang.Boolean.class, w=java.lang.Long.class, e=java.lang.annotation.ElementType.TYPE, a=@pkg1.A, sa={"up", "down"})
-
--- a/test/langtools/tools/javadoc/annotations/elementTypes/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface A {
-    int i();
-    double d();
-    boolean b();
-    String s();
-    Class c();
-    Class<? extends Number> w();
-    java.lang.annotation.ElementType e();
-    A a();
-    String[] sa();
-}
--- a/test/langtools/tools/javadoc/annotations/elementTypes/pkg1/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-@A(i = 1+1,
-   d = 3.14,
-   b = true,
-   s = "sigh",
-   c = Boolean.class,
-   w = Long.class,
-   e = java.lang.annotation.ElementType.TYPE,
-   a = @A,
-   sa = {"up", "down"})
-public interface B {
-}
--- a/test/langtools/tools/javadoc/annotations/missing/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright 2009 Google, Inc.  All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * 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 6709246
- * @summary Class-cast exception when annotation type is missing.
- * @library ../../lib
- * @modules jdk.javadoc
- */
-
-import java.io.IOException;
-import com.sun.javadoc.RootDoc;
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.AnnotationDesc;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "somepackage");
-
-    public static void main(String... args) throws Exception {
-        tester.run();
-    }
-
-    public static boolean start(RootDoc root) {
-        for (ClassDoc d : root.classes()) {
-            for (AnnotationDesc a : d.annotations()) {
-                System.out.println(a.annotationType());
-            }
-        }
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/missing/somepackage/MissingAnnotationClass.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Copyright 2009 Google, Inc.  All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * 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 somepackage;
-
-/**
- * This class has an annotation which is not available.
- */
-@NoSuchAnnotation
-public class MissingAnnotationClass {
-}
--- a/test/langtools/tools/javadoc/annotations/shortcuts/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4904495
- * @summary Verify that "shortcuts" are used when printing annotations.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                if (cd.isInterface()) {
-                    tester.printClass(cd);
-                }
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/annotations/shortcuts/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-interface pkg1.A
-  name: A / A / pkg1.A
-  annotations:
-    @pkg1.Value("there is only one")
-    @pkg1.Array(favoriteNumbers=3.5)
-    @pkg1.Marker
--- a/test/langtools/tools/javadoc/annotations/shortcuts/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-@Value("there is only one")
-@Array(favoriteNumbers={3.5})
-@Marker
-public interface A {
-}
--- a/test/langtools/tools/javadoc/annotations/shortcuts/pkg1/Array.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface Array {
-    double[] favoriteNumbers();
-}
--- a/test/langtools/tools/javadoc/annotations/shortcuts/pkg1/Marker.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface Marker {
-}
--- a/test/langtools/tools/javadoc/annotations/shortcuts/pkg1/Value.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public @interface Value {
-    String value();
-}
--- a/test/langtools/tools/javadoc/api/basic/APITest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.annotation.Annotation;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.nio.file.DirectoryStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.stream.*;
-
-import javax.tools.JavaFileObject;
-import javax.tools.SimpleJavaFileObject;
-
-
-/*
- * Superclass with utility methods for API tests.
- */
-class APITest {
-    protected APITest() { }
-
-    /** Marker annotation for test cases. */
-    @Retention(RetentionPolicy.RUNTIME)
-    @interface Test { }
-
-    /** Invoke all methods annotated with @Test. */
-    protected void run() throws Exception {
-        for (Method m: getClass().getDeclaredMethods()) {
-            Annotation a = m.getAnnotation(Test.class);
-            if (a != null) {
-                testCount++;
-                testName = m.getName();
-                System.err.println("test: " + testName);
-                try {
-                    m.invoke(this, new Object[] { });
-                } catch (InvocationTargetException e) {
-                    Throwable cause = e.getCause();
-                    throw (cause instanceof Exception) ? ((Exception) cause) : e;
-                }
-                System.err.println();
-            }
-        }
-
-        if (testCount == 0)
-            error("no tests found");
-
-        StringBuilder summary = new StringBuilder();
-        if (testCount != 1)
-            summary.append(testCount).append(" tests");
-        if (errorCount > 0) {
-            if (summary.length() > 0) summary.append(", ");
-            summary.append(errorCount).append(" errors");
-        }
-        System.err.println(summary);
-        if (errorCount > 0)
-            throw new Exception(errorCount + " errors found");
-    }
-
-    /**
-     * Create a directory in which to store generated doc files.
-     * Avoid using the default (current) directory, so that we can
-     * be sure that javadoc is writing in the intended location,
-     * not a default location.
-     */
-    protected File getOutDir() {
-        File dir = new File(testName);
-        dir.mkdirs();
-        return dir;
-    }
-
-    /**
-     * Create a directory in which to store generated doc files.
-     * Avoid using the default (current) directory, so that we can
-     * be sure that javadoc is writing in the intended location,
-     * not a default location.
-     */
-    protected File getOutDir(String path) {
-        File dir = new File(testName, path);
-        dir.mkdirs();
-        return dir;
-    }
-
-    protected JavaFileObject createSimpleJavaFileObject() {
-        return createSimpleJavaFileObject("pkg/C", "package pkg; public class C { }");
-    }
-
-    protected JavaFileObject createSimpleJavaFileObject(final String binaryName, final String content) {
-        return new SimpleJavaFileObject(
-                URI.create("myfo:///" + binaryName + ".java"), JavaFileObject.Kind.SOURCE) {
-            @Override
-            public CharSequence getCharContent(boolean ignoreEncoding) {
-                return content;
-            }
-        };
-    }
-
-    protected void checkFiles(File dir, Set<String> expectFiles) {
-        Set<File> files = new HashSet<File>();
-        listFiles(dir, files);
-        Set<String> foundFiles = new HashSet<String>();
-        URI dirURI = dir.toURI();
-        for (File f: files)
-            foundFiles.add(dirURI.relativize(f.toURI()).getPath());
-        checkFiles(foundFiles, expectFiles, dir);
-    }
-
-    protected void checkFiles(Path dir, Set<String> expectFiles) throws IOException {
-        Set<Path> files = new HashSet<Path>();
-        listFiles(dir, files);
-        Set<String> foundFiles = new HashSet<String>();
-        for (Path f: files) {
-            foundFiles.add(dir.relativize(f).toString().replace(f.getFileSystem().getSeparator(), "/"));
-        }
-        checkFiles(foundFiles, expectFiles, dir);
-    }
-
-    private void checkFiles(Set<String> foundFiles, Set<String> expectFiles, Object where) {
-        if (!foundFiles.equals(expectFiles)) {
-            Set<String> missing = new TreeSet<String>(expectFiles);
-            missing.removeAll(foundFiles);
-            if (!missing.isEmpty())
-                error("the following files were not found in " + where + ": " + missing);
-            Set<String> unexpected = new TreeSet<String>(foundFiles);
-            unexpected.removeAll(expectFiles);
-            if (!unexpected.isEmpty())
-                error("the following unexpected files were found in " + where + ": " + unexpected);
-        }
-    }
-
-    protected void listFiles(File dir, Set<File> files) {
-        for (File f: dir.listFiles()) {
-            if (f.isDirectory())
-                listFiles(f, files);
-            else if (f.isFile())
-                files.add(f);
-        }
-    }
-
-    private void listFiles(Path dir, Set<Path> files) throws IOException {
-        try (DirectoryStream<Path> ds = Files.newDirectoryStream(dir)) {
-            for (Path f: ds) {
-                if (Files.isDirectory(f))
-                    listFiles(f, files);
-                else if (Files.isRegularFile(f))
-                    files.add(f);
-            }
-        }
-    }
-
-    protected void error(String msg) {
-        System.err.println("Error: " + msg);
-        errorCount++;
-    }
-
-    protected int testCount;
-    protected int errorCount;
-
-    protected String testName;
-
-    /**
-     * Standard files generated by processing a documented class pkg.C.
-     */
-    protected static Set<String> standardExpectFiles = new HashSet<>(Arrays.asList(
-            "allclasses-index.html",
-            "allpackages-index.html",
-            "constant-values.html",
-            "deprecated-list.html",
-            "help-doc.html",
-            "index-all.html",
-            "index.html",
-            "jquery/jquery-3.3.1.js",
-            "jquery/jquery-migrate-3.0.1.js",
-            "jquery/jquery-ui.js",
-            "jquery/jquery-ui.css",
-            "jquery/jquery-ui.min.js",
-            "jquery/jquery-ui.min.css",
-            "jquery/jquery-ui.structure.min.css",
-            "jquery/jquery-ui.structure.css",
-            "jquery/external/jquery/jquery.js",
-            "jquery/jszip/dist/jszip.js",
-            "jquery/jszip/dist/jszip.min.js",
-            "jquery/jszip-utils/dist/jszip-utils.js",
-            "jquery/jszip-utils/dist/jszip-utils.min.js",
-            "jquery/jszip-utils/dist/jszip-utils-ie.js",
-            "jquery/jszip-utils/dist/jszip-utils-ie.min.js",
-            "jquery/images/ui-bg_glass_65_dadada_1x400.png",
-            "jquery/images/ui-icons_454545_256x240.png",
-            "jquery/images/ui-bg_glass_95_fef1ec_1x400.png",
-            "jquery/images/ui-bg_glass_75_dadada_1x400.png",
-            "jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png",
-            "jquery/images/ui-icons_888888_256x240.png",
-            "jquery/images/ui-icons_2e83ff_256x240.png",
-            "jquery/images/ui-icons_cd0a0a_256x240.png",
-            "jquery/images/ui-bg_glass_55_fbf9ee_1x400.png",
-            "jquery/images/ui-icons_222222_256x240.png",
-            "jquery/images/ui-bg_glass_75_e6e6e6_1x400.png",
-            "member-search-index.js",
-            "member-search-index.zip",
-            "overview-tree.html",
-            "element-list",
-            "package-search-index.js",
-            "package-search-index.zip",
-            "pkg/C.html",
-            "pkg/package-summary.html",
-            "pkg/package-tree.html",
-            "resources/glass.png",
-            "resources/x.png",
-            "script.js",
-            "search.js",
-            "stylesheet.css",
-            "type-search-index.js",
-            "type-search-index.zip"
-    ));
-
-    protected static Set<String> noIndexFiles = standardExpectFiles.stream()
-            .filter(s -> !s.startsWith("jquery") && !s.startsWith("resources") && !s.endsWith("zip")
-            && !s.equals("index-all.html") && !s.equals("search.js") && !s.endsWith("-search-index.js")
-            && !s.equals("allclasses-index.html") && !s.equals("allpackages-index.html"))
-            .collect(Collectors.toSet());
-}
-
--- a/test/langtools/tools/javadoc/api/basic/DocletPathTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main DocletPathTest
- */
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaCompiler;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.StandardLocation;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for locating a doclet via the file manager's DOCLET_PATH.
- */
-public class DocletPathTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new DocletPathTest().run();
-    }
-
-    /**
-     * Verify that an alternate doclet can be specified, and located via
-     * the file manager's DOCLET_PATH.
-     */
-    @Test
-    public void testDocletPath() throws Exception {
-        JavaFileObject docletSrc =
-                createSimpleJavaFileObject("DocletOnDocletPath", docletSrcText);
-        File docletDir = getOutDir("classes");
-        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-        try (StandardJavaFileManager cfm = compiler.getStandardFileManager(null, null, null)) {
-            cfm.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(docletDir));
-            Iterable<? extends JavaFileObject> cfiles = Arrays.asList(docletSrc);
-            if (!compiler.getTask(null, cfm, null, null, null, cfiles).call())
-                throw new Exception("cannot compile doclet");
-        }
-
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir("api");
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            fm.setLocation(DocumentationTool.Location.DOCLET_PATH, Arrays.asList(docletDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            Iterable<String> options = Arrays.asList("-doclet", "DocletOnDocletPath");
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            DocumentationTask t = tool.getTask(pw, fm, null, null, options, files);
-            boolean ok = t.call();
-            String out = sw.toString();
-            System.err.println(">>" + out + "<<");
-            if (ok) {
-                if (out.contains(TEST_STRING)) {
-                    System.err.println("doclet executed as expected");
-                } else {
-                    error("test string not found in doclet output");
-                }
-            } else {
-                error("task failed");
-            }
-        }
-    }
-
-    private static final String TEST_STRING = "DocletOnDocletPath found and running";
-
-    private static final String docletSrcText =
-        "import com.sun.javadoc.*;\n" +
-        "public class DocletOnDocletPath {\n" +
-        "    public static boolean start(RootDoc doc) {\n" +
-        "        doc.printNotice(\"" + TEST_STRING + "\");\n" +
-        "        return true;\n" +
-        "    }\n" +
-        "    public static int optionLength(String option) { return 0; }\n" +
-        "    public static boolean validOptions(String options[][],\n" +
-        "            DocErrorReporter reporter) { return true; }\n" +
-        "    public static LanguageVersion languageVersion() {\n" +
-        "        return LanguageVersion.JAVA_1_1;\n" +
-        "    }\n" +
-        "}\n";
-}
-
--- a/test/langtools/tools/javadoc/api/basic/DocumentationToolLocationTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 8025844
- * @summary test DocumentationTool.Location methods
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main DocumentationToolLocationTest
- */
-
-import javax.tools.DocumentationTool;
-import java.util.Objects;
-
-/**
- * Test for DocumentationTool.Location methods.
- */
-public class DocumentationToolLocationTest extends APITest {
-    public static void main(String[] args) throws Exception {
-        new DocumentationToolLocationTest().run();
-    }
-
-    /**
-     * Test getName() method
-     */
-    @Test
-    public void testGetName() throws Exception {
-        // getName() returns name(). This is for test coverage of getName.
-        for (DocumentationTool.Location dl: DocumentationTool.Location.values()) {
-            String expect = dl.name();
-            String found = dl.getName();
-            if (!Objects.equals(expect, found))
-                throw new Exception("mismatch for " + dl + "; expected " + expect + ", found " + found);
-        }
-    }
-
-    /**
-     * Test generated enum methods values() and valueOf()
-     */
-    @Test
-    public void testEnumMethods() throws Exception {
-        DocumentationTool.Location[] values = DocumentationTool.Location.values();
-        if (values.length != 3)
-            throw new Exception("unexpected number of values returned");
-
-        for (DocumentationTool.Location dl: values) {
-            DocumentationTool.Location expect = dl;
-            DocumentationTool.Location found = DocumentationTool.Location.valueOf(dl.name());
-            if (!Objects.equals(expect, found))
-                throw new Exception("mismatch for " + dl + "; expected " + expect + ", found " + found);
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/api/basic/GetSourceVersionsTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main GetSourceVersionsTest
- */
-
-import java.util.EnumSet;
-import java.util.Set;
-import javax.lang.model.SourceVersion;
-import javax.tools.DocumentationTool;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for DocumentationTool.getSourceVersions method.
- */
-public class GetSourceVersionsTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetSourceVersionsTest().run();
-    }
-
-    /**
-     * Verify getSourceVersions.
-     */
-    @Test
-    public void testRun() throws Exception {
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        Set<SourceVersion> found = tool.getSourceVersions();
-        Set<SourceVersion> expect = EnumSet.range(SourceVersion.RELEASE_3, SourceVersion.latest());
-        if (!expect.equals(found)) {
-            System.err.println("expect: " + expect);
-            System.err.println(" found: " + expect);
-            error("unexpected versions");
-        }
-    }
-}
-
--- a/test/langtools/tools/javadoc/api/basic/GetTask_DiagListenerTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main GetTask_DiagListenerTest
- */
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import javax.tools.Diagnostic;
-import javax.tools.DiagnosticCollector;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for DocumentationTool.getTask  diagnosticListener  parameter.
- */
-public class GetTask_DiagListenerTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_DiagListenerTest().run();
-    }
-
-    /**
-     * Verify that a diagnostic listener can be specified.
-     * Note that messages from the tool and doclet are imperfectly modeled
-     * because the DocErrorReporter API works in terms of localized strings
-     * and file:line positions. Therefore, messages reported via DocErrorReporter
-     * and simply wrapped and passed through.
-     */
-    @Test
-    public void testDiagListener() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject("pkg/C", "package pkg; public error { }");
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DiagnosticCollector<JavaFileObject> dc = new DiagnosticCollector<JavaFileObject>();
-            DocumentationTask t = tool.getTask(null, fm, dc, null, null, files);
-            if (t.call()) {
-                throw new Exception("task succeeded unexpectedly");
-            } else {
-                List<String> diagCodes = new ArrayList<String>();
-                for (Diagnostic d: dc.getDiagnostics()) {
-                    System.err.println(d);
-                    diagCodes.add(d.getCode());
-                }
-                List<String> expect = Arrays.asList(
-                        "javadoc.note.msg",         // Loading source file
-                        "compiler.err.expected3",   // class, interface, or enum expected
-                        "javadoc.note.msg");        // 1 error
-                if (!diagCodes.equals(expect))
-                    throw new Exception("unexpected diagnostics occurred");
-                System.err.println("diagnostics received as expected");
-            }
-        }
-    }
-
-}
-
--- a/test/langtools/tools/javadoc/api/basic/GetTask_DocletClassTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules jdk.javadoc
- * @build APITest
- * @run main GetTask_DocletClassTest
- * @key randomness
- */
-
-import com.sun.javadoc.DocErrorReporter;
-import com.sun.javadoc.LanguageVersion;
-import com.sun.javadoc.RootDoc;
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Random;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for DocumentationTool.getTask  docletClass  parameter.
- */
-public class GetTask_DocletClassTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_DocletClassTest().run();
-    }
-
-    /**
-     * Verify that an alternate doclet can be specified.
-     *
-     * There is no standard interface or superclass for a doclet;
-     * the only requirement is that it provides static methods that
-     * can be invoked via reflection. So, for now, the doclet is
-     * specified as a class.
-     * Because we cannot create and use a unique instance of the class,
-     * we verify that the doclet has been called by having it record
-     * (in a static field!) the comment from the last time it was invoked,
-     * which is randomly generated each time the test is run.
-     */
-    @Test
-    public void testDoclet() throws Exception {
-        Random r = new Random();
-        int key = r.nextInt();
-        JavaFileObject srcFile = createSimpleJavaFileObject(
-                "pkg/C",
-                "package pkg; /** " + key + "*/ public class C { }");
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, TestDoclet.class, null, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                if (TestDoclet.lastCaller.equals(String.valueOf(key)))
-                    System.err.println("found expected key: " + key);
-                else
-                    error("Expected key not found");
-                checkFiles(outDir, Collections.<String>emptySet());
-            } else {
-                throw new Exception("task failed");
-            }
-        }
-    }
-
-    public static class TestDoclet {
-        static String lastCaller;
-        public static boolean start(RootDoc root) {
-            lastCaller = root.classNamed("pkg.C").commentText().trim();
-            return true;
-        }
-
-        public static int optionLength(String option) {
-            return 0;  // default is option unknown
-        }
-
-        public static boolean validOptions(String options[][],
-                DocErrorReporter reporter) {
-            return true;  // default is options are valid
-        }
-
-        public static LanguageVersion languageVersion() {
-            return LanguageVersion.JAVA_1_1;
-        }
-    }
-
-    /**
-     * Verify that exceptions from a doclet are thrown as expected.
-     */
-    @Test
-    public void testBadDoclet() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, BadDoclet.class, null, files);
-            try {
-                t.call();
-                error("call completed without exception");
-            } catch (RuntimeException e) {
-                Throwable c = e.getCause();
-                if (c.getClass() == UnexpectedError.class)
-                    System.err.println("exception caught as expected: " + c);
-                else
-                    throw e;
-            }
-        }
-    }
-
-    public static class UnexpectedError extends Error { }
-
-    public static class BadDoclet {
-        public static boolean start(RootDoc root) {
-            throw new UnexpectedError();
-        }
-
-        public static int optionLength(String option) {
-            return 0;  // default is option unknown
-        }
-
-        public static boolean validOptions(String options[][],
-                DocErrorReporter reporter) {
-            return true;  // default is options are valid
-        }
-
-        public static LanguageVersion languageVersion() {
-            return LanguageVersion.JAVA_1_1;
-        }
-    }
-
-}
-
--- a/test/langtools/tools/javadoc/api/basic/GetTask_FileManagerTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690 8024434
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules jdk.compiler/com.sun.tools.javac.file
- *          jdk.compiler/com.sun.tools.javac.util
- * @build APITest
- * @run main GetTask_FileManagerTest
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.Set;
-
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.FileObject;
-import javax.tools.ForwardingJavaFileManager;
-import javax.tools.JavaFileObject;
-import javax.tools.JavaFileObject.Kind;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-import com.sun.tools.javac.file.JavacFileManager;
-import com.sun.tools.javac.util.Context;
-
-/**
- * Tests for DocumentationTool.getTask  fileManager  parameter.
- */
-public class GetTask_FileManagerTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_FileManagerTest().run();
-    }
-
-    /**
-     * Verify that an alternate file manager can be specified:
-     * in this case, a TestFileManager.
-     */
-    @Test
-    public void testFileManager() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        StandardJavaFileManager fm = new TestFileManager();
-        File outDir = getOutDir();
-        fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-        Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-        DocumentationTask t = tool.getTask(null, fm, null, null, Arrays.asList("-verbose"), files);
-        if (t.call()) {
-            System.err.println("task succeeded");
-            checkFiles(outDir, standardExpectFiles);
-        } else {
-            throw new Exception("task failed");
-        }
-    }
-
-    /**
-     * Verify that exceptions from a bad file manager are thrown as expected.
-     */
-    @Test
-    public void testBadFileManager() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        StandardJavaFileManager fm = new TestFileManager() {
-            @Override
-            public Iterable<JavaFileObject> list(Location location,
-                    String packageName,
-                    Set<Kind> kinds,
-                    boolean recurse)
-                    throws IOException {
-                throw new UnexpectedError();
-            }
-        };
-        fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(getOutDir()));
-        Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-        DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
-        try {
-            t.call();
-            error("call completed without exception");
-        } catch (RuntimeException e) {
-            Throwable c = e.getCause();
-            if (c.getClass() == UnexpectedError.class)
-                System.err.println("exception caught as expected: " + c);
-            else
-                throw e;
-        }
-    }
-
-    public static class UnexpectedError extends Error { }
-
-    /*
-     * A JavaFileManager which is not a JavacFileManager, even though it uses one internally for
-     * convenience.
-     */
-    static class TestFileManager extends ForwardingJavaFileManager<StandardJavaFileManager>
-            implements StandardJavaFileManager  {
-        TestFileManager() {
-            super(new JavacFileManager(new Context(), false, null));
-        }
-
-        @Override
-        public Iterable<? extends JavaFileObject> getJavaFileObjectsFromFiles(Iterable<? extends File> files) {
-            return fileManager.getJavaFileObjectsFromFiles(files);
-        }
-
-        @Override
-        public Iterable<? extends JavaFileObject> getJavaFileObjects(File... files) {
-            return fileManager.getJavaFileObjects(files);
-        }
-
-        @Override
-        public Iterable<? extends JavaFileObject> getJavaFileObjectsFromStrings(Iterable<String> names) {
-            return fileManager.getJavaFileObjectsFromStrings(names);
-        }
-
-        @Override
-        public Iterable<? extends JavaFileObject> getJavaFileObjects(String... names) {
-            return fileManager.getJavaFileObjects(names);
-        }
-
-        @Override
-        public void setLocation(Location location, Iterable<? extends File> path) throws IOException {
-            fileManager.setLocation(location, path);
-        }
-
-        @Override
-        public Iterable<? extends File> getLocation(Location location) {
-            return fileManager.getLocation(location);
-        }
-
-    }
-}
--- a/test/langtools/tools/javadoc/api/basic/GetTask_FileObjectsTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main GetTask_FileObjectsTest
- */
-
-import java.io.File;
-import java.util.Arrays;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for DocumentationTool.getTask  fileObjects  parameter.
- */
-public class GetTask_FileObjectsTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_FileObjectsTest().run();
-    }
-
-    /**
-     * Verify that expected output files are written via the file manager,
-     * for a source file read from the file system with StandardJavaFileManager.
-     */
-    @Test
-    public void testStandardFileObject() throws Exception {
-        File testSrc = new File(System.getProperty("test.src"));
-        File srcFile = new File(testSrc, "pkg/C.java");
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                checkFiles(outDir, standardExpectFiles);
-            } else {
-                throw new Exception("task failed");
-            }
-        }
-    }
-
-    /**
-     * Verify that expected output files are written via the file manager,
-     * for an in-memory file object.
-     */
-    @Test
-    public void testMemoryFileObject() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                checkFiles(outDir, standardExpectFiles);
-            } else {
-                throw new Exception("task failed");
-            }
-        }
-    }
-
-    /**
-     * Verify bad file object is handled correctly.
-     */
-    @Test
-    public void testBadFileObject() throws Exception {
-        File testSrc = new File(System.getProperty("test.src"));
-        File srcFile = new File(testSrc, "pkg/C.class");  // unacceptable file kind
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(srcFile);
-            try {
-                DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
-                error("getTask succeeded, no exception thrown");
-            } catch (IllegalArgumentException e) {
-                System.err.println("exception caught as expected: " + e);
-            }
-        }
-    }
-
-    /**
-     * Verify null is handled correctly.
-     */
-    @Test
-    public void testNull() throws Exception {
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList((JavaFileObject) null);
-            try {
-                DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
-                error("getTask succeeded, no exception thrown");
-            } catch (NullPointerException e) {
-                System.err.println("exception caught as expected: " + e);
-            }
-        }
-    }
-
-}
-
--- a/test/langtools/tools/javadoc/api/basic/GetTask_OptionsTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690 8141492
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main GetTask_OptionsTest
- */
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for DocumentationTool.getTask  options  parameter.
- */
-public class GetTask_OptionsTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_OptionsTest().run();
-    }
-
-    /**
-     * Verify that expected output files are written for given options.
-     */
-    @Test
-    public void testNoIndex() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            Iterable<String> options = Arrays.asList("-noindex");
-            DocumentationTask t = tool.getTask(null, fm, null, null, options, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                Set<String> expectFiles = new TreeSet<String>(noIndexFiles);
-                checkFiles(outDir, expectFiles);
-            } else {
-                error("task failed");
-            }
-        }
-    }
-
-    /**
-     * Verify null is handled correctly.
-     */
-    @Test
-    public void testNull() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<String> options = Arrays.asList((String) null);
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            try {
-                DocumentationTask t = tool.getTask(null, fm, null, null, options, files);
-                error("getTask succeeded, no exception thrown");
-            } catch (NullPointerException e) {
-                System.err.println("exception caught as expected: " + e);
-            }
-        }
-    }
-
-}
-
--- a/test/langtools/tools/javadoc/api/basic/GetTask_WriterTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main GetTask_WriterTest
- */
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for DocumentationTool.getTask  writer  parameter.
- */
-public class GetTask_WriterTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new GetTask_WriterTest().run();
-    }
-
-    /**
-     * Verify that a writer can be provided.
-     */
-    @Test
-    public void testWriter() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            DocumentationTask t = tool.getTask(pw, fm, null, null, null, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                checkFiles(outDir, standardExpectFiles);
-                String out = sw.toString();
-                System.err.println(">>" + out + "<<");
-                for (String f: standardExpectFiles) {
-                    String f1 = f.replace('/', File.separatorChar);
-                    if (f1.endsWith(".html") && !out.contains(f1))
-                        throw new Exception("expected string not found: " + f1);
-                }
-            } else {
-                throw new Exception("task failed");
-            }
-        }
-    }
-}
-
--- a/test/langtools/tools/javadoc/api/basic/Task_reuseTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 6493690
- * @summary javadoc should have a javax.tools.Tool service provider
- * @modules java.compiler
- *          jdk.compiler
- * @build APITest
- * @run main Task_reuseTest
- */
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Locale;
-import javax.tools.DocumentationTool;
-import javax.tools.DocumentationTool.DocumentationTask;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Tests for reusing a documentation task.
- */
-public class Task_reuseTest extends APITest {
-    public static void main(String... args) throws Exception {
-        new Task_reuseTest().run();
-    }
-
-    /**
-     * Verify that call can only be called once.
-     */
-    @Test
-    public void testReuse() throws Exception {
-        DocumentationTask t = getAndRunTask();
-        try {
-            t.call();
-            error("task was reused without exception");
-        } catch (IllegalStateException e) {
-            System.err.println("caught exception " + e);
-        }
-    }
-
-    /**
-     * Verify that cannot update task after call
-     */
-    @Test
-    public void testUpdateSetLocale() throws Exception {
-        DocumentationTask t = getAndRunTask();
-        try {
-            t.setLocale(Locale.getDefault());
-            error("task was reused without exception");
-        } catch (IllegalStateException e) {
-            System.err.println("caught exception " + e);
-        }
-    }
-
-    private DocumentationTask getAndRunTask() throws Exception {
-        JavaFileObject srcFile = createSimpleJavaFileObject();
-        DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
-        try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
-            File outDir = getOutDir();
-            fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
-            Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
-            DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
-            if (t.call()) {
-                System.err.println("task succeeded");
-                return t;
-            } else {
-                throw new Exception("task failed");
-            }
-        }
-    }
-}
-
--- a/test/langtools/tools/javadoc/api/basic/pkg/C.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg;
-
-public class C { }
-
--- a/test/langtools/tools/javadoc/api/basic/taglets/UnderlineTaglet.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * -Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- * -Redistribution in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- * Neither the name of Oracle nor the names of
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any
- * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
- * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
- * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
- * DAMAGES OR LIABILITIES  SUFFERED BY LICENSEE AS A RESULT OF OR
- * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR
- * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
- * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
- * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
- * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
- * THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that Software is not designed, licensed or
- * intended for use in the design, construction, operation or
- * maintenance of any nuclear facility.
- */
-
-import com.sun.tools.doclets.Taglet;
-import com.sun.javadoc.*;
-import java.util.Map;
-
-/**
- * A sample Inline Taglet representing {@underline ...}. This tag can
- * be used in any kind of {@link com.sun.javadoc.Doc}.
- * The text is underlined.  For example,
- * "@underline UNDERLINE ME" would be shown as: <u>UNDERLINE ME</u>.
- *
- * @author Jamie Ho
- * @since 1.4
- */
-
-public class UnderlineTaglet implements Taglet {
-
-    private static final String NAME = "underline";
-
-    /**
-     * Return the name of this custom tag.
-     */
-    public String getName() {
-        return NAME;
-    }
-
-    /**
-     * @return true since this tag can be used in a field
-     *         doc comment
-     */
-    public boolean inField() {
-        return true;
-    }
-
-    /**
-     * @return true since this tag can be used in a constructor
-     *         doc comment
-     */
-    public boolean inConstructor() {
-        return true;
-    }
-
-    /**
-     * @return true since this tag can be used in a method
-     *         doc comment
-     */
-    public boolean inMethod() {
-        return true;
-    }
-
-    /**
-     * @return true since this tag can be used in an overview
-     *         doc comment
-     */
-    public boolean inOverview() {
-        return true;
-    }
-
-    /**
-     * @return true since this tag can be used in a package
-     *         doc comment
-     */
-    public boolean inPackage() {
-        return true;
-    }
-
-    /**
-     * @return true since this
-     */
-    public boolean inType() {
-        return true;
-    }
-
-    /**
-     * Will return true since this is an inline tag.
-     * @return true since this is an inline tag.
-     */
-
-    public boolean isInlineTag() {
-        return true;
-    }
-
-    /**
-     * Register this Taglet.
-     * @param tagletMap  the map to register this tag to.
-     */
-    public static void register(Map tagletMap) {
-       UnderlineTaglet tag = new UnderlineTaglet();
-       Taglet t = (Taglet) tagletMap.get(tag.getName());
-       if (t != null) {
-           tagletMap.remove(tag.getName());
-       }
-       tagletMap.put(tag.getName(), tag);
-    }
-
-    /**
-     * Given the <code>Tag</code> representation of this custom
-     * tag, return its string representation.
-     * @param tag he <code>Tag</code> representation of this custom tag.
-     */
-    public String toString(Tag tag) {
-        return "<u>" + tag.text() + "</u>";
-    }
-
-    /**
-     * This method should not be called since arrays of inline tags do not
-     * exist.  Method {@link #tostring(Tag)} should be used to convert this
-     * inline tag to a string.
-     * @param tags the array of <code>Tag</code>s representing of this custom tag.
-     */
-    public String toString(Tag[] tags) {
-        return null;
-    }
-}
-
--- a/test/langtools/tools/javadoc/completionFailure/CompletionFailure.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4670772 6328529
- * @summary Completion failures should be ignored in javadoc.
- * @author gafter
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-public class CompletionFailure extends Doclet
-{
-    public static void main(String[] args) {
-        // run javadoc on package pkg
-        if (com.sun.tools.javadoc.Main.execute("javadoc",
-                                               "CompletionFailure",
-                                               CompletionFailure.class.getClassLoader(),
-                                               new String[]{"pkg"}) != 0)
-            throw new Error();
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc[] classes = root.classes();
-        if (classes.length != 1)
-            throw new Error("1 " + Arrays.asList(classes));
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/completionFailure/pkg/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg;
-
-public class A {
-}
--- a/test/langtools/tools/javadoc/completionFailure/pkg/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg.A;
-
-public class B {
-}
--- a/test/langtools/tools/javadoc/dupOk/DupOk.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4673477
- * @summary The first definition found for each class should be documented
- * @author gafter
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-public class DupOk extends Doclet
-{
-    public static void main(String[] args) {
-        // run javadoc on package p
-        if (com.sun.tools.javadoc.Main.
-            execute("javadoc", "DupOk", DupOk.class.getClassLoader(),
-                    new String[]
-                {"-sourcepath",
-                 System.getProperty("test.src", ".") + java.io.File.separatorChar + "sp1" +
-                 System.getProperty("path.separator") +
-                 System.getProperty("test.src", ".") + java.io.File.separatorChar + "sp2",
-                 "p"
-                }) != 0)
-            throw new Error();
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc[] classes = root.classes();
-        if (classes.length != 2)
-            throw new Error("1 " + Arrays.asList(classes));
-        for (int i=0; i<classes.length; i++) {
-            ClassDoc clazz = classes[i];
-            if (clazz.fields().length != 1)
-                throw new Error("2 " + clazz + " " + Arrays.asList(clazz.fields()));
-        }
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/dupOk/sp1/p/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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 p;
-
-public class A {
-    public int x;
-}
--- a/test/langtools/tools/javadoc/dupOk/sp2/p/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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 p;
-
-public class A {}
--- a/test/langtools/tools/javadoc/dupOk/sp2/p/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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 p;
-
-public class B {
-    public int x;
-}
--- a/test/langtools/tools/javadoc/enum/docComments/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the comments in an enum type.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester =
-            new OldToolTester("Main", "-package", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-    }
-
-    public static boolean start(RootDoc root) {
-        ClassDoc operation = root.classes()[0];
-        boolean ok =
-            checkComment(operation.commentText(), "Arithmetic operations.");
-
-        for (FieldDoc f : operation.fields()) {
-            if (f.name().equals("plus")) {
-                ok = checkComment(f.commentText(), "Addition") && ok;
-                for (MethodDoc m : operation.methods()) {
-                    if (m.name().equals("eval")) {
-                        ok = checkComment(m.commentText(),
-                                          "Perform arithmetic operation " +
-                                          "represented by this constant.") &&
-                            ok;
-                        break;
-                    }
-                }
-                break;
-            }
-        }
-        if (!ok) {
-            throw new Error("Comments don't match expectations.");
-        } else {
-            return true;
-        }
-    }
-
-    private static boolean checkComment(String found, String expected) {
-        System.out.println("expected: \"" + expected + "\"");
-        System.out.println("found:    \"" + found + "\"");
-        return expected.equals(found);
-    }
-}
--- a/test/langtools/tools/javadoc/enum/docComments/pkg1/Operation.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-/*
- * Example from JSR 201, which borrowed it from "Effective Java".
- */
-
-/**
- * Arithmetic operations.
- */
-public abstract enum Operation {
-    /** Addition */
-    plus {
-        /** Add 'em up. */
-        double eval(double x, double y) { return x + y; }
-    },
-    minus {
-        double eval(double x, double y) { return x - y; }
-    },
-    times {
-        double eval(double x, double y) { return x * y; }
-    },
-    divided_by {
-        double eval(double x, double y) { return x / y; }
-    };
-
-    /**
-     * Perform arithmetic operation represented by this constant.
-     */
-    abstract double eval(double x, double y);
-}
--- a/test/langtools/tools/javadoc/enum/enumType/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the contents of an enum type.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/enum/enumType/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-enum pkg1.QuotablePerson
-  name: QuotablePerson / QuotablePerson / pkg1.QuotablePerson
-  superclass:
-    java.lang.Enum<pkg1.QuotablePerson>
-  enum constants:
-    Thoreau
-    McLuhan
-    Pynchon
-    Mencken
-    Allen
-    Vidal
-    Occam
-    Groening
-    Juvenal
-    Eco
-  methods:
-    pkg1.QuotablePerson[] values()
-    QuotablePerson valueOf(String)
--- a/test/langtools/tools/javadoc/enum/enumType/pkg1/QuotablePerson.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-/**
- * Some people we love to quote.
- */
-public enum QuotablePerson {
-
-    /** "Beware of all enterprises that require new clothes." */
-    Thoreau,
-
-    /**
-     * "A point of view can be a dangerous luxury when substituted for
-     * insight and understanding."
-     */
-    McLuhan,
-
-    /**
-     * "If they can keep you asking the wrong questions, they don't have to
-     * worry about the answers."
-     */
-    Pynchon,
-
-    /**
-     * "For every problem, there is a solution that is simple, elegant,
-     * and wrong."
-     */
-    Mencken,
-
-    /**
-     * "Formerly unsolvable equations are dealt with by threats of reprisals."
-     */
-    Allen,
-
-    /** "It is not enough to succeed.  Others must fail." */
-    Vidal,
-
-    /** "Entia non sunt multiplicanda praeter necessitatem." */
-    Occam,
-
-    /**
-     * "Love is a snowmobile racing across the tundra and then suddenly it
-     * flips over, pinning you underneath.  At night, the ice weasels come."
-     */
-    Groening,
-
-    /** "Sed Quis custodiet ipsos custodes?" */
-    Juvenal,
-
-    /**
-     * "The list could surely go on, and there is nothing more wonderful
-     * than a list, instrument of wondrous hypotyposis."
-     */
-    Eco
-}
--- a/test/langtools/tools/javadoc/generics/genericClass/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the contents of the ClassDoc of a generic class.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericClass/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-class pkg1.A<T>
-  name: A / A / pkg1.A
-  type parameters:
-    T
-  superclass:
-    java.lang.Object
-  fields:
-    T t
-    pkg1.A<T> at
-    pkg1.A<java.lang.String> as
-  constructors:
-    A()
-  methods:
-    void m1(T)
-    void m2(A<T>)
-    void m3(A<String>)
--- a/test/langtools/tools/javadoc/generics/genericClass/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class A<T> {
-    public T t;
-    public A<T> at;
-    public A<String> as;
-
-    public void m1(T t) {}
-    public void m2(A<T> at) {}
-    public void m3(A<String> as) {}
-}
--- a/test/langtools/tools/javadoc/generics/genericInnerAndOuter/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the contents of the ClassDoc of
- *          a generic class with a generic inner class.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import java.util.Arrays;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            ClassDoc[] cds = root.classes();
-            Arrays.sort(cds);
-            for (ClassDoc cd : cds) {
-                tester.printClass(cd);
-                tester.println();
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericInnerAndOuter/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-class pkg1.O<T>
-  name: O / O / pkg1.O
-  type parameters:
-    T
-  superclass:
-    java.lang.Object
-  constructors:
-    O()
-
-class pkg1.O<T>.I<S>
-  name: I / O.I / pkg1.O.I
-  type parameters:
-    S
-  nested in:
-    pkg1.O<T>
-  superclass:
-    java.lang.Object
-  constructors:
-    I()
-  methods:
-    void m1(O<String>.I<Number>)
-
-class pkg1.X<T>
-  name: X / X / pkg1.X
-  type parameters:
-    T
-  superclass:
-    java.lang.Object
-  constructors:
-    X()
-
-class pkg1.X<T>.Y
-  name: Y / X.Y / pkg1.X.Y
-  nested in:
-    pkg1.X<T>
-  superclass:
-    java.lang.Object
-  constructors:
-    Y()
-
-class pkg1.X<T>.Y.Z<S>
-  name: Z / X.Y.Z / pkg1.X.Y.Z
-  type parameters:
-    S
-  nested in:
-    pkg1.X<T>.Y
-  superclass:
-    java.lang.Object
-  constructors:
-    Z()
-  methods:
-    void m1(X<String>.Y.Z<Number>)
-
--- a/test/langtools/tools/javadoc/generics/genericInnerAndOuter/pkg1/O.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class O<T> {
-    public class I<S> {
-        public void m1(O<String>.I<Number> a) {}
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericInnerAndOuter/pkg1/X.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class X<T> {
-    public class Y {
-        public class Z<S> {
-            public void m1(X<String>.Y.Z<Number> a) {}
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericInterface/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the contents of the ClassDoc of a generic interface.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericInterface/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-interface pkg1.A<T>
-  name: A / A / pkg1.A
-  type parameters:
-    T
-  methods:
-    void m1(T)
--- a/test/langtools/tools/javadoc/generics/genericInterface/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public interface A<T> {
-    void m1(T t);
-}
--- a/test/langtools/tools/javadoc/generics/genericMethod/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the reading of generic methods and constructors.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                for (ConstructorDoc c : cd.constructors())
-                    tester.printConstructor(c);
-                for (MethodDoc m : cd.methods())
-                    tester.printMethod(m);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericMethod/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-constructor <T>pkg1.A()
-  signature: ()
-             ()
-  type parameters:
-    T
-method pkg1.A.<T>m1(T)
-  signature: (T)
-             (T)
-  type parameters:
-    T
-  returns:
-    void
-method pkg1.A.<T extends java.lang.Number, U>m2(T, U)
-  signature: (T, U)
-             (T, U)
-  type parameters:
-    T extends java.lang.Number
-    U
-  returns:
-    void
--- a/test/langtools/tools/javadoc/generics/genericMethod/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class A {
-    public <T> A() {}
-    public <T> void m1(T t) {}
-    public <T extends Number, U> void m2(T t, U u) {}
-}
--- a/test/langtools/tools/javadoc/generics/genericSuper/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the contents of the ClassDoc of a generic class.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import java.util.Arrays;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester =
-            new OldToolTester("Main", "pkg1", "-package");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            ClassDoc[] cds = root.classes();
-            Arrays.sort(cds);
-            for (ClassDoc cd : cds) {
-                tester.printClass(cd);
-                tester.println();
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/genericSuper/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-class pkg1.A<V, W>
-  name: A / A / pkg1.A
-  type parameters:
-    V
-    W
-  superclass:
-    pkg1.S<W, V>
-  interfaces:
-    pkg1.I<java.lang.String>
-  constructors:
-    A()
-
-interface pkg1.I<R>
-  name: I / I / pkg1.I
-  type parameters:
-    R
-
-class pkg1.S<T, U>
-  name: S / S / pkg1.S
-  type parameters:
-    T
-    U
-  superclass:
-    java.lang.Object
-  constructors:
-    S()
-
--- a/test/langtools/tools/javadoc/generics/genericSuper/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-class S<T,U> {
-}
-
-interface I<R> {
-}
-
-public class A<V,W> extends S<W,V> implements I<String> {
-}
--- a/test/langtools/tools/javadoc/generics/supertypes/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4922918
- * @summary Check supertypes and superinterfaces of parameterized types.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import java.util.Comparator;
-import java.util.Arrays;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            ClassDoc[] cds = root.classes();
-            Arrays.sort(cds);
-            for (ClassDoc cd : cds) {
-                ParameterizedType arrayList =
-                    cd.superclassType().asParameterizedType();
-                tester.println(arrayList);
-                tester.println();
-
-                tester.println(arrayList.superclassType());
-                Type[] interfaces = arrayList.interfaceTypes();
-                // Sort interfaces by type name, for consistent output.
-                Arrays.sort(interfaces,
-                            new Comparator<Type>() {
-                                    public int compare(Type t1, Type t2) {
-                                        String name1 = t1.qualifiedTypeName();
-                                        String name2 = t2.qualifiedTypeName();
-                                        return name1.compareTo(name2);
-                                    }
-                                });
-                for (Type t : interfaces) {
-                    tester.println(t);
-                }
-                tester.println();
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/supertypes/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-java.util.ArrayList<java.lang.String>
-
-java.util.AbstractList<java.lang.String>
-java.io.Serializable
-java.lang.Cloneable
-java.util.List<java.lang.String>
-java.util.RandomAccess
-
-java.util.ArrayList<X>
-
-java.util.AbstractList<X>
-java.io.Serializable
-java.lang.Cloneable
-java.util.List<X>
-java.util.RandomAccess
-
--- a/test/langtools/tools/javadoc/generics/supertypes/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-import java.util.ArrayList;
-
-public class A extends ArrayList<String> {
-}
--- a/test/langtools/tools/javadoc/generics/supertypes/pkg1/B.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-import java.util.ArrayList;
-
-public class B<X> extends ArrayList<X> {
-}
--- a/test/langtools/tools/javadoc/generics/throwsGeneric/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the reading of generic methods and constructors.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                for (MethodDoc m : cd.methods())
-                    tester.printMethod(m);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/throwsGeneric/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-method pkg1.A.m1()
-  signature: ()
-             ()
-  throws:
-    T extends java.lang.Throwable
-  returns:
-    void
-method pkg1.A.<U extends java.lang.Throwable>m2()
-  signature: ()
-             ()
-  type parameters:
-    U extends java.lang.Throwable
-  throws:
-    U extends java.lang.Throwable
-  returns:
-    void
--- a/test/langtools/tools/javadoc/generics/throwsGeneric/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public interface A<T extends Throwable> {
-    void m1() throws T;
-    <U extends Throwable> void m2() throws U;
-}
--- a/test/langtools/tools/javadoc/generics/tparamCycle/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Check a type parameter whose bound cycles back on itself.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-    }
-
-    public static boolean start(RootDoc root) {
-        ClassDoc cd = root.classes()[0];
-        System.out.println("*** " + cd);
-        TypeVariable E = cd.typeParameters()[0];
-        System.out.println("*** " + E);
-        Type bound = E.bounds()[0];
-        System.out.println("*** " + bound);
-
-        // Verify that we have an instantiation of Enum<E>, and not
-        // the generic interface.
-        ParameterizedType enumE = (ParameterizedType)bound;
-
-        if (enumE.asClassDoc() != cd) {
-            throw new Error("Type declaration and type use don't match up.");
-        } else {
-            return true;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/tparamCycle/pkg1/LikeEnum.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public interface LikeEnum<E extends LikeEnum<E>> {
-}
--- a/test/langtools/tools/javadoc/generics/tparamTagOnMethod/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the reading of type parameter tags on methods.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                for (MethodDoc m : cd.methods()) {
-                    tester.printMethod(m);
-                }
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/tparamTagOnMethod/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-method pkg1.A.<T, U>m1(T, U)
-  signature: (T, U)
-             (T, U)
-  @param <T> the kind of thing
-  @param <U> the other kind of thing
-  @param t the thing itself
-  @param u the other thing
-  type parameters:
-    T
-    U
-  returns:
-    void
--- a/test/langtools/tools/javadoc/generics/tparamTagOnMethod/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public interface A {
-    /**
-     * @param <T> the kind of thing
-     * @param <U> the other kind of thing
-     * @param t the thing itself
-     * @param u the other thing
-     */
-    public <T,U> void m1(T t, U u);
-}
--- a/test/langtools/tools/javadoc/generics/tparamTagOnType/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the reading of a type parameter tag on an interface.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/tparamTagOnType/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-interface pkg1.A<T>
-  name: A / A / pkg1.A
-  type parameters:
-    T
-  @param <T> the type parameter
--- a/test/langtools/tools/javadoc/generics/tparamTagOnType/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-/**
- * @param <T> the type parameter
- */
-public interface A<T> {
-}
--- a/test/langtools/tools/javadoc/generics/wildcards/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066
- * @summary Verify the contents of the ClassDoc of a generic class.
- * @library ../../lib
- * @modules jdk.javadoc
- * @compile  ../../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester = new OldToolTester("Main", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/generics/wildcards/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-class pkg1.A<T>
-  name: A / A / pkg1.A
-  type parameters:
-    T
-  superclass:
-    java.lang.Object
-  fields:
-    pkg1.A<?> f1
-    pkg1.A<? extends java.lang.Number> f2
-    pkg1.A<? super java.lang.Long> f3
-  constructors:
-    A()
-  methods:
-    void m1(A<?>)
-    void m2(A<? extends Number>)
-    void m3(A<? super Long>)
--- a/test/langtools/tools/javadoc/generics/wildcards/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-public class A<T> {
-    public A<?> f1;
-    public A<? extends Number> f2;
-    public A<? super Long> f3;
-
-    public void m1(A<?> p1) {}
-    public void m2(A<? extends Number> p2) {}
-    public void m3(A<? super Long> p3) {}
-}
--- a/test/langtools/tools/javadoc/imports/I.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-// The following imported class is bogus, but should still be returned
-// when inquired of.
-import bo.o.o.o.Gus;
-
-public interface I {
-}
--- a/test/langtools/tools/javadoc/imports/MissingImport.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 5012972
- * @summary ClassDoc.getImportedClasses should return a class even if
- *          it's not in the classpath.
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-
-
-public class MissingImport extends Doclet {
-
-    public static void main(String[] args) {
-        String thisFile = "" +
-            new java.io.File(System.getProperty("test.src", "."),
-                             "I.java");
-
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "MissingImport",
-                MissingImport.class.getClassLoader(),
-                new String[] {thisFile}) != 0)
-            throw new Error("Javadoc encountered warnings or errors.");
-    }
-
-    /*
-     * The world's simplest doclet.
-     */
-    public static boolean start(RootDoc root) {
-        ClassDoc c = root.classNamed("I");
-        ClassDoc[] imps = c.importedClasses();
-        if (imps.length == 0 ||
-            !imps[0].qualifiedName().equals("bo.o.o.o.Gus")) {
-            throw new Error("Import bo.o.o.o.Gus not found");
-        }
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/lib/OldToolTester.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * A utility used to invoke and test the javadoc tool.
- *
- * @author Scott Seligman
- */
-
-
-import java.io.*;
-import java.util.*;
-import com.sun.javadoc.*;
-
-
-public class OldToolTester {
-
-    protected final String TEST_SRC = System.getProperty("test.src", ".");
-    protected final String TEST_CLASSES = System.getProperty("test.classes",
-                                                             ".");
-    private final String DEFAULT_ARGS[] = {
-        "-sourcepath", TEST_SRC,
-    };
-
-    private final File outputFile = new File(TEST_CLASSES, "testrun.out");
-    private final File expectedOutputFile = new File(TEST_SRC, "expected.out");
-//  private final File bootstrapMarkerFile = new File("bootstrap");
-
-    // True if we should "set expectations" by writing the expected output file
-    // rather than reading it and comparing.
-//  private final boolean bootstrap = bootstrapMarkerFile.isFile();
-
-    private String docletName;
-    private String[] args;
-    private Writer out = null;
-
-
-    /*
-     * Individual tests can extend this to create generics-aware doclets.
-     */
-    public static abstract class Doclet extends com.sun.javadoc.Doclet {
-        public static LanguageVersion languageVersion() {
-            return LanguageVersion.JAVA_1_5;
-        }
-    }
-
-
-    public OldToolTester(String docletName) {
-        this(docletName, new String[0]);
-    }
-
-    public OldToolTester(String docletName, String... additionalArgs) {
-        this.docletName = docletName;
-
-        int len = DEFAULT_ARGS.length + additionalArgs.length;
-        args = new String[len];
-        System.arraycopy(DEFAULT_ARGS, 0, args, 0, DEFAULT_ARGS.length);
-        System.arraycopy(additionalArgs, 0, args, DEFAULT_ARGS.length,
-                         additionalArgs.length);
-
-        try {
-            out = new BufferedWriter(new FileWriter(outputFile));
-        } catch (IOException e) {
-            throw new Error("Could not open output file " + outputFile);
-        }
-    }
-
-    public void run() throws IOException {
-        try {
-            if (com.sun.tools.javadoc.Main.execute("javadoc",
-                                                   docletName,
-                                                   getClass().getClassLoader(),
-                                                   args) != 0) {
-                throw new Error("Javadoc errors encountered.");
-            }
-            System.out.println("--> Output written to " + outputFile);
-        } finally {
-            out.close();
-        }
-    }
-
-    /*
-     * Compare output of test run to expected output.
-     * Throw an Error if they don't match.
-     */
-    public void verify() throws IOException {
-        BufferedReader thisRun =
-            new BufferedReader(new FileReader(outputFile));
-        BufferedReader expected =
-            new BufferedReader(new FileReader(expectedOutputFile));
-
-        for (int lineNum = 1; true; lineNum++) {
-            String line1 = thisRun.readLine();
-            String line2 = expected.readLine();
-            if (line1 == null && line2 == null) {
-                return;         // EOF with all lines matching
-            }
-            if (line1 == null || !line1.equals(line2)) {
-                throw new Error(outputFile + ":" + lineNum +
-                                ": output doesn't match");
-            }
-        }
-    }
-
-
-    public void println(Object o) throws IOException {
-        prln(0, o);
-    }
-
-    public void println() throws IOException {
-        prln();
-    }
-
-    public void printPackage(PackageDoc p) throws IOException {
-        prPackage(0, p);
-    }
-
-    public void printClass(ClassDoc cd) throws IOException {
-        if (cd.isAnnotationType())
-            printAnnotationType((AnnotationTypeDoc)cd);
-        else
-            prClass(0, cd);
-    }
-
-    public void printAnnotationType(AnnotationTypeDoc at) throws IOException {
-        prAnnotationType(0, at);
-    }
-
-    public void printField(FieldDoc f) throws IOException {
-        prField(0, f);
-    }
-
-    public void printParameter(Parameter p) throws IOException {
-        prParameter(0, p);
-    }
-
-    public void printMethod(MethodDoc m) throws IOException {
-        prln(0, "method " + m);
-        prMethod(0, m);
-    }
-
-    public void printAnnotationTypeElement(AnnotationTypeElementDoc e)
-                                                        throws IOException {
-        prln(0, "element " + e);
-        prMethod(0, e);
-    }
-
-    public void printConstructor(ConstructorDoc c) throws IOException {
-        prln(0, "constructor " + c);
-        prExecutable(0, c);
-    }
-
-
-    private void prPackage(int off, PackageDoc p) throws IOException {
-        prln(off, "package " + p);
-        prAnnotations(off + 2, p.annotations());
-    }
-
-    private void prClass(int off, ClassDoc cd) throws IOException {
-        prln(off,
-             (cd.isInterface() ? "interface" : cd.isEnum() ? "enum" : "class")
-             + " " + cd);
-        prln(off + 2, "name: " + cd.simpleTypeName() + " / " +
-             cd.typeName() + " / " + cd.qualifiedTypeName());
-        prAnnotations(off + 2, cd.annotations());
-        prLabel(off + 2, "type parameters");
-        for (Type t : cd.typeParameters())
-            prln(off + 4, t);
-        prParamTags(off + 2, cd.typeParamTags());
-        prLabel(off + 2, "nested in");
-        prln(off + 4, cd.containingClass());
-        prLabel(off + 2, "superclass");
-        prln(off + 4, cd.superclassType());
-        prLabel(off + 2, "interfaces");
-        Type[] ts = cd.interfaceTypes();
-        Arrays.sort(ts);
-        for (Type t : ts)
-            prln(off + 4, t);
-        prLabel(off + 2, "enum constants");
-        for (FieldDoc f : cd.enumConstants())
-            prln(off + 4, f.name());
-        prLabel(off + 2, "fields");
-        for (FieldDoc f : cd.fields())
-            prln(off + 4, f.type() + " " + f.name());
-        prLabel(off + 2, "constructors");
-        for (ConstructorDoc c : cd.constructors())
-            prln(off + 4, c.name() + c.flatSignature());
-        prLabel(off + 2, "methods");
-        for (MethodDoc m : cd.methods())
-            prln(off + 4, typeUseString(m.returnType()) + " " +
-                          m.name() + m.flatSignature());
-    }
-
-    private void prAnnotationType(int off, AnnotationTypeDoc at)
-                                                        throws IOException {
-        prln(off, "@interface " + at);
-        prAnnotations(off + 2, at.annotations());
-        prLabel(off + 2, "elements");
-        for (AnnotationTypeElementDoc e : at.elements()) {
-            String def = (e.defaultValue() == null)
-                                ? ""
-                                : " default " + e.defaultValue();
-            prln(off + 4, typeUseString(e.returnType()) + " " + e.name() +
-                          e.flatSignature() + def);
-        }
-    }
-
-    private void prField(int off, FieldDoc f) throws IOException {
-        prln(off, "field " + typeUseString(f.type()) + " " + f.name());
-        prAnnotations(off + 2, f.annotations());
-    }
-
-    private void prParameter(int off, Parameter p) throws IOException {
-        prln(off, "parameter " + p);
-        prAnnotations(off + 2, p.annotations());
-    }
-
-    private void prMethod(int off, MethodDoc m) throws IOException {
-        prExecutable(off, m);
-        prLabel(off + 2, "returns");
-        prln(off + 4, typeUseString(m.returnType()));
-        prLabel(off + 2, "overridden type");
-        prln(off + 4, m.overriddenType());
-    }
-
-    private void prExecutable(int off, ExecutableMemberDoc m)
-                                                        throws IOException {
-        if (!m.isAnnotationTypeElement()) {
-            prln(off + 2, "signature: " + m.flatSignature());
-            prln(off + 2, "           " + m.signature());
-        }
-        prAnnotations(off + 2, m.annotations());
-        prParamTags(off + 2, m.typeParamTags());
-        prParamTags(off + 2, m.paramTags());
-        prLabel(off + 2, "type parameters");
-        for (Type t : m.typeParameters())
-            prln(off + 4, t);
-        prLabel(off + 2, "throws");
-        Type[] ts = m.thrownExceptionTypes();
-        Arrays.sort(ts);
-        for (Type t : ts)
-            prln(off + 4, t);
-    }
-
-    private void prAnnotations(int off, AnnotationDesc[] as)
-                                                        throws IOException {
-        prLabel(off, "annotations");
-        for (AnnotationDesc a : as)
-            prln(off + 2, a.toString());
-    }
-
-    private void prParamTags(int off, ParamTag tags[]) throws IOException {
-        for (ParamTag tag : tags)
-            prParamTag(off, tag);
-    }
-
-    private void prParamTag(int off, ParamTag tag) throws IOException {
-        String name = tag.parameterName();
-        if (tag.isTypeParameter()) name = "<" + name + ">";
-        prln(off, "@param " + name + " " + tag.parameterComment());
-    }
-
-
-    private String typeUseString(Type t) {
-        return (t instanceof ClassDoc || t instanceof TypeVariable)
-                ? t.typeName()
-                : t.toString();
-    }
-
-
-    // Labels queued for possible printing.  Innermost is first in list.
-    List<Line> labels = new ArrayList<Line>();
-
-    // Print label if its section is nonempty.
-    void prLabel(int off, String s) {
-        while (!labels.isEmpty() && labels.get(0).off >= off)
-            labels.remove(0);
-        labels.add(0, new Line(off, s));
-    }
-
-    // Print queued labels with offsets less than "off".
-    void popLabels(int off) throws IOException {
-        while (!labels.isEmpty()) {
-            Line label = labels.remove(0);
-            if (label.off < off)
-                prln(label.off, label.o + ":");
-        }
-    }
-
-    // Print "o" at given offset.
-    void pr(int off, Object o) throws IOException {
-        popLabels(off);
-        for (int i = 0; i < off; i++)
-            out.write(' ');
-        if (o != null)
-            out.write(o.toString());
-    }
-
-    // Print "o" (if non-null) at given offset, then newline.
-    void prln(int off, Object o) throws IOException {
-        if (o != null) {
-            pr(off, o);
-            prln();
-        }
-    }
-
-    // Print newline.
-    void prln() throws IOException {
-        out.write('\n');        // don't want platform-dependent separator
-    }
-
-
-    static class Line {
-        int off;
-        Object o;
-        Line(int off, Object o) { this.off = off; this.o = o; }
-    }
-}
--- a/test/langtools/tools/javadoc/lib/ToyDoclet.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * 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.Arrays;
-
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.PackageDoc;
-import com.sun.javadoc.ProgramElementDoc;
-import com.sun.javadoc.RootDoc;
-
-@SuppressWarnings("deprecation")
-public class ToyDoclet {
-
-    public static boolean start(RootDoc root) {
-        String whoami = "I am a toy doclet";
-        root.printNotice("Notice: " + whoami);
-        boolean status = false;
-        for (ClassDoc cls : root.classes()) {
-            if (!status) status = true;
-            root.printNotice("Classes: " + cls);
-            printClassMembers(root, cls);
-        }
-        for (ClassDoc cls : root.specifiedClasses()) {
-            if (!status) status = true;
-            root.printNotice("Specified-classes: " + cls);
-            printClassMembers(root, cls);
-        }
-        for (PackageDoc pkg : root.specifiedPackages()) {
-            if (!status) status = true;
-            root.printNotice("Specified-packages: " + pkg);
-        }
-        return status;
-    }
-
-    static void printClassMembers(RootDoc root, ClassDoc cls) {
-        root.printNotice("Members for: " + cls);
-        root.printNotice("  extends " + Arrays.asList(cls.superclass()));
-        root.printNotice("  Fields: ");
-        printMembers(root, cls.fields());
-        root.printNotice("  Constructor: ");
-        printMembers(root, cls.constructors());
-        root.printNotice("  Method: ");
-        printMembers(root, cls.methods());
-        if (cls.superclass() != null && !cls.superclassType().toString().equals("java.lang.Object"))
-            printClassMembers(root, cls.superclass());
-    }
-
-    static void printMembers(RootDoc root, ProgramElementDoc[] pgmDocs) {
-        for (ProgramElementDoc pgmDoc : pgmDocs) {
-            root.printNotice("     " + pgmDoc + ", Comments: " + pgmDoc.getRawCommentText());
-        }
-    }
-
-    public static int optionLength(String option) {
-        System.out.println("option: " + option);
-        return 0;  // all options are unsupported
-    }
-}
--- a/test/langtools/tools/javadoc/nestedClass/NestedClass.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4694497
- * @summary BDoclet API: Bad ClassDoc for nested classes when built from .class files
- * @author gafter
- * @modules jdk.javadoc
- * @compile NestedClass.java NestedClassB.java
- * @run main NestedClass
- */
-
-import com.sun.javadoc.*;
-import java.util.*;
-
-public class NestedClass extends Doclet
-{
-    public NestedClassB b;
-
-    public static void main(String[] args) {
-        if (com.sun.tools.javadoc.Main.
-            execute("javadoc", "NestedClass", NestedClass.class.getClassLoader(),
-                    new String[] {System.getProperty("test.src", ".") +
-                                  java.io.File.separatorChar +
-                                  "NestedClass.java"})
-            != 0)
-            throw new Error();
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        ClassDoc[] classes = root.classes();
-        if (classes.length != 1)
-            throw new Error("1 " + Arrays.asList(classes));
-        ClassDoc self = classes[0];
-        FieldDoc B = self.fields()[0];
-        ClassDoc[] Binner = B.type().asClassDoc().innerClasses();
-        return Binner.length == 1;
-    }
-}
--- a/test/langtools/tools/javadoc/nestedClass/NestedClassB.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class NestedClassB {
-    public static class Inner {}
-}
--- a/test/langtools/tools/javadoc/nonConstExprs/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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     8010310
- * @summary Error processing sources with -private
- * @modules jdk.javadoc
- */
-
-import java.io.File;
-
-public class Test {
-    public static void main(String... args) throws Exception {
-        File testSrc = new File(System.getProperty("test.src"));
-        String[] jdoc_args = {
-            new File(testSrc, Test.class.getSimpleName() + ".java").getPath()
-        };
-        int rc = com.sun.tools.javadoc.Main.execute(jdoc_args);
-        if (rc != 0)
-            throw new Exception("unexpected return code from javadoc: " + rc);
-    }
-
-    static int array[] = { 1, 2, 3};
-    static int method(int p) { return p; }
-    static int value = 0;
-
-    public int not_static_not_final = 1;
-    public static int static_not_final = 2;
-    public final int not_static_final = 3;
-    public static final int static_final = 4;
-
-    public static final int array_index = array[0];
-    public static final int method_call = method(0);
-    public static final int inner_class = new Test() { }.method(0);
-    public static final int new_class = new Test().method(0);
-    public static final int pre_inc = ++value;
-    public static final int pre_dec = --value;
-    public static final int post_inc = value++;
-    public static final int post_dec = value--;
-}
-
--- a/test/langtools/tools/javadoc/outputRedirect/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4587487
- * @summary com.sun.tools.javadoc.Main.execute ignores PrintWriters
- * @author gafter
- * @modules jdk.javadoc
- * @compile p/OutputRedirect.java
- * @run main p.OutputRedirect
- */
-
-// jtreg description-only file
--- a/test/langtools/tools/javadoc/outputRedirect/p/OutputRedirect.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * 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 p;
-
-import java.io.*;
-import com.sun.tools.javadoc.Main;
-
-public class OutputRedirect {
-
-    public static void main(String[] args) {
-        PrintStream originalOutput = System.out;
-        try {
-            doTest();
-        } finally {
-            // restore things
-            System.setOut(originalOutput);
-        }
-    }
-
-    static void doTest() {
-        ByteArrayOutputStream redirectedOutput = new ByteArrayOutputStream();
-        PrintStream originalOutput = System.out;
-
-        // redirect System.out to a buffer
-        System.setOut(new PrintStream(redirectedOutput));
-
-        PrintWriter sink = new PrintWriter(new ByteArrayOutputStream());
-
-        // execute javadoc
-        int result = Main.execute("javadoc", sink, sink, sink,
-                                  "com.sun.tools.doclets.standard.Standard",
-                                  new String[] {"p"}
-                                  );
-
-
-        // test whether javadoc did any output to System.out
-        if (redirectedOutput.toByteArray().length > 0) {
-            originalOutput.println("Test failed; here's what javadoc wrote on its standard output:");
-            originalOutput.println(redirectedOutput.toString());
-            throw new Error("javadoc output wasn\'t properly redirected");
-        } else if (result != 0) {
-            throw new Error("javadoc run failed");
-        } else {
-            originalOutput.println("OK, good");
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/parser/7091528/T7091528.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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     7091528 8029145 8037484
- * @summary ensures javadoc parses unique source files and ignores all class files
- * @modules jdk.javadoc/com.sun.tools.doclets.standard
- * @library /tools/javadoc/lib
- * @build ToyDoclet
- * @compile p/C1.java p/q/C2.java
- * @run main T7091528
- */
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-public class T7091528 {
-    public static void main(String... args) {
-        new T7091528().run();
-    }
-    void run() {
-        File testSrc = new File(System.getProperty("test.src"));
-        File testClasses = new File(System.getProperty("test.classes"));
-        // 7091528, tests if class files are being ignored
-        runTest(
-            "-sourcepath", testClasses + File.pathSeparator + testSrc,
-            "-subpackages",
-            "p");
-        // 8029145, tests if unique source files are parsed
-        runTest(
-            "-sourcepath", testSrc.getAbsolutePath(),
-            "-subpackages",
-            "p:p.q");
-        File testPkgDir = new File(testSrc, "p");
-        File testFile = new File(testPkgDir, "C3.java");
-        runTest(
-            "-sourcepath", testSrc.getAbsolutePath(),
-            testFile.getAbsolutePath(),
-            "p");
-        runTest(
-            "-classpath", testSrc.getAbsolutePath(),
-            testFile.getAbsolutePath(),
-            "p");
-
-    }
-    void runTest(String... args) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        int rc = com.sun.tools.javadoc.Main.execute("example", pw, pw, pw,
-                "ToyDoclet", getClass().getClassLoader(), args);
-        pw.close();
-
-        String out = sw.toString();
-        if (!out.isEmpty()) {
-            System.err.println(out);
-        }
-
-        if (rc != 0)
-            throw new Error("javadoc failed: exit code = " + rc);
-
-        if (out.matches("(?s).*p/[^ ]+\\.class.*"))
-            throw new Error("reading .class files");
-    }
-}
--- a/test/langtools/tools/javadoc/parser/7091528/p/C1.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * 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 p1;
-
-/** This is class C1. */
-public class C1 { }
-
--- a/test/langtools/tools/javadoc/parser/7091528/p/C3.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/** This is class C3, and no package for me please */
-public class C3 {}
-
--- a/test/langtools/tools/javadoc/parser/7091528/p/q/C2.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * 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 p.q;
-
-/** This is class p.q.C2. */
-public class C2 { }
-
--- a/test/langtools/tools/javadoc/sourceOnly/Test.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 4548768 8034258
- * @summary Javadoc in JDK 1.4 uses classpath and not just source dir
- * @author gafter
- * @modules jdk.javadoc
- * @compile p/SourceOnly.java p/NonSource.jasm
- * @run main p.SourceOnly
- */
-
-// this file is just a dummy to get the javadoc started.
-//
-// NOTE: this test only seems to work in separate JVM mode for
-// reasons having something to do with javing tools.jar
-// on the classpath.  Until that is sorted out, these tests
-// must be run in separate VM mode.
--- a/test/langtools/tools/javadoc/sourceOnly/p/NonSource.jasm	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * 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  p;
-
-super public class NonSource
-        version 46:0
-{
-    public Method "<init>":"()V"
-        stack 1 locals 1
-    {
-                aload_0;
-                invokespecial   Method java/lang/Object."<init>":"()V";
-                return;
-    }
-}
--- a/test/langtools/tools/javadoc/sourceOnly/p/SourceOnly.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
- * 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 p;
-
-/** Test that when running javadoc on a package, we only get
- *  documentation for those classes for which source was provided.
- */
-public class SourceOnly extends com.sun.javadoc.Doclet {
-    NonSource dependency; // force a compilation error if not on classpath.
-
-    public static void main(String[] args) {
-        // run javadoc on package p
-        int result = com.sun.tools.javadoc.Main.
-            execute("javadoc", "p.SourceOnly", SourceOnly.class.getClassLoader(), new String[] {"p"});
-        if (result != 0)
-            throw new Error();
-    }
-
-    public static boolean start(com.sun.javadoc.RootDoc root) {
-        if (root.classes().length != 1)
-            throw new Error("wrong set of classes documented: " + java.util.Arrays.asList(root.classes()));
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/sourceOption/SourceOption.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
- * 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     6507179
- * @summary Ensure that "-source" option isn't ignored.
- * @author  Scott Seligman
- * @modules jdk.javadoc
- * @run main/fail SourceOption 7
- * @run main      SourceOption 9
- * @run main      SourceOption
- */
-
-/*
- * In order to test whether or not the -source option is working
- * correctly, this test tries to parse source code that contains
- * a feature that is not available in at least one of the currently
- * supported previous versions.
- *
- * Parsing such code should be expected to fail; if the action
- * passes, that means the -source option is (incorrectly) ineffective.
- *
- * Additional actions are performed to ensure that the source
- * provided is valid for the current release of the JDK.
- *
- * As support for older versions of the platform are dropped, the
- * source code (currently p/LambdaConstructTest.java) will need to
- * be updated with a more recent feature.
- */
-
-import com.sun.javadoc.*;
-
-public class SourceOption extends Doclet {
-
-    public static void main(String[] args) {
-        String[] params;
-        if ((args == null) || (args.length==0)) {
-            params = new String[]{"p"};
-            System.out.println("NOTE : -source not provided, default taken");
-        } else {
-            params = new String[]{"-source", args[0], "p"};
-            System.out.println("NOTE : -source will be: " + args[0]);
-        }
-
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "SourceOption",
-                SourceOption.class.getClassLoader(),
-                params) != 0)
-        throw new Error("Javadoc encountered warnings or errors.");
-
-    }
-
-    public static boolean start(RootDoc root) {
-        root.classes();         // force parser into action
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/sourceOption/p/LambdaConstructTest.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-public class LambdaConstructTest {
-   public static void main(String[] args) {
-
-     System.out.println("=== LambdaConstructTest ===");
-
-     // Lambda Runnable
-     Runnable lambda = () -> System.out.println("it's a Lambda world!");
-
-     // Run it!
-     lambda.run();
-
-  }
-}
-
--- a/test/langtools/tools/javadoc/subpackageIgnore/SubpackageIgnore.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
- * 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 4773013
- * @summary When hunting subpackages, silently ignore any directory name that
- *          can't be part of a subpackage.
- * @modules jdk.javadoc
- */
-
-import com.sun.javadoc.*;
-
-public class SubpackageIgnore extends Doclet {
-
-    public static void main(String[] args) {
-        if (com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                "SubpackageIgnore",
-                SubpackageIgnore.class.getClassLoader(),
-                new String[] {"-Xwerror",
-                              "-sourcepath",
-                              System.getProperty("test.src", "."),
-                              "-subpackages",
-                              "pkg1"}) != 0)
-            throw new Error("Javadoc encountered warnings or errors.");
-    }
-
-    /*
-     * The world's simplest doclet.
-     */
-    public static boolean start(RootDoc root) {
-        return true;
-    }
-}
--- a/test/langtools/tools/javadoc/subpackageIgnore/pkg1/not-subpkg/SomeJavaFile.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
--- a/test/langtools/tools/javadoc/varArgs/Main.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4421066 5006659
- * @summary Verify the contents of a ClassDoc containing a varArgs method.
- *          Verify that see/link tags can use "..." notation.
- * @library ../lib
- * @modules jdk.javadoc
- * @compile  ../lib/OldToolTester.java Main.java
- * @run main Main
- */
-
-import java.io.IOException;
-import com.sun.javadoc.*;
-
-public class Main extends OldToolTester.Doclet {
-
-    private static final OldToolTester tester =
-            new OldToolTester("Main", "-Xwerror", "pkg1");
-
-    public static void main(String[] args) throws IOException {
-        tester.run();
-        tester.verify();
-    }
-
-    public static boolean start(RootDoc root) {
-        try {
-            for (ClassDoc cd : root.classes()) {
-                tester.printClass(cd);
-
-                for (SeeTag tag : cd.seeTags()) {
-                    if (tag.referencedMember() != cd.methods()[0]) {
-                        throw new Error("5006659: @see tag meets varArgs");
-                    }
-                }
-            }
-
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
--- a/test/langtools/tools/javadoc/varArgs/expected.out	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-interface pkg1.A
-  name: A / A / pkg1.A
-  methods:
-    void m1(int, String...)
--- a/test/langtools/tools/javadoc/varArgs/pkg1/A.java	Fri Feb 22 17:03:09 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
- * 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 pkg1;
-
-/**
- * Interface A.
- *
- * @see #m1(int, String[])
- * @see #m1(int, String...)
- */
-public interface A {
-    void m1(int i, String... ss);
-}
--- a/test/lib/jdk/test/lib/jfr/EventNames.java	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/lib/jdk/test/lib/jfr/EventNames.java	Fri Feb 22 20:36:42 2019 +0000
@@ -66,7 +66,6 @@
     public final static String ClassUnload = PREFIX + "ClassUnload";
     public final static String SafepointBegin = PREFIX + "SafepointBegin";
     public final static String SafepointStateSynchronization = PREFIX + "SafepointStateSynchronization";
-    public final static String SafepointWaitBlocked = PREFIX + "SafepointWaitBlocked";
     public final static String SafepointCleanup = PREFIX + "SafepointCleanup";
     public final static String SafepointCleanupTask = PREFIX + "SafepointCleanupTask";
     public final static String SafepointEnd = PREFIX + "SafepointEnd";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/micro/org/openjdk/bench/java/nio/CharBuffers.java	Fri Feb 22 20:36:42 2019 +0000
@@ -0,0 +1,66 @@
+/*
+ * 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 org.openjdk.bench.java.nio;
+
+import java.nio.CharBuffer;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Level;
+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;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@State(Scope.Thread)
+public class CharBuffers {
+
+    @Param({"2", "256", "16384"})
+    public int numChars;
+
+    public String str;
+    public CharBuffer buf;
+
+    @Setup(Level.Iteration)
+    public void createString() {
+        char[] c = new char[numChars];
+        Arrays.fill(c, 'X');
+        str = String.valueOf(c);
+        buf = CharBuffer.allocate(numChars);
+    }
+
+    @Benchmark
+    public CharBuffer putString() {
+        buf.clear();
+        return buf.put(str);
+    }
+
+}
--- a/test/nashorn/TEST.ROOT	Fri Feb 22 17:03:09 2019 +0000
+++ b/test/nashorn/TEST.ROOT	Fri Feb 22 20:36:42 2019 +0000
@@ -8,7 +8,7 @@
 groups=TEST.groups
 
 # Minimum jtreg version
-requiredVersion=4.2 b13
+requiredVersion=4.2 b14
 
 # Use new module options
 useNewOptions=true