--- a/.hgtags Tue Feb 12 11:58:41 2019 -0500
+++ b/.hgtags Wed Feb 13 13:22:15 2019 -0500
@@ -540,3 +540,5 @@
44f41693631f9b5ac78ff4d2bfabd6734fe46df2 jdk-12+29
b5f05fe4a6f8b3996a000c20078b356d991ca8ec jdk-13+6
6c377af36a5c4203f16aed8a5e4c2ecc08fcd8bd jdk-12+30
+021917019cda1c0c5853255322274f37693a2431 jdk-13+7
+b5f7bb57de2f797be34f6c75d45c3245ad37ab97 jdk-12+31
--- a/make/Bundles.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Bundles.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -35,7 +35,7 @@
# On Windows tar frequently complains that "file changed as we read it" for
# some random source files. This seems to be cause by anti virus scanners and
# is most likely safe to ignore. When it happens, tar returns '1'.
-ifeq ($(OPENJDK_BUILD_OS), windows)
+ifeq ($(call isBuildOs, windows), true)
TAR_IGNORE_EXIT_VALUE := || test "$$$$?" = "1"
endif
@@ -144,7 +144,7 @@
# On Macosx, we bundle up the macosx specific images which already have the
# correct base directories.
-ifeq ($(OPENJDK_TARGET_OS)-$(DEBUG_LEVEL), macosx-release)
+ifeq ($(call isTargetOs, macosx)+$(DEBUG_LEVEL), true+release)
JDK_IMAGE_DIR := $(JDK_MACOSX_BUNDLE_DIR)
JDK_IMAGE_HOMEDIR := $(JDK_MACOSX_CONTENTS_DIR)/Home
JDK_BUNDLE_SUBDIR :=
@@ -167,7 +167,7 @@
# Create special filter rules when dealing with unzipped .dSYM directories on
# macosx
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), false)
JDK_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
$(call containing, .dSYM/, $(patsubst $(JDK_IMAGE_DIR)/%, %, $(ALL_JDK_FILES))))
--- a/make/CompileDemos.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CompileDemos.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -239,7 +239,7 @@
$(call install-file)
$(CHMOD) -f ug+w $@
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
$(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
$(call CacheFind, $(DEMO_SHARE_SRC)/nbproject))
--- a/make/CompileJavaModules.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CompileJavaModules.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -51,21 +51,18 @@
# data files and shouldn't go in the product
java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java
-ifneq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), false)
java.base_EXCLUDE_FILES += \
SolarisLoginModule.java \
SolarisSystem.java \
#
endif
-ifeq ($(filter $(OPENJDK_TARGET_OS), solaris macosx aix), )
- #
- # only solaris, macosx and aix
- #
+ifeq ($(call isTargetOs, solaris macosx aix), false)
java.base_EXCLUDE_FILES += sun/nio/fs/PollingWatchService.java
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
java.base_EXCLUDE_FILES += \
sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
#
@@ -124,7 +121,7 @@
.template \
#
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
# exclude all X11 on Mac.
java.desktop_EXCLUDES += \
sun/awt/X11 \
@@ -186,7 +183,7 @@
sun/awt/X11/XwcTextItem.java
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
java.desktop_EXCLUDES += com/sun/java/swing/plaf/gtk
endif
@@ -194,8 +191,7 @@
java.desktop_EXCLUDES += sun/applet
endif
-# Used on windows and macosx
-ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
java.desktop_EXCLUDE_FILES += sun/awt/AWTCharset.java
endif
@@ -374,11 +370,11 @@
$(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SendFailed.java \
$(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/Shutdown.java
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
endif
-ifeq ($(OPENJDK_TARGET_OS),aix)
+ifeq ($(call isTargetOs, aix), true)
jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
endif
--- a/make/CopyImportModules.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CopyImportModules.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -38,7 +38,7 @@
$(eval $(call FillCacheFind, $(LIBS_DIR) $(CMDS_DIR) $(CONF_DIR)))
ifneq ($(LIBS_DIR), )
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
TO_BIN_FILTER := %$(SHARED_LIBRARY_SUFFIX) %.diz %.pdb %.map
$(eval $(call SetupCopyFiles, COPY_LIBS_TO_BIN, \
--- a/make/CreateJmods.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/CreateJmods.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -118,7 +118,7 @@
endif
endif
else # not java.base
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
# Only java.base needs to include the MSVC*_DLLs. Make sure no other module
# tries to include them (typically imported ones).
ifneq ($(MSVCR_DLL), )
--- a/make/Images.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Images.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -144,7 +144,7 @@
)
ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
DEMO_FILES := $(call not-containing, .dSYM, $(DEMO_FILES))
else
DEMO_FILES := $(filter-out %.debuginfo %.pdb %.map, $(DEMO_FILES))
@@ -192,7 +192,7 @@
ALL_JRE_MODULES := $(sort $(JRE_MODULES), $(foreach m, $(JRE_MODULES), \
$(call FindTransitiveDepsForModule, $m)))
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
LIBS_TARGET_SUBDIR := bin
else
LIBS_TARGET_SUBDIR := lib
@@ -211,7 +211,7 @@
DEBUGINFO_SUFFIXES := .debuginfo .pdb .map
# On Macosx, if debug symbols have not been zipped, find all files inside *.dSYM
# dirs.
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
$(eval $(call FillCacheFind, \
$(SUPPORT_OUTPUTDIR)/modules_cmds $(SUPPORT_OUTPUTDIR)/modules_libs))
FindDebuginfoFiles = \
--- a/make/Init.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Init.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -277,7 +277,7 @@
else
$(ECHO) "Re-running configure using default settings"
endif
- ( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" \
+ ( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" AUTOCONF="$(AUTOCONF)" \
CUSTOM_ROOT="$(CUSTOM_ROOT)" \
CUSTOM_CONFIG_DIR="$(CUSTOM_CONFIG_DIR)" \
$(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) )
--- a/make/InitSupport.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/InitSupport.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -483,7 +483,7 @@
$(TOUCH) $(SJAVAC_SERVER_DIR)/server.port.stop; true
endef
- ifeq ($(OPENJDK_BUILD_OS), windows)
+ ifeq ($(call isBuildOs, windows), true)
# On windows we need to synchronize with the javac server to be able to
# move or remove the build output directory. Since we have no proper
# synchronization process, wait for a while and hope it helps. This is only
--- a/make/MacBundles.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/MacBundles.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
default: bundles
# Only macosx has bundles defined.
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
bundles: jre-bundle jdk-bundle
--- a/make/Main.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/Main.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -1032,7 +1032,7 @@
endif
endif
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
product-images: mac-jdk-bundle
endif
--- a/make/ModuleWrapper.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/ModuleWrapper.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
include $(MAKEFILE_PREFIX)-$(MODULE).gmk
# Setup copy rules from the modules directories to the jdk image directory.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
TO_BIN_FILTER := %$(SHARED_LIBRARY_SUFFIX) %.diz %.pdb %.map
$(eval $(call SetupCopyFiles, COPY_LIBS_TO_BIN, \
--- a/make/RunTests.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/RunTests.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -61,7 +61,7 @@
endef
# Setup _NT_SYMBOL_PATH on Windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
ifndef _NT_SYMBOL_PATH
# Can't use PathList here as it adds quotes around the value.
_NT_SYMBOL_PATH := \
@@ -224,7 +224,7 @@
ifeq ($(TEST_JOBS), 0)
CORES_DIVIDER := 2
- ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+ ifeq ($(call isTargetCpuArch, sparc), true)
# For smaller SPARC machines we see reasonable scaling of throughput up to
# cpus/4 without affecting test reliability. On the bigger machines, cpus/4
# causes intermittent timeouts.
@@ -808,7 +808,7 @@
$1_JTREG_MAX_RAM_PERCENTAGE := $$(shell $$(EXPR) 25 / $$($1_JTREG_JOBS))
# SPARC is in general slower per core so need to scale up timeouts a bit.
- ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+ ifeq ($(call isTargetCpuArch, sparc), true)
JTREG_TIMEOUT_FACTOR ?= 8
else
JTREG_TIMEOUT_FACTOR ?= 4
@@ -835,7 +835,7 @@
$1_JTREG_BASIC_OPTIONS += -e:JDK8_HOME=$$(BOOT_JDK)
# If running on Windows, propagate the _NT_SYMBOL_PATH to enable
# symbol lookup in hserr files
- ifeq ($$(OPENJDK_TARGET_OS), windows)
+ ifeq ($$(call isTargetOs, windows), true)
$1_JTREG_BASIC_OPTIONS += -e:_NT_SYMBOL_PATH
endif
--- a/make/TestImage.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/TestImage.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
############################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
FIXPATH_COPY := $(TEST_IMAGE_DIR)/bin/fixpath.exe
$(FIXPATH_COPY): $(firstword $(FIXPATH))
--- a/make/ZipSecurity.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/ZipSecurity.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -70,7 +70,7 @@
#
# Windows specific binary security packages.
#
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# sec-windows-bin.zip is used by builds where the corresponding sources are not available
$(eval $(call SetupZipArchive,BUILD_SEC_WINDOWS_BIN_ZIP, \
SRC := $(JDK_OUTPUTDIR), \
@@ -80,7 +80,7 @@
TARGETS += $(IMAGES_OUTPUTDIR)/sec-windows-bin.zip
# JGSS files contain the native Kerberos library
- ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ ifeq ($(call isTargetCpu, x86_64), true)
JGSS_ZIP_NAME = jgss-windows-x64-bin.zip
else
JGSS_ZIP_NAME = jgss-windows-i586-bin.zip
--- a/make/autoconf/basics.m4 Tue Feb 12 11:58:41 2019 -0500
+++ b/make/autoconf/basics.m4 Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -406,6 +406,8 @@
[
# Save the original command line. This is passed to us by the wrapper configure script.
AC_SUBST(CONFIGURE_COMMAND_LINE)
+ # AUTOCONF might be set in the environment by the user. Preserve for "make reconfigure".
+ AC_SUBST(AUTOCONF)
# Save the path variable before it gets changed
ORIGINAL_PATH="$PATH"
AC_SUBST(ORIGINAL_PATH)
--- a/make/autoconf/spec.gmk.in Tue Feb 12 11:58:41 2019 -0500
+++ b/make/autoconf/spec.gmk.in Wed Feb 13 13:22:15 2019 -0500
@@ -36,6 +36,9 @@
# A self-referential reference to this file.
SPEC:=@SPEC@
+# Path to autoconf if overriden by the user, to be used by "make reconfigure"
+AUTOCONF := @AUTOCONF@
+
# SPACE and COMMA are defined in MakeBase.gmk, but they are also used in
# some definitions here, and are needed if MakeBase.gmk is not included before
# this file.
--- a/make/common/MakeBase.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/MakeBase.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -258,7 +258,7 @@
################################################################################
# All install-file and related macros automatically call DecodeSpace when needed.
-ifeq ($(OPENJDK_TARGET_OS),solaris)
+ifeq ($(call isTargetOs, solaris), true)
# On Solaris, if the target is a symlink and exists, cp won't overwrite.
# Cp has to operate in recursive mode to allow for -P flag, to preserve soft links. If the
# name of the target file differs from the source file, rename after copy.
@@ -284,7 +284,7 @@
$(CP) -f '$(call DecodeSpace, $<)' '$(call DecodeSpace, $@)'; \
fi
endef
-else ifeq ($(OPENJDK_TARGET_OS),macosx)
+else ifeq ($(call isTargetOs, macosx), true)
# On mac, extended attributes sometimes creep into the source files, which may later
# cause the creation of ._* files which confuses testing. Clear these with xattr if
# set. Some files get their write permissions removed after being copied to the
@@ -418,7 +418,7 @@
# unchanged.
# This is normally not needed since we use the FIXPATH prefix for command lines,
# but might be needed in certain circumstances.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
FixPath = \
$(shell $(CYGPATH) -m $1)
else
--- a/make/common/Modules.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/Modules.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -117,11 +117,11 @@
jdk.zipfs \
#
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
PLATFORM_MODULES += jdk.crypto.mscapi
endif
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
PLATFORM_MODULES += jdk.crypto.ucrypto
endif
--- a/make/common/NativeCompilation.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/NativeCompilation.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# 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
@@ -175,9 +175,9 @@
)
endef
-ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
+ifeq ($(call isBuildOsEnv, windows.cygwin), true)
UNIX_PATH_PREFIX := /cygdrive
-else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys)
+else ifeq ($(call isBuildOsEnv, windows.msys), true)
UNIX_PATH_PREFIX :=
endif
@@ -390,7 +390,6 @@
# ARFLAGS the archiver flags to be used
# OBJECT_DIR the directory where we store the object files
# OUTPUT_DIR the directory where the resulting binary is put
-# SYMBOLS_DIR the directory where the debug symbols are put, defaults to OUTPUT_DIR
# INCLUDES only pick source from these directories
# EXCLUDES do not pick source from these directories
# INCLUDE_FILES only compile exactly these files!
@@ -501,6 +500,8 @@
$$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_CFLAGS))
$$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_LDFLAGS))
+ # Make sure the dirs exist.
+ $$(call MakeDir, $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))
$$(foreach d, $$($1_SRC), $$(if $$(wildcard $$d), , \
$$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d)))
@@ -769,7 +770,7 @@
$(TOUCH) $$@
# On windows we need to create a resource file
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
ifneq ($$($1_VERSIONINFO_RESOURCE), )
$1_RES := $$($1_OBJECT_DIR)/$$($1_BASENAME).res
$1_RES_DEP := $$($1_RES).d
@@ -807,7 +808,7 @@
ifneq ($(DISABLE_MAPFILES), true)
$1_REAL_MAPFILE := $$($1_MAPFILE)
- ifneq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), false)
ifneq ($$($1_REORDER), )
$1_REAL_MAPFILE := $$($1_OBJECT_DIR)/mapfile
@@ -841,32 +842,31 @@
ifeq ($$($1_COPY_DEBUG_SYMBOLS), true)
ifneq ($$($1_DEBUG_SYMBOLS), false)
- $$(call SetIfEmpty, $1_SYMBOLS_DIR, $$($1_OUTPUT_DIR))
# Only copy debug symbols for dynamic libraries and programs.
ifneq ($$($1_TYPE), STATIC_LIBRARY)
# Generate debuginfo files.
- ifeq ($(OPENJDK_TARGET_OS), windows)
- $1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).pdb" \
- "-map:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).map"
- $1_DEBUGINFO_FILES := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).pdb \
- $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).map
+ ifeq ($(call isTargetOs, windows), true)
+ $1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb" \
+ "-map:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).map"
+ $1_DEBUGINFO_FILES := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb \
+ $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).map
- else ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), )
- $1_DEBUGINFO_FILES := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).debuginfo
+ else ifeq ($(call isTargetOs, linux solaris), true)
+ $1_DEBUGINFO_FILES := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).debuginfo
# Setup the command line creating debuginfo files, to be run after linking.
# It cannot be run separately since it updates the original target file
$1_CREATE_DEBUGINFO_CMDS := \
$$($1_OBJCOPY) --only-keep-debug $$($1_TARGET) $$($1_DEBUGINFO_FILES) $$(NEWLINE) \
- $(CD) $$($1_SYMBOLS_DIR) && \
+ $(CD) $$($1_OUTPUT_DIR) && \
$$($1_OBJCOPY) --add-gnu-debuglink=$$($1_DEBUGINFO_FILES) $$($1_TARGET)
- else ifeq ($(OPENJDK_TARGET_OS), macosx)
+ else ifeq ($(call isTargetOs, macosx), true)
$1_DEBUGINFO_FILES := \
- $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \
- $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME)
+ $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \
+ $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME)
$1_CREATE_DEBUGINFO_CMDS := \
- $(DSYMUTIL) --out $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET)
- endif # OPENJDK_TARGET_OS
+ $(DSYMUTIL) --out $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET)
+ endif
# Since the link rule creates more than one file that we want to track,
# we have to use some tricks to get make to cooperate. To properly
@@ -887,14 +887,14 @@
$1 += $$($1_DEBUGINFO_FILES)
ifeq ($$($1_ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
- $1_DEBUGINFO_ZIP := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).diz
+ $1_DEBUGINFO_ZIP := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).diz
$1 += $$($1_DEBUGINFO_ZIP)
# The dependency on TARGET is needed for debuginfo files
# to be rebuilt properly.
$$($1_DEBUGINFO_ZIP): $$($1_DEBUGINFO_FILES) $$($1_TARGET)
- $(CD) $$($1_SYMBOLS_DIR) && \
- $(ZIPEXE) -q -r $$@ $$(subst $$($1_SYMBOLS_DIR)/,, $$($1_DEBUGINFO_FILES))
+ $(CD) $$($1_OUTPUT_DIR) && \
+ $(ZIPEXE) -q -r $$@ $$(subst $$($1_OUTPUT_DIR)/,, $$($1_DEBUGINFO_FILES))
endif
endif # !STATIC_LIBRARY
@@ -930,7 +930,6 @@
$$($1_TARGET): $$($1_TARGET_DEPS)
$$(call LogInfo, Building static library $$($1_BASENAME))
- $$(call MakeDir, $$($1_OUTPUT_DIR) $$($1_SYMBOLS_DIR))
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
$$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_ALL_OBJS) \
$$($1_RES))
@@ -953,7 +952,7 @@
endif
endif
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
ifeq ($$($1_EMBED_MANIFEST), true)
$1_EXTRA_LDFLAGS += -manifest:embed
endif
@@ -1033,8 +1032,7 @@
# Keep as much as possible on one execution line for best performance
# on Windows
$$(call LogInfo, Linking $$($1_BASENAME))
- $$(call MakeDir, $$($1_OUTPUT_DIR) $$($1_SYMBOLS_DIR))
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
$$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \
$(LD_OUT_OPTION)$$($1_TARGET) $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
@@ -1052,7 +1050,7 @@
$$($1_CREATE_DEBUGINFO_CMDS)
$$($1_STRIP_CMD)
endif
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
ifneq ($$($1_MANIFEST), )
$$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1
endif
--- a/make/common/Utils.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/common/Utils.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -181,6 +181,23 @@
)
################################################################################
+# Boolean operators.
+
+# Return the word "true" if all the boolean words given as argument is "true",
+# and returns "false" otherwise. Boolean words must be "true" or "false". It is
+# an error to supply a non-boolean word. An empty string is considered "true".
+And = \
+ $(strip $(if $(filter-out true false, $1), $(error Non-boolean values: $1)) \
+ $(if $(strip $(filter-out true, $1)), false, true))
+
+# Return the word "false" if all the boolean words given as argument is "false",
+# and returns "true" otherwise. Boolean words must be "true" or "false". It is
+# an error to supply a non-boolean word. An empty string is considered "false".
+Or = \
+ $(strip $(if $(filter-out true false, $1), $(error Non-boolean values: $1)) \
+ $(if $(strip $(filter-out false, $1)), true, false))
+
+################################################################################
# Parse a multiple-keyword variable, like FOO="KEYWORD1=val1;KEYWORD2=val2;..."
# These will be converted into a series of variables like FOO_KEYWORD1=val1,
# FOO_KEYWORD2=val2, etc. Unknown keywords will cause an error.
@@ -269,6 +286,50 @@
$(if $(filter $1, $(JVM_VARIANTS)), true, false))
################################################################################
+# Check if our build or target conforms to certain restrictions. This set of
+# functions all work in similar ways, testing the property that the name
+# implies, so e.g. isTargetCpu test the CPU of the target system.
+#
+# $1 - A property, or a space separated list of properties to test for.
+#
+# Returns true if the actual property matches one of the properties in the list,
+# and false otherwise.
+#
+# Examples: $(call isTargetOs, linux solaris) will return true when executed
+# on either linux or solaris, and false otherwise.
+# $(call isBuildCpuArch, x86) will return true iff the build CPU Arch is x86.
+
+isTargetOs = \
+ $(strip $(if $(filter $(OPENJDK_TARGET_OS), $1), true, false))
+
+isTargetOsType = \
+ $(strip $(if $(filter $(OPENJDK_TARGET_OS_TYPE), $1), true, false))
+
+isTargetCpu = \
+ $(strip $(if $(filter $(OPENJDK_TARGET_CPU), $1), true, false))
+
+isTargetCpuArch = \
+ $(strip $(if $(filter $(OPENJDK_TARGET_CPU_ARCH), $1), true, false))
+
+isTargetCpuBits = \
+ $(strip $(if $(filter $(OPENJDK_TARGET_CPU_BITS), $1), true, false))
+
+isBuildOs = \
+ $(strip $(if $(filter $(OPENJDK_BUILD_OS), $1), true, false))
+
+isBuildOsType = \
+ $(strip $(if $(filter $(OPENJDK_BUILD_OS_TYPE), $1), true, false))
+
+isBuildOsEnv = \
+ $(strip $(if $(filter $(OPENJDK_BUILD_OS_ENV), $1), true, false))
+
+isBuildCpu = \
+ $(strip $(if $(filter $(OPENJDK_BUILD_CPU), $1), true, false))
+
+isBuildCpuArch = \
+ $(strip $(if $(filter $(OPENJDK_BUILD_CPU_ARCH), $1), true, false))
+
+################################################################################
# Converts a space separated list to a comma separated list.
#
# Replacing double-comma with a single comma is to workaround the issue with
--- a/make/conf/jib-profiles.js Tue Feb 12 11:58:41 2019 -0500
+++ b/make/conf/jib-profiles.js Wed Feb 13 13:22:15 2019 -0500
@@ -944,11 +944,17 @@
},
jcov: {
- server: "jpg",
- product: "jcov",
- version: "3.0",
- build_number: "b07",
- file: "bundles/jcov-3_0.zip",
+ // Until an official build of JCov is available, use custom
+ // build to support classfile version 57.
+ // See CODETOOLS-7902358 for more info.
+ // server: "jpg",
+ // product: "jcov",
+ // version: "3.0",
+ // build_number: "b07",
+ // file: "bundles/jcov-3_0.zip",
+ organization: common.organization,
+ revision: "3.0-57-support+1.0",
+ ext: "zip",
environment_name: "JCOV_HOME",
},
--- a/make/copy/Copy-java.base.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/copy/Copy-java.base.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
TZMAPPINGS_SRC := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/conf
@@ -44,7 +44,7 @@
################################################################################
# Copy the microsoft runtime libraries on windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# Chmod to avoid permission issues if bundles are unpacked on unix platforms.
define copy-and-chmod
@@ -81,7 +81,7 @@
################################################################################
# In jvm.cfg, the first listed KNOWN variant is the default. On most build
# configurations, that is the server variant.
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), windows-x86)
+ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86)), true)
DEFAULT_CFG_VARIANT ?= client
endif
DEFAULT_CFG_VARIANT ?= server
@@ -143,7 +143,7 @@
DEF_POLICY_SRC_LIST := $(DEF_POLICY_SRC)
DEF_POLICY_SRC_LIST += $(CUSTOM_POLICY_SRC_LIST)
-ifneq ($(filter $(OPENJDK_TARGET_OS), windows solaris), )
+ifeq ($(call isTargetOs, windows solaris), true)
DEF_POLICY_SRC_LIST += $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/lib/security/default.policy
endif
@@ -183,7 +183,7 @@
TARGETS += $(COPY_NET_PROPERTIES)
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
$(eval $(call SetupCopyFiles, COPY_SDP_CONF, \
FILES := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template, \
DEST := $(CONF_DST_DIR)/sdp, \
--- a/make/copy/Copy-jdk.crypto.cryptoki.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/copy/Copy-jdk.crypto.cryptoki.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
SUNPKCS11_CFG_SRC := \
$(TOPDIR)/src/jdk.crypto.cryptoki/solaris/conf/security/sunpkcs11-solaris.cfg
--- a/make/copy/Copy-jdk.crypto.ucrypto.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/copy/Copy-jdk.crypto.ucrypto.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
UCRYPTO_CFG_SRC := $(TOPDIR)/src/jdk.crypto.ucrypto/solaris/conf/security/ucrypto-solaris.cfg
UCRYPTO_CFG_DST := $(CONF_DST_DIR)/security/ucrypto-solaris.cfg
--- a/make/data/symbols/README Tue Feb 12 11:58:41 2019 -0500
+++ b/make/data/symbols/README Wed Feb 13 13:22:15 2019 -0500
@@ -1,3 +1,3 @@
This directory contains history data for -release.
-Please see $LANGTOOLS_DIR/make/src/classes/build/tools/symbolgenerator/CreateSymbols.java for main usage.
+Please see $JDK_TOP_DIR/make/scripts/generate-symbol-data.sh for main usage.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.base-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,636 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name java.base
+header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/acl,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider target linux-amd64 flags 8000
+
+class name java/io/FileInputStream
+-method name finalize descriptor ()V
+
+class name java/io/FileOutputStream
+-method name finalize descriptor ()V
+
+class name java/io/InputStream
+method name skipNBytes descriptor (J)V thrownTypes java/io/IOException flags 1
+
+class name java/lang/Character$UnicodeBlock
+field name GEORGIAN_EXTENDED descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name HANIFI_ROHINGYA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name OLD_SOGDIAN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SOGDIAN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name DOGRA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name GUNJALA_GONDI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MAKASAR descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MEDEFAIDRIN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MAYAN_NUMERALS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name INDIC_SIYAQ_NUMBERS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name CHESS_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+
+class name java/lang/Character$UnicodeScript
+field name HANIFI_ROHINGYA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name OLD_SOGDIAN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name SOGDIAN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name DOGRA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name GUNJALA_GONDI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name MAKASAR descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name MEDEFAIDRIN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+
+class name java/lang/Class
+header extends java/lang/Object implements java/io/Serializable,java/lang/reflect/GenericDeclaration,java/lang/reflect/Type,java/lang/reflect/AnnotatedElement,java/lang/invoke/TypeDescriptor$OfField,java/lang/constant/Constable flags 31 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/invoke/TypeDescriptor$OfField<Ljava/lang/Class<*>;>;Ljava/lang/constant/Constable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name componentType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name arrayType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/ClassDesc;>;
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/ClassNotFoundException
+header extends java/lang/ReflectiveOperationException flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/lang/Double
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Double;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Double;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Double; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Enum
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/Comparable,java/io/Serializable nestMembers java/lang/Enum$EnumDesc flags 421 signature <E:Ljava/lang/Enum<TE;>;>Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/Comparable<TE;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 11 signature ()Ljava/util/Optional<Ljava/lang/Enum$EnumDesc<TE;>;>;
+
+class name java/lang/Enum$EnumDesc
+header extends java/lang/constant/DynamicConstantDesc nestHost java/lang/Enum flags 31 signature <E:Ljava/lang/Enum<TE;>;>Ljava/lang/constant/DynamicConstantDesc<TE;>;
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name of descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc; flags 9 signature <E:Ljava/lang/Enum<TE;>;>(Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc<TE;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Enum; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)TE;
+method name toString descriptor ()Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/ExceptionInInitializerError
+header extends java/lang/LinkageError flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/lang/Float
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Float;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Float;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Float; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Integer
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Integer;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Integer;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Integer; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Long
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Long;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Long;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Long; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/String
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable,java/lang/CharSequence,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/String;>;Ljava/lang/CharSequence;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+method name indent descriptor (I)Ljava/lang/String; flags 1
+method name transform descriptor (Ljava/util/function/Function;)Ljava/lang/Object; flags 1 signature <R:Ljava/lang/Object;>(Ljava/util/function/Function<-Ljava/lang/String;+TR;>;)TR;
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/String;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/System
+header extends java/lang/Object nestMembers java/lang/System$LoggerFinder,java/lang/System$Logger,java/lang/System$Logger$Level flags 31
+innerclass innerClass java/lang/System$LoggerFinder outerClass java/lang/System innerClassName LoggerFinder flags 409
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/constant/ClassDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField<Ljava/lang/constant/ClassDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name of descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name of descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name ofDescriptor descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name arrayType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name arrayType descriptor (I)Ljava/lang/constant/ClassDesc; flags 1
+method name nested descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 1
+method name nested descriptor (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 81
+method name isArray descriptor ()Z flags 1
+method name isPrimitive descriptor ()Z flags 1
+method name isClassOrInterface descriptor ()Z flags 1
+method name componentType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name packageName descriptor ()Ljava/lang/String; flags 1
+method name displayName descriptor ()Ljava/lang/String; flags 1
+method name descriptorString descriptor ()Ljava/lang/String; flags 401
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/constant/Constable
+header extends java/lang/Object flags 601
+method name describeConstable descriptor ()Ljava/util/Optional; flags 401 signature ()Ljava/util/Optional<+Ljava/lang/constant/ConstantDesc;>;
+
+class name java/lang/constant/ConstantDesc
+header extends java/lang/Object flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 401
+
+class name java/lang/constant/ConstantDescs
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+field name DEFAULT_NAME descriptor Ljava/lang/String; constantValue _ flags 19
+field name CD_Object descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_String descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Class descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Number descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Integer descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Long descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Float descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Double descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Short descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Byte descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Character descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Boolean descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Void descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Throwable descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Exception descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Enum descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_VarHandle descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandles descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandles_Lookup descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandle descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodType descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_CallSite descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Collection descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_List descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Set descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Map descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ConstantDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ClassDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_EnumDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodTypeDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DirectMethodHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_VarHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandleDesc_Kind descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DynamicConstantDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DynamicCallSiteDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ConstantBootstraps descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name BSM_PRIMITIVE_CLASS descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_ENUM_CONSTANT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_NULL_CONSTANT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_FIELD descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_STATIC_FIELD descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_ARRAY descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_INVOKE descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name CD_int descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_long descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_float descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_double descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_short descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_byte descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_char descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_boolean descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_void descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name NULL descriptor Ljava/lang/constant/ConstantDesc; flags 19
+method name ofCallsiteBootstrap descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+method name ofConstantBootstrap descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+
+class name java/lang/constant/DirectMethodHandleDesc
+header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind flags 601
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name kind descriptor ()Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 401
+method name refKind descriptor ()I flags 401
+method name isOwnerInterface descriptor ()Z flags 401
+method name owner descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name methodName descriptor ()Ljava/lang/String; flags 401
+method name lookupDescriptor descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/constant/DirectMethodHandleDesc$Kind
+header extends java/lang/Enum nestHost java/lang/constant/DirectMethodHandleDesc flags 4031 signature Ljava/lang/Enum<Ljava/lang/constant/DirectMethodHandleDesc$Kind;>;
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+field name STATIC descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_STATIC descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name VIRTUAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_VIRTUAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name SPECIAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_SPECIAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name CONSTRUCTOR descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name GETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name SETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name STATIC_GETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name STATIC_SETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name refKind descriptor I flags 11
+field name isInterface descriptor Z flags 11
+method name values descriptor ()[Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (I)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (IZ)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+
+class name java/lang/constant/DynamicCallSiteDesc
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 89
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 9
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 9
+method name withArgs descriptor ([Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 81
+method name withNameAndType descriptor (Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 1
+method name invocationName descriptor ()Ljava/lang/String; flags 1
+method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 1
+method name bootstrapMethod descriptor ()Ljava/lang/constant/MethodHandleDesc; flags 1
+method name bootstrapArgs descriptor ()[Ljava/lang/constant/ConstantDesc; flags 1
+method name resolveCallSiteDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/CallSite; thrownTypes java/lang/Throwable flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 11
+method name hashCode descriptor ()I flags 11
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/lang/constant/DynamicConstantDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 421 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+method name <init> descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)V flags 84
+method name ofCanonical descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/ConstantDesc; flags 9 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/ConstantDesc;
+method name ofNamed descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 89 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 89 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 9 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name constantName descriptor ()Ljava/lang/String; flags 1
+method name constantType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name bootstrapMethod descriptor ()Ljava/lang/constant/DirectMethodHandleDesc; flags 1
+method name bootstrapArgs descriptor ()[Ljava/lang/constant/ConstantDesc; flags 1
+method name bootstrapArgsList descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/constant/ConstantDesc;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)TT;
+method name equals descriptor (Ljava/lang/Object;)Z flags 11
+method name hashCode descriptor ()I flags 11
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/lang/constant/MethodHandleDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 601
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofMethod descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofField descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofConstructor descriptor (Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+method name asType descriptor (Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/MethodHandleDesc; flags 1
+method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 401
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+
+class name java/lang/constant/MethodTypeDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/constant/ClassDesc;Ljava/lang/constant/MethodTypeDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name ofDescriptor descriptor (Ljava/lang/String;)Ljava/lang/constant/MethodTypeDesc; flags 9
+method name of descriptor (Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 89
+method name returnType descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name parameterCount descriptor ()I flags 401
+method name parameterType descriptor (I)Ljava/lang/constant/ClassDesc; flags 401
+method name parameterList descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<Ljava/lang/constant/ClassDesc;>;
+method name parameterArray descriptor ()[Ljava/lang/constant/ClassDesc; flags 401
+method name changeReturnType descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name changeParameterType descriptor (ILjava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name dropParameterTypes descriptor (II)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name insertParameterTypes descriptor (I[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 481
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name displayDescriptor descriptor ()Ljava/lang/String; flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/invoke/MethodHandle
+header extends java/lang/Object implements java/lang/constant/Constable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/MethodHandleDesc;>;
+
+class name java/lang/invoke/MethodHandleProxies
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/MethodType
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/invoke/TypeDescriptor$OfMethod,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/Class<*>;Ljava/lang/invoke/MethodType;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/MethodTypeDesc;>;
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/invoke/TypeDescriptor
+header extends java/lang/Object nestMembers java/lang/invoke/TypeDescriptor$OfMethod,java/lang/invoke/TypeDescriptor$OfField flags 601
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name descriptorString descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/invoke/TypeDescriptor$OfField
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name isArray descriptor ()Z flags 401
+method name isPrimitive descriptor ()Z flags 401
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+
+class name java/lang/invoke/TypeDescriptor$OfMethod
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;M::Ljava/lang/invoke/TypeDescriptor$OfMethod<TF;TM;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+method name parameterCount descriptor ()I flags 401
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature (I)TF;
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()[TF;
+method name parameterList descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<TF;>;
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (TF;)TM;
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (ITF;)TM;
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (II)TM;
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 481 signature (I[TF;)TM;
+
+class name java/lang/invoke/VarHandle
+header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode flags 421
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019
+method name toString descriptor ()Ljava/lang/String; flags 11
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/invoke/VarHandle$VarHandleDesc;>;
+
+class name java/lang/invoke/VarHandle$VarHandleDesc
+header extends java/lang/constant/DynamicConstantDesc nestHost java/lang/invoke/VarHandle flags 31 signature Ljava/lang/constant/DynamicConstantDesc<Ljava/lang/invoke/VarHandle;>;
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name ofField descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name ofStaticField descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name ofArray descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name varType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/VarHandle; thrownTypes java/lang/ReflectiveOperationException flags 1
+method name toString descriptor ()Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/module/ModuleDescriptor
+header extends java/lang/Object implements java/lang/Comparable nestMembers java/lang/module/ModuleDescriptor$Builder,java/lang/module/ModuleDescriptor$Version,java/lang/module/ModuleDescriptor$Provides,java/lang/module/ModuleDescriptor$Opens,java/lang/module/ModuleDescriptor$Opens$Modifier,java/lang/module/ModuleDescriptor$Exports,java/lang/module/ModuleDescriptor$Exports$Modifier,java/lang/module/ModuleDescriptor$Requires,java/lang/module/ModuleDescriptor$Requires$Modifier,java/lang/module/ModuleDescriptor$Modifier flags 21 signature Ljava/lang/Object;Ljava/lang/Comparable<Ljava/lang/module/ModuleDescriptor;>;
+innerclass innerClass java/lang/module/ModuleDescriptor$Builder outerClass java/lang/module/ModuleDescriptor innerClassName Builder flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Provides outerClass java/lang/module/ModuleDescriptor innerClassName Provides flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens outerClass java/lang/module/ModuleDescriptor innerClassName Opens flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports outerClass java/lang/module/ModuleDescriptor innerClassName Exports flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires outerClass java/lang/module/ModuleDescriptor innerClassName Requires flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Modifier outerClass java/lang/module/ModuleDescriptor innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens$Modifier outerClass java/lang/module/ModuleDescriptor$Opens innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports$Modifier outerClass java/lang/module/ModuleDescriptor$Exports innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerClass java/lang/module/ModuleDescriptor$Requires innerClassName Modifier flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/Executable
+header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/UndeclaredThrowableException
+header extends java/lang/RuntimeException flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/net/SecureCacheResponse
+method name getSSLSession descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljavax/net/ssl/SSLSession;>;
+
+class name java/net/ServerSocket
+method name <init> descriptor (Ljava/net/SocketImpl;)V flags 4
+
+class name java/nio/file/Files
+method name mismatch descriptor (Ljava/nio/file/Path;Ljava/nio/file/Path;)J thrownTypes java/io/IOException flags 9
+
+class name java/security/AccessController
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object; flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;Ljava/security/AccessControlContext;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;Ljava/security/AccessControlContext;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+
+class name java/security/Key
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 6603384152749567654 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/PrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 6034044314589513430 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/PrivilegedActionException
+header extends java/lang/Exception flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/security/Provider
+-method name getService descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+-method name putService descriptor (Ljava/security/Provider$Service;)V
+-method name removeService descriptor (Ljava/security/Provider$Service;)V
+method name getService descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; flags 1
+method name putService descriptor (Ljava/security/Provider$Service;)V flags 4
+method name removeService descriptor (Ljava/security/Provider$Service;)V flags 4
+
+class name java/security/PublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 7187392471159151072 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/DSAPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 7776497482533790279 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/DSAPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 1234526332779022332 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/ECPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -7896394956925609184 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/ECPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -3314988629879632826 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAMultiPrimePrivateCrtKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 618058533534628008 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPrivateCrtKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -5682214253527700368 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 5187144804936595022 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -8727434096241101194 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/spec/PSSParameterSpec
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/text/CompactNumberFormat
+header extends java/text/NumberFormat flags 31
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+method name <init> descriptor (Ljava/lang/String;Ljava/text/DecimalFormatSymbols;[Ljava/lang/String;)V flags 1
+method name format descriptor (Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 11
+method name format descriptor (DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 1
+method name format descriptor (JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 1
+method name formatToCharacterIterator descriptor (Ljava/lang/Object;)Ljava/text/AttributedCharacterIterator; flags 1
+method name parse descriptor (Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number; flags 1
+method name setMaximumIntegerDigits descriptor (I)V flags 1
+method name setMinimumIntegerDigits descriptor (I)V flags 1
+method name setMinimumFractionDigits descriptor (I)V flags 1
+method name setMaximumFractionDigits descriptor (I)V flags 1
+method name getRoundingMode descriptor ()Ljava/math/RoundingMode; flags 1
+method name setRoundingMode descriptor (Ljava/math/RoundingMode;)V flags 1
+method name getGroupingSize descriptor ()I flags 1
+method name setGroupingSize descriptor (I)V flags 1
+method name isGroupingUsed descriptor ()Z flags 1
+method name setGroupingUsed descriptor (Z)V flags 1
+method name isParseIntegerOnly descriptor ()Z flags 1
+method name setParseIntegerOnly descriptor (Z)V flags 1
+method name isParseBigDecimal descriptor ()Z flags 1
+method name setParseBigDecimal descriptor (Z)V flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 1
+method name hashCode descriptor ()I flags 1
+method name clone descriptor ()Ljava/text/CompactNumberFormat; flags 1
+method name clone descriptor ()Ljava/lang/Object; flags 1041
+
+class name java/text/NumberFormat
+header extends java/text/Format nestMembers java/text/NumberFormat$Style,java/text/NumberFormat$Field flags 421
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+method name getCompactNumberInstance descriptor ()Ljava/text/NumberFormat; flags 9
+method name getCompactNumberInstance descriptor (Ljava/util/Locale;Ljava/text/NumberFormat$Style;)Ljava/text/NumberFormat; flags 9
+
+class name java/text/NumberFormat$Field
+field name PREFIX descriptor Ljava/text/NumberFormat$Field; flags 19
+field name SUFFIX descriptor Ljava/text/NumberFormat$Field; flags 19
+
+class name java/text/NumberFormat$Style
+header extends java/lang/Enum nestHost java/text/NumberFormat flags 4031 signature Ljava/lang/Enum<Ljava/text/NumberFormat$Style;>;
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+field name SHORT descriptor Ljava/text/NumberFormat$Style; flags 4019
+field name LONG descriptor Ljava/text/NumberFormat$Style; flags 4019
+method name values descriptor ()[Ljava/text/NumberFormat$Style; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Ljava/text/NumberFormat$Style; flags 9
+
+class name java/text/spi/NumberFormatProvider
+header extends java/util/spi/LocaleServiceProvider flags 421
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+method name getCompactNumberInstance descriptor (Ljava/util/Locale;Ljava/text/NumberFormat$Style;)Ljava/text/NumberFormat; flags 1
+
+class name java/util/concurrent/CompletableFuture
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+
+class name java/util/concurrent/CompletionStage
+header extends java/lang/Object flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage<TT;>;
+
+class name java/util/jar/JarFile
+header extends java/util/zip/ZipFile flags 21
+innerclass innerClass java/lang/Runtime$Version outerClass java/lang/Runtime innerClassName Version flags 19
+innerclass innerClass java/util/jar/Attributes$Name outerClass java/util/jar/Attributes innerClassName Name flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/Collectors
+method name teeing descriptor (Ljava/util/stream/Collector;Ljava/util/stream/Collector;Ljava/util/function/BiFunction;)Ljava/util/stream/Collector; flags 9 signature <T:Ljava/lang/Object;R1:Ljava/lang/Object;R2:Ljava/lang/Object;R:Ljava/lang/Object;>(Ljava/util/stream/Collector<-TT;*TR1;>;Ljava/util/stream/Collector<-TT;*TR2;>;Ljava/util/function/BiFunction<-TR1;-TR2;TR;>;)Ljava/util/stream/Collector<TT;*TR;>;
+
+class name java/util/zip/Deflater
+-method name finalize descriptor ()V
+
+class name java/util/zip/Inflater
+-method name finalize descriptor ()V
+
+class name java/util/zip/ZipFile
+-method name finalize descriptor ()V
+
+class name javax/crypto/Cipher
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name javax/crypto/SecretKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -4795878709595146952 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/DHPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 2211791113380396553 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/DHPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -6628103563352519193 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/PBEKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -1430015993304333921 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/net/ssl/HttpsURLConnection
+method name getSSLSession descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljavax/net/ssl/SSLSession;>;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.compiler-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,106 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/lang/model/SourceVersion
+field name RELEASE_12 descriptor Ljavax/lang/model/SourceVersion; flags 4019
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor9
+header extends javax/lang/model/util/AbstractAnnotationValueVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/AbstractElementVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractElementVisitor9
+header extends javax/lang/model/util/AbstractElementVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/AbstractTypeVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractTypeVisitor9
+header extends javax/lang/model/util/AbstractTypeVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/ElementKindVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/ElementKindVisitor9
+header extends javax/lang/model/util/ElementKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/ElementScanner7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/ElementScanner9
+header extends javax/lang/model/util/ElementScanner8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementScanner8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor9
+header extends javax/lang/model/util/SimpleAnnotationValueVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleElementVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleElementVisitor9
+header extends javax/lang/model/util/SimpleElementVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleTypeVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleTypeVisitor9
+header extends javax/lang/model/util/SimpleTypeVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/TypeKindVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/TypeKindVisitor9
+header extends javax/lang/model/util/TypeKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/TypeKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.desktop-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/swing/border/TitledBorder
+header extends javax/swing/border/AbstractBorder flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9
+innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/filechooser/FileSystemView
+method name getChooserShortcutPanelFiles descriptor ()[Ljava/io/File; flags 11
+
+class name javax/swing/text/html/StyleSheet$ListPainter
+header extends java/lang/Object implements java/io/Serializable nestHost javax/swing/text/html/StyleSheet flags 21
+innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.naming-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name java.naming
+header exports javax/naming,javax/naming/directory,javax/naming/event,javax/naming/ldap,javax/naming/spi,javax/naming/ldap/spi requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.security.sasl\u0020;flags\u0020;0 uses javax/naming/ldap/StartTlsResponse,javax/naming/spi/InitialContextFactory,javax/naming/ldap/spi/LdapDnsProvider provides interface\u0020;java/security/Provider\u0020;impls\u0020;sun/security/provider/certpath/ldap/JdkLDAP target linux-amd64 flags 8000
+
+class name javax/naming/Name
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -3617482732056931635 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/naming/directory/Attribute
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 8707690322213556804 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/naming/ldap/spi/LdapDnsProvider
+header extends java/lang/Object flags 421
+method name <init> descriptor ()V flags 4
+method name lookupEndpoints descriptor (Ljava/lang/String;Ljava/util/Map;)Ljava/util/Optional; thrownTypes javax/naming/NamingException flags 401 signature (Ljava/lang/String;Ljava/util/Map<**>;)Ljava/util/Optional<Ljavax/naming/ldap/spi/LdapDnsProviderResult;>;
+
+class name javax/naming/ldap/spi/LdapDnsProviderResult
+header extends java/lang/Object flags 31
+method name <init> descriptor (Ljava/lang/String;Ljava/util/List;)V flags 1 signature (Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;)V
+method name getDomainName descriptor ()Ljava/lang/String; flags 1
+method name getEndpoints descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/String;>;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.rmi-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/rmi/server/RemoteRef
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 3632638527362204081 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/rmi/server/ServerRef
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -4557750989390278438 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.xml-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/xml/stream/XMLInputFactory
+method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
+-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.compiler-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name com/sun/source/doctree/DocTree$Kind
+field name SYSTEM_PROPERTY descriptor Lcom/sun/source/doctree/DocTree$Kind; flags 4019
+
+class name com/sun/source/doctree/DocTreeVisitor
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/doctree/SystemPropertyTree
+header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601
+method name getPropertyName descriptor ()Ljavax/lang/model/element/Name; flags 401
+
+class name com/sun/source/tree/BreakTree
+method name getValue descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/CaseTree
+header extends java/lang/Object implements com/sun/source/tree/Tree nestMembers com/sun/source/tree/CaseTree$CaseKind flags 601
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+method name getExpressions descriptor ()Ljava/util/List; flags 401 deprecated true signature ()Ljava/util/List<+Lcom/sun/source/tree/ExpressionTree;>; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getBody descriptor ()Lcom/sun/source/tree/Tree; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getCaseKind descriptor ()Lcom/sun/source/tree/CaseTree$CaseKind; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/CaseTree$CaseKind
+header extends java/lang/Enum nestHost com/sun/source/tree/CaseTree flags 4031 deprecated true signature Ljava/lang/Enum<Lcom/sun/source/tree/CaseTree$CaseKind;>; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+field name STATEMENT descriptor Lcom/sun/source/tree/CaseTree$CaseKind; flags 4019
+field name RULE descriptor Lcom/sun/source/tree/CaseTree$CaseKind; flags 4019
+method name values descriptor ()[Lcom/sun/source/tree/CaseTree$CaseKind; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Lcom/sun/source/tree/CaseTree$CaseKind; flags 9
+
+class name com/sun/source/tree/SwitchExpressionTree
+header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getExpression descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401
+method name getCases descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/CaseTree;>;
+
+class name com/sun/source/tree/Tree$Kind
+field name SWITCH_EXPRESSION descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/TreeVisitor
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/util/DocTreeFactory
+method name newSystemPropertyTree descriptor (Ljavax/lang/model/element/Name;)Lcom/sun/source/doctree/SystemPropertyTree; flags 401
+
+class name com/sun/source/util/DocTreeScanner
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/util/SimpleDocTreeVisitor
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/util/SimpleTreeVisitor
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/util/TreeScanner
+header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor<TR;TP;>;
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jfr-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name jdk/jfr/Event
+header extends jdk/internal/event/Event flags 421 runtimeAnnotations @Ljdk/jfr/Enabled;(value=Ztrue)@Ljdk/jfr/StackTrace;(value=Ztrue)@Ljdk/jfr/Registered;(value=Ztrue)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jsobject-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name netscape/javascript/JSObject
+-method name getWindow descriptor (Ljava/applet/Applet;)Lnetscape/javascript/JSObject;
+method name getWindow descriptor (Ljava/applet/Applet;)Lnetscape/javascript/JSObject; thrownTypes netscape/javascript/JSException flags 9 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.unsupported-C.sym.txt Wed Feb 13 13:22:15 2019 -0500
@@ -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. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name sun/reflect/ReflectionFactory
+header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation;
+-method name newInstanceForSerialization descriptor (Ljava/lang/reflect/Constructor;[Ljava/security/ProtectionDomain;)Ljava/lang/Object;
+
--- a/make/data/symbols/symbols Tue Feb 12 11:58:41 2019 -0500
+++ b/make/data/symbols/symbols Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -29,9 +29,10 @@
#command used to generate this file:
#build.tools.symbolgenerator.CreateSymbols build-description-incremental symbols include.list
#
-generate platforms 7:8:9:A:B
+generate platforms 7:8:9:A:B:C
platform version 8 files java.activation-8.sym.txt:java.base-8.sym.txt:java.compiler-8.sym.txt:java.corba-8.sym.txt:java.datatransfer-8.sym.txt:java.desktop-8.sym.txt:java.instrument-8.sym.txt:java.logging-8.sym.txt:java.management-8.sym.txt:java.management.rmi-8.sym.txt:java.naming-8.sym.txt:java.prefs-8.sym.txt:java.rmi-8.sym.txt:java.scripting-8.sym.txt:java.security.jgss-8.sym.txt:java.security.sasl-8.sym.txt:java.sql-8.sym.txt:java.sql.rowset-8.sym.txt:java.transaction-8.sym.txt:java.xml-8.sym.txt:java.xml.bind-8.sym.txt:java.xml.crypto-8.sym.txt:java.xml.ws-8.sym.txt:java.xml.ws.annotation-8.sym.txt:jdk.httpserver-8.sym.txt:jdk.management-8.sym.txt:jdk.scripting.nashorn-8.sym.txt:jdk.sctp-8.sym.txt:jdk.security.auth-8.sym.txt:jdk.security.jgss-8.sym.txt
platform version 7 base 8 files java.base-7.sym.txt:java.compiler-7.sym.txt:java.datatransfer-7.sym.txt:java.desktop-7.sym.txt:java.logging-7.sym.txt:java.management-7.sym.txt:java.naming-7.sym.txt:java.prefs-7.sym.txt:java.rmi-7.sym.txt:java.scripting-7.sym.txt:java.security.jgss-7.sym.txt:java.security.sasl-7.sym.txt:java.sql-7.sym.txt:java.sql.rowset-7.sym.txt:java.xml-7.sym.txt:java.xml.bind-7.sym.txt:java.xml.ws.annotation-7.sym.txt:jdk.httpserver-7.sym.txt:jdk.management-7.sym.txt:jdk.scripting.nashorn-7.sym.txt:jdk.sctp-7.sym.txt:jdk.security.auth-7.sym.txt:jdk.security.jgss-7.sym.txt
platform version 9 base 8 files java.activation-9.sym.txt:java.base-9.sym.txt:java.compiler-9.sym.txt:java.corba-9.sym.txt:java.datatransfer-9.sym.txt:java.desktop-9.sym.txt:java.instrument-9.sym.txt:java.logging-9.sym.txt:java.management-9.sym.txt:java.management.rmi-9.sym.txt:java.naming-9.sym.txt:java.prefs-9.sym.txt:java.rmi-9.sym.txt:java.scripting-9.sym.txt:java.se-9.sym.txt:java.se.ee-9.sym.txt:java.security.jgss-9.sym.txt:java.security.sasl-9.sym.txt:java.smartcardio-9.sym.txt:java.sql-9.sym.txt:java.sql.rowset-9.sym.txt:java.transaction-9.sym.txt:java.xml-9.sym.txt:java.xml.bind-9.sym.txt:java.xml.crypto-9.sym.txt:java.xml.ws-9.sym.txt:java.xml.ws.annotation-9.sym.txt:jdk.accessibility-9.sym.txt:jdk.attach-9.sym.txt:jdk.charsets-9.sym.txt:jdk.compiler-9.sym.txt:jdk.crypto.cryptoki-9.sym.txt:jdk.crypto.ec-9.sym.txt:jdk.dynalink-9.sym.txt:jdk.editpad-9.sym.txt:jdk.hotspot.agent-9.sym.txt:jdk.httpserver-9.sym.txt:jdk.incubator.httpclient-9.sym.txt:jdk.jartool-9.sym.txt:jdk.javadoc-9.sym.txt:jdk.jcmd-9.sym.txt:jdk.jconsole-9.sym.txt:jdk.jdeps-9.sym.txt:jdk.jdi-9.sym.txt:jdk.jdwp.agent-9.sym.txt:jdk.jlink-9.sym.txt:jdk.jshell-9.sym.txt:jdk.jsobject-9.sym.txt:jdk.jstatd-9.sym.txt:jdk.localedata-9.sym.txt:jdk.management-9.sym.txt:jdk.management.agent-9.sym.txt:jdk.naming.dns-9.sym.txt:jdk.naming.rmi-9.sym.txt:jdk.net-9.sym.txt:jdk.pack-9.sym.txt:jdk.policytool-9.sym.txt:jdk.rmic-9.sym.txt:jdk.scripting.nashorn-9.sym.txt:jdk.sctp-9.sym.txt:jdk.security.auth-9.sym.txt:jdk.security.jgss-9.sym.txt:jdk.unsupported-9.sym.txt:jdk.xml.dom-9.sym.txt:jdk.zipfs-9.sym.txt
platform version A base 9 files java.activation-A.sym.txt:java.base-A.sym.txt:java.compiler-A.sym.txt:java.corba-A.sym.txt:java.datatransfer-A.sym.txt:java.desktop-A.sym.txt:java.instrument-A.sym.txt:java.logging-A.sym.txt:java.management-A.sym.txt:java.management.rmi-A.sym.txt:java.naming-A.sym.txt:java.prefs-A.sym.txt:java.rmi-A.sym.txt:java.scripting-A.sym.txt:java.se-A.sym.txt:java.se.ee-A.sym.txt:java.security.jgss-A.sym.txt:java.security.sasl-A.sym.txt:java.smartcardio-A.sym.txt:java.sql-A.sym.txt:java.sql.rowset-A.sym.txt:java.transaction-A.sym.txt:java.xml-A.sym.txt:java.xml.bind-A.sym.txt:java.xml.crypto-A.sym.txt:java.xml.ws-A.sym.txt:java.xml.ws.annotation-A.sym.txt:jdk.accessibility-A.sym.txt:jdk.attach-A.sym.txt:jdk.charsets-A.sym.txt:jdk.compiler-A.sym.txt:jdk.crypto.cryptoki-A.sym.txt:jdk.crypto.ec-A.sym.txt:jdk.dynalink-A.sym.txt:jdk.editpad-A.sym.txt:jdk.hotspot.agent-A.sym.txt:jdk.httpserver-A.sym.txt:jdk.incubator.httpclient-A.sym.txt:jdk.jartool-A.sym.txt:jdk.javadoc-A.sym.txt:jdk.jcmd-A.sym.txt:jdk.jconsole-A.sym.txt:jdk.jdeps-A.sym.txt:jdk.jdi-A.sym.txt:jdk.jdwp.agent-A.sym.txt:jdk.jlink-A.sym.txt:jdk.jshell-A.sym.txt:jdk.jsobject-A.sym.txt:jdk.jstatd-A.sym.txt:jdk.localedata-A.sym.txt:jdk.management-A.sym.txt:jdk.management.agent-A.sym.txt:jdk.naming.dns-A.sym.txt:jdk.naming.rmi-A.sym.txt:jdk.net-A.sym.txt:jdk.pack-A.sym.txt:jdk.policytool-A.sym.txt:jdk.rmic-A.sym.txt:jdk.scripting.nashorn-A.sym.txt:jdk.sctp-A.sym.txt:jdk.security.auth-A.sym.txt:jdk.security.jgss-A.sym.txt:jdk.unsupported-A.sym.txt:jdk.xml.dom-A.sym.txt:jdk.zipfs-A.sym.txt
platform version B base A files java.activation-B.sym.txt:java.base-B.sym.txt:java.compiler-B.sym.txt:java.corba-B.sym.txt:java.datatransfer-B.sym.txt:java.desktop-B.sym.txt:java.instrument-B.sym.txt:java.logging-B.sym.txt:java.management-B.sym.txt:java.management.rmi-B.sym.txt:java.naming-B.sym.txt:java.net.http-B.sym.txt:java.prefs-B.sym.txt:java.rmi-B.sym.txt:java.scripting-B.sym.txt:java.se-B.sym.txt:java.se.ee-B.sym.txt:java.security.jgss-B.sym.txt:java.security.sasl-B.sym.txt:java.smartcardio-B.sym.txt:java.sql-B.sym.txt:java.sql.rowset-B.sym.txt:java.transaction-B.sym.txt:java.transaction.xa-B.sym.txt:java.xml-B.sym.txt:java.xml.bind-B.sym.txt:java.xml.crypto-B.sym.txt:java.xml.ws-B.sym.txt:java.xml.ws.annotation-B.sym.txt:jdk.accessibility-B.sym.txt:jdk.attach-B.sym.txt:jdk.charsets-B.sym.txt:jdk.compiler-B.sym.txt:jdk.crypto.cryptoki-B.sym.txt:jdk.crypto.ec-B.sym.txt:jdk.dynalink-B.sym.txt:jdk.editpad-B.sym.txt:jdk.hotspot.agent-B.sym.txt:jdk.httpserver-B.sym.txt:jdk.incubator.httpclient-B.sym.txt:jdk.jartool-B.sym.txt:jdk.javadoc-B.sym.txt:jdk.jcmd-B.sym.txt:jdk.jconsole-B.sym.txt:jdk.jdeps-B.sym.txt:jdk.jdi-B.sym.txt:jdk.jdwp.agent-B.sym.txt:jdk.jfr-B.sym.txt:jdk.jlink-B.sym.txt:jdk.jshell-B.sym.txt:jdk.jsobject-B.sym.txt:jdk.jstatd-B.sym.txt:jdk.localedata-B.sym.txt:jdk.management-B.sym.txt:jdk.management.agent-B.sym.txt:jdk.management.jfr-B.sym.txt:jdk.naming.dns-B.sym.txt:jdk.naming.rmi-B.sym.txt:jdk.net-B.sym.txt:jdk.pack-B.sym.txt:jdk.rmic-B.sym.txt:jdk.scripting.nashorn-B.sym.txt:jdk.sctp-B.sym.txt:jdk.security.auth-B.sym.txt:jdk.security.jgss-B.sym.txt:jdk.unsupported-B.sym.txt:jdk.xml.dom-B.sym.txt:jdk.zipfs-B.sym.txt
+platform version C base B files java.base-C.sym.txt:java.compiler-C.sym.txt:java.desktop-C.sym.txt:java.naming-C.sym.txt:java.rmi-C.sym.txt:java.xml-C.sym.txt:jdk.compiler-C.sym.txt:jdk.jfr-C.sym.txt:jdk.jsobject-C.sym.txt:jdk.unsupported-C.sym.txt
--- a/make/gensrc/Gensrc-java.desktop.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/Gensrc-java.desktop.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -28,11 +28,11 @@
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, gensrc/Gensrc-java.desktop.gmk))
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
include GensrcIcons.gmk
endif
-ifneq ($(filter $(OPENJDK_TARGET_OS), linux solaris aix), )
+ifeq ($(call isTargetOs, linux solaris aix), true)
include GensrcX11Wrappers.gmk
endif
@@ -52,21 +52,21 @@
$(TOPDIR)/src/java.desktop/share/classes/sun/print/resources \
#
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
PROP_SRC_DIRS += \
$(TOPDIR)/src/java.desktop/macosx/classes/com/apple/laf/resources \
$(TOPDIR)/src/java.desktop/macosx/classes/sun/awt/resources \
#
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
PROP_SRC_DIRS += \
$(TOPDIR)/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/resources \
$(TOPDIR)/src/java.desktop/windows/classes/sun/awt/windows \
#
endif
-ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
PROP_SRC_DIRS += $(TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/resources
endif
--- a/make/gensrc/Gensrc-jdk.hotspot.agent.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/Gensrc-jdk.hotspot.agent.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
MIG_OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent
MACH_EXC_HEADER := $(MIG_OUTPUT_DIR)/mach_exc.h
MACH_EXC_USER := $(MIG_OUTPUT_DIR)/mach_excUser.c
--- a/make/gensrc/GensrcIcons.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/GensrcIcons.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -108,7 +108,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
GENSRC_OSX_ICONS_DST := $(SUPPORT_OUTPUTDIR)/headers/java.desktop
GENSRC_OSX_ICONS := $(GENSRC_OSX_ICONS_DST)/AWTIconData.h
--- a/make/gensrc/GensrcMisc.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/gensrc/GensrcMisc.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -89,7 +89,7 @@
################################################################################
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
GENSRC_UC_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/fs/UnixConstants.java
@@ -103,7 +103,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
GENSRC_SC_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/fs/SolarisConstants.java
--- a/make/hotspot/CopyToExplodedJdk.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/CopyToExplodedJdk.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -25,7 +25,7 @@
# Copy all built libraries into exploded jdk
LIB_TARGETS := $(filter $(LIB_OUTPUTDIR)/%, $(TARGETS))
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupCopyFiles, COPY_LIBS_BIN, \
SRC := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base, \
DEST := $(JDK_OUTPUTDIR)/bin, \
--- a/make/hotspot/gensrc/GensrcAdlc.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/gensrc/GensrcAdlc.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -34,16 +34,16 @@
# Flags depending on the build platform/tool chain
# NOTE: No optimization or debug flags set here
- ifeq ($(OPENJDK_BUILD_OS), linux)
+ ifeq ($(call isBuildOs, linux), true)
ADLC_CFLAGS := -fno-exceptions -DLINUX
- else ifeq ($(OPENJDK_BUILD_OS), solaris)
+ else ifeq ($(call isBuildOs, solaris), true)
ADLC_LDFLAGS := -m64
ADLC_CFLAGS := -m64
ADLC_CFLAGS_WARNINGS := +w
- else ifeq ($(OPENJDK_BUILD_OS), aix)
+ else ifeq ($(call isBuildOs, aix), true)
ADLC_LDFLAGS := -q64
ADLC_CFLAGS := -qnortti -qeh -q64 -DAIX
- else ifeq ($(OPENJDK_BUILD_OS), windows)
+ else ifeq ($(call isBuildOs, windows), true)
ADLC_LDFLAGS := -nologo
ADLC_CFLAGS := -nologo -EHsc
# NOTE: The old build also have -D_CRT_SECURE_NO_DEPRECATE but it doesn't
@@ -87,17 +87,17 @@
ADLCFLAGS += -q -T
# ADLC flags depending on target OS
- ifeq ($(OPENJDK_TARGET_OS), linux)
+ ifeq ($(call isTargetOs, linux), true)
ADLCFLAGS += -DLINUX=1 -D_GNU_SOURCE=1
- else ifeq ($(OPENJDK_TARGET_OS), solaris)
+ else ifeq ($(call isTargetOs, solaris), true)
ADLCFLAGS += -DSOLARIS=1 -DSPARC_WORKS=1
- else ifeq ($(OPENJDK_TARGET_OS), aix)
+ else ifeq ($(call isTargetOs, aix), true)
ADLCFLAGS += -DAIX=1
- else ifeq ($(OPENJDK_TARGET_OS), macosx)
+ else ifeq ($(call isTargetOs, macosx), true)
ADLCFLAGS += -D_ALLBSD_SOURCE=1 -D_GNU_SOURCE=1
endif
- ifneq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), false)
# NOTE: Windows adlc flags was different in the old build. Is this really
# correct?
@@ -109,7 +109,7 @@
# This generates checks in the generated C++ files that _LP64 is correctly
# (un)defined when compiling them.
- ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ ifeq ($(call isTargetCpuBits, 64), true)
ADLCFLAGS += -D_LP64=1
else
ADLCFLAGS += -U_LP64
--- a/make/hotspot/gensrc/GensrcDtrace.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/gensrc/GensrcDtrace.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -28,12 +28,12 @@
ifeq ($(call check-jvm-feature, dtrace), true)
- ifeq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), true)
DTRACE_FLAGS := -64
DTRACE_CPP_FLAGS := -D_LP64
- else ifeq ($(OPENJDK_TARGET_OS), macosx)
+ else ifeq ($(call isTargetOs, macosx), true)
DTRACE_CPP_FLAGS := -D_LP64 -x c
- else ifeq ($(OPENJDK_TARGET_OS), linux)
+ else ifeq ($(call isTargetOs, linux), true)
DTRACE_CPP_FLAGS := -x c
endif
@@ -54,7 +54,7 @@
TARGETS += $(patsubst $(DTRACE_SOURCE_DIR)/%.d, \
$(DTRACE_GENSRC_DIR)/%.h, $(wildcard $(DTRACE_SOURCE_DIR)/*.d))
- ifeq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), true)
############################################################################
# First we need to generate the dtraceGenOffsets tool. When run, this will
# produce two header files and a C++ file. Note that generateJvmOffsets.cpp
--- a/make/hotspot/ide/CreateVSProject.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/ide/CreateVSProject.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
include JavaCompilation.gmk
include SetupJavaCompilers.gmk
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# The next part is a bit hacky. We include the CompileJvm.gmk to be
# able to extact flags, but we do not wish to execute the rules.
@@ -46,12 +46,12 @@
# Helper macro to convert a unix path to a Windows path, suitable for
# inclusion in a command line.
- ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
+ ifeq ($(call isBuildOsEnv, windows.cygwin), true)
FixPath = \
$(strip $(subst \,\\,$(shell $(CYGPATH) -w $1)))
FixLinuxExecutable = \
$(call FixPath, $1)
- else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.wsl)
+ else ifeq ($(call isBuildOsEnv, windows.wsl), true)
FixPath = \
$(strip $(subst \,\\,$(shell $(WSLPATH) -w $1)))
FixLinuxExecutable = \
--- a/make/hotspot/lib/CompileDtraceLibraries.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/CompileDtraceLibraries.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,7 @@
#
ifeq ($(call check-jvm-feature, dtrace), true)
- ifeq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), true)
JNI_INCLUDE_FLAGS := \
-I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
-I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
--- a/make/hotspot/lib/CompileGtest.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/CompileGtest.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
# On Windows, there are no internal debug symbols so must set copying to true
# to get any at all.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
GTEST_COPY_DEBUG_SYMBOLS := true
else
GTEST_COPY_DEBUG_SYMBOLS := false
@@ -39,7 +39,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
GTEST_JVM_MAPFILE := $(JVM_MAPFILE)
else
GTEST_JVM_MAPFILE := $(JVM_OUTPUTDIR)/gtest/mapfile
--- a/make/hotspot/lib/CompileJvm.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/CompileJvm.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -56,9 +56,9 @@
JVM_EXCLUDES += adlc
# Needed by vm_version.cpp
-ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ifeq ($(call isTargetCpu, x86_64), true)
OPENJDK_TARGET_CPU_VM_VERSION := amd64
-else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+else ifeq ($(call isTargetCpu, sparcv9), true)
OPENJDK_TARGET_CPU_VM_VERSION := sparc
else
OPENJDK_TARGET_CPU_VM_VERSION := $(OPENJDK_TARGET_CPU)
@@ -107,10 +107,10 @@
# ARM source selection
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-arm)
+ifeq ($(call And, $(call isTargetOs, linux) $(call isTargetCpu, arm)), true)
JVM_EXCLUDE_PATTERNS += arm_64
-else ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-aarch64)
+else ifeq ($(call And, $(call isTargetOs, linux) $(call isTargetCpu, aarch64)), true)
# For 64-bit arm builds, we use the 64 bit hotspot/src/cpu/arm
# hotspot sources if HOTSPOT_TARGET_CPU_ARCH is set to arm.
# Exclude the aarch64 and 32 bit arm files for this build.
@@ -119,21 +119,21 @@
endif
endif
-ifneq ($(filter $(OPENJDK_TARGET_OS), linux macosx windows), )
+ifeq ($(call isTargetOs, linux macosx windows), true)
JVM_PRECOMPILED_HEADER := $(TOPDIR)/src/hotspot/share/precompiled/precompiled.hpp
endif
-ifeq ($(OPENJDK_TARGET_CPU), x86)
+ifeq ($(call isTargetCpu, x86), true)
JVM_EXCLUDE_PATTERNS += x86_64
-else ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+else ifeq ($(call isTargetCpu, x86_64), true)
JVM_EXCLUDE_PATTERNS += x86_32
endif
# Inline assembly for solaris
-ifeq ($(OPENJDK_TARGET_OS), solaris)
- ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ifeq ($(call isTargetOs, solaris), true)
+ ifeq ($(call isTargetCpu, x86_64), true)
JVM_CFLAGS += $(TOPDIR)/src/hotspot/os_cpu/solaris_x86/solaris_x86_64.il
- else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+ else ifeq ($(call isTargetCpu, sparcv9), true)
JVM_CFLAGS += $(TOPDIR)/src/hotspot/os_cpu/solaris_sparc/solaris_sparc.il
endif
# Exclude warnings in devstudio 12.6
@@ -143,7 +143,7 @@
endif
endif
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), false)
# NOTE: In the old build, we weirdly enough set -g/-g0 always, regardless
# of if debug symbols were needed. Without it, compilation fails on
@@ -152,8 +152,8 @@
endif
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
- ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ifeq ($(call isTargetOs, windows), true)
+ ifeq ($(call isTargetCpuBits, 64), true)
RC_DESC := 64-Bit$(SPACE)
endif
JVM_RCFLAGS += -D"HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(RC_DESC)$(JVM_VARIANT) VM"
@@ -209,7 +209,7 @@
$(BUILD_LIBJVM_TARGET_DEPS))
ifneq ($(GENERATE_COMPILE_COMMANDS_ONLY), true)
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
# It doesn't matter which jvm.lib file gets exported, but we need
# to pick just one.
ifeq ($(JVM_VARIANT), $(JVM_VARIANT_MAIN))
--- a/make/hotspot/lib/JvmDtraceObjects.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmDtraceObjects.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,7 @@
#
ifeq ($(call check-jvm-feature, dtrace), true)
- ifeq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), true)
############################################################################
# Integrate with libjvm. Here we generate two object files which are
@@ -131,7 +131,7 @@
> $(DTRACE_SUPPORT_DIR)/$(@F).d))
$(call ExecuteWithLog, $@, $(DTRACE) $(DTRACE_FLAGS) -o $@ \
-s $(DTRACE_SUPPORT_DIR)/$(@F).d)
- ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+ ifeq ($(call isTargetCpuArch, sparc), true)
$(call ExecuteWithLog, $@.elfedit, $(ELFEDIT) $(call GetElfeditCommands) $@)
endif
--- a/make/hotspot/lib/JvmFeatures.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmFeatures.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -47,14 +47,14 @@
ifeq ($(call check-jvm-feature, zero), true)
JVM_CFLAGS_FEATURES += -DZERO -DCC_INTERP -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS)
JVM_LIBS_FEATURES += $(LIBFFI_LIBS)
- ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+ ifeq ($(call isTargetCpu, sparcv9), true)
BUILD_LIBJVM_EXTRA_FILES := $(TOPDIR)/src/hotspot/cpu/sparc/memset_with_concurrent_readers_sparc.cpp
endif
endif
ifeq ($(call check-jvm-feature, minimal), true)
JVM_CFLAGS_FEATURES += -DMINIMAL_JVM -DVMTYPE=\"Minimal\"
- ifeq ($(OPENJDK_TARGET_OS), linux)
+ ifeq ($(call isTargetOs, linux), true)
# Override the default -g with a more liberal strip policy for the minimal JVM
JVM_STRIPFLAGS := --strip-unneeded
endif
--- a/make/hotspot/lib/JvmFlags.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmFlags.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -74,7 +74,7 @@
endif
else ifeq ($(DEBUG_LEVEL), fastdebug)
JVM_CFLAGS_DEBUGLEVEL := -DASSERT
- ifeq ($(filter $(OPENJDK_TARGET_OS), windows aix), )
+ ifeq ($(call isTargetOs, windows aix), false)
# NOTE: Old build did not define CHECK_UNHANDLED_OOPS on Windows and AIX.
JVM_CFLAGS_DEBUGLEVEL += -DCHECK_UNHANDLED_OOPS
endif
--- a/make/hotspot/lib/JvmMapfile.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmMapfile.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -28,13 +28,13 @@
################################################################################
# Combine a list of static symbols
-ifneq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), windows-x86_64)
+ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86_64)), false)
# On Windows x86_64, we should not have any symbols at all, since that
# results in duplicate warnings from the linker (JDK-8043491).
SYMBOLS_SRC += $(TOPDIR)/make/hotspot/symbols/symbols-shared
endif
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
SYMBOLS_SRC += $(TOPDIR)/make/hotspot/symbols/symbols-unix
endif
@@ -48,7 +48,7 @@
endif
endif
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
ifeq ($(call check-jvm-feature, dtrace), true)
# Additional mapfiles that are only used when dtrace is enabled
ifeq ($(call check-jvm-feature, compiler2), true)
@@ -64,7 +64,7 @@
# Create a dynamic list of symbols from the built object files. This is highly
# platform dependent.
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
DUMP_SYMBOLS_CMD := $(NM) --defined-only *.o
ifneq ($(FILTER_SYMBOLS_PATTERN), )
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
@@ -76,7 +76,7 @@
if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
}'
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
DUMP_SYMBOLS_CMD := $(NM) -p *.o
ifneq ($(FILTER_SYMBOLS_PATTERN), )
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
@@ -90,7 +90,7 @@
if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
}'
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
# nm on macosx prints out "warning: nm: no name list" to stderr for
# files without symbols. Hide this, even at the expense of hiding real errors.
DUMP_SYMBOLS_CMD := $(NM) -Uj *.o 2> /dev/null
@@ -107,7 +107,7 @@
# The script below might be what was intended, but it failes to link with tons
# of 'cannot export hidden symbol vtable for X'.
# '{ if ($$1 ~ /^__ZTV/ || $$1 ~ /^_gHotSpotVM/) print substr($$1, 2) }'
-else ifeq ($(OPENJDK_TARGET_OS), aix)
+else ifeq ($(call isTargetOs, aix), true)
# NOTE: The old build had the solution below. This should to be fixed in
# configure instead.
@@ -123,7 +123,7 @@
if ($$3 ~ /^SharedArchivePath__9Arguments$$/) print $$3; \
}'
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
DUMP_SYMBOLS_CMD := $(DUMPBIN) -symbols *.obj
FILTER_SYMBOLS_AWK_SCRIPT := \
'{ \
@@ -153,12 +153,12 @@
################################################################################
# Finally convert the symbol list into a platform-specific mapfile
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
# On macosx, we need to add a leading underscore
define create-mapfile-work
$(AWK) '{ if ($$0 ~ ".") { print " _" $$0 } }' < $^ > $@.tmp
endef
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
# On windows, add an 'EXPORTS' header
define create-mapfile-work
$(ECHO) "EXPORTS" > $@.tmp
--- a/make/hotspot/lib/JvmOverrideFiles.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/lib/JvmOverrideFiles.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -51,7 +51,7 @@
LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NORM)
endif
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
BUILD_LIBJVM_ostream.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64
BUILD_LIBJVM_logFileOutput.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64
@@ -65,7 +65,7 @@
#
endif
- ifeq ($(OPENJDK_TARGET_CPU), x86)
+ ifeq ($(call isTargetCpu, x86), true)
# Performance measurements show that by compiling GC related code, we could
# significantly reduce the GC pause time on 32 bit Linux/Unix platforms by
# compiling without the PIC flag (-fPIC on linux).
@@ -83,7 +83,7 @@
$(foreach s, $(NONPIC_SRC), $(eval BUILD_LIBJVM_$(notdir $s)_CXXFLAGS := -fno-PIC))
endif
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
ifneq ($(DEBUG_LEVEL), slowdebug)
# dev studio 12.6 workaround
BUILD_LIBJVM_arguments.cpp_OPTIMIZATION := LOW
@@ -97,7 +97,7 @@
BUILD_LIBJVM_jni.cpp_CXXFLAGS := -Qoption ube -O~yz
BUILD_LIBJVM_stubGenerator_$(HOTSPOT_TARGET_CPU).cpp_CXXFLAGS := -xspace
- ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ ifeq ($(call isTargetCpu, x86_64), true)
# Temporary until SS10 C++ compiler is fixed
BUILD_LIBJVM_generateOptoStub.cpp_CXXFLAGS := -xO2
# Temporary util SS12u1 C++ compiler is fixed
@@ -118,7 +118,7 @@
BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS := +d
BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS := +d
- ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86)
+ ifeq ($(call isTargetCpuArch, x86), true)
# ube explodes on x86
BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS += -xO1
BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS += -xO1
@@ -129,7 +129,7 @@
# Workaround for jvmciCompilerToVM.cpp long compilation time
BUILD_LIBJVM_jvmciCompilerToVMInit.cpp_OPTIMIZATION := NONE
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
# The copied fdlibm routines in these files must not be optimized
BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG)
BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG)
@@ -160,7 +160,7 @@
#
endif
-else ifeq ($(OPENJDK_TARGET_OS), aix)
+else ifeq ($(call isTargetOs, aix), true)
BUILD_LIBJVM_synchronizer.cpp_CXXFLAGS := -qnoinline
BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE)
# Disable aggressive optimizations for functions in sharedRuntimeTrig.cpp
@@ -185,7 +185,7 @@
# Disable ELF decoder on AIX (AIX uses XCOFF).
JVM_EXCLUDE_PATTERNS += elf
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
JVM_PRECOMPILED_HEADER_EXCLUDE := \
bytecodeInterpreter.cpp \
bytecodeInterpreterWithChecks.cpp \
--- a/make/hotspot/test/GtestImage.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/hotspot/test/GtestImage.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -37,7 +37,7 @@
$(eval TARGETS += $$(COPY_GTEST_$v)) \
)
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(foreach v, $(JVM_VARIANTS), \
$(eval $(call SetupCopyFiles, COPY_GTEST_MSVCR_$v, \
DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
@@ -54,7 +54,7 @@
)
endif
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
$(foreach v, $(JVM_VARIANTS), \
$(eval $(call SetupCopyFiles, COPY_GTEST_STLPORT_$v, \
DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
--- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java Tue Feb 12 11:58:41 2019 -0500
+++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java Wed Feb 13 13:22:15 2019 -0500
@@ -1786,9 +1786,13 @@
if (existing.equals(headerDesc)) {
headerDesc = existing;
existed = true;
- } else {
- //check if the only difference between the 7 and 8 version is the Profile annotation
- //if so, copy it to the pre-8 version, so save space
+ }
+ }
+
+ if (!existed) {
+ //check if the only difference between the 7 and 8 version is the Profile annotation
+ //if so, copy it to the pre-8 version, so save space
+ for (ClassHeaderDescription existing : clazzDesc.header) {
List<AnnotationDescription> annots = existing.classAnnotations;
if (annots != null) {
@@ -2610,6 +2614,40 @@
req.requires_flags,
ver);
}
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 53 * hash + Objects.hashCode(this.moduleName);
+ hash = 53 * hash + this.flags;
+ hash = 53 * hash + Objects.hashCode(this.version);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final RequiresDescription other = (RequiresDescription) obj;
+ if (this.flags != other.flags) {
+ return false;
+ }
+ if (!Objects.equals(this.moduleName, other.moduleName)) {
+ return false;
+ }
+ if (!Objects.equals(this.version, other.version)) {
+ return false;
+ }
+ return true;
+ }
+
}
static class ProvidesDescription {
@@ -2645,6 +2683,35 @@
.collect(Collectors.toList());
return new ProvidesDescription(api, impls);
}
+
+ @Override
+ public int hashCode() {
+ int hash = 5;
+ hash = 53 * hash + Objects.hashCode(this.interfaceName);
+ hash = 53 * hash + Objects.hashCode(this.implNames);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final ProvidesDescription other = (ProvidesDescription) obj;
+ if (!Objects.equals(this.interfaceName, other.interfaceName)) {
+ return false;
+ }
+ if (!Objects.equals(this.implNames, other.implNames)) {
+ return false;
+ }
+ return true;
+ }
}
}
@@ -2806,7 +2873,7 @@
if (!Objects.equals(this.nestHost, other.nestHost)) {
return false;
}
- if (!Objects.equals(this.nestMembers, other.nestMembers)) {
+ if (!listEquals(this.nestMembers, other.nestMembers)) {
return false;
}
return true;
--- a/make/launcher/Launcher-java.base.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-java.base.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -51,7 +51,7 @@
TARGETS += $(SUPPORT_OUTPUTDIR)/modules_cmds/java.base/java$(EXE_SUFFIX)
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupBuildLauncher, javaw, \
CFLAGS := -DJAVAW -DEXPAND_CLASSPATH_WILDCARDS -DENABLE_ARG_FILES, \
EXTRA_RC_FLAGS := $(JAVA_RC_FLAGS), \
@@ -65,7 +65,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
$(eval $(call SetupJdkExecutable, BUILD_JEXEC, \
NAME := jexec, \
SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \
@@ -84,7 +84,7 @@
################################################################################
-ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix linux), )
+ifeq ($(call isTargetOs, macosx solaris aix linux), true)
$(eval $(call SetupJdkExecutable, BUILD_JSPAWNHELPER, \
NAME := jspawnhelper, \
SRC := $(TOPDIR)/src/$(MODULE)/unix/native/jspawnhelper, \
--- a/make/launcher/Launcher-java.security.jgss.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-java.security.jgss.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -25,7 +25,7 @@
include LauncherCommon.gmk
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupBuildLauncher, kinit, \
MAIN_CLASS := sun.security.krb5.internal.tools.Kinit, \
))
--- a/make/launcher/Launcher-jdk.accessibility.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-jdk.accessibility.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -28,7 +28,7 @@
################################################################################
# jabswitch
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
JABSWITCH_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/jabswitch
ACCESSBRIDGE_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/common
@@ -98,7 +98,7 @@
endef
- ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+ ifeq ($(call isTargetCpuBits, 32), true)
$(eval $(call SetupInspector,-32,32))
$(eval $(call SetupWalker,-32,32))
$(eval $(call SetupInspector,,LEGACY))
--- a/make/launcher/Launcher-jdk.pack.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/Launcher-jdk.pack.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -45,7 +45,7 @@
CXXFLAGS_JDKEXE += -fvisibility=hidden
LDFLAGS_JDKEXE += -Wl,--exclude-libs,ALL
else ifeq ($(TOOLCHAIN_TYPE), clang)
- ifneq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), false)
CXXFLAGS_JDKEXE += -fvisibility=hidden
endif
else ifeq ($(TOOLCHAIN_TYPE), solstudio)
--- a/make/launcher/LauncherCommon.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/launcher/LauncherCommon.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -105,7 +105,7 @@
$$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_LAUNCHER_CLASS), "$$a"$(COMMA) )) }'
$1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
ifeq ($$($1_MACOSX_SIGNED), true)
$1_PLIST_FILE := Info-privileged.plist
$1_CODESIGN := true
@@ -179,11 +179,11 @@
$1 += $$(BUILD_LAUNCHER_$1)
TARGETS += $$($1)
- ifeq ($(OPENJDK_TARGET_OS), aix)
+ ifeq ($(call isTargetOs, aix), true)
$$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, jli_static)
endif
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
$$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, java, /libjava) \
$$($1_WINDOWS_JLI_LIB)
endif
@@ -194,7 +194,7 @@
# relationship between executables and man pages (even if this is not always
# the case), so piggyback man page generation on the launcher compilation.
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
# Only build manpages on unix systems.
# We assume all our man pages should reside in section 1.
--- a/make/lib/Awt2dLibraries.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Awt2dLibraries.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -43,7 +43,7 @@
BUILD_LIBMLIB_CFLAGS := -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES -DMLIB_NO_LIBSUNMATH
-ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ifeq ($(call isTargetCpuBits, 64), true)
BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT
endif
@@ -68,7 +68,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), true)
# libmlib_image_v is basically built from mlib_image sources, with some additions
# and some exclusions.
@@ -80,7 +80,7 @@
LIBMLIB_IMAGE_V_CFLAGS := -xarch=sparcvis -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \
$(TOPDIR)/src/$(MODULE)/unix/native/libmlib_image/vis_$(OPENJDK_TARGET_CPU_BITS).il
- ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ ifeq ($(call isTargetCpuBits, 64), true)
LIBMLIB_IMAGE_V_CFLAGS += -DMLIB_OS64BIT
endif
@@ -127,11 +127,11 @@
$(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
#
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), true)
LIBAWT_EXTRA_SRC += $(TOPDIR)/src/$(MODULE)/share/native/common/awt/medialib
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
LIBAWT_EXTRA_SRC += \
$(TOPDIR)/src/$(MODULE)/share/native/common/awt/utility \
$(TOPDIR)/src/$(MODULE)/share/native/common/font \
@@ -140,22 +140,22 @@
#
endif
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx aix), )
+ifeq ($(call isTargetOs, solaris linux macosx aix), true)
LIBAWT_EXFILES += awt_Font.c CUPSfuncs.c fontpath.c X11Color.c
endif
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
LIBAWT_EXFILES += initIDs.c awt/image/cvutils/img_colors.c
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
LIBAWT_EXFILES += \
java2d/d3d/D3DShaderGen.c \
awt/image/cvutils/img_colors.c \
#
endif
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
LIBAWT_EXFILES += java2d/loops/MapAccelFunc.c
else
LIBAWT_EXCLUDES += \
@@ -182,20 +182,20 @@
LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES $(X_CFLAGS)
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
LIBAWT_CFLAGS += -xarch=sparcvis -DMLIB_ADD_SUFF \
$(TOPDIR)/src/$(MODULE)/unix/native/libmlib_image/vis_$(OPENJDK_TARGET_CPU_BITS).il
LIBAWT_ASFLAGS = -P -xarch=v9a
endif
-ifneq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), false)
LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
LIBAWT_CFLAGS += -EHsc -DUNICODE -D_UNICODE
- ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ ifeq ($(call isTargetCpuBits, 64), true)
LIBAWT_CFLAGS += -DMLIB_OS64BIT
endif
@@ -203,7 +203,7 @@
LIBAWT_VERSIONINFO_RESOURCE := $(TOPDIR)/src/$(MODULE)/windows/native/libawt/windows/awt.rc
endif
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
# FIXME: This is probably not what we want to do, but keep it now for compatibility.
LIBAWT_CFLAGS += $(EXPORT_ALL_SYMBOLS)
endif
@@ -263,7 +263,7 @@
$(BUILD_LIBAWT): $(call FindLib, java.base, java)
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
$(BUILD_LIBAWT): $(BUILD_LIBMLIB_IMAGE)
endif
@@ -271,7 +271,7 @@
################################################################################
-ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
ifeq ($(ENABLE_HEADLESS_ONLY), false)
LIBAWT_XAWT_EXTRA_SRC := \
@@ -297,11 +297,11 @@
$(FONTCONFIG_CFLAGS) \
$(CUPS_CFLAGS)
- ifeq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), true)
LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15
endif
- ifeq ($(OPENJDK_TARGET_OS), linux)
+ ifeq ($(call isTargetOs, linux), true)
ifeq ($(DISABLE_XRENDER), true)
LIBAWT_XAWT_CFLAGS += -DDISABLE_XRENDER_BY_DEFAULT=true
endif
@@ -309,7 +309,7 @@
LIBAWT_XAWT_LIBS := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm
- ifeq ($(OPENJDK_TARGET_OS), linux)
+ ifeq ($(call isTargetOs, linux), true)
LIBAWT_XAWT_LIBS += -lpthread
endif
@@ -443,7 +443,7 @@
################################################################################
# Mac and Windows only use the native AWT lib, do not build libawt_headless
-ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
+ifeq ($(call isTargetOs, windows macosx), false)
LIBAWT_HEADLESS_EXTRA_SRC := \
common/font \
@@ -504,7 +504,7 @@
# For use by libfontmanager:
LIBFREETYPE_CFLAGS := -I$(BUILD_LIBFREETYPE_HEADER_DIRS)
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
LIBFREETYPE_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfreetype/freetype.lib
else
LIBFREETYPE_LIBS := -lfreetype
@@ -534,20 +534,20 @@
HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
-DHAVE_SYSCONF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H
endif
-ifneq (, $(findstring $(OPENJDK_TARGET_OS), linux macosx))
+ifeq ($(call isTargetOs, linux macosx), true)
HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
endif
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
HARFBUZZ_CFLAGS += -DHAVE_SOLARIS_ATOMIC_OPS
endif
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
endif
-ifneq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), false)
LIBFONTMANAGER_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
endif
# hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
@@ -572,11 +572,11 @@
LIBFONTMANAGER_OPTIMIZATION := HIGH
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
X11TextRenderer.c
LIBFONTMANAGER_OPTIMIZATION := HIGHEST
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
X11TextRenderer.c \
fontpath.c \
@@ -640,7 +640,7 @@
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
$(BUILD_LIBFONTMANAGER): $(call FindLib, $(MODULE), awt_lwawt)
endif
@@ -652,7 +652,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
LIBJAWT_CFLAGS := -EHsc -DUNICODE -D_UNICODE
@@ -667,7 +667,7 @@
java.base:libjava \
#
- ifeq ($(OPENJDK_TARGET_CPU), x86)
+ ifeq ($(call isTargetCpu, x86), true)
KERNEL32_LIB := kernel32.lib
endif
@@ -692,25 +692,25 @@
TARGETS += $(COPY_JAWT_LIB)
-else # OPENJDK_TARGET_OS not windows
+else # not windows
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
# libjawt on macosx do not use the unix code
LIBJAWT_EXCLUDE_SRC_PATTERNS := unix
endif
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
JAWT_LIBS := -lawt_lwawt
else
JAWT_LIBS :=
- ifneq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), false)
JAWT_LIBS += -lawt
endif
ifeq ($(ENABLE_HEADLESS_ONLY), false)
JAWT_LIBS += -lawt_xawt
else
JAWT_LIBS += -lawt_headless
- ifeq ($(OPENJDK_TARGET_OS), linux)
+ ifeq ($(call isTargetOs, linux), true)
JAWT_CFLAGS += -DHEADLESS
endif
endif
@@ -742,11 +742,11 @@
$(BUILD_LIBJAWT): $(call FindLib, $(MODULE), awt_headless)
endif
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
$(BUILD_LIBJAWT): $(call FindLib, $(MODULE), awt_lwawt)
endif
-endif # OPENJDK_TARGET_OS
+endif
TARGETS += $(BUILD_LIBJAWT)
@@ -784,20 +784,20 @@
LIBSPLASHSCREEN_EXTRA_SRC += java.base:libzip/zlib
endif
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
# libsplashscreen on macosx do not use the unix code
LIBSPLASHSCREEN_EXCLUDE_SRC_PATTERNS := unix
endif
LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE -DPNG_ARM_NEON_OPT=0
- ifeq ($(OPENJDK_TARGET_OS), linux)
- ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc)
+ ifeq ($(call isTargetOs, linux), true)
+ ifeq ($(call isTargetCpuArch, ppc), true)
LIBSPLASHSCREEN_CFLAGS += -DPNG_POWERPC_VSX_OPT=0
endif
endif
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX
BUILD_LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS := -x objective-c -O0
@@ -808,7 +808,7 @@
BUILD_LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS := -x objective-c -O0
BUILD_LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS := -O0
- else ifeq ($(OPENJDK_TARGET_OS), windows)
+ else ifeq ($(call isTargetOs, windows), true)
LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32
else
LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 $(X_CFLAGS)
@@ -816,14 +816,14 @@
LIBSPLASHSCREEN_LIBS :=
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
LIBSPLASHSCREEN_LIBS += \
$(LIBM) -lpthread -liconv -losxapp \
-framework ApplicationServices \
-framework Foundation \
-framework Cocoa \
-framework JavaNativeFoundation
- else ifeq ($(OPENJDK_TARGET_OS), windows)
+ else ifeq ($(call isTargetOs, windows), true)
LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib
else
LIBSPLASHSCREEN_LIBS += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread -ldl
@@ -863,7 +863,7 @@
TARGETS += $(BUILD_LIBSPLASHSCREEN)
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
$(BUILD_LIBSPLASHSCREEN): $(call FindLib, $(MODULE), osxapp)
endif
@@ -871,7 +871,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
LIBAWT_LWAWT_EXTRA_SRC := \
$(TOPDIR)/src/$(MODULE)/unix/native/common/awt \
@@ -941,7 +941,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBOSXUI, \
NAME := osxui, \
--- a/make/lib/CoreLibraries.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/CoreLibraries.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -35,7 +35,7 @@
BUILD_LIBFDLIBM_OPTIMIZATION := NONE
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
endif
@@ -68,7 +68,7 @@
##########################################################################################
LIBVERIFY_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
LIBVERIFY_OPTIMIZATION := LOW
endif
@@ -92,7 +92,7 @@
LIBJAVA_CFLAGS := -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"'
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c
BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c
endif
@@ -181,11 +181,11 @@
##########################################################################################
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
LIBJLI_EXCLUDE_FILES += java_md_solinux.c
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# Supply the name of the C runtime lib.
LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
ifneq ($(MSVCP_DLL), )
@@ -233,7 +233,7 @@
LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli)
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
# AIX also requires a static libjli because the compiler doesn't support '-rpath'
$(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
NAME := jli_static, \
--- a/make/lib/Lib-java.base.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.base.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -99,7 +99,7 @@
################################################################################
# Create the macosx security library
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
# JavaNativeFoundation framework not supported in static builds
ifneq ($(STATIC_BUILD), true)
@@ -130,7 +130,7 @@
################################################################################
# Create the jsig library
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
ifeq ($(STATIC_BUILD), false)
$(eval $(call SetupJdkLibrary, BUILD_LIBJSIG, \
NAME := jsig, \
@@ -205,7 +205,7 @@
################################################################################
# Copy tzmappings file for Windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupCopyFiles, COPY_TZMAPPINGS, \
FILES := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/windows/conf/tzmappings, \
DEST := $(call FindLibDirForModule, $(MODULE)), \
--- a/make/lib/Lib-java.desktop.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.desktop.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -39,7 +39,7 @@
################################################################################
# Create the libjsound library
-ifneq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), false)
LIBJSOUND_CFLAGS := \
$(ALSA_CFLAGS) \
@@ -48,14 +48,14 @@
-DUSE_DAUDIO=TRUE \
#
- ifneq ($(OPENJDK_TARGET_OS), solaris)
+ ifeq ($(call isTargetOs, solaris), false)
LIBJSOUND_CFLAGS += \
-DUSE_PLATFORM_MIDI_OUT=TRUE \
-DUSE_PLATFORM_MIDI_IN=TRUE \
#
endif
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
LIBJSOUND_TOOLCHAIN := TOOLCHAIN_LINK_CXX
endif
@@ -87,7 +87,7 @@
################################################################################
# Create the macosx specific osxapp and osx libraries
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBOSXAPP, \
NAME := osxapp, \
@@ -142,4 +142,3 @@
$(BUILD_LIBOSX): $(call FindLib, java.base, java)
endif
-
--- a/make/lib/Lib-java.instrument.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.instrument.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# equivalent of strcasecmp is stricmp on Windows
LIBINSTRUMENT_CFLAGS := -Dstrcasecmp=stricmp
WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
@@ -62,7 +62,7 @@
$(WINDOWS_JLI_LIB), \
))
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
$(BUILD_LIBINSTRUMENT): $(call FindStaticLib, java.base, jli_static)
else
$(BUILD_LIBINSTRUMENT): $(call FindLib, java.base, jli)
--- a/make/lib/Lib-java.management.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.management.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -31,7 +31,7 @@
################################################################################
LIBMANAGEMENT_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
LIBMANAGEMENT_OPTIMIZATION := LOW
endif
@@ -57,4 +57,3 @@
# Include custom extension post hook
$(eval $(call IncludeCustomExtension, lib/Lib-java.management-post.gmk))
-
--- a/make/lib/Lib-java.prefs.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.prefs.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -28,7 +28,7 @@
################################################################################
# libprefs on macosx do not use the unix code
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
LIBPREFS_EXCLUDE_SRC_PATTERNS := unix
endif
--- a/make/lib/Lib-java.security.jgss.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-java.security.jgss.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -44,7 +44,7 @@
ifneq ($(BUILD_CRYPTO), false)
- ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBW2K_LSA_AUTH, \
NAME := w2k_lsa_auth, \
OPTIMIZATION := LOW, \
@@ -59,7 +59,7 @@
TARGETS += $(BUILD_LIBW2K_LSA_AUTH)
endif
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq ($(call isTargetOs, macosx), true)
# libosxkrb5 needs to call deprecated krb5 APIs so that java
# can use the native credentials cache.
$(eval $(call SetupJdkLibrary, BUILD_LIBOSXKRB5, \
--- a/make/lib/Lib-jdk.accessibility.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.accessibility.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
ROOT_SRCDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
@@ -100,7 +100,7 @@
endef
- ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+ ifeq ($(call isTargetCpuBits, 32), true)
$(eval $(call SetupAccessBridgeSysInfo))
$(eval $(call SetupJavaDLL,-32,32))
$(eval $(call SetupJavaDLL,,LEGACY))
--- a/make/lib/Lib-jdk.attach.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.attach.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
# a binary that is compatible with windows versions older than 7/2008R2.
# See MSDN documentation for GetProcessMemoryInfo for more information.
--- a/make/lib/Lib-jdk.crypto.mscapi.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.crypto.mscapi.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBSUNMSCAPI, \
NAME := sunmscapi, \
--- a/make/lib/Lib-jdk.crypto.ucrypto.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.crypto.ucrypto.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBJ2UCRYPTO, \
NAME := j2ucrypto, \
--- a/make/lib/Lib-jdk.hotspot.agent.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.hotspot.agent.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -29,19 +29,19 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
SA_CFLAGS := -D_FILE_OFFSET_BITS=64
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
SA_LDFLAGS := -mt
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
SA_CFLAGS := -Damd64 -D_GNU_SOURCE -mno-omit-leaf-frame-pointer \
-mstack-alignment=16 -fPIC
LIBSA_EXTRA_SRC := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
SA_CFLAGS := -D_WINDOWS -D_DEBUG -D_CONSOLE -D_MBCS -EHsc
- ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ ifeq ($(call isTargetCpu, x86_64), true)
SA_CXXFLAGS := -DWIN64
else
# Only add /RTC1 flag for debug builds as it's
--- a/make/lib/Lib-jdk.internal.le.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.internal.le.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBLE, \
NAME := le, \
@@ -39,6 +39,6 @@
TARGETS += $(BUILD_LIBLE)
-endif # OPENJDK_TARGET_OS
+endif
################################################################################
--- a/make/lib/Lib-jdk.jdi.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.jdi.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBDT_SHMEM, \
NAME := dt_shmem, \
@@ -42,6 +42,6 @@
TARGETS += $(BUILD_LIBDT_SHMEM)
-endif # OPENJDK_TARGET_OS
+endif
################################################################################
--- a/make/lib/Lib-jdk.management.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.management.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
# In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
# a binary that is compatible with windows versions older than 7/2008R2.
# See MSDN documentation for GetProcessMemoryInfo for more information.
@@ -38,7 +38,7 @@
endif
LIBMANAGEMENT_EXT_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
LIBMANAGEMENT_EXT_OPTIMIZATION := LOW
endif
@@ -65,4 +65,3 @@
# Include custom extension post hook
$(eval $(call IncludeCustomExtension, lib/Lib-jdk.management-post.gmk))
-
--- a/make/lib/Lib-jdk.net.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.net.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,7 @@
################################################################################
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx), )
+ifeq ($(call isTargetOs, solaris linux macosx), true)
$(eval $(call SetupJdkLibrary, BUILD_LIBEXTNET, \
NAME := extnet, \
--- a/make/lib/Lib-jdk.sctp.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/lib/Lib-jdk.sctp.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -27,9 +27,9 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
- ifeq ($(filter $(OPENJDK_TARGET_OS), macosx aix), )
+ ifeq ($(call isTargetOs, macosx aix), false)
$(eval $(call SetupJdkLibrary, BUILD_LIBSCTP, \
NAME := sctp, \
OPTIMIZATION := LOW, \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/scripts/generate-symbol-data.sh Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# This script allows to easily generate (add or update) "--release N" data for JDK N + 1.
+# N must be 11 or greater. This script works on Linux. To create new data, or update existing
+# data, it is necessary to:
+# - download a binary build of OpenJDK N for Linux, API of which will be recorded. It is strongly recommended
+# to use an official build, not a custom build, to avoid any chance of including unofficial changes.
+# The binary build should never be a build newer than the GA for JDK N. Install the build. The installation
+# directory will be denoted as "${JDK_N_INSTALL}" in the further text.
+# - have a checkout the JDK to which the data should be added (or in which the data should be updated).
+# The checkout directory will be denoted as "${JDK_CHECKOUT}" in the further text.
+# The checkout must not have any local changes that could interfere with the new data. In particular,
+# there must be absolutely no changed, new or removed files under the ${JDK_CHECKOUT}/make/data/symbols
+# directory.
+# - open a terminal program and run these commands:
+# cd "${JDK_CHECKOUT}"/make/data/symbols
+# bash ../../scripts/generate-symbol-data.sh "${JDK_N_INSTALL}"
+# - this command will generate or update data for "--release N" into the ${JDK_CHECKOUT}/make/data/symbols
+# directory, updating all registration necessary. If the goal was to update the data, and there are no
+# new or changed files in the ${JDK_CHECKOUT}/make/data/symbols directory after running this script,
+# there were no relevant changes and no further action is necessary. Note that version for N > 9 are encoded
+# using capital letters, i.e. A represents version 10, B represents 11, and so on. The version numbers are in
+# the names of the files in the ${JDK_CHECKOUT}/make/data/symbols directory, as well as in
+# the ${JDK_CHECKOUT}/make/data/symbols/symbols file.
+# - if there are any changed/new files in the ${JDK_CHECKOUT}/make/data/symbols directory after running this script,
+# then all the changes in this directory, including any new files, need to be sent for review and eventually pushed.
+# The commit message should specify which binary build was installed in the ${JDK_N_INSTALL} directory and also
+# include the SCM state that was used to build it, which can be found in ${JDK_N_INSTALL}/release,
+# in property "SOURCE".
+
+if [ "$1x" = "x" ] ; then
+ echo "Must provide the target JDK as a parameter:" >&2
+ echo "$0 <target-jdk>" >&2
+ exit 1
+fi;
+
+if [ ! -f symbols ] ; then
+ echo "Must run inside the make/data/symbols directory" >&2
+ exit 1
+fi;
+
+if [ "`hg status .`x" != "x" ] ; then
+ echo "The make/data/symbols directory contains local changes!" >&2
+ exit 1
+fi;
+
+$1/bin/java --add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
+ --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
+ --add-exports jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
+ --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
+ --add-modules jdk.jdeps \
+ ../../../make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java \
+ build-description-incremental symbols include.list
--- a/make/test/BuildFailureHandler.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/test/BuildFailureHandler.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -61,7 +61,7 @@
################################################################################
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
$(eval $(call SetupNativeCompilation, BUILD_LIBTIMEOUT_HANDLER, \
NAME := timeoutHandler, \
@@ -99,7 +99,7 @@
#
RUN_DIR := $(FH_SUPPORT)/test
# Add the dir of the dll to the path on windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
export PATH := $(PATH);$(FH_SUPPORT)
endif
--- a/make/test/JtregNativeHotspot.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/test/JtregNativeHotspot.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -140,7 +140,7 @@
-I$(VM_TESTBASE_DIR)/nsk/share/jni
NO_FRAMEPOINTER_CFLAGS :=
-ifeq ($(OPENJDK_TARGET_OS),linux)
+ifeq ($(call isTargetOs, linux), true)
NO_FRAMEPOINTER_CFLAGS := -fomit-frame-pointer
endif
@@ -849,11 +849,11 @@
################################################################################
# Platform specific setup
-ifneq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), false)
BUILD_HOTSPOT_JTREG_EXCLUDE += liboverflow.c exeThreadSignalMask.c
endif
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rw := -z noexecstack
BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libstepBreakPopReturn := -lpthread
@@ -870,11 +870,11 @@
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
BUILD_HOTSPOT_JTREG_EXCLUDE += libterminatedThread.c
endif
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c
--- a/make/test/JtregNativeJdk.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/make/test/JtregNativeJdk.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -54,7 +54,7 @@
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli
# Platform specific setup
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c
WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
@@ -64,15 +64,15 @@
else
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
- ifeq ($(OPENJDK_TARGET_OS), linux)
+ ifeq ($(call isTargetOs, linux), true)
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
- else ifeq ($(OPENJDK_TARGET_OS), solaris)
+ else ifeq ($(call isTargetOs, solaris), true)
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lsocket -lnsl
endif
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
endif
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
-framework Cocoa -framework JavaNativeFoundation
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -425,54 +425,56 @@
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
bool acquire, bool release, bool weak, bool is_cae,
Register result) {
-
- Register tmp = rscratch2;
+ Register tmp1 = rscratch1;
+ Register tmp2 = rscratch2;
bool is_narrow = UseCompressedOops;
Assembler::operand_size size = is_narrow ? Assembler::word : Assembler::xword;
- assert_different_registers(addr, expected, new_val, result, tmp);
+ assert_different_registers(addr, expected, new_val, tmp1, tmp2);
Label retry, done, fail;
// CAS, using LL/SC pair.
__ bind(retry);
- __ load_exclusive(result, addr, size, acquire);
+ __ load_exclusive(tmp1, addr, size, acquire);
if (is_narrow) {
- __ cmpw(result, expected);
+ __ cmpw(tmp1, expected);
} else {
- __ cmp(result, expected);
+ __ cmp(tmp1, expected);
}
__ br(Assembler::NE, fail);
- __ store_exclusive(tmp, new_val, addr, size, release);
+ __ store_exclusive(tmp2, new_val, addr, size, release);
if (weak) {
- __ cmpw(tmp, 0u); // If the store fails, return NE to our caller
+ __ cmpw(tmp2, 0u); // If the store fails, return NE to our caller
} else {
- __ cbnzw(tmp, retry);
+ __ cbnzw(tmp2, retry);
}
__ b(done);
__ bind(fail);
- // Check if rb(expected)==rb(result)
+ // Check if rb(expected)==rb(tmp1)
// Shuffle registers so that we have memory value ready for next expected.
- __ mov(tmp, expected);
- __ mov(expected, result);
+ __ mov(tmp2, expected);
+ __ mov(expected, tmp1);
if (is_narrow) {
- __ decode_heap_oop(result, result);
- __ decode_heap_oop(tmp, tmp);
+ __ decode_heap_oop(tmp1, tmp1);
+ __ decode_heap_oop(tmp2, tmp2);
}
- read_barrier_impl(masm, result);
- read_barrier_impl(masm, tmp);
- __ cmp(result, tmp);
+ read_barrier_impl(masm, tmp1);
+ read_barrier_impl(masm, tmp2);
+ __ cmp(tmp1, tmp2);
// Retry with expected now being the value we just loaded from addr.
__ br(Assembler::EQ, retry);
if (is_cae && is_narrow) {
// For cmp-and-exchange and narrow oops, we need to restore
// the compressed old-value. We moved it to 'expected' a few lines up.
- __ mov(result, expected);
+ __ mov(tmp1, expected);
}
__ bind(done);
- if (!is_cae) {
+ if (is_cae) {
+ __ mov(result, tmp1);
+ } else {
__ cset(result, Assembler::EQ);
}
}
--- a/src/hotspot/cpu/arm/arm.ad Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/arm.ad Wed Feb 13 13:22:15 2019 -0500
@@ -352,7 +352,7 @@
// If this does safepoint polling, then do it here
if (do_polling() && ra_->C->is_method_compilation()) {
// mov_slow here is usually one or two instruction
- __ mov_address(Rtemp, (address)os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+ __ mov_address(Rtemp, (address)os::get_polling_page());
__ relocate(relocInfo::poll_return_type);
__ ldr(Rtemp, Address(Rtemp));
}
--- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -309,7 +309,7 @@
__ remove_frame(initial_frame_size_in_bytes());
// mov_slow here is usually one or two instruction
- __ mov_address(Rtemp, os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+ __ mov_address(Rtemp, os::get_polling_page());
__ relocate(relocInfo::poll_return_type);
__ ldr(Rtemp, Address(Rtemp));
__ ret();
@@ -317,7 +317,7 @@
int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
- __ mov_address(Rtemp, os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+ __ mov_address(Rtemp, os::get_polling_page());
if (info != NULL) {
add_debug_info_for_branch(info);
}
--- a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -218,7 +218,7 @@
const Register card_addr = tmp1;
assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
- __ mov_address(tmp2, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+ __ mov_address(tmp2, (address)ct->byte_map_base());
__ add(card_addr, tmp2, AsmOperand(store_addr, lsr, CardTable::card_shift));
__ ldrb(tmp2, Address(card_addr));
--- a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -167,7 +167,7 @@
bool load_const = VM_Version::supports_movw();
if (load_const) {
- __ mov_address(top_addr, (address)Universe::heap()->top_addr(), symbolic_Relocation::eden_top_reference);
+ __ mov_address(top_addr, (address)Universe::heap()->top_addr());
} else {
__ ldr(top_addr, Address(Rthread, JavaThread::heap_top_addr_offset()));
}
--- a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -61,7 +61,7 @@
__ sub(count, count, addr); // nb of cards
// warning: Rthread has not been preserved
- __ mov_address(tmp, (address) ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+ __ mov_address(tmp, (address) ct->byte_map_base());
__ add(addr,tmp, addr);
Register zero = __ zero_register(tmp);
@@ -119,7 +119,7 @@
Possible cause is a cache miss (card table base address resides in a
rarely accessed area of thread descriptor).
*/
- __ mov_address(card_table_base, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+ __ mov_address(card_table_base, (address)ct->byte_map_base());
}
// The 2nd part of the store check.
--- a/src/hotspot/cpu/arm/macroAssembler_arm.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/macroAssembler_arm.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -26,7 +26,6 @@
#define CPU_ARM_MACROASSEMBLER_ARM_HPP
#include "code/relocInfo.hpp"
-#include "code/relocInfo_ext.hpp"
class BiasedLockingCounters;
@@ -513,15 +512,13 @@
}
}
- // Runtime address that may vary from one execution to another. The
- // symbolic_reference describes what the address is, allowing
- // the address to be resolved in a different execution context.
+ // Runtime address that may vary from one execution to another.
// Warning: do not implement as a PC relative address.
- void mov_address(Register rd, address addr, symbolic_Relocation::symbolic_reference t) {
+ void mov_address(Register rd, address addr) {
mov_address(rd, addr, RelocationHolder::none);
}
- // rspec can be RelocationHolder::none (for ignored symbolic_Relocation).
+ // rspec can be RelocationHolder::none (for ignored symbolic Relocation).
// In that case, the address is absolute and the generated code need
// not be relocable.
void mov_address(Register rd, address addr, RelocationHolder const& rspec) {
--- a/src/hotspot/cpu/arm/stubGenerator_arm.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/cpu/arm/stubGenerator_arm.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -820,9 +820,9 @@
// Note: oop_mask and oop_bits must be updated if the code is saved/reused
const address oop_mask = (address) Universe::verify_oop_mask();
const address oop_bits = (address) Universe::verify_oop_bits();
- __ mov_address(tmp1, oop_mask, symbolic_Relocation::oop_mask_reference);
+ __ mov_address(tmp1, oop_mask);
__ andr(tmp2, oop, tmp1);
- __ mov_address(tmp1, oop_bits, symbolic_Relocation::oop_bits_reference);
+ __ mov_address(tmp1, oop_bits);
__ cmp(tmp2, tmp1);
__ b(error, ne);
--- a/src/hotspot/os/aix/porting_aix.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/os/aix/porting_aix.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013 SAP SE. 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
@@ -34,7 +34,15 @@
#include "utilities/align.hpp"
#include "utilities/debug.hpp"
+// distinguish old xlc and xlclang++, where
+// <ibmdemangle.h> is suggested but not found in GA release (might come with a fix)
+#if defined(__clang__)
+#define DISABLE_DEMANGLE
+// #include <ibmdemangle.h>
+#else
#include <demangle.h>
+#endif
+
#include <sys/debug.h>
#include <pthread.h>
#include <ucontext.h>
@@ -237,6 +245,7 @@
p_name[i] = '\0';
// If it is a C++ name, try and demangle it using the Demangle interface (see demangle.h).
+#ifndef DISABLE_DEMANGLE
if (demangle) {
char* rest;
Name* const name = Demangle(p_name, rest);
@@ -249,6 +258,7 @@
delete name;
}
}
+#endif
} else {
strncpy(p_name, "<nameless function>", namelen-1);
p_name[namelen-1] = '\0';
--- a/src/hotspot/os/windows/os_windows.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/os/windows/os_windows.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -125,6 +125,11 @@
#define __CPU__ i486
#endif
+#if INCLUDE_AOT
+PVOID topLevelVectoredExceptionHandler = NULL;
+LONG WINAPI topLevelVectoredExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo);
+#endif
+
// save DLL module handle, used by GetModuleFileName
HINSTANCE vm_lib_handle;
@@ -143,6 +148,12 @@
if (ForceTimeHighResolution) {
timeEndPeriod(1L);
}
+#if INCLUDE_AOT
+ if (topLevelVectoredExceptionHandler != NULL) {
+ RemoveVectoredExceptionHandler(topLevelVectoredExceptionHandler);
+ topLevelVectoredExceptionHandler = NULL;
+ }
+#endif
break;
default:
break;
@@ -2325,6 +2336,25 @@
return true;
}
+#if INCLUDE_AOT
+LONG WINAPI topLevelVectoredExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
+ PEXCEPTION_RECORD exceptionRecord = exceptionInfo->ExceptionRecord;
+ address addr = (address) exceptionRecord->ExceptionInformation[1];
+ address pc = (address) exceptionInfo->ContextRecord->Rip;
+
+ // Handle the case where we get an implicit exception in AOT generated
+ // code. AOT DLL's loaded are not registered for structured exceptions.
+ // If the exception occurred in the codeCache or AOT code, pass control
+ // to our normal exception handler.
+ CodeBlob* cb = CodeCache::find_blob(pc);
+ if (cb != NULL) {
+ return topLevelExceptionFilter(exceptionInfo);
+ }
+
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+#endif
+
//-----------------------------------------------------------------------------
LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
if (InterceptOSException) return EXCEPTION_CONTINUE_SEARCH;
@@ -4080,6 +4110,16 @@
// Setup Windows Exceptions
+#if INCLUDE_AOT
+ // If AOT is enabled we need to install a vectored exception handler
+ // in order to forward implicit exceptions from code in AOT
+ // generated DLLs. This is necessary since these DLLs are not
+ // registered for structured exceptions like codecache methods are.
+ if (UseAOT) {
+ topLevelVectoredExceptionHandler = AddVectoredExceptionHandler( 1, topLevelVectoredExceptionFilter);
+ }
+#endif
+
// for debugging float code generation bugs
if (ForceFloatExceptions) {
#ifndef _WIN64
--- a/src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -43,7 +43,7 @@
}
inline void Prefetch::write(void *loc, intx interval) {
-#if !defined(USE_XLC_PREFETCH_WRITE_BUILTIN)
+#if !defined(USE_XLC_BUILTINS)
__asm__ __volatile__ (
" dcbtst 0, %0 \n"
:
--- a/src/hotspot/share/aot/aotCodeHeap.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/aot/aotCodeHeap.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -707,7 +707,9 @@
for (int i = 0; i < methods_cnt; ++i) {
int code_id = indexes[i];
AOTCompiledMethod* aot = _code_to_aot[code_id]._aot;
- aot->mark_for_deoptimization(false);
+ if (aot != NULL) {
+ aot->mark_for_deoptimization(false);
+ }
}
}
}
--- a/src/hotspot/share/classfile/classFileParser.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/classfile/classFileParser.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -4991,30 +4991,30 @@
bool ClassFileParser::verify_unqualified_name(const char* name,
unsigned int length,
int type) {
- for (const char* p = name; p != name + length;) {
- jchar ch = *p;
- if (ch < 128) {
- if (ch == '.' || ch == ';' || ch == '[' ) {
- return false; // do not permit '.', ';', or '['
- }
- if (ch == '/') {
+ for (const char* p = name; p != name + length; p++) {
+ switch(*p) {
+ case '.':
+ case ';':
+ case '[':
+ // do not permit '.', ';', or '['
+ return false;
+ case '/':
// check for '//' or leading or trailing '/' which are not legal
// unqualified name must not be empty
if (type == ClassFileParser::LegalClass) {
if (p == name || p+1 >= name+length || *(p+1) == '/') {
- return false;
+ return false;
}
} else {
return false; // do not permit '/' unless it's class name
}
- }
- if (type == ClassFileParser::LegalMethod && (ch == '<' || ch == '>')) {
- return false; // do not permit '<' or '>' in method names
- }
- p++;
- } else {
- char* tmp_p = UTF8::next(p, &ch);
- p = tmp_p;
+ break;
+ case '<':
+ case '>':
+ // do not permit '<' or '>' in method names
+ if (type == ClassFileParser::LegalMethod) {
+ return false;
+ }
}
}
return true;
@@ -5026,7 +5026,7 @@
// Return NULL if no fieldname at all was found, or in the case of slash_ok
// being true, we saw consecutive slashes (meaning we were looking for a
// qualified path but found something that was badly-formed).
-static const char* skip_over_field_name(const char* name,
+static const char* skip_over_field_name(const char* const name,
bool slash_ok,
unsigned int length) {
const char* p;
@@ -5062,29 +5062,12 @@
// Check if ch is Java identifier start or is Java identifier part
// 4672820: call java.lang.Character methods directly without generating separate tables.
EXCEPTION_MARK;
-
// return value
JavaValue result(T_BOOLEAN);
- // Set up the arguments to isJavaIdentifierStart and isJavaIdentifierPart
+ // Set up the arguments to isJavaIdentifierStart or isJavaIdentifierPart
JavaCallArguments args;
args.push_int(unicode_ch);
- // public static boolean isJavaIdentifierStart(char ch);
- JavaCalls::call_static(&result,
- SystemDictionary::Character_klass(),
- vmSymbols::isJavaIdentifierStart_name(),
- vmSymbols::int_bool_signature(),
- &args,
- THREAD);
-
- if (HAS_PENDING_EXCEPTION) {
- CLEAR_PENDING_EXCEPTION;
- return 0;
- }
- if (result.get_jboolean()) {
- continue;
- }
-
if (not_first_ch) {
// public static boolean isJavaIdentifierPart(char ch);
JavaCalls::call_static(&result,
@@ -5093,15 +5076,21 @@
vmSymbols::int_bool_signature(),
&args,
THREAD);
-
- if (HAS_PENDING_EXCEPTION) {
- CLEAR_PENDING_EXCEPTION;
- return 0;
- }
-
- if (result.get_jboolean()) {
- continue;
- }
+ } else {
+ // public static boolean isJavaIdentifierStart(char ch);
+ JavaCalls::call_static(&result,
+ SystemDictionary::Character_klass(),
+ vmSymbols::isJavaIdentifierStart_name(),
+ vmSymbols::int_bool_signature(),
+ &args,
+ THREAD);
+ }
+ if (HAS_PENDING_EXCEPTION) {
+ CLEAR_PENDING_EXCEPTION;
+ return NULL;
+ }
+ if(result.get_jboolean()) {
+ continue;
}
}
return (not_first_ch) ? old_p : NULL;
@@ -5142,18 +5131,12 @@
}
else {
// Skip leading 'L' and ignore first appearance of ';'
- length--;
signature++;
char* c = strchr((char*) signature, ';');
// Format check signature
if (c != NULL) {
- ResourceMark rm(THREAD);
int newlen = c - (char*) signature;
- char* sig = NEW_RESOURCE_ARRAY(char, newlen + 1);
- strncpy(sig, signature, newlen);
- sig[newlen] = '\0';
-
- bool legal = verify_unqualified_name(sig, newlen, LegalClass);
+ bool legal = verify_unqualified_name(signature, newlen, LegalClass);
if (!legal) {
classfile_parse_error("Class name contains illegal character "
"in descriptor in class file %s",
@@ -5187,8 +5170,8 @@
void ClassFileParser::verify_legal_class_name(const Symbol* name, TRAPS) const {
if (!_need_verify || _relax_verify) { return; }
- char buf[fixed_buffer_size];
- char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+ assert(name->refcount() > 0, "symbol must be kept alive");
+ char* bytes = (char*)name->bytes();
unsigned int length = name->utf8_length();
bool legal = false;
@@ -5227,8 +5210,7 @@
void ClassFileParser::verify_legal_field_name(const Symbol* name, TRAPS) const {
if (!_need_verify || _relax_verify) { return; }
- char buf[fixed_buffer_size];
- char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+ char* bytes = (char*)name->bytes();
unsigned int length = name->utf8_length();
bool legal = false;
@@ -5262,8 +5244,7 @@
if (!_need_verify || _relax_verify) { return; }
assert(name != NULL, "method name is null");
- char buf[fixed_buffer_size];
- char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+ char* bytes = (char*)name->bytes();
unsigned int length = name->utf8_length();
bool legal = false;
@@ -5302,8 +5283,7 @@
TRAPS) const {
if (!_need_verify) { return; }
- char buf[fixed_buffer_size];
- const char* const bytes = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+ const char* const bytes = (const char* const)signature->bytes();
const unsigned int length = signature->utf8_length();
const char* const p = skip_over_field_signature(bytes, false, length, CHECK);
@@ -5332,8 +5312,7 @@
}
unsigned int args_size = 0;
- char buf[fixed_buffer_size];
- const char* p = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+ const char* p = (const char*)signature->bytes();
unsigned int length = signature->utf8_length();
const char* nextp;
@@ -5739,6 +5718,19 @@
debug_only(ik->verify();)
}
+void ClassFileParser::update_class_name(Symbol* new_class_name) {
+ // Decrement the refcount in the old name, since we're clobbering it.
+ if (_class_name != NULL) {
+ _class_name->decrement_refcount();
+ }
+ _class_name = new_class_name;
+ // Increment the refcount of the new name.
+ // Now the ClassFileParser owns this name and will decrement in
+ // the destructor.
+ _class_name->increment_refcount();
+}
+
+
// For an unsafe anonymous class that is in the unnamed package, move it to its host class's
// package by prepending its host class's package name to its class name and setting
// its _class_name field.
@@ -5762,9 +5754,10 @@
strncpy(new_anon_name + host_pkg_len + 1, (char *)_class_name->base(), class_name_len);
// Create a symbol and update the anonymous class name.
- _class_name = SymbolTable::new_symbol(new_anon_name,
+ Symbol* new_name = SymbolTable::new_symbol(new_anon_name,
(int)host_pkg_len + 1 + class_name_len,
CHECK);
+ update_class_name(new_name);
}
}
@@ -5810,6 +5803,7 @@
TRAPS) :
_stream(stream),
_requested_name(name),
+ _class_name(NULL),
_loader_data(loader_data),
_unsafe_anonymous_host(unsafe_anonymous_host),
_cp_patches(cp_patches),
@@ -5867,7 +5861,7 @@
_has_vanilla_constructor(false),
_max_bootstrap_specifier_index(-1) {
- _class_name = name != NULL ? name : vmSymbols::unknown_class_name();
+ update_class_name(name != NULL ? name : vmSymbols::unknown_class_name());
assert(THREAD->is_Java_thread(), "invariant");
assert(_loader_data != NULL, "invariant");
@@ -5937,6 +5931,8 @@
// Destructor to clean up
ClassFileParser::~ClassFileParser() {
+ _class_name->decrement_refcount();
+
if (_cp != NULL) {
MetadataFactory::free_metadata(_loader_data, _cp);
}
@@ -6092,7 +6088,7 @@
// Update _class_name which could be null previously
// to reflect the name in the constant pool
- _class_name = class_name_in_cp;
+ update_class_name(class_name_in_cp);
// Don't need to check whether this class name is legal or not.
// It has been checked when constant pool is parsed.
--- a/src/hotspot/share/classfile/classFileParser.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/classfile/classFileParser.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -496,6 +496,8 @@
FieldLayoutInfo* info,
TRAPS);
+ void update_class_name(Symbol* new_name);
+
public:
ClassFileParser(ClassFileStream* stream,
Symbol* name,
--- a/src/hotspot/share/classfile/modules.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/classfile/modules.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -334,8 +334,8 @@
(package_name[JAVAPKG_LEN] == '/' || package_name[JAVAPKG_LEN] == '\0'))) {
const char* class_loader_name = loader_data->loader_name_and_id();
size_t pkg_len = strlen(package_name);
- char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len);
- strncpy(pkg_name, package_name, pkg_len);
+ char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len + 1);
+ strncpy(pkg_name, package_name, pkg_len + 1);
StringUtils::replace_no_expand(pkg_name, "/", ".");
const char* msg_text1 = "Class loader (instance of): ";
const char* msg_text2 = " tried to define prohibited package name: ";
--- a/src/hotspot/share/code/relocInfo.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/code/relocInfo.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -92,18 +92,6 @@
assert(format()==old_format, "sanity check");
}
-nmethod* RelocIterator::code_as_nmethod() const {
- return _code->as_nmethod();
-}
-
-void relocInfo::set_format(int f) {
- int old_offset = addr_offset();
- assert((f & format_mask) == f, "wrong format");
- _value = (_value & ~(format_mask << offset_width)) | (f << offset_width);
- assert(addr_offset()==old_offset, "sanity check");
-}
-
-
void relocInfo::change_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type, relocType new_type) {
bool found = false;
while (itr->next() && !found) {
@@ -117,11 +105,6 @@
}
-void relocInfo::remove_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type) {
- change_reloc_info_for_address(itr, pc, old_type, none);
-}
-
-
// ----------------------------------------------------------------------------------------------------
// Implementation of RelocIterator
@@ -179,14 +162,6 @@
set_limits(begin, limit);
}
-
-enum { indexCardSize = 128 };
-struct RelocIndexEntry {
- jint addr_offset; // offset from header_end of an addr()
- jint reloc_offset; // offset from header_end of a relocInfo (prefix)
-};
-
-
bool RelocIterator::addr_in_const() const {
const int n = CodeBuffer::SECT_CONSTS;
return section_start(n) <= addr() && addr() < section_end(n);
@@ -215,12 +190,6 @@
}
-void RelocIterator::set_limit(address limit) {
- address code_end = (address)code() + code()->size();
- assert(limit == NULL || limit <= code_end, "in bounds");
- _limit = limit;
-}
-
// All the strange bit-encodings are in here.
// The idea is to encode relocation data which are small integers
// very efficiently (a single extra halfword). Larger chunks of
@@ -622,14 +591,6 @@
}
}
-
-void metadata_Relocation::verify_metadata_relocation() {
- if (!metadata_is_immediate()) {
- // get the metadata from the pool, and re-insert it into the instruction:
- verify_value(value());
- }
-}
-
address virtual_call_Relocation::cached_value() {
assert(_cached_value != NULL && _cached_value < addr(), "must precede ic_call");
return _cached_value;
--- a/src/hotspot/share/code/relocInfo.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/code/relocInfo.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -345,7 +345,6 @@
static int offset_limit() { return (1 << offset_width) * offset_unit; }
void set_type(relocType type);
- void set_format(int format);
void remove() { set_type(none); }
@@ -422,7 +421,6 @@
// (since code is dynamically patched, we also need to dynamically update the relocation info)
// Both methods takes old_type, so it is able to performe sanity checks on the information removed.
static void change_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type, relocType new_type);
- static void remove_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type);
// Machine dependent stuff
#include CPU_HEADER(relocInfo)
@@ -531,7 +529,6 @@
short _databuf; // spare buffer for compressed data
short* _data; // pointer to the relocation's data
short _datalen; // number of halfwords in _data
- char _format; // position within the instruction
// Base addresses needed to compute targets of section_word_type relocs.
address _section_start[SECT_LIMIT];
@@ -588,23 +585,18 @@
return false;
}
- if (relocInfo::have_format) _format = current()->format();
return true;
}
// accessors
address limit() const { return _limit; }
- void set_limit(address x);
relocType type() const { return current()->type(); }
int format() const { return (relocInfo::have_format) ? current()->format() : 0; }
address addr() const { return _addr; }
CompiledMethod* code() const { return _code; }
- nmethod* code_as_nmethod() const;
short* data() const { return _data; }
int datalen() const { return _datalen; }
bool has_current() const { return _datalen >= 0; }
-
- void set_addr(address addr) { _addr = addr; }
bool addr_in_const() const;
address section_start(int n) const {
@@ -793,7 +785,6 @@
// accessors which only make sense for a bound Relocation
address addr() const { return binding()->addr(); }
CompiledMethod* code() const { return binding()->code(); }
- nmethod* code_as_nmethod() const { return binding()->code_as_nmethod(); }
bool addr_in_const() const { return binding()->addr_in_const(); }
protected:
short* data() const { return binding()->data(); }
@@ -1002,8 +993,6 @@
void fix_metadata_relocation(); // reasserts metadata value
- void verify_metadata_relocation();
-
address value() { return (address) *metadata_addr(); }
bool metadata_is_immediate() { return metadata_index() == 0; }
--- a/src/hotspot/share/code/relocInfo_ext.cpp Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2015, 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/codeCache.hpp"
-#include "code/relocInfo.hpp"
-#include "code/relocInfo_ext.hpp"
-#include "gc/shared/cardTable.hpp"
-#include "gc/shared/cardTableBarrierSet.hpp"
-#include "gc/shared/collectedHeap.hpp"
-#include "memory/universe.hpp"
-#include "runtime/os.hpp"
-#include "utilities/debug.hpp"
-#ifdef COMPILER1
-#include "c1/c1_globals.hpp"
-#endif
-
-address symbolic_Relocation::symbolic_value(symbolic_Relocation::symbolic_reference t) {
- if (Universe::heap() == NULL) {
- // the symbolic values are not needed so early
- // (and most of them lead to errors if asked too early)
- return NULL;
- }
- switch(t) {
- case symbolic_Relocation::polling_page_reference: {
- return os::get_polling_page();
- }
- case symbolic_Relocation::eden_top_reference: {
- if (!Universe::heap()->supports_inline_contig_alloc()) {
- return NULL;
- }
- return (address)Universe::heap()->top_addr();
- }
- case symbolic_Relocation::heap_end_reference: {
- if (!Universe::heap()->supports_inline_contig_alloc()) {
- return NULL;
- }
- return (address)Universe::heap()->end_addr();
- }
- case symbolic_Relocation::card_table_reference: {
- BarrierSet* bs = BarrierSet::barrier_set();
- CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
- CardTable* ct = ctbs->card_table();
- return (address)ct->byte_map_base();
- }
- case symbolic_Relocation::mark_bits_reference: {
- return (address)Universe::verify_mark_bits();
- }
- case symbolic_Relocation::mark_mask_reference: {
- return (address)Universe::verify_mark_mask();
- }
- case symbolic_Relocation::oop_bits_reference: {
- return (address)Universe::verify_oop_bits();
- }
- case symbolic_Relocation::oop_mask_reference: {
- return (address)Universe::verify_oop_mask();
- }
- case symbolic_Relocation::debug_string_reference: {
- return (address)"<Lost debug string>";
- }
- default: {
- // missing declaration
- ShouldNotReachHere();
- return NULL;
- }
- }
-}
--- a/src/hotspot/share/code/relocInfo_ext.hpp Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * 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
- * 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_CODE_RELOCINFO_EXT_HPP
-#define SHARE_CODE_RELOCINFO_EXT_HPP
-
-// symbolic_Relocation allows to anotate some addresses in the generated code.
-//
-// This class was initially defined using the last unused relocType. The
-// new version tries to limit the impact on open source code changes.
-//
-// Without compiled code support, symbolic_Relocation need not be a real
-// relocation. To avoid using the last unused relocType, the
-// symbolic_Relocation::spec(<any symbolic type>) has been replaced
-// by additional methods using directly the symbolic type.
-//
-// Note: the order of the arguments in some methods had to reversed
-// to avoid confusion between the relocType enum and the
-// symbolic_reference enum.
-class symbolic_Relocation : AllStatic {
-
- public:
- enum symbolic_reference {
- card_table_reference,
- eden_top_reference,
- heap_end_reference,
- polling_page_reference,
- mark_bits_reference,
- mark_mask_reference,
- oop_bits_reference,
- oop_mask_reference,
- debug_string_reference,
- last_symbolic_reference
- };
-
- // get the new value for a given symbolic type
- static address symbolic_value(symbolic_reference t);
-};
-
-#endif // SHARE_CODE_RELOCINFO_EXT_HPP
--- a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -636,8 +636,8 @@
}
NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
- _gc_counters = new CollectorCounters("CMS", 1);
- _cgc_counters = new CollectorCounters("CMS stop-the-world phases", 2);
+ _gc_counters = new CollectorCounters("CMS full collection pauses", 1);
+ _cgc_counters = new CollectorCounters("CMS concurrent cycle pauses", 2);
_completed_initialization = true;
_inter_sweep_timer.start(); // start of time
}
--- a/src/hotspot/share/gc/cms/parNewGeneration.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -624,7 +624,7 @@
}
ParNewGeneration::ParNewGeneration(ReservedSpace rs, size_t initial_byte_size)
- : DefNewGeneration(rs, initial_byte_size, "PCopy"),
+ : DefNewGeneration(rs, initial_byte_size, "CMS young collection pauses"),
_plab_stats("Young", YoungPLABSize, PLABWeight),
_overflow_list(NULL),
_is_alive_closure(this)
--- a/src/hotspot/share/gc/g1/collectionSetChooser.cpp Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,302 +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.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please 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/g1/collectionSetChooser.hpp"
-#include "gc/g1/g1CollectedHeap.inline.hpp"
-#include "gc/g1/heapRegionRemSet.hpp"
-#include "gc/shared/space.inline.hpp"
-#include "runtime/atomic.hpp"
-
-// Even though we don't use the GC efficiency in our heuristics as
-// much as we used to, we still order according to GC efficiency. This
-// will cause regions with a lot of live objects and large RSets to
-// end up at the end of the array. Given that we might skip collecting
-// the last few old regions, if after a few mixed GCs the remaining
-// have reclaimable bytes under a certain threshold, the hope is that
-// the ones we'll skip are ones with both large RSets and a lot of
-// live objects, not the ones with just a lot of live objects if we
-// ordered according to the amount of reclaimable bytes per region.
-static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
- if (hr1 == NULL) {
- if (hr2 == NULL) {
- return 0;
- } else {
- return 1;
- }
- } else if (hr2 == NULL) {
- return -1;
- }
-
- double gc_eff1 = hr1->gc_efficiency();
- double gc_eff2 = hr2->gc_efficiency();
- if (gc_eff1 > gc_eff2) {
- return -1;
- } if (gc_eff1 < gc_eff2) {
- return 1;
- } else {
- return 0;
- }
-}
-
-static int order_regions(HeapRegion** hr1p, HeapRegion** hr2p) {
- return order_regions(*hr1p, *hr2p);
-}
-
-CollectionSetChooser::CollectionSetChooser() :
- // The line below is the worst bit of C++ hackery I've ever written
- // (Detlefs, 11/23). You should think of it as equivalent to
- // "_regions(100, true)": initialize the growable array and inform it
- // that it should allocate its elem array(s) on the C heap.
- //
- // The first argument, however, is actually a comma expression
- // (set_allocation_type(this, C_HEAP), 100). The purpose of the
- // set_allocation_type() call is to replace the default allocation
- // type for embedded objects STACK_OR_EMBEDDED with C_HEAP. It will
- // allow to pass the assert in GenericGrowableArray() which checks
- // that a growable array object must be on C heap if elements are.
- //
- // Note: containing object is allocated on C heap since it is CHeapObj.
- //
- _regions((ResourceObj::set_allocation_type((address) &_regions,
- ResourceObj::C_HEAP),
- 100), true /* C_Heap */),
- _front(0), _end(0), _first_par_unreserved_idx(0),
- _region_live_threshold_bytes(0), _remaining_reclaimable_bytes(0) {
- _region_live_threshold_bytes = mixed_gc_live_threshold_bytes();
-}
-
-#ifndef PRODUCT
-void CollectionSetChooser::verify() {
- guarantee(_end <= regions_length(), "_end: %u regions length: %u", _end, regions_length());
- guarantee(_front <= _end, "_front: %u _end: %u", _front, _end);
- uint index = 0;
- size_t sum_of_reclaimable_bytes = 0;
- while (index < _front) {
- guarantee(regions_at(index) == NULL,
- "all entries before _front should be NULL");
- index += 1;
- }
- HeapRegion *prev = NULL;
- while (index < _end) {
- HeapRegion *curr = regions_at(index++);
- guarantee(curr != NULL, "Regions in _regions array cannot be NULL");
- guarantee(!curr->is_young(), "should not be young!");
- guarantee(!curr->is_pinned(),
- "Pinned region should not be in collection set (index %u)", curr->hrm_index());
- if (prev != NULL) {
- guarantee(order_regions(prev, curr) != 1,
- "GC eff prev: %1.4f GC eff curr: %1.4f",
- prev->gc_efficiency(), curr->gc_efficiency());
- }
- sum_of_reclaimable_bytes += curr->reclaimable_bytes();
- prev = curr;
- }
- guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
- "reclaimable bytes inconsistent, "
- "remaining: " SIZE_FORMAT " sum: " SIZE_FORMAT,
- _remaining_reclaimable_bytes, sum_of_reclaimable_bytes);
-}
-#endif // !PRODUCT
-
-void CollectionSetChooser::sort_regions() {
- // First trim any unused portion of the top in the parallel case.
- if (_first_par_unreserved_idx > 0) {
- assert(_first_par_unreserved_idx <= regions_length(),
- "Or we didn't reserved enough length");
- regions_trunc_to(_first_par_unreserved_idx);
- }
- _regions.sort(order_regions);
- assert(_end <= regions_length(), "Requirement");
-#ifdef ASSERT
- for (uint i = 0; i < _end; i++) {
- assert(regions_at(i) != NULL, "Should be true by sorting!");
- }
-#endif // ASSERT
- if (log_is_enabled(Trace, gc, liveness)) {
- G1PrintRegionLivenessInfoClosure cl("Post-Sorting");
- for (uint i = 0; i < _end; ++i) {
- HeapRegion* r = regions_at(i);
- cl.do_heap_region(r);
- }
- }
- verify();
-}
-
-void CollectionSetChooser::add_region(HeapRegion* hr) {
- assert(!hr->is_pinned(),
- "Pinned region shouldn't be added to the collection set (index %u)", hr->hrm_index());
- assert(hr->is_old(), "should be old but is %s", hr->get_type_str());
- assert(hr->rem_set()->is_complete(),
- "Trying to add region %u to the collection set with incomplete remembered set", hr->hrm_index());
- _regions.append(hr);
- _end++;
- _remaining_reclaimable_bytes += hr->reclaimable_bytes();
- hr->calc_gc_efficiency();
-}
-
-void CollectionSetChooser::push(HeapRegion* hr) {
- assert(hr != NULL, "Can't put back a NULL region");
- assert(_front >= 1, "Too many regions have been put back");
- _front--;
- regions_at_put(_front, hr);
- _remaining_reclaimable_bytes += hr->reclaimable_bytes();
-}
-
-void CollectionSetChooser::prepare_for_par_region_addition(uint n_threads,
- uint n_regions,
- uint chunk_size) {
- _first_par_unreserved_idx = 0;
- uint max_waste = n_threads * chunk_size;
- // it should be aligned with respect to chunk_size
- uint aligned_n_regions = (n_regions + chunk_size - 1) / chunk_size * chunk_size;
- assert(aligned_n_regions % chunk_size == 0, "should be aligned");
- regions_at_put_grow(aligned_n_regions + max_waste - 1, NULL);
-}
-
-uint CollectionSetChooser::claim_array_chunk(uint chunk_size) {
- uint res = (uint) Atomic::add((jint) chunk_size,
- (volatile jint*) &_first_par_unreserved_idx);
- assert(regions_length() > res + chunk_size - 1,
- "Should already have been expanded");
- return res - chunk_size;
-}
-
-void CollectionSetChooser::set_region(uint index, HeapRegion* hr) {
- assert(regions_at(index) == NULL, "precondition");
- assert(hr->is_old(), "should be old but is %s", hr->get_type_str());
- regions_at_put(index, hr);
- hr->calc_gc_efficiency();
-}
-
-void CollectionSetChooser::update_totals(uint region_num,
- size_t reclaimable_bytes) {
- // Only take the lock if we actually need to update the totals.
- if (region_num > 0) {
- assert(reclaimable_bytes > 0, "invariant");
- // We could have just used atomics instead of taking the
- // lock. However, we currently don't have an atomic add for size_t.
- MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
- _end += region_num;
- _remaining_reclaimable_bytes += reclaimable_bytes;
- } else {
- assert(reclaimable_bytes == 0, "invariant");
- }
-}
-
-void CollectionSetChooser::iterate(HeapRegionClosure* cl) {
- for (uint i = _front; i < _end; i++) {
- HeapRegion* r = regions_at(i);
- if (cl->do_heap_region(r)) {
- cl->set_incomplete();
- break;
- }
- }
-}
-
-void CollectionSetChooser::clear() {
- _regions.clear();
- _front = 0;
- _end = 0;
- _remaining_reclaimable_bytes = 0;
-}
-
-class ParKnownGarbageHRClosure: public HeapRegionClosure {
- G1CollectedHeap* _g1h;
- CSetChooserParUpdater _cset_updater;
-
-public:
- ParKnownGarbageHRClosure(CollectionSetChooser* hrSorted,
- uint chunk_size) :
- _g1h(G1CollectedHeap::heap()),
- _cset_updater(hrSorted, true /* parallel */, chunk_size) { }
-
- bool do_heap_region(HeapRegion* r) {
- // We will skip any region that's currently used as an old GC
- // alloc region (we should not consider those for collection
- // before we fill them up).
- if (_cset_updater.should_add(r) && !_g1h->is_old_gc_alloc_region(r)) {
- _cset_updater.add_region(r);
- } else if (r->is_old()) {
- // Keep remembered sets for humongous regions, otherwise clean out remembered
- // sets for old regions.
- r->rem_set()->clear(true /* only_cardset */);
- } else {
- assert(r->is_archive() || !r->is_old() || !r->rem_set()->is_tracked(),
- "Missed to clear unused remembered set of region %u (%s) that is %s",
- r->hrm_index(), r->get_type_str(), r->rem_set()->get_state_str());
- }
- return false;
- }
-};
-
-class ParKnownGarbageTask: public AbstractGangTask {
- CollectionSetChooser* _hrSorted;
- uint _chunk_size;
- G1CollectedHeap* _g1h;
- HeapRegionClaimer _hrclaimer;
-
-public:
- ParKnownGarbageTask(CollectionSetChooser* hrSorted, uint chunk_size, uint n_workers) :
- AbstractGangTask("ParKnownGarbageTask"),
- _hrSorted(hrSorted), _chunk_size(chunk_size),
- _g1h(G1CollectedHeap::heap()), _hrclaimer(n_workers) {}
-
- void work(uint worker_id) {
- ParKnownGarbageHRClosure par_known_garbage_cl(_hrSorted, _chunk_size);
- _g1h->heap_region_par_iterate_from_worker_offset(&par_known_garbage_cl, &_hrclaimer, worker_id);
- }
-};
-
-uint CollectionSetChooser::calculate_parallel_work_chunk_size(uint n_workers, uint n_regions) const {
- assert(n_workers > 0, "Active gc workers should be greater than 0");
- const uint overpartition_factor = 4;
- const uint min_chunk_size = MAX2(n_regions / n_workers, 1U);
- return MAX2(n_regions / (n_workers * overpartition_factor), min_chunk_size);
-}
-
-bool CollectionSetChooser::region_occupancy_low_enough_for_evac(size_t live_bytes) {
- return live_bytes < mixed_gc_live_threshold_bytes();
-}
-
-bool CollectionSetChooser::should_add(HeapRegion* hr) const {
- return !hr->is_young() &&
- !hr->is_pinned() &&
- region_occupancy_low_enough_for_evac(hr->live_bytes()) &&
- hr->rem_set()->is_complete();
-}
-
-void CollectionSetChooser::rebuild(WorkGang* workers, uint n_regions) {
- clear();
-
- uint n_workers = workers->active_workers();
-
- uint chunk_size = calculate_parallel_work_chunk_size(n_workers, n_regions);
- prepare_for_par_region_addition(n_workers, n_regions, chunk_size);
-
- ParKnownGarbageTask par_known_garbage_task(this, chunk_size, n_workers);
- workers->run_task(&par_known_garbage_task);
-
- sort_regions();
-}
--- a/src/hotspot/share/gc/g1/collectionSetChooser.hpp Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/*
- * 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.
- *
- */
-
-#ifndef SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
-#define SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
-
-#include "gc/g1/heapRegion.hpp"
-#include "utilities/growableArray.hpp"
-
-class CollectionSetChooser: public CHeapObj<mtGC> {
-
- GrowableArray<HeapRegion*> _regions;
-
- // Unfortunately, GrowableArray uses ints for length and indexes. To
- // avoid excessive casting in the rest of the class the following
- // wrapper methods are provided that use uints.
-
- uint regions_length() { return (uint) _regions.length(); }
- HeapRegion* regions_at(uint i) { return _regions.at((int) i); }
- void regions_at_put(uint i, HeapRegion* hr) {
- _regions.at_put((int) i, hr);
- }
- void regions_at_put_grow(uint i, HeapRegion* hr) {
- _regions.at_put_grow((int) i, hr);
- }
- void regions_trunc_to(uint i) { _regions.trunc_to((uint) i); }
-
- // The index of the next candidate old region to be considered for
- // addition to the CSet.
- uint _front;
-
- // The index of the last candidate old region
- uint _end;
-
- // Keeps track of the start of the next array chunk to be claimed by
- // parallel GC workers.
- uint _first_par_unreserved_idx;
-
- // If a region has more live bytes than this threshold, it will not
- // be added to the CSet chooser and will not be a candidate for
- // collection.
- size_t _region_live_threshold_bytes;
-
- // The sum of reclaimable bytes over all the regions in the CSet chooser.
- size_t _remaining_reclaimable_bytes;
-
- // Calculate and return chunk size (in number of regions) for parallel
- // addition of regions
- uint calculate_parallel_work_chunk_size(uint n_workers, uint n_regions) const;
-public:
-
- // Return the current candidate region to be considered for
- // collection without removing it from the CSet chooser.
- HeapRegion* peek() {
- HeapRegion* res = NULL;
- if (_front < _end) {
- res = regions_at(_front);
- assert(res != NULL, "Unexpected NULL hr in _regions at index %u", _front);
- }
- return res;
- }
-
- // Remove the given region from the CSet chooser and move to the
- // next one.
- HeapRegion* pop() {
- HeapRegion* hr = regions_at(_front);
- assert(hr != NULL, "pre-condition");
- assert(_front < _end, "pre-condition");
- regions_at_put(_front, NULL);
- assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
- "remaining reclaimable bytes inconsistent "
- "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
- hr->reclaimable_bytes(), _remaining_reclaimable_bytes);
- _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
- _front += 1;
- return hr;
- }
-
- void push(HeapRegion* hr);
-
- CollectionSetChooser();
-
- static size_t mixed_gc_live_threshold_bytes() {
- return HeapRegion::GrainBytes * (size_t) G1MixedGCLiveThresholdPercent / 100;
- }
-
- static bool region_occupancy_low_enough_for_evac(size_t live_bytes);
-
- void sort_regions();
-
- // Determine whether to add the given region to the CSet chooser or
- // not. Currently, we skip pinned regions and regions whose live
- // bytes are over the threshold. Humongous regions may be reclaimed during cleanup.
- // Regions also need a complete remembered set to be a candidate.
- bool should_add(HeapRegion* hr) const;
-
- // Returns the number candidate old regions added
- uint length() { return _end; }
-
- // Serial version.
- void add_region(HeapRegion *hr);
-
- // Must be called before calls to claim_array_chunk().
- // n_regions is the number of regions, chunk_size the chunk size.
- void prepare_for_par_region_addition(uint n_threads, uint n_regions, uint chunk_size);
- // Returns the first index in a contiguous chunk of chunk_size indexes
- // that the calling thread has reserved. These must be set by the
- // calling thread using set_region() (to NULL if necessary).
- uint claim_array_chunk(uint chunk_size);
- // Set the marked array entry at index to hr. Careful to claim the index
- // first if in parallel.
- void set_region(uint index, HeapRegion* hr);
- // Atomically increment the number of added regions by region_num
- // and the amount of reclaimable bytes by reclaimable_bytes.
- void update_totals(uint region_num, size_t reclaimable_bytes);
-
- // Iterate over all collection set candidate regions.
- void iterate(HeapRegionClosure* cl);
-
- void clear();
-
- void rebuild(WorkGang* workers, uint n_regions);
-
- // Return the number of candidate regions that remain to be collected.
- uint remaining_regions() { return _end - _front; }
-
- // Determine whether the CSet chooser has more candidate regions or not.
- bool is_empty() { return remaining_regions() == 0; }
-
- // Return the reclaimable bytes that remain to be collected on
- // all the candidate regions in the CSet chooser.
- size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
-
- // Returns true if the used portion of "_regions" is properly
- // sorted, otherwise asserts false.
- void verify() PRODUCT_RETURN;
-};
-
-class CSetChooserParUpdater : public StackObj {
-private:
- CollectionSetChooser* _chooser;
- bool _parallel;
- uint _chunk_size;
- uint _cur_chunk_idx;
- uint _cur_chunk_end;
- uint _regions_added;
- size_t _reclaimable_bytes_added;
-
-public:
- CSetChooserParUpdater(CollectionSetChooser* chooser,
- bool parallel, uint chunk_size) :
- _chooser(chooser), _parallel(parallel), _chunk_size(chunk_size),
- _cur_chunk_idx(0), _cur_chunk_end(0),
- _regions_added(0), _reclaimable_bytes_added(0) { }
-
- ~CSetChooserParUpdater() {
- if (_parallel && _regions_added > 0) {
- _chooser->update_totals(_regions_added, _reclaimable_bytes_added);
- }
- }
-
- void add_region(HeapRegion* hr) {
- if (_parallel) {
- if (_cur_chunk_idx == _cur_chunk_end) {
- _cur_chunk_idx = _chooser->claim_array_chunk(_chunk_size);
- _cur_chunk_end = _cur_chunk_idx + _chunk_size;
- }
- assert(_cur_chunk_idx < _cur_chunk_end, "invariant");
- _chooser->set_region(_cur_chunk_idx, hr);
- _cur_chunk_idx += 1;
- } else {
- _chooser->add_region(hr);
- }
- _regions_added += 1;
- _reclaimable_bytes_added += hr->reclaimable_bytes();
- }
-
- bool should_add(HeapRegion* hr) { return _chooser->should_add(hr); }
-};
-
-#endif // SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
--- a/src/hotspot/share/gc/g1/g1CollectionSet.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1CollectionSet.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
#include "gc/g1/g1CollectorState.hpp"
#include "gc/g1/g1ParScanThreadState.hpp"
#include "gc/g1/g1Policy.hpp"
@@ -44,10 +45,6 @@
return _policy->phase_times();
}
-CollectionSetChooser* G1CollectionSet::cset_chooser() {
- return _cset_chooser;
-}
-
double G1CollectionSet::predict_region_elapsed_time_ms(HeapRegion* hr) {
return _policy->predict_region_elapsed_time_ms(hr, collector_state()->in_young_only_phase());
}
@@ -55,7 +52,7 @@
G1CollectionSet::G1CollectionSet(G1CollectedHeap* g1h, G1Policy* policy) :
_g1h(g1h),
_policy(policy),
- _cset_chooser(new CollectionSetChooser()),
+ _candidates(NULL),
_eden_region_length(0),
_survivor_region_length(0),
_old_region_length(0),
@@ -80,7 +77,7 @@
FREE_C_HEAP_ARRAY(uint, _collection_set_regions);
}
free_optional_regions();
- delete _cset_chooser;
+ clear_candidates();
}
void G1CollectionSet::init_region_lengths(uint eden_cset_region_length,
@@ -120,6 +117,11 @@
}
}
+void G1CollectionSet::clear_candidates() {
+ delete _candidates;
+ _candidates = NULL;
+}
+
void G1CollectionSet::set_recorded_rs_lengths(size_t rs_lengths) {
_recorded_rs_lengths = rs_lengths;
}
@@ -439,14 +441,14 @@
}
void G1CollectionSet::add_as_old(HeapRegion* hr) {
- cset_chooser()->pop(); // already have region via peek()
+ candidates()->pop_front(); // already have region via peek()
_g1h->old_set_remove(hr);
add_old_region(hr);
}
void G1CollectionSet::add_as_optional(HeapRegion* hr) {
assert(_optional_regions != NULL, "Must not be called before array is allocated");
- cset_chooser()->pop(); // already have region via peek()
+ candidates()->pop_front(); // already have region via peek()
_g1h->old_set_remove(hr);
add_optional_region(hr);
}
@@ -480,7 +482,7 @@
uint expensive_region_num = 0;
if (collector_state()->in_mixed_phase()) {
- cset_chooser()->verify();
+ candidates()->verify();
const uint min_old_cset_length = _policy->calc_min_old_cset_length();
const uint max_old_cset_length = MAX2(min_old_cset_length, _policy->calc_max_old_cset_length());
bool check_time_remaining = _policy->adaptive_young_list_length();
@@ -490,7 +492,7 @@
"time remaining %1.2fms, optional threshold %1.2fms",
min_old_cset_length, max_old_cset_length, time_remaining_ms, optional_threshold_ms);
- HeapRegion* hr = cset_chooser()->peek();
+ HeapRegion* hr = candidates()->peek_front();
while (hr != NULL) {
if (old_region_length() + optional_region_length() >= max_old_cset_length) {
// Added maximum number of old regions to the CSet.
@@ -502,7 +504,7 @@
// Stop adding regions if the remaining reclaimable space is
// not above G1HeapWastePercent.
- size_t reclaimable_bytes = cset_chooser()->remaining_reclaimable_bytes();
+ size_t reclaimable_bytes = candidates()->remaining_reclaimable_bytes();
double reclaimable_percent = _policy->reclaimable_bytes_percent(reclaimable_bytes);
double threshold = (double) G1HeapWastePercent;
if (reclaimable_percent <= threshold) {
@@ -551,13 +553,13 @@
break;
}
}
- hr = cset_chooser()->peek();
+ hr = candidates()->peek_front();
}
if (hr == NULL) {
log_debug(gc, ergo, cset)("Finish adding old regions to CSet (candidate old regions not available)");
}
- cset_chooser()->verify();
+ candidates()->verify();
}
stop_incremental_building();
@@ -630,15 +632,15 @@
G1OptionalCSet::~G1OptionalCSet() {
G1CollectedHeap* g1h = G1CollectedHeap::heap();
while (!is_empty()) {
- // We want to return regions not evacuated to the
- // chooser in reverse order to maintain the old order.
+ // We want to return regions not evacuated to the collection set candidates
+ // in reverse order to maintain the old order.
HeapRegion* hr = _cset->remove_last_optional_region();
assert(hr != NULL, "Should be valid region left");
_pset->record_unused_optional_region(hr);
g1h->old_set_add(hr);
g1h->clear_in_cset(hr);
hr->set_index_in_opt_cset(InvalidCSetIndex);
- _cset->cset_chooser()->push(hr);
+ _cset->candidates()->push_front(hr);
}
_cset->free_optional_regions();
}
--- a/src/hotspot/share/gc/g1/g1CollectionSet.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -25,23 +25,25 @@
#ifndef SHARE_GC_G1_G1COLLECTIONSET_HPP
#define SHARE_GC_G1_G1COLLECTIONSET_HPP
-#include "gc/g1/collectionSetChooser.hpp"
#include "utilities/debug.hpp"
#include "utilities/globalDefinitions.hpp"
class G1CollectedHeap;
+class G1CollectionSetCandidates;
class G1CollectorState;
class G1GCPhaseTimes;
class G1ParScanThreadStateSet;
class G1Policy;
class G1SurvivorRegions;
class HeapRegion;
+class HeapRegionClosure;
class G1CollectionSet {
G1CollectedHeap* _g1h;
G1Policy* _policy;
- CollectionSetChooser* _cset_chooser;
+ // All old gen collection set candidate regions for the current mixed gc phase.
+ G1CollectionSetCandidates* _candidates;
uint _eden_region_length;
uint _survivor_region_length;
@@ -128,7 +130,13 @@
void initialize_optional(uint max_length);
void free_optional_regions();
- CollectionSetChooser* cset_chooser();
+ void clear_candidates();
+
+ void set_candidates(G1CollectionSetCandidates* candidates) {
+ assert(_candidates == NULL, "Trying to replace collection set candidates.");
+ _candidates = candidates;
+ }
+ G1CollectionSetCandidates* candidates() { return _candidates; }
void init_region_lengths(uint eden_cset_region_length,
uint survivor_cset_region_length);
@@ -253,8 +261,8 @@
_current_limit(0),
_prepare_failed(false),
_evacuation_failed(false) { }
- // The destructor returns regions to the cset-chooser and
- // frees the optional structure in the cset.
+ // The destructor returns regions to the collection set candidates set and
+ // frees the optional structure in the collection set.
~G1OptionalCSet();
uint current_index() { return _current_index; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please 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/g1/g1CollectionSetCandidates.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
+#include "gc/g1/heapRegion.inline.hpp"
+
+HeapRegion* G1CollectionSetCandidates::pop_front() {
+ assert(_front_idx < _num_regions, "pre-condition");
+ HeapRegion* hr = _regions[_front_idx];
+ assert(hr != NULL, "pre-condition");
+ _regions[_front_idx] = NULL;
+ assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
+ "Remaining reclaimable bytes inconsistent "
+ "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
+ hr->reclaimable_bytes(), _remaining_reclaimable_bytes);
+ _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
+ _front_idx++;
+ return hr;
+}
+
+void G1CollectionSetCandidates::push_front(HeapRegion* hr) {
+ assert(hr != NULL, "Can't put back a NULL region");
+ assert(_front_idx >= 1, "Too many regions have been put back.");
+ _front_idx--;
+ _regions[_front_idx] = hr;
+ _remaining_reclaimable_bytes += hr->reclaimable_bytes();
+}
+
+void G1CollectionSetCandidates::iterate(HeapRegionClosure* cl) {
+ for (uint i = _front_idx; i < _num_regions; i++) {
+ HeapRegion* r = _regions[i];
+ if (cl->do_heap_region(r)) {
+ cl->set_incomplete();
+ break;
+ }
+ }
+}
+
+#ifndef PRODUCT
+void G1CollectionSetCandidates::verify() const {
+ guarantee(_front_idx <= _num_regions, "Index: %u Num_regions: %u", _front_idx, _num_regions);
+ uint idx = 0;
+ size_t sum_of_reclaimable_bytes = 0;
+ while (idx < _front_idx) {
+ guarantee(_regions[idx] == NULL, "All entries before _front_idx %u should be NULL, but %u is not",
+ _front_idx, idx);
+ idx++;
+ }
+ HeapRegion *prev = NULL;
+ for (; idx < _num_regions; idx++) {
+ HeapRegion *cur = _regions[idx];
+ guarantee(cur != NULL, "Regions after _front_idx %u cannot be NULL but %u is", _front_idx, idx);
+ guarantee(G1CollectionSetChooser::should_add(cur), "Region %u should be eligible for addition.", cur->hrm_index());
+ if (prev != NULL) {
+ guarantee(prev->gc_efficiency() >= cur->gc_efficiency(),
+ "GC efficiency for region %u: %1.4f smaller than for region %u: %1.4f",
+ prev->hrm_index(), prev->gc_efficiency(), cur->hrm_index(), cur->gc_efficiency());
+ }
+ sum_of_reclaimable_bytes += cur->reclaimable_bytes();
+ prev = cur;
+ }
+ guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
+ "Inconsistent remaining_reclaimable bytes, remaining " SIZE_FORMAT " calculated " SIZE_FORMAT,
+ _remaining_reclaimable_bytes, sum_of_reclaimable_bytes);
+}
+#endif // !PRODUCT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP
+#define SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP
+
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/shared/workgroup.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/globals.hpp"
+
+class HeapRegion;
+class HeapRegionClosure;
+
+// Set of collection set candidates, i.e. all old gen regions we consider worth
+// collecting in the remainder of the current mixed phase. Regions are sorted by decreasing
+// gc efficiency.
+// Maintains a cursor into the list that specifies the next collection set candidate
+// to put into the current collection set.
+class G1CollectionSetCandidates : public CHeapObj<mtGC> {
+ HeapRegion** _regions;
+ uint _num_regions; // Total number of regions in the collection set candidate set.
+
+ // The sum of bytes that can be reclaimed in the remaining set of collection
+ // set candidates.
+ size_t _remaining_reclaimable_bytes;
+ // The index of the next candidate old region to be considered for
+ // addition to the current collection set.
+ uint _front_idx;
+
+public:
+ G1CollectionSetCandidates(HeapRegion** regions, uint num_regions, size_t remaining_reclaimable_bytes) :
+ _regions(regions),
+ _num_regions(num_regions),
+ _remaining_reclaimable_bytes(remaining_reclaimable_bytes),
+ _front_idx(0) { }
+
+ ~G1CollectionSetCandidates() {
+ FREE_C_HEAP_ARRAY(HeapRegion*, _regions);
+ }
+
+ // Returns the total number of collection set candidate old regions added.
+ uint num_regions() { return _num_regions; }
+
+ // Return the candidate region at the cursor position to be considered for collection without
+ // removing it.
+ HeapRegion* peek_front() {
+ HeapRegion* res = NULL;
+ if (_front_idx < _num_regions) {
+ res = _regions[_front_idx];
+ assert(res != NULL, "Unexpected NULL HeapRegion at index %u", _front_idx);
+ }
+ return res;
+ }
+
+ // Remove the given region from the candidates set and move the cursor to the next one.
+ HeapRegion* pop_front();
+
+ // Add the given HeapRegion to the front of the collection set candidate set again.
+ void push_front(HeapRegion* hr);
+
+ // Iterate over all remaining collection set candidate regions.
+ void iterate(HeapRegionClosure* cl);
+
+ // Return the number of candidate regions remaining.
+ uint num_remaining() { return _num_regions - _front_idx; }
+
+ bool is_empty() { return num_remaining() == 0; }
+
+ // Return the amount of reclaimable bytes that may be collected by the remaining
+ // candidate regions.
+ size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
+
+ void verify() const PRODUCT_RETURN;
+};
+
+#endif /* SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,270 @@
+/*
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1CollectedHeap.inline.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
+#include "gc/g1/heapRegionRemSet.hpp"
+#include "gc/shared/space.inline.hpp"
+#include "runtime/atomic.hpp"
+#include "utilities/quickSort.hpp"
+
+// Order regions according to GC efficiency. This will cause regions with a lot
+// of live objects and large remembered sets to end up at the end of the array.
+// Given that we might skip collecting the last few old regions, if after a few
+// mixed GCs the remaining have reclaimable bytes under a certain threshold, the
+// hope is that the ones we'll skip are ones with both large remembered sets and
+// a lot of live objects, not the ones with just a lot of live objects if we
+// ordered according to the amount of reclaimable bytes per region.
+static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
+ // Make sure that NULL entries are moved to the end.
+ if (hr1 == NULL) {
+ if (hr2 == NULL) {
+ return 0;
+ } else {
+ return 1;
+ }
+ } else if (hr2 == NULL) {
+ return -1;
+ }
+
+ double gc_eff1 = hr1->gc_efficiency();
+ double gc_eff2 = hr2->gc_efficiency();
+
+ if (gc_eff1 > gc_eff2) {
+ return -1;
+ } if (gc_eff1 < gc_eff2) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+// Determine collection set candidates: For all regions determine whether they
+// should be a collection set candidates, calculate their efficiency, sort and
+// return them as G1CollectionSetCandidates instance.
+// Threads calculate the GC efficiency of the regions they get to process, and
+// put them into some work area unsorted. At the end the array is sorted and
+// copied into the G1CollectionSetCandidates instance; the caller will be the new
+// owner of this object.
+class G1BuildCandidateRegionsTask : public AbstractGangTask {
+
+ // Work area for building the set of collection set candidates. Contains references
+ // to heap regions with their GC efficiencies calculated. To reduce contention
+ // on claiming array elements, worker threads claim parts of this array in chunks;
+ // Array elements may be NULL as threads might not get enough regions to fill
+ // up their chunks completely.
+ // Final sorting will remove them.
+ class G1BuildCandidateArray : public StackObj {
+
+ uint const _max_size;
+ uint const _chunk_size;
+
+ HeapRegion** _data;
+
+ uint volatile _cur_claim_idx;
+
+ // Calculates the maximum array size that will be used.
+ static uint required_array_size(uint num_regions, uint chunk_size, uint num_workers) {
+ uint const max_waste = num_workers * chunk_size;
+ // The array should be aligned with respect to chunk_size.
+ uint const aligned_num_regions = ((num_regions + chunk_size - 1) / chunk_size) * chunk_size;
+
+ return aligned_num_regions + max_waste;
+ }
+
+ public:
+ G1BuildCandidateArray(uint max_num_regions, uint chunk_size, uint num_workers) :
+ _max_size(required_array_size(max_num_regions, chunk_size, num_workers)),
+ _chunk_size(chunk_size),
+ _data(NEW_C_HEAP_ARRAY(HeapRegion*, _max_size, mtGC)),
+ _cur_claim_idx(0) {
+ for (uint i = 0; i < _max_size; i++) {
+ _data[i] = NULL;
+ }
+ }
+
+ ~G1BuildCandidateArray() {
+ FREE_C_HEAP_ARRAY(HeapRegion*, _data);
+ }
+
+ // Claim a new chunk, returning its bounds [from, to[.
+ void claim_chunk(uint& from, uint& to) {
+ uint result = Atomic::add(_chunk_size, &_cur_claim_idx);
+ assert(_max_size > result - 1,
+ "Array too small, is %u should be %u with chunk size %u.",
+ _max_size, result, _chunk_size);
+ from = result - _chunk_size;
+ to = result;
+ }
+
+ // Set element in array.
+ void set(uint idx, HeapRegion* hr) {
+ assert(idx < _max_size, "Index %u out of bounds %u", idx, _max_size);
+ assert(_data[idx] == NULL, "Value must not have been set.");
+ _data[idx] = hr;
+ }
+
+ void sort_and_copy_into(HeapRegion** dest, uint num_regions) {
+ if (_cur_claim_idx == 0) {
+ return;
+ }
+ for (uint i = _cur_claim_idx; i < _max_size; i++) {
+ assert(_data[i] == NULL, "must be");
+ }
+ QuickSort::sort(_data, _cur_claim_idx, order_regions, true);
+ for (uint i = num_regions; i < _max_size; i++) {
+ assert(_data[i] == NULL, "must be");
+ }
+ for (uint i = 0; i < num_regions; i++) {
+ dest[i] = _data[i];
+ }
+ }
+ };
+
+ // Per-region closure. In addition to determining whether a region should be
+ // added to the candidates, and calculating those regions' gc efficiencies, also
+ // gather additional statistics.
+ class G1BuildCandidateRegionsClosure : public HeapRegionClosure {
+ G1BuildCandidateArray* _array;
+
+ uint _cur_chunk_idx;
+ uint _cur_chunk_end;
+
+ uint _regions_added;
+ size_t _reclaimable_bytes_added;
+
+ void add_region(HeapRegion* hr) {
+ if (_cur_chunk_idx == _cur_chunk_end) {
+ _array->claim_chunk(_cur_chunk_idx, _cur_chunk_end);
+ }
+ assert(_cur_chunk_idx < _cur_chunk_end, "Must be");
+
+ hr->calc_gc_efficiency();
+ _array->set(_cur_chunk_idx, hr);
+
+ _cur_chunk_idx++;
+
+ _regions_added++;
+ _reclaimable_bytes_added += hr->reclaimable_bytes();
+ }
+
+ bool should_add(HeapRegion* hr) { return G1CollectionSetChooser::should_add(hr); }
+
+ public:
+ G1BuildCandidateRegionsClosure(G1BuildCandidateArray* array) :
+ _array(array),
+ _cur_chunk_idx(0),
+ _cur_chunk_end(0),
+ _regions_added(0),
+ _reclaimable_bytes_added(0) { }
+
+ bool do_heap_region(HeapRegion* r) {
+ // We will skip any region that's currently used as an old GC
+ // alloc region (we should not consider those for collection
+ // before we fill them up).
+ if (should_add(r) && !G1CollectedHeap::heap()->is_old_gc_alloc_region(r)) {
+ add_region(r);
+ } else if (r->is_old()) {
+ // Keep remembered sets for humongous regions, otherwise clean out remembered
+ // sets for old regions.
+ r->rem_set()->clear(true /* only_cardset */);
+ } else {
+ assert(r->is_archive() || !r->is_old() || !r->rem_set()->is_tracked(),
+ "Missed to clear unused remembered set of region %u (%s) that is %s",
+ r->hrm_index(), r->get_type_str(), r->rem_set()->get_state_str());
+ }
+ return false;
+ }
+
+ uint regions_added() const { return _regions_added; }
+ size_t reclaimable_bytes_added() const { return _reclaimable_bytes_added; }
+ };
+
+ G1CollectedHeap* _g1h;
+ HeapRegionClaimer _hrclaimer;
+
+ uint volatile _num_regions_added;
+ size_t volatile _reclaimable_bytes_added;
+
+ G1BuildCandidateArray _result;
+
+ void update_totals(uint num_regions, size_t reclaimable_bytes) {
+ if (num_regions > 0) {
+ assert(reclaimable_bytes > 0, "invariant");
+ Atomic::add(num_regions, &_num_regions_added);
+ Atomic::add(reclaimable_bytes, &_reclaimable_bytes_added);
+ } else {
+ assert(reclaimable_bytes == 0, "invariant");
+ }
+ }
+
+public:
+ G1BuildCandidateRegionsTask(uint max_num_regions, uint chunk_size, uint num_workers) :
+ AbstractGangTask("G1 Build Candidate Regions"),
+ _g1h(G1CollectedHeap::heap()),
+ _hrclaimer(num_workers),
+ _num_regions_added(0),
+ _reclaimable_bytes_added(0),
+ _result(max_num_regions, chunk_size, num_workers) { }
+
+ void work(uint worker_id) {
+ G1BuildCandidateRegionsClosure cl(&_result);
+ _g1h->heap_region_par_iterate_from_worker_offset(&cl, &_hrclaimer, worker_id);
+ update_totals(cl.regions_added(), cl.reclaimable_bytes_added());
+ }
+
+ G1CollectionSetCandidates* get_sorted_candidates() {
+ HeapRegion** regions = NEW_C_HEAP_ARRAY(HeapRegion*, _num_regions_added, mtGC);
+ _result.sort_and_copy_into(regions, _num_regions_added);
+ return new G1CollectionSetCandidates(regions,
+ _num_regions_added,
+ _reclaimable_bytes_added);
+ }
+};
+
+uint G1CollectionSetChooser::calculate_work_chunk_size(uint num_workers, uint num_regions) {
+ assert(num_workers > 0, "Active gc workers should be greater than 0");
+ return MAX2(num_regions / num_workers, 1U);
+}
+
+bool G1CollectionSetChooser::should_add(HeapRegion* hr) {
+ return !hr->is_young() &&
+ !hr->is_pinned() &&
+ region_occupancy_low_enough_for_evac(hr->live_bytes()) &&
+ hr->rem_set()->is_complete();
+}
+
+G1CollectionSetCandidates* G1CollectionSetChooser::build(WorkGang* workers, uint max_num_regions) {
+ uint num_workers = workers->active_workers();
+ uint chunk_size = calculate_work_chunk_size(num_workers, max_num_regions);
+
+ G1BuildCandidateRegionsTask cl(max_num_regions, chunk_size, num_workers);
+ workers->run_task(&cl, num_workers);
+
+ G1CollectionSetCandidates* result = cl.get_sorted_candidates();
+ result->verify();
+ return result;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
+#define SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
+
+#include "gc/g1/heapRegion.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/globals.hpp"
+
+class G1CollectionSetCandidates;
+class WorkGang;
+
+// Helper class to calculate collection set candidates, and containing some related
+// methods.
+class G1CollectionSetChooser : public AllStatic {
+ static uint calculate_work_chunk_size(uint num_workers, uint num_regions);
+public:
+
+ static size_t mixed_gc_live_threshold_bytes() {
+ return HeapRegion::GrainBytes * (size_t) G1MixedGCLiveThresholdPercent / 100;
+ }
+
+ static bool region_occupancy_low_enough_for_evac(size_t live_bytes) {
+ return live_bytes < mixed_gc_live_threshold_bytes();
+ }
+
+ // Determine whether to add the given region to the collection set candidates or
+ // not. Currently, we skip pinned regions and regions whose live
+ // bytes are over the threshold. Humongous regions may be reclaimed during cleanup.
+ // Regions also need a complete remembered set to be a candidate.
+ static bool should_add(HeapRegion* hr);
+
+ // Build and return set of collection set candidates sorted by decreasing gc
+ // efficiency.
+ static G1CollectionSetCandidates* build(WorkGang* workers, uint max_num_regions);
+};
+
+#endif // SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
--- a/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -119,15 +119,15 @@
// name "collector.0". In a generational collector this would be the
// young generation collection.
_incremental_collection_counters =
- new CollectorCounters("G1 incremental collections", 0);
+ new CollectorCounters("G1 young collection pauses", 0);
// name "collector.1". In a generational collector this would be the
// old generation collection.
_full_collection_counters =
- new CollectorCounters("G1 stop-the-world full collections", 1);
+ new CollectorCounters("G1 full collection pauses", 1);
// name "collector.2". In a generational collector this would be the
// STW phases in concurrent collection.
_conc_collection_counters =
- new CollectorCounters("G1 stop-the-world phases", 2);
+ new CollectorCounters("G1 concurrent cycle pauses", 2);
// "Generation" and "Space" counters.
//
--- a/src/hotspot/share/gc/g1/g1Policy.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1Policy.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -26,9 +26,11 @@
#include "gc/g1/g1Analytics.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1CollectionSet.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
#include "gc/g1/g1ConcurrentMark.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/g1/g1ConcurrentRefine.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
#include "gc/g1/g1HeterogeneousHeapPolicy.hpp"
#include "gc/g1/g1HotCardCache.hpp"
#include "gc/g1/g1IHOPControl.hpp"
@@ -438,7 +440,7 @@
// Release the future to-space so that it is available for compaction into.
collector_state()->set_in_young_only_phase(false);
collector_state()->set_in_full_gc(true);
- cset_chooser()->clear();
+ _collection_set->clear_candidates();
}
void G1Policy::record_full_collection_end() {
@@ -546,10 +548,6 @@
return other_time_ms(pause_time_ms) - phase_times()->total_free_cset_time_ms();
}
-CollectionSetChooser* G1Policy::cset_chooser() const {
- return _collection_set->cset_chooser();
-}
-
bool G1Policy::about_to_start_mixed_phase() const {
return _g1h->concurrent_mark()->cm_thread()->during_cycle() || collector_state()->in_young_gc_before_mixed();
}
@@ -773,8 +771,6 @@
_g1h->concurrent_refine()->adjust(average_time_ms(G1GCPhaseTimes::UpdateRS),
phase_times()->sum_thread_work_items(G1GCPhaseTimes::UpdateRS),
update_rs_time_goal_ms);
-
- cset_chooser()->verify();
}
G1IHOPControl* G1Policy::create_ihop_control(const G1Predictions* predictor){
@@ -1032,7 +1028,8 @@
}
void G1Policy::record_concurrent_mark_cleanup_end() {
- cset_chooser()->rebuild(_g1h->workers(), _g1h->num_regions());
+ G1CollectionSetCandidates* candidates = G1CollectionSetChooser::build(_g1h->workers(), _g1h->num_regions());
+ _collection_set->set_candidates(candidates);
bool mixed_gc_pending = next_gc_should_be_mixed("request mixed gcs", "request young-only gcs");
if (!mixed_gc_pending) {
@@ -1063,10 +1060,10 @@
void G1Policy::clear_collection_set_candidates() {
// Clear remembered sets of remaining candidate regions and the actual candidate
- // list.
+ // set.
G1ClearCollectionSetCandidateRemSets cl;
- cset_chooser()->iterate(&cl);
- cset_chooser()->clear();
+ _collection_set->candidates()->iterate(&cl);
+ _collection_set->clear_candidates();
}
void G1Policy::maybe_start_marking() {
@@ -1132,22 +1129,24 @@
bool G1Policy::next_gc_should_be_mixed(const char* true_action_str,
const char* false_action_str) const {
- if (cset_chooser()->is_empty()) {
+ G1CollectionSetCandidates* candidates = _collection_set->candidates();
+
+ if (candidates->is_empty()) {
log_debug(gc, ergo)("%s (candidate old regions not available)", false_action_str);
return false;
}
// Is the amount of uncollected reclaimable space above G1HeapWastePercent?
- size_t reclaimable_bytes = cset_chooser()->remaining_reclaimable_bytes();
+ size_t reclaimable_bytes = candidates->remaining_reclaimable_bytes();
double reclaimable_percent = reclaimable_bytes_percent(reclaimable_bytes);
double threshold = (double) G1HeapWastePercent;
if (reclaimable_percent <= threshold) {
log_debug(gc, ergo)("%s (reclaimable percentage not over threshold). candidate old regions: %u reclaimable: " SIZE_FORMAT " (%1.2f) threshold: " UINTX_FORMAT,
- false_action_str, cset_chooser()->remaining_regions(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
+ false_action_str, candidates->num_remaining(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
return false;
}
log_debug(gc, ergo)("%s (candidate old regions available). candidate old regions: %u reclaimable: " SIZE_FORMAT " (%1.2f) threshold: " UINTX_FORMAT,
- true_action_str, cset_chooser()->remaining_regions(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
+ true_action_str, candidates->num_remaining(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
return true;
}
@@ -1159,10 +1158,10 @@
// maximum desired number of mixed GCs.
//
// The calculation is based on the number of marked regions we added
- // to the CSet chooser in the first place, not how many remain, so
+ // to the CSet candidates in the first place, not how many remain, so
// that the result is the same during all mixed GCs that follow a cycle.
- const size_t region_num = (size_t) cset_chooser()->length();
+ const size_t region_num = _collection_set->candidates()->num_regions();
const size_t gc_num = (size_t) MAX2(G1MixedGCCountTarget, (uintx) 1);
size_t result = region_num / gc_num;
// emulate ceiling
--- a/src/hotspot/share/gc/g1/g1Policy.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1Policy.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -44,7 +44,7 @@
class HeapRegion;
class G1CollectionSet;
-class CollectionSetChooser;
+class G1CollectionSetChooser;
class G1IHOPControl;
class G1Analytics;
class G1SurvivorRegions;
@@ -176,7 +176,7 @@
double non_young_other_time_ms() const;
double constant_other_time_ms(double pause_time_ms) const;
- CollectionSetChooser* cset_chooser() const;
+ G1CollectionSetChooser* cset_chooser() const;
// The number of bytes copied during the GC.
size_t _bytes_copied_during_gc;
--- a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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 @@
*/
#include "precompiled.hpp"
-#include "gc/g1/collectionSetChooser.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
#include "gc/g1/g1RemSetTrackingPolicy.hpp"
#include "gc/g1/heapRegion.inline.hpp"
#include "gc/g1/heapRegionRemSet.hpp"
@@ -126,7 +126,7 @@
// - Otherwise only add those old gen regions which occupancy is low enough that there
// is a chance that we will ever evacuate them in the mixed gcs.
if ((total_live_bytes > 0) &&
- CollectionSetChooser::region_occupancy_low_enough_for_evac(total_live_bytes) &&
+ G1CollectionSetChooser::region_occupancy_low_enough_for_evac(total_live_bytes) &&
!r->rem_set()->is_tracked()) {
r->rem_set()->set_state_updating();
--- a/src/hotspot/share/gc/g1/heapRegion.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/g1/heapRegion.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -547,7 +547,7 @@
}
void calc_gc_efficiency(void);
- double gc_efficiency() { return _gc_efficiency;}
+ double gc_efficiency() const { return _gc_efficiency;}
uint index_in_opt_cset() const { return _index_in_opt_cset; }
void set_index_in_opt_cset(uint index) { _index_in_opt_cset = index; }
@@ -705,7 +705,7 @@
class HeapRegionClosure : public StackObj {
friend class HeapRegionManager;
friend class G1CollectionSet;
- friend class CollectionSetChooser;
+ friend class G1CollectionSetCandidates;
bool _is_complete;
void set_incomplete() { _is_complete = false; }
--- a/src/hotspot/share/gc/parallel/psMarkSweep.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psMarkSweep.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -72,7 +72,7 @@
void PSMarkSweep::initialize() {
_span_based_discoverer.set_span(ParallelScavengeHeap::heap()->reserved_region());
set_ref_processor(new ReferenceProcessor(&_span_based_discoverer)); // a vanilla ref proc
- _counters = new CollectorCounters("PSMarkSweep", 1);
+ _counters = new CollectorCounters("Serial full collection pauses", 1);
MarkSweep::initialize();
}
--- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -883,7 +883,7 @@
new PCReferenceProcessor(&_span_based_discoverer,
&_is_alive_closure); // non-header is alive closure
- _counters = new CollectorCounters("PSParallelCompact", 1);
+ _counters = new CollectorCounters("Parallel full collection pauses", 1);
// Initialize static fields in ParCompactionManager.
ParCompactionManager::initialize(mark_bitmap());
--- a/src/hotspot/share/gc/parallel/psScavenge.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -754,5 +754,5 @@
// Cache the cardtable
_card_table = heap->card_table();
- _counters = new CollectorCounters("PSScavenge", 0);
+ _counters = new CollectorCounters("Parallel young collection pauses", 0);
}
--- a/src/hotspot/share/gc/serial/defNewGeneration.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -192,7 +192,7 @@
public:
DefNewGeneration(ReservedSpace rs, size_t initial_byte_size,
- const char* policy="Copy");
+ const char* policy="Serial young collection pauses");
virtual void ref_processor_init();
--- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -65,7 +65,7 @@
_gen_counters = new GenerationCounters(gen_name, 1, 1,
gcp->min_old_size(), gcp->max_old_size(), &_virtual_space);
- _gc_counters = new CollectorCounters("MSC", 1);
+ _gc_counters = new CollectorCounters("Serial full collection pauses", 1);
_space_counters = new CSpaceCounters(gen_name, 0,
_virtual_space.reserved_size(),
--- a/src/hotspot/share/gc/shared/weakProcessor.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessor.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -35,19 +35,23 @@
#include "utilities/macros.hpp"
void WeakProcessor::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive) {
- StringTable::reset_dead_counter();
- CountingIsAliveClosure<BoolObjectClosure> cl(is_alive);
FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
if (WeakProcessorPhases::is_serial(phase)) {
- WeakProcessorPhases::processor(phase)(&cl, keep_alive);
+ WeakProcessorPhases::processor(phase)(is_alive, keep_alive);
} else {
- WeakProcessorPhases::oop_storage(phase)->weak_oops_do(&cl, keep_alive);
- }
- if (WeakProcessorPhases::is_stringtable(phase)) {
- StringTable::inc_dead_counter(cl.num_dead());
+ if (WeakProcessorPhases::is_stringtable(phase)) {
+ StringTable::reset_dead_counter();
+
+ CountingSkippedIsAliveClosure<BoolObjectClosure, OopClosure> cl(is_alive, keep_alive);
+ WeakProcessorPhases::oop_storage(phase)->oops_do(&cl);
+
+ StringTable::inc_dead_counter(cl.num_dead() + cl.num_skipped());
+ StringTable::finish_dead_counter();
+ } else {
+ WeakProcessorPhases::oop_storage(phase)->weak_oops_do(is_alive, keep_alive);
+ }
}
}
- StringTable::finish_dead_counter();
}
void WeakProcessor::oops_do(OopClosure* closure) {
--- a/src/hotspot/share/gc/shared/weakProcessor.inline.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/shared/weakProcessor.inline.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -37,15 +37,15 @@
class BoolObjectClosure;
class OopClosure;
-template<typename T>
+template<typename IsAlive>
class CountingIsAliveClosure : public BoolObjectClosure {
- T* _inner;
+ IsAlive* _inner;
size_t _num_dead;
size_t _num_total;
public:
- CountingIsAliveClosure(T* cl) : _inner(cl), _num_dead(0), _num_total(0) { }
+ CountingIsAliveClosure(IsAlive* cl) : _inner(cl), _num_dead(0), _num_total(0) { }
virtual bool do_object_b(oop obj) {
bool result = _inner->do_object_b(obj);
@@ -58,6 +58,33 @@
size_t num_total() const { return _num_total; }
};
+template <typename IsAlive, typename KeepAlive>
+class CountingSkippedIsAliveClosure : public Closure {
+ CountingIsAliveClosure<IsAlive> _counting_is_alive;
+ KeepAlive* _keep_alive;
+
+ size_t _num_skipped;
+
+public:
+ CountingSkippedIsAliveClosure(IsAlive* is_alive, KeepAlive* keep_alive) :
+ _counting_is_alive(is_alive), _keep_alive(keep_alive), _num_skipped(0) { }
+
+ void do_oop(oop* p) {
+ oop obj = *p;
+ if (obj == NULL) {
+ _num_skipped++;
+ } else if (_counting_is_alive.do_object_b(obj)) {
+ _keep_alive->do_oop(p);
+ } else {
+ *p = NULL;
+ }
+ }
+
+ size_t num_dead() const { return _counting_is_alive.num_dead(); }
+ size_t num_skipped() const { return _num_skipped; }
+ size_t num_total() const { return _counting_is_alive.num_total() + num_skipped(); }
+};
+
template<typename IsAlive, typename KeepAlive>
void WeakProcessor::Task::work(uint worker_id,
IsAlive* is_alive,
@@ -67,8 +94,8 @@
worker_id, _nworkers);
FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
- CountingIsAliveClosure<IsAlive> cl(is_alive);
if (WeakProcessorPhases::is_serial(phase)) {
+ CountingIsAliveClosure<IsAlive> cl(is_alive);
uint serial_index = WeakProcessorPhases::serial_index(phase);
if (_serial_phases_done.try_claim_task(serial_index)) {
WeakProcessorPhaseTimeTracker pt(_phase_times, phase);
@@ -78,15 +105,16 @@
}
}
} else {
+ CountingSkippedIsAliveClosure<IsAlive, KeepAlive> cl(is_alive, keep_alive);
WeakProcessorPhaseTimeTracker pt(_phase_times, phase, worker_id);
uint storage_index = WeakProcessorPhases::oop_storage_index(phase);
- _storage_states[storage_index].weak_oops_do(&cl, keep_alive);
+ _storage_states[storage_index].oops_do(&cl);
if (_phase_times != NULL) {
_phase_times->record_worker_items(worker_id, phase, cl.num_dead(), cl.num_total());
}
- }
- if (WeakProcessorPhases::is_stringtable(phase)) {
- StringTable::inc_dead_counter(cl.num_dead());
+ if (WeakProcessorPhases::is_stringtable(phase)) {
+ StringTable::inc_dead_counter(cl.num_dead() + cl.num_skipped());
+ }
}
}
--- a/src/hotspot/share/gc/z/zServiceability.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/gc/z/zServiceability.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -72,8 +72,8 @@
max_capacity /* max_capacity */,
min_capacity /* init_capacity */),
// gc.collector.2
- _collector_counters("stop-the-world" /* name */,
- 2 /* ordinal */) {}
+ _collector_counters("Z concurrent cycle pauses" /* name */,
+ 2 /* ordinal */) {}
CollectorCounters* ZServiceabilityCounters::collector_counters() {
return &_collector_counters;
--- a/src/hotspot/share/memory/allocation.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/memory/allocation.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -169,8 +169,7 @@
ResourceObj* resobj = (ResourceObj *)res;
resobj->_allocation_t[0] = ~(allocation + type);
if (type != STACK_OR_EMBEDDED) {
- // Called from operator new() and CollectionSetChooser(),
- // set verification value.
+ // Called from operator new(), set verification value.
resobj->_allocation_t[1] = (uintptr_t)&(resobj->_allocation_t[1]) + type;
}
}
--- a/src/hotspot/share/opto/c2_globals.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/c2_globals.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -509,9 +509,6 @@
product(bool, EliminateAutoBox, true, \
"Control optimizations for autobox elimination") \
\
- diagnostic(bool, UseImplicitStableValues, true, \
- "Mark well-known stable fields as such (e.g. String.value)") \
- \
product(intx, AutoBoxCacheMax, 128, \
"Sets max value cached by the java.lang.Integer autobox cache") \
range(0, max_jint) \
--- a/src/hotspot/share/opto/escape.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/escape.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -3010,6 +3010,11 @@
n->raise_bottom_type(tinst);
igvn->hash_insert(n);
record_for_optimizer(n);
+ // Allocate an alias index for the header fields. Accesses to
+ // the header emitted during macro expansion wouldn't have
+ // correct memory state otherwise.
+ _compile->get_alias_index(tinst->add_offset(oopDesc::mark_offset_in_bytes()));
+ _compile->get_alias_index(tinst->add_offset(oopDesc::klass_offset_in_bytes()));
if (alloc->is_Allocate() && (t->isa_instptr() || t->isa_aryptr())) {
// First, put on the worklist all Field edges from Connection Graph
--- a/src/hotspot/share/opto/graphKit.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/graphKit.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -3426,6 +3426,10 @@
record_for_igvn(minit_in); // fold it up later, if possible
Node* minit_out = memory(rawidx);
assert(minit_out->is_Proj() && minit_out->in(0) == init, "");
+ // Add an edge in the MergeMem for the header fields so an access
+ // to one of those has correct memory state
+ set_memory(minit_out, C->get_alias_index(oop_type->add_offset(oopDesc::mark_offset_in_bytes())));
+ set_memory(minit_out, C->get_alias_index(oop_type->add_offset(oopDesc::klass_offset_in_bytes())));
if (oop_type->isa_aryptr()) {
const TypePtr* telemref = oop_type->add_offset(Type::OffsetBot);
int elemidx = C->get_alias_index(telemref);
@@ -3882,10 +3886,6 @@
Node* p = basic_plus_adr(str, str, value_offset);
Node* load = access_load_at(str, p, value_field_type, value_type, T_OBJECT,
IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
- // String.value field is known to be @Stable.
- if (UseImplicitStableValues) {
- load = cast_array_to_stable(load, value_type);
- }
return load;
}
@@ -3897,7 +3897,6 @@
const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
false, NULL, 0);
const TypePtr* coder_field_type = string_type->add_offset(coder_offset);
- int coder_field_idx = C->get_alias_index(coder_field_type);
Node* p = basic_plus_adr(str, str, coder_offset);
Node* load = access_load_at(str, p, coder_field_type, TypeInt::BYTE, T_BYTE,
@@ -4035,9 +4034,3 @@
}
return NULL;
}
-
-Node* GraphKit::cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type) {
- // Reify the property as a CastPP node in Ideal graph to comply with monotonicity
- // assumption of CCP analysis.
- return _gvn.transform(new CastPPNode(ary, ary_type->cast_to_stable(true)));
-}
--- a/src/hotspot/share/opto/graphKit.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/opto/graphKit.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -884,9 +884,6 @@
void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs);
Node* make_constant_from_field(ciField* field, Node* obj);
-
- // Produce new array node of stable type
- Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type);
};
// Helper class to support building of control flow branches. Upon
--- a/src/hotspot/share/prims/jniCheck.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/prims/jniCheck.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -418,21 +418,20 @@
size_t sz;
void* orig_result = check_wrapped_array(thr, fn_name, obj, carray, &sz);
switch (mode) {
+ // As we never make copies, mode 0 and JNI_COMMIT are the same.
case 0:
- memcpy(orig_result, carray, sz);
- GuardedMemory::free_copy(carray);
- break;
case JNI_COMMIT:
memcpy(orig_result, carray, sz);
break;
case JNI_ABORT:
- GuardedMemory::free_copy(carray);
break;
default:
tty->print_cr("%s: Unrecognized mode %i releasing array "
PTR_FORMAT " elements " PTR_FORMAT, fn_name, mode, p2i(obj), p2i(carray));
NativeReportJNIFatalError(thr, "Unrecognized array release mode");
}
+ // We always need to release the copy we made with GuardedMemory
+ GuardedMemory::free_copy(carray);
return orig_result;
}
--- a/src/hotspot/share/prims/whitebox.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/prims/whitebox.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -694,6 +694,13 @@
return (jlong)(uintptr_t)os::malloc(size, mtTest, stack);
WB_END
+// Alloc memory with pseudo call stack and specific memory type.
+WB_ENTRY(jlong, WB_NMTMallocWithPseudoStackAndType(JNIEnv* env, jobject o, jlong size, jint pseudo_stack, jint type))
+ address pc = (address)(size_t)pseudo_stack;
+ NativeCallStack stack(&pc, 1);
+ return (jlong)(uintptr_t)os::malloc(size, (MEMFLAGS)type, stack);
+WB_END
+
// Free the memory allocated by NMTAllocTest
WB_ENTRY(void, WB_NMTFree(JNIEnv* env, jobject o, jlong mem))
os::free((void*)(uintptr_t)mem);
@@ -2161,6 +2168,7 @@
#if INCLUDE_NMT
{CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
{CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack},
+ {CC"NMTMallocWithPseudoStackAndType", CC"(JII)J", (void*)&WB_NMTMallocWithPseudoStackAndType},
{CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
{CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
{CC"NMTAttemptReserveMemoryAt", CC"(JJ)J", (void*)&WB_NMTAttemptReserveMemoryAt },
--- a/src/hotspot/share/runtime/arguments.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/arguments.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -541,6 +541,16 @@
{ "SharedReadOnlySize", JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
{ "SharedMiscDataSize", JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
{ "SharedMiscCodeSize", JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
+ { "ProfilerPrintByteCodeStatistics", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfilerRecordPC", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfileVM", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfileIntervals", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfileIntervalsTicks", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfilerNumberOfInterpretedMethods", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfilerNumberOfCompiledMethods", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfilerNumberOfStubMethods", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "ProfilerNumberOfRuntimeStubNodes", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
+ { "UseImplicitStableValues", JDK_Version::undefined(), JDK_Version::jdk(13), JDK_Version::jdk(14) },
#ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
{ "dep > obs", JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() },
@@ -3784,8 +3794,8 @@
#endif
#if defined(AIX)
- UNSUPPORTED_OPTION(AllocateHeapAt);
- UNSUPPORTED_OPTION(AllocateOldGenAt);
+ UNSUPPORTED_OPTION_NULL(AllocateHeapAt);
+ UNSUPPORTED_OPTION_NULL(AllocateOldGenAt);
#endif
#ifndef PRODUCT
--- a/src/hotspot/share/runtime/arguments.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/arguments.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -663,4 +663,16 @@
} \
} while(0)
+// similar to UNSUPPORTED_OPTION but sets flag to NULL
+#define UNSUPPORTED_OPTION_NULL(opt) \
+do { \
+ if (opt) { \
+ if (FLAG_IS_CMDLINE(opt)) { \
+ warning("-XX flag " #opt " not supported in this VM"); \
+ } \
+ FLAG_SET_DEFAULT(opt, NULL); \
+ } \
+} while(0)
+
+
#endif // SHARE_RUNTIME_ARGUMENTS_HPP
--- a/src/hotspot/share/runtime/globals.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/globals.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -749,19 +749,6 @@
product(bool, OmitStackTraceInFastThrow, true, \
"Omit backtraces for some 'hot' exceptions in optimized code") \
\
- product(bool, ProfilerPrintByteCodeStatistics, false, \
- "Print bytecode statistics when dumping profiler output") \
- \
- product(bool, ProfilerRecordPC, false, \
- "Collect ticks for each 16 byte interval of compiled code") \
- \
- product(bool, ProfileVM, false, \
- "Profile ticks that fall within VM (either in the VM Thread " \
- "or VM code called through stubs)") \
- \
- product(bool, ProfileIntervals, false, \
- "Print profiles for each interval (see ProfileIntervalsTicks)") \
- \
notproduct(bool, ProfilerCheckIntervals, false, \
"Collect and print information on spacing of profiler ticks") \
\
@@ -1650,23 +1637,6 @@
develop(intx, MethodHistogramCutoff, 100, \
"The cutoff value for method invocation histogram (+CountCalls)") \
\
- diagnostic(intx, ProfilerNumberOfInterpretedMethods, 25, \
- "Number of interpreted methods to show in profile") \
- \
- diagnostic(intx, ProfilerNumberOfCompiledMethods, 25, \
- "Number of compiled methods to show in profile") \
- \
- diagnostic(intx, ProfilerNumberOfStubMethods, 25, \
- "Number of stub methods to show in profile") \
- \
- diagnostic(intx, ProfilerNumberOfRuntimeStubNodes, 25, \
- "Number of runtime stub nodes to show in profile") \
- \
- product(intx, ProfileIntervalsTicks, 100, \
- "Number of ticks between printing of interval profile " \
- "(+ProfileIntervals)") \
- range(0, max_intx) \
- \
develop(intx, DontYieldALotInterval, 10, \
"Interval between which yields will be dropped (milliseconds)") \
\
--- a/src/hotspot/share/runtime/handles.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/handles.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -26,7 +26,6 @@
#include "memory/allocation.inline.hpp"
#include "oops/constantPool.hpp"
#include "oops/oop.inline.hpp"
-#include "runtime/atomic.hpp"
#include "runtime/handles.inline.hpp"
#include "runtime/thread.inline.hpp"
@@ -102,9 +101,6 @@
return handles_visited;
}
-// Used for debugging handle allocation.
-NOT_PRODUCT(jint _nof_handlemarks = 0;)
-
void HandleArea::oops_do(OopClosure* f) {
uintx handles_visited = 0;
// First handle the current chunk. It is filled to the high water mark.
@@ -130,46 +126,35 @@
_size_in_bytes = _area->_size_in_bytes;
debug_only(_area->_handle_mark_nesting++);
assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks");
- debug_only(Atomic::inc(&_nof_handlemarks);)
// Link this in the thread
set_previous_handle_mark(thread->last_handle_mark());
thread->set_last_handle_mark(this);
}
-
HandleMark::~HandleMark() {
- HandleArea* area = _area; // help compilers with poor alias analysis
- assert(area == _thread->handle_area(), "sanity check");
- assert(area->_handle_mark_nesting > 0, "must stack allocate HandleMarks" );
- debug_only(area->_handle_mark_nesting--);
+ assert(_area == _thread->handle_area(), "sanity check");
+ assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks" );
- // Delete later chunks
- if( _chunk->next() ) {
- // reset arena size before delete chunks. Otherwise, the total
- // arena size could exceed total chunk size
- assert(area->size_in_bytes() > size_in_bytes(), "Sanity check");
- area->set_size_in_bytes(size_in_bytes());
- _chunk->next_chop();
- } else {
- assert(area->size_in_bytes() == size_in_bytes(), "Sanity check");
- }
- // Roll back arena to saved top markers
- area->_chunk = _chunk;
- area->_hwm = _hwm;
- area->_max = _max;
+ pop_and_restore();
#ifdef ASSERT
// clear out first chunk (to detect allocation bugs)
if (ZapVMHandleArea) {
memset(_hwm, badHandleValue, _max - _hwm);
}
- Atomic::dec(&_nof_handlemarks);
#endif
// Unlink this from the thread
_thread->set_last_handle_mark(previous_handle_mark());
}
+void HandleMark::chop_later_chunks() {
+ // reset arena size before delete chunks. Otherwise, the total
+ // arena size could exceed total chunk size
+ _area->set_size_in_bytes(size_in_bytes());
+ _chunk->next_chop();
+}
+
void* HandleMark::operator new(size_t size) throw() {
return AllocateHeap(size, mtThread);
}
--- a/src/hotspot/share/runtime/handles.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/handles.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -253,6 +253,8 @@
HandleMark* previous_handle_mark() const { return _previous_handle_mark; }
size_t size_in_bytes() const { return _size_in_bytes; }
+ // remove all chunks beginning with the next
+ void chop_later_chunks();
public:
HandleMark(); // see handles_inline.hpp
HandleMark(Thread* thread) { initialize(thread); }
--- a/src/hotspot/share/runtime/handles.inline.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/handles.inline.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -79,7 +79,6 @@
initialize(Thread::current());
}
-
inline void HandleMark::push() {
// This is intentionally a NOP. pop_and_restore will reset
// values to the HandleMark further down the stack, typically
@@ -88,22 +87,18 @@
}
inline void HandleMark::pop_and_restore() {
- HandleArea* area = _area; // help compilers with poor alias analysis
// Delete later chunks
- if( _chunk->next() ) {
- // reset arena size before delete chunks. Otherwise, the total
- // arena size could exceed total chunk size
- assert(area->size_in_bytes() > size_in_bytes(), "Sanity check");
- area->set_size_in_bytes(size_in_bytes());
- _chunk->next_chop();
+ if(_chunk->next() != NULL) {
+ assert(_area->size_in_bytes() > size_in_bytes(), "Sanity check");
+ chop_later_chunks();
} else {
- assert(area->size_in_bytes() == size_in_bytes(), "Sanity check");
+ assert(_area->size_in_bytes() == size_in_bytes(), "Sanity check");
}
// Roll back arena to saved top markers
- area->_chunk = _chunk;
- area->_hwm = _hwm;
- area->_max = _max;
- debug_only(area->_handle_mark_nesting--);
+ _area->_chunk = _chunk;
+ _area->_hwm = _hwm;
+ _area->_max = _max;
+ debug_only(_area->_handle_mark_nesting--);
}
inline HandleMarkCleaner::HandleMarkCleaner(Thread* thread) {
--- a/src/hotspot/share/runtime/vm_version.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/runtime/vm_version.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -230,13 +230,7 @@
#define HOTSPOT_BUILD_COMPILER "unknown MS VC++:" XSTR(_MSC_VER)
#endif
#elif defined(__SUNPRO_CC)
- #if __SUNPRO_CC == 0x420
- #define HOTSPOT_BUILD_COMPILER "Workshop 4.2"
- #elif __SUNPRO_CC == 0x500
- #define HOTSPOT_BUILD_COMPILER "Workshop 5.0 compat=" XSTR(__SUNPRO_CC_COMPAT)
- #elif __SUNPRO_CC == 0x520
- #define HOTSPOT_BUILD_COMPILER "Workshop 5.2 compat=" XSTR(__SUNPRO_CC_COMPAT)
- #elif __SUNPRO_CC == 0x580
+ #if __SUNPRO_CC == 0x580
#define HOTSPOT_BUILD_COMPILER "Workshop 5.8"
#elif __SUNPRO_CC == 0x590
#define HOTSPOT_BUILD_COMPILER "Workshop 5.9"
@@ -249,6 +243,8 @@
#else
#define HOTSPOT_BUILD_COMPILER "unknown Workshop:" XSTR(__SUNPRO_CC)
#endif
+ #elif defined(__clang_version__)
+ #define HOTSPOT_BUILD_COMPILER "clang " __VERSION__
#elif defined(__GNUC__)
#define HOTSPOT_BUILD_COMPILER "gcc " __VERSION__
#elif defined(__IBMCPP__)
--- a/src/hotspot/share/services/allocationSite.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/allocationSite.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -25,6 +25,7 @@
#ifndef SHARE_SERVICES_ALLOCATIONSITE_HPP
#define SHARE_SERVICES_ALLOCATIONSITE_HPP
+#include "memory/allocation.hpp"
#include "utilities/nativeCallStack.hpp"
// Allocation site represents a code path that makes a memory
@@ -33,8 +34,9 @@
private:
NativeCallStack _call_stack;
E e;
+ MEMFLAGS _flag;
public:
- AllocationSite(const NativeCallStack& stack) : _call_stack(stack) { }
+ AllocationSite(const NativeCallStack& stack, MEMFLAGS flag) : _call_stack(stack), _flag(flag) { }
int hash() const { return _call_stack.hash(); }
bool equals(const NativeCallStack& stack) const {
return _call_stack.equals(stack);
@@ -51,6 +53,8 @@
// Information regarding this allocation
E* data() { return &e; }
const E* peek() const { return &e; }
+
+ MEMFLAGS flag() const { return _flag; }
};
#endif // SHARE_SERVICES_ALLOCATIONSITE_HPP
--- a/src/hotspot/share/services/mallocSiteTable.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/mallocSiteTable.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -138,7 +138,7 @@
MallocSiteHashtableEntry* head = _table[index];
while (head != NULL && (*pos_idx) <= MAX_BUCKET_LENGTH) {
MallocSite* site = head->data();
- if (site->flags() == flags && site->equals(key)) {
+ if (site->flag() == flags && site->equals(key)) {
return head->data();
}
--- a/src/hotspot/share/services/mallocSiteTable.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/mallocSiteTable.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -37,15 +37,12 @@
// MallocSite represents a code path that eventually calls
// os::malloc() to allocate memory
class MallocSite : public AllocationSite<MemoryCounter> {
- private:
- MEMFLAGS _flags;
-
public:
MallocSite() :
- AllocationSite<MemoryCounter>(NativeCallStack::empty_stack()), _flags(mtNone) {}
+ AllocationSite<MemoryCounter>(NativeCallStack::empty_stack(), mtNone) {}
MallocSite(const NativeCallStack& stack, MEMFLAGS flags) :
- AllocationSite<MemoryCounter>(stack), _flags(flags) {}
+ AllocationSite<MemoryCounter>(stack, flags) {}
void allocate(size_t size) { data()->allocate(size); }
@@ -55,7 +52,6 @@
size_t size() const { return peek()->size(); }
// The number of calls were made
size_t count() const { return peek()->count(); }
- MEMFLAGS flags() const { return (MEMFLAGS)_flags; }
};
// Malloc site hashtable entry
--- a/src/hotspot/share/services/memBaseline.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/memBaseline.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -64,7 +64,7 @@
int compare_malloc_site_and_type(const MallocSite& s1, const MallocSite& s2) {
int res = compare_malloc_site(s1, s2);
if (res == 0) {
- res = (int)(s1.flags() - s2.flags());
+ res = (int)(s1.flag() - s2.flag());
}
return res;
@@ -212,7 +212,7 @@
const ReservedMemoryRegion* rgn;
VirtualMemoryAllocationSite* site;
while ((rgn = itr.next()) != NULL) {
- VirtualMemoryAllocationSite tmp(*rgn->call_stack());
+ VirtualMemoryAllocationSite tmp(*rgn->call_stack(), rgn->flag());
site = allocation_sites.find(tmp);
if (site == NULL) {
LinkedListNode<VirtualMemoryAllocationSite>* node =
--- a/src/hotspot/share/services/memReporter.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/memReporter.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -240,7 +240,7 @@
const NativeCallStack* stack = malloc_site->call_stack();
stack->print_on(out);
out->print("%29s", " ");
- MEMFLAGS flag = malloc_site->flags();
+ MEMFLAGS flag = malloc_site->flag();
assert((flag >= 0 && flag < (int)mt_number_of_types) && flag != mtNone,
"Must have a valid memory type");
print_malloc(malloc_site->size(), malloc_site->count(),flag);
@@ -266,6 +266,10 @@
stack->print_on(out);
out->print("%28s (", " ");
print_total(virtual_memory_site->reserved(), virtual_memory_site->committed());
+ MEMFLAGS flag = virtual_memory_site->flag();
+ if (flag != mtNone) {
+ out->print(" Type=%s", NMTUtil::flag_to_name(flag));
+ }
out->print_cr(")\n");
}
}
@@ -690,19 +694,25 @@
void MemDetailDiffReporter::new_malloc_site(const MallocSite* malloc_site) const {
diff_malloc_site(malloc_site->call_stack(), malloc_site->size(), malloc_site->count(),
- 0, 0, malloc_site->flags());
+ 0, 0, malloc_site->flag());
}
void MemDetailDiffReporter::old_malloc_site(const MallocSite* malloc_site) const {
diff_malloc_site(malloc_site->call_stack(), 0, 0, malloc_site->size(),
- malloc_site->count(), malloc_site->flags());
+ malloc_site->count(), malloc_site->flag());
}
void MemDetailDiffReporter::diff_malloc_site(const MallocSite* early,
const MallocSite* current) const {
- assert(early->flags() == current->flags(), "Must be the same memory type");
- diff_malloc_site(current->call_stack(), current->size(), current->count(),
- early->size(), early->count(), early->flags());
+ if (early->flag() != current->flag()) {
+ // If malloc site type changed, treat it as deallocation of old type and
+ // allocation of new type.
+ old_malloc_site(early);
+ new_malloc_site(current);
+ } else {
+ diff_malloc_site(current->call_stack(), current->size(), current->count(),
+ early->size(), early->count(), early->flag());
+ }
}
void MemDetailDiffReporter::diff_malloc_site(const NativeCallStack* stack, size_t current_size,
@@ -725,21 +735,22 @@
void MemDetailDiffReporter::new_virtual_memory_site(const VirtualMemoryAllocationSite* site) const {
- diff_virtual_memory_site(site->call_stack(), site->reserved(), site->committed(), 0, 0);
+ diff_virtual_memory_site(site->call_stack(), site->reserved(), site->committed(), 0, 0, site->flag());
}
void MemDetailDiffReporter::old_virtual_memory_site(const VirtualMemoryAllocationSite* site) const {
- diff_virtual_memory_site(site->call_stack(), 0, 0, site->reserved(), site->committed());
+ diff_virtual_memory_site(site->call_stack(), 0, 0, site->reserved(), site->committed(), site->flag());
}
void MemDetailDiffReporter::diff_virtual_memory_site(const VirtualMemoryAllocationSite* early,
const VirtualMemoryAllocationSite* current) const {
+ assert(early->flag() == current->flag(), "Should be the same");
diff_virtual_memory_site(current->call_stack(), current->reserved(), current->committed(),
- early->reserved(), early->committed());
+ early->reserved(), early->committed(), current->flag());
}
void MemDetailDiffReporter::diff_virtual_memory_site(const NativeCallStack* stack, size_t current_reserved,
- size_t current_committed, size_t early_reserved, size_t early_committed) const {
+ size_t current_committed, size_t early_reserved, size_t early_committed, MEMFLAGS flag) const {
outputStream* out = output();
// no change
@@ -753,5 +764,9 @@
print_virtual_memory_diff(current_reserved, current_committed,
early_reserved, early_committed);
+ if (flag != mtNone) {
+ out->print(" Type=%s", NMTUtil::flag_to_name(flag));
+ }
+
out->print_cr(")\n");
}
--- a/src/hotspot/share/services/memReporter.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/memReporter.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -230,7 +230,7 @@
void diff_malloc_site(const NativeCallStack* stack, size_t current_size,
size_t currrent_count, size_t early_size, size_t early_count, MEMFLAGS flags) const;
void diff_virtual_memory_site(const NativeCallStack* stack, size_t current_reserved,
- size_t current_committed, size_t early_reserved, size_t early_committed) const;
+ size_t current_committed, size_t early_reserved, size_t early_committed, MEMFLAGS flag) const;
};
#endif // INCLUDE_NMT
--- a/src/hotspot/share/services/virtualMemoryTracker.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/services/virtualMemoryTracker.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -70,8 +70,8 @@
// Virtual memory allocation site, keeps track where the virtual memory is reserved.
class VirtualMemoryAllocationSite : public AllocationSite<VirtualMemory> {
public:
- VirtualMemoryAllocationSite(const NativeCallStack& stack) :
- AllocationSite<VirtualMemory>(stack) { }
+ VirtualMemoryAllocationSite(const NativeCallStack& stack, MEMFLAGS flag) :
+ AllocationSite<VirtualMemory>(stack, flag) { }
inline void reserve_memory(size_t sz) { data()->reserve_memory(sz); }
inline void commit_memory (size_t sz) { data()->commit_memory(sz); }
--- a/src/hotspot/share/utilities/debug.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/utilities/debug.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -34,6 +34,7 @@
#include "gc/shared/collectedHeap.hpp"
#include "interpreter/bytecodeHistogram.hpp"
#include "interpreter/interpreter.hpp"
+#include "memory/allocation.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/oop.inline.hpp"
@@ -51,6 +52,7 @@
#include "runtime/vframe.hpp"
#include "runtime/vm_version.hpp"
#include "services/heapDumper.hpp"
+#include "services/memTracker.hpp"
#include "utilities/defaultStream.hpp"
#include "utilities/events.hpp"
#include "utilities/formatBuffer.hpp"
@@ -721,6 +723,7 @@
void initialize_assert_poison() {
char* page = os::reserve_memory(os::vm_page_size());
if (page) {
+ MemTracker::record_virtual_memory_type(page, mtInternal);
if (os::commit_memory(page, os::vm_page_size(), false) &&
os::protect_memory(page, os::vm_page_size(), os::MEM_PROT_NONE)) {
g_assert_poison = page;
--- a/src/hotspot/share/utilities/globalDefinitions_xlc.hpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/hotspot/share/utilities/globalDefinitions_xlc.hpp Wed Feb 13 13:22:15 2019 -0500
@@ -1,6 +1,6 @@
/*
* Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 SAP SE. 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
@@ -51,51 +51,43 @@
#include <stdint.h>
+// __IBMCPP__ is not defined any more with xlclang++
+#ifdef __IBMCPP__
+#if __IBMCPP__ < 1200
+#error "xlc < 12 not supported"
+#endif
+#endif
+
+#ifndef _AIX
+#error "missing AIX-specific definition _AIX"
+#endif
+
// Use XLC compiler builtins instead of inline assembler
#define USE_XLC_BUILTINS
+
#ifdef USE_XLC_BUILTINS
#include <builtins.h>
- #if __IBMCPP__ < 1000
- // the funtion prototype for __dcbtst(void *) is missing in XLC V8.0
- // I could compile a little test, where I provided the prototype.
- // The generated code was correct there. This is the prototype:
- // extern "builtin" void __dcbtst (void *);
- // For now we don't make use of it when compiling with XLC V8.0
- #else
- // __IBMCPP__ >= 1000
- // XLC V10 provides the prototype for __dcbtst (void *);
- #define USE_XLC_PREFETCH_WRITE_BUILTIN
- #endif
+// XLC V10 and higher provide the prototype for __dcbtst (void *);
#endif // USE_XLC_BUILTINS
// NULL vs NULL_WORD:
-// On Linux NULL is defined as a special type '__null'. Assigning __null to
-// integer variable will cause gcc warning. Use NULL_WORD in places where a
-// pointer is stored as integer value. On some platforms, sizeof(intptr_t) >
-// sizeof(void*), so here we want something which is integer type, but has the
-// same size as a pointer.
-#ifdef __GNUC__
- #error XLC and __GNUC__?
-#else
- #define NULL_WORD NULL
-#endif
+// Some platform/tool-chain combinations can't assign NULL to an integer
+// type so we define NULL_WORD to use in those contexts. For xlc they are the same.
+#define NULL_WORD NULL
// AIX also needs a 64 bit NULL to work as a null address pointer.
// Most system includes on AIX would define it as an int 0 if not already defined with one
// exception: /usr/include/dirent.h will unconditionally redefine NULL to int 0 again.
// In this case you need to copy the following defines to a position after #include <dirent.h>
-// (see jmv_aix.h).
-#ifdef AIX
- #include <dirent.h>
- #ifdef _LP64
- #undef NULL
- #define NULL 0L
- #else
- #ifndef NULL
- #define NULL 0
- #endif
+#include <dirent.h>
+#ifdef _LP64
+ #undef NULL
+ #define NULL 0L
+#else
+ #ifndef NULL
+ #define NULL 0
#endif
-#endif // AIX
+#endif
// Compiler-specific primitive types
// All defs of int (uint16_6 etc) are defined in AIX' /usr/include/stdint.h
@@ -108,21 +100,14 @@
typedef uint64_t julong;
// checking for nanness
-#ifdef AIX
inline int g_isnan(float f) { return isnan(f); }
inline int g_isnan(double f) { return isnan(f); }
-#else
-#error "missing platform-specific definition here"
-#endif
// Checking for finiteness
-
inline int g_isfinite(jfloat f) { return finite(f); }
inline int g_isfinite(jdouble f) { return finite(f); }
-
// Wide characters
-
inline int wcslen(const jchar* x) { return wcslen((const wchar_t*)x); }
--- a/src/java.base/macosx/classes/apple/security/KeychainStore.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/macosx/classes/apple/security/KeychainStore.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016, 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
@@ -102,6 +102,8 @@
private static final int iterationCount = 1024;
private static final int SALT_LEN = 20;
+ private static final Debug debug = Debug.getInstance("keystore");
+
static {
AccessController.doPrivileged(
new PrivilegedAction<Void>() {
@@ -773,6 +775,10 @@
entries.clear();
_scanKeychain();
+ if (debug != null) {
+ debug.println("KeychainStore load entry count: " +
+ entries.size());
+ }
}
}
--- a/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -61,6 +61,9 @@
// can only be returned by the doFinal(...) call.
private static final int MAX_BUF_SIZE = Integer.MAX_VALUE;
+ // data size when buffer is divided up to aid in intrinsics
+ private static final int TRIGGERLEN = 65536; // 64k
+
// buffer for AAD data; if null, meaning update has been called
private ByteArrayOutputStream aadBuffer = new ByteArrayOutputStream();
private int sizeOfAAD = 0;
@@ -380,12 +383,10 @@
// Utility to process the last block; used by encryptFinal and decryptFinal
void doLastBlock(byte[] in, int inOfs, int len, byte[] out, int outOfs,
boolean isEncrypt) throws IllegalBlockSizeException {
- // process data in 'in'
- gctrPAndC.doFinal(in, inOfs, len, out, outOfs);
- processed += len;
-
byte[] ct;
int ctOfs;
+ int ilen = len; // internal length
+
if (isEncrypt) {
ct = out;
ctOfs = outOfs;
@@ -393,14 +394,38 @@
ct = in;
ctOfs = inOfs;
}
+
+ // Divide up larger data sizes to trigger CTR & GHASH intrinsic quicker
+ if (len > TRIGGERLEN) {
+ int i = 0;
+ int tlen; // incremental lengths
+ // 96bit CTR x86 intrinsic
+ final int plen = AES_BLOCK_SIZE * 6;
+ // arbitrary formula to aid intrinsic without reaching buffer end
+ final int count = len / 1024;
+
+ while (count > i) {
+ tlen = gctrPAndC.update(in, inOfs, plen, out, outOfs);
+ ghashAllToS.update(ct, ctOfs, tlen);
+ inOfs += tlen;
+ outOfs += tlen;
+ ctOfs += tlen;
+ i++;
+ }
+ ilen -= count * plen;
+ processed += count * plen;
+ }
+
+ gctrPAndC.doFinal(in, inOfs, ilen, out, outOfs);
+ processed += ilen;
+
int lastLen = len % AES_BLOCK_SIZE;
if (lastLen != 0) {
ghashAllToS.update(ct, ctOfs, len - lastLen);
- byte[] padded =
- expandToOneBlock(ct, (ctOfs + len - lastLen), lastLen);
- ghashAllToS.update(padded);
+ ghashAllToS.update(
+ expandToOneBlock(ct, (ctOfs + len - lastLen), lastLen));
} else {
- ghashAllToS.update(ct, ctOfs, len);
+ ghashAllToS.update(ct, ctOfs, ilen);
}
}
@@ -562,15 +587,19 @@
System.arraycopy(in, inOfs + len - tagLenBytes, tag, 0, tagLenBytes);
len -= tagLenBytes;
- if (len > 0) {
- ibuffer.write(in, inOfs, len);
- }
+ // If decryption is in-place or there is buffered "ibuffer" data, copy
+ // the "in" byte array into the ibuffer before proceeding.
+ if (in == out || ibuffer.size() > 0) {
+ if (len > 0) {
+ ibuffer.write(in, inOfs, len);
+ }
- // refresh 'in' to all buffered-up bytes
- in = ibuffer.toByteArray();
- inOfs = 0;
- len = in.length;
- ibuffer.reset();
+ // refresh 'in' to all buffered-up bytes
+ in = ibuffer.toByteArray();
+ inOfs = 0;
+ len = in.length;
+ ibuffer.reset();
+ }
if (len > 0) {
doLastBlock(in, inOfs, len, out, outOfs, false);
--- a/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -25,6 +25,8 @@
package com.sun.crypto.provider;
+import sun.security.util.Debug;
+
import java.io.*;
import java.util.*;
import java.security.AccessController;
@@ -59,6 +61,7 @@
public final class JceKeyStore extends KeyStoreSpi {
+ private static final Debug debug = Debug.getInstance("keystore");
private static final int JCEKS_MAGIC = 0xcececece;
private static final int JKS_MAGIC = 0xfeedfeed;
private static final int VERSION_1 = 0x01;
@@ -680,6 +683,7 @@
Hashtable<String, CertificateFactory> cfs = null;
ByteArrayInputStream bais = null;
byte[] encoded = null;
+ int trustedKeyCount = 0, privateKeyCount = 0, secretKeyCount = 0;
if (stream == null)
return;
@@ -726,7 +730,7 @@
tag = dis.readInt();
if (tag == 1) { // private-key entry
-
+ privateKeyCount++;
PrivateKeyEntry entry = new PrivateKeyEntry();
// read the alias
@@ -786,7 +790,7 @@
entries.put(alias, entry);
} else if (tag == 2) { // trusted certificate entry
-
+ trustedKeyCount++;
TrustedCertEntry entry = new TrustedCertEntry();
// read the alias
@@ -825,7 +829,7 @@
entries.put(alias, entry);
} else if (tag == 3) { // secret-key entry
-
+ secretKeyCount++;
SecretKeyEntry entry = new SecretKeyEntry();
// read the alias
@@ -858,10 +862,18 @@
entries.put(alias, entry);
} else {
- throw new IOException("Unrecognized keystore entry");
+ throw new IOException("Unrecognized keystore entry: " +
+ tag);
}
}
+ if (debug != null) {
+ debug.println("JceKeyStore load: private key count: " +
+ privateKeyCount + ". trusted key count: " +
+ trustedKeyCount + ". secret key count: " +
+ secretKeyCount);
+ }
+
/*
* If a password has been provided, we check the keyed digest
* at the end. If this check fails, the store has been tampered
--- a/src/java.base/share/classes/java/util/HashMap.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/java/util/HashMap.java Wed Feb 13 13:22:15 2019 -0500
@@ -501,9 +501,14 @@
(int)ft : MAXIMUM_CAPACITY);
if (t > threshold)
threshold = tableSizeFor(t);
+ } else {
+ // Because of linked-list bucket constraints, we cannot
+ // expand all at once, but can reduce total resize
+ // effort by repeated doubling now vs later
+ while (s > threshold && table.length < MAXIMUM_CAPACITY)
+ resize();
}
- else if (s > threshold)
- resize();
+
for (Map.Entry<? extends K, ? extends V> e : m.entrySet()) {
K key = e.getKey();
V value = e.getValue();
--- a/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -638,7 +638,7 @@
* binary name. This method returns {@code null} when the class is not
* found.
*/
- protected Class<?> loadClassOrNull(String cn) {
+ protected final Class<?> loadClassOrNull(String cn) {
return loadClassOrNull(cn, false);
}
--- a/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -114,7 +114,7 @@
}
@Override
- protected Class<?> loadClassOrNull(String cn) {
+ protected Class<?> loadClassOrNull(String cn, boolean resolve) {
return JLA.findBootstrapClassOrNull(this, cn);
}
};
--- a/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Wed Feb 13 13:22:15 2019 -0500
@@ -2231,18 +2231,9 @@
}
if (debug != null) {
- if (privateKeyCount > 0) {
- debug.println("Loaded " + privateKeyCount +
- " protected private key(s)");
- }
- if (secretKeyCount > 0) {
- debug.println("Loaded " + secretKeyCount +
- " protected secret key(s)");
- }
- if (certificateCount > 0) {
- debug.println("Loaded " + certificateCount +
- " certificate(s)");
- }
+ debug.println("PKCS12KeyStore load: private key count: " +
+ privateKeyCount + ". secret key count: " + secretKeyCount +
+ ". certificate count: " + certificateCount);
}
certEntries.clear();
--- a/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -34,6 +34,7 @@
import sun.security.pkcs.EncryptedPrivateKeyInfo;
import sun.security.pkcs12.PKCS12KeyStore;
+import sun.security.util.Debug;
import sun.security.util.IOUtils;
import sun.security.util.KeyStoreDelegator;
@@ -74,6 +75,7 @@
}
}
+ private static final Debug debug = Debug.getInstance("keystore");
private static final int MAGIC = 0xfeedfeed;
private static final int VERSION_1 = 0x01;
private static final int VERSION_2 = 0x02;
@@ -643,6 +645,7 @@
Hashtable<String, CertificateFactory> cfs = null;
ByteArrayInputStream bais = null;
byte[] encoded = null;
+ int trustedKeyCount = 0, privateKeyCount = 0;
if (stream == null)
return;
@@ -681,7 +684,7 @@
tag = dis.readInt();
if (tag == 1) { // private key entry
-
+ privateKeyCount++;
KeyEntry entry = new KeyEntry();
// Read the alias
@@ -730,7 +733,7 @@
entries.put(alias, entry);
} else if (tag == 2) { // trusted certificate entry
-
+ trustedKeyCount++;
TrustedCertEntry entry = new TrustedCertEntry();
// Read the alias
@@ -765,10 +768,16 @@
entries.put(alias, entry);
} else {
- throw new IOException("Unrecognized keystore entry");
+ throw new IOException("Unrecognized keystore entry: " +
+ tag);
}
}
+ if (debug != null) {
+ debug.println("JavaKeyStore load: private key count: " +
+ privateKeyCount + ". trusted key count: " + trustedKeyCount);
+ }
+
/*
* If a password has been provided, we check the keyed digest
* at the end. If this check fails, the store has been tampered
--- a/src/java.base/share/classes/sun/security/ssl/ClientHello.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/ssl/ClientHello.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -519,7 +519,7 @@
if (session != null && identityAlg != null) {
String sessionIdentityAlg =
session.getIdentificationProtocol();
- if (!Objects.equals(identityAlg, sessionIdentityAlg)) {
+ if (!identityAlg.equalsIgnoreCase(sessionIdentityAlg)) {
if (SSLLogger.isOn &&
SSLLogger.isOn("ssl,handshake,verbose")) {
SSLLogger.finest("Can't resume, endpoint id" +
@@ -1036,7 +1036,7 @@
if (resumingSession && identityAlg != null) {
String sessionIdentityAlg =
previous.getIdentificationProtocol();
- if (!Objects.equals(identityAlg, sessionIdentityAlg)) {
+ if (!identityAlg.equalsIgnoreCase(sessionIdentityAlg)) {
if (SSLLogger.isOn &&
SSLLogger.isOn("ssl,handshake,verbose")) {
SSLLogger.finest("Can't resume, endpoint id" +
--- a/src/java.base/share/classes/sun/security/ssl/PreSharedKeyExtension.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/share/classes/sun/security/ssl/PreSharedKeyExtension.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -458,7 +458,7 @@
String identityAlg = shc.sslConfig.identificationProtocol;
if (result && identityAlg != null) {
String sessionIdentityAlg = s.getIdentificationProtocol();
- if (!Objects.equals(identityAlg, sessionIdentityAlg)) {
+ if (!identityAlg.equalsIgnoreCase(sessionIdentityAlg)) {
if (SSLLogger.isOn &&
SSLLogger.isOn("ssl,handshake,verbose")) {
--- a/src/java.base/unix/classes/java/lang/ProcessImpl.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java Wed Feb 13 13:22:15 2019 -0500
@@ -89,7 +89,7 @@
private static enum Platform {
- LINUX(LaunchMechanism.VFORK, LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK),
+ LINUX(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.VFORK, LaunchMechanism.FORK),
BSD(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK),
@@ -106,27 +106,6 @@
EnumSet.copyOf(Arrays.asList(launchMechanisms));
}
- @SuppressWarnings("fallthrough")
- private String helperPath(String javahome, String osArch) {
- switch (this) {
- case SOLARIS:
- // fall through...
- case LINUX:
- case AIX:
- case BSD:
- return javahome + "/lib/jspawnhelper";
-
- default:
- throw new AssertionError("Unsupported platform: " + this);
- }
- }
-
- String helperPath() {
- Properties props = GetPropertyAction.privilegedGetProperties();
- return helperPath(StaticProperty.javaHome(),
- props.getProperty("os.arch"));
- }
-
LaunchMechanism launchMechanism() {
return AccessController.doPrivileged(
(PrivilegedAction<LaunchMechanism>) () -> {
@@ -169,7 +148,7 @@
private static final Platform platform = Platform.get();
private static final LaunchMechanism launchMechanism = platform.launchMechanism();
- private static final byte[] helperpath = toCString(platform.helperPath());
+ private static final byte[] helperpath = toCString(StaticProperty.javaHome() + "/lib/jspawnhelper");
private static byte[] toCString(String s) {
if (s == null)
--- a/src/java.base/unix/native/libjava/ProcessImpl_md.c Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.base/unix/native/libjava/ProcessImpl_md.c Wed Feb 13 13:22:15 2019 -0500
@@ -49,56 +49,139 @@
#include "childproc.h"
/*
- * There are 4 possible strategies we might use to "fork":
+ *
+ * When starting a child on Unix, we need to do three things:
+ * - fork off
+ * - in the child process, do some pre-exec work: duping/closing file
+ * descriptors to set up stdio-redirection, setting environment variables,
+ * changing paths...
+ * - then exec(2) the target binary
+ *
+ * There are three ways to fork off:
+ *
+ * A) fork(2). Portable and safe (no side effects) but may fail with ENOMEM on
+ * all Unices when invoked from a VM with a high memory footprint. On Unices
+ * with strict no-overcommit policy this problem is most visible.
*
- * - fork(2). Very portable and reliable but subject to
- * failure due to overcommit (see the documentation on
- * /proc/sys/vm/overcommit_memory in Linux proc(5)).
- * This is the ancient problem of spurious failure whenever a large
- * process starts a small subprocess.
+ * This is because forking the VM will first create a child process with
+ * theoretically the same memory footprint as the parent - even if you plan
+ * to follow up with exec'ing a tiny binary. In reality techniques like
+ * copy-on-write etc mitigate the problem somewhat but we still run the risk
+ * of hitting system limits.
+ *
+ * For a Linux centric description of this problem, see the documentation on
+ * /proc/sys/vm/overcommit_memory in Linux proc(5).
+ *
+ * B) vfork(2): Portable and fast but very unsafe. It bypasses the memory
+ * problems related to fork(2) by starting the child in the memory image of
+ * the parent. Things that can go wrong include:
+ * - Programming errors in the child process before the exec(2) call may
+ * trash memory in the parent process, most commonly the stack of the
+ * thread invoking vfork.
+ * - Signals received by the child before the exec(2) call may be at best
+ * misdirected to the parent, at worst immediately kill child and parent.
*
- * - vfork(). Using this is scary because all relevant man pages
- * contain dire warnings, e.g. Linux vfork(2). But at least it's
- * documented in the glibc docs and is standardized by XPG4.
- * http://www.opengroup.org/onlinepubs/000095399/functions/vfork.html
- * On Linux, one might think that vfork() would be implemented using
- * the clone system call with flag CLONE_VFORK, but in fact vfork is
- * a separate system call (which is a good sign, suggesting that
- * vfork will continue to be supported at least on Linux).
- * Another good sign is that glibc implements posix_spawn using
- * vfork whenever possible. Note that we cannot use posix_spawn
- * ourselves because there's no reliable way to close all inherited
- * file descriptors.
+ * This is mitigated by very strict rules about what one is allowed to do in
+ * the child process between vfork(2) and exec(2), which is basically nothing.
+ * However, we always broke this rule by doing the pre-exec work between
+ * vfork(2) and exec(2).
+ *
+ * Also note that vfork(2) has been deprecated by the OpenGroup, presumably
+ * because of its many dangers.
+ *
+ * C) clone(2): This is a Linux specific call which gives the caller fine
+ * grained control about how exactly the process fork is executed. It is
+ * powerful, but Linux-specific.
+ *
+ * Aside from these three possibilities there is a forth option: posix_spawn(3).
+ * Where fork/vfork/clone all fork off the process and leave pre-exec work and
+ * calling exec(2) to the user, posix_spawn(3) offers the user fork+exec-like
+ * functionality in one package, similar to CreateProcess() on Windows.
+ *
+ * It is not a system call in itself, but usually a wrapper implemented within
+ * the libc in terms of one of (fork|vfork|clone)+exec - so whether or not it
+ * has advantages over calling the naked (fork|vfork|clone) functions depends
+ * on how posix_spawn(3) is implemented.
+ *
+ * Note that when using posix_spawn(3), we exec twice: first a tiny binary called
+ * the jspawnhelper, then in the jspawnhelper we do the pre-exec work and exec a
+ * second time, this time the target binary (similar to the "exec-twice-technique"
+ * described in http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-September/055333.html).
+ *
+ * This is a JDK-specific implementation detail which just happens to be
+ * implemented for jdk.lang.Process.launchMechanism=POSIX_SPAWN.
+ *
+ * --- Linux-specific ---
*
- * - clone() with flags CLONE_VM but not CLONE_THREAD. clone() is
- * Linux-specific, but this ought to work - at least the glibc
- * sources contain code to handle different combinations of CLONE_VM
- * and CLONE_THREAD. However, when this was implemented, it
- * appeared to fail on 32-bit i386 (but not 64-bit x86_64) Linux with
- * the simple program
- * Runtime.getRuntime().exec("/bin/true").waitFor();
- * with:
- * # Internal Error (os_linux_x86.cpp:683), pid=19940, tid=2934639536
- * # Error: pthread_getattr_np failed with errno = 3 (ESRCH)
- * We believe this is a glibc bug, reported here:
- * http://sources.redhat.com/bugzilla/show_bug.cgi?id=10311
- * but the glibc maintainers closed it as WONTFIX.
+ * How does glibc implement posix_spawn?
+ * (see: sysdeps/posix/spawni.c for glibc < 2.24,
+ * sysdeps/unix/sysv/linux/spawni.c for glibc >= 2.24):
+ *
+ * 1) Before glibc 2.4 (released 2006), posix_spawn(3) used just fork(2)/exec(2).
+ * This would be bad for the JDK since we would risk the known memory issues with
+ * fork(2). But since this only affects glibc variants which have long been
+ * phased out by modern distributions, this is irrelevant.
+ *
+ * 2) Between glibc 2.4 and glibc 2.23, posix_spawn uses either fork(2) or
+ * vfork(2) depending on how exactly the user called posix_spawn(3):
+ *
+ * <quote>
+ * The child process is created using vfork(2) instead of fork(2) when
+ * either of the following is true:
+ *
+ * * the spawn-flags element of the attributes object pointed to by
+ * attrp contains the GNU-specific flag POSIX_SPAWN_USEVFORK; or
+ *
+ * * file_actions is NULL and the spawn-flags element of the attributes
+ * object pointed to by attrp does not contain
+ * POSIX_SPAWN_SETSIGMASK, POSIX_SPAWN_SETSIGDEF,
+ * POSIX_SPAWN_SETSCHEDPARAM, POSIX_SPAWN_SETSCHEDULER,
+ * POSIX_SPAWN_SETPGROUP, or POSIX_SPAWN_RESETIDS.
+ * </quote>
+ *
+ * Due to the way the JDK calls posix_spawn(3), it would therefore call vfork(2).
+ * So we would avoid the fork(2) memory problems. However, there still remains the
+ * risk associated with vfork(2). But it is smaller than were we to call vfork(2)
+ * directly since we use the jspawnhelper, moving all pre-exec work off to after
+ * the first exec, thereby reducing the vulnerable time window.
+ *
+ * 3) Since glibc >= 2.24, glibc uses clone+exec:
*
- * - posix_spawn(). While posix_spawn() is a fairly elaborate and
- * complicated system call, it can't quite do everything that the old
- * fork()/exec() combination can do, so the only feasible way to do
- * this, is to use posix_spawn to launch a new helper executable
- * "jprochelper", which in turn execs the target (after cleaning
- * up file-descriptors etc.) The end result is the same as before,
- * a child process linked to the parent in the same way, but it
- * avoids the problem of duplicating the parent (VM) process
- * address space temporarily, before launching the target command.
+ * new_pid = CLONE (__spawni_child, STACK (stack, stack_size), stack_size,
+ * CLONE_VM | CLONE_VFORK | SIGCHLD, &args);
+ *
+ * This is even better than (2):
+ *
+ * CLONE_VM means we run in the parent's memory image, as with (2)
+ * CLONE_VFORK means parent waits until we exec, as with (2)
+ *
+ * However, error possibilities are further reduced since:
+ * - posix_spawn(3) passes a separate stack for the child to run on, eliminating
+ * the danger of trashing the forking thread's stack in the parent process.
+ * - posix_spawn(3) takes care to temporarily block all incoming signals to the
+ * child process until the first exec(2) has been called,
*
- * Based on the above analysis, we are currently using vfork() on
- * Linux and posix_spawn() on other Unix systems.
+ * TL;DR
+ * Calling posix_spawn(3) for glibc
+ * (2) < 2.24 is not perfect but still better than using plain vfork(2), since
+ * the chance of an error happening is greatly reduced
+ * (3) >= 2.24 is the best option - portable, fast and as safe as possible.
+ *
+ * ---
+ *
+ * How does muslc implement posix_spawn?
+ *
+ * They always did use the clone (.. CLONE_VM | CLONE_VFORK ...)
+ * technique. So we are safe to use posix_spawn() here regardless of muslc
+ * version.
+ *
+ * </Linux-specific>
+ *
+ *
+ * Based on the above analysis, we are currently defaulting to posix_spawn()
+ * on all Unices including Linux.
*/
-
static void
setSIGCHLDHandler(JNIEnv *env)
{
--- a/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -29,7 +29,6 @@
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import sun.java2d.SurfaceData;
@@ -48,11 +47,6 @@
}
@Override
- public BufferedImage createCompatibleImage(int width, int height) {
- throw new UnsupportedOperationException("not implemented");
- }
-
- @Override
public final Rectangle getBounds() {
return device.getBounds();
}
@@ -66,11 +60,6 @@
}
@Override
- public ColorModel getColorModel(int transparency) {
- throw new UnsupportedOperationException("not implemented");
- }
-
- @Override
public AffineTransform getDefaultTransform() {
double scaleFactor = device.getScaleFactor();
return AffineTransform.getScaleInstance(scaleFactor, scaleFactor);
--- a/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -51,11 +51,7 @@
private volatile Rectangle bounds;
private volatile int scale;
- // Array of all GraphicsConfig instances for this device
- private final GraphicsConfiguration[] configs;
-
- // Default config (temporarily hard coded)
- private final int DEFAULT_CONFIG = 0;
+ private final GraphicsConfiguration config;
private static AWTPermission fullScreenExclusivePermission;
@@ -64,9 +60,7 @@
public CGraphicsDevice(final int displayID) {
this.displayID = displayID;
- configs = new GraphicsConfiguration[] {
- CGLGraphicsConfig.getConfig(this, displayID, 0)
- };
+ config = CGLGraphicsConfig.getConfig(this, displayID, 0);
}
/**
@@ -74,7 +68,7 @@
*/
@Override
public GraphicsConfiguration[] getConfigurations() {
- return configs.clone();
+ return new GraphicsConfiguration[]{config};
}
/**
@@ -82,7 +76,7 @@
*/
@Override
public GraphicsConfiguration getDefaultConfiguration() {
- return configs[DEFAULT_CONFIG];
+ return config;
}
/**
--- a/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -185,11 +185,6 @@
return pConfigInfo;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
- */
@Override
public OGLContext getContext() {
return context;
@@ -395,11 +390,6 @@
return vi;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
- */
@Override
public ContextCapabilities getContextCapabilities() {
return oglCaps;
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,15 @@
package sun.lwawt.macosx;
-import java.awt.*;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+
+public final class CPrinterDevice extends GraphicsDevice {
-public class CPrinterDevice extends GraphicsDevice {
- GraphicsConfiguration gc;
+ private final GraphicsConfiguration config;
- public CPrinterDevice(CPrinterGraphicsConfig gc) {
- this.gc = gc;
+ public CPrinterDevice(final CPrinterGraphicsConfig config) {
+ this.config = config;
}
/**
@@ -42,6 +44,7 @@
* @see #TYPE_PRINTER
* @see #TYPE_IMAGE_BUFFER
*/
+ @Override
public int getType() {
return GraphicsDevice.TYPE_PRINTER;
}
@@ -52,6 +55,7 @@
* @return a {@code String} that is the identification
* of this {@code GraphicsDevice}.
*/
+ @Override
public String getIDstring() {
return ("Printer");
}
@@ -63,8 +67,9 @@
* objects that are associated with this
* {@code GraphicsDevice}.
*/
+ @Override
public GraphicsConfiguration[] getConfigurations() {
- return new GraphicsConfiguration[] { gc };
+ return new GraphicsConfiguration[]{config};
}
/**
@@ -73,7 +78,8 @@
* @return the default {@code GraphicsConfiguration}
* of this {@code GraphicsDevice}.
*/
+ @Override
public GraphicsConfiguration getDefaultConfiguration() {
- return gc;
+ return config;
}
}
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,21 +25,29 @@
package sun.lwawt.macosx;
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.image.*;
-import java.awt.print.*;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.Rectangle;
+import java.awt.Transparency;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.VolatileImage;
+import java.awt.print.PageFormat;
-public class CPrinterGraphicsConfig extends GraphicsConfiguration {
+public final class CPrinterGraphicsConfig extends GraphicsConfiguration {
+
public static CPrinterGraphicsConfig getConfig(PageFormat pf) {
return new CPrinterGraphicsConfig(pf);
}
- GraphicsDevice gd;
- PageFormat pf;
+ private final GraphicsDevice device;
+ private final PageFormat pf;
public CPrinterGraphicsConfig(PageFormat pf) {
- this.gd = new CPrinterDevice(this);
+ this.device = new CPrinterDevice(this);
this.pf = pf;
}
@@ -53,8 +61,9 @@
* @return a {@code GraphicsDevice} object that is
* associated with this {@code GraphicsConfiguration}.
*/
+ @Override
public GraphicsDevice getDevice() {
- return gd;
+ return device;
}
/**
@@ -70,6 +79,7 @@
* @return a {@code BufferedImage} whose data layout and color
* model is compatible with this {@code GraphicsConfiguration}.
*/
+ @Override
public BufferedImage createCompatibleImage(int width, int height) {
return createCompatibleImage(width, height, Transparency.OPAQUE);
}
@@ -87,11 +97,13 @@
* model is compatible with this {@code GraphicsConfiguration}.
* @see Component#createVolatileImage(int, int)
*/
+ @Override
public VolatileImage createCompatibleVolatileImage(int width, int height) {
return createCompatibleVolatileImage(width, height, Transparency.OPAQUE);
}
// empty implementation (this should not be called)
+ @Override
public VolatileImage createCompatibleVolatileImage(int width, int height, int transparency) {
return null;
}
@@ -114,6 +126,7 @@
* @see Transparency#BITMASK
* @see Transparency#TRANSLUCENT
*/
+ @Override
public BufferedImage createCompatibleImage(int width, int height, int transparency) {
//+++gdb what to do?
return null;
@@ -125,6 +138,7 @@
* @return a {@code ColorModel} object that is associated with
* this {@code GraphicsConfiguration}.
*/
+ @Override
public ColorModel getColorModel() {
return getColorModel(Transparency.OPAQUE);
}
@@ -138,6 +152,7 @@
* this {@code GraphicsConfiguration} and supports the
* specified transparency.
*/
+ @Override
public ColorModel getColorModel(int transparency) {
return ColorModel.getRGBdefault();
}
@@ -161,6 +176,7 @@
* @return the default {@code AffineTransform} for this
* {@code GraphicsConfiguration}.
*/
+ @Override
public AffineTransform getDefaultTransform() {
return new AffineTransform();
}
@@ -192,6 +208,7 @@
* default {@code AffineTransform} so that 72 units in user
* space is mapped to 1 inch in device space.
*/
+ @Override
public AffineTransform getNormalizingTransform() {
return new AffineTransform();
}
@@ -205,6 +222,7 @@
* {@code GraphicsConfiguration}.
* @since 1.3
*/
+ @Override
public Rectangle getBounds() {
return new Rectangle(0, 0, (int)pf.getWidth(), (int)pf.getHeight());
}
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -54,10 +54,6 @@
initRobot();
}
- @Override
- public void dispose() {
- }
-
/**
* Moves mouse pointer to given screen coordinates.
* @param x X position
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java Wed Feb 13 13:22:15 2019 -0500
@@ -1167,13 +1167,24 @@
ICONS_MAP = new HashMap<String, GTKStockIcon>();
ICONS_MAP.put("FileChooser.cancelIcon", new GTKStockIcon("gtk-cancel", 4));
ICONS_MAP.put("FileChooser.okIcon", new GTKStockIcon("gtk-ok", 4));
- ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("gtk-dialog-error", 6));
- ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("gtk-dialog-info", 6));
- ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("gtk-dialog-warning", 6));
- ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("gtk-dialog-question", 6));
ICONS_MAP.put("OptionPane.yesIcon", new GTKStockIcon("gtk-yes", 4));
ICONS_MAP.put("OptionPane.noIcon", new GTKStockIcon("gtk-no", 4));
ICONS_MAP.put("OptionPane.cancelIcon", new GTKStockIcon("gtk-cancel", 4));
ICONS_MAP.put("OptionPane.okIcon", new GTKStockIcon("gtk-ok", 4));
+
+ //check whether the gtk version is >= 3.10 as the Icon names were
+ //changed from this version
+ UNIXToolkit tk = (UNIXToolkit)Toolkit.getDefaultToolkit();
+ if (tk.checkGtkVersion(3, 10, 0)) {
+ ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("dialog-error", 6));
+ ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("dialog-information", 6));
+ ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("dialog-warning", 6));
+ ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("dialog-question", 6));
+ } else {
+ ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("gtk-dialog-error", 6));
+ ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("gtk-dialog-info", 6));
+ ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("gtk-dialog-warning", 6));
+ ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("gtk-dialog-question", 6));
+ }
}
}
--- a/src/java.desktop/share/classes/java/awt/GraphicsConfiguration.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/GraphicsConfiguration.java Wed Feb 13 13:22:15 2019 -0500
@@ -104,8 +104,6 @@
* implements the interface for that capability.
*
*/
-
-
public abstract class GraphicsConfiguration {
private static BufferCapabilities defaultBufferCaps;
--- a/src/java.desktop/share/classes/java/awt/Robot.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/Robot.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -134,8 +134,6 @@
Toolkit toolkit = Toolkit.getDefaultToolkit();
if (toolkit instanceof ComponentFactory) {
peer = ((ComponentFactory)toolkit).createRobot(this, screen);
- disposer = new RobotDisposer(peer);
- sun.java2d.Disposer.addRecord(anchor, disposer);
}
initLegalButtonMask();
}
@@ -177,22 +175,6 @@
}
}
- private transient Object anchor = new Object();
-
- static class RobotDisposer implements sun.java2d.DisposerRecord {
- private final RobotPeer peer;
- public RobotDisposer(RobotPeer peer) {
- this.peer = peer;
- }
- public void dispose() {
- if (peer != null) {
- peer.dispose();
- }
- }
- }
-
- private transient RobotDisposer disposer;
-
/**
* Moves mouse pointer to given screen coordinates.
* @param x X position
--- a/src/java.desktop/share/classes/java/awt/desktop/AboutEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AboutEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
* Event sent when the application is asked to open its about window.
*
* @see AboutHandler#handleAbout
- *
* @since 9
*/
public final class AboutEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -5987180734802756477L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/AboutHandler.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AboutHandler.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -29,8 +29,7 @@
* An implementer receives notification when the app is asked to show its about
* dialog.
*
- * @see java.awt.Desktop#setAboutHandler(java.awt.desktop.AboutHandler)
- *
+ * @see java.awt.Desktop#setAboutHandler(AboutHandler)
* @since 9
*/
public interface AboutHandler {
@@ -38,7 +37,7 @@
/**
* Called when the application is asked to show its about dialog.
*
- * @param e the request to show the about dialog.
+ * @param e the request to show the about dialog
*/
- public void handleAbout(final AboutEvent e);
+ public void handleAbout(AboutEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/AppEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -38,6 +38,9 @@
*/
public class AppEvent extends EventObject {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -5958503993556009432L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppForegroundEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppForegroundEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -35,11 +35,13 @@
*
* @see AppForegroundListener#appRaisedToForeground(AppForegroundEvent)
* @see AppForegroundListener#appMovedToBackground(AppForegroundEvent)
- *
* @since 9
*/
public final class AppForegroundEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -5513582555740533911L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppForegroundListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppForegroundListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -34,17 +34,19 @@
* @since 9
*/
public interface AppForegroundListener extends SystemEventListener {
+
/**
* Called when the app becomes the foreground app.
- * @param e event
+ *
+ * @param e event
*/
- public void appRaisedToForeground(final AppForegroundEvent e);
+ public void appRaisedToForeground(AppForegroundEvent e);
/**
* Called when the app becomes the background app and another app becomes
* the foreground app.
*
- * @param e event
+ * @param e event
*/
- public void appMovedToBackground(final AppForegroundEvent e);
+ public void appMovedToBackground(AppForegroundEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/AppHiddenEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppHiddenEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -34,11 +34,13 @@
*
* @see AppHiddenListener#appHidden(AppHiddenEvent)
* @see AppHiddenListener#appUnhidden(AppHiddenEvent)
- *
* @since 9
*/
public final class AppHiddenEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 2637465279476429224L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppHiddenListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppHiddenListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -35,17 +35,17 @@
public interface AppHiddenListener extends SystemEventListener {
/**
- * Called the app is hidden.
+ * Called when the app is hidden.
*
- * @param e event
+ * @param e event
*/
- public void appHidden(final AppHiddenEvent e);
+ public void appHidden(AppHiddenEvent e);
/**
* Called when the hidden app is shown again (but not necessarily brought to
* the foreground).
*
- * @param e event
+ * @param e event
*/
- public void appUnhidden(final AppHiddenEvent e);
+ public void appUnhidden(AppHiddenEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/AppReopenedEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppReopenedEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
* Event sent when the application is asked to re-open itself.
*
* @see AppReopenedListener#appReopened(AppReopenedEvent)
- *
* @since 9
*/
public final class AppReopenedEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 1503238361530407990L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/AppReopenedListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/AppReopenedListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -27,15 +27,18 @@
/**
* Implementors receive notification when the app has been asked to open again.
- *
- * This notification is useful for showing a new document when your app has no open windows.
+ * <p>
+ * This notification is useful for showing a new document when your app has no
+ * open windows.
*
* @since 9
*/
public interface AppReopenedListener extends SystemEventListener {
+
/**
- * Called when the app has been reopened
- * @param e the request to reopen the app
+ * Called when the app has been reopened.
+ *
+ * @param e the request to reopen the app
*/
- public void appReopened(final AppReopenedEvent e);
+ public void appReopened(AppReopenedEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/FilesEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/FilesEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -39,7 +39,14 @@
*/
public class FilesEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 5271763715462312871L;
+
+ /**
+ * The list of files.
+ */
final List<File> files;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenFilesEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenFilesEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -35,12 +35,18 @@
* Event sent when the app is asked to open a list of files.
*
* @see OpenFilesHandler#openFiles
- *
* @since 9
*/
public final class OpenFilesEvent extends FilesEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -3982871005867718956L;
+
+ /**
+ * The search term used to find the files.
+ */
final String searchTerm;
/**
@@ -63,10 +69,10 @@
}
/**
- * Gets the search term. The platform may optionally provide the search
- * term that was used to find the files. This is for example the case
- * on Mac OS X, when the files were opened using the Spotlight search
- * menu or a Finder search window.
+ * Gets the search term. The platform may optionally provide the search term
+ * that was used to find the files. This is for example the case on MacOS,
+ * when the files were opened using the Spotlight search menu or a Finder
+ * search window.
* <p>
* This is useful for highlighting the search term in the documents when
* they are opened.
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenFilesHandler.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenFilesHandler.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -25,18 +25,20 @@
package java.awt.desktop;
-
/**
- * An implementor is notified when the application is asked to open a list of files.
+ * An implementor is notified when the application is asked to open a list of
+ * files.
*
- * @see java.awt.Desktop#setOpenFileHandler(java.awt.desktop.OpenFilesHandler)
- *
+ * @see java.awt.Desktop#setOpenFileHandler(OpenFilesHandler)
* @since 9
*/
public interface OpenFilesHandler {
+
/**
* Called when the application is asked to open a list of files.
- * @param e the request to open a list of files, and the search term used to find them, if any.
+ *
+ * @param e the request to open a list of files, and the search term used
+ * to find them, if any
*/
- public void openFiles(final OpenFilesEvent e);
+ public void openFiles(OpenFilesEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenURIEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenURIEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -34,12 +34,18 @@
* Event sent when the app is asked to open a {@code URI}.
*
* @see OpenURIHandler#openURI(OpenURIEvent)
- *
* @since 9
*/
public final class OpenURIEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 221209100935933476L;
+
+ /**
+ * The {@code URI} the app was asked to open.
+ */
final URI uri;
/**
@@ -58,7 +64,8 @@
}
/**
- * Get the {@code URI} the app was asked to open
+ * Get the {@code URI} the app was asked to open.
+ *
* @return the {@code URI}
*/
public URI getURI() {
--- a/src/java.desktop/share/classes/java/awt/desktop/OpenURIHandler.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/OpenURIHandler.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,14 +28,15 @@
/**
* An implementor is notified when the application is asked to open a URI.
*
- * @see java.awt.Desktop#setOpenURIHandler(java.awt.desktop.OpenURIHandler)
- *
+ * @see java.awt.Desktop#setOpenURIHandler(OpenURIHandler)
* @since 9
*/
public interface OpenURIHandler {
+
/**
- * Called when the application is asked to open a {@code URI}
- * @param e the request to open a {@code URI}
+ * Called when the application is asked to open a {@code URI}.
+ *
+ * @param e the request to open a {@code URI}
*/
- public void openURI(final OpenURIEvent e);
+ public void openURI(OpenURIEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/PreferencesEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PreferencesEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
* Event sent when the application is asked to open its preferences window.
*
* @see PreferencesHandler#handlePreferences
- *
* @since 9
*/
public final class PreferencesEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -6398607097086476160L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/PreferencesHandler.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PreferencesHandler.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,14 +28,15 @@
/**
* An implementor is notified when the app is asked to show its preferences UI.
*
- * @see java.awt.Desktop#setPreferencesHandler(java.awt.desktop.PreferencesHandler)
- *
+ * @see java.awt.Desktop#setPreferencesHandler(PreferencesHandler)
* @since 9
*/
public interface PreferencesHandler {
+
/**
* Called when the app is asked to show its preferences UI.
- * @param e the request to show preferences.
+ *
+ * @param e the request to show preferences
*/
- public void handlePreferences(final PreferencesEvent e);
+ public void handlePreferences(PreferencesEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/PrintFilesEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PrintFilesEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -39,6 +39,9 @@
*/
public final class PrintFilesEvent extends FilesEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -5752560876153618618L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/PrintFilesHandler.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/PrintFilesHandler.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -26,16 +26,18 @@
package java.awt.desktop;
/**
- * An implementor can respond to requests to print documents that the app has been registered to handle.
+ * An implementor can respond to requests to print documents that the app has
+ * been registered to handle.
*
- * @see java.awt.Desktop#setPrintFileHandler(java.awt.desktop.PrintFilesHandler)
- *
+ * @see java.awt.Desktop#setPrintFileHandler(PrintFilesHandler)
* @since 9
*/
public interface PrintFilesHandler {
+
/**
* Called when the application is asked to print a list of files.
- * @param e the request to print a list of files.
+ *
+ * @param e the request to print a list of files
*/
- public void printFiles(final PrintFilesEvent e);
+ public void printFiles(PrintFilesEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -33,11 +33,13 @@
* Event sent when the application is asked to quit.
*
* @see QuitHandler#handleQuitRequestWith(QuitEvent, QuitResponse)
- *
* @since 9
*/
public final class QuitEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = -256100795532403146L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitHandler.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitHandler.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -26,26 +26,32 @@
package java.awt.desktop;
/**
- * An implementor determines if requests to quit this application should proceed or cancel.
+ * An implementor determines if requests to quit this application should proceed
+ * or cancel.
*
- * @see java.awt.Desktop#setQuitHandler(java.awt.desktop.QuitHandler)
- * @see java.awt.Desktop#setQuitStrategy(java.awt.desktop.QuitStrategy)
- *
+ * @see java.awt.Desktop#setQuitHandler(QuitHandler)
+ * @see java.awt.Desktop#setQuitStrategy(QuitStrategy)
* @since 9
*/
public interface QuitHandler {
+
/**
* Invoked when the application is asked to quit.
+ * <p>
+ * Implementors must call either {@link QuitResponse#cancelQuit()},
+ * {@link QuitResponse#performQuit()}, or ensure the application terminates.
+ * The process (or log-out) requesting this app to quit will be blocked
+ * until the {@link QuitResponse} is handled. Apps that require complex UI
+ * to shutdown may call the {@link QuitResponse} from any thread. Your app
+ * may be asked to quit multiple times before you have responded to the
+ * initial request. This handler is called each time a quit is requested,
+ * and the same {@link QuitResponse} object is passed until it is handled.
+ * Once used, the {@link QuitResponse} cannot be used again to change the
+ * decision.
*
- * Implementors must call either {@link QuitResponse#cancelQuit()}, {@link QuitResponse#performQuit()}, or ensure the application terminates.
- * The process (or log-out) requesting this app to quit will be blocked until the {@link QuitResponse} is handled.
- * Apps that require complex UI to shutdown may call the {@link QuitResponse} from any thread.
- * Your app may be asked to quit multiple times before you have responded to the initial request.
- * This handler is called each time a quit is requested, and the same {@link QuitResponse} object is passed until it is handled.
- * Once used, the {@link QuitResponse} cannot be used again to change the decision.
- *
- * @param e the request to quit this application.
- * @param response the one-shot response object used to cancel or proceed with the quit action.
+ * @param e the request to quit this application
+ * @param response the one-shot response object used to cancel or proceed
+ * with the quit action
*/
- public void handleQuitRequestWith(final QuitEvent e, final QuitResponse response);
+ public void handleQuitRequestWith(QuitEvent e, QuitResponse response);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitResponse.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitResponse.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,21 +28,23 @@
/**
* Used to respond to a request to quit the application.
*
- * @see java.awt.Desktop#setQuitHandler(java.awt.desktop.QuitHandler)
- * @see java.awt.desktop.QuitHandler
- * @see java.awt.Desktop#setQuitStrategy(java.awt.desktop.QuitStrategy)
- *
+ * @see java.awt.Desktop#setQuitHandler(QuitHandler)
+ * @see QuitHandler
+ * @see java.awt.Desktop#setQuitStrategy(QuitStrategy)
* @since 9
*/
public interface QuitResponse {
/**
- * Notifies the external quit requester that the quit will proceed, and performs the default {@link java.awt.desktop.QuitStrategy}.
+ * Notifies the external quit requester that the quit will proceed, and
+ * performs the default {@link QuitStrategy}.
*/
public void performQuit();
/**
- * Notifies the external quit requester that the user has explicitly canceled the pending quit, and leaves the application running.
+ * Notifies the external quit requester that the user has explicitly
+ * canceled the pending quit, and leaves the application running.
+ * <p>
* <b>Note: this will cancel a pending log-out, restart, or shutdown.</b>
*/
public void cancelQuit();
--- a/src/java.desktop/share/classes/java/awt/desktop/QuitStrategy.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/QuitStrategy.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -26,18 +26,19 @@
package java.awt.desktop;
/**
- * The strategy used to shut down the application, if Sudden Termination is not enabled.
+ * The strategy used to shut down the application, if Sudden Termination is not
+ * enabled.
*
- * @see java.awt.Desktop#setQuitHandler(java.awt.desktop.QuitHandler)
- * @see java.awt.Desktop#setQuitStrategy(java.awt.desktop.QuitStrategy)
+ * @see java.awt.Desktop#setQuitHandler(QuitHandler)
+ * @see java.awt.Desktop#setQuitStrategy(QuitStrategy)
* @see java.awt.Desktop#enableSuddenTermination()
* @see java.awt.Desktop#disableSuddenTermination()
- *
* @since 9
*/
public enum QuitStrategy {
/**
- * Shuts down the application by calling {@code System.exit(0)}. This is the default strategy.
+ * Shuts down the application by calling {@code System.exit(0)}. This is the
+ * default strategy.
*/
NORMAL_EXIT,
--- a/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -35,11 +35,13 @@
*
* @see ScreenSleepListener#screenAboutToSleep(ScreenSleepEvent)
* @see ScreenSleepListener#screenAwoke(ScreenSleepEvent)
- *
* @since 9
*/
public final class ScreenSleepEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 7521606180376544150L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/ScreenSleepListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -26,9 +26,11 @@
package java.awt.desktop;
/**
- * Implementors receive notification when the displays attached to the system have entered power save sleep.
- *
- * This notification is useful for discontinuing a costly animation, or indicating that the user is no longer present on a network service.
+ * Implementors receive notification when the displays attached to the system
+ * have entered power save sleep.
+ * <p>
+ * This notification is useful for discontinuing a costly animation, or
+ * indicating that the user is no longer present on a network service.
*
* @since 9
*/
@@ -36,13 +38,15 @@
/**
* Called when the system displays have entered power save sleep.
- * @param e the screen sleep event
+ *
+ * @param e the screen sleep event
*/
- public void screenAboutToSleep(final ScreenSleepEvent e);
+ public void screenAboutToSleep(ScreenSleepEvent e);
/**
* Called when the system displays have awoken from power save sleep.
- * @param e the screen sleep event
+ *
+ * @param e the screen sleep event
*/
- public void screenAwoke(final ScreenSleepEvent e);
+ public void screenAwoke(ScreenSleepEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/SystemEventListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/SystemEventListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,9 +28,8 @@
import java.util.EventListener;
/**
- * Common interface for all event listener sub-types.
- *
- * Implementors may implement multiple sub-types, but only need to call
+ * Common interface for all event listener sub-types. Implementors may implement
+ * multiple sub-types, but only need to call
* {@link java.awt.Desktop#addAppEventListener(SystemEventListener)} once to
* receive all notifications.
*
--- a/src/java.desktop/share/classes/java/awt/desktop/SystemSleepEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/SystemSleepEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -34,11 +34,13 @@
*
* @see SystemSleepListener#systemAboutToSleep(SystemSleepEvent)
* @see SystemSleepListener#systemAwoke(SystemSleepEvent)
- *
* @since 9
*/
public final class SystemSleepEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 11372269824930549L;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/SystemSleepListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/SystemSleepListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,7 +28,7 @@
/**
* Implementors receive notification as the system is entering sleep, and after
* the system wakes.
- *
+ * <p>
* This notification is useful for disconnecting from network services prior to
* sleep, or re-establishing a connection if the network configuration has
* changed during sleep.
@@ -42,14 +42,14 @@
* delivered prior to the actual system sleep, and may be processed after
* the corresponding wake has occurred.
*
- * @param e the system sleep event
+ * @param e the system sleep event
*/
- public void systemAboutToSleep(final SystemSleepEvent e);
+ public void systemAboutToSleep(SystemSleepEvent e);
/**
* Called after the system has awoken from sleeping.
*
- * @param e the system sleep event
+ * @param e the system sleep event
*/
- public void systemAwoke(final SystemSleepEvent e);
+ public void systemAwoke(SystemSleepEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/desktop/UserSessionEvent.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/UserSessionEvent.java Wed Feb 13 13:22:15 2019 -0500
@@ -30,19 +30,23 @@
import java.awt.HeadlessException;
/**
- * Event sent when the user session has been changed.
- *
- * Some systems may provide a reason of a user session change.
+ * Event sent when the user session has been changed. Some systems may provide a
+ * reason of a user session change.
*
* @see UserSessionListener#userSessionActivated(UserSessionEvent)
* @see UserSessionListener#userSessionDeactivated(UserSessionEvent)
- *
* @since 9
*/
public final class UserSessionEvent extends AppEvent {
+ /**
+ * Use serialVersionUID from JDK 9 for interoperability.
+ */
private static final long serialVersionUID = 6747138462796569055L;
+ /**
+ * The reason of the user session change.
+ */
private final Reason reason;
/**
--- a/src/java.desktop/share/classes/java/awt/desktop/UserSessionListener.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/desktop/UserSessionListener.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -25,32 +25,33 @@
package java.awt.desktop;
-
/**
* Implementors receive notification when the user session changes.
- *
- * This notification is useful for discontinuing a costly animation,
- * or indicating that the user is no longer present on a network service.
- *
+ * <p>
+ * This notification is useful for discontinuing a costly animation, or
+ * indicating that the user is no longer present on a network service.
+ * <p>
* Some systems may provide a reason of the user session change.
*
* @see UserSessionEvent.Reason#UNSPECIFIED
* @see UserSessionEvent.Reason#CONSOLE
* @see UserSessionEvent.Reason#REMOTE
* @see UserSessionEvent.Reason#LOCK
- *
* @since 9
*/
public interface UserSessionListener extends SystemEventListener {
+
/**
* Called when the user session has been switched away.
- * @param e the user session switch event
+ *
+ * @param e the user session switch event
*/
- public void userSessionDeactivated(final UserSessionEvent e);
+ public void userSessionDeactivated(UserSessionEvent e);
/**
* Called when the user session has been switched to.
- * @param e the user session switch event
+ *
+ * @param e the user session switch event
*/
- public void userSessionActivated(final UserSessionEvent e);
+ public void userSessionActivated(UserSessionEvent e);
}
--- a/src/java.desktop/share/classes/java/awt/geom/Path2D.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/geom/Path2D.java Wed Feb 13 13:22:15 2019 -0500
@@ -858,7 +858,6 @@
* path.
*
* @serialData
- * <a id="Path2DSerialData"><!-- --></a>
* <ol>
* <li>The default serializable fields.
* There are no default serializable fields as of 1.6.
@@ -1634,7 +1633,6 @@
* path.
*
* @serialData
- * <a id="Path2DSerialData"><!-- --></a>
* <ol>
* <li>The default serializable fields.
* There are no default serializable fields as of 1.6.
--- a/src/java.desktop/share/classes/java/awt/peer/RobotPeer.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/java/awt/peer/RobotPeer.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,8 @@
package java.awt.peer;
-import java.awt.*;
+import java.awt.Rectangle;
+import java.awt.Robot;
/**
* RobotPeer defines an interface whereby toolkits support automated testing
@@ -116,9 +117,4 @@
* @see Robot#createScreenCapture(Rectangle)
*/
int[] getRGBPixels(Rectangle bounds);
-
- /**
- * Disposes the robot peer when it is not needed anymore.
- */
- void dispose();
}
--- a/src/java.desktop/share/classes/sun/awt/image/BufferedImageDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/awt/image/BufferedImageDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,15 @@
package sun.awt.image;
+import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
-import java.awt.GraphicsConfiguration;
+
+public final class BufferedImageDevice extends GraphicsDevice {
-public class BufferedImageDevice extends GraphicsDevice
-{
- GraphicsConfiguration gc;
+ private final GraphicsConfiguration config;
- public BufferedImageDevice(BufferedImageGraphicsConfig gc) {
- this.gc = gc;
+ public BufferedImageDevice(final BufferedImageGraphicsConfig config) {
+ this.config = config;
}
/**
@@ -44,6 +44,7 @@
* @see #TYPE_PRINTER
* @see #TYPE_IMAGE_BUFFER
*/
+ @Override
public int getType() {
return GraphicsDevice.TYPE_IMAGE_BUFFER;
}
@@ -54,6 +55,7 @@
* @return a {@code String} that is the identification
* of this {@code GraphicsDevice}.
*/
+ @Override
public String getIDstring() {
return ("BufferedImage");
}
@@ -65,8 +67,9 @@
* objects that are associated with this
* {@code GraphicsDevice}.
*/
+ @Override
public GraphicsConfiguration[] getConfigurations() {
- return new GraphicsConfiguration[] { gc };
+ return new GraphicsConfiguration[]{config};
}
/**
@@ -75,7 +78,8 @@
* @return the default {@code GraphicsConfiguration}
* of this {@code GraphicsDevice}.
*/
+ @Override
public GraphicsConfiguration getDefaultConfiguration() {
- return gc;
+ return config;
}
}
--- a/src/java.desktop/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -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,12 +25,10 @@
package sun.awt.image;
-import java.awt.AWTException;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
-import java.awt.ImageCapabilities;
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
@@ -38,12 +36,10 @@
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
import java.awt.image.Raster;
-import java.awt.image.VolatileImage;
import java.awt.image.WritableRaster;
-public class BufferedImageGraphicsConfig
- extends GraphicsConfiguration
-{
+public final class BufferedImageGraphicsConfig extends GraphicsConfiguration {
+
private static final int numconfigs = BufferedImage.TYPE_BYTE_BINARY;
private static BufferedImageGraphicsConfig[] standardConfigs =
new BufferedImageGraphicsConfig[numconfigs];
@@ -77,24 +73,20 @@
return ret;
}
- GraphicsDevice gd;
- ColorModel model;
- Raster raster;
+ private final GraphicsDevice device;
+ private final ColorModel model;
+ private final Raster raster;
private final double scaleX;
private final double scaleY;
- public BufferedImageGraphicsConfig(BufferedImage bufImg, Component comp) {
- this(bufImg, comp, 1, 1);
- }
-
public BufferedImageGraphicsConfig(BufferedImage bufImg, Component comp,
double scaleX, double scaleY)
{
if (comp == null) {
- this.gd = new BufferedImageDevice(this);
+ device = new BufferedImageDevice(this);
} else {
Graphics2D g2d = (Graphics2D)comp.getGraphics();
- this.gd = g2d.getDeviceConfiguration().getDevice();
+ device = g2d.getDeviceConfiguration().getDevice();
}
this.model = bufImg.getColorModel();
this.raster = bufImg.getRaster().createCompatibleWritableRaster(1, 1);
@@ -105,8 +97,9 @@
/**
* Return the graphics device associated with this configuration.
*/
+ @Override
public GraphicsDevice getDevice() {
- return gd;
+ return device;
}
/**
@@ -118,6 +111,7 @@
* that is closest to this native device configuration and thus
* can be optimally blitted to this device.
*/
+ @Override
public BufferedImage createCompatibleImage(int width, int height) {
WritableRaster wr = raster.createCompatibleWritableRaster(width, height);
return new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
@@ -126,6 +120,7 @@
/**
* Returns the color model associated with this configuration.
*/
+ @Override
public ColorModel getColorModel() {
return model;
}
@@ -134,6 +129,7 @@
* Returns the color model associated with this configuration that
* supports the specified transparency.
*/
+ @Override
public ColorModel getColorModel(int transparency) {
if (model.getTransparency() == transparency) {
@@ -160,6 +156,7 @@
* increasing to the right and Y coordinates increasing downwards.
* For image buffers, this Transform will be the Identity transform.
*/
+ @Override
public AffineTransform getDefaultTransform() {
return AffineTransform.getScaleInstance(scaleX, scaleY);
}
@@ -183,10 +180,12 @@
* For image buffers, this Transform will be the Identity transform,
* since there is no valid distance measurement.
*/
+ @Override
public AffineTransform getNormalizingTransform() {
return new AffineTransform();
}
+ @Override
public Rectangle getBounds() {
return new Rectangle(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
}
--- a/src/java.desktop/share/classes/sun/java2d/HeadlessGraphicsEnvironment.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/java2d/HeadlessGraphicsEnvironment.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -25,22 +25,20 @@
package sun.java2d;
-import java.awt.GraphicsEnvironment;
+import java.awt.Font;
+import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
-import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
-import java.awt.image.BufferedImage;
-import java.awt.Font;
-import java.util.Locale;
-import sun.awt.FontConfiguration;
import java.awt.Point;
import java.awt.Rectangle;
+import java.awt.image.BufferedImage;
+import java.util.Locale;
/**
* Headless decorator implementation of a SunGraphicsEnvironment
*/
-
-public class HeadlessGraphicsEnvironment extends GraphicsEnvironment {
+public final class HeadlessGraphicsEnvironment extends GraphicsEnvironment {
private GraphicsEnvironment ge;
@@ -48,37 +46,41 @@
this.ge = ge;
}
+ @Override
public GraphicsDevice[] getScreenDevices()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public GraphicsDevice getDefaultScreenDevice()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Point getCenterPoint() throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Rectangle getMaximumWindowBounds() throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Graphics2D createGraphics(BufferedImage img) {
return ge.createGraphics(img); }
+ @Override
public Font[] getAllFonts() { return ge.getAllFonts(); }
+ @Override
public String[] getAvailableFontFamilyNames() {
return ge.getAvailableFontFamilyNames(); }
+ @Override
public String[] getAvailableFontFamilyNames(Locale l) {
- return ge.getAvailableFontFamilyNames(l); }
-
- /* Used by FontManager : internal API */
- public GraphicsEnvironment getSunGraphicsEnvironment() {
- return ge;
+ return ge.getAvailableFontFamilyNames(l);
}
}
--- a/src/java.desktop/share/classes/sun/print/PrinterGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/print/PrinterGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
* 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 java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
-
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
@@ -35,32 +34,35 @@
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
-public class PrinterGraphicsConfig extends GraphicsConfiguration {
+public final class PrinterGraphicsConfig extends GraphicsConfiguration {
static ColorModel theModel;
- GraphicsDevice gd;
- int pageWidth, pageHeight;
- AffineTransform deviceTransform;
+ private final GraphicsDevice device;
+ private final int pageWidth;
+ private final int pageHeight;
+ private final AffineTransform deviceTransform;
public PrinterGraphicsConfig(String printerID, AffineTransform deviceTx,
int pageWid, int pageHgt) {
this.pageWidth = pageWid;
this.pageHeight = pageHgt;
this.deviceTransform = deviceTx;
- this.gd = new PrinterGraphicsDevice(this, printerID);
+ this.device = new PrinterGraphicsDevice(this, printerID);
}
/**
* Return the graphics device associated with this configuration.
*/
+ @Override
public GraphicsDevice getDevice() {
- return gd;
+ return device;
}
/**
* Returns the color model associated with this configuration.
*/
+ @Override
public ColorModel getColorModel() {
if (theModel == null) {
BufferedImage bufImg =
@@ -75,6 +77,7 @@
* Returns the color model associated with this configuration that
* supports the specified transparency.
*/
+ @Override
public ColorModel getColorModel(int transparency) {
switch (transparency) {
case Transparency.OPAQUE:
@@ -97,6 +100,7 @@
* increasing to the right and Y coordinates increasing downwards.
* For image buffers, this Transform will be the Identity transform.
*/
+ @Override
public AffineTransform getDefaultTransform() {
return new AffineTransform(deviceTransform);
}
@@ -120,10 +124,12 @@
* For image buffers, this Transform will be the Identity transform,
* since there is no valid distance measurement.
*/
+ @Override
public AffineTransform getNormalizingTransform() {
return new AffineTransform();
}
+ @Override
public Rectangle getBounds() {
return new Rectangle(0, 0, pageWidth, pageHeight);
}
--- a/src/java.desktop/share/classes/sun/print/PrinterGraphicsDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/share/classes/sun/print/PrinterGraphicsDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,6 @@
* questions.
*/
-
package sun.print;
import java.awt.GraphicsConfiguration;
@@ -32,36 +31,40 @@
public final class PrinterGraphicsDevice extends GraphicsDevice {
- String printerID;
- GraphicsConfiguration graphicsConf;
+ private final String printerID;
+ private final GraphicsConfiguration config;
- protected PrinterGraphicsDevice(GraphicsConfiguration conf, String id) {
+ PrinterGraphicsDevice(GraphicsConfiguration conf, String id) {
printerID = id;
- graphicsConf = conf;
+ config = conf;
}
+ @Override
public int getType() {
return TYPE_PRINTER;
}
+ @Override
public String getIDstring() {
return printerID;
}
+ @Override
public GraphicsConfiguration[] getConfigurations() {
- GraphicsConfiguration[] confs = new GraphicsConfiguration[1];
- confs[0] = graphicsConf;
- return confs;
+ return new GraphicsConfiguration[]{config};
}
+ @Override
public GraphicsConfiguration getDefaultConfiguration() {
- return graphicsConf;
+ return config;
}
+ @Override
public void setFullScreenWindow(Window w) {
// Do nothing
}
+ @Override
public Window getFullScreenWindow() {
return null;
}
--- a/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java Wed Feb 13 13:22:15 2019 -0500
@@ -53,6 +53,7 @@
import java.util.concurrent.ArrayBlockingQueue;
import sun.awt.SunToolkit;
+import sun.awt.UNIXToolkit;
/**
* An utility window class. This is a base class for Tooltip and Balloon.
@@ -437,12 +438,24 @@
private void loadGtkImages() {
if (!gtkImagesLoaded) {
- errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
- "gtk.icon.gtk-dialog-error.6.rtl");
- warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
- "gtk.icon.gtk-dialog-warning.6.rtl");
- infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
- "gtk.icon.gtk-dialog-info.6.rtl");
+ //check whether the gtk version is >= 3.10 as the Icon names were
+ //changed from this release
+ UNIXToolkit tk = (UNIXToolkit) Toolkit.getDefaultToolkit();
+ if (tk.checkGtkVersion(3, 10, 0)) {
+ errorImage = (Image) tk.getDesktopProperty(
+ "gtk.icon.dialog-error.6.rtl");
+ warnImage = (Image) tk.getDesktopProperty(
+ "gtk.icon.dialog-warning.6.rtl");
+ infoImage = (Image) tk.getDesktopProperty(
+ "gtk.icon.dialog-information.6.rtl");
+ } else {
+ errorImage = (Image) tk.getDesktopProperty(
+ "gtk.icon.gtk-dialog-error.6.rtl");
+ warnImage = (Image) tk.getDesktopProperty(
+ "gtk.icon.gtk-dialog-warning.6.rtl");
+ infoImage = (Image) tk.getDesktopProperty(
+ "gtk.icon.gtk-dialog-info.6.rtl");
+ }
gtkImagesLoaded = true;
}
}
--- a/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -22,19 +22,22 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+
package sun.awt.X11;
-import java.awt.*;
-import java.awt.peer.*;
+import java.awt.GraphicsConfiguration;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.peer.RobotPeer;
import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
import sun.awt.UNIXToolkit;
import sun.awt.X11GraphicsConfig;
+import sun.security.action.GetPropertyAction;
-class XRobotPeer implements RobotPeer {
+final class XRobotPeer implements RobotPeer {
static final boolean tryGtk;
static {
@@ -70,11 +73,6 @@
}
@Override
- public void dispose() {
- // does nothing
- }
-
- @Override
public void mouseMove(int x, int y) {
mouseMoveImpl(xgc, xgc.scaleUp(x), xgc.scaleUp(y));
}
--- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -28,32 +28,33 @@
import java.awt.AWTException;
import java.awt.BufferCapabilities;
import java.awt.Component;
-import java.awt.Toolkit;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.Image;
import java.awt.ImageCapabilities;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
import java.awt.Transparency;
-import java.awt.image.ColorModel;
import java.awt.color.ColorSpace;
+import java.awt.geom.AffineTransform;
+import java.awt.image.ColorModel;
import java.awt.image.ComponentColorModel;
+import java.awt.image.DataBuffer;
import java.awt.image.DirectColorModel;
-import java.awt.image.DataBuffer;
import java.awt.image.VolatileImage;
import java.awt.image.WritableRaster;
-import java.awt.geom.AffineTransform;
-import java.awt.Rectangle;
+
+import sun.awt.image.OffScreenImage;
+import sun.awt.image.SunVolatileImage;
+import sun.awt.image.SurfaceManager;
import sun.java2d.Disposer;
import sun.java2d.DisposerRecord;
import sun.java2d.SurfaceData;
+import sun.java2d.loops.CompositeType;
import sun.java2d.loops.RenderLoops;
import sun.java2d.loops.SurfaceType;
-import sun.java2d.loops.CompositeType;
import sun.java2d.pipe.Region;
import sun.java2d.x11.X11SurfaceData;
-import sun.awt.image.OffScreenImage;
-import sun.awt.image.SunVolatileImage;
-import sun.awt.image.SurfaceManager;
/**
* This is an implementation of a GraphicsConfiguration object for a
@@ -65,7 +66,7 @@
public class X11GraphicsConfig extends GraphicsConfiguration
implements SurfaceManager.ProxiedGraphicsConfig
{
- protected X11GraphicsDevice screen;
+ private final X11GraphicsDevice device;
protected int visual;
int depth;
int colormap;
@@ -116,12 +117,12 @@
int visualnum, int depth,
int colormap, boolean doubleBuffer)
{
- this.screen = device;
+ this.device = device;
this.visual = visualnum;
this.doubleBuffer = doubleBuffer;
this.depth = depth;
this.colormap = colormap;
- init (visualnum, screen.getScreen());
+ init (visualnum, device.getScreen());
// add a record to the Disposer so that we destroy the native
// AwtGraphicsConfigData when this object goes away (i.e. after a
@@ -134,8 +135,9 @@
/**
* Return the graphics device associated with this configuration.
*/
+ @Override
public X11GraphicsDevice getDevice() {
- return screen;
+ return device;
}
/**
@@ -177,8 +179,9 @@
return surfaceType;
}
+ @Override
public Object getProxyKey() {
- return screen.getProxyKeyFor(getSurfaceType());
+ return device.getProxyKeyFor(getSurfaceType());
}
/**
@@ -197,6 +200,7 @@
/**
* Returns the color model associated with this configuration.
*/
+ @Override
public synchronized ColorModel getColorModel() {
if (colorModel == null) {
// Force SystemColors to be resolved before we create the CM
@@ -218,6 +222,7 @@
* Returns the color model associated with this configuration that
* supports the specified transparency.
*/
+ @Override
public ColorModel getColorModel(int transparency) {
switch (transparency) {
case Transparency.OPAQUE:
@@ -256,6 +261,7 @@
* increasing to the right and Y coordinates increasing downwards.
* For image buffers, this Transform will be the Identity transform.
*/
+ @Override
public AffineTransform getDefaultTransform() {
double scale = getScale();
return AffineTransform.getScaleInstance(scale, scale);
@@ -292,9 +298,10 @@
* For image buffers, this Transform will be the Identity transform,
* since there is no valid distance measurement.
*/
+ @Override
public AffineTransform getNormalizingTransform() {
- double xscale = getXResolution(screen.getScreen()) / 72.0;
- double yscale = getYResolution(screen.getScreen()) / 72.0;
+ double xscale = getXResolution(device.getScreen()) / 72.0;
+ double yscale = getYResolution(device.getScreen()) / 72.0;
return new AffineTransform(xscale, 0.0, 0.0, yscale, 0.0, 0.0);
}
@@ -306,7 +313,7 @@
}
public String toString() {
- return ("X11GraphicsConfig[dev="+screen+
+ return ("X11GraphicsConfig[dev="+device+
",vis=0x"+Integer.toHexString(visual)+
"]");
}
@@ -321,8 +328,9 @@
initIDs ();
}
+ @Override
public Rectangle getBounds() {
- Rectangle rect = pGetBounds(screen.getScreen());
+ Rectangle rect = pGetBounds(device.getScreen());
if (getScale() != 1) {
rect.x = scaleDown(rect.x);
rect.y = scaleDown(rect.y);
@@ -340,6 +348,7 @@
}
}
+ @Override
public BufferCapabilities getBufferCapabilities() {
if (bufferCaps == null) {
if (doubleBuffer) {
@@ -351,6 +360,7 @@
return bufferCaps;
}
+ @Override
public ImageCapabilities getImageCapabilities() {
return imageCaps;
}
@@ -366,6 +376,7 @@
public X11GCDisposerRecord(long x11CfgData) {
this.x11ConfigData = x11CfgData;
}
+ @Override
public synchronized void dispose() {
if (x11ConfigData != 0L) {
X11GraphicsConfig.dispose(x11ConfigData);
--- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, 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
@@ -27,23 +27,22 @@
import java.awt.AWTPermission;
import java.awt.DisplayMode;
-import java.awt.GraphicsEnvironment;
+import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
-import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Window;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.HashMap;
-
-import sun.java2d.opengl.GLXGraphicsConfig;
-import sun.java2d.xr.XRGraphicsConfig;
-import sun.java2d.loops.SurfaceType;
import sun.awt.util.ThreadGroupUtils;
import sun.java2d.SunGraphicsEnvironment;
+import sun.java2d.loops.SurfaceType;
+import sun.java2d.opengl.GLXGraphicsConfig;
+import sun.java2d.xr.XRGraphicsConfig;
/**
* This is an implementation of a GraphicsDevice object for a single
@@ -76,12 +75,6 @@
*/
private static native void initIDs();
- static {
- if (!GraphicsEnvironment.isHeadless()) {
- initIDs();
- }
- }
-
/**
* Returns the X11 screen of the device.
*/
@@ -113,6 +106,7 @@
* @see #TYPE_PRINTER
* @see #TYPE_IMAGE_BUFFER
*/
+ @Override
public int getType() {
return TYPE_RASTER_SCREEN;
}
@@ -121,6 +115,7 @@
* Returns the identification string associated with this graphics
* device.
*/
+ @Override
public String getIDstring() {
return ":0."+screen;
}
@@ -134,6 +129,7 @@
* Returns all of the graphics
* configurations associated with this graphics device.
*/
+ @Override
public GraphicsConfiguration[] getConfigurations() {
if (configs == null) {
synchronized (configLock) {
@@ -221,6 +217,7 @@
* Returns the default graphics configuration
* associated with this graphics device.
*/
+ @Override
public GraphicsConfiguration getDefaultConfiguration() {
if (defaultConfig == null) {
synchronized (configLock) {
@@ -487,6 +484,7 @@
* From the DisplayChangedListener interface; called from
* X11GraphicsEnvironment when the display mode has been changed.
*/
+ @Override
public synchronized void displayChanged() {
scale = initScaleFactor();
// On X11 the visuals do not change, and therefore we don't need
@@ -501,6 +499,7 @@
* From the DisplayChangedListener interface; devices do not need
* to react to this event.
*/
+ @Override
public void paletteChanged() {
}
--- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -27,20 +27,17 @@
import java.awt.AWTError;
import java.awt.GraphicsDevice;
-import java.awt.Point;
-import java.awt.Rectangle;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
-
-import java.util.*;
+import java.util.Enumeration;
import sun.java2d.SunGraphicsEnvironment;
import sun.java2d.SurfaceManagerFactory;
import sun.java2d.UnixSurfaceManagerFactory;
+import sun.java2d.xr.XRSurfaceData;
import sun.util.logging.PlatformLogger;
-import sun.java2d.xr.XRSurfaceData;
/**
* This is an implementation of a GraphicsEnvironment object for the
@@ -290,32 +287,6 @@
}
private static native boolean pRunningXinerama();
- private static native Point getXineramaCenterPoint();
-
- /**
- * Override for Xinerama case: call new Solaris API for getting the correct
- * centering point from the windowing system.
- */
- public Point getCenterPoint() {
- if (runningXinerama()) {
- Point p = getXineramaCenterPoint();
- if (p != null) {
- return p;
- }
- }
- return super.getCenterPoint();
- }
-
- /**
- * Override for Xinerama case
- */
- public Rectangle getMaximumWindowBounds() {
- if (runningXinerama()) {
- return getXineramaWindowBounds();
- } else {
- return super.getMaximumWindowBounds();
- }
- }
public boolean runningXinerama() {
if (xinerState == null) {
@@ -330,105 +301,6 @@
}
/**
- * Return the bounds for a centered Window on a system running in Xinerama
- * mode.
- *
- * Calculations are based on the assumption of a perfectly rectangular
- * display area (display edges line up with one another, and displays
- * have consistent width and/or height).
- *
- * The bounds to return depend on the arrangement of displays and on where
- * Windows are to be centered. There are two common situations:
- *
- * 1) The center point lies at the center of the combined area of all the
- * displays. In this case, the combined area of all displays is
- * returned.
- *
- * 2) The center point lies at the center of a single display. In this case
- * the user most likely wants centered Windows to be constrained to that
- * single display. The boundaries of the one display are returned.
- *
- * It is possible for the center point to be at both the center of the
- * entire display space AND at the center of a single monitor (a square of
- * 9 monitors, for instance). In this case, the entire display area is
- * returned.
- *
- * Because the center point is arbitrarily settable by the user, it could
- * fit neither of the cases above. The fallback case is to simply return
- * the combined area for all screens.
- */
- protected Rectangle getXineramaWindowBounds() {
- Point center = getCenterPoint();
- Rectangle unionRect, tempRect;
- GraphicsDevice[] gds = getScreenDevices();
- Rectangle centerMonitorRect = null;
- int i;
-
- // if center point is at the center of all monitors
- // return union of all bounds
- //
- // MM*MM MMM M
- // M*M *
- // MMM M
-
- // if center point is at center of a single monitor (but not of all
- // monitors)
- // return bounds of single monitor
- //
- // MMM MM
- // MM* *M
-
- // else, center is in some strange spot (such as on the border between
- // monitors), and we should just return the union of all monitors
- //
- // MM MMM
- // MM MMM
-
- unionRect = getUsableBounds(gds[0]);
-
- for (i = 0; i < gds.length; i++) {
- tempRect = getUsableBounds(gds[i]);
- if (centerMonitorRect == null &&
- // add a pixel or two for fudge-factor
- (tempRect.width / 2) + tempRect.x > center.x - 1 &&
- (tempRect.height / 2) + tempRect.y > center.y - 1 &&
- (tempRect.width / 2) + tempRect.x < center.x + 1 &&
- (tempRect.height / 2) + tempRect.y < center.y + 1) {
- centerMonitorRect = tempRect;
- }
- unionRect = unionRect.union(tempRect);
- }
-
- // first: check for center of all monitors (video wall)
- // add a pixel or two for fudge-factor
- if ((unionRect.width / 2) + unionRect.x > center.x - 1 &&
- (unionRect.height / 2) + unionRect.y > center.y - 1 &&
- (unionRect.width / 2) + unionRect.x < center.x + 1 &&
- (unionRect.height / 2) + unionRect.y < center.y + 1) {
-
- if (screenLog.isLoggable(PlatformLogger.Level.FINER)) {
- screenLog.finer("Video Wall: center point is at center of all displays.");
- }
- return unionRect;
- }
-
- // next, check if at center of one monitor
- if (centerMonitorRect != null) {
- if (screenLog.isLoggable(PlatformLogger.Level.FINER)) {
- screenLog.finer("Center point at center of a particular " +
- "monitor, but not of the entire virtual display.");
- }
- return centerMonitorRect;
- }
-
- // otherwise, the center is at some weird spot: return unionRect
- if (screenLog.isLoggable(PlatformLogger.Level.FINER)) {
- screenLog.finer("Center point is somewhere strange - return union of all bounds.");
- }
- return unionRect;
- }
-
- /**
* From the DisplayChangedListener interface; devices do not need
* to react to this event.
*/
--- a/src/java.desktop/unix/classes/sun/java2d/opengl/GLXGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/classes/sun/java2d/opengl/GLXGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -41,6 +41,7 @@
import java.awt.image.DirectColorModel;
import java.awt.image.VolatileImage;
import java.awt.image.WritableRaster;
+
import sun.awt.X11ComponentPeer;
import sun.awt.X11GraphicsConfig;
import sun.awt.X11GraphicsDevice;
@@ -51,15 +52,18 @@
import sun.java2d.SunGraphics2D;
import sun.java2d.Surface;
import sun.java2d.SurfaceData;
+import sun.java2d.opengl.GLXSurfaceData.GLXVSyncOffScreenSurfaceData;
import sun.java2d.pipe.hw.AccelSurface;
import sun.java2d.pipe.hw.AccelTypedVolatileImage;
import sun.java2d.pipe.hw.ContextCapabilities;
-import static sun.java2d.opengl.OGLSurfaceData.*;
-import static sun.java2d.opengl.OGLContext.*;
-import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
-import sun.java2d.opengl.GLXSurfaceData.GLXVSyncOffScreenSurfaceData;
-public class GLXGraphicsConfig
+import static sun.java2d.opengl.OGLContext.OGLContextCaps;
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_DOUBLEBUFFERED;
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_EXT_FBOBJECT;
+import static sun.java2d.opengl.OGLSurfaceData.FBOBJECT;
+import static sun.java2d.opengl.OGLSurfaceData.TEXTURE;
+
+public final class GLXGraphicsConfig
extends X11GraphicsConfig
implements OGLGraphicsConfig
{
@@ -172,11 +176,6 @@
return pConfigInfo;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
- */
@Override
public final OGLContext getContext() {
return context;
@@ -211,7 +210,7 @@
}
public String toString() {
- return ("GLXGraphicsConfig[dev="+screen+
+ return ("GLXGraphicsConfig[dev="+getDevice()+
",vis=0x"+Integer.toHexString(visual)+
"]");
}
@@ -386,11 +385,6 @@
return imageCaps;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage
- */
@Override
public VolatileImage
createCompatibleVolatileImage(int width, int height,
@@ -414,11 +408,6 @@
return vi;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
- */
@Override
public ContextCapabilities getContextCapabilities() {
return oglCaps;
--- a/src/java.desktop/unix/native/common/awt/awt_GraphicsEnv.h Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/common/awt/awt_GraphicsEnv.h Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, 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
@@ -62,12 +62,6 @@
struct X11GraphicsConfigIDs {
jfieldID aData;
jfieldID bitsPerPixel;
- jfieldID screen;
-};
-
-/* fieldIDs for X11GraphicsDevice fields that may be accessed from C */
-struct X11GraphicsDeviceIDs {
- jfieldID screen;
};
#endif /* _AWT_GRAPHICSENV_H_ */
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -96,7 +96,6 @@
} while (0)
struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
-struct X11GraphicsDeviceIDs x11GraphicsDeviceIDs;
#ifndef HEADLESS
int awtCreateX11Colormap(AwtGraphicsConfigDataPtr adata);
@@ -138,10 +137,6 @@
typedef Status XineramaGetInfoFunc(Display* display, int screen_number,
XRectangle* framebuffer_rects, unsigned char* framebuffer_hints,
int* num_framebuffers);
-typedef Status XineramaGetCenterHintFunc(Display* display, int screen_number,
- int* x, int* y);
-
-XineramaGetCenterHintFunc* XineramaSolarisCenterFunc = NULL;
#endif
Bool usingXinerama = False;
@@ -152,32 +147,20 @@
{
x11GraphicsConfigIDs.aData = NULL;
x11GraphicsConfigIDs.bitsPerPixel = NULL;
- x11GraphicsConfigIDs.screen = NULL;
x11GraphicsConfigIDs.aData = (*env)->GetFieldID (env, cls, "aData", "J");
CHECK_NULL(x11GraphicsConfigIDs.aData);
x11GraphicsConfigIDs.bitsPerPixel = (*env)->GetFieldID (env, cls, "bitsPerPixel", "I");
CHECK_NULL(x11GraphicsConfigIDs.bitsPerPixel);
- x11GraphicsConfigIDs.screen = (*env)->GetFieldID (env, cls, "screen", "Lsun/awt/X11GraphicsDevice;");
- CHECK_NULL(x11GraphicsConfigIDs.screen);
if (x11GraphicsConfigIDs.aData == NULL ||
- x11GraphicsConfigIDs.bitsPerPixel == NULL ||
- x11GraphicsConfigIDs.screen == NULL) {
+ x11GraphicsConfigIDs.bitsPerPixel == NULL) {
JNU_ThrowNoSuchFieldError(env, "Can't find a field");
return;
}
}
-JNIEXPORT void JNICALL
-Java_sun_awt_X11GraphicsDevice_initIDs (JNIEnv *env, jclass cls)
-{
- x11GraphicsDeviceIDs.screen = NULL;
- x11GraphicsDeviceIDs.screen = (*env)->GetFieldID (env, cls, "screen", "I");
- DASSERT(x11GraphicsDeviceIDs.screen);
-}
-
#ifndef HEADLESS
/*
@@ -207,6 +190,8 @@
visualList = XGetVisualInfo(awt_display,
mask, vinfo, &visualsMatched);
if (visualList) {
+ int id = -1;
+ VisualID defaultVisual = XVisualIDFromVisual(DefaultVisual(awt_display, vinfo->screen));
defaultConfig = ZALLOC(_AwtGraphicsConfigData);
for (i = 0; i < visualsMatched; i++) {
memcpy(&defaultConfig->awt_visInfo, &visualList[i], sizeof(XVisualInfo));
@@ -215,19 +200,30 @@
/* we can't use awtJNI_CreateColorData here, because it'll pull,
SystemColor, which in turn will cause toolkit to be reinitialized */
if (awtCreateX11Colormap(defaultConfig)) {
- /* Allocate white and black pixels for this visual */
- color.flags = DoRed | DoGreen | DoBlue;
- color.red = color.green = color.blue = 0x0000;
- XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
- x11Screens[visualList[i].screen].blackpixel = color.pixel;
- color.flags = DoRed | DoGreen | DoBlue;
- color.red = color.green = color.blue = 0xffff;
- XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
- x11Screens[visualList[i].screen].whitepixel = color.pixel;
+ if (visualList[i].visualid == defaultVisual) {
+ id = i;
+ break;
+ } else if (-1 == id) {
+ // Keep 1st match for fallback
+ id = i;
+ }
+ }
+ }
+ if (-1 != id) {
+ memcpy(&defaultConfig->awt_visInfo, &visualList[id], sizeof(XVisualInfo));
+ defaultConfig->awt_depth = visualList[id].depth;
+ /* Allocate white and black pixels for this visual */
+ color.flags = DoRed | DoGreen | DoBlue;
+ color.red = color.green = color.blue = 0x0000;
+ XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
+ x11Screens[visualList[id].screen].blackpixel = color.pixel;
+ color.flags = DoRed | DoGreen | DoBlue;
+ color.red = color.green = color.blue = 0xffff;
+ XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
+ x11Screens[visualList[id].screen].whitepixel = color.pixel;
- XFree(visualList);
- return defaultConfig;
- }
+ XFree(visualList);
+ return defaultConfig;
}
XFree(visualList);
free((void *)defaultConfig);
@@ -645,16 +641,12 @@
int32_t locNumScr = 0;
/* load and run XineramaGetInfo */
char* XineramaGetInfoName = "XineramaGetInfo";
- char* XineramaGetCenterHintName = "XineramaGetCenterHint";
XineramaGetInfoFunc* XineramaSolarisFunc = NULL;
/* load library */
libHandle = dlopen(JNI_LIB_NAME("Xext"), RTLD_LAZY | RTLD_GLOBAL);
if (libHandle != NULL) {
XineramaSolarisFunc = (XineramaGetInfoFunc*)dlsym(libHandle, XineramaGetInfoName);
- XineramaSolarisCenterFunc =
- (XineramaGetCenterHintFunc*)dlsym(libHandle, XineramaGetCenterHintName);
-
if (XineramaSolarisFunc != NULL) {
DTRACE_PRINTLN("calling XineramaGetInfo func on Solaris");
if ((*XineramaSolarisFunc)(awt_display, 0, &fbrects[0],
@@ -1589,38 +1581,6 @@
#endif /* HEADLESS */
}
-/*
- * Can return NULL.
- *
- * Class: sun_awt_X11GraphicsEnvironment
- * Method: getXineramaCenterPoint
- * Signature: ()Ljava/awt/Point
- */
-JNIEXPORT jobject JNICALL
-Java_sun_awt_X11GraphicsEnvironment_getXineramaCenterPoint(JNIEnv *env,
- jobject this)
-{
- jobject point = NULL;
-#ifndef HEADLESS /* return NULL in HEADLESS, Linux */
-#if !defined(__linux__) && !defined(MACOSX)
- int x,y;
-
- AWT_LOCK();
- DASSERT(usingXinerama);
- if (XineramaSolarisCenterFunc != NULL) {
- (XineramaSolarisCenterFunc)(awt_display, 0, &x, &y);
- point = JNU_NewObjectByName(env, "java/awt/Point","(II)V", x, y);
- DASSERT(point);
- } else {
- DTRACE_PRINTLN("unable to call XineramaSolarisCenterFunc: symbol is null");
- }
- AWT_FLUSH_UNLOCK();
-#endif /* __linux __ || MACOSX */
-#endif /* HEADLESS */
- return point;
-}
-
-
/**
* Begin DisplayMode/FullScreen support
*/
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c Wed Feb 13 13:22:15 2019 -0500
@@ -676,9 +676,10 @@
return NULL;
}
statusWindow->w = status;
- //12-point font
+ //12, 13-point fonts
statusWindow->fontset = XCreateFontSet(dpy,
- "-*-*-medium-r-normal-*-*-120-*-*-*-*",
+ "-*-*-medium-r-normal-*-*-120-*-*-*-*," \
+ "-*-*-medium-r-normal-*-*-130-*-*-*-*",
&mclr, &mccr, &dsr);
/* In case we didn't find the font set, release the list of missing characters */
if (mccr > 0) {
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c Wed Feb 13 13:22:15 2019 -0500
@@ -1612,7 +1612,11 @@
GtkStateFlags flags = get_gtk_flags(state_type);
if (expander_style == GTK_EXPANDER_EXPANDED) {
- flags |= GTK_STATE_FLAG_ACTIVE;
+ if (gtk3_version_3_14) {
+ flags |= GTK_STATE_FLAG_CHECKED;
+ } else {
+ flags |= GTK_STATE_FLAG_ACTIVE;
+ }
}
fp_gtk_style_context_set_state(context, flags);
--- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, 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
@@ -33,28 +33,22 @@
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
-import java.awt.ImageCapabilities;
import java.awt.Rectangle;
-import java.awt.Toolkit;
import java.awt.Transparency;
-import java.awt.Window;
import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
-import java.awt.image.Raster;
import java.awt.image.VolatileImage;
import java.awt.image.WritableRaster;
-import sun.awt.windows.WComponentPeer;
import sun.awt.image.OffScreenImage;
import sun.awt.image.SunVolatileImage;
import sun.awt.image.SurfaceManager;
+import sun.awt.windows.WComponentPeer;
import sun.java2d.SurfaceData;
-import sun.java2d.InvalidPipeException;
+import sun.java2d.loops.CompositeType;
import sun.java2d.loops.RenderLoops;
import sun.java2d.loops.SurfaceType;
-import sun.java2d.loops.CompositeType;
import sun.java2d.windows.GDIWindowSurfaceData;
/**
@@ -67,7 +61,7 @@
public class Win32GraphicsConfig extends GraphicsConfiguration
implements DisplayChangedListener, SurfaceManager.ProxiedGraphicsConfig
{
- protected Win32GraphicsDevice screen;
+ private final Win32GraphicsDevice device;
protected int visual; //PixelFormatID
protected RenderLoops solidloops;
@@ -98,7 +92,7 @@
*/
@Deprecated
public Win32GraphicsConfig(GraphicsDevice device, int visualnum) {
- this.screen = (Win32GraphicsDevice)device;
+ this.device = (Win32GraphicsDevice)device;
this.visual = visualnum;
((Win32GraphicsDevice)device).addDisplayChangedListener(this);
}
@@ -106,8 +100,9 @@
/**
* Return the graphics device associated with this configuration.
*/
+ @Override
public Win32GraphicsDevice getDevice() {
- return screen;
+ return device;
}
/**
@@ -117,8 +112,9 @@
return visual;
}
+ @Override
public Object getProxyKey() {
- return screen;
+ return device;
}
/**
@@ -139,8 +135,9 @@
/**
* Returns the color model associated with this configuration.
*/
+ @Override
public synchronized ColorModel getColorModel() {
- return screen.getColorModel();
+ return device.getColorModel();
}
/**
@@ -152,13 +149,14 @@
* to reflect the new situation.
*/
public ColorModel getDeviceColorModel() {
- return screen.getDynamicColorModel();
+ return device.getDynamicColorModel();
}
/**
* Returns the color model associated with this configuration that
* supports the specified transparency.
*/
+ @Override
public ColorModel getColorModel(int transparency) {
switch (transparency) {
case Transparency.OPAQUE:
@@ -181,9 +179,10 @@
* increasing to the right and Y coordinates increasing downwards.
* For image buffers, this Transform will be the Identity transform.
*/
+ @Override
public AffineTransform getDefaultTransform() {
- double scaleX = screen.getDefaultScaleX();
- double scaleY = screen.getDefaultScaleY();
+ double scaleX = device.getDefaultScaleX();
+ double scaleY = device.getDefaultScaleY();
return AffineTransform.getScaleInstance(scaleX, scaleY);
}
@@ -206,6 +205,7 @@
* For image buffers, this Transform will be the Identity transform,
* since there is no valid distance measurement.
*/
+ @Override
public AffineTransform getNormalizingTransform() {
Win32GraphicsEnvironment ge = (Win32GraphicsEnvironment)
GraphicsEnvironment.getLocalGraphicsEnvironment();
@@ -215,19 +215,22 @@
}
public String toString() {
- return (super.toString()+"[dev="+screen+",pixfmt="+visual+"]");
+ return (super.toString()+"[dev="+device+",pixfmt="+visual+"]");
}
private native Rectangle getBounds(int screen);
+ @Override
public Rectangle getBounds() {
- return getBounds(screen.getScreen());
+ return getBounds(device.getScreen());
}
+ @Override
public synchronized void displayChanged() {
solidloops = null;
}
+ @Override
public void paletteChanged() {}
/**
--- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -26,28 +26,27 @@
package sun.awt;
import java.awt.AWTPermission;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsEnvironment;
import java.awt.DisplayMode;
import java.awt.EventQueue;
import java.awt.Frame;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
-import java.awt.geom.Point2D;
import java.awt.image.ColorModel;
+import java.awt.peer.WindowPeer;
import java.util.ArrayList;
import java.util.Vector;
-import java.awt.peer.WindowPeer;
-import java.security.AccessController;
+
import sun.awt.windows.WWindowPeer;
import sun.java2d.SunGraphicsEnvironment;
import sun.java2d.opengl.WGLGraphicsConfig;
import sun.java2d.windows.WindowsFlags;
-import sun.security.action.GetPropertyAction;
+
import static sun.awt.Win32GraphicsEnvironment.debugScaleX;
import static sun.awt.Win32GraphicsEnvironment.debugScaleY;
@@ -131,6 +130,7 @@
* @see #TYPE_PRINTER
* @see #TYPE_IMAGE_BUFFER
*/
+ @Override
public int getType() {
return TYPE_RASTER_SCREEN;
}
@@ -189,6 +189,7 @@
* Returns the identification string associated with this graphics
* device.
*/
+ @Override
public String getIDstring() {
return idString;
}
@@ -198,6 +199,7 @@
* Returns all of the graphics
* configurations associated with this graphics device.
*/
+ @Override
public GraphicsConfiguration[] getConfigurations() {
if (configs==null) {
if (WindowsFlags.isOGLEnabled() && isDefaultDevice()) {
@@ -290,6 +292,7 @@
* Returns the default graphics configuration
* associated with this graphics device.
*/
+ @Override
public GraphicsConfiguration getDefaultConfiguration() {
if (defaultConfig == null) {
// first try to create a WGLGraphicsConfig if OGL is enabled
@@ -329,6 +332,7 @@
return defaultConfig;
}
+ @Override
public String toString() {
return valid ? descString + "]" : descString + ", removed]";
}
@@ -519,6 +523,7 @@
* Called from Win32GraphicsEnvironment when the display settings have
* changed.
*/
+ @Override
public void displayChanged() {
dynamicColorModel = null;
defaultConfig = null;
@@ -532,6 +537,7 @@
* Part of the DisplayChangedListener interface: devices
* do not need to react to this event
*/
+ @Override
public void paletteChanged() {
}
@@ -659,6 +665,7 @@
// Fix for 6709453. Using invokeLater to avoid listening
// for the events already posted to the queue.
EventQueue.invokeLater(new Runnable() {
+ @Override
public void run() {
w.addWindowListener(fsWindowListener);
}
--- a/src/java.desktop/windows/classes/sun/awt/windows/WRobotPeer.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/awt/windows/WRobotPeer.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -32,23 +32,11 @@
import sun.java2d.SunGraphicsEnvironment;
-final class WRobotPeer extends WObjectPeer implements RobotPeer
-{
- WRobotPeer() {
- create();
- }
+final class WRobotPeer implements RobotPeer {
+
WRobotPeer(GraphicsDevice screen) {
- create();
}
- private synchronized native void _dispose();
-
- @Override
- protected void disposeImpl() {
- _dispose();
- }
-
- public native void create();
public native void mouseMoveImpl(int x, int y);
@Override
public void mouseMove(int x, int y) {
--- a/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -49,14 +49,14 @@
import static sun.java2d.pipe.hw.AccelSurface.*;
import static sun.java2d.d3d.D3DContext.D3DContextCaps.*;
-public class D3DGraphicsConfig
+public final class D3DGraphicsConfig
extends Win32GraphicsConfig
implements AccelGraphicsConfig
{
private static ImageCapabilities imageCaps = new D3DImageCaps();
private BufferCapabilities bufferCaps;
- private D3DGraphicsDevice device;
+ private final D3DGraphicsDevice device;
@SuppressWarnings("deprecation")
protected D3DGraphicsConfig(D3DGraphicsDevice device) {
@@ -107,7 +107,7 @@
@Override
public String toString() {
- return ("D3DGraphicsConfig[dev="+screen+",pixfmt="+visual+"]");
+ return ("D3DGraphicsConfig[dev="+device+",pixfmt="+visual+"]");
}
/**
@@ -263,21 +263,11 @@
return device;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
- */
@Override
public D3DContext getContext() {
return device.getContext();
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage
- */
@Override
public VolatileImage
createCompatibleVolatileImage(int width, int height,
@@ -313,11 +303,6 @@
return vi;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
- */
@Override
public ContextCapabilities getContextCapabilities() {
return device.getContextCapabilities();
--- a/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,17 +42,19 @@
import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.Win32GraphicsDevice;
import sun.awt.windows.WWindowPeer;
+import sun.java2d.d3d.D3DContext.D3DContextCaps;
import sun.java2d.pipe.hw.ContextCapabilities;
import sun.java2d.windows.WindowsFlags;
-import static sun.java2d.d3d.D3DContext.D3DContextCaps.*;
-import sun.java2d.d3d.D3DContext.D3DContextCaps;
+
+import static sun.java2d.d3d.D3DContext.D3DContextCaps.CAPS_DEVICE_OK;
+import static sun.java2d.d3d.D3DContext.D3DContextCaps.CAPS_EMPTY;
/**
* This class implements D3D-specific functionality, such as fullscreen
* exclusive mode and display changes. It is kept separate from
* Win32GraphicsDevice to help avoid overburdening the parent class.
*/
-public class D3DGraphicsDevice extends Win32GraphicsDevice {
+public final class D3DGraphicsDevice extends Win32GraphicsDevice {
private D3DContext context;
private static boolean d3dAvailable;
--- a/src/java.desktop/windows/classes/sun/java2d/opengl/WGLGraphicsConfig.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/classes/sun/java2d/opengl/WGLGraphicsConfig.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
* 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,7 @@
import java.awt.image.DataBuffer;
import java.awt.image.DirectColorModel;
import java.awt.image.VolatileImage;
+
import sun.awt.Win32GraphicsConfig;
import sun.awt.Win32GraphicsDevice;
import sun.awt.image.SunVolatileImage;
@@ -48,15 +49,19 @@
import sun.java2d.SunGraphics2D;
import sun.java2d.Surface;
import sun.java2d.SurfaceData;
+import sun.java2d.opengl.OGLContext.OGLContextCaps;
import sun.java2d.pipe.hw.AccelSurface;
import sun.java2d.pipe.hw.AccelTypedVolatileImage;
import sun.java2d.pipe.hw.ContextCapabilities;
-import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
-import static sun.java2d.opengl.WGLSurfaceData.*;
-import sun.java2d.opengl.OGLContext.OGLContextCaps;
import sun.java2d.windows.GDIWindowSurfaceData;
-public class WGLGraphicsConfig
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_DOUBLEBUFFERED;
+import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_EXT_FBOBJECT;
+import static sun.java2d.opengl.WGLSurfaceData.FBOBJECT;
+import static sun.java2d.opengl.WGLSurfaceData.TEXTURE;
+import static sun.java2d.opengl.WGLSurfaceData.WGLVSyncOffScreenSurfaceData;
+
+public final class WGLGraphicsConfig
extends Win32GraphicsConfig
implements OGLGraphicsConfig
{
@@ -93,10 +98,12 @@
new WGLGCDisposerRecord(pConfigInfo));
}
+ @Override
public Object getProxyKey() {
return this;
}
+ @Override
public SurfaceData createManagedSurface(int w, int h, int transparency) {
return WGLSurfaceData.createData(this, w, h,
getColorModel(transparency),
@@ -127,6 +134,7 @@
if (cfginfo != 0L) {
OGLContext.setScratchSurface(cfginfo);
rq.flushAndInvokeNow(new Runnable() {
+ @Override
public void run() {
ids[0] = OGLContext.getOGLIdString();
}
@@ -157,6 +165,7 @@
this.screen = screen;
this.pixfmt = pixfmt;
}
+ @Override
public void run() {
cfginfo = getWGLConfigInfo(screen, pixfmt);
}
@@ -183,11 +192,6 @@
return pConfigInfo;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext
- */
@Override
public final OGLContext getContext() {
return context;
@@ -198,6 +202,7 @@
public WGLGCDisposerRecord(long pCfgInfo) {
this.pCfgInfo = pCfgInfo;
}
+ @Override
public void dispose() {
if (pCfgInfo != 0) {
OGLRenderQueue.disposeGraphicsConfig(pCfgInfo);
@@ -242,7 +247,7 @@
@Override
public String toString() {
- return ("WGLGraphicsConfig[dev="+screen+",pixfmt="+visual+"]");
+ return ("WGLGraphicsConfig[dev="+getDevice()+",pixfmt="+visual+"]");
}
/**
@@ -388,6 +393,7 @@
private WGLImageCaps() {
super(true);
}
+ @Override
public boolean isTrueVolatile() {
return true;
}
@@ -398,11 +404,6 @@
return imageCaps;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage
- */
@Override
public VolatileImage
createCompatibleVolatileImage(int width, int height,
@@ -426,11 +427,6 @@
return vi;
}
- /**
- * {@inheritDoc}
- *
- * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities
- */
@Override
public ContextCapabilities getContextCapabilities() {
return oglCaps;
--- a/src/java.desktop/windows/native/libawt/windows/awt_Robot.cpp Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Robot.cpp Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -23,32 +23,17 @@
* questions.
*/
-#include "awt.h"
-#include "awt_Toolkit.h"
-#include "awt_Component.h"
-#include "awt_Robot.h"
#include "sun_awt_windows_WRobotPeer.h"
#include "java_awt_event_InputEvent.h"
+#include "awt_Component.h"
#include <winuser.h>
-AwtRobot::AwtRobot( jobject peer )
-{
- JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
- m_peerObject = env->NewWeakGlobalRef(peer);
- JNU_CHECK_EXCEPTION(env);
- JNI_SET_PDATA(peer, this);
-}
-
-AwtRobot::~AwtRobot()
-{
-}
-
static int signum(int i) {
// special version of signum which returns 1 when value is 0
return i >= 0 ? 1 : -1;
}
-void AwtRobot::MouseMove( jint x, jint y)
+static void MouseMove(jint x, jint y)
{
INPUT mouseInput = {0};
mouseInput.type = INPUT_MOUSE;
@@ -59,7 +44,7 @@
::SendInput(1, &mouseInput, sizeof(mouseInput));
}
-void AwtRobot::MousePress( jint buttonMask )
+static void MousePress(jint buttonMask)
{
DWORD dwFlags = 0L;
// According to MSDN: Software Driving Software
@@ -101,7 +86,7 @@
::SendInput(1, &mouseInput, sizeof(mouseInput));
}
-void AwtRobot::MouseRelease( jint buttonMask )
+static void MouseRelease(jint buttonMask)
{
DWORD dwFlags = 0L;
// According to MSDN: Software Driving Software
@@ -144,11 +129,11 @@
::SendInput(1, &mouseInput, sizeof(mouseInput));
}
-void AwtRobot::MouseWheel (jint wheelAmt) {
+static void MouseWheel(jint wheelAmt) {
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, wheelAmt * -1 * WHEEL_DELTA, 0);
}
-inline jint AwtRobot::WinToJavaPixel(USHORT r, USHORT g, USHORT b)
+inline jint WinToJavaPixel(USHORT r, USHORT g, USHORT b)
{
jint value =
0xFF << 24 | // alpha channel is always turned all the way up
@@ -158,7 +143,7 @@
return value;
}
-void AwtRobot::GetRGBPixels(jint x, jint y, jint width, jint height, jintArray pixelArray)
+static void GetRGBPixels(jint x, jint y, jint width, jint height, jintArray pixelArray)
{
DASSERT(width > 0 && height > 0);
@@ -255,17 +240,7 @@
::DeleteDC(hdcScreen);
}
-void AwtRobot::KeyPress( jint jkey )
-{
- DoKeyEvent(jkey, 0); // no flags means key down
-}
-
-void AwtRobot::KeyRelease( jint jkey )
-{
- DoKeyEvent(jkey, KEYEVENTF_KEYUP);
-}
-
-void AwtRobot::DoKeyEvent( jint jkey, DWORD dwFlags )
+static void DoKeyEvent(jint jkey, DWORD dwFlags)
{
UINT vkey;
UINT modifiers;
@@ -297,48 +272,16 @@
}
}
-//
-// utility function to get the C++ object from the Java one
-//
-// (static)
-AwtRobot * AwtRobot::GetRobot( jobject self )
-{
- JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
- AwtRobot * robot = (AwtRobot *)JNI_GET_PDATA(self);
- DASSERT( !::IsBadWritePtr( robot, sizeof(AwtRobot)));
- return robot;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
// Native method declarations
//
-JNIEXPORT void JNICALL Java_sun_awt_windows_WRobotPeer_create(
- JNIEnv * env, jobject self)
-{
- TRY;
-
- new AwtRobot(self);
-
- CATCH_BAD_ALLOC;
-}
-
-JNIEXPORT void JNICALL Java_sun_awt_windows_WRobotPeer__1dispose(
- JNIEnv *env, jobject self)
-{
- TRY_NO_VERIFY;
-
- AwtObject::_Dispose(self);
-
- CATCH_BAD_ALLOC;
-}
-
JNIEXPORT void JNICALL Java_sun_awt_windows_WRobotPeer_mouseMoveImpl(
JNIEnv * env, jobject self, jint x, jint y)
{
TRY;
- AwtRobot::GetRobot(self)->MouseMove(x, y);
+ MouseMove(x, y);
CATCH_BAD_ALLOC;
}
@@ -348,7 +291,7 @@
{
TRY;
- AwtRobot::GetRobot(self)->MousePress(buttons);
+ MousePress(buttons);
CATCH_BAD_ALLOC;
}
@@ -358,7 +301,7 @@
{
TRY;
- AwtRobot::GetRobot(self)->MouseRelease(buttons);
+ MouseRelease(buttons);
CATCH_BAD_ALLOC;
}
@@ -368,7 +311,7 @@
{
TRY;
- AwtRobot::GetRobot(self)->MouseWheel(wheelAmt);
+ MouseWheel(wheelAmt);
CATCH_BAD_ALLOC;
}
@@ -378,7 +321,7 @@
{
TRY;
- AwtRobot::GetRobot(self)->GetRGBPixels(x, y, width, height, pixelArray);
+ GetRGBPixels(x, y, width, height, pixelArray);
CATCH_BAD_ALLOC;
}
@@ -388,7 +331,7 @@
{
TRY;
- AwtRobot::GetRobot(self)->KeyPress(javakey);
+ DoKeyEvent(javakey, 0); // no flags means key down
CATCH_BAD_ALLOC;
}
@@ -398,7 +341,7 @@
{
TRY;
- AwtRobot::GetRobot(self)->KeyRelease(javakey);
+ DoKeyEvent(javakey, KEYEVENTF_KEYUP);
CATCH_BAD_ALLOC;
}
--- a/src/java.desktop/windows/native/libawt/windows/awt_Robot.h Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#ifndef AWT_ROBOT_H
-#define AWT_ROBOT_H
-
-#include "awt_Toolkit.h"
-#include "awt_Object.h"
-#include "sun_awt_windows_WRobotPeer.h"
-#include "jlong.h"
-
-class AwtRobot : public AwtObject
-{
- public:
- AwtRobot( jobject peer );
- virtual ~AwtRobot();
-
- void MouseMove( jint x, jint y);
- void MousePress( jint buttonMask );
- void MouseRelease( jint buttonMask );
-
- void MouseWheel(jint wheelAmt);
- jint getNumberOfButtons();
-
- void GetRGBPixels(jint x, jint y, jint width, jint height, jintArray pixelArray);
-
- void KeyPress( jint key );
- void KeyRelease( jint key );
- static AwtRobot * GetRobot( jobject self );
-
- private:
- void DoKeyEvent( jint jkey, DWORD dwFlags );
- static jint WinToJavaPixel(USHORT r, USHORT g, USHORT b);
-};
-
-#endif // AWT_ROBOT_H
--- a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java Wed Feb 13 13:22:15 2019 -0500
@@ -259,7 +259,7 @@
private boolean bodyIsPresent(Response r) {
HttpHeaders headers = r.headers();
- if (headers.firstValue("Content-length").isPresent())
+ if (headers.firstValueAsLong("Content-length").orElse(0L) != 0L)
return true;
if (headers.firstValue("Transfer-encoding").isPresent())
return true;
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java Wed Feb 13 13:22:15 2019 -0500
@@ -597,10 +597,6 @@
if (contentLength > 0) {
h.setHeader("content-length", Long.toString(contentLength));
}
- URI uri = request.uri();
- if (uri != null) {
- h.setHeader("host", Utils.hostString(request));
- }
HttpHeaders sysh = filterHeaders(h.build());
HttpHeaders userh = filterHeaders(request.getUserHeaders());
// Filter context restricted from userHeaders
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_ja.properties Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -53,7 +53,7 @@
javac.opt.encoding=\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u4F7F\u7528\u3059\u308B\u6587\u5B57\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u3092\u6307\u5B9A\u3059\u308B
javac.opt.profile=\u4F7F\u7528\u3055\u308C\u3066\u3044\u308BAPI\u304C\u6307\u5B9A\u3057\u305F\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3067\u4F7F\u7528\u53EF\u80FD\u304B\u3069\u3046\u304B\u3092\u78BA\u8A8D\u3057\u307E\u3059
javac.opt.target=\u7279\u5B9A\u306EVM\u30D0\u30FC\u30B8\u30E7\u30F3\u7528\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30D0\u30FC\u30B8\u30E7\u30F3: {0}
-javac.opt.release=\u7279\u5B9A\u306E\u30EA\u30EA\u30FC\u30B9\u7528\u306B\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
+javac.opt.release=\u7279\u5B9A\u306E\u30EA\u30EA\u30FC\u30B9\u7528\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
javac.opt.source=\u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u4FDD\u6301\u3057\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30EA\u30EA\u30FC\u30B9: {0}
javac.opt.Werror=\u8B66\u544A\u304C\u767A\u751F\u3057\u305F\u5834\u5408\u306B\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7D42\u4E86\u3059\u308B
javac.opt.A=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u306B\u6E21\u3055\u308C\u308B\u30AA\u30D7\u30B7\u30E7\u30F3
@@ -66,7 +66,7 @@
javac.opt.arg.key.equals.value=key[=value]
javac.opt.arg.path=<path>
javac.opt.arg.mspath=<module-source-path>
-javac.opt.arg.m=<module-name>
+javac.opt.arg.m=<module>(,<module>)*
javac.opt.arg.jdk=<jdk>|none
javac.opt.arg.dirs=<dirs>
javac.opt.arg.directory=<directory>
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
javac.opt.classpath=\u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u548C\u6CE8\u91CA\u5904\u7406\u7A0B\u5E8F\u7684\u4F4D\u7F6E
javac.opt.modulepath=\u6307\u5B9A\u67E5\u627E\u5E94\u7528\u7A0B\u5E8F\u6A21\u5757\u7684\u4F4D\u7F6E
javac.opt.sourcepath=\u6307\u5B9A\u67E5\u627E\u8F93\u5165\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E
-javac.opt.m=\u53EA\u7F16\u8BD1\u6307\u5B9A\u7684\u6A21\u5757, \u8BF7\u68C0\u67E5\u65F6\u95F4\u6233
+javac.opt.m=\u53EA\u7F16\u8BD1\u6307\u5B9A\u7684\u6A21\u5757\uFF0C\u8BF7\u68C0\u67E5\u65F6\u95F4\u6233
javac.opt.modulesourcepath=\u6307\u5B9A\u67E5\u627E\u591A\u4E2A\u6A21\u5757\u7684\u8F93\u5165\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E
javac.opt.bootclasspath=\u8986\u76D6\u5F15\u5BFC\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E
javac.opt.system=\u8986\u76D6\u7CFB\u7EDF\u6A21\u5757\u4F4D\u7F6E
@@ -66,7 +66,7 @@
javac.opt.arg.key.equals.value=key[=value]
javac.opt.arg.path=<path>
javac.opt.arg.mspath=<module-source-path>
-javac.opt.arg.m=<module-name>
+javac.opt.arg.m=<\u6A21\u5757>(,<\u6A21\u5757>)*
javac.opt.arg.jdk=<jdk>|none
javac.opt.arg.dirs=<dirs>
javac.opt.arg.directory=<directory>
--- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyStore.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyStore.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -772,6 +772,8 @@
}
if (debug != null) {
dumpTokenMap();
+ debug.println("P11KeyStore load. Entry count: " +
+ aliasMap.size());
}
} catch (KeyStoreException | PKCS11Exception e) {
throw new IOException("load failed", e);
--- a/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CKeyStore.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CKeyStore.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -45,6 +45,8 @@
import java.security.interfaces.RSAPrivateCrtKey;
import java.util.*;
+import sun.security.util.Debug;
+
/**
* Implementation of key store for Windows using the Microsoft Crypto API.
*
@@ -180,6 +182,7 @@
private static final String KEYSTORE_COMPATIBILITY_MODE_PROP =
"sun.security.mscapi.keyStoreCompatibilityMode";
private final boolean keyStoreCompatibilityMode;
+ private static final Debug debug = Debug.getInstance("keystore");
/*
* The keystore entries.
@@ -710,6 +713,11 @@
} catch (KeyStoreException e) {
throw new IOException(e);
}
+
+ if (debug != null) {
+ debug.println("MSCAPI keystore load: entry count: " +
+ entries.size());
+ }
}
/**
--- a/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -171,6 +171,13 @@
* this is set to the appropriate value depending on the response length parameter.
* <p>
* This method must be called prior to calling {@link #getResponseBody()}.
+ *
+ * @implNote This implementation allows the caller to instruct the
+ * server to force a connection close after the exchange terminates, by
+ * supplying a {@code Connection: close} header to the {@linkplain
+ * #getResponseHeaders() response headers} before {@code sendResponseHeaders}
+ * is called.
+ *
* @param rCode the response code to send
* @param responseLength if {@literal > 0}, specifies a fixed response
* body length and that exact number of bytes must be written
--- a/src/jdk.httpserver/share/classes/sun/net/httpserver/ExchangeImpl.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.httpserver/share/classes/sun/net/httpserver/ExchangeImpl.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
import java.lang.System.Logger;
import java.lang.System.Logger.Level;
import java.text.*;
+import java.util.stream.Stream;
import com.sun.net.httpserver.*;
class ExchangeImpl {
@@ -261,6 +262,22 @@
o.setWrappedStream (new FixedLengthOutputStream (this, ros, contentLen));
}
}
+
+ // A custom handler can request that the connection be
+ // closed after the exchange by supplying Connection: close
+ // to the response header. Nothing to do if the exchange is
+ // already set up to be closed.
+ if (!close) {
+ Stream<String> conheader =
+ Optional.ofNullable(rspHdrs.get("Connection"))
+ .map(List::stream).orElse(Stream.empty());
+ if (conheader.anyMatch("close"::equalsIgnoreCase)) {
+ Logger logger = server.getLogger();
+ logger.log (Level.DEBUG, "Connection: close requested by handler");
+ close = true;
+ }
+ }
+
write (rspHdrs, tmpout);
this.rspContentLen = contentLen;
tmpout.flush() ;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jcmd/linux/classes/sun/tools/ProcessHelper.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. 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.tools;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.stream.Stream;
+
+/**
+ * A helper class that retrieves the main class name for
+ * a running Java process using the proc filesystem (procfs)
+ */
+public class ProcessHelper implements sun.tools.common.ProcessHelper {
+
+
+ private static final String CMD_PREFIX = "cmd:";
+ private static final ProcessHelper INSTANCE = new ProcessHelper();
+
+ public static ProcessHelper getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Gets the main class name for the given Java process by parsing the
+ * process command line.
+ * @param pid - process ID (pid)
+ * @return main class name or null if the process no longer exists or
+ * was started with a native launcher (e.g. jcmd etc)
+ */
+
+ public String getMainClass(String pid) {
+ String cmdLine = getCommandLine(pid);
+ if (cmdLine == null) {
+ return null;
+ }
+ if (cmdLine.startsWith(CMD_PREFIX)) {
+ cmdLine = cmdLine.substring(CMD_PREFIX.length());
+ }
+ String[] parts = cmdLine.split(" ");
+ String mainClass = null;
+
+ if(parts.length == 0) {
+ return null;
+ }
+
+ // Check the executable
+ String[] executablePath = parts[0].split("/");
+ if (executablePath.length > 0) {
+ String binaryName = executablePath[executablePath.length - 1];
+ if (!"java".equals(binaryName)) {
+ // Skip the process if it is not started with java launcher
+ return null;
+ }
+ }
+
+ // If -jar option is used then read the main class name from the manifest file.
+ // Otherwise, the main class name is either specified in -m or --module options or it
+ // is the first part that is not a Java option (doesn't start with '-' and is not a
+ // classpath or a module path).
+
+ for (int i = 1; i < parts.length && mainClass == null; i++) {
+ if (i < parts.length - 1) {
+ // Check if the module is executed with explicitly specified main class
+ if ((parts[i].equals("-m") || parts[i].equals("--module"))) {
+ return getMainClassFromModuleArg(parts[i + 1]);
+ }
+ // Check if the main class needs to be read from the manifest.mf in a JAR file
+ if (parts[i].equals("-jar")) {
+ return getMainClassFromJar(parts[i + 1], pid);
+ }
+ }
+ // If this is a classpath or a module path option then skip the next part
+ // (the classpath or the module path itself)
+ if (parts[i].equals("-cp") || parts[i].equals("-classpath") || parts[i].equals("--class-path") ||
+ parts[i].equals("-p") || parts[i].equals("--module-path")) {
+ i++;
+ continue;
+ }
+ // Skip all other Java options
+ if (parts[i].startsWith("-")) {
+ continue;
+ }
+ mainClass = parts[i];
+ }
+ return mainClass;
+
+ }
+
+ private String getMainClassFromModuleArg(String moduleArg) {
+ int pos = moduleArg.lastIndexOf("/");
+ return (pos > 0 && pos < moduleArg.length()-1) ? moduleArg.substring(pos + 1) : null;
+ }
+
+ private String getMainClassFromJar(String jar, String pid) {
+ if (!jar.startsWith("/")) {
+ String cwd = getCurrentWorkingDir(pid);
+ if (cwd != null) {
+ jar = cwd + "/" + jar;
+ }
+ }
+ try (JarFile jarFile = new JarFile(jar)) {
+ Manifest mf = jarFile.getManifest();
+ if (mf != null) {
+ Attributes mainAttributes = mf.getMainAttributes();
+ return mainAttributes.getValue("Main-Class");
+ }
+ } catch (IOException e) {
+ return null;
+ }
+ return null;
+ }
+
+ private static String getCurrentWorkingDir(String pid) {
+ return ("/proc/" + pid + "/cwd");
+ }
+
+ private static String getCommandLine(String pid) {
+ try (Stream<String> lines =
+ Files.lines(Paths.get("/proc/" + pid + "/cmdline"))) {
+ return lines.map(x -> x.replaceAll("\0", " ")).findFirst().orElse(null);
+ } catch (IOException | UncheckedIOException e) {
+ return null;
+ }
+ }
+}
+
+
--- a/src/jdk.jcmd/share/classes/sun/tools/common/ProcessArgumentMatcher.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.jcmd/share/classes/sun/tools/common/ProcessArgumentMatcher.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -78,25 +78,37 @@
}
private static boolean check(VirtualMachineDescriptor vmd, String excludeClass, String partialMatch) {
+
String mainClass = null;
- try {
- VmIdentifier vmId = new VmIdentifier(vmd.id());
- MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(vmId);
- MonitoredVm monitoredVm = monitoredHost.getMonitoredVm(vmId, -1);
- mainClass = MonitoredVmUtil.mainClass(monitoredVm, true);
- monitoredHost.detach(monitoredVm);
- } catch (NullPointerException npe) {
- // There is a potential race, where a running java app is being
- // queried, unfortunately the java app has shutdown after this
- // method is started but before getMonitoredVM is called.
- // If this is the case, then the /tmp/hsperfdata_xxx/pid file
- // will have disappeared and we will get a NullPointerException.
- // Handle this gracefully....
- return false;
- } catch (MonitorException | URISyntaxException e) {
- return false;
+
+ // Get the main class name using platform specific helper
+ ProcessHelper helper = ProcessHelper.platformProcessHelper();
+ if (helper != null) {
+ mainClass = helper.getMainClass(vmd.id());
}
+ // If the main class name is still unset then retrieve it with the attach mechanism
+ if (mainClass == null) {
+ try {
+ VmIdentifier vmId = new VmIdentifier(vmd.id());
+ MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(vmId);
+ MonitoredVm monitoredVm = monitoredHost.getMonitoredVm(vmId, -1);
+ mainClass = MonitoredVmUtil.mainClass(monitoredVm, true);
+ monitoredHost.detach(monitoredVm);
+ } catch (NullPointerException npe) {
+ // There is a potential race, where a running java app is being
+ // queried, unfortunately the java app has shutdown after this
+ // method is started but before getMonitoredVM is called.
+ // If this is the case, then the /tmp/hsperfdata_xxx/pid file
+ // will have disappeared and we will get a NullPointerException.
+ // Handle this gracefully....
+ return false;
+ } catch (MonitorException | URISyntaxException e) {
+ return false;
+ }
+ }
+
+
if (excludeClass != null && mainClass.equals(excludeClass)) {
return false;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jcmd/share/classes/sun/tools/common/ProcessHelper.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. 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.tools.common;
+
+import java.lang.reflect.Method;
+
+/**
+ * A helper class to retrieve the main class name for a running
+ * Java process.
+ */
+
+public interface ProcessHelper {
+
+ /**
+ * Returns an instance of the ProcessHelper class.
+ *
+ * @return ProcessHelper object or null if not supported on this platform.
+ */
+ public static ProcessHelper platformProcessHelper() {
+ try {
+ Class<?> c = Class.forName("sun.tools.ProcessHelper");
+ @SuppressWarnings("unchecked")
+ Method m = c.getMethod("getInstance");
+ return (ProcessHelper) m.invoke(null);
+ } catch (ClassNotFoundException e) {
+ return null;
+ } catch (ReflectiveOperationException e) {
+ throw new InternalError(e);
+ }
+ }
+
+
+ /**
+ * Returns the main class name for the given Java process
+ *
+ * @param pid - process ID (pid)
+ * @return main class name or null if the main class could not be retrieved
+ */
+
+ String getMainClass(String pid);
+}
--- a/src/jdk.zipfs/share/classes/module-info.java Tue Feb 12 11:58:41 2019 -0500
+++ b/src/jdk.zipfs/share/classes/module-info.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,14 +24,89 @@
*/
/**
- * Provides the implementation of the zip file system provider.
+ * Provides the implementation of the Zip file system provider.
+ * The Zip file system provider treats the contents of a Zip or JAR file as a file system.
+ * <p>
+ *
+ * <h3>Accessing a Zip File System</h3>
+ *
+ * The {@linkplain java.nio.file.FileSystems FileSystems} {@code newFileSystem}
+ * static factory methods can be used to:
+ * <ul>
+ * <li>Create a Zip file system</li>
+ * <li>Open an existing file as a Zip file system</li>
+ * </ul>
+ *
+ * <h3>URI Scheme Used to Identify the Zip File System</h3>
+ *
+ * The URI {@link java.net.URI#getScheme scheme} that identifies the ZIP file system is {@code jar}.
+ *
+ * <h3>Zip File System Properties</h3>
+ *
+ * The following properties may be specified when creating a Zip
+ * file system:
+ * <p>
+ * <table class="striped">
+ * <caption style="display:none">
+ * Configurable properties that may be specified when creating
+ * a new Zip file system
+ * </caption>
+ * <thead>
+ * <tr>
+ * <th scope="col">Property Name</th>
+ * <th scope="col">Data Type</th>
+ * <th scope="col">Default Value</th>
+ * <th scope="col">Description</th>
+ * </tr>
+ * </thead>
*
- * <p> The zip file system provider treats a zip or JAR file as a file system
- * and provides the ability to manipulate the contents of the file.
- * The zip file system provider can be created by
- * {@link java.nio.file.FileSystems#newFileSystem
- * FileSystems.newFileSystem} if installed.
+ * <tbody>
+ * <tr>
+ * <td scope="row">create</td>
+ * <td>java.lang.String</td>
+ * <td>false</td>
+ * <td>
+ * If the value is {@code true}, the Zip file system provider
+ * creates a new Zip or JAR file if it does not exist.
+ * </td>
+ * </tr>
+ * <tr>
+ * <td scope="row">encoding</td>
+ * <td>java.lang.String</td>
+ * <td>UTF-8</td>
+ * <td>
+ * The value indicates the encoding scheme for the
+ * names of the entries in the Zip or JAR file.
+ * </td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * <h3>Examples:</h3>
*
+ * Construct a new Zip file system that is identified by a URI. If the Zip file does not exist,
+ * it will be created:
+ * <pre>
+ * {@code
+ *
+ * URI uri = URI.create("jar:file:/home/luckydog/tennisTeam.zip");
+ * Map<String, String> env = Map.of("create", "true");
+ * FileSystem zipfs = FileSystems.newFileSystem(uri, env);
+ * }
+ * </pre>
+ *
+ * Construct a new Zip file system that is identified by specifying a path
+ * and using automatic file type detection. Iterate from the root of the JAR displaying each
+ * found entry:
+ * <pre>
+ * {@code
+ *
+ * FileSystem zipfs = FileSystems.newFileSystem(Path.of("helloworld.jar"), null);
+ * Path rootDir = zipfs.getPath("/");
+ * Files.walk(rootDir)
+ * .forEach(System.out::println);
+ * }
+ * </pre>
* @provides java.nio.file.spi.FileSystemProvider
* @moduleGraph
* @since 9
--- a/test/hotspot/jtreg/ProblemList.txt Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/ProblemList.txt Wed Feb 13 13:22:15 2019 -0500
@@ -82,6 +82,7 @@
runtime/handshake/HandshakeWalkSuspendExitTest.java 8214174 generic-all
runtime/SharedArchiveFile/SASymbolTableTest.java 8193639 solaris-all
+runtime/CompressedOops/UseCompressedOops.java 8079353 windows-all
#############################################################################
@@ -163,7 +164,6 @@
vmTestbase/nsk/jdi/EventRequest/setEnabled/setenabled003/TestDescription.java 8066993 generic-all
vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses021/TestDescription.java 8065773 generic-all
vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescription.java 8065773 generic-all
-vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 8068225 generic-all
vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 8208250 generic-all
vmTestbase/metaspace/gc/firstGC_50m/TestDescription.java 8208250 generic-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c2/TestUseOptoBiasInliningWithoutEliminateLocks.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 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
+ * 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 8217990
+ * @summary With -XX:+UseOptoBiasInlining loading the markword is replaced by 0L if EliminateLocks is disabled. assert(dmw->is_neutral()) failed: invariant fails.
+ * @author Richard Reingruber richard DOT reingruber AT sap DOT com
+ *
+ * @library /test/lib /test/hotspot/jtreg
+ *
+ * @build sun.hotspot.WhiteBox
+ * @build ClassFileInstaller
+ *
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ *
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions
+ * -XX:CompileCommand=compileonly,*.TestUseOptoBiasInliningWithoutEliminateLocks::dontinline_testMethod
+ * -XX:CompileCommand=dontinline,*::dontinline_*
+ * -XX:-EliminateLocks
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:.
+ * -Xbatch
+ * -XX:-TieredCompilation
+ * compiler.c2.TestUseOptoBiasInliningWithoutEliminateLocks
+ */
+
+package compiler.c2;
+
+import sun.hotspot.WhiteBox;
+
+public class TestUseOptoBiasInliningWithoutEliminateLocks {
+
+ public static final WhiteBox WB = WhiteBox.getWhiteBox();
+
+ public static void main(String[] args) {
+ new TestUseOptoBiasInliningWithoutEliminateLocks().run();
+ }
+
+ public boolean warmupDone;
+
+ public void run() {
+ for(int i = 0; i < 30000; i++) {
+ dontinline_testMethod();
+ }
+ warmupDone = true;
+ dontinline_testMethod();
+ }
+
+ public void dontinline_testMethod() {
+ PointXY l1 = new PointXY(4.0f, 2.0f);
+ synchronized (l1) {
+ dontinline_deopt();
+ }
+ }
+
+ public void dontinline_deopt() {
+ if (warmupDone) {
+ WB.deoptimizeFrames(false);
+ }
+ }
+
+ static class PointXY {
+
+ public float fritz;
+ public float felix;
+
+ public PointXY(float fritz_param, float felix_param) {
+ this.fritz = fritz_param;
+// this.felix = felix_param;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/intrinsics/math/TestFpMinMaxIntrinsics.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute 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 8212043
+ * @summary Test compiler intrinsics of floating-point Math.min/max
+ *
+ * @run main/othervm -Xint compiler.intrinsics.math.TestFpMinMaxIntrinsics
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions
+ * -Xcomp -XX:TieredStopAtLevel=1
+ * -XX:CompileOnly=java/lang/Math
+ * compiler.intrinsics.math.TestFpMinMaxIntrinsics
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions
+ * -Xcomp -XX:-TieredCompilation
+ * -XX:CompileOnly=java/lang/Math
+ * compiler.intrinsics.math.TestFpMinMaxIntrinsics
+ */
+
+package compiler.intrinsics.math;
+
+import java.util.Arrays;
+
+public class TestFpMinMaxIntrinsics {
+
+ private static final float fPos = 15280.0f;
+ private static final float fNeg = -55555.5f;
+ private static final float fPosZero = 0.0f;
+ private static final float fNegZero = -0.0f;
+ private static final float fPosInf = Float.POSITIVE_INFINITY;
+ private static final float fNegInf = Float.NEGATIVE_INFINITY;
+ private static final float fNaN = Float.NaN;
+
+ private static final double dPos = 482390926662501720.0;
+ private static final double dNeg = -333333333333333333.3;
+ private static final double dPosZero = 0.0;
+ private static final double dNegZero = -0.0;
+ private static final double dPosInf = Double.POSITIVE_INFINITY;
+ private static final double dNegInf = Double.NEGATIVE_INFINITY;
+ private static final double dNaN = Double.NaN;
+
+ private static final float[][] f_cases = {
+ // a b min max
+ { fPos, fPos, fPos, fPos },
+ { fPos, fNeg, fNeg, fPos },
+ { fPosZero, fNegZero, fNegZero, fPosZero },
+ { fNegZero, fNegZero, fNegZero, fNegZero },
+ { fPos, fPosInf, fPos, fPosInf },
+ { fNeg, fNegInf, fNegInf, fNeg },
+ { fPos, fNaN, fNaN, fNaN },
+ { fNegInf, fNaN, fNaN, fNaN },
+ };
+
+ private static final double[][] d_cases = {
+ // a b min max
+ { dPos, dPos, dPos, dPos },
+ { dPos, dNeg, dNeg, dPos },
+ { dPosZero, dNegZero, dNegZero, dPosZero },
+ { dNegZero, dNegZero, dNegZero, dNegZero },
+ { dPos, dPosInf, dPos, dPosInf },
+ { dNeg, dNegInf, dNegInf, dNeg },
+ { dPos, dNaN, dNaN, dNaN },
+ { dNegInf, dNaN, dNaN, dNaN },
+ };
+
+ private static void fTest(float[] row) {
+ float min = Math.min(row[0], row[1]);
+ float max = Math.max(row[0], row[1]);
+ if (Float.isNaN(min) && Float.isNaN(max)
+ && Float.isNaN(row[2]) && Float.isNaN(row[3])) {
+ // Return if all of them are NaN
+ return;
+ }
+ if (min != row[2] || max != row[3]) {
+ throw new AssertionError("Unexpected result of float min/max: " +
+ "a = " + row[0] + ", b = " + row[1] + ", " +
+ "result = (" + min + ", " + max + "), " +
+ "expected = (" + row[2] + ", " + row[3] + ")");
+ }
+ }
+
+ private static void dTest(double[] row) {
+ double min = Math.min(row[0], row[1]);
+ double max = Math.max(row[0], row[1]);
+ if (Double.isNaN(min) && Double.isNaN(max)
+ && Double.isNaN(row[2]) && Double.isNaN(row[3])) {
+ // Return if all of them are NaN
+ return;
+ }
+ if (min != row[2] || max != row[3]) {
+ throw new AssertionError("Unexpected result of double min/max" +
+ "a = " + row[0] + ", b = " + row[1] + ", " +
+ "result = (" + min + ", " + max + "), " +
+ "expected = (" + row[2] + ", " + row[3] + ")");
+ }
+ }
+
+ public static void main(String[] args) {
+ Arrays.stream(f_cases).forEach(TestFpMinMaxIntrinsics::fTest);
+ Arrays.stream(d_cases).forEach(TestFpMinMaxIntrinsics::dTest);
+ System.out.println("PASS");
+ }
+}
+
--- a/test/hotspot/jtreg/gc/TestAgeOutput.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAgeOutput.java Wed Feb 13 13:22:15 2019 -0500
@@ -55,12 +55,9 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jdk.test.lib.Platform;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import static jdk.test.lib.Asserts.*;
-
public class TestAgeOutput {
public static void checkPattern(String pattern, String what) throws Exception {
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAt.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAt.java Wed Feb 13 13:22:15 2019 -0500
@@ -40,7 +40,7 @@
public class TestAllocateHeapAt {
public static void main(String args[]) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
String testVmOptsStr = System.getProperty("test.java.opts");
if (!testVmOptsStr.isEmpty()) {
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAtError.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAtError.java Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
public class TestAllocateHeapAtError {
public static void main(String args[]) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
String testVmOptsStr = System.getProperty("test.java.opts");
if (!testVmOptsStr.isEmpty()) {
--- a/test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestAllocateHeapAtMultiple.java Wed Feb 13 13:22:15 2019 -0500
@@ -40,7 +40,7 @@
public class TestAllocateHeapAtMultiple {
public static void main(String args[]) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
String[] testVmOpts = null;
String test_dir = System.getProperty("test.dir", ".");
--- a/test/hotspot/jtreg/gc/TestCardTablePageCommits.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestCardTablePageCommits.java Wed Feb 13 13:22:15 2019 -0500
@@ -23,7 +23,6 @@
package gc;
-import jdk.test.lib.JDKToolFinder;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.Platform;
--- a/test/hotspot/jtreg/gc/TestFullGCCount.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestFullGCCount.java Wed Feb 13 13:22:15 2019 -0500
@@ -52,7 +52,7 @@
int iterations = 20;
boolean failed = false;
String errorMessage = "";
- HashMap<String, List> counts = new HashMap<>();
+ HashMap<String, List<Long>> counts = new HashMap<>();
// Prime the collection of count lists for all collectors.
for (int i = 0; i < collectors.size(); i++) {
@@ -91,10 +91,10 @@
System.out.println("Passed.");
}
- private static void addCollectionCount(HashMap<String, List> counts, int iteration) {
+ private static void addCollectionCount(HashMap<String, List<Long>> counts, int iteration) {
for (int i = 0; i < collectors.size(); i++) {
GarbageCollectorMXBean collector = collectors.get(i);
- List thisList = counts.get(collector.getName());
+ List<Long> thisList = counts.get(collector.getName());
thisList.add(collector.getCollectionCount());
}
}
--- a/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,6 @@
package gc;
import static jdk.test.lib.Asserts.*;
-import gc.testlibrary.PerfCounter;
import gc.testlibrary.PerfCounters;
--- a/test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestMemoryMXBeansAndPoolsPresence.java Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,6 @@
package gc;
import java.util.List;
-import java.util.ArrayList;
import java.lang.management.*;
import static jdk.test.lib.Asserts.*;
import java.util.stream.*;
--- a/test/hotspot/jtreg/gc/TestNumWorkerOutput.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestNumWorkerOutput.java Wed Feb 13 13:22:15 2019 -0500
@@ -54,12 +54,9 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jdk.test.lib.Platform;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import static jdk.test.lib.Asserts.*;
-
public class TestNumWorkerOutput {
public static void checkPatternOnce(String pattern, String what) throws Exception {
--- a/test/hotspot/jtreg/gc/TestObjectAlignment.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestObjectAlignment.java Wed Feb 13 13:22:15 2019 -0500
@@ -44,9 +44,6 @@
* @run main/othervm gc.TestObjectAlignment -Xmx20M -XX:-ExplicitGCInvokesConcurrent -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=256
*/
-import jdk.test.lib.process.ProcessTools;
-import jdk.test.lib.process.OutputAnalyzer;
-
public class TestObjectAlignment {
public static byte[] garbage;
--- a/test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestPolicyNamePerfCounter.java Wed Feb 13 13:22:15 2019 -0500
@@ -24,7 +24,6 @@
package gc;
import static jdk.test.lib.Asserts.*;
-import gc.testlibrary.PerfCounter;
import gc.testlibrary.PerfCounters;
--- a/test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestSoftReferencesBehaviorOnOOME.java Wed Feb 13 13:22:15 2019 -0500
@@ -71,9 +71,9 @@
void softReferencesOom(long minSize, long maxSize) {
System.out.format( "minSize = %d, maxSize = %d%n", minSize, maxSize );
- LinkedList<SoftReference> arrSoftRefs = new LinkedList();
+ LinkedList<SoftReference<byte[]>> arrSoftRefs = new LinkedList<>();
staticRef = arrSoftRefs;
- LinkedList arrObjects = new LinkedList();
+ LinkedList<byte[]> arrObjects = new LinkedList<>();
staticRef = arrObjects;
long multiplier = maxSize - minSize;
@@ -89,7 +89,7 @@
while (numSofts-- > 0) {
int allocationSize = ((int) (RND_GENERATOR.nextDouble() * multiplier))
+ (int)minSize;
- arrSoftRefs.add(new SoftReference(new byte[allocationSize]));
+ arrSoftRefs.add(new SoftReference<byte[]>(new byte[allocationSize]));
}
System.out.println("free: " + Runtime.getRuntime().freeMemory());
@@ -106,7 +106,7 @@
arrObjects = null;
long oomSoftArraySize = arrSoftRefs.size();
- for (SoftReference sr : arrSoftRefs) {
+ for (SoftReference<byte[]> sr : arrSoftRefs) {
Object o = sr.get();
if (o != null) {
--- a/test/hotspot/jtreg/gc/TestVerifyDuringStartup.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifyDuringStartup.java Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,7 @@
public class TestVerifyDuringStartup {
public static void main(String args[]) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
String testVmOptsStr = System.getProperty("test.java.opts");
if (!testVmOptsStr.isEmpty()) {
--- a/test/hotspot/jtreg/gc/TestVerifySilently.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifySilently.java Wed Feb 13 13:22:15 2019 -0500
@@ -49,7 +49,7 @@
public class TestVerifySilently {
private static OutputAnalyzer runTest(boolean verifySilently) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
Collections.addAll(vmOpts, Utils.getFilteredTestJavaOpts("-Xlog.*"));
Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
--- a/test/hotspot/jtreg/gc/TestVerifySubSet.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/TestVerifySubSet.java Wed Feb 13 13:22:15 2019 -0500
@@ -47,7 +47,7 @@
public class TestVerifySubSet {
private static OutputAnalyzer runTest(String subset) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
Collections.addAll(vmOpts, Utils.getFilteredTestJavaOpts("-Xlog.*"));
Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
--- a/test/hotspot/jtreg/gc/arguments/AllocationHelper.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/AllocationHelper.java Wed Feb 13 13:22:15 2019 -0500
@@ -23,7 +23,6 @@
package gc.arguments;
-import java.util.LinkedList;
import java.util.concurrent.Callable;
/**
--- a/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestSelectDefaultGC.java Wed Feb 13 13:22:15 2019 -0500
@@ -35,12 +35,9 @@
* @run driver gc.arguments.TestSelectDefaultGC
*/
-import jdk.test.lib.Platform;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import java.util.regex.*;
-
public class TestSelectDefaultGC {
public static void assertVMOption(OutputAnalyzer output, String option, boolean value) {
output.shouldMatch(" " + option + " .*=.* " + value + " ");
--- a/test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/arguments/TestShrinkHeapInSteps.java Wed Feb 13 13:22:15 2019 -0500
@@ -37,7 +37,6 @@
import java.util.LinkedList;
import java.util.Arrays;
-import java.util.Collections;
import jdk.test.lib.Utils;
public class TestShrinkHeapInSteps {
--- a/test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java Wed Feb 13 13:22:15 2019 -0500
@@ -42,8 +42,6 @@
import jdk.test.lib.process.ProcessTools;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Arrays;
import sun.hotspot.WhiteBox;
public class TestCMSClassUnloadingEnabledHWM {
--- a/test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/class_unloading/TestG1ClassUnloadingHWM.java Wed Feb 13 13:22:15 2019 -0500
@@ -39,8 +39,6 @@
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import java.util.ArrayList;
-import java.util.Arrays;
import sun.hotspot.WhiteBox;
public class TestG1ClassUnloadingHWM {
--- a/test/hotspot/jtreg/gc/cms/TestMBeanCMS.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/cms/TestMBeanCMS.java Wed Feb 13 13:22:15 2019 -0500
@@ -137,7 +137,7 @@
public void allocationWork(long target) {
long sizeAllocated = 0;
- List list = new LinkedList();
+ List<byte[]> list = new LinkedList<>();
long delay = 50;
long count = 0;
--- a/test/hotspot/jtreg/gc/concurrent_phase_control/CheckControl.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/concurrent_phase_control/CheckControl.java Wed Feb 13 13:22:15 2019 -0500
@@ -51,7 +51,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jdk.test.lib.Platform;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java Wed Feb 13 13:22:15 2019 -0500
@@ -38,8 +38,6 @@
* @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestArraycopyCheckcast
*/
-import java.util.Random;
-
public class TestArraycopyCheckcast {
static int COUNT = Integer.getInteger("count", 1000);
--- a/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabled.java Wed Feb 13 13:22:15 2019 -0500
@@ -32,7 +32,6 @@
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC gc.epsilon.TestEpsilonEnabled
*/
-import jdk.test.lib.Platform;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
--- a/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/epsilon/TestMemoryMXBeans.java Wed Feb 13 13:22:15 2019 -0500
@@ -36,7 +36,6 @@
*/
import java.lang.management.*;
-import java.util.*;
public class TestMemoryMXBeans {
--- a/test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegionsLog.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestEagerReclaimHumongousRegionsLog.java Wed Feb 13 13:22:15 2019 -0500
@@ -39,12 +39,8 @@
import sun.hotspot.WhiteBox;
import java.util.Arrays;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import jdk.test.lib.Asserts;
-import jdk.test.lib.Platform;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/test/hotspot/jtreg/gc/g1/TestHumongousShrinkHeap.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestHumongousShrinkHeap.java Wed Feb 13 13:22:15 2019 -0500
@@ -52,7 +52,7 @@
public static final String MIN_FREE_RATIO_FLAG_NAME = "MinHeapFreeRatio";
public static final String MAX_FREE_RATIO_FLAG_NAME = "MaxHeapFreeRatio";
- private static final List<List<byte[]>> garbage = new ArrayList();
+ private static final List<List<byte[]>> garbage = new ArrayList<>();
private static final int REGION_SIZE = 1024 * 1024; // 1M
private static final int LISTS_COUNT = 10;
private static final int HUMON_SIZE = Math.round(.9f * REGION_SIZE);
@@ -108,7 +108,7 @@
private void allocate() {
for (int i = 0; i < LISTS_COUNT; i++) {
- List<byte[]> stuff = new ArrayList();
+ List<byte[]> stuff = new ArrayList<>();
allocateList(stuff, HUMON_COUNT, HUMON_SIZE);
MemoryUsagePrinter.printMemoryUsage("allocate #" + (i+1));
garbage.add(stuff);
@@ -120,12 +120,12 @@
garbage.subList(0, garbage.size() - 1).clear();
// do not free last one element from last list
- List stuff = garbage.get(garbage.size() - 1);
+ List<byte[]> stuff = garbage.get(garbage.size() - 1);
stuff.subList(0, stuff.size() - 1).clear();
System.gc();
}
- private static void allocateList(List garbage, int count, int size) {
+ private static void allocateList(List<byte[]> garbage, int count, int size) {
for (int i = 0; i < count; i++) {
garbage.add(new byte[size]);
}
--- a/test/hotspot/jtreg/gc/g1/TestLargePageUseForAuxMemory.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestLargePageUseForAuxMemory.java Wed Feb 13 13:22:15 2019 -0500
@@ -38,9 +38,6 @@
*/
import java.lang.Math;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.Asserts;
--- a/test/hotspot/jtreg/gc/g1/TestPLABOutput.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestPLABOutput.java Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jdk.test.lib.Platform;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/test/hotspot/jtreg/gc/g1/TestPeriodicLogMessages.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestPeriodicLogMessages.java Wed Feb 13 13:22:15 2019 -0500
@@ -36,7 +36,6 @@
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import jdk.test.lib.Platform;
public class TestPeriodicLogMessages {
--- a/test/hotspot/jtreg/gc/g1/TestRemsetLoggingTools.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestRemsetLoggingTools.java Wed Feb 13 13:22:15 2019 -0500
@@ -27,13 +27,10 @@
* Common helpers for TestRemsetLogging* tests
*/
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.VMOption;
import sun.hotspot.WhiteBox;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
-import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Arrays;
--- a/test/hotspot/jtreg/gc/g1/TestShrinkAuxiliaryData.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestShrinkAuxiliaryData.java Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,6 @@
import jdk.test.lib.Platform;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
-import jdk.test.lib.Utils;
import jtreg.SkippedException;
import java.io.IOException;
@@ -36,7 +35,6 @@
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -68,7 +66,7 @@
}
protected void test() throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
Collections.addAll(vmOpts, initialOpts);
int maxCacheSize = Math.max(0, Math.min(31, getMaxCacheSize()));
@@ -84,14 +82,14 @@
// for 32 bits ObjectAlignmentInBytes is not a option
if (Platform.is32bit()) {
- ArrayList<String> vmOptsWithoutAlign = new ArrayList(vmOpts);
+ ArrayList<String> vmOptsWithoutAlign = new ArrayList<>(vmOpts);
vmOptsWithoutAlign.add(ShrinkAuxiliaryDataTest.class.getName());
performTest(vmOptsWithoutAlign);
return;
}
for (int alignment = 3; alignment <= 8; alignment++) {
- ArrayList<String> vmOptsWithAlign = new ArrayList(vmOpts);
+ ArrayList<String> vmOptsWithAlign = new ArrayList<>(vmOpts);
vmOptsWithAlign.add("-XX:ObjectAlignmentInBytes="
+ (int) Math.pow(2, alignment));
vmOptsWithAlign.add(ShrinkAuxiliaryDataTest.class.getName());
@@ -202,8 +200,8 @@
class GarbageObject {
- private final List<byte[]> payload = new ArrayList();
- private final List<GarbageObject> ref = new LinkedList();
+ private final List<byte[]> payload = new ArrayList<>();
+ private final List<GarbageObject> ref = new LinkedList<>();
public GarbageObject(int size) {
payload.add(new byte[size]);
@@ -220,7 +218,7 @@
}
}
- private final List<GarbageObject> garbage = new ArrayList();
+ private final List<GarbageObject> garbage = new ArrayList<>();
public void test() throws IOException {
--- a/test/hotspot/jtreg/gc/g1/TestShrinkDefragmentedHeap.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestShrinkDefragmentedHeap.java Wed Feb 13 13:22:15 2019 -0500
@@ -139,7 +139,7 @@
garbage.subList(0, garbage.size() - 1).clear();
// do not free last one element from last list
- ArrayList stuff = garbage.get(garbage.size() - 1);
+ ArrayList<byte[]> stuff = garbage.get(garbage.size() - 1);
if (stuff.size() > 1) {
stuff.subList(0, stuff.size() - 1).clear();
}
@@ -159,7 +159,7 @@
);
}
- private static void allocateList(List garbage, int count, int size) {
+ private static void allocateList(List<byte[]> garbage, int count, int size) {
for (int i = 0; i < count; i++) {
garbage.add(new byte[size]);
}
--- a/test/hotspot/jtreg/gc/g1/TestStringDeduplicationTools.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestStringDeduplicationTools.java Wed Feb 13 13:22:15 2019 -0500
@@ -27,9 +27,7 @@
* Common code for string deduplication tests
*/
-import java.lang.management.*;
import java.lang.reflect.*;
-import java.security.*;
import java.util.*;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
--- a/test/hotspot/jtreg/gc/g1/TestVerifyGCType.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/TestVerifyGCType.java Wed Feb 13 13:22:15 2019 -0500
@@ -38,7 +38,6 @@
import java.util.Collections;
import jdk.test.lib.Asserts;
-import jdk.test.lib.Utils;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import sun.hotspot.WhiteBox;
--- a/test/hotspot/jtreg/gc/g1/humongousObjects/TestObjectCollected.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/humongousObjects/TestObjectCollected.java Wed Feb 13 13:22:15 2019 -0500
@@ -139,7 +139,7 @@
System.out.println(String.format("Testing %s reference behavior after %s", ref.name(), gc.name()));
- Reference reference = ref.create();
+ Reference<byte[]> reference = ref.create();
Asserts.assertNotNull(reference, "Test Bug: failed to allocate reference");
long adr = WHITE_BOX.getObjectAddress(reference.get());
--- a/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java Wed Feb 13 13:22:15 2019 -0500
@@ -42,8 +42,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Collections;
-
import java.lang.management.*;
// 8195115 says that for the "G1 Old Gen" MemoryPool, CollectionUsage.used
--- a/test/hotspot/jtreg/gc/logging/TestDeprecatedPrintFlags.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/logging/TestDeprecatedPrintFlags.java Wed Feb 13 13:22:15 2019 -0500
@@ -36,10 +36,8 @@
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.List;
import java.util.stream.Collectors;
public class TestDeprecatedPrintFlags {
--- a/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java Wed Feb 13 13:22:15 2019 -0500
@@ -27,7 +27,6 @@
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
-import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
--- a/test/hotspot/jtreg/gc/logging/TestPrintReferences.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/logging/TestPrintReferences.java Wed Feb 13 13:22:15 2019 -0500
@@ -36,8 +36,6 @@
import java.lang.ref.SoftReference;
import java.math.BigDecimal;
-import java.util.ArrayList;
-
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import java.util.regex.Pattern;
--- a/test/hotspot/jtreg/gc/metaspace/TestMetaspaceMemoryPool.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/metaspace/TestMetaspaceMemoryPool.java Wed Feb 13 13:22:15 2019 -0500
@@ -26,8 +26,6 @@
import java.util.List;
import java.lang.management.*;
import jdk.test.lib.Platform;
-import jdk.test.lib.process.ProcessTools;
-import jdk.test.lib.process.OutputAnalyzer;
import static jdk.test.lib.Asserts.*;
/* @test TestMetaspaceMemoryPool
--- a/test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java Wed Feb 13 13:22:15 2019 -0500
@@ -70,7 +70,7 @@
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+UsePerfData -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC gc.metaspace.TestMetaspacePerfCounters
*/
public class TestMetaspacePerfCounters {
- public static Class fooClass = null;
+ public static Class<?> fooClass = null;
private static final String[] counterNames = {"minCapacity", "maxCapacity", "capacity", "used"};
private static final List<GarbageCollectorMXBean> gcBeans = ManagementFactoryHelper.getGarbageCollectorMXBeans();
--- a/test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java Wed Feb 13 13:22:15 2019 -0500
@@ -28,7 +28,6 @@
import jdk.test.lib.Platform;
import static jdk.test.lib.Asserts.*;
-import gc.testlibrary.PerfCounter;
import gc.testlibrary.PerfCounters;
/* @test TestPerfCountersAndMemoryPools
--- a/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAt.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAt.java Wed Feb 13 13:22:15 2019 -0500
@@ -43,7 +43,7 @@
private static ArrayList<String> commonOpts;
public static void main(String args[]) throws Exception {
- commonOpts = new ArrayList();
+ commonOpts = new ArrayList<>();
String testVmOptsStr = System.getProperty("test.java.opts");
if (!testVmOptsStr.isEmpty()) {
@@ -63,7 +63,7 @@
}
private static void runTest(String... extraFlags) throws Exception {
- ArrayList<String> testOpts = new ArrayList();
+ ArrayList<String> testOpts = new ArrayList<>();
Collections.addAll(testOpts, commonOpts.toArray(new String[commonOpts.size()]));
Collections.addAll(testOpts, extraFlags);
--- a/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtError.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtError.java Wed Feb 13 13:22:15 2019 -0500
@@ -45,7 +45,7 @@
private static ArrayList<String> commonOpts;
public static void main(String args[]) throws Exception {
- commonOpts = new ArrayList();
+ commonOpts = new ArrayList<>();
String testVmOptsStr = System.getProperty("test.java.opts");
if (!testVmOptsStr.isEmpty()) {
@@ -94,7 +94,7 @@
}
private static OutputAnalyzer runTest(String... extraFlags) throws Exception {
- ArrayList<String> testOpts = new ArrayList();
+ ArrayList<String> testOpts = new ArrayList<>();
Collections.addAll(testOpts, commonOpts.toArray(new String[commonOpts.size()]));
Collections.addAll(testOpts, extraFlags);
--- a/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtMultiple.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestAllocateOldGenAtMultiple.java Wed Feb 13 13:22:15 2019 -0500
@@ -42,7 +42,7 @@
public class TestAllocateOldGenAtMultiple {
public static void main(String args[]) throws Exception {
- ArrayList<String> vmOpts = new ArrayList();
+ ArrayList<String> vmOpts = new ArrayList<>();
String[] testVmOpts = null;
String test_dir = System.getProperty("test.dir", ".");
--- a/test/hotspot/jtreg/gc/nvdimm/TestHumongousObjectsOnNvdimm.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestHumongousObjectsOnNvdimm.java Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
import sun.hotspot.WhiteBox;
import java.util.ArrayList;
-import java.util.List;
import java.util.Collections;
import gc.testlibrary.Helpers;
@@ -54,7 +53,7 @@
private static ArrayList<String> testOpts;
public static void main(String args[]) throws Exception {
- testOpts = new ArrayList();
+ testOpts = new ArrayList<>();
String[] common_options = new String[] {
"-Xbootclasspath/a:.",
--- a/test/hotspot/jtreg/gc/nvdimm/TestOldObjectsOnNvdimm.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestOldObjectsOnNvdimm.java Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
import sun.hotspot.WhiteBox;
import java.util.ArrayList;
-import java.util.List;
import java.util.Collections;
/*
@@ -54,7 +53,7 @@
private static ArrayList<String> testOpts;
public static void main(String args[]) throws Exception {
- testOpts = new ArrayList();
+ testOpts = new ArrayList<>();
String[] common_options = new String[] {
"-Xbootclasspath/a:.",
--- a/test/hotspot/jtreg/gc/nvdimm/TestYoungObjectsOnDram.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/nvdimm/TestYoungObjectsOnDram.java Wed Feb 13 13:22:15 2019 -0500
@@ -41,7 +41,6 @@
import sun.hotspot.WhiteBox;
import java.util.ArrayList;
-import java.util.List;
import java.util.Collections;
/**
@@ -54,7 +53,7 @@
private static ArrayList<String> testOpts;
public static void main(String args[]) throws Exception {
- testOpts = new ArrayList();
+ testOpts = new ArrayList<>();
String[] common_options = new String[] {
"-Xbootclasspath/a:.",
--- a/test/hotspot/jtreg/gc/stress/TestReclaimStringsLeaksMemory.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/stress/TestReclaimStringsLeaksMemory.java Wed Feb 13 13:22:15 2019 -0500
@@ -55,12 +55,12 @@
public static final int ReservedThreshold = 70000;
public static void main(String[] args) throws Exception {
- ArrayList<String> baseargs = new ArrayList(Arrays.asList( "-Xms256M",
- "-Xmx256M",
- "-Xlog:gc*",
- "-XX:NativeMemoryTracking=summary",
- "-XX:+UnlockDiagnosticVMOptions",
- "-XX:+PrintNMTStatistics" ));
+ ArrayList<String> baseargs = new ArrayList<>(Arrays.asList("-Xms256M",
+ "-Xmx256M",
+ "-Xlog:gc*",
+ "-XX:NativeMemoryTracking=summary",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+PrintNMTStatistics" ));
baseargs.addAll(Arrays.asList(args));
baseargs.add(GCTest.class.getName());
ProcessBuilder pb_default =
--- a/test/hotspot/jtreg/gc/stress/gclocker/TestGCLocker.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/stress/gclocker/TestGCLocker.java Wed Feb 13 13:22:15 2019 -0500
@@ -30,7 +30,6 @@
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage;
-import java.nio.ByteBuffer;
import java.util.ArrayDeque;
import java.util.HashMap;
import java.util.List;
--- a/test/hotspot/jtreg/gc/stress/systemgc/TestSystemGC.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/stress/systemgc/TestSystemGC.java Wed Feb 13 13:22:15 2019 -0500
@@ -26,7 +26,6 @@
// A test that stresses a full GC by allocating objects of different lifetimes
// and concurrently calling System.gc().
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
--- a/test/hotspot/jtreg/gc/whitebox/TestConcMarkCycleWB.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/gc/whitebox/TestConcMarkCycleWB.java Wed Feb 13 13:22:15 2019 -0500
@@ -38,7 +38,6 @@
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+UseG1GC gc.whitebox.TestConcMarkCycleWB
* @summary Verifies that ConcurrentMarking-related WB works properly
*/
-import static jdk.test.lib.Asserts.assertFalse;
import static jdk.test.lib.Asserts.assertTrue;
import sun.hotspot.WhiteBox;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/NMT/MallocSiteTypeChange.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,70 @@
+/*
+ * 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 MallocSiteTypeChange
+ * @bug 8200109
+ * @key nmt jcmd
+ * @modules java.base/jdk.internal.misc
+ * @library /test/lib
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocSiteTypeChange
+ */
+
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.hotspot.WhiteBox;
+
+public class MallocSiteTypeChange {
+ public static void main(String args[]) throws Exception {
+ OutputAnalyzer output;
+ WhiteBox wb = WhiteBox.getWhiteBox();
+
+ // Grab my own PID
+ String pid = Long.toString(ProcessTools.getProcessId());
+ ProcessBuilder pb = new ProcessBuilder();
+
+ int pc = 1;
+ long addr = wb.NMTMallocWithPseudoStack(4 * 1024, pc);
+
+ // Verify that current tracking level is "detail"
+ pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary"});
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Test (reserved=4KB, committed=4KB)");
+
+ pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "baseline"});
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Baseline succeeded");
+
+ wb.NMTFree(addr);
+ addr = wb.NMTMallocWithPseudoStackAndType(2 * 1024, pc, 7 /* mtInternal */ );
+ pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "detail.diff"});
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("(malloc=0KB type=Test -4KB)");
+ output.shouldContain("(malloc=2KB type=Internal +2KB #1 +1)");
+ output.shouldHaveExitValue(0);
+ }
+}
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/HelpTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/HelpTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -33,6 +33,7 @@
* @test
* @summary Test of diagnostic command help (tests all DCMD executors)
* @library /test/lib
+ * /vmTestbase
* @modules java.base/jdk.internal.misc
* java.compiler
* java.management
@@ -55,7 +56,13 @@
@Test
public void mainClass() {
- run(new MainClassJcmdExecutor());
+ TestProcessLauncher t = new TestProcessLauncher(Process.class.getName());
+ try {
+ t.launch();
+ run(new MainClassJcmdExecutor(Process.class.getName()));
+ } finally {
+ t.quit();
+ }
}
@Test
@@ -68,4 +75,6 @@
run(new JMXExecutor());
}
+ private static class Process extends TestJavaProcess {
+ }
}
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/InvalidCommandTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/InvalidCommandTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -33,6 +33,7 @@
* @test
* @summary Test of invalid diagnostic command (tests all DCMD executors)
* @library /test/lib
+ * /vmTestbase
* @modules java.base/jdk.internal.misc
* java.compiler
* java.management
@@ -53,7 +54,13 @@
@Test
public void mainClass() {
- run(new MainClassJcmdExecutor());
+ TestProcessLauncher t = new TestProcessLauncher(Process.class.getName());
+ try {
+ t.launch();
+ run(new MainClassJcmdExecutor(Process.class.getName()));
+ } finally {
+ t.quit();
+ }
}
@Test
@@ -65,4 +72,7 @@
public void jmx() {
run(new JMXExecutor());
}
+
+ private static class Process extends TestJavaProcess {
+ }
}
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/TEST.properties Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-exclusiveAccess.dirs=.
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/TestJavaProcess.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import nsk.share.jpda.*;
+import nsk.share.jdi.*;
+
+/**
+ * A simple process that connects to a pipe and waits for command "quit" to
+ * be received.
+ *
+ * Usage: java TestJavaProcess -pipe.port <PIPE_PORT_NUMBER>
+ */
+
+public class TestJavaProcess {
+
+ static final int PASSED = 0;
+ static final int FAILED = 2;
+
+ public static void main(String argv[]) {
+
+ log("Test Java process started!");
+
+ ArgumentHandler argHandler = new ArgumentHandler(argv);
+ IOPipe pipe = argHandler.createDebugeeIOPipe();
+ pipe.println("ready");
+ log("Waiting for the quit command from the test ...");
+ String cmd = pipe.readln();
+ int exitCode = PASSED;
+ if (cmd.equals("quit")) {
+ log("'quit' received");
+ } else {
+ log("Invalid command received " + cmd);
+ exitCode = FAILED;
+ }
+ System.exit(exitCode);
+ }
+
+ private static void log(String message) {
+ System.out.println(message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/TestProcessLauncher.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,78 @@
+
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import nsk.share.*;
+import nsk.share.jpda.*;
+import nsk.share.jdi.*;
+
+/**
+ * Launches a new Java process that uses a communication pipe to interact
+ * with the test.
+ */
+
+public class TestProcessLauncher {
+
+ private final String className;
+ private final ArgumentHandler argHandler;
+
+ private IOPipe pipe;
+
+ public TestProcessLauncher(String className, ArgumentHandler argHandler) {
+ this.className = className;
+ this.argHandler = argHandler;
+ }
+
+ public TestProcessLauncher(String className) {
+ this(className, new ArgumentHandler(new String[0]));
+ }
+
+ public Process launch() {
+
+ String java = argHandler.getLaunchExecPath();
+
+ Log log = new Log(System.out, argHandler);
+ Binder binder = new Binder(argHandler, log);
+ binder.prepareForPipeConnection(argHandler);
+
+ String cmd = java + " " + className + " -pipe.port=" + argHandler.getPipePort();
+
+ Debugee debuggee = binder.startLocalDebugee(cmd);
+ debuggee.redirectOutput(log);
+
+ pipe = new IOPipe(debuggee);
+
+ String line = pipe.readln();
+ if (!"ready".equals(line)) {
+ System.out.println("Wrong reply received:" + line);
+ }
+ return debuggee.getProcess();
+ }
+
+ public void quit() {
+ if (pipe != null) {
+ pipe.println("quit");
+ }
+ }
+
+}
--- a/test/hotspot/jtreg/serviceability/dcmd/framework/VMVersionTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/serviceability/dcmd/framework/VMVersionTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -27,6 +27,7 @@
import jdk.test.lib.dcmd.MainClassJcmdExecutor;
import jdk.test.lib.dcmd.FileJcmdExecutor;
import jdk.test.lib.dcmd.JMXExecutor;
+import nsk.share.jdi.ArgumentHandler;
import org.testng.annotations.Test;
@@ -34,6 +35,8 @@
* @test
* @summary Test of diagnostic command VM.version (tests all DCMD executors)
* @library /test/lib
+ * /vmTestbase
+ * @build TestJavaProcess
* @modules java.base/jdk.internal.misc
* java.compiler
* java.management
@@ -53,7 +56,13 @@
@Test
public void mainClass() {
- run(new MainClassJcmdExecutor());
+ TestProcessLauncher t = new TestProcessLauncher(Process.class.getName());
+ try {
+ t.launch();
+ run(new MainClassJcmdExecutor(Process.class.getName()));
+ } finally {
+ t.quit();
+ }
}
@Test
@@ -65,4 +74,6 @@
public void jmx() {
run(new JMXExecutor());
}
+
+ private static class Process extends TestJavaProcess{}
}
--- a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -78,6 +78,7 @@
exitStatus = Consts.TEST_FAILED;
e.printStackTrace();
} finally {
+ debugee.resume();
debugee.endDebugee();
}
display("Test finished. exitStatus = " + exitStatus);
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -557,6 +557,7 @@
* exit status code.
*/
public int endDebugee() {
+ int status = waitFor();
if (vm != null) {
try {
vm.dispose();
@@ -564,7 +565,7 @@
}
vm = null;
}
- return waitFor();
+ return status;
}
/*
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java Wed Feb 13 13:22:15 2019 -0500
@@ -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 @@
* Make preperation for IOPipe connection before starting debugee VM process.
* May change options in the passed <code>argumentHandler</code>.
*/
- protected void prepareForPipeConnection(DebugeeArgumentHandler argumentHandler) {
+ public void prepareForPipeConnection(DebugeeArgumentHandler argumentHandler) {
if (argumentHandler.isTransportAddressDynamic()) {
try {
pipeServerSocket = new ServerSocket();
--- a/test/jdk/ProblemList.txt Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/ProblemList.txt Wed Feb 13 13:22:15 2019 -0500
@@ -147,7 +147,6 @@
java/awt/EventQueue/6980209/bug6980209.java 8198615 macosx-all
java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java 8198237 macosx-all
java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java 8144030 macosx-all,linux-all
-java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java 8208290 macosx-all
java/awt/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150 macosx-all
java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all
java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogButtonTest/EnqueueWithDialogButtonTest.java 8198623 macosx-all
@@ -247,10 +246,9 @@
java/awt/FullScreen/DisplayChangeVITest/DisplayChangeVITest.java 8169469 windows-all
java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8197796 generic-all
java/awt/TextArea/TextAreaScrolling/TextAreaScrolling.java 8196300 windows-all
-java/awt/print/PrinterJob/Margins.java 8196301 windows-all
java/awt/print/PrinterJob/PSQuestionMark.java 7003378 generic-all
java/awt/print/PrinterJob/GlyphPositions.java 7003378 generic-all
-java/awt/Choice/PopupPosTest/PopupPosTest.html 8192930 windows-all
+java/awt/Choice/PopupPosTest/PopupPosTest.html 8197811 windows-all
java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 7100044 macosx-all,linux-all
java/awt/Component/CreateImage/CreateImage.java 8198334 windows-all
java/awt/Component/GetScreenLocTest/GetScreenLocTest.java 4753654 generic-all
@@ -258,32 +256,32 @@
java/awt/Focus/NonFocusableWindowTest/NoEventsTest.java 8000171 windows-all
java/awt/Frame/MiscUndecorated/RepaintTest.java 8079267 windows-all,linux-all
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java 8157173 generic-all
-java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogAppModal6Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal2Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal6Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogDocModal7Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal2Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogModal6Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal1Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal2Test.java 8198664 macosx-all,linux-all
-java/awt/Modal/FileDialog/FileDialogNonModal3Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal4Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal5Test.java 8198664 macosx-all
-java/awt/Modal/FileDialog/FileDialogNonModal6Test.java 8198664 macosx-all,linux-all
-java/awt/Modal/FileDialog/FileDialogNonModal7Test.java 8198664 macosx-all,linux-all
+java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogAppModal6Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal2Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal6Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogDocModal7Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal2Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogModal6Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal1Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal2Test.java 7186009 macosx-all,linux-all
+java/awt/Modal/FileDialog/FileDialogNonModal3Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal4Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal5Test.java 7186009 macosx-all
+java/awt/Modal/FileDialog/FileDialogNonModal6Test.java 7186009 macosx-all,linux-all
+java/awt/Modal/FileDialog/FileDialogNonModal7Test.java 7186009 macosx-all,linux-all
java/awt/Modal/FileDialog/FileDialogTKModal1Test.java 8196430 generic-all
java/awt/Modal/FileDialog/FileDialogTKModal2Test.java 8196430 generic-all
java/awt/Modal/FileDialog/FileDialogTKModal3Test.java 8196430 generic-all
@@ -716,7 +714,6 @@
javax/swing/JComponent/6683775/bug6683775.java 8172337 generic-all
javax/swing/JComboBox/6236162/bug6236162.java 8028707 windows-all,macosx-all
javax/swing/text/html/parser/Test8017492.java 8022535 generic-all
-javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8081476 windows-all,macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128 macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450 macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627 macosx-all
@@ -740,7 +737,7 @@
javax/swing/JFileChooser/4524490/bug4524490.java 8042380 generic-all
javax/swing/JFileChooser/8002077/bug8002077.java 8196094 windows-all
javax/swing/JFileChooser/DeserializedJFileChooser/DeserializedJFileChooserTest.java 8196095 generic-all
-javax/swing/JFileChooser/6396844/TwentyThousandTest.java 8058231 generic-all
+javax/swing/JFileChooser/6396844/TwentyThousandTest.java 8198003 generic-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8193942 generic-all
javax/swing/JList/6462008/bug6462008.java 7156347 generic-all
javax/swing/JPopupMenu/6580930/bug6580930.java 8196096 windows-all,macosx-all
@@ -804,7 +801,6 @@
javax/swing/JTextArea/TextViewOOM/TextViewOOM.java 8167355 generic-all
javax/swing/text/Utilities/8142966/SwingFontMetricsTest.java 8199529 windows-all
javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java 202880 linux-all
-javax/swing/JPopupMenu/6583251/bug6583251.java 8213564 linux-all
javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765 macosx-all,linux-all
javax/swing/Popup/TaskbarPositionTest.java 8065097 macosx-all,linux-all
javax/swing/JButton/4368790/bug4368790.java 8213123 macosx-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/net/httpserver/bugs/HandlerConnectionClose.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,437 @@
+/*
+ * 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 8218554
+ * @summary test that the handler can request a connection close.
+ * @library /test/lib
+ * @build jdk.test.lib.net.SimpleSSLContext
+ * @run main/othervm HandlerConnectionClose
+ */
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+import com.sun.net.httpserver.HttpsConfigurator;
+import com.sun.net.httpserver.HttpsServer;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.URI;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Locale;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+import java.util.logging.StreamHandler;
+import jdk.test.lib.net.SimpleSSLContext;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+
+public class HandlerConnectionClose
+{
+ static final int ONEK = 1024;
+ static final long POST_SIZE = ONEK * 1L;
+ SSLContext sslContext;
+ Logger logger;
+
+ void test(String[] args) throws Exception {
+
+ HttpServer httpServer = startHttpServer("http");
+ try {
+ testHttpURLConnection(httpServer, "http","/close/legacy/http/chunked");
+ testHttpURLConnection(httpServer, "http","/close/legacy/http/fixed");
+ testPlainSocket(httpServer, "http","/close/plain/http/chunked");
+ testPlainSocket(httpServer, "http","/close/plain/http/fixed");
+ } finally {
+ httpServer.stop(0);
+ }
+ sslContext = new SimpleSSLContext().get();
+ HttpServer httpsServer = startHttpServer("https");
+ try {
+ testHttpURLConnection(httpsServer, "https","/close/legacy/https/chunked");
+ testHttpURLConnection(httpsServer, "https","/close/legacy/https/fixed");
+ testPlainSocket(httpsServer, "https","/close/plain/https/chunked");
+ testPlainSocket(httpsServer, "https","/close/plain/https/fixed");
+ } finally{
+ httpsServer.stop(0);
+ }
+ }
+
+ void testHttpURLConnection(HttpServer httpServer, String protocol, String path) throws Exception {
+ int port = httpServer.getAddress().getPort();
+ String host = httpServer.getAddress().getHostString();
+ URL url = new URI(protocol, null, host, port, path, null, null).toURL();
+ HttpURLConnection uc = (HttpURLConnection) url.openConnection();
+ if ("https".equalsIgnoreCase(protocol)) {
+ ((HttpsURLConnection)uc).setSSLSocketFactory(sslContext.getSocketFactory());
+ ((HttpsURLConnection)uc).setHostnameVerifier((String hostname, SSLSession session) -> true);
+ }
+ uc.setDoOutput(true);
+ uc.setRequestMethod("POST");
+ uc.setFixedLengthStreamingMode(POST_SIZE);
+ OutputStream os = uc.getOutputStream();
+
+ /* create a 1K byte array with data to POST */
+ byte[] ba = new byte[ONEK];
+ for (int i = 0; i < ONEK; i++)
+ ba[i] = (byte) i;
+
+ System.out.println("\n" + uc.getClass().getSimpleName() +": POST " + url + " HTTP/1.1");
+ long times = POST_SIZE / ONEK;
+ for (int i = 0; i < times; i++) {
+ os.write(ba);
+ }
+
+ os.close();
+ InputStream is = uc.getInputStream();
+ int read;
+ long count = 0;
+ while ((read = is.read(ba)) != -1) {
+ for (int i = 0; i < read; i++) {
+ byte expected = (byte) count++;
+ if (ba[i] != expected) {
+ throw new IOException("byte mismatch at "
+ + (count - 1) + ": expected " + expected + " got " + ba[i]);
+ }
+ }
+ }
+ if (count != POST_SIZE) {
+ throw new IOException("Unexpected length: " + count + " expected " + POST_SIZE);
+ }
+ is.close();
+
+ pass();
+ }
+
+ void testPlainSocket(HttpServer httpServer, String protocol, String path) throws Exception {
+ int port = httpServer.getAddress().getPort();
+ String host = httpServer.getAddress().getHostString();
+ URL url = new URI(protocol, null, host, port, path, null, null).toURL();
+ Socket socket;
+ if ("https".equalsIgnoreCase(protocol)) {
+ socket = sslContext.getSocketFactory().createSocket(host, port);
+ } else {
+ socket = new Socket(host, port);
+ }
+ try (Socket sock = socket) {
+ OutputStream os = socket.getOutputStream();
+
+ // send request headers
+ String request = new StringBuilder()
+ .append("POST ").append(path).append(" HTTP/1.1").append("\r\n")
+ .append("host: ").append(host).append(':').append(port).append("\r\n")
+ .append("Content-Length: ").append(POST_SIZE).append("\r\n")
+ .append("\r\n")
+ .toString();
+ os.write(request.getBytes(StandardCharsets.US_ASCII));
+
+ /* create a 1K byte array with data to POST */
+ byte[] ba = new byte[ONEK];
+ for (int i = 0; i < ONEK; i++)
+ ba[i] = (byte) i;
+
+ // send request data
+ long times = POST_SIZE / ONEK;
+ for (int i = 0; i < times; i++) {
+ os.write(ba);
+ }
+ os.flush();
+
+ InputStream is = socket.getInputStream();
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+
+ // read all response headers
+ int c;
+ int crlf = 0;
+ while ((c = is.read()) != -1) {
+ if (c == '\r') continue;
+ if (c == '\n') crlf++;
+ else crlf = 0;
+ bos.write(c);
+ if (crlf == 2) break;
+ }
+ String responseHeadersStr = bos.toString(StandardCharsets.US_ASCII);
+ List<String> responseHeaders = List.of(responseHeadersStr.split("\n"));
+ System.out.println("\nPOST " + url + " HTTP/1.1");
+ responseHeaders.stream().forEach(s -> System.out.println("[reply]\t" + s));
+ String statusLine = responseHeaders.get(0);
+ if (!statusLine.startsWith("HTTP/1.1 200 "))
+ throw new IOException("Unexpected status: " + statusLine);
+ String cl = responseHeaders.stream()
+ .map(s -> s.toLowerCase(Locale.ROOT))
+ .filter(s -> s.startsWith("content-length: "))
+ .findFirst()
+ .orElse(null);
+ String te = responseHeaders.stream()
+ .map(s -> s.toLowerCase(Locale.ROOT))
+ .filter(s -> s.startsWith("transfer-encoding: "))
+ .findFirst()
+ .orElse(null);
+
+ // check content-length and transfer-encoding are as expected
+ int read = 0;
+ long count = 0;
+ if (path.endsWith("/fixed")) {
+ if (!("content-length: " + POST_SIZE).equalsIgnoreCase(cl)) {
+ throw new IOException("Unexpected Content-Length: [" + cl + "]");
+ }
+ if (te != null) {
+ throw new IOException("Unexpected Transfer-Encoding: [" + te + "]");
+ }
+ // Got expected Content-Length: 1024 - read response data
+ while ((read = is.read()) != -1) {
+ int expected = (int) (count & 0xFF);
+ if ((read & 0xFF) != expected) {
+ throw new IOException("byte mismatch at "
+ + (count - 1) + ": expected " + expected + " got " + read);
+ }
+ if (++count == POST_SIZE) break;
+ }
+ } else if (cl != null) {
+ throw new IOException("Unexpected Content-Length: [" + cl + "]");
+ } else {
+ if (!("transfer-encoding: chunked").equalsIgnoreCase(te)) {
+ throw new IOException("Unexpected Transfer-Encoding: [" + te + "]");
+ }
+ // This is a quick & dirty implementation of
+ // chunk decoding - no trailers - no extensions
+ StringBuilder chunks = new StringBuilder();
+ int cs = -1;
+ while (cs != 0) {
+ cs = 0;
+ chunks.setLength(0);
+
+ // read next chunk length
+ while ((read = is.read()) != -1) {
+ if (read == '\r') continue;
+ if (read == '\n') break;
+ chunks.append((char) read);
+ }
+ cs = Integer.parseInt(chunks.toString().trim(), 16);
+ System.out.println("Got chunk length: " + cs);
+
+ // If chunk size is 0, then we have read the last chunk.
+ if (cs == 0) break;
+
+ // Read the chunk data
+ while (--cs >= 0) {
+ read = is.read();
+ if (read == -1) break; // EOF
+ int expected = (int) (count & 0xFF);
+ if ((read & 0xFF) != expected) {
+ throw new IOException("byte mismatch at "
+ + (count - 1) + ": expected " + expected + " got " + read);
+ }
+ // This is cheating: we know the size :-)
+ if (++count == POST_SIZE) break;
+ }
+
+ if (read == -1) {
+ throw new IOException("Unexpected EOF after " + count + " data bytes");
+ }
+
+ // read CRLF
+ if ((read = is.read()) != '\r') {
+ throw new IOException("Expected CR at " + count + "after chunk data - got " + read);
+ }
+ if ((read = is.read()) != '\n') {
+ throw new IOException("Expected LF at " + count + "after chunk data - got " + read);
+ }
+
+ if (cs == 0 && count == POST_SIZE) {
+ cs = -1;
+ }
+
+ if (cs != -1) {
+ // count == POST_SIZE, but some chunk data still to be read?
+ throw new IOException("Unexpected chunk size, "
+ + cs + " bytes still to read after " + count +
+ " data bytes received.");
+ }
+ }
+ // Last CRLF?
+ for (int i = 0; i < 2; i++) {
+ if ((read = is.read()) == -1) break;
+ }
+ }
+
+ if (count != POST_SIZE) {
+ throw new IOException("Unexpected length: " + count + " expected " + POST_SIZE);
+ }
+
+ if (!sock.isClosed()) {
+ try {
+ // We send an end request to the server to verify that the
+ // connection is closed. If the server has not closed the
+ // connection, it will reply. If we receive a response,
+ // we should fail...
+ String endrequest = new StringBuilder()
+ .append("GET ").append("/close/end").append(" HTTP/1.1").append("\r\n")
+ .append("host: ").append(host).append(':').append(port).append("\r\n")
+ .append("Content-Length: ").append(0).append("\r\n")
+ .append("\r\n")
+ .toString();
+ os.write(endrequest.getBytes(StandardCharsets.US_ASCII));
+ os.flush();
+ StringBuilder resp = new StringBuilder();
+ crlf = 0;
+
+ // read all headers.
+ // If the server closed the connection as expected
+ // we should immediately read EOF
+ while ((read = is.read()) != -1) {
+ if (read == '\r') continue;
+ if (read == '\n') crlf++;
+ else crlf = 0;
+ if (crlf == 2) break;
+ resp.append((char) read);
+ }
+
+ List<String> lines = List.of(resp.toString().split("\n"));
+ if (read != -1 || resp.length() != 0) {
+ System.err.println("Connection not closed!");
+ System.err.println("Got: ");
+ lines.stream().forEach(s -> System.err.println("[end]\t" + s));
+ throw new AssertionError("EOF not received after " + count + " data bytes");
+ }
+ if (read != -1) {
+ throw new AssertionError("EOF was expected after " + count + " bytes, but got: " + read);
+ } else {
+ System.out.println("Got expected EOF (" + read + ")");
+ }
+ } catch (IOException x) {
+ // expected! all is well
+ System.out.println("Socket closed as expected, got exception writing to it.");
+ }
+ } else {
+ System.out.println("Socket closed as expected");
+ }
+ pass();
+ }
+ }
+
+ /**
+ * Http Server
+ */
+ HttpServer startHttpServer(String protocol) throws IOException {
+ if (debug) {
+ logger = Logger.getLogger("com.sun.net.httpserver");
+ Handler outHandler = new StreamHandler(System.out,
+ new SimpleFormatter());
+ outHandler.setLevel(Level.FINEST);
+ logger.setLevel(Level.FINEST);
+ logger.addHandler(outHandler);
+ }
+
+ InetSocketAddress serverAddress = new InetSocketAddress(InetAddress.getLoopbackAddress(), 0);
+ HttpServer httpServer = null;
+ if ("http".equalsIgnoreCase(protocol)) {
+ httpServer = HttpServer.create(serverAddress, 0);
+ }
+ if ("https".equalsIgnoreCase(protocol)) {
+ HttpsServer httpsServer = HttpsServer.create(serverAddress, 0);
+ httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext));
+ httpServer = httpsServer;
+ }
+ httpServer.createContext("/close/", new MyHandler(POST_SIZE));
+ System.out.println("Server created at: " + httpServer.getAddress());
+ httpServer.start();
+ return httpServer;
+ }
+
+ class MyHandler implements HttpHandler {
+ static final int BUFFER_SIZE = 512;
+ final long expected;
+
+ MyHandler(long expected){
+ this.expected = expected;
+ }
+
+ @Override
+ public void handle(HttpExchange t) throws IOException {
+ System.out.println("Server: serving " + t.getRequestURI());
+ boolean chunked = t.getRequestURI().getPath().endsWith("/chunked");
+ boolean fixed = t.getRequestURI().getPath().endsWith("/fixed");
+ boolean end = t.getRequestURI().getPath().endsWith("/end");
+ long responseLength = fixed ? POST_SIZE : 0;
+ responseLength = end ? -1 : responseLength;
+ responseLength = chunked ? 0 : responseLength;
+
+ if (!end) t.getResponseHeaders().add("connection", "CLose");
+ t.sendResponseHeaders(200, responseLength);
+
+ if (!end) {
+ OutputStream os = t.getResponseBody();
+ InputStream is = t.getRequestBody();
+ byte[] ba = new byte[BUFFER_SIZE];
+ int read;
+ long count = 0L;
+ while ((read = is.read(ba)) != -1) {
+ count += read;
+ os.write(ba, 0, read);
+ }
+ is.close();
+
+ check(count == expected, "Expected: " + expected + ", received "
+ + count);
+ debug("Received " + count + " bytes");
+ os.close();
+ }
+
+ t.close();
+ }
+ }
+
+ //--------------------- Infrastructure ---------------------------
+ boolean debug = true;
+ volatile int passed = 0, failed = 0;
+ void pass() {passed++;}
+ void fail() {failed++; Thread.dumpStack();}
+ void fail(String msg) {System.err.println(msg); fail();}
+ void unexpected(Throwable t) {failed++; t.printStackTrace();}
+ void check(boolean cond) {if (cond) pass(); else fail();}
+ void check(boolean cond, String failMessage) {if (cond) pass(); else fail(failMessage);}
+ void debug(String message) {if(debug) { System.out.println(message); } }
+ public static void main(String[] args) throws Throwable {
+ Class<?> k = new Object(){}.getClass().getEnclosingClass();
+ try {k.getMethod("instanceMain",String[].class)
+ .invoke( k.newInstance(), (Object) args);}
+ catch (Throwable e) {throw e.getCause();}}
+ public void instanceMain(String[] args) throws Throwable {
+ try {test(args);} catch (Throwable t) {unexpected(t);}
+ System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+ if (failed > 0) throw new AssertionError("Some tests failed");}
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/GetPackageFromBootClassPath.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,67 @@
+/*
+ * 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 8218419
+ * @library /test/lib
+ * @modules jdk.compiler
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * @run driver GetPackageFromBootClassPath setup
+ * @run main/othervm -Xbootclasspath/a:boot GetPackageFromBootClassPath
+ */
+
+import java.lang.annotation.Annotation;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+
+public class GetPackageFromBootClassPath {
+ public static void main(String... args) throws Exception {
+ if (args.length == 0) {
+ test();
+ } else {
+ setupBootLib();
+ }
+ }
+
+ private static void test() throws Exception {
+ Class<?> c = Class.forName("foo.Foo", false, null);
+ Package p = c.getPackage();
+ Annotation[] annotations = p.getAnnotations();
+ Class<?> annType = Class.forName("foo.MyAnnotation", false, null);
+ if (annotations.length != 1 ||
+ annotations[0].annotationType() != annType) {
+ throw new RuntimeException("Expected foo.MyAnnotation but got " +
+ Arrays.toString(annotations));
+ }
+ }
+
+ private static void setupBootLib() throws Exception {
+ Path testSrc = Paths.get(System.getProperty("test.src"), "boot");
+ Path bootDir = Paths.get("boot");
+ if (!jdk.test.lib.compiler.CompilerUtils.compile(testSrc, bootDir)) {
+ throw new RuntimeException("compilation fails");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/boot/foo/Foo.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,27 @@
+/*
+ * 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 foo;
+
+public class Foo {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/boot/foo/MyAnnotation.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,34 @@
+/*
+ * 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 foo;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.PACKAGE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MyAnnotation {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Package/bootclasspath/boot/foo/package-info.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+@MyAnnotation
+package foo;
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java Wed Feb 13 13:22:15 2019 -0500
@@ -133,16 +133,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessString.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessString.java Wed Feb 13 13:22:15 2019 -0500
@@ -135,16 +135,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java Wed Feb 13 13:22:15 2019 -0500
@@ -83,7 +83,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -91,10 +91,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -143,18 +143,13 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = allocate(true);
VarHandle[] vhs2 = allocate(true);
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- assertEquals(vhs1[i], vhs2[i]);
- assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -87,7 +87,7 @@
}
@Test
- public void testEqualsAndHashCode() {
+ public void testEquals() {
VarHandle[] vhs1 = setupVarHandleSources(true).stream().
map(vhs -> vhs.s).toArray(VarHandle[]::new);
VarHandle[] vhs2 = setupVarHandleSources(true).stream().
@@ -95,12 +95,7 @@
for (int i = 0; i < vhs1.length; i++) {
for (int j = 0; j < vhs1.length; j++) {
- if (i == j) {
- assertEquals(vhs1[i], vhs1[i]);
- assertEquals(vhs1[i], vhs2[i]);
- assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
- }
- else {
+ if (i != j) {
assertNotEquals(vhs1[i], vhs1[j]);
assertNotEquals(vhs1[i], vhs2[j]);
}
--- a/test/jdk/java/net/httpclient/Response204.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/net/httpclient/Response204.java Wed Feb 13 13:22:15 2019 -0500
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 8211437 8216974
+ * @bug 8211437 8216974 8218662
* @run main/othervm -Djdk.httpclient.HttpClient.log=headers,requests Response204
* @summary
*/
@@ -33,12 +33,13 @@
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
-import java.util.*;
+import java.net.http.HttpResponse.BodyHandlers;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.*;
import java.io.*;
import java.net.*;
+import static java.net.http.HttpClient.Builder.NO_PROXY;
/**
* Verify that a 204 response code with no content-length is handled correctly
@@ -58,6 +59,7 @@
InetSocketAddress addr = new InetSocketAddress (InetAddress.getLoopbackAddress(), 0);
HttpServer server = HttpServer.create (addr, 0);
HttpContext ctx = server.createContext ("/test", handler);
+ server.createContext ("/zero", new ZeroContentLengthHandler());
ExecutorService executor = Executors.newCachedThreadPool();
server.setExecutor (executor);
server.start ();
@@ -91,12 +93,31 @@
// check for 8216974
Exception error = serverError.get();
if (error != null) throw error;
+
+ // Test 3
+ testZeroContentLength(uri.resolve("/zero/xxyy"));
+ System.out.println ("OK 3");
} finally {
server.stop(2);
executor.shutdown();
}
}
+ static void testZeroContentLength(URI uri) throws Exception {
+ System.out.println("--- testZeroContentLength ---");
+ HttpClient client = HttpClient.newBuilder().proxy(NO_PROXY).build();
+ HttpRequest request = HttpRequest.newBuilder(uri).build();
+ HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
+ System.out.println("Received response:" + response);
+ System.out.println("Received headers:" + response.headers());
+ if (response.statusCode() != 204)
+ throw new RuntimeException("Expected 204, got:" + response.statusCode());
+ if (response.body() != null && !response.body().equals(""))
+ throw new RuntimeException("Expected empty response, got: " + response.body());
+ if (response.headers().firstValueAsLong("Content-Length").orElse(-1L) != 0L)
+ throw new RuntimeException("Expected Content-Length:0, in: " + response.headers());
+ }
+
public static boolean error = false;
static class Handler implements HttpHandler {
@@ -133,4 +154,16 @@
t.close();
}
}
+
+ // A handler that returns a 204 with a `Content-Length: 0` header/value
+ static class ZeroContentLengthHandler implements HttpHandler {
+ public void handle(HttpExchange t) throws IOException {
+ try (InputStream is = t.getRequestBody()) {
+ is.readAllBytes();
+ }
+ t.getResponseHeaders().set("Content-length", "0");
+ t.sendResponseHeaders(204, -1);
+ t.close();
+ }
+ }
}
--- a/test/jdk/java/net/httpclient/SpecialHeadersTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/net/httpclient/SpecialHeadersTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
* @summary Verify that some special headers - such as User-Agent
* can be specified by the caller.
- * @bug 8203771
+ * @bug 8203771 8218546
* @modules java.base/sun.net.www.http
* java.net.http/jdk.internal.net.http.common
* java.net.http/jdk.internal.net.http.frame
@@ -64,8 +64,6 @@
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
@@ -74,13 +72,13 @@
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
-
-import static java.lang.System.err;
import static java.lang.System.out;
import static java.net.http.HttpClient.Builder.NO_PROXY;
+import static java.net.http.HttpClient.Version.HTTP_2;
import static java.nio.charset.StandardCharsets.US_ASCII;
import org.testng.Assert;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
public class SpecialHeadersTest implements HttpServerAdapters {
@@ -151,7 +149,11 @@
"USER-AGENT", u -> userAgent(), "HOST", u -> u.getRawAuthority());
@Test(dataProvider = "variants")
- void test(String uriString, String headerNameAndValue, boolean sameClient) throws Exception {
+ void test(String uriString,
+ String headerNameAndValue,
+ boolean sameClient)
+ throws Exception
+ {
out.println("\n--- Starting ");
int index = headerNameAndValue.indexOf(":");
@@ -183,21 +185,41 @@
assertEquals(resp.statusCode(), 200,
"Expected 200, got:" + resp.statusCode());
- String receivedHeaderString = value == null ? null
- : resp.headers().firstValue("X-"+key).get();
- out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
- if (value != null) {
- assertEquals(receivedHeaderString, value);
- assertEquals(resp.headers().allValues("X-"+key), List.of(value));
+ boolean isInitialRequest = i == 0;
+ boolean isSecure = uri.getScheme().equalsIgnoreCase("https");
+ boolean isHTTP2 = resp.version() == HTTP_2;
+ boolean isNotH2CUpgrade = isSecure || (sameClient == true && !isInitialRequest);
+ boolean isDefaultHostHeader = name.equalsIgnoreCase("host") && useDefault;
+
+ // By default, HTTP/2 sets the `:authority:` pseudo-header, instead
+ // of the `Host` header. Therefore, there should be no "X-Host"
+ // header in the response, except the response to the h2c Upgrade
+ // request which will have been sent through HTTP/1.1.
+
+ if (isDefaultHostHeader && isHTTP2 && isNotH2CUpgrade) {
+ assertTrue(resp.headers().firstValue("X-" + key).isEmpty());
+ assertTrue(resp.headers().allValues("X-" + key).isEmpty());
+ out.println("No X-" + key + " header received, as expected");
} else {
- assertEquals(resp.headers().allValues("X-"+key).size(), 0);
+ String receivedHeaderString = value == null ? null
+ : resp.headers().firstValue("X-"+key).get();
+ out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
+ if (value != null) {
+ assertEquals(receivedHeaderString, value);
+ assertEquals(resp.headers().allValues("X-"+key), List.of(value));
+ } else {
+ assertEquals(resp.headers().allValues("X-"+key).size(), 0);
+ }
}
-
}
}
@Test(dataProvider = "variants")
- void testHomeMadeIllegalHeader(String uriString, String headerNameAndValue, boolean sameClient) throws Exception {
+ void testHomeMadeIllegalHeader(String uriString,
+ String headerNameAndValue,
+ boolean sameClient)
+ throws Exception
+ {
out.println("\n--- Starting ");
final URI uri = URI.create(uriString);
@@ -266,6 +288,11 @@
}
HttpRequest request = requestBuilder.build();
+ boolean isInitialRequest = i == 0;
+ boolean isSecure = uri.getScheme().equalsIgnoreCase("https");
+ boolean isNotH2CUpgrade = isSecure || (sameClient == true && !isInitialRequest);
+ boolean isDefaultHostHeader = name.equalsIgnoreCase("host") && useDefault;
+
client.sendAsync(request, BodyHandlers.ofString())
.thenApply(response -> {
out.println("Got response: " + response);
@@ -273,15 +300,27 @@
assertEquals(response.statusCode(), 200);
return response;})
.thenAccept(resp -> {
- String receivedHeaderString = value == null ? null
- : resp.headers().firstValue("X-"+key).get();
- out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
- if (value != null) {
- assertEquals(receivedHeaderString, value);
- assertEquals(resp.headers().allValues("X-" + key), List.of(value));
+ // By default, HTTP/2 sets the `:authority:` pseudo-header, instead
+ // of the `Host` header. Therefore, there should be no "X-Host"
+ // header in the response, except the response to the h2c Upgrade
+ // request which will have been sent through HTTP/1.1.
+
+ if (isDefaultHostHeader && resp.version() == HTTP_2 && isNotH2CUpgrade) {
+ assertTrue(resp.headers().firstValue("X-" + key).isEmpty());
+ assertTrue(resp.headers().allValues("X-" + key).isEmpty());
+ out.println("No X-" + key + " header received, as expected");
} else {
- assertEquals(resp.headers().allValues("X-" + key).size(), 1);
- } })
+ String receivedHeaderString = value == null ? null
+ : resp.headers().firstValue("X-"+key).get();
+ out.println("Got X-" + key + ": " + resp.headers().allValues("X-"+key));
+ if (value != null) {
+ assertEquals(receivedHeaderString, value);
+ assertEquals(resp.headers().allValues("X-" + key), List.of(value));
+ } else {
+ assertEquals(resp.headers().allValues("X-" + key).size(), 1);
+ }
+ }
+ })
.join();
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/HashMap/WhiteBoxResizeTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import org.testng.annotations.Test;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.VarHandle;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.function.Supplier;
+import java.util.stream.IntStream;
+
+import static java.util.stream.Collectors.toMap;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+
+/*
+ * @test
+ * @bug 8210280
+ * @modules java.base/java.util:open
+ * @summary White box tests for HashMap internals around table resize
+ * @run testng WhiteBoxResizeTest
+ * @key randomness
+ */
+public class WhiteBoxResizeTest {
+ final ThreadLocalRandom rnd = ThreadLocalRandom.current();
+ final MethodHandle TABLE_SIZE_FOR;
+ final VarHandle THRESHOLD;
+ final VarHandle TABLE;
+
+ public WhiteBoxResizeTest() throws ReflectiveOperationException {
+ Class<?> mClass = HashMap.class;
+ String nodeClassName = mClass.getName() + "$Node";
+ Class<?> nodeArrayClass = Class.forName("[L" + nodeClassName + ";");
+ MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(mClass, MethodHandles.lookup());
+ TABLE = lookup.findVarHandle(mClass, "table", nodeArrayClass);
+ this.TABLE_SIZE_FOR = lookup.findStatic(
+ mClass, "tableSizeFor",
+ MethodType.methodType(int.class, int.class));
+ this.THRESHOLD = lookup.findVarHandle(mClass, "threshold", int.class);
+ }
+
+ int tableSizeFor(int n) {
+ try {
+ return (int) TABLE_SIZE_FOR.invoke(n);
+ } catch (Throwable t) { throw new AssertionError(t); }
+ }
+
+ Object[] table(HashMap map) {
+ try {
+ return (Object[]) TABLE.get(map);
+ } catch (Throwable t) { throw new AssertionError(t); }
+ }
+
+ int capacity(HashMap map) {
+ return table(map).length;
+ }
+
+ @Test
+ public void testTableSizeFor() {
+ assertEquals(tableSizeFor(0), 1);
+ assertEquals(tableSizeFor(1), 1);
+ assertEquals(tableSizeFor(2), 2);
+ assertEquals(tableSizeFor(3), 4);
+ assertEquals(tableSizeFor(15), 16);
+ assertEquals(tableSizeFor(16), 16);
+ assertEquals(tableSizeFor(17), 32);
+ int maxSize = 1 << 30;
+ assertEquals(tableSizeFor(maxSize - 1), maxSize);
+ assertEquals(tableSizeFor(maxSize), maxSize);
+ assertEquals(tableSizeFor(maxSize + 1), maxSize);
+ assertEquals(tableSizeFor(Integer.MAX_VALUE), maxSize);
+ }
+
+ @Test
+ public void capacityTestDefaultConstructor() {
+ capacityTestDefaultConstructor(new HashMap<>());
+ capacityTestDefaultConstructor(new LinkedHashMap<>());
+ }
+
+ void capacityTestDefaultConstructor(HashMap<Integer, Integer> map) {
+ assertNull(table(map));
+
+ map.put(1, 1);
+ assertEquals(capacity(map), 16); // default initial capacity
+
+ map.putAll(IntStream.range(0, 64).boxed().collect(toMap(i -> i, i -> i)));
+ assertEquals(capacity(map), 128);
+ }
+
+ @Test
+ public void capacityTestInitialCapacity() {
+ int initialCapacity = rnd.nextInt(2, 128);
+ List<Supplier<HashMap<Integer, Integer>>> suppliers = List.of(
+ () -> new HashMap<>(initialCapacity),
+ () -> new HashMap<>(initialCapacity, 0.75f),
+ () -> new LinkedHashMap<>(initialCapacity),
+ () -> new LinkedHashMap<>(initialCapacity, 0.75f));
+
+ for (Supplier<HashMap<Integer, Integer>> supplier : suppliers) {
+ HashMap<Integer, Integer> map = supplier.get();
+ assertNull(table(map));
+
+ map.put(1, 1);
+ assertEquals(capacity(map), tableSizeFor(initialCapacity));
+ }
+ }
+}
--- a/test/jdk/java/util/concurrent/tck/JSR166TestCase.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/util/concurrent/tck/JSR166TestCase.java Wed Feb 13 13:22:15 2019 -0500
@@ -487,6 +487,12 @@
public static boolean atLeastJava9() { return JAVA_CLASS_VERSION >= 53.0; }
public static boolean atLeastJava10() { return JAVA_CLASS_VERSION >= 54.0; }
public static boolean atLeastJava11() { return JAVA_CLASS_VERSION >= 55.0; }
+ public static boolean atLeastJava12() { return JAVA_CLASS_VERSION >= 56.0; }
+ public static boolean atLeastJava13() { return JAVA_CLASS_VERSION >= 57.0; }
+ public static boolean atLeastJava14() { return JAVA_CLASS_VERSION >= 58.0; }
+ public static boolean atLeastJava15() { return JAVA_CLASS_VERSION >= 59.0; }
+ public static boolean atLeastJava16() { return JAVA_CLASS_VERSION >= 60.0; }
+ public static boolean atLeastJava17() { return JAVA_CLASS_VERSION >= 61.0; }
/**
* Collects all JSR166 unit tests as one suite.
@@ -577,6 +583,7 @@
"HashMapTest",
"LinkedBlockingDeque8Test",
"LinkedBlockingQueue8Test",
+ "LinkedHashMapTest",
"LongAccumulatorTest",
"LongAdderTest",
"SplittableRandomTest",
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/concurrent/tck/LinkedHashMapTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute 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 file is available under and governed by the GNU General Public
+ * License version 2 only, as published by the Free Software Foundation.
+ * However, the following notice accompanied the original version of this
+ * file:
+ *
+ * Written by Doug Lea and Martin Buchholz with assistance from
+ * members of JCP JSR-166 Expert Group and released to the public
+ * domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import junit.framework.Test;
+
+public class LinkedHashMapTest extends JSR166TestCase {
+ public static void main(String[] args) {
+ main(suite(), args);
+ }
+
+ public static Test suite() {
+ class Implementation implements MapImplementation {
+ public Class<?> klazz() { return LinkedHashMap.class; }
+ public Map emptyMap() { return new LinkedHashMap(); }
+ public Object makeKey(int i) { return i; }
+ public Object makeValue(int i) { return i; }
+ public boolean isConcurrent() { return false; }
+ public boolean permitsNullKeys() { return true; }
+ public boolean permitsNullValues() { return true; }
+ public boolean supportsSetValue() { return true; }
+ }
+ return newTestSuite(
+ // LinkedHashMapTest.class,
+ MapTest.testSuite(new Implementation()));
+ }
+}
--- a/test/jdk/java/util/concurrent/tck/MapTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/java/util/concurrent/tck/MapTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -166,6 +166,40 @@
assertEquals(1, m.size());
}
+ /**
+ * "Missing" test found while investigating JDK-8210280.
+ * ant -Djsr166.tckTestClass=HashMapTest -Djsr166.methodFilter=testBug8210280 -Djsr166.runsPerTest=1000000 tck
+ */
+ public void testBug8210280() {
+ final ThreadLocalRandom rnd = ThreadLocalRandom.current();
+ final int size1 = rnd.nextInt(32);
+ final int size2 = rnd.nextInt(128);
+
+ final Map m1 = impl.emptyMap();
+ for (int i = 0; i < size1; i++) {
+ int elt = rnd.nextInt(1024 * i, 1024 * (i + 1));
+ assertNull(m1.put(impl.makeKey(elt), impl.makeValue(elt)));
+ }
+
+ final Map m2 = impl.emptyMap();
+ for (int i = 0; i < size2; i++) {
+ int elt = rnd.nextInt(Integer.MIN_VALUE + 1024 * i,
+ Integer.MIN_VALUE + 1024 * (i + 1));
+ assertNull(m2.put(impl.makeKey(elt), impl.makeValue(-elt)));
+ }
+
+ final Map m1Copy = impl.emptyMap();
+ m1Copy.putAll(m1);
+
+ m1.putAll(m2);
+
+ for (Object elt : m2.keySet())
+ assertEquals(m2.get(elt), m1.get(elt));
+ for (Object elt : m1Copy.keySet())
+ assertSame(m1Copy.get(elt), m1.get(elt));
+ assertEquals(size1 + size2, m1.size());
+ }
+
// public void testFailsIntentionallyForDebugging() {
// fail(impl.klazz().getSimpleName());
// }
--- a/test/jdk/javax/swing/JPopupMenu/6583251/bug6583251.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/javax/swing/JPopupMenu/6583251/bug6583251.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, 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
@@ -26,7 +26,7 @@
/*
* @test
* @key headful
- * @bug 6583251
+ * @bug 6583251 8217377
* @summary One more ClassCastException in Swing with TrayIcon
* @author Alexander Potochkin
* @run main bug6583251
@@ -57,22 +57,32 @@
}
public static void main(String[] args) throws Exception {
+ if (SystemTray.isSupported()) {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createGui();
+ }
+ });
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- createGui();
- }
- });
+ Robot robot = new Robot();
+ robot.waitForIdle();
+ menu.show(frame, 0, 0);
+ robot.waitForIdle();
- Robot robot = new Robot();
- robot.waitForIdle();
- menu.show(frame, 0, 0);
- robot.waitForIdle();
+ TrayIcon trayIcon = new TrayIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB));
+ MouseEvent ev = new MouseEvent(
+ new JButton(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, 0, 0, 1, false);
+ ev.setSource(trayIcon);
+ Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ev);
- TrayIcon trayIcon = new TrayIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB));
- MouseEvent ev = new MouseEvent(
- new JButton(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, 0, 0, 1, false);
- ev.setSource(trayIcon);
- Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ev);
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame.dispose();
+ }
+ });
+
+ } else {
+ System.out.println("SystemTray not supported. " + "Skipping the test.");
+ }
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/SwingSet/src/ColorChooserDemoTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,328 @@
+/*
+* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* This code is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License version 2 only, as
+* published by the Free Software Foundation.
+*
+* This code is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+* version 2 for more details (a copy is included in the LICENSE file that
+* accompanied this code).
+*
+* You should have received a copy of the GNU General Public License version
+* 2 along with this work; if not, write to the Free Software Foundation,
+* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+*
+* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.BACKGROUND;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.CHOOSER_TITLE;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.DEMO_TITLE;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.GRADIENT_1;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.GRADIENT_2;
+import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.PERIMETER;
+
+import java.awt.Color;
+import java.awt.event.KeyEvent;
+
+import org.jemmy2ext.JemmyExt.ByClassChooser;
+import org.jtregext.GuiTestListener;
+import org.netbeans.jemmy.ClassReference;
+import org.netbeans.jemmy.DialogWaiter;
+import org.netbeans.jemmy.operators.JButtonOperator;
+import org.netbeans.jemmy.operators.JColorChooserOperator;
+import org.netbeans.jemmy.operators.JComponentOperator;
+import org.netbeans.jemmy.operators.JDialogOperator;
+import org.netbeans.jemmy.operators.JFrameOperator;
+import org.netbeans.jemmy.operators.JSliderOperator;
+import org.netbeans.jemmy.operators.JSpinnerOperator;
+import org.netbeans.jemmy.operators.JTabbedPaneOperator;
+import org.netbeans.jemmy.operators.JTextFieldOperator;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+
+import com.sun.swingset3.demos.colorchooser.BezierAnimationPanel;
+import com.sun.swingset3.demos.colorchooser.BezierAnimationPanel.BezierColor;
+import com.sun.swingset3.demos.colorchooser.ColorChooserDemo;
+
+/*
+* @test
+* @key headful
+* @summary Verifies SwingSet3 ColorChooserDemo by performing simple interaction
+* with all the controls that are shown in the ColorChooserDialog.
+*
+* @library /sanity/client/lib/jemmy/src
+* @library /sanity/client/lib/Extensions/src
+* @library /sanity/client/lib/SwingSet3/src
+* @modules java.desktop
+* java.logging
+* @build com.sun.swingset3.demos.colorchooser.ColorChooserDemo
+* @run testng ColorChooserDemoTest
+*/
+@Listeners(GuiTestListener.class)
+public class ColorChooserDemoTest {
+
+private static final String OK_BUTTON_TITLE = "OK";
+private static final String CANCEL_BUTTON_TITLE = "Cancel";
+private static final String RESET_BUTTON_TITLE = "Reset";
+private static final String HSV = "HSV";
+private static final String RGB = "RGB";
+private static final String HSL = "HSL";
+private static final String CMYK = "CMYK";
+private static final int HSV_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
+private static final int RGB_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
+private static final int HSL_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
+private static final int CMYK_NUMBER_OF_SLIDERS_AND_SPINNERS = 5;
+private static final int HSV_HUE_INDEX = 0;
+private static final int HSV_SATURATION_INDEX = 1;
+private static final int HSV_VALUE_INDEX = 2;
+private static final int HSV_TRANSPARENCY_INDEX = 3;
+private static final int HSL_HUE_INDEX = 0;
+private static final int HSL_SATURATION_INDEX = 1;
+private static final int HSL_LIGHTNESS_INDEX = 2;
+private static final int HSL_TRANSPARENCY_INDEX = 3;
+private static final int RGB_RED_INDEX = 0;
+private static final int RGB_GREEN_INDEX = 1;
+private static final int RGB_BLUE_INDEX = 2;
+private static final int RGB_ALPHA_INDEX = 3;
+private static final int RGB_COLORCODE_TEXT_FIELD_INDEX = 4;
+private static final int CMYK_CYAN_INDEX = 0;
+private static final int CMYK_MAGENTA_INDEX = 1;
+private static final int CMYK_YELLOW_INDEX = 2;
+private static final int CMYK_BLACK_INDEX = 3;
+private static final int CMYK_ALPHA_INDEX = 4;
+
+private final Color resetColor = new Color(125, 125, 125);
+
+private JDialogOperator colorChooserDialog;
+private JButtonOperator okButton;
+private JButtonOperator cancelButton;
+private JButtonOperator resetButton;
+private JColorChooserOperator colorChooser;
+private JButtonOperator backgroundButton;
+private JButtonOperator gradient1Button;
+private JButtonOperator gradient2Button;
+private JButtonOperator perimeterButton;
+private JTabbedPaneOperator tabOperator;
+private JComponentOperator bezierAnimationPanel;
+private JSliderOperator[] sliders = new JSliderOperator[5];
+private JSpinnerOperator[] spinners = new JSpinnerOperator[5];
+private JButtonOperator lastFocusedButton;
+
+@Test
+public void test() throws Exception {
+new ClassReference(ColorChooserDemo.class.getCanonicalName()).startApplication();
+JFrameOperator frame = new JFrameOperator(DEMO_TITLE);
+bezierAnimationPanel = new JComponentOperator(frame, new ByClassChooser(BezierAnimationPanel.class));
+initializePanelButtons(frame);
+checkBackgroundColorChooser();
+checkGradient1ColorChooser();
+checkGradient2ColorChooser();
+checkPerimeterColorChooser();
+}
+
+private void checkBackgroundColorChooser() throws Exception {
+basicCheck(backgroundButton, BezierColor.BACKGROUND);
+checkAllColorChoosers(backgroundButton);
+}
+
+private void checkGradient1ColorChooser() throws Exception {
+basicCheck(gradient1Button, BezierColor.GRADIENT_A);
+}
+
+private void checkGradient2ColorChooser() throws Exception {
+basicCheck(gradient2Button, BezierColor.GRADIENT_B);
+}
+
+private void checkPerimeterColorChooser() throws Exception {
+basicCheck(perimeterButton, BezierColor.OUTER);
+}
+
+private void pushButtonAndInitialize(JButtonOperator jbo) throws InterruptedException {
+// Wait for focus to return to last focused button
+lastFocusedButton.waitHasFocus();
+jbo.pushNoBlock();
+lastFocusedButton = jbo;
+// Wait till the ColorChooserDemo Dialog Opens
+new DialogWaiter().waitDialog(CHOOSER_TITLE, false, false);
+initializeDialog();
+}
+
+private void initializePanelButtons(JFrameOperator frame) {
+backgroundButton = new JButtonOperator(frame, BACKGROUND);
+gradient1Button = new JButtonOperator(frame, GRADIENT_1);
+gradient2Button = new JButtonOperator(frame, GRADIENT_2);
+perimeterButton = new JButtonOperator(frame, PERIMETER);
+lastFocusedButton = backgroundButton;
+}
+
+private void initializeDialog() {
+colorChooserDialog = new JDialogOperator(CHOOSER_TITLE);
+tabOperator = new JTabbedPaneOperator(colorChooserDialog);
+colorChooser = new JColorChooserOperator(colorChooserDialog);
+okButton = new JButtonOperator(colorChooserDialog, OK_BUTTON_TITLE);
+cancelButton = new JButtonOperator(colorChooserDialog, CANCEL_BUTTON_TITLE);
+resetButton = new JButtonOperator(colorChooserDialog, RESET_BUTTON_TITLE);
+}
+
+private void basicCheck(JButtonOperator jbo, BezierColor bezierColor) throws Exception {
+Color testColor = new Color(100, 26, 155);
+Color testColor2 = new Color(10, 40, 50);
+checkDefaultColorChooser(jbo, testColor, bezierColor);
+checkCancelButton(jbo, testColor2);
+checkResetButton(jbo, testColor2);
+}
+
+private void checkDefaultColorChooser(JButtonOperator jbo, Color testColor, BezierColor bezierColor)
+throws Exception {
+BezierAnimationPanel bezierPanel;
+pushButtonAndInitialize(jbo);
+// Check ColorChooser color is being set and used accordingly
+// in the animation panel
+setAndWaitColor(testColor);
+pushButtonAndWaitDialogClosed(okButton);
+bezierPanel = (BezierAnimationPanel) bezierAnimationPanel.getSource();
+colorChooser.waitStateOnQueue(jColorChooser -> (bezierPanel.getBezierColor(bezierColor).equals(testColor)));
+}
+
+private void checkCancelButton(JButtonOperator jbo, Color testColor) throws Exception {
+pushButtonAndInitialize(jbo);
+setAndWaitColor(testColor);
+pushButtonAndWaitDialogClosed(cancelButton);
+}
+
+private void checkResetButton(JButtonOperator jbo, Color testColor) throws Exception {
+pushButtonAndInitialize(jbo);
+Color initialColor = colorChooser.getColor();
+setAndWaitColor(testColor);
+resetButton.push();
+waitJColorChooserColor(initialColor);
+pushButtonAndWaitDialogClosed(okButton);
+}
+
+private void checkAllColorChoosers(JButtonOperator jbo) throws Exception {
+pushButtonAndInitialize(jbo);
+checkHSV();
+checkHSL();
+checkRGB();
+checkCMYK();
+pushButtonAndWaitDialogClosed(okButton);
+}
+
+private void waitJColorChooserColor(Color expectedColor) {
+colorChooser.waitStateOnQueue(jColorChooser -> colorChooser.getColor().equals(expectedColor));
+}
+
+private void setAndWaitColor(Color color) {
+colorChooser.setColor(color);
+// Wait for the Color to be set
+waitJColorChooserColor(color);
+}
+
+private void resetColor() {
+colorChooser.setColor(resetColor);
+// Wait for the Color to be reset
+waitJColorChooserColor(resetColor);
+}
+
+private void checkHSV() {
+tabOperator.selectPage(HSV);
+initializeSliderAndSpinner(HSV_NUMBER_OF_SLIDERS_AND_SPINNERS);
+resetColor();
+setAndCheckSlider(sliders[HSV_SATURATION_INDEX], 50, new Color(125, 62, 62));
+setAndCheckSlider(sliders[HSV_VALUE_INDEX], 80, new Color(204, 102, 102));
+setAndCheckSlider(sliders[HSV_HUE_INDEX], 50, new Color(204, 187, 102));
+setAndCheckSlider(sliders[HSV_TRANSPARENCY_INDEX], 50, new Color(204, 187, 102, 127));
+setAndCheckSpinner(spinners[HSV_SATURATION_INDEX], 25, new Color(204, 195, 153, 127));
+setAndCheckSpinner(spinners[HSV_VALUE_INDEX], 40, new Color(102, 97, 76, 127));
+setAndCheckSpinner(spinners[HSV_HUE_INDEX], 25, new Color(102, 87, 76, 127));
+setAndCheckSpinner(spinners[HSV_TRANSPARENCY_INDEX], 100, new Color(102, 87, 76, 0));
+}
+
+private void checkHSL() {
+tabOperator.selectPage(HSL);
+initializeSliderAndSpinner(HSL_NUMBER_OF_SLIDERS_AND_SPINNERS);
+resetColor();
+setAndCheckSlider(sliders[HSL_SATURATION_INDEX], 50, new Color(187, 62, 62));
+setAndCheckSlider(sliders[HSL_LIGHTNESS_INDEX], 80, new Color(229, 178, 178));
+setAndCheckSlider(sliders[HSL_HUE_INDEX], 180, new Color(178, 229, 229));
+setAndCheckSlider(sliders[HSL_TRANSPARENCY_INDEX], 50, new Color(178, 229, 229, 127));
+setAndCheckSpinner(spinners[HSL_SATURATION_INDEX], 25, new Color(191, 216, 216, 127));
+setAndCheckSpinner(spinners[HSL_LIGHTNESS_INDEX], 40, new Color(76, 127, 127, 127));
+setAndCheckSpinner(spinners[HSL_HUE_INDEX], 25, new Color(127, 97, 76, 127));
+setAndCheckSpinner(spinners[HSL_TRANSPARENCY_INDEX], 50, new Color(127, 97, 76, 127));
+}
+
+private void checkRGB() {
+String sampleColor = "111111";
+tabOperator.selectPage(RGB);
+initializeSliderAndSpinner(RGB_NUMBER_OF_SLIDERS_AND_SPINNERS);
+JTextFieldOperator colorCode = new JTextFieldOperator(colorChooserDialog, RGB_COLORCODE_TEXT_FIELD_INDEX);
+resetColor();
+setAndCheckSlider(sliders[RGB_GREEN_INDEX], 50, new Color(125, 50, 125, 255));
+setAndCheckSlider(sliders[RGB_BLUE_INDEX], 80, new Color(125, 50, 80, 255));
+setAndCheckSlider(sliders[RGB_RED_INDEX], 50, new Color(50, 50, 80, 255));
+setAndCheckSlider(sliders[RGB_ALPHA_INDEX], 125, new Color(50, 50, 80, 125));
+setAndCheckSpinner(spinners[RGB_GREEN_INDEX], 25, new Color(50, 25, 80, 125));
+setAndCheckSpinner(spinners[RGB_BLUE_INDEX], 40, new Color(50, 25, 40, 125));
+setAndCheckSpinner(spinners[RGB_RED_INDEX], 25, new Color(25, 25, 40, 125));
+setAndCheckSpinner(spinners[RGB_ALPHA_INDEX], 255, new Color(25, 25, 40, 255));
+
+colorCode.setText(sampleColor);
+// Wait for the sampleColor to be set in the color code text field.
+colorCode.waitText(sampleColor);
+colorCode.getFocus();
+colorCode.pressKey(KeyEvent.VK_TAB);
+// Wait for the color to be set
+waitJColorChooserColor(new Color(17, 17, 17, 255));
+}
+
+private void checkCMYK() {
+tabOperator.selectPage(CMYK);
+initializeSliderAndSpinner(CMYK_NUMBER_OF_SLIDERS_AND_SPINNERS);
+resetColor();
+setAndCheckSlider(sliders[CMYK_MAGENTA_INDEX], 50, new Color(125, 100, 125, 255));
+setAndCheckSlider(sliders[CMYK_YELLOW_INDEX], 80, new Color(125, 100, 85, 255));
+setAndCheckSlider(sliders[CMYK_CYAN_INDEX], 50, new Color(100, 100, 85, 255));
+setAndCheckSlider(sliders[CMYK_BLACK_INDEX], 50, new Color(164, 164, 140, 255));
+setAndCheckSlider(sliders[CMYK_ALPHA_INDEX], 125, new Color(164, 164, 140, 125));
+setAndCheckSpinner(spinners[CMYK_MAGENTA_INDEX], 25, new Color(164, 184, 140, 125));
+setAndCheckSpinner(spinners[CMYK_YELLOW_INDEX], 40, new Color(164, 184, 172, 125));
+setAndCheckSpinner(spinners[CMYK_CYAN_INDEX], 25, new Color(184, 184, 172, 125));
+setAndCheckSpinner(spinners[CMYK_BLACK_INDEX], 100, new Color(139, 139, 130, 125));
+setAndCheckSpinner(spinners[CMYK_ALPHA_INDEX], 255, new Color(139, 139, 130, 255));
+}
+
+private void setAndCheckSlider(JSliderOperator slider, int sliderValue, Color expectedColor) {
+slider.setValue(sliderValue);
+// Wait for slider to attain the specified value
+slider.waitStateOnQueue(jSlider -> slider.getValue() == sliderValue);
+colorChooser.waitStateOnQueue(jColorChooser -> (colorChooser.getColor().equals(expectedColor)));
+}
+
+private void setAndCheckSpinner(JSpinnerOperator spinner, int spinnerValue, Color expectedColor) {
+spinner.setValue(spinnerValue);
+// Wait for spinner to attain the specified value
+spinner.waitStateOnQueue(jSpinner -> (int) spinner.getValue() == spinnerValue);
+colorChooser.waitStateOnQueue(jColorChooser -> (colorChooser.getColor().equals(expectedColor)));
+}
+
+private void initializeSliderAndSpinner(int numberOfSlidersAndSpinners) {
+for (int i = 0; i < numberOfSlidersAndSpinners; i++) {
+sliders[i] = new JSliderOperator(colorChooserDialog, i);
+spinners[i] = new JSpinnerOperator(colorChooserDialog, i);
+}
+}
+
+private void pushButtonAndWaitDialogClosed(JButtonOperator button) {
+button.push();
+// Wait for the color chooser dialog to close.
+colorChooserDialog.waitClosed();
+}
+}
--- a/test/jdk/sanity/client/SwingSet/src/SliderDemoTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/SwingSet/src/SliderDemoTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
import java.awt.event.KeyEvent;
import java.util.function.Predicate;
+import javax.swing.UIManager;
+
import static org.testng.AssertJUnit.*;
import org.testng.annotations.Test;
import org.netbeans.jemmy.ClassReference;
@@ -52,7 +54,7 @@
* java.logging
* @build org.jemmy2ext.JemmyExt
* @build com.sun.swingset3.demos.slider.SliderDemo
- * @run testng SliderDemoTest
+ * @run testng/timeout=600 SliderDemoTest
*/
@Listeners(GuiTestListener.class)
public class SliderDemoTest {
@@ -63,9 +65,12 @@
private static final int HORIZONTAL_MINOR_TICKS_SLIDER_MAXIMUM = 11;
private static final int VERTICAL_MINOR_TICKS_SLIDER_MINIMUM = 0;
private static final int VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM = 100;
+ private String currentLookAndFeel;
- @Test
- public void test() throws Exception {
+ @Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class)
+ public void test(String lookAndFeel) throws Exception {
+ UIManager.setLookAndFeel(lookAndFeel);
+ currentLookAndFeel = lookAndFeel;
new ClassReference(SliderDemo.class.getCanonicalName()).startApplication();
JFrameOperator frame = new JFrameOperator(DEMO_TITLE);
plain(frame, HORIZONTAL_PLAIN_SLIDER);
@@ -143,6 +148,7 @@
}
private void checkKeyboard(JSliderOperator jso) {
+ boolean isMotif = currentLookAndFeel.equals("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
checkKeyPress(jso, KeyEvent.VK_HOME,
jSlider -> jSlider.getValue() == jso.getMinimum());
@@ -156,7 +162,7 @@
checkKeyPress(jso, KeyEvent.VK_RIGHT,
jSlider -> jSlider.getValue() >= expectedValue);
}
- {
+ if (!isMotif) {
int expectedValue = jso.getValue() + 11;
checkKeyPress(jso, KeyEvent.VK_PAGE_UP,
jSlider -> jSlider.getValue() >= expectedValue);
@@ -175,7 +181,7 @@
checkKeyPress(jso, KeyEvent.VK_LEFT,
jSlider -> jSlider.getValue() <= expectedValue);
}
- {
+ if (!isMotif) {
int expectedValue = jso.getValue() - 11;
checkKeyPress(jso, KeyEvent.VK_PAGE_DOWN,
jSlider -> jSlider.getValue() <= expectedValue);
--- a/test/jdk/sanity/client/SwingSet/src/ToolTipDemoTest.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/SwingSet/src/ToolTipDemoTest.java Wed Feb 13 13:22:15 2019 -0500
@@ -34,6 +34,7 @@
import java.awt.Point;
import javax.swing.ToolTipManager;
+import javax.swing.UIManager;
import org.jtregext.GuiTestListener;
import org.netbeans.jemmy.ClassReference;
@@ -75,8 +76,9 @@
*
* @throws Exception
*/
- @Test
- public void test() throws Exception {
+ @Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class)
+ public void test(String lookAndFeel) throws Exception {
+ UIManager.setLookAndFeel(lookAndFeel);
new ClassReference(ToolTipDemo.class.getCanonicalName()).startApplication();
JFrameOperator frameOperator = new JFrameOperator(DEMO_TITLE);
frameOperator.setComparator(EXACT_STRING_COMPARATOR);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/BezierAnimationPanel.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* This code is free software; you can redistribute it and/or modify it
+* 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 com.sun.swingset3.demos.colorchooser;
+
+import java.awt.*;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.awt.geom.GeneralPath;
+import java.awt.image.BufferedImage;
+import java.util.Hashtable;
+import java.util.Map;
+import javax.swing.*;
+
+import static com.sun.swingset3.demos.colorchooser.BezierAnimationPanel.BezierColor.*;
+
+/**
+* BezierAnimationPanel
+*
+* @author Jim Graham
+* @author Jeff Dinkins (removed dynamic setting changes, made swing friendly)
+* @version 1.16 11/17/05
+*/
+public class BezierAnimationPanel extends JPanel implements Runnable {
+public static enum BezierColor {
+BACKGROUND, OUTER, GRADIENT_A, GRADIENT_B
+}
+
+private final Map<BezierColor, Color> colors = new Hashtable<BezierColor, Color>();
+
+private GradientPaint gradient = null;
+
+private static final int NUMPTS = 6;
+
+private final float[] animpts = new float[NUMPTS * 2];
+
+private final float[] deltas = new float[NUMPTS * 2];
+
+private BufferedImage img;
+
+private Thread anim;
+
+private final Object lock = new Object();
+
+/**
+* BezierAnimationPanel Constructor
+*/
+public BezierAnimationPanel() {
+setOpaque(true);
+
+colors.put(BACKGROUND, new Color(0, 0, 153));
+colors.put(OUTER, new Color(255, 255, 255));
+colors.put(GRADIENT_A, new Color(255, 0, 101));
+colors.put(GRADIENT_B, new Color(255, 255, 0));
+
+addHierarchyListener(new HierarchyListener() {
+public void hierarchyChanged(HierarchyEvent e) {
+if (isShowing()) {
+start();
+} else {
+stop();
+}
+}
+});
+}
+
+public Color getBezierColor(BezierColor bezierColor) {
+return colors.get(bezierColor);
+}
+
+public void setBezierColor(BezierColor bezierColor, Color value) {
+if (value != null) {
+colors.put(bezierColor, value);
+}
+}
+
+public void start() {
+Dimension size = getSize();
+for (int i = 0; i < animpts.length; i += 2) {
+animpts[i] = (float) (Math.random() * size.width);
+animpts[i + 1] = (float) (Math.random() * size.height);
+deltas[i] = (float) (Math.random() * 4.0 + 2.0);
+deltas[i + 1] = (float) (Math.random() * 4.0 + 2.0);
+if (animpts[i] > size.width / 6.0f) {
+deltas[i] = -deltas[i];
+}
+if (animpts[i + 1] > size.height / 6.0f) {
+deltas[i + 1] = -deltas[i + 1];
+}
+}
+anim = new Thread(this);
+anim.setPriority(Thread.MIN_PRIORITY);
+anim.start();
+}
+
+public synchronized void stop() {
+anim = null;
+notify();
+}
+
+private static void animate(float[] pts, float[] deltas, int index, int limit) {
+float newpt = pts[index] + deltas[index];
+if (newpt <= 0) {
+newpt = -newpt;
+deltas[index] = (float) (Math.random() * 3.0 + 2.0);
+} else if (newpt >= (float) limit) {
+newpt = 2.0f * limit - newpt;
+deltas[index] = -(float) (Math.random() * 3.0 + 2.0);
+}
+pts[index] = newpt;
+}
+
+public void run() {
+Thread me = Thread.currentThread();
+while (getSize().width <= 0) {
+try {
+Thread.sleep(500);
+} catch (InterruptedException e) {
+return;
+}
+}
+
+Graphics2D g2d = null;
+Graphics2D bufferG2D = null;
+BasicStroke solid = new BasicStroke(9.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 9.0f);
+GeneralPath gp = new GeneralPath(GeneralPath.WIND_NON_ZERO);
+int rule = AlphaComposite.SRC_OVER;
+AlphaComposite opaque = AlphaComposite.SrcOver;
+AlphaComposite blend = AlphaComposite.getInstance(rule, 0.9f);
+AlphaComposite set = AlphaComposite.Src;
+Dimension oldSize = getSize();
+Shape clippath = null;
+while (anim == me) {
+Dimension size = getSize();
+if (size.width != oldSize.width || size.height != oldSize.height) {
+img = null;
+clippath = null;
+if (bufferG2D != null) {
+bufferG2D.dispose();
+bufferG2D = null;
+}
+}
+oldSize = size;
+
+if (img == null) {
+img = (BufferedImage) createImage(size.width, size.height);
+}
+
+if (bufferG2D == null) {
+bufferG2D = img.createGraphics();
+bufferG2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_DEFAULT);
+bufferG2D.setClip(clippath);
+}
+g2d = bufferG2D;
+
+float[] ctrlpts;
+for (int i = 0; i < animpts.length; i += 2) {
+animate(animpts, deltas, i, size.width);
+animate(animpts, deltas, i + 1, size.height);
+}
+ctrlpts = animpts;
+int len = ctrlpts.length;
+gp.reset();
+float prevx = ctrlpts[len - 2];
+float prevy = ctrlpts[len - 1];
+float curx = ctrlpts[0];
+float cury = ctrlpts[1];
+float midx = (curx + prevx) / 2.0f;
+float midy = (cury + prevy) / 2.0f;
+gp.moveTo(midx, midy);
+for (int i = 2; i <= ctrlpts.length; i += 2) {
+float x1 = (midx + curx) / 2.0f;
+float y1 = (midy + cury) / 2.0f;
+prevx = curx;
+prevy = cury;
+if (i < ctrlpts.length) {
+curx = ctrlpts[i];
+cury = ctrlpts[i + 1];
+} else {
+curx = ctrlpts[0];
+cury = ctrlpts[1];
+}
+midx = (curx + prevx) / 2.0f;
+midy = (cury + prevy) / 2.0f;
+float x2 = (prevx + midx) / 2.0f;
+float y2 = (prevy + midy) / 2.0f;
+gp.curveTo(x1, y1, x2, y2, midx, midy);
+}
+gp.closePath();
+
+synchronized (lock) {
+g2d.setComposite(set);
+g2d.setBackground(getBezierColor(BACKGROUND));
+g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+
+// g2d.clearRect(bounds.x-5, bounds.y-5, bounds.x + bounds.width
+// + 5, bounds.y + bounds.height + 5);
+g2d.clearRect(0, 0, getWidth(), getHeight());
+
+g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+g2d.setColor(getBezierColor(OUTER));
+g2d.setComposite(opaque);
+g2d.setStroke(solid);
+g2d.draw(gp);
+g2d.setPaint(gradient);
+
+Rectangle bounds = gp.getBounds();
+
+gradient = new GradientPaint(bounds.x, bounds.y, getBezierColor(GRADIENT_A), bounds.x + bounds.width,
+bounds.y + bounds.height, getBezierColor(GRADIENT_B), true);
+
+g2d.setComposite(blend);
+g2d.fill(gp);
+}
+
+repaint();
+
+Thread.yield();
+}
+if (g2d != null) {
+g2d.dispose();
+}
+}
+
+public void paint(Graphics g) {
+synchronized (lock) {
+Graphics2D g2d = (Graphics2D) g;
+if (img != null) {
+g2d.setComposite(AlphaComposite.Src);
+g2d.drawImage(img, null, 0, 0);
+}
+}
+}
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/ColorChooserDemo.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * 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 com.sun.swingset3.demos.colorchooser;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+
+import com.sun.swingset3.demos.JGridPanel;
+import com.sun.swingset3.demos.ResourceManager;
+import com.sun.swingset3.DemoProperties;
+
+/**
+ * JColorChooserDemo
+ *
+ * @author Jeff Dinkins
+ * @version 1.1 07/16/99
+ */
+@DemoProperties(value = "JColorChooser Demo", category = "Choosers", description = "Demonstrates JColorChooser, a component which allows the user to pick a color.", sourceFiles = {
+ "com/sun/swingset3/demos/colorchooser/ColorChooserDemo.java",
+ "com/sun/swingset3/demos/colorchooser/BezierAnimationPanel.java", "com/sun/swingset3/demos/JGridPanel.java",
+ "com/sun/swingset3/demos/ResourceManager.java",
+ "com/sun/swingset3/demos/colorchooser/resources/ColorChooserDemo.properties",
+ "com/sun/swingset3/demos/colorchooser/resources/images/ColorChooserDemo.gif" })
+public class ColorChooserDemo extends JPanel {
+
+ private static final ResourceManager resourceManager = new ResourceManager(ColorChooserDemo.class);
+
+ private final BezierAnimationPanel bezAnim = new BezierAnimationPanel();
+
+ public static final String BACKGROUND = resourceManager.getString("ColorChooserDemo.background");
+ public static final String GRADIENT_1 = resourceManager.getString("ColorChooserDemo.grad_a");
+ public static final String GRADIENT_2 = resourceManager.getString("ColorChooserDemo.grad_b");
+ public static final String PERIMETER = resourceManager.getString("ColorChooserDemo.outer_line");
+ public static final String CHOOSER_TITLE = resourceManager.getString("ColorChooserDemo.chooser_title");
+
+ private final JButton outerColorButton = new JButton(PERIMETER);
+
+ private final JButton backgroundColorButton = new JButton(BACKGROUND);
+
+ private final JButton gradientAButton = new JButton(GRADIENT_1);
+
+ private final JButton gradientBButton = new JButton(GRADIENT_2);
+
+ public static final String DEMO_TITLE = ColorChooserDemo.class.getAnnotation(DemoProperties.class).value();
+
+ /**
+ * main method allows us to run as a standalone demo.
+ */
+ public static void main(String[] args) {
+ JFrame frame = new JFrame(ColorChooserDemo.class.getAnnotation(DemoProperties.class).value());
+
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.getContentPane().add(new ColorChooserDemo());
+ frame.setPreferredSize(new Dimension(800, 600));
+ frame.pack();
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ }
+
+ /**
+ * ColorChooserDemo Constructor
+ */
+ public ColorChooserDemo() {
+ setLayout(new BorderLayout());
+
+ outerColorButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.OUTER));
+
+ backgroundColorButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.BACKGROUND));
+
+ gradientAButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.GRADIENT_A));
+
+ gradientBButton.setIcon(new ColorSwatch(BezierAnimationPanel.BezierColor.GRADIENT_B));
+
+ ActionListener l = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ JButton button = (JButton) e.getSource();
+
+ final BezierAnimationPanel.BezierColor bezierColor = ((ColorSwatch) button.getIcon()).getBezierColor();
+
+ Color current = bezAnim.getBezierColor(bezierColor);
+
+ final JColorChooser chooser = new JColorChooser(current != null ? current : Color.WHITE);
+
+ ActionListener colorChooserListener = new ActionListener() {
+ public void actionPerformed(ActionEvent ae) {
+ bezAnim.setBezierColor(bezierColor, chooser.getColor());
+ }
+ };
+
+ JDialog dialog = JColorChooser.createDialog(ColorChooserDemo.this, CHOOSER_TITLE, true, chooser,
+ colorChooserListener, null);
+
+ dialog.setVisible(true);
+ }
+ };
+
+ outerColorButton.addActionListener(l);
+ backgroundColorButton.addActionListener(l);
+ gradientAButton.addActionListener(l);
+ gradientBButton.addActionListener(l);
+
+ // Add control buttons
+ JPanel buttonPanel = new JPanel(new GridLayout(1, 4, 15, 0));
+
+ buttonPanel.add(backgroundColorButton);
+ buttonPanel.add(gradientAButton);
+ buttonPanel.add(gradientBButton);
+ buttonPanel.add(outerColorButton);
+
+ // Add everything to the panel
+ JGridPanel pnContent = new JGridPanel(1, 0, 1);
+
+ pnContent.cell(buttonPanel, JGridPanel.Layout.CENTER).cell(bezAnim);
+
+ pnContent.setBorder(new EmptyBorder(10, 0, 0, 0));
+
+ add(pnContent);
+ }
+
+ private class ColorSwatch implements Icon {
+ private final BezierAnimationPanel.BezierColor bezierColor;
+
+ public ColorSwatch(BezierAnimationPanel.BezierColor bezierColor) {
+ this.bezierColor = bezierColor;
+ }
+
+ public int getIconWidth() {
+ return 11;
+ }
+
+ public int getIconHeight() {
+ return 11;
+ }
+
+ public BezierAnimationPanel.BezierColor getBezierColor() {
+ return bezierColor;
+ }
+
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ g.setColor(Color.black);
+ g.fillRect(x, y, getIconWidth(), getIconHeight());
+ g.setColor(bezAnim.getBezierColor(bezierColor));
+ g.fillRect(x + 2, y + 2, getIconWidth() - 4, getIconHeight() - 4);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/resources/ColorChooserDemo.properties Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,11 @@
+### ColorChooser Demo ###
+
+ColorChooserDemo.accessible_description=The ColorChooser allows a user to pick a color either from a pallete or by choosing RGB or HSB values
+ColorChooserDemo.tooltip=JColorChooser demo
+ColorChooserDemo.name=ColorChooser Demo
+ColorChooserDemo.chooser_title=Choose a Color
+ColorChooserDemo.background=Background
+ColorChooserDemo.grad_a=Gradient 1
+ColorChooserDemo.grad_b=Gradient 2
+ColorChooserDemo.outer_line=Perimeter
+ColorChooserDemo.cup=Image of the Java Trademark Coffee Cup
Binary file test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/colorchooser/resources/images/ColorChooserDemo.gif has changed
--- a/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/slider/SliderDemo.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/slider/SliderDemo.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -73,6 +73,9 @@
* main method allows us to run as a standalone demo.
*/
public static void main(String[] args) {
+ //Ensure slider value is not printed above the slider handle
+ //which is the default behavior in GTK look and feel.
+ UIManager.put("Slider.paintValue", Boolean.FALSE);
JFrame frame = new JFrame(SliderDemo.class.getAnnotation(DemoProperties.class).value());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new SliderDemo());
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -41,7 +41,7 @@
import org.netbeans.jemmy.drivers.menus.DefaultJMenuDriver;
import org.netbeans.jemmy.drivers.menus.QueueJMenuDriver;
import org.netbeans.jemmy.drivers.scrolling.JScrollBarDriver;
-import org.netbeans.jemmy.drivers.scrolling.JSliderDriver;
+import org.netbeans.jemmy.drivers.scrolling.KeyboardJSliderScrollDriver;
import org.netbeans.jemmy.drivers.scrolling.JSplitPaneDriver;
import org.netbeans.jemmy.drivers.scrolling.ScrollPaneDriver;
import org.netbeans.jemmy.drivers.scrolling.ScrollbarDriver;
@@ -109,7 +109,7 @@
new ScrollPaneDriver(),
new JScrollBarDriver(),
new JSplitPaneDriver(),
- new JSliderDriver(),
+ new KeyboardJSliderScrollDriver(),
createSpinnerDriver(),
new ButtonMouseDriver(),
new JTabMouseDriver(),
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/krb5/auto/ReplayCacheTestProcWithMD5.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8168518 8194486
+ * @summary testing jdk.krb5.rcache.useMD5. This action is put in a separate
+ * test so that ReplayCacheTestProc.java can be launched with special
+ * test.* system properties easily.
+ * @library ../../../../java/security/testlibrary/ /test/lib
+ * @build jdk.test.lib.Platform
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
+ * -Djdk.net.hosts.file=TestHosts
+ * -Dtest.service=host ReplayCacheTestProc
+ */
--- a/test/jdk/sun/security/krb5/auto/rcache_usemd5.sh Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# Copyright (c) 2016, 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 8168518 8194486
-# @summary testing jdk.krb5.rcache.useMD5. This action is put in a separate
-# test so that ReplayCacheTestProc.java can be launched with special
-# test.* system properties easily.
-# @library ../../../../java/security/testlibrary/ /test/lib
-# @build jdk.test.lib.Platform
-# @run main jdk.test.lib.FileInstaller TestHosts TestHosts
-# @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
-# -Djdk.net.hosts.file=TestHosts
-# -Dtest.service=host ReplayCacheTestProc
--- a/test/jdk/sun/security/krb5/tools/KtabCheck.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sun/security/krb5/tools/KtabCheck.java Wed Feb 13 13:22:15 2019 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2011, 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
@@ -21,27 +21,87 @@
* questions.
*/
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
+
+import jdk.test.lib.SecurityTools;
import sun.security.krb5.internal.ktab.KeyTab;
import sun.security.krb5.internal.ktab.KeyTabEntry;
-/**
- * This class is called by the test ktcheck.sh and is not meant to run
- * by itself.
+/*
+ * @test
+ * @bug 6950546
+ * @summary "ktab -d name etype" to "ktab -d name [-e etype] [kvno | all | old]"
+ * @requires os.family == "windows"
+ * @library /test/lib
+ * @modules java.security.jgss/sun.security.krb5.internal.ktab
+ * java.security.jgss/sun.security.krb5
*/
public class KtabCheck {
+
+ private static final String KEYTAB = "ktab.tmp";
+
+ public static void main(String[] args) throws Exception {
+
+ Files.deleteIfExists(Path.of(KEYTAB));
+
+ ktab("-a me mine");
+ check(1,16,1,23,1,17);
+ ktab("-a me mine -n 0");
+ check(0,16,0,23,0,17);
+ ktab("-a me mine -n 1 -append");
+ check(0,16,0,23,0,17,1,16,1,23,1,17);
+ ktab("-a me mine -append");
+ check(0,16,0,23,0,17,1,16,1,23,1,17,2,16,2,23,2,17);
+ ktab("-a me mine");
+ check(3,16,3,23,3,17);
+ ktab("-a me mine -n 4 -append");
+ check(3,16,3,23,3,17,4,16,4,23,4,17);
+ ktab("-a me mine -n 5 -append");
+ check(3,16,3,23,3,17,4,16,4,23,4,17,5,16,5,23,5,17);
+ ktab("-a me mine -n 6 -append");
+ check(3,16,3,23,3,17,4,16,4,23,4,17,5,16,5,23,5,17,6,16,6,23,6,17);
+ ktab("-d me 3");
+ check(4,16,4,23,4,17,5,16,5,23,5,17,6,16,6,23,6,17);
+ ktab("-d me -e 16 6");
+ check(4,16,4,23,4,17,5,16,5,23,5,17,6,23,6,17);
+ ktab("-d me -e 17 6");
+ check(4,16,4,23,4,17,5,16,5,23,5,17,6,23);
+ ktab("-d me -e 16 5");
+ check(4,16,4,23,4,17,5,23,5,17,6,23);
+ ktab("-d me old");
+ check(4,16,5,17,6,23);
+ try {
+ ktab("-d me old");
+ throw new Exception("Should fail");
+ } catch (Exception e) {
+ // no-op
+ }
+ check(4,16,5,17,6,23);
+ ktab("-d me");
+ check();
+ }
+
+ static void ktab(String s) throws Exception {
+ File conf = new File(System.getProperty("test.src"), "onlythree.conf");
+ SecurityTools.ktab("-J-Djava.security.krb5.conf=" + conf
+ + " -k " + KEYTAB + " -f " + s).shouldHaveExitValue(0);
+ }
+
/**
* Checks if a keytab contains exactly the keys (kvno and etype)
- * @param args keytabname kvno etype...
+ * @param args kvno etype...
*/
- public static void main(String[] args) throws Exception {
+ static void check(int... args) throws Exception {
System.out.println("Checking " + Arrays.toString(args));
- KeyTab ktab = KeyTab.getInstance(args[0]);
+ KeyTab ktab = KeyTab.getInstance(KEYTAB);
Set<String> expected = new HashSet<>();
- for (int i=1; i<args.length; i += 2) {
- expected.add(args[i]+":"+args[i+1]);
+ for (int i = 0; i < args.length; i += 2) {
+ expected.add(args[i] + ":" + args[i + 1]);
}
for (KeyTabEntry e: ktab.getEntries()) {
// KVNO and etype
--- a/test/jdk/sun/security/krb5/tools/KtabZero.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/jdk/sun/security/krb5/tools/KtabZero.java Wed Feb 13 13:22:15 2019 -0500
@@ -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
@@ -21,21 +21,25 @@
* questions.
*/
+import jdk.test.lib.SecurityTools;
+import jdk.test.lib.process.OutputAnalyzer;
import sun.security.krb5.internal.ktab.KeyTab;
import sun.security.krb5.internal.ktab.KeyTabConstants;
-import java.io.File;
import java.lang.reflect.Field;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
+import static jdk.test.lib.SecurityTools.klist;
+
/*
* @test
- * @bug 8014196
+ * @bug 8014196 7002036 7043737
* @summary ktab creates a file with zero kt_vno
* @requires os.family == "windows"
+ * @library /test/lib
* @modules java.security.jgss/sun.security.krb5.internal.ktab:+open
- * java.security.jgss/sun.security.krb5.internal.tools
*/
public class KtabZero {
@@ -45,6 +49,8 @@
// 0. Non-existing keytab
Files.deleteIfExists(Paths.get(NAME));
+ ktab("-l").shouldNotHaveExitValue(0);
+ klist("-k " + NAME).shouldNotHaveExitValue(0);
check(true);
// 1. Create with KeyTab
@@ -54,9 +60,24 @@
// 2. Create with the tool
Files.deleteIfExists(Paths.get(NAME));
- sun.security.krb5.internal.tools.Ktab.main(
- ("-k " + NAME + " -a me@HERE pass").split(" "));
+ ktab("-a me@HERE pass").shouldHaveExitValue(0);
+ ktab("-l").shouldHaveExitValue(0);
+
+ // 7002036: ktab return code changes on a error case
+ ktab("-hello").shouldNotHaveExitValue(0);
+ ktab("").shouldNotHaveExitValue(0);
check(false);
+
+ // 3. Invalid keytab
+ Files.write(Path.of(NAME), "garbage".getBytes());
+ ktab("-l").shouldNotHaveExitValue(0);
+ ktab("-a me@HERE pass").shouldNotHaveExitValue(0);
+ klist("-k " + NAME).shouldNotHaveExitValue(0);
+ }
+
+ static OutputAnalyzer ktab(String s) throws Exception {
+ s = ("-k " + NAME + " " + s).trim();
+ return SecurityTools.ktab(s);
}
// Checks existence as well as kt-vno
--- a/test/jdk/sun/security/krb5/tools/ktarg.sh Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +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.
-#
-
-# @test
-# @bug 7002036
-# @summary ktab return code changes on a error case
-# @run shell ktarg.sh
-#
-
-if [ "${TESTJAVA}" = "" ] ; then
- JAVAC_CMD=`which javac`
- TESTJAVA=`dirname $JAVAC_CMD`/..
-fi
-
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-OS=`uname -s`
-case "$OS" in
- CYGWIN* )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
- * )
- FS="/"
- echo "Unsupported system!"
- exit 0;
- ;;
-esac
-
-KEYTAB=ktarg.tmp
-
-rm $KEYTAB 2> /dev/null
-KTAB="${TESTJAVA}${FS}bin${FS}ktab -k $KEYTAB"
-
-$KTAB -a me@LOCAL mine || exit 1
-
-$KTAB -hello
-if [ $? = 0 ]; then exit 2; fi
-
-$KTAB
-if [ $? = 0 ]; then exit 3; fi
-
-exit 0
--- a/test/jdk/sun/security/krb5/tools/ktcheck.sh Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-#
-# Copyright (c) 2010, 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.
-#
-
-# @test
-# @bug 6950546
-# @summary "ktab -d name etype" to "ktab -d name [-e etype] [kvno | all | old]"
-# @modules java.security.jgss/sun.security.krb5.internal.ktab
-# java.security.jgss/sun.security.krb5
-# @compile KtabCheck.java
-# @run shell ktcheck.sh
-#
-
-if [ "${TESTJAVA}" = "" ] ; then
- JAVAC_CMD=`which javac`
- TESTJAVA=`dirname $JAVAC_CMD`/..
-fi
-
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-OS=`uname -s`
-case "$OS" in
- CYGWIN* )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
- * )
- FS="/"
- echo "Unsupported system!"
- exit 0;
- ;;
-esac
-
-KEYTAB=ktab.tmp
-
-rm $KEYTAB
-
-EXTRA_OPTIONS="-Djava.security.krb5.conf=${TESTSRC}${FS}onlythree.conf"
-KTAB="${TESTJAVA}${FS}bin${FS}ktab -J${EXTRA_OPTIONS} -k $KEYTAB -f"
-CHECK="${TESTJAVA}${FS}bin${FS}java -cp ${TESTCLASSES} ${TESTVMOPTS} ${EXTRA_OPTIONS} \
- --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED \
- --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED \
- KtabCheck $KEYTAB"
-
-echo ${EXTRA_OPTIONS}
-
-$KTAB -a me mine
-$CHECK 1 16 1 23 1 17 || exit 1
-$KTAB -a me mine -n 0
-$CHECK 0 16 0 23 0 17 || exit 1
-$KTAB -a me mine -n 1 -append
-$CHECK 0 16 0 23 0 17 1 16 1 23 1 17 || exit 1
-$KTAB -a me mine -append
-$CHECK 0 16 0 23 0 17 1 16 1 23 1 17 2 16 2 23 2 17 || exit 1
-$KTAB -a me mine
-$CHECK 3 16 3 23 3 17 || exit 1
-$KTAB -a me mine -n 4 -append
-$CHECK 3 16 3 23 3 17 4 16 4 23 4 17 || exit 1
-$KTAB -a me mine -n 5 -append
-$CHECK 3 16 3 23 3 17 4 16 4 23 4 17 5 16 5 23 5 17 || exit 1
-$KTAB -a me mine -n 6 -append
-$CHECK 3 16 3 23 3 17 4 16 4 23 4 17 5 16 5 23 5 17 6 16 6 23 6 17 || exit 1
-$KTAB -d me 3
-$CHECK 4 16 4 23 4 17 5 16 5 23 5 17 6 16 6 23 6 17 || exit 1
-$KTAB -d me -e 16 6
-$CHECK 4 16 4 23 4 17 5 16 5 23 5 17 6 23 6 17 || exit 1
-$KTAB -d me -e 17 6
-$CHECK 4 16 4 23 4 17 5 16 5 23 5 17 6 23 || exit 1
-$KTAB -d me -e 16 5
-$CHECK 4 16 4 23 4 17 5 23 5 17 6 23 || exit 1
-$KTAB -d me old
-$CHECK 4 16 5 17 6 23 || exit 1
-$KTAB -d me old
-$CHECK 4 16 5 17 6 23 || exit 1
-$KTAB -d me
-$CHECK || exit 1
--- a/test/jdk/sun/security/krb5/tools/ktmissing.sh Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +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.
-#
-
-# @test
-# @bug 7043737
-# @summary klist does not detect non-existing keytab
-# @run shell ktmissing.sh
-#
-
-OS=`uname -s`
-case "$OS" in
- CYGWIN* )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
- * )
- FS="/"
- echo "Unsupported system!"
- exit 0;
- ;;
-esac
-
-${TESTJAVA}${FS}bin${FS}klist -k this_file_does_not_exist && exit 1
-
-echo ABC > this_is_not_a_keytab
-
-${TESTJAVA}${FS}bin${FS}klist -k this_is_not_a_keytab && exit 2
-
-exit 0
--- a/test/jdk/sun/security/krb5/tools/ktzero.sh Tue Feb 12 11:58:41 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-#
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 8014196
-# @summary ktab creates a file with zero kt_vno
-# @run shell ktzero.sh
-#
-
-if [ "${TESTJAVA}" = "" ] ; then
- JAVAC_CMD=`which javac`
- TESTJAVA=`dirname $JAVAC_CMD`/..
-fi
-
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-OS=`uname -s`
-case "$OS" in
- CYGWIN* )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
- * )
- FS="/"
- echo "Unsupported system!"
- exit 0;
- ;;
-esac
-
-KEYTAB=ktzero.tmp
-
-rm $KEYTAB 2> /dev/null
-KTAB="${TESTJAVA}${FS}bin${FS}ktab -k $KEYTAB"
-
-# Listing non-existing ktab should fail
-$KTAB -l && exit 1
-
-# Can add to non-existing ktab
-$KTAB -a me@LOCAL mine || exit 2
-
-# Now can be listed
-$KTAB -l || exit 3
-
-echo ABCDEFG > $KEYTAB
-
-# Invalid keytab should fail for all commands
-$KTAB -l && exit 4
-$KTAB -a me@LOCAL mine && exit 2
-
-exit 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/tools/jcmd/TestProcess.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,34 @@
+/*
+ * 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 test;
+
+public class TestProcess {
+
+ public static void main(String[] args) throws Exception {
+ System.out.print("The process started, pid:" + ProcessHandle.current().pid());
+ while(true) {
+ Thread.sleep(100);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/tools/jcmd/TestProcessHelper.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.internal.module.ModuleInfoWriter;
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.util.JarUtils;
+import sun.tools.common.ProcessHelper;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.module.ModuleDescriptor;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/*
+ * @test
+ * @bug 8205654
+ * @summary Unit test for sun.tools.ProcessHelper class. The test launches Java processes with different Java options
+ * and checks that sun.tools.ProcessHelper.getMainClass(pid) method returns a correct main class. return a .
+ *
+ * @requires os.family == "linux"
+ * @library /test/lib
+ * @modules jdk.jcmd/sun.tools.common
+ * java.base/jdk.internal.module
+ * @build test.TestProcess
+ * @run main/othervm TestProcessHelper
+ */
+public class TestProcessHelper {
+
+ private ProcessHelper PROCESS_HELPER = ProcessHelper.platformProcessHelper();
+
+ private static final String TEST_PROCESS_MAIN_CLASS_NAME = "TestProcess";
+ private static final String TEST_PROCESS_MAIN_CLASS_PACKAGE = "test";
+ private static final String TEST_PROCESS_MAIN_CLASS = TEST_PROCESS_MAIN_CLASS_PACKAGE + "."
+ + TEST_PROCESS_MAIN_CLASS_NAME;
+ private static final Path TEST_CLASSES = FileSystems.getDefault().getPath(System.getProperty("test.classes"));
+ private static final Path USER_DIR = FileSystems.getDefault().getPath(System.getProperty("user.dir", "."));
+ private static final Path TEST_MODULES = USER_DIR.resolve("testmodules");
+ private static final String JAVA_PATH = JDKToolFinder.getJDKTool("java");
+ private static final Path TEST_CLASS = TEST_CLASSES.resolve(TEST_PROCESS_MAIN_CLASS_PACKAGE)
+ .resolve(TEST_PROCESS_MAIN_CLASS_NAME + ".class");
+
+ private static final String[] CP_OPTIONS = {"-cp", "-classpath", "--class-path"};
+ private static final String[][] VM_ARGS = {{}, {"-Dtest1=aaa"}, {"-Dtest1=aaa", "-Dtest2=bbb"}};
+ private static final String[][] ARGS = {{}, {"param1"}, {"param1", "param2"}};
+ private static final String[] MP_OPTIONS = {"-p", "--module-path"};
+ private static final String[] MODULE_OPTIONS = {"-m", "--module"};
+ private static final String JAR_OPTION = "-jar";
+ private static final String MODULE_NAME = "module1";
+
+
+ public static void main(String[] args) throws Exception {
+ new TestProcessHelper().runTests();
+ }
+
+ public void runTests() throws Exception {
+ testClassPath();
+ testJar();
+ testModule();
+ }
+
+ // Test Java processes that are started with -classpath, -cp, or --class-path options
+ // and with different combinations of VM and program args.
+ private void testClassPath() throws Exception {
+ for (String cp : CP_OPTIONS) {
+ for (String[] vma : VM_ARGS) {
+ for (String[] arg : ARGS) {
+ List<String> cmd = new LinkedList<>();
+ cmd.add(JAVA_PATH);
+ cmd.add(cp);
+ cmd.add(TEST_CLASSES.toAbsolutePath().toString());
+ for (String v : vma) {
+ cmd.add(v);
+ }
+ cmd.add(TEST_PROCESS_MAIN_CLASS);
+ for (String a : arg) {
+ cmd.add(a);
+ }
+ testProcessHelper(cmd);
+ }
+ }
+ }
+ }
+
+ // Test Java processes that are started with -jar option
+ // and with different combinations of VM and program args.
+ private void testJar() throws Exception {
+ File jarFile = prepareJar();
+ for (String[] vma : VM_ARGS) {
+ for (String[] arg : ARGS) {
+ List<String> cmd = new LinkedList<>();
+ cmd.add(JAVA_PATH);
+ for (String v : vma) {
+ cmd.add(v);
+ }
+ cmd.add(JAR_OPTION);
+ cmd.add(jarFile.getAbsolutePath());
+ for (String a : arg) {
+ cmd.add(a);
+ }
+ testProcessHelper(cmd);
+ }
+ }
+
+ }
+
+ // Test Java processes that are started with -m or --module options
+ // and with different combination of VM and program args.
+ private void testModule() throws Exception {
+ prepareModule();
+ for (String mp : MP_OPTIONS) {
+ for (String m : MODULE_OPTIONS) {
+ for (String[] vma : VM_ARGS) {
+ for (String[] arg : ARGS) {
+ List<String> cmd = new LinkedList<>();
+ cmd.add(JAVA_PATH);
+ cmd.add(mp);
+ cmd.add(TEST_MODULES.toAbsolutePath().toString());
+ for (String v : vma) {
+ cmd.add(v);
+ }
+ cmd.add(m);
+ cmd.add(MODULE_NAME + "/" + TEST_PROCESS_MAIN_CLASS);
+ for (String a : arg) {
+ cmd.add(a);
+ }
+ testProcessHelper(cmd);
+ }
+ }
+ }
+ }
+ }
+
+ private void checkMainClass(Process p, String expectedMainClass) {
+ String mainClass = PROCESS_HELPER.getMainClass(Long.toString(p.pid()));
+ p.destroyForcibly();
+ if (!expectedMainClass.equals(mainClass)) {
+ throw new RuntimeException("Main class is wrong: " + mainClass);
+ }
+ }
+
+ private void testProcessHelper(List<String> args) throws Exception {
+ ProcessBuilder pb = new ProcessBuilder(args);
+ String cmd = pb.command().stream().collect(Collectors.joining(" "));
+ System.out.println("Starting the process:" + cmd);
+ Process p = ProcessTools.startProcess("test", pb);
+ if (!p.isAlive()) {
+ throw new RuntimeException("Cannot start the process: " + cmd);
+ }
+ checkMainClass(p, TEST_PROCESS_MAIN_CLASS);
+ }
+
+ private File prepareJar() throws Exception {
+ Path jarFile = USER_DIR.resolve("testprocess.jar");
+ Manifest manifest = createManifest();
+ JarUtils.createJarFile(jarFile, manifest, TEST_CLASSES, TEST_CLASS);
+ return jarFile.toFile();
+ }
+
+ private void prepareModule() throws Exception {
+ TEST_MODULES.toFile().mkdirs();
+ Path moduleJar = TEST_MODULES.resolve("mod1.jar");
+ ModuleDescriptor md = createModuleDescriptor();
+ createModuleJarFile(moduleJar, md, TEST_CLASSES, TEST_CLASS);
+ }
+
+ private Manifest createManifest() {
+ Manifest manifest = new Manifest();
+ manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
+ manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, TEST_PROCESS_MAIN_CLASS);
+ return manifest;
+ }
+
+ private ModuleDescriptor createModuleDescriptor() {
+ ModuleDescriptor.Builder builder
+ = ModuleDescriptor.newModule(MODULE_NAME).requires("java.base");
+ return builder.build();
+ }
+
+ private static void createModuleJarFile(Path jarfile, ModuleDescriptor md, Path dir, Path... files)
+ throws IOException {
+
+ Path parent = jarfile.getParent();
+ if (parent != null) {
+ Files.createDirectories(parent);
+ }
+
+ List<Path> entries = findAllRegularFiles(dir, files);
+
+ try (OutputStream out = Files.newOutputStream(jarfile);
+ JarOutputStream jos = new JarOutputStream(out)) {
+ if (md != null) {
+ JarEntry je = new JarEntry("module-info.class");
+ jos.putNextEntry(je);
+ ModuleInfoWriter.write(md, jos);
+ jos.closeEntry();
+ }
+
+ for (Path entry : entries) {
+ String name = toJarEntryName(entry);
+ jos.putNextEntry(new JarEntry(name));
+ Files.copy(dir.resolve(entry), jos);
+ jos.closeEntry();
+ }
+ }
+ }
+
+ private static String toJarEntryName(Path file) {
+ Path normalized = file.normalize();
+ return normalized.subpath(0, normalized.getNameCount())
+ .toString()
+ .replace(File.separatorChar, '/');
+ }
+
+ private static List<Path> findAllRegularFiles(Path dir, Path[] files) throws IOException {
+ List<Path> entries = new ArrayList<>();
+ for (Path file : files) {
+ try (Stream<Path> stream = Files.find(dir.resolve(file), Integer.MAX_VALUE,
+ (p, attrs) -> attrs.isRegularFile())) {
+ stream.map(dir::relativize)
+ .forEach(entries::add);
+ }
+ }
+ return entries;
+ }
+
+}
--- a/test/lib/jdk/test/lib/SecurityTools.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/lib/jdk/test/lib/SecurityTools.java Wed Feb 13 13:22:15 2019 -0500
@@ -195,5 +195,33 @@
public static OutputAnalyzer jarsigner(String... args) throws Exception {
return jarsigner(List.of(args));
}
+
+ /**
+ * Runs ktab.
+ *
+ * @param args arguments to ktab in a single string. Only call this if
+ * there is no white space inside an argument. This string will
+ * be split with {@code \s+}.
+ * @return an {@link OutputAnalyzer} object
+ * @throws Exception if there is an error
+ */
+ public static OutputAnalyzer ktab(String args) throws Exception {
+ return execute(getProcessBuilder(
+ "ktab", List.of(args.trim().split("\\s+"))));
+ }
+
+ /**
+ * Runs klist.
+ *
+ * @param args arguments to klist in a single string. Only call this if
+ * there is no white space inside an argument. This string will
+ * be split with {@code \s+}.
+ * @return an {@link OutputAnalyzer} object
+ * @throws Exception if there is an error
+ */
+ public static OutputAnalyzer klist(String args) throws Exception {
+ return execute(getProcessBuilder(
+ "klist", List.of(args.trim().split("\\s+"))));
+ }
}
--- a/test/lib/sun/hotspot/WhiteBox.java Tue Feb 12 11:58:41 2019 -0500
+++ b/test/lib/sun/hotspot/WhiteBox.java Wed Feb 13 13:22:15 2019 -0500
@@ -216,6 +216,7 @@
public native void NMTUncommitMemory(long addr, long size);
public native void NMTReleaseMemory(long addr, long size);
public native long NMTMallocWithPseudoStack(long size, int index);
+ public native long NMTMallocWithPseudoStackAndType(long size, int index, int type);
public native boolean NMTChangeTrackingLevel();
public native int NMTGetHashSize();
--- a/test/make/TestMakeBase.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/test/make/TestMakeBase.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -116,6 +116,28 @@
endif
################################################################################
+# Test boolean operators
+
+$(eval $(call assert-equals, $(call And, true true true ), true))
+$(eval $(call assert-equals, $(call And, true false true ), false))
+$(eval $(call assert-equals, $(call And, false false false ), false))
+$(eval $(call assert-equals, $(call And, true), true))
+$(eval $(call assert-equals, $(call And, false), false))
+$(eval $(call assert-equals, $(call And, ), true))
+
+$(eval $(call assert-equals, $(call Or, true true true ), true))
+$(eval $(call assert-equals, $(call Or, true false true ), true))
+$(eval $(call assert-equals, $(call Or, false false false ), false))
+$(eval $(call assert-equals, $(call Or, true), true))
+$(eval $(call assert-equals, $(call Or, false), false))
+$(eval $(call assert-equals, $(call Or, ), false))
+
+# We cannot catch $(error) while testing, but you can enable this manually
+# by uncommenting and watch make fails.
+#$(eval $(call assert-equals, $(call And, non-boolean ), $(error ...)))
+#$(eval $(call assert-equals, $(call Or, non-boolean ), $(error ...)))
+
+################################################################################
# Test remove-prefixes
$(eval $(call assert-equals, \
--- a/test/make/UtilsForTests.gmk Tue Feb 12 11:58:41 2019 -0500
+++ b/test/make/UtilsForTests.gmk Wed Feb 13 13:22:15 2019 -0500
@@ -37,6 +37,6 @@
# On macosx, file system timestamps only have 1 second resultion so must add
# sleeps to properly test dependencies.
-ifeq ($(OPENJDK_BUILD_OS), macosx)
+ifeq ($(call isBuildOs, macosx), true)
SLEEP_ON_MAC := sleep 1
endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/micro/org/openjdk/bench/java/util/HashMapBench.java Wed Feb 13 13:22:15 2019 -0500
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package org.openjdk.bench.java.util;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
+import java.util.stream.IntStream;
+
+import static java.util.stream.Collectors.toMap;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Thread)
+public class HashMapBench {
+ private Supplier<Map<Integer, Integer>> mapSupplier;
+ private Map<Integer, Integer> bigMapToAdd;
+
+ @Param("1000000")
+ private int size;
+
+ @Param
+ private MapType mapType;
+
+ public enum MapType {
+ HASH_MAP,
+ LINKED_HASH_MAP,
+ }
+
+ @Setup
+ public void setup() {
+ switch (mapType) {
+ case HASH_MAP:
+ mapSupplier = () -> new HashMap<>();
+ break;
+ case LINKED_HASH_MAP:
+ mapSupplier = () -> new LinkedHashMap<>();
+ break;
+ default:
+ throw new AssertionError();
+ }
+
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
+ this.bigMapToAdd = IntStream.range(0, size).boxed()
+ .collect(toMap(i -> 7 + i * 128, i -> rnd.nextInt()));
+ }
+
+ @Benchmark
+ public int putAllWithBigMapToNonEmptyMap() {
+ Map<Integer, Integer> map = mapSupplier.get();
+ map.put(-1, -1);
+ map.putAll(bigMapToAdd);
+ return map.size();
+ }
+
+ @Benchmark
+ public int putAllWithBigMapToEmptyMap() {
+ Map<Integer, Integer> map = mapSupplier.get();
+ map.putAll(bigMapToAdd);
+ return map.size();
+ }
+
+ @Benchmark
+ public int put() {
+ Map<Integer, Integer> map = mapSupplier.get();
+ for (int k : bigMapToAdd.keySet()) {
+ map.put(k, bigMapToAdd.get(k));
+ }
+ return map.size();
+ }
+}