OpenJDK / jdk / jdk10
changeset 42401:925e4d87ebac
Merge
author | duke |
---|---|
date | Wed, 05 Jul 2017 22:32:17 +0200 |
parents | bd7790c39ad8 c80058e8983e |
children | 4330273ee80c |
files | hotspot/test/runtime/modules/JVMCanReadModule.java hotspot/test/runtime/modules/JVMIsExportedToModule.java hotspot/test/serviceability/jdwp/JdwpCanReadCmd.java hotspot/test/serviceability/jdwp/JdwpCanReadReply.java jdk/src/java.base/share/classes/java/lang/module/Dependence.java jdk/src/java.base/share/classes/javax/crypto/JceSecurity.java jdk/src/java.base/share/classes/sun/util/locale/provider/ResourceBundleProviderSupport.java jdk/test/java/awt/Focus/DisposedWindow/DisposeDialogNotActivateOwnerTest/DisposeDialogNotActivateOwnerTest.html jdk/test/java/lang/Class/getResource/src/m3/module-info.java jdk/test/java/lang/Class/getResource/src/m3/p3/Main.java jdk/test/java/lang/ClassLoader/getResource/modules/src/m3/module-info.java jdk/test/java/lang/ClassLoader/getResource/modules/src/m3/p3/Main.java jdk/test/java/lang/reflect/Module/access/src/target/p/Exported.java jdk/test/java/lang/reflect/Module/access/src/target/p/Helper.java jdk/test/java/lang/reflect/Module/access/src/target/q/Internal.java jdk/test/java/net/Authenticator/B4933582.sh jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java jdk/test/java/util/ServiceLoader/Basic.java jdk/test/java/util/ServiceLoader/FooProvider1.java jdk/test/java/util/ServiceLoader/FooProvider2.java jdk/test/java/util/ServiceLoader/FooProvider3.java jdk/test/java/util/ServiceLoader/FooService.java jdk/test/java/util/ServiceLoader/Load.java jdk/test/java/util/ServiceLoader/basic.sh jdk/test/java/util/ServiceLoader/modules/MiscTests.java jdk/test/java/util/ServiceLoader/modules/ServicesTest.java jdk/test/java/util/ServiceLoader/modules/src/bananascript/module-info.java jdk/test/java/util/ServiceLoader/modules/src/bananascript/org/banana/BananaScript.java jdk/test/java/util/ServiceLoader/modules/src/bananascript/org/banana/BananaScriptEngineFactory.java jdk/test/java/util/ServiceLoader/modules/src/test/module-info.java jdk/test/java/util/ServiceLoader/modules/src/test/test/Main.java jdk/test/java/util/Spliterator/SpliteratorLateBindingFailFastTest.java make/CreateHgtipFiles.gmk nashorn/test/script/currently-failing/JDK-8130127.js nashorn/test/script/currently-failing/JDK-8130127.js.EXPECTED |
diffstat | 922 files changed, 30148 insertions(+), 11240 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Thu Dec 01 21:40:21 2016 +0000 +++ b/.hgignore Wed Jul 05 22:32:17 2017 +0200 @@ -3,8 +3,7 @@ ^.idea/ nbproject/private/ ^webrev -^.hgtip -^.bridge2 +^.src-rev$ ^.jib/ .DS_Store .metadata/
--- a/.hgtags-top-repo Thu Dec 01 21:40:21 2016 +0000 +++ b/.hgtags-top-repo Wed Jul 05 22:32:17 2017 +0200 @@ -389,3 +389,4 @@ 8d337fd6333e28c48aa87880144b840aad82baaf jdk-9+144 ff98aa9ec9fae991e426ce5926fc9036d25f5562 jdk-9+145 a22e2671d88f6b22a4aa82e3966986542ed2a381 jdk-9+146 +5f6920274c48eb00d31afee6c034826a754c13d9 jdk-9+147
--- a/common/autoconf/boot-jdk.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/boot-jdk.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -98,7 +98,7 @@ fi ]) -# Test: Is bootjdk explicitely set by command line arguments? +# Test: Is bootjdk explicitly set by command line arguments? AC_DEFUN([BOOTJDK_CHECK_ARGUMENTS], [ if test "x$with_boot_jdk" != x; then @@ -238,7 +238,7 @@ $1=$BOOT_JDK/bin/$2 if test ! -x [$]$1; then AC_MSG_RESULT(not found) - AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk]) AC_MSG_ERROR([Could not find $2 in the Boot JDK]) fi AC_MSG_RESULT(ok) @@ -262,7 +262,7 @@ # we detected something (if so, the path to the jdk is in BOOT_JDK). But we # must check if this is indeed valid; otherwise we'll continue looking. - # Test: Is bootjdk explicitely set by command line arguments? + # Test: Is bootjdk explicitly set by command line arguments? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_ARGUMENTS]) if test "x$with_boot_jdk" != x && test "x$BOOT_JDK_FOUND" = xno; then # Having specified an argument which is incorrect will produce an instant failure; @@ -286,7 +286,7 @@ if test "x$BOOT_JDK_FOUND" = xno; then HELP_MSG_MISSING_DEPENDENCY([openjdk]) AC_MSG_NOTICE([Could not find a valid Boot JDK. $HELP_MSG]) - AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_NOTICE([This might be fixed by explicitly setting --with-boot-jdk]) AC_MSG_ERROR([Cannot continue]) fi
--- a/common/autoconf/build-performance.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/build-performance.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -217,6 +217,13 @@ AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], [ if test "x$CCACHE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then + HAS_BAD_CCACHE=[`$ECHO $CCACHE_VERSION | \ + $GREP -e '^1\.' -e '^2\.' -e '^3\.0\.' -e '^3\.1\.'`] + if test "x$HAS_BAD_CCACHE" != "x"; then + AC_MSG_ERROR([On macosx, ccache 3.2 or later is required, found $CCACHE_VERSION]) + fi + fi if test "x$USE_PRECOMPILED_HEADER" = "x1"; then HAS_BAD_CCACHE=[`$ECHO $CCACHE_VERSION | \ $GREP -e '^1.*' -e '^2.*' -e '^3\.0.*' -e '^3\.1\.[0123]$'`]
--- a/common/autoconf/buildjdk-spec.gmk.in Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/buildjdk-spec.gmk.in Wed Jul 05 22:32:17 2017 +0200 @@ -86,73 +86,13 @@ # Save speed and disk space by not enabling debug symbols for the buildjdk ENABLE_DEBUG_SYMBOLS := false -#################################################### -# -# Legacy Hotspot support +# Control wether Hotspot builds gtest tests +BUILD_GTEST := false -# Legacy setting: OPT or DBG -VARIANT := OPT -# Legacy setting: true or false -FASTDEBUG := false -# Legacy setting: debugging the class files? -DEBUG_CLASSFILES := false +JVM_VARIANTS := server # Some users still set EXTRA_*FLAGS on the make command line. Must # make sure to override that when building buildjdk. override EXTRA_CFLAGS := override EXTRA_CXXFLAGS := override EXTRA_LDFLAGS := - -# The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the -# compiler that produces code that can be run on the build platform. -HOSTCC := $(BUILD_CC) -HOSTCXX := $(BUILD_CXX) - -# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) -PLATFORM := $(OPENJDK_BUILD_OS) -# 32 or 64 bit -ARCH_DATA_MODEL := $(OPENJDK_BUILD_CPU_BITS) - -ALT_BOOTDIR := $(BOOT_JDK) -# Yet another name for arch used for an extra subdir below the jvm lib. -# Uses i386 and amd64, instead of x86 and x86_64. -LIBARCH := @OPENJDK_BUILD_CPU_LEGACY_LIB@ -# Set the cpu architecture. Some users still set ARCH on the make command line. Must -# make sure to override that when building buildjdk. -override ARCH := $(OPENJDK_BUILD_CPU_ARCH) -# Legacy setting for building for a 64 bit machine. -# If yes then this expands to _LP64 := 1 -ifeq ($(OPENJDK_BUILD_CPU_BITS), 64) - _LP64 := 1 -endif - -ALT_OUTPUTDIR := $(HOTSPOT_OUTPUTDIR) -ALT_EXPORT_PATH := $(HOTSPOT_DIST) - -JVM_INTERPRETER := @JVM_INTERPRETER@ -ifeq ($(JVM_INTERPRETER), cpp) - CC_INTERP=true -endif - -HOTSPOT_MAKE_ARGS := product docs export_product - -# Control wether Hotspot builds gtest tests -BUILD_GTEST := false - -USE_PRECOMPILED_HEADER := @USE_PRECOMPILED_HEADER@ - -# Hotspot expects the variable FULL_DEBUG_SYMBOLS=1/0 to control debug symbols -# creation. -FULL_DEBUG_SYMBOLS := 0 -ZIP_DEBUGINFO_FILES := 0 -# Disable stripping -STRIP_POLICY := none - -JVM_VARIANTS := server -JVM_VARIANT_SERVER := true -JVM_VARIANT_CLIENT := false -JVM_VARIANT_MINIMAL1 := false -JVM_VARIANT_KERNEL := false -JVM_VARIANT_ZERO := false -JVM_VARIANT_ZEROSHARK := false -JVM_VARIANT_CORE := false
--- a/common/autoconf/configure.ac Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/configure.ac Wed Jul 05 22:32:17 2017 +0200 @@ -182,7 +182,6 @@ # Finally do some processing after the detection phase TOOLCHAIN_SETUP_BUILD_COMPILERS -TOOLCHAIN_SETUP_LEGACY TOOLCHAIN_MISC_CHECKS # Setup the JTReg Regression Test Harness.
--- a/common/autoconf/flags.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/flags.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -1378,7 +1378,7 @@ AC_MSG_CHECKING([if native warnings are errors]) if test "x$enable_warnings_as_errors" = "xyes"; then - AC_MSG_RESULT([yes (explicitely set)]) + AC_MSG_RESULT([yes (explicitly set)]) WARNINGS_AS_ERRORS=true elif test "x$enable_warnings_as_errors" = "xno"; then AC_MSG_RESULT([no])
--- a/common/autoconf/generated-configure.sh Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/generated-configure.sh Wed Jul 05 22:32:17 2017 +0200 @@ -700,8 +700,6 @@ JVM_FEATURES_server INCLUDE_DTRACE GCOV_ENABLED -STRIP_POLICY -DEBUG_BINARIES ZIP_EXTERNAL_DEBUG_SYMBOLS COPY_DEBUG_SYMBOLS COMPILE_WITH_DEBUG_SYMBOLS @@ -791,11 +789,6 @@ HOTSPOT_TOOLCHAIN_TYPE USING_BROKEN_SUSE_LD PACKAGE_PATH -USE_CLANG -HOTSPOT_LD -HOTSPOT_CXX -HOTSPOT_RC -HOTSPOT_MT BUILD_AS BUILD_LDCXX BUILD_LD @@ -1974,8 +1967,8 @@ --enable-debug set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) [disabled] --enable-headless-only only build headless (no GUI) support [disabled] - --enable-unlimited-crypto - Enable unlimited crypto policy [disabled] + --disable-unlimited-crypto + Disable unlimited crypto policy [enabled] --disable-keep-packaged-modules Do not keep packaged modules in jdk image [enable] --enable-static-build enable static library build [disabled] @@ -3851,7 +3844,7 @@ # $1 A command line (typically autoconf macro) to execute -# Test: Is bootjdk explicitely set by command line arguments? +# Test: Is bootjdk explicitly set by command line arguments? # Test: Is $JAVA_HOME set? @@ -4911,7 +4904,7 @@ # Minimum supported versions, empty means unspecified TOOLCHAIN_MINIMUM_VERSION_clang="3.2" TOOLCHAIN_MINIMUM_VERSION_gcc="4.3" -TOOLCHAIN_MINIMUM_VERSION_microsoft="" +TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010 TOOLCHAIN_MINIMUM_VERSION_solstudio="5.13" TOOLCHAIN_MINIMUM_VERSION_xlc="" @@ -4982,10 +4975,6 @@ # for this, we can only do this after these have been setup. -# Setup legacy variables that are still needed as alternative ways to refer to -# parts of the toolchain. - - # Do some additional checks on the detected tools. @@ -5093,7 +5082,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1479997904 +DATE_WHEN_GENERATED=1480714260 ############################################################################### # @@ -15523,7 +15512,7 @@ ;; esac - # ..and setup our own variables. (Do this explicitely to facilitate searching) + # ..and setup our own variables. (Do this explicitly to facilitate searching) OPENJDK_BUILD_OS="$VAR_OS" if test "x$VAR_OS_TYPE" != x; then OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE" @@ -15662,7 +15651,7 @@ ;; esac - # ... and setup our own variables. (Do this explicitely to facilitate searching) + # ... and setup our own variables. (Do this explicitly to facilitate searching) OPENJDK_TARGET_OS="$VAR_OS" if test "x$VAR_OS_TYPE" != x; then OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE" @@ -24240,7 +24229,7 @@ if test "${enable_unlimited_crypto+set}" = set; then : enableval=$enable_unlimited_crypto; else - enable_unlimited_crypto=no + enable_unlimited_crypto=yes fi if test "x$enable_unlimited_crypto" = "xyes"; then @@ -24400,7 +24389,7 @@ as_fn_error $? "Version string contains + but both 'BUILD' and 'OPT' are missing" "$LINENO" 5 fi # Stop the version part process from setting default values. - # We still allow them to explicitely override though. + # We still allow them to explicitly override though. NO_DEFAULT_VERSION_PARTS=true else as_fn_error $? "--with-version-string fails to parse as a valid version string: $with_version_string" "$LINENO" 5 @@ -24769,7 +24758,7 @@ # we detected something (if so, the path to the jdk is in BOOT_JDK). But we # must check if this is indeed valid; otherwise we'll continue looking. - # Test: Is bootjdk explicitely set by command line arguments? + # Test: Is bootjdk explicitly set by command line arguments? if test "x$BOOT_JDK_FOUND" = xno; then # Now execute the test @@ -29887,8 +29876,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a valid Boot JDK. $HELP_MSG" >&5 $as_echo "$as_me: Could not find a valid Boot JDK. $HELP_MSG" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Cannot continue" "$LINENO" 5 fi @@ -29910,8 +29899,8 @@ if test ! -x $JAVA; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -29938,8 +29927,8 @@ if test ! -x $JAVA; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30048,8 +30037,8 @@ if test ! -x $JAVAC; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30076,8 +30065,8 @@ if test ! -x $JAVAC; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30186,8 +30175,8 @@ if test ! -x $JAVAH; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30214,8 +30203,8 @@ if test ! -x $JAVAH; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30324,8 +30313,8 @@ if test ! -x $JAR; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30352,8 +30341,8 @@ if test ! -x $JAR; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30462,8 +30451,8 @@ if test ! -x $JARSIGNER; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -30490,8 +30479,8 @@ if test ! -x $JARSIGNER; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 -$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;} as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 @@ -31198,6 +31187,12 @@ if test -d "$IMPORT_MODULES_TOPDIR/modules_src"; then IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src" fi + # Workaround for using different imported module-info.java in Jake due to a + # change in format. Remove once new format is standard in JDK 9 and javafx + # delivers just that. + if test -d "$IMPORT_MODULES_TOPDIR/modules_src_jake"; then + IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src_jake $IMPORT_MODULES_SRC" + fi if test -d "$IMPORT_MODULES_TOPDIR/make"; then IMPORT_MODULES_MAKE="$IMPORT_MODULES_TOPDIR/make" fi @@ -33578,9 +33573,11 @@ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then # cc -V output typically looks like # cc: Sun C 5.12 Linux_i386 2011/11/16 + # or + # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31 COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1` # Check that this is likely to be the Solaris Studio cc. - $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null if test $? -ne 0; then ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1` { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5 @@ -34875,9 +34872,11 @@ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then # cc -V output typically looks like # cc: Sun C 5.12 Linux_i386 2011/11/16 + # or + # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31 COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1` # Check that this is likely to be the Solaris Studio cc. - $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null if test $? -ne 0; then ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1` { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5 @@ -35261,9 +35260,9 @@ fi # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal. - if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5 -$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} + if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){4} ]] ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5 +$as_echo "$as_me: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} fi if [[ "[$]CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then @@ -35271,7 +35270,7 @@ $as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} fi - COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$CC_VERSION_NUMBER"` + COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$CC_VERSION_NUMBER"` if test "x$TOOLCHAIN_MINIMUM_VERSION" != x; then @@ -35329,8 +35328,8 @@ # Need to assign to a variable since m4 is blocked from modifying parts in []. REFERENCE_VERSION=$TOOLCHAIN_MINIMUM_VERSION - if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then - as_fn_error $? "Internal error: Cannot compare to $TOOLCHAIN_MINIMUM_VERSION, only three parts (X.Y.Z) is supported" "$LINENO" 5 + if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then + as_fn_error $? "Internal error: Cannot compare to $TOOLCHAIN_MINIMUM_VERSION, only four parts (W.X.Y.Z) is supported" "$LINENO" 5 fi if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then @@ -35338,7 +35337,7 @@ fi # Version comparison method inspired by http://stackoverflow.com/a/24067243 - COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"` + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"` if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then : @@ -46956,9 +46955,11 @@ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then # cc -V output typically looks like # cc: Sun C 5.12 Linux_i386 2011/11/16 + # or + # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31 COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1` # Check that this is likely to be the Solaris Studio cc. - $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null if test $? -ne 0; then ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1` { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5 @@ -47076,9 +47077,11 @@ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then # cc -V output typically looks like # cc: Sun C 5.12 Linux_i386 2011/11/16 + # or + # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31 COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1` # Check that this is likely to be the Solaris Studio cc. - $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null if test $? -ne 0; then ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1` { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5 @@ -47198,9 +47201,9 @@ fi # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal. - if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&5 -$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} + if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ (.*\.){4} ]] ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&5 +$as_echo "$as_me: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} fi if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then @@ -47208,7 +47211,7 @@ $as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} fi - OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$BUILD_CC_VERSION_NUMBER"` + OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$BUILD_CC_VERSION_NUMBER"` else # If we are not cross compiling, use the normal target compilers for @@ -47234,9 +47237,9 @@ fi # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal. - if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5 -$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} + if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){4} ]] ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5 +$as_echo "$as_me: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} fi if [[ "[$]CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then @@ -47244,80 +47247,18 @@ $as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;} fi - OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$CC_VERSION_NUMBER"` - - fi - - - - - - - - - - - - - if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then - # For hotspot, we need these in Windows mixed path, - # so rewrite them all. Need added .exe suffix. - HOTSPOT_CXX="$CXX.exe" - HOTSPOT_LD="$LD.exe" - HOTSPOT_MT="$MT.exe" - HOTSPOT_RC="$RC.exe" - - unix_path="$HOTSPOT_CXX" - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - windows_path=`$CYGPATH -m "$unix_path"` - HOTSPOT_CXX="$windows_path" - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - windows_path=`cmd //c echo $unix_path` - HOTSPOT_CXX="$windows_path" - fi - - - unix_path="$HOTSPOT_LD" - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - windows_path=`$CYGPATH -m "$unix_path"` - HOTSPOT_LD="$windows_path" - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - windows_path=`cmd //c echo $unix_path` - HOTSPOT_LD="$windows_path" - fi - - - unix_path="$HOTSPOT_MT" - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - windows_path=`$CYGPATH -m "$unix_path"` - HOTSPOT_MT="$windows_path" - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - windows_path=`cmd //c echo $unix_path` - HOTSPOT_MT="$windows_path" - fi - - - unix_path="$HOTSPOT_RC" - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - windows_path=`$CYGPATH -m "$unix_path"` - HOTSPOT_RC="$windows_path" - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - windows_path=`cmd //c echo $unix_path` - HOTSPOT_RC="$windows_path" - fi - - - - else - HOTSPOT_CXX="$CXX" - HOTSPOT_LD="$LD" - fi - - - - if test "x$TOOLCHAIN_TYPE" = xclang; then - USE_CLANG=true - fi + OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$CC_VERSION_NUMBER"` + + fi + + + + + + + + + @@ -49914,8 +49855,8 @@ # Need to assign to a variable since m4 is blocked from modifying parts in []. REFERENCE_VERSION=6 - if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then - as_fn_error $? "Internal error: Cannot compare to 6, only three parts (X.Y.Z) is supported" "$LINENO" 5 + if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then + as_fn_error $? "Internal error: Cannot compare to 6, only four parts (W.X.Y.Z) is supported" "$LINENO" 5 fi if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then @@ -49923,7 +49864,7 @@ fi # Version comparison method inspired by http://stackoverflow.com/a/24067243 - COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"` + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"` if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then : @@ -50214,8 +50155,8 @@ # Need to assign to a variable since m4 is blocked from modifying parts in []. REFERENCE_VERSION=4.8 - if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then - as_fn_error $? "Internal error: Cannot compare to 4.8, only three parts (X.Y.Z) is supported" "$LINENO" 5 + if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then + as_fn_error $? "Internal error: Cannot compare to 4.8, only four parts (W.X.Y.Z) is supported" "$LINENO" 5 fi if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then @@ -50223,7 +50164,7 @@ fi # Version comparison method inspired by http://stackoverflow.com/a/24067243 - COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"` + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"` if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then : @@ -50737,8 +50678,8 @@ # Need to assign to a variable since m4 is blocked from modifying parts in []. REFERENCE_VERSION=6 - if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then - as_fn_error $? "Internal error: Cannot compare to 6, only three parts (X.Y.Z) is supported" "$LINENO" 5 + if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then + as_fn_error $? "Internal error: Cannot compare to 6, only four parts (W.X.Y.Z) is supported" "$LINENO" 5 fi if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then @@ -50746,7 +50687,7 @@ fi # Version comparison method inspired by http://stackoverflow.com/a/24067243 - COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"` + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"` if test $OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then : @@ -51037,8 +50978,8 @@ # Need to assign to a variable since m4 is blocked from modifying parts in []. REFERENCE_VERSION=4.8 - if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then - as_fn_error $? "Internal error: Cannot compare to 4.8, only three parts (X.Y.Z) is supported" "$LINENO" 5 + if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then + as_fn_error $? "Internal error: Cannot compare to 4.8, only four parts (W.X.Y.Z) is supported" "$LINENO" 5 fi if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then @@ -51046,7 +50987,7 @@ fi # Version comparison method inspired by http://stackoverflow.com/a/24067243 - COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"` + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"` if test $OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then : @@ -51917,8 +51858,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if native warnings are errors" >&5 $as_echo_n "checking if native warnings are errors... " >&6; } if test "x$enable_warnings_as_errors" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitely set)" >&5 -$as_echo "yes (explicitely set)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitly set)" >&5 +$as_echo "yes (explicitly set)" >&6; } WARNINGS_AS_ERRORS=true elif test "x$enable_warnings_as_errors" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 @@ -52583,28 +52524,14 @@ COMPILE_WITH_DEBUG_SYMBOLS=true COPY_DEBUG_SYMBOLS=true ZIP_EXTERNAL_DEBUG_SYMBOLS=true - - # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true - DEBUG_BINARIES=false - STRIP_POLICY=min_strip - elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then COMPILE_WITH_DEBUG_SYMBOLS=false COPY_DEBUG_SYMBOLS=false ZIP_EXTERNAL_DEBUG_SYMBOLS=false - - DEBUG_BINARIES=false - STRIP_POLICY=no_strip elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then COMPILE_WITH_DEBUG_SYMBOLS=true COPY_DEBUG_SYMBOLS=false ZIP_EXTERNAL_DEBUG_SYMBOLS=false - - # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false - DEBUG_BINARIES=true - STRIP_POLICY=no_strip - STRIP="" - elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then @@ -52618,10 +52545,6 @@ COMPILE_WITH_DEBUG_SYMBOLS=true COPY_DEBUG_SYMBOLS=true ZIP_EXTERNAL_DEBUG_SYMBOLS=false - - # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true - DEBUG_BINARIES=false - STRIP_POLICY=min_strip else as_fn_error $? "Allowed native debug symbols are: none, internal, external, zipped" "$LINENO" 5 fi @@ -52670,10 +52593,6 @@ - # Legacy values - - - # Check whether --enable-native-coverage was given. if test "${enable_native_coverage+set}" = set; then : @@ -53195,7 +53114,7 @@ if test "x$with_msvcr_dll" != x; then - # If given explicitely by user, do not probe. If not present, fail directly. + # If given explicitly by user, do not probe. If not present, fail directly. DLL_NAME="$MSVCR_NAME" POSSIBLE_MSVC_DLL="$with_msvcr_dll" @@ -54544,7 +54463,7 @@ if test "x$MSVCP_NAME" != "x"; then if test "x$with_msvcp_dll" != x; then - # If given explicitely by user, do not probe. If not present, fail directly. + # If given explicitly by user, do not probe. If not present, fail directly. DLL_NAME="$MSVCP_NAME" POSSIBLE_MSVC_DLL="$with_msvcp_dll" @@ -55903,7 +55822,7 @@ if test "x${with_x}" != x && test "x${with_x}" != xyes; then # The user has specified a X11 base directory. Use it for includes and - # libraries, unless explicitely overridden. + # libraries, unless explicitly overridden. if test "x$x_includes" = xNONE; then x_includes="${with_x}/include" fi @@ -65525,6 +65444,13 @@ if test "x$CCACHE" != x; then if test "x$CCACHE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then + HAS_BAD_CCACHE=`$ECHO $CCACHE_VERSION | \ + $GREP -e '^1\.' -e '^2\.' -e '^3\.0\.' -e '^3\.1\.'` + if test "x$HAS_BAD_CCACHE" != "x"; then + as_fn_error $? "On macosx, ccache 3.2 or later is required, found $CCACHE_VERSION" "$LINENO" 5 + fi + fi if test "x$USE_PRECOMPILED_HEADER" = "x1"; then HAS_BAD_CCACHE=`$ECHO $CCACHE_VERSION | \ $GREP -e '^1.*' -e '^2.*' -e '^3\.0.*' -e '^3\.1\.[0123]$'`
--- a/common/autoconf/jdk-options.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/jdk-options.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -163,9 +163,9 @@ AC_SUBST(CACERTS_FILE) # Enable or disable unlimited crypto - AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--enable-unlimited-crypto], - [Enable unlimited crypto policy @<:@disabled@:>@])],, - [enable_unlimited_crypto=no]) + AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--disable-unlimited-crypto], + [Disable unlimited crypto policy @<:@enabled@:>@])],, + [enable_unlimited_crypto=yes]) if test "x$enable_unlimited_crypto" = "xyes"; then UNLIMITED_CRYPTO=true else @@ -265,28 +265,14 @@ COMPILE_WITH_DEBUG_SYMBOLS=true COPY_DEBUG_SYMBOLS=true ZIP_EXTERNAL_DEBUG_SYMBOLS=true - - # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true - DEBUG_BINARIES=false - STRIP_POLICY=min_strip - elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then COMPILE_WITH_DEBUG_SYMBOLS=false COPY_DEBUG_SYMBOLS=false ZIP_EXTERNAL_DEBUG_SYMBOLS=false - - DEBUG_BINARIES=false - STRIP_POLICY=no_strip elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then COMPILE_WITH_DEBUG_SYMBOLS=true COPY_DEBUG_SYMBOLS=false ZIP_EXTERNAL_DEBUG_SYMBOLS=false - - # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false - DEBUG_BINARIES=true - STRIP_POLICY=no_strip - STRIP="" - elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then @@ -300,10 +286,6 @@ COMPILE_WITH_DEBUG_SYMBOLS=true COPY_DEBUG_SYMBOLS=true ZIP_EXTERNAL_DEBUG_SYMBOLS=false - - # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true - DEBUG_BINARIES=false - STRIP_POLICY=min_strip else AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped]) fi @@ -321,10 +303,6 @@ AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS) AC_SUBST(COPY_DEBUG_SYMBOLS) AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS) - - # Legacy values - AC_SUBST(DEBUG_BINARIES) - AC_SUBST(STRIP_POLICY) ]) ################################################################################
--- a/common/autoconf/jdk-version.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/jdk-version.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -110,7 +110,7 @@ AC_MSG_ERROR([Version string contains + but both 'BUILD' and 'OPT' are missing]) fi # Stop the version part process from setting default values. - # We still allow them to explicitely override though. + # We still allow them to explicitly override though. NO_DEFAULT_VERSION_PARTS=true else AC_MSG_ERROR([--with-version-string fails to parse as a valid version string: $with_version_string])
--- a/common/autoconf/lib-x11.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/lib-x11.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -42,7 +42,7 @@ if test "x${with_x}" != x && test "x${with_x}" != xyes; then # The user has specified a X11 base directory. Use it for includes and - # libraries, unless explicitely overridden. + # libraries, unless explicitly overridden. if test "x$x_includes" = xNONE; then x_includes="${with_x}/include" fi
--- a/common/autoconf/platform.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/platform.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -162,7 +162,7 @@ # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. PLATFORM_EXTRACT_VARS_FROM_OS($build_os) PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu) - # ..and setup our own variables. (Do this explicitely to facilitate searching) + # ..and setup our own variables. (Do this explicitly to facilitate searching) OPENJDK_BUILD_OS="$VAR_OS" if test "x$VAR_OS_TYPE" != x; then OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE" @@ -192,7 +192,7 @@ # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. PLATFORM_EXTRACT_VARS_FROM_OS($host_os) PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu) - # ... and setup our own variables. (Do this explicitely to facilitate searching) + # ... and setup our own variables. (Do this explicitly to facilitate searching) OPENJDK_TARGET_OS="$VAR_OS" if test "x$VAR_OS_TYPE" != x; then OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE"
--- a/common/autoconf/source-dirs.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/source-dirs.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -126,6 +126,12 @@ if test -d "$IMPORT_MODULES_TOPDIR/modules_src"; then IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src" fi + # Workaround for using different imported module-info.java in Jake due to a + # change in format. Remove once new format is standard in JDK 9 and javafx + # delivers just that. + if test -d "$IMPORT_MODULES_TOPDIR/modules_src_jake"; then + IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src_jake $IMPORT_MODULES_SRC" + fi if test -d "$IMPORT_MODULES_TOPDIR/make"; then IMPORT_MODULES_MAKE="$IMPORT_MODULES_TOPDIR/make" fi
--- a/common/autoconf/toolchain.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/toolchain.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -53,7 +53,7 @@ # Minimum supported versions, empty means unspecified TOOLCHAIN_MINIMUM_VERSION_clang="3.2" TOOLCHAIN_MINIMUM_VERSION_gcc="4.3" -TOOLCHAIN_MINIMUM_VERSION_microsoft="" +TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010 TOOLCHAIN_MINIMUM_VERSION_solstudio="5.13" TOOLCHAIN_MINIMUM_VERSION_xlc="" @@ -69,15 +69,15 @@ fi # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal. - if [ [[ "[$]$1CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then - AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.]) + if [ [[ "[$]$1CC_VERSION_NUMBER" =~ (.*\.){4} ]] ]; then + AC_MSG_WARN([C compiler version number has more than four parts (W.X.Y.Z): [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.]) fi if [ [[ "[$]$1CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then AC_MSG_WARN([C compiler version number has a part larger than 99999: [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.]) fi - $2COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "[$]$1CC_VERSION_NUMBER"` + $2COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", [$]1, [$]2, [$]3, [$]4) }' <<< "[$]$1CC_VERSION_NUMBER"` ]) # Check if the configured compiler (C and C++) is of a specific version or @@ -94,8 +94,8 @@ # Need to assign to a variable since m4 is blocked from modifying parts in []. REFERENCE_VERSION=ARG_VERSION - if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then - AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only three parts (X.Y.Z) is supported]) + if [ [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ]; then + AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only four parts (W.X.Y.Z) is supported]) fi if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then @@ -103,7 +103,7 @@ fi # Version comparison method inspired by http://stackoverflow.com/a/24067243 - COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"` + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", [$]1, [$]2, [$]3, [$]4) }' <<< "$REFERENCE_VERSION"` if test [$]ARG_PREFIX[COMPARABLE_ACTUAL_VERSION] -ge $COMPARABLE_REFERENCE_VERSION ; then : @@ -333,9 +333,11 @@ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then # cc -V output typically looks like # cc: Sun C 5.12 Linux_i386 2011/11/16 + # or + # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31 COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1` # Check that this is likely to be the Solaris Studio cc. - $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null if test $? -ne 0; then ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1` AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler.]) @@ -827,7 +829,7 @@ BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" BUILD_AR="$AR" - + TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([], [OPENJDK_BUILD_]) fi @@ -842,36 +844,6 @@ AC_SUBST(BUILD_AR) ]) -# Setup legacy variables that are still needed as alternative ways to refer to -# parts of the toolchain. -AC_DEFUN_ONCE([TOOLCHAIN_SETUP_LEGACY], -[ - if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then - # For hotspot, we need these in Windows mixed path, - # so rewrite them all. Need added .exe suffix. - HOTSPOT_CXX="$CXX.exe" - HOTSPOT_LD="$LD.exe" - HOTSPOT_MT="$MT.exe" - HOTSPOT_RC="$RC.exe" - BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_CXX) - BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_LD) - BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_MT) - BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_RC) - AC_SUBST(HOTSPOT_MT) - AC_SUBST(HOTSPOT_RC) - else - HOTSPOT_CXX="$CXX" - HOTSPOT_LD="$LD" - fi - AC_SUBST(HOTSPOT_CXX) - AC_SUBST(HOTSPOT_LD) - - if test "x$TOOLCHAIN_TYPE" = xclang; then - USE_CLANG=true - fi - AC_SUBST(USE_CLANG) -]) - # Do some additional checks on the detected tools. AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS], [
--- a/common/autoconf/toolchain_windows.m4 Thu Dec 01 21:40:21 2016 +0000 +++ b/common/autoconf/toolchain_windows.m4 Wed Jul 05 22:32:17 2017 +0200 @@ -566,7 +566,7 @@ [path to microsoft C runtime dll (msvcr*.dll) (Windows only) @<:@probed@:>@])]) if test "x$with_msvcr_dll" != x; then - # If given explicitely by user, do not probe. If not present, fail directly. + # If given explicitly by user, do not probe. If not present, fail directly. TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$with_msvcr_dll], [--with-msvcr-dll]) if test "x$MSVC_DLL" = x; then AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll]) @@ -589,7 +589,7 @@ if test "x$MSVCP_NAME" != "x"; then if test "x$with_msvcp_dll" != x; then - # If given explicitely by user, do not probe. If not present, fail directly. + # If given explicitly by user, do not probe. If not present, fail directly. TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$with_msvcp_dll], [--with-msvcp-dll]) if test "x$MSVC_DLL" = x; then AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll])
--- a/common/bin/compare.sh Thu Dec 01 21:40:21 2016 +0000 +++ b/common/bin/compare.sh Wed Jul 05 22:32:17 2017 +0200 @@ -1295,8 +1295,8 @@ OTHER_JDK="$OTHER/images/jdk" OTHER_JRE="$OTHER/images/jre" echo "Selecting jdk images for compare" - elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk)" ] \ - && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk)" ] + elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk 2> /dev/null)" ] \ + && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk 2> /dev/null)" ] then echo "Selecting licensee images for compare" # Simply override the THIS and OTHER dir with the build dir from
--- a/common/conf/jib-profiles.js Thu Dec 01 21:40:21 2016 +0000 +++ b/common/conf/jib-profiles.js Wed Jul 05 22:32:17 2017 +0200 @@ -427,7 +427,7 @@ jtreg: { server: "javare", revision: "4.2", - build_number: "b03", + build_number: "b04", checksum_file: "MD5_VALUES", file: "jtreg_bin-4.2.zip", environment_name: "JT_HOME",
--- a/corba/.hgignore Thu Dec 01 21:40:21 2016 +0000 +++ b/corba/.hgignore Wed Jul 05 22:32:17 2017 +0200 @@ -2,5 +2,4 @@ ^dist/ ^webrev /nbproject/private/ -^.hgtip .DS_Store
--- a/corba/.hgtags Thu Dec 01 21:40:21 2016 +0000 +++ b/corba/.hgtags Wed Jul 05 22:32:17 2017 +0200 @@ -389,3 +389,4 @@ d4f1dae174098e799c48948e866054c52e11a186 jdk-9+144 a44b156ae7f06bf41b9bece30df7775e482395dd jdk-9+145 ecd74b41ab65bf228837b5bdf99690638d55425c jdk-9+146 +dc49e0922a8e4387cbf8670bbe1dc51c9874b74b jdk-9+147
--- a/corba/src/java.corba/share/classes/module-info.java Thu Dec 01 21:40:21 2016 +0000 +++ b/corba/src/java.corba/share/classes/module-info.java Wed Jul 05 22:32:17 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,10 @@ /** * Defines the Java binding of the OMG CORBA APIs, and the RMI-IIOP API. */ +@Deprecated(since="9", forRemoval=true) module java.corba { - requires public java.desktop; - requires public java.rmi; + requires transitive java.desktop; + requires transitive java.rmi; requires java.logging; requires java.naming; requires java.transaction; @@ -65,14 +66,13 @@ exports org.omg.PortableServer.portable; exports org.omg.SendingContext; exports org.omg.stub.java.rmi; - exports com.sun.corba.se.impl.util to - jdk.rmic; - exports com.sun.jndi.cosnaming to - java.naming; - exports com.sun.jndi.url.corbaname to - java.naming; - exports com.sun.jndi.url.iiop to - java.naming; - exports com.sun.jndi.url.iiopname to - java.naming; + + // rmic --iiop + exports com.sun.corba.se.impl.util to jdk.rmic; + + // JNDI CosNaming provider + opens com.sun.jndi.cosnaming to java.naming; // jndiprovider.properties + exports com.sun.jndi.url.corbaname to java.naming; + exports com.sun.jndi.url.iiop to java.naming; + exports com.sun.jndi.url.iiopname to java.naming; }
--- a/hotspot/.hgignore Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/.hgignore Wed Jul 05 22:32:17 2017 +0200 @@ -8,7 +8,6 @@ ^src/share/tools/IdealGraphVisualizer/dist/ ^src/share/tools/IdealGraphVisualizer/nbplatform/ .igv.log -^.hgtip .DS_Store ^\.mx.jvmci/env ^\.mx.jvmci/.*\.pyc
--- a/hotspot/.hgtags Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/.hgtags Wed Jul 05 22:32:17 2017 +0200 @@ -549,3 +549,4 @@ 6187b582d02aee38341dc8ce4011906e9b364e9f jdk-9+144 61e7ea56312351657e69198c503a6f7bf865af83 jdk-9+145 a82cb5350cad96a0b4de496afebe3ded89f27efa jdk-9+146 +132a72c782071cc11ab25cc7c9ee167c3632fea4 jdk-9+147
--- a/hotspot/make/symbols/symbols-unix Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/make/symbols/symbols-unix Wed Jul 05 22:32:17 2017 +0200 @@ -190,8 +190,6 @@ JVM_AddModuleExportsToAllUnnamed JVM_AddModulePackage JVM_AddReadsModule -JVM_CanReadModule JVM_DefineModule -JVM_IsExportedToModule JVM_SetBootLoaderUnnamedModule JVM_GetModuleByPackageName
--- a/hotspot/make/test/JtregNative.gmk Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/make/test/JtregNative.gmk Wed Jul 05 22:32:17 2017 +0200 @@ -55,6 +55,9 @@ $(HOTSPOT_TOPDIR)/test/compiler/calls \ $(HOTSPOT_TOPDIR)/test/compiler/native \ $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/GetNamedModule \ + $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/AddModuleReads \ + $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/AddModuleExportsAndOpens \ + $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/AddModuleUsesAndProvides \ $(HOTSPOT_TOPDIR)/test/testlibrary/jvmti \ $(HOTSPOT_TOPDIR)/test/compiler/jvmci/jdk.vm.ci.code.test \ $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/GetModulesInfo \ @@ -81,6 +84,9 @@ BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_liboverflow := -lc BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libSimpleClassFileLoadHook := -lc BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libGetNamedModuleTest := -lc + BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleReadsTest := -lc + BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleExportsAndOpensTest := -lc + BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleUsesAndProvidesTest := -lc BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAClassFileLoadHook := -lc BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAClassLoadPrepare := -lc BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAThreadStart := -lc
--- a/hotspot/src/jdk.vm.ci/share/classes/module-info.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/jdk.vm.ci/share/classes/module-info.java Wed Jul 05 22:32:17 2017 +0200 @@ -30,9 +30,7 @@ uses jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory; provides jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory with - jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory; - provides jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory with - jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory; - provides jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory with + jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory, + jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory, jdk.vm.ci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory; }
--- a/hotspot/src/share/vm/classfile/moduleEntry.hpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/classfile/moduleEntry.hpp Wed Jul 05 22:32:17 2017 +0200 @@ -36,6 +36,8 @@ #include "utilities/ostream.hpp" #define UNNAMED_MODULE "Unnamed Module" +#define JAVAPKG "java/" +#define JAVAPKG_LEN 5 class ModuleClosure;
--- a/hotspot/src/share/vm/classfile/modules.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/classfile/modules.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -34,6 +34,7 @@ #include "classfile/packageEntry.hpp" #include "classfile/stringTable.hpp" #include "classfile/symbolTable.hpp" +#include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "logging/log.hpp" #include "memory/resourceArea.hpp" @@ -44,6 +45,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" #include "runtime/reflection.hpp" +#include "utilities/stringUtils.hpp" #include "utilities/utf8.hpp" static bool verify_module_name(char *module_name) { @@ -290,6 +292,14 @@ const char* module_version = get_module_version(version); + oop loader = java_lang_reflect_Module::loader(module_handle()); + // Make sure loader is not the jdk.internal.reflect.DelegatingClassLoader. + if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) { + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), + "Class loader is an invalid delegating class loader"); + } + Handle h_loader = Handle(THREAD, loader); + objArrayOop packages_oop = objArrayOop(JNIHandles::resolve(packages)); objArrayHandle packages_h(THREAD, packages_oop); int num_packages = (packages_h == NULL ? 0 : packages_h->length()); @@ -310,6 +320,21 @@ err_msg("Invalid package name: %s for module: %s", package_name, module_name)); } + + // Only modules defined to either the boot or platform class loader, can define a "java/" package. + if (!h_loader.is_null() && + !SystemDictionary::is_platform_class_loader(h_loader) && + strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0) { + const char* class_loader_name = SystemDictionary::loader_name(h_loader()); + StringUtils::replace_no_expand(package_name, "/", "."); + const char* msg_text1 = "Class loader (instance of): "; + const char* msg_text2 = " tried to define prohibited package name: "; + size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(package_name) + 1; + char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len); + jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, package_name); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message); + } + Symbol* pkg_symbol = SymbolTable::new_symbol(package_name, CHECK); // append_if_missing() returns FALSE if entry already exists. if (!pkg_list->append_if_missing(pkg_symbol)) { @@ -319,20 +344,6 @@ } } - oop loader = java_lang_reflect_Module::loader(module_handle()); - // Make sure loader is not the sun.reflect.DelegatingClassLoader. - if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Class loader is an invalid delegating class loader"); - } - Handle h_loader = Handle(THREAD, loader); - - // Check that loader is a subclass of java.lang.ClassLoader. - if (loader != NULL && !java_lang_ClassLoader::is_subclass(h_loader->klass())) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Class loader is not a subclass of java.lang.ClassLoader"); - } - ModuleEntryTable* module_table = get_module_entry_table(h_loader, CHECK); assert(module_table != NULL, "module entry table shouldn't be null"); @@ -595,122 +606,6 @@ } } -jboolean Modules::can_read_module(jobject asking_module, jobject target_module, TRAPS) { - if (asking_module == NULL) { - THROW_MSG_(vmSymbols::java_lang_NullPointerException(), - "asking_module is null", JNI_FALSE); - } - - ModuleEntry* asking_module_entry = get_module_entry(asking_module, CHECK_false); - if (asking_module_entry == NULL) { - THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), - "asking_module is invalid", JNI_FALSE); - } - - // Calling can_read_all_unnamed() with NULL tests if a module is loose. - if (target_module == NULL) { - return asking_module_entry->can_read_all_unnamed(); - } - - ModuleEntry* target_module_entry = get_module_entry(target_module, CHECK_false); - if (target_module_entry == NULL) { - THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), - "target_module is invalid", JNI_FALSE); - } - - ResourceMark rm(THREAD); - log_debug(modules)("can_read_module(): module %s trying to read module %s, allowed = %s", - asking_module_entry->is_named() ? - asking_module_entry->name()->as_C_string() : UNNAMED_MODULE, - target_module_entry->is_named() ? - target_module_entry->name()->as_C_string() : UNNAMED_MODULE, - BOOL_TO_STR(asking_module_entry == target_module_entry || - (asking_module_entry->can_read_all_unnamed() && - !target_module_entry->is_named()) || - asking_module_entry->can_read(target_module_entry))); - - // Return true if: - // 1. the modules are the same, or - // 2. the asking_module is unnamed (because unnamed modules read everybody), or - // 3. the asking_module is loose and the target module is unnamed, or - // 4. if can_read() returns true. - if (asking_module_entry == target_module_entry || - (asking_module_entry->can_read_all_unnamed() && !target_module_entry->is_named())) { - return true; - } - return asking_module_entry->can_read(target_module_entry); -} - -jboolean Modules::is_exported_to_module(jobject from_module, jstring package, - jobject to_module, TRAPS) { - if (package == NULL) { - THROW_MSG_(vmSymbols::java_lang_NullPointerException(), - "package is null", JNI_FALSE); - } - if (from_module == NULL) { - THROW_MSG_(vmSymbols::java_lang_NullPointerException(), - "from_module is null", JNI_FALSE); - } - ModuleEntry* from_module_entry = get_module_entry(from_module, CHECK_false); - if (from_module_entry == NULL) { - THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), - "from_module is invalid", JNI_FALSE); - } - ModuleEntry* to_module_entry; - if (to_module == NULL) { - THROW_MSG_(vmSymbols::java_lang_NullPointerException(), - "to_module is null", JNI_FALSE); - } - to_module_entry = get_module_entry(to_module, CHECK_false); - if (to_module_entry == NULL) { - THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), - "to_module is invalid", JNI_FALSE); - } - - PackageEntry *package_entry = get_package_entry(from_module_entry, package, - CHECK_false); - ResourceMark rm(THREAD); - if (package_entry == NULL) { - THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), - err_msg("Package not found in from_module: %s", - from_module_entry->is_named() ? - from_module_entry->name()->as_C_string() : UNNAMED_MODULE), - JNI_FALSE); - } - if (package_entry->module() != from_module_entry) { - THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), - err_msg("Package: %s found in module %s, not in from_module: %s", - package_entry->name()->as_C_string(), - package_entry->module()->is_named() ? - package_entry->module()->name()->as_C_string() : UNNAMED_MODULE, - from_module_entry->is_named() ? - from_module_entry->name()->as_C_string() : UNNAMED_MODULE), - JNI_FALSE); - } - - log_debug(modules)("is_exported_to_module: package %s from module %s checking" - " if exported to module %s, exported? = %s", - package_entry->name()->as_C_string(), - from_module_entry->is_named() ? - from_module_entry->name()->as_C_string() : UNNAMED_MODULE, - to_module_entry->is_named() ? - to_module_entry->name()->as_C_string() : UNNAMED_MODULE, - BOOL_TO_STR(!from_module_entry->is_named() || - package_entry->is_unqual_exported() || - from_module_entry == to_module_entry || - package_entry->is_qexported_to(to_module_entry))); - - // Return true if: - // 1. from_module is unnamed because unnamed modules export all their packages (by default), or - // 2. if the package is unqualifiedly exported, or - // 3. if the modules are the same, or - // 4. if the package is exported to to_module - return (!from_module_entry->is_named() || - package_entry->is_unqual_exported() || - from_module_entry == to_module_entry || - package_entry->is_qexported_to(to_module_entry)); -} - // This method is called by JFR and JNI. jobject Modules::get_module(jclass clazz, TRAPS) { assert(ModuleEntryTable::javabase_defined(), "Attempt to call get_module before java.base is defined"); @@ -860,11 +755,27 @@ err_msg("Invalid package name: %s", package_name)); } + ClassLoaderData *loader_data = module_entry->loader_data(); + + // Only modules defined to either the boot or platform class loader, can define a "java/" package. + if (!loader_data->is_the_null_class_loader_data() && + !loader_data->is_platform_class_loader_data() && + strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0) { + const char* class_loader_name = SystemDictionary::loader_name(loader_data); + StringUtils::replace_no_expand(package_name, "/", "."); + const char* msg_text1 = "Class loader (instance of): "; + const char* msg_text2 = " tried to define prohibited package name: "; + size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(package_name) + 1; + char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len); + jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, package_name); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message); + } + log_debug(modules)("add_module_package(): Adding package %s to module %s", package_name, module_entry->name()->as_C_string()); TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK); - PackageEntryTable* package_table = module_entry->loader_data()->packages(); + PackageEntryTable* package_table = loader_data->packages(); assert(package_table != NULL, "Missing package_table"); bool pkg_exists = false;
--- a/hotspot/src/share/vm/classfile/modules.hpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/classfile/modules.hpp Wed Jul 05 22:32:17 2017 +0200 @@ -93,24 +93,6 @@ // module does not exist. static void add_reads_module(jobject from_module, jobject to_module, TRAPS); - // can_read_module returns TRUE if module asking_module can read module target_module, - // or if they are the same module, or if the asking_module is loose and target_module - // is null. - // - // Throws IllegalArgumentException if: - // * either asking_module or target_module is not a java.lang.reflect.Module - static jboolean can_read_module(jobject asking_module, jobject target_module, TRAPS); - - // If package is valid then this returns TRUE if module from_module exports - // package to module to_module, if from_module and to_module are the same - // module, or if package is exported without qualification. - // - // IllegalArgumentException is throw if: - // * Either to_module or from_module does not exist - // * package is syntactically incorrect - // * package is not in from_module - static jboolean is_exported_to_module(jobject from_module, jstring package, jobject to_module, TRAPS); - // Return the java.lang.reflect.Module object for this class object. static jobject get_module(jclass clazz, TRAPS);
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Wed Jul 05 22:32:17 2017 +0200 @@ -451,8 +451,6 @@ template(loader_name, "loader") \ template(module_name, "module") \ template(getModule_name, "getModule") \ - template(addReads_name, "addReads") \ - template(addReads_signature, "(Ljava/lang/reflect/Module;Ljava/lang/reflect/Module;)V") \ template(input_stream_void_signature, "(Ljava/io/InputStream;)V") \ template(definePackage_name, "definePackage") \ template(definePackage_signature, "(Ljava/lang/String;Ljava/lang/reflect/Module;)Ljava/lang/Package;") \ @@ -645,6 +643,15 @@ /* JVMTI/java.lang.instrument support and VM Attach mechanism */ \ template(jdk_internal_module_Modules, "jdk/internal/module/Modules") \ template(jdk_internal_vm_VMSupport, "jdk/internal/vm/VMSupport") \ + template(addReads_name, "addReads") \ + template(addReads_signature, "(Ljava/lang/reflect/Module;Ljava/lang/reflect/Module;)V") \ + template(addExports_name, "addExports") \ + template(addOpens_name, "addOpens") \ + template(addExports_signature, "(Ljava/lang/reflect/Module;Ljava/lang/String;Ljava/lang/reflect/Module;)V") \ + template(addUses_name, "addUses") \ + template(addUses_signature, "(Ljava/lang/reflect/Module;Ljava/lang/Class;)V") \ + template(addProvides_name, "addProvides") \ + template(addProvides_signature, "(Ljava/lang/reflect/Module;Ljava/lang/Class;Ljava/lang/Class;)V") \ template(transformedByAgent_name, "transformedByAgent") \ template(transformedByAgent_signature, "(Ljava/lang/reflect/Module;)V") \ template(appendToClassPathForInstrumentation_name, "appendToClassPathForInstrumentation") \
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -26,6 +26,7 @@ #include "classfile/classFileParser.hpp" #include "classfile/classFileStream.hpp" #include "classfile/javaClasses.hpp" +#include "classfile/moduleEntry.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/systemDictionaryShared.hpp" #include "classfile/verifier.hpp" @@ -2383,18 +2384,17 @@ // Only boot and platform class loaders can define classes in "java/" packages. void InstanceKlass::check_prohibited_package(Symbol* class_name, - Handle class_loader, - TRAPS) { - const char* javapkg = "java/"; + Handle class_loader, + TRAPS) { ResourceMark rm(THREAD); if (!class_loader.is_null() && !SystemDictionary::is_platform_class_loader(class_loader) && class_name != NULL && - strncmp(class_name->as_C_string(), javapkg, strlen(javapkg)) == 0) { + strncmp(class_name->as_C_string(), JAVAPKG, JAVAPKG_LEN) == 0) { TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK); assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'"); char* name = pkg_name->as_C_string(); - const char* class_loader_name = InstanceKlass::cast(class_loader()->klass())->name()->as_C_string(); + const char* class_loader_name = SystemDictionary::loader_name(class_loader()); StringUtils::replace_no_expand(name, "/", "."); const char* msg_text1 = "Class loader (instance of): "; const char* msg_text2 = " tried to load prohibited package name: ";
--- a/hotspot/src/share/vm/prims/jni.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jni.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -3475,40 +3475,6 @@ JNI_END -JNI_ENTRY(void, jni_AddModuleReads(JNIEnv* env, jobject m1, jobject m2)) - JNIWrapper("AddModuleReads"); - if (m1 == NULL || m2 == NULL) { - THROW(vmSymbols::java_lang_NullPointerException()); - } - JavaValue result(T_VOID); - Handle m1_h(THREAD, JNIHandles::resolve(m1)); - if (!java_lang_reflect_Module::is_instance(m1_h())) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Bad m1 object"); - } - Handle m2_h(THREAD, JNIHandles::resolve(m2)); - if (!java_lang_reflect_Module::is_instance(m2_h())) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Bad m2 object"); - } - JavaCalls::call_static(&result, - KlassHandle(THREAD, SystemDictionary::module_Modules_klass()), - vmSymbols::addReads_name(), - vmSymbols::addReads_signature(), - m1_h, - m2_h, - THREAD); -JNI_END - - -JNI_ENTRY(jboolean, jni_CanReadModule(JNIEnv* env, jobject m1, jobject m2)) - JNIWrapper("CanReadModule"); - if (m1 == NULL || m2 == NULL) { - THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE); - } - jboolean res = Modules::can_read_module(m1, m2, CHECK_false); - return res; -JNI_END - - // Structure containing all jni functions struct JNINativeInterface_ jni_NativeInterface = { NULL, @@ -3792,9 +3758,7 @@ // Module features - jni_GetModule, - jni_AddModuleReads, - jni_CanReadModule + jni_GetModule };
--- a/hotspot/src/share/vm/prims/jni.h Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jni.h Wed Jul 05 22:32:17 2017 +0200 @@ -770,12 +770,6 @@ jobject (JNICALL *GetModule) (JNIEnv* env, jclass clazz); - - void (JNICALL *AddModuleReads) - (JNIEnv* env, jobject m1, jobject m2); - - jboolean (JNICALL *CanReadModule) - (JNIEnv* env, jobject m1, jobject m2); }; /* @@ -1874,14 +1868,6 @@ return functions->GetModule(this, clazz); } - void AddModuleReads(jobject fromModule, jobject sourceModule) { - functions->AddModuleReads(this, fromModule, sourceModule); - } - - jboolean CanReadModule(jobject askingModule, jobject sourceModule) { - return functions->CanReadModule(this, askingModule, sourceModule); - } - #endif /* __cplusplus */ };
--- a/hotspot/src/share/vm/prims/jniCheck.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jniCheck.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -2001,37 +2001,6 @@ return result; JNI_END -JNI_ENTRY_CHECKED(void, - checked_jni_AddModuleReads(JNIEnv *env, - jobject fromModule, - jobject sourceModule)) - functionEnter(thr); - IN_VM( - jniCheck::validate_object(thr, fromModule); - if (sourceModule != NULL) { - jniCheck::validate_object(thr, sourceModule); - } - ) - UNCHECKED()->AddModuleReads(env,fromModule,sourceModule); - functionExit(thr); -JNI_END - -JNI_ENTRY_CHECKED(jboolean, - checked_jni_CanReadModule(JNIEnv *env, - jobject askingModule, - jobject sourceModule)) - functionEnter(thr); - IN_VM( - jniCheck::validate_object(thr, askingModule); - if (sourceModule != NULL) { - jniCheck::validate_object(thr, sourceModule); - } - ) - jboolean result = UNCHECKED()->CanReadModule(env,askingModule,sourceModule); - functionExit(thr); - return result; -JNI_END - /* * Structure containing all checked jni functions */ @@ -2317,9 +2286,7 @@ // Module Features - checked_jni_GetModule, - checked_jni_AddModuleReads, - checked_jni_CanReadModule + checked_jni_GetModule };
--- a/hotspot/src/share/vm/prims/jvm.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jvm.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -1008,8 +1008,8 @@ // Module support ////////////////////////////////////////////////////////////////////////////// -JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jstring version, jstring location, - jobjectArray packages)) +JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version, + jstring location, jobjectArray packages)) JVMWrapper("JVM_DefineModule"); Modules::define_module(module, version, location, packages, CHECK); JVM_END @@ -1039,16 +1039,6 @@ Modules::add_reads_module(from_module, source_module, CHECK); JVM_END -JVM_ENTRY(jboolean, JVM_CanReadModule(JNIEnv *env, jobject asking_module, jobject source_module)) - JVMWrapper("JVM_CanReadModule"); - return Modules::can_read_module(asking_module, source_module, THREAD); -JVM_END - -JVM_ENTRY(jboolean, JVM_IsExportedToModule(JNIEnv *env, jobject from_module, jstring package, jobject to_module)) - JVMWrapper("JVM_IsExportedToModule"); - return Modules::is_exported_to_module(from_module, package, to_module, THREAD); -JVM_END - JVM_ENTRY (void, JVM_AddModulePackage(JNIEnv *env, jobject module, jstring package)) JVMWrapper("JVM_AddModulePackage"); Modules::add_module_package(module, package, CHECK);
--- a/hotspot/src/share/vm/prims/jvm.h Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jvm.h Wed Jul 05 22:32:17 2017 +0200 @@ -413,8 +413,8 @@ */ JNIEXPORT void JNICALL -JVM_DefineModule(JNIEnv *env, jobject module, jstring version, jstring location, - jobjectArray packages); +JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version, + jstring location, jobjectArray packages); JNIEXPORT void JNICALL JVM_SetBootLoaderUnnamedModule(JNIEnv *env, jobject module); @@ -431,12 +431,6 @@ JNIEXPORT void JNICALL JVM_AddReadsModule(JNIEnv *env, jobject from_module, jobject source_module); -JNIEXPORT jboolean JNICALL -JVM_CanReadModule(JNIEnv *env, jobject asking_module, jobject source_module); - -JNIEXPORT jboolean JNICALL -JVM_IsExportedToModule(JNIEnv *env, jobject from_module, jstring package, jobject to_module); - JNIEXPORT void JNICALL JVM_AddModulePackage(JNIEnv* env, jobject module, jstring package);
--- a/hotspot/src/share/vm/prims/jvmti.xml Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jvmti.xml Wed Jul 05 22:32:17 2017 +0200 @@ -863,14 +863,12 @@ </intro> <intro id="bcimodules" label="Bytecode Instrumentation of code in modules"> - Agents that instrument code in named modules may need to arrange for those - modules to read other modules. If code is instrumented to invoke a method - in a support class in another module, then the module of the instrumented - code should read the module of the supporting class. Furthermore, the - supporting class will only be accessible to the instrumented code if - it is <code>public</code> and in a package that is exported by its module. - Agents can use the JNI functions <code>CanReadModule</code> and - <code>AddModuleReads</code> to test and update a module to read another. + Agents can use the functions <functionlink id="AddModuleReads"/>, + <functionlink id="AddModuleExports"/>, <functionlink id="AddModuleOpens"/>, + <functionlink id="AddModuleUses"/> and <functionlink id="AddModuleProvides"/> + to update a module to expand the set of modules that it reads, the set of + packages that it exports or opens to other modules, or the services that it + uses and provides. <p/> As an aid to agents that deploy supporting classes on the search path of the bootstrap class loader, or the search path of the class loader that @@ -6561,6 +6559,227 @@ </error> </errors> </function> + + <function id="AddModuleReads" num="94" since="9"> + <synopsis>Add Module Reads</synopsis> + <description> + Update a module to read another module. This function is a no-op + when <paramlink id="module"></paramlink> is an unnamed module. + This function facilitates the instrumentation of code + in named modules where that instrumentation requires + expanding the set of modules that a module reads. + </description> + <origin>new</origin> + <capabilities> + </capabilities> + <parameters> + <param id="module"> + <ptrtype><jobject/></ptrtype> + <description> + The module to update. + </description> + </param> + <param id="to_module"> + <ptrtype><jobject/></ptrtype> + <description> + The additional module to read. + </description> + </param> + </parameters> + <errors> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="module"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="to_module"></paramlink> is not a module object. + </error> + </errors> + </function> + + <function id="AddModuleExports" num="95" since="9"> + <synopsis>Add Module Exports</synopsis> + <description> + Update a module to export a package to another module. + This function is a no-op when <paramlink id="module"></paramlink> + is an unnamed module or an open module. + This function facilitates the instrumentation of code + in named modules where that instrumentation requires + expanding the set of packages that a module exports. + </description> + <origin>new</origin> + <capabilities> + </capabilities> + <parameters> + <param id="module"> + <ptrtype><jobject/></ptrtype> + <description> + The module to update. + </description> + </param> + <param id="pkg_name"> + <inbuf><char/></inbuf> + <description> + The exported package name. + </description> + </param> + <param id="to_module"> + <ptrtype><jobject/></ptrtype> + <description> + The module the package is exported to. + If the <code>to_module</code> is not a subclass of + <code>java.lang.reflect.Module</code> this function returns + <errorlink id="JVMTI_ERROR_INVALID_MODULE"></errorlink>. + </description> + </param> + </parameters> + <errors> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="module"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="to_modules"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT"> + If the package <paramlink id="pkg_name"></paramlink> + does not belong to the module. + </error> + </errors> + </function> + + <function id="AddModuleOpens" num="96" since="9"> + <synopsis>Add Module Opens</synopsis> + <description> + Update a module to open a package to another module. + This function is a no-op when <paramlink id="module"></paramlink> + is an unnamed module or an open module. + This function facilitates the instrumentation of code + in modules where that instrumentation requires + expanding the set of packages that a module opens to + other modules. + </description> + <origin>new</origin> + <capabilities> + </capabilities> + <parameters> + <param id="module"> + <ptrtype><jobject/></ptrtype> + <description> + The module to update. + </description> + </param> + <param id="pkg_name"> + <inbuf><char/></inbuf> + <description> + The package name of the package to open. + </description> + </param> + <param id="to_module"> + <ptrtype><jobject/></ptrtype> + <description> + The module with the package to open. + If the <code>to_module</code> is not a subclass of + <code>java.lang.reflect.Module</code> this function returns + <errorlink id="JVMTI_ERROR_INVALID_MODULE"></errorlink>. + </description> + </param> + </parameters> + <errors> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="module"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="to_modules"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT"> + If the package <paramlink id="pkg_name"></paramlink> + does not belong to the module. + </error> + </errors> + </function> + + <function id="AddModuleUses" num="97" since="9"> + <synopsis>Add Module Uses</synopsis> + <description> + Updates a module to add a service to the set of services that + a module uses. This function is a no-op when the module + is an unnamed module. + This function facilitates the instrumentation of code + in named modules where that instrumentation requires + expanding the set of services that a module is using. + </description> + <origin>new</origin> + <capabilities> + </capabilities> + <parameters> + <param id="module"> + <ptrtype><jobject/></ptrtype> + <description> + The module to update. + </description> + </param> + <param id="service"> + <ptrtype><jclass/></ptrtype> + <description> + The service to use. + </description> + </param> + </parameters> + <errors> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="module"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_INVALID_CLASS"> + If <paramlink id="service"></paramlink> is not a class object. + </error> + </errors> + </function> + + <function id="AddModuleProvides" num="98" since="9"> + <synopsis>Add Module Provides</synopsis> + <description> + Updates a module to add a service to the set of services that + a module provides. This function is a no-op when the module + is an unnamed module. + This function facilitates the instrumentation of code + in named modules where that instrumentation requires + changes to the services that are provided. + </description> + <origin>new</origin> + <capabilities> + </capabilities> + <parameters> + <param id="module"> + <ptrtype><jobject/></ptrtype> + <description> + The module to update. + </description> + </param> + <param id="service"> + <ptrtype><jclass/></ptrtype> + <description> + The service to provide. + </description> + </param> + <param id="impl_class"> + <ptrtype><jclass/></ptrtype> + <description> + The implementation class for the provided service. + </description> + </param> + </parameters> + <errors> + <error id="JVMTI_ERROR_INVALID_MODULE"> + If <paramlink id="module"></paramlink> is not a module object. + </error> + <error id="JVMTI_ERROR_INVALID_CLASS"> + If <paramlink id="service"></paramlink> is not a class object. + </error> + <error id="JVMTI_ERROR_INVALID_CLASS"> + If <paramlink id="impl_class"></paramlink> is not a class object. + </error> + </errors> + </function> + </category> <category id="class" label="Class"> @@ -11371,6 +11590,9 @@ <errorid id="JVMTI_ERROR_INVALID_FIELDID" num="25"> Invalid field. </errorid> + <errorid id="JVMTI_ERROR_INVALID_MODULE" num="26"> + Invalid module. + </errorid> <errorid id="JVMTI_ERROR_INVALID_METHODID" num="23"> Invalid method. </errorid> @@ -14492,17 +14714,17 @@ <change date="19 June 2013" version="1.2.3"> Added support for statically linked agents. </change> - <change date="5 July 2016" version="9.0.0"> + <change date="13 October 2016" version="9.0.0"> Support for modules: - The majorversion is 9 now - The ClassFileLoadHook events are not sent during the primordial phase anymore. - - Add new function GetAllModules - - Add new capability can_generate_early_vmstart - Allow CompiledMethodLoad events at start phase - - Add new capability can_generate_early_class_hook_events - - Add new function GetNamedModule - </change> - <change date="16 August 2016" version="9.0.0"> + - Add new capabilities: + - can_generate_early_vmstart + - can_generate_early_class_hook_events + - Add new functions: + - GetAllModules + - AddModuleReads, AddModuleExports, AddModuleOpens, AddModuleUses, AddModuleProvides Clarified can_redefine_any_classes, can_retransform_any_classes and IsModifiableClass API to disallow some implementation defined classes. </change>
--- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -227,6 +227,119 @@ } /* end GetNamedModule */ +// module - pre-checked for NULL +// to_module - pre-checked for NULL +jvmtiError +JvmtiEnv::AddModuleReads(jobject module, jobject to_module) { + JavaThread* THREAD = JavaThread::current(); + + // check module + Handle h_module(THREAD, JNIHandles::resolve(module)); + if (!java_lang_reflect_Module::is_instance(h_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + // check to_module + Handle h_to_module(THREAD, JNIHandles::resolve(to_module)); + if (!java_lang_reflect_Module::is_instance(h_to_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + return JvmtiExport::add_module_reads(h_module, h_to_module, THREAD); +} /* end AddModuleReads */ + + +// module - pre-checked for NULL +// pkg_name - pre-checked for NULL +// to_module - pre-checked for NULL +jvmtiError +JvmtiEnv::AddModuleExports(jobject module, const char* pkg_name, jobject to_module) { + JavaThread* THREAD = JavaThread::current(); + Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD); + + // check module + Handle h_module(THREAD, JNIHandles::resolve(module)); + if (!java_lang_reflect_Module::is_instance(h_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + // check to_module + Handle h_to_module(THREAD, JNIHandles::resolve(to_module)); + if (!java_lang_reflect_Module::is_instance(h_to_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + return JvmtiExport::add_module_exports(h_module, h_pkg, h_to_module, THREAD); +} /* end AddModuleExports */ + + +// module - pre-checked for NULL +// pkg_name - pre-checked for NULL +// to_module - pre-checked for NULL +jvmtiError +JvmtiEnv::AddModuleOpens(jobject module, const char* pkg_name, jobject to_module) { + JavaThread* THREAD = JavaThread::current(); + Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD); + + // check module + Handle h_module(THREAD, JNIHandles::resolve(module)); + if (!java_lang_reflect_Module::is_instance(h_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + // check to_module + Handle h_to_module(THREAD, JNIHandles::resolve(to_module)); + if (!java_lang_reflect_Module::is_instance(h_to_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + return JvmtiExport::add_module_opens(h_module, h_pkg, h_to_module, THREAD); +} /* end AddModuleOpens */ + + +// module - pre-checked for NULL +// service - pre-checked for NULL +jvmtiError +JvmtiEnv::AddModuleUses(jobject module, jclass service) { + JavaThread* THREAD = JavaThread::current(); + + // check module + Handle h_module(THREAD, JNIHandles::resolve(module)); + if (!java_lang_reflect_Module::is_instance(h_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + // check service + Handle h_service(THREAD, JNIHandles::resolve_external_guard(service)); + if (!java_lang_Class::is_instance(h_service()) || + java_lang_Class::is_primitive(h_service())) { + return JVMTI_ERROR_INVALID_CLASS; + } + return JvmtiExport::add_module_uses(h_module, h_service, THREAD); +} /* end AddModuleUses */ + + +// module - pre-checked for NULL +// service - pre-checked for NULL +// impl_class - pre-checked for NULL +jvmtiError +JvmtiEnv::AddModuleProvides(jobject module, jclass service, jclass impl_class) { + JavaThread* THREAD = JavaThread::current(); + + // check module + Handle h_module(THREAD, JNIHandles::resolve(module)); + if (!java_lang_reflect_Module::is_instance(h_module())) { + return JVMTI_ERROR_INVALID_MODULE; + } + // check service + Handle h_service(THREAD, JNIHandles::resolve_external_guard(service)); + if (!java_lang_Class::is_instance(h_service()) || + java_lang_Class::is_primitive(h_service())) { + return JVMTI_ERROR_INVALID_CLASS; + } + // check impl_class + Handle h_impl_class(THREAD, JNIHandles::resolve_external_guard(impl_class)); + if (!java_lang_Class::is_instance(h_impl_class()) || + java_lang_Class::is_primitive(h_impl_class())) { + return JVMTI_ERROR_INVALID_CLASS; + } + return JvmtiExport::add_module_provides(h_module, h_service, h_impl_class, THREAD); +} /* end AddModuleProvides */ + + // // Class functions //
--- a/hotspot/src/share/vm/prims/jvmtiExport.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -434,6 +434,165 @@ } } +jvmtiError +JvmtiExport::add_module_reads(Handle module, Handle to_module, TRAPS) { + if (!Universe::is_module_initialized()) { + return JVMTI_ERROR_NONE; // extra safety + } + assert(!module.is_null(), "module should always be set"); + assert(!to_module.is_null(), "to_module should always be set"); + + // Invoke the addReads method + JavaValue result(T_VOID); + JavaCalls::call_static(&result, + SystemDictionary::module_Modules_klass(), + vmSymbols::addReads_name(), + vmSymbols::addReads_signature(), + module, + to_module, + THREAD); + + if (HAS_PENDING_EXCEPTION) { + LogTarget(Trace, jvmti) log; + LogStreamCHeap log_stream(log); + java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream); + log_stream.cr(); + CLEAR_PENDING_EXCEPTION; + return JVMTI_ERROR_INTERNAL; + } + return JVMTI_ERROR_NONE; +} + +jvmtiError +JvmtiExport::add_module_exports(Handle module, Handle pkg_name, Handle to_module, TRAPS) { + if (!Universe::is_module_initialized()) { + return JVMTI_ERROR_NONE; // extra safety + } + assert(!module.is_null(), "module should always be set"); + assert(!to_module.is_null(), "to_module should always be set"); + assert(!pkg_name.is_null(), "pkg_name should always be set"); + + // Invoke the addExports method + JavaValue result(T_VOID); + JavaCalls::call_static(&result, + SystemDictionary::module_Modules_klass(), + vmSymbols::addExports_name(), + vmSymbols::addExports_signature(), + module, + pkg_name, + to_module, + THREAD); + + if (HAS_PENDING_EXCEPTION) { + Symbol* ex_name = PENDING_EXCEPTION->klass()->name(); + LogTarget(Trace, jvmti) log; + LogStreamCHeap log_stream(log); + java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream); + log_stream.cr(); + CLEAR_PENDING_EXCEPTION; + if (ex_name == vmSymbols::java_lang_IllegalArgumentException()) { + return JVMTI_ERROR_ILLEGAL_ARGUMENT; + } + return JVMTI_ERROR_INTERNAL; + } + return JVMTI_ERROR_NONE; +} + +jvmtiError +JvmtiExport::add_module_opens(Handle module, Handle pkg_name, Handle to_module, TRAPS) { + if (!Universe::is_module_initialized()) { + return JVMTI_ERROR_NONE; // extra safety + } + assert(!module.is_null(), "module should always be set"); + assert(!to_module.is_null(), "to_module should always be set"); + assert(!pkg_name.is_null(), "pkg_name should always be set"); + + // Invoke the addOpens method + JavaValue result(T_VOID); + JavaCalls::call_static(&result, + SystemDictionary::module_Modules_klass(), + vmSymbols::addOpens_name(), + vmSymbols::addExports_signature(), + module, + pkg_name, + to_module, + THREAD); + + if (HAS_PENDING_EXCEPTION) { + Symbol* ex_name = PENDING_EXCEPTION->klass()->name(); + LogTarget(Trace, jvmti) log; + LogStreamCHeap log_stream(log); + java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream); + log_stream.cr(); + CLEAR_PENDING_EXCEPTION; + if (ex_name == vmSymbols::java_lang_IllegalArgumentException()) { + return JVMTI_ERROR_ILLEGAL_ARGUMENT; + } + return JVMTI_ERROR_INTERNAL; + } + return JVMTI_ERROR_NONE; +} + +jvmtiError +JvmtiExport::add_module_uses(Handle module, Handle service, TRAPS) { + if (!Universe::is_module_initialized()) { + return JVMTI_ERROR_NONE; // extra safety + } + assert(!module.is_null(), "module should always be set"); + assert(!service.is_null(), "service should always be set"); + + // Invoke the addUses method + JavaValue result(T_VOID); + JavaCalls::call_static(&result, + SystemDictionary::module_Modules_klass(), + vmSymbols::addUses_name(), + vmSymbols::addUses_signature(), + module, + service, + THREAD); + + if (HAS_PENDING_EXCEPTION) { + LogTarget(Trace, jvmti) log; + LogStreamCHeap log_stream(log); + java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream); + log_stream.cr(); + CLEAR_PENDING_EXCEPTION; + return JVMTI_ERROR_INTERNAL; + } + return JVMTI_ERROR_NONE; +} + +jvmtiError +JvmtiExport::add_module_provides(Handle module, Handle service, Handle impl_class, TRAPS) { + if (!Universe::is_module_initialized()) { + return JVMTI_ERROR_NONE; // extra safety + } + assert(!module.is_null(), "module should always be set"); + assert(!service.is_null(), "service should always be set"); + assert(!impl_class.is_null(), "impl_class should always be set"); + + // Invoke the addProvides method + JavaValue result(T_VOID); + JavaCalls::call_static(&result, + SystemDictionary::module_Modules_klass(), + vmSymbols::addProvides_name(), + vmSymbols::addProvides_signature(), + module, + service, + impl_class, + THREAD); + + if (HAS_PENDING_EXCEPTION) { + LogTarget(Trace, jvmti) log; + LogStreamCHeap log_stream(log); + java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream); + log_stream.cr(); + CLEAR_PENDING_EXCEPTION; + return JVMTI_ERROR_INTERNAL; + } + return JVMTI_ERROR_NONE; +} + void JvmtiExport::decode_version_values(jint version, int * major, int * minor, int * micro) {
--- a/hotspot/src/share/vm/prims/jvmtiExport.hpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp Wed Jul 05 22:32:17 2017 +0200 @@ -218,6 +218,21 @@ // Add read edges to the unnamed modules of the bootstrap and app class loaders static void add_default_read_edges(Handle h_module, TRAPS) NOT_JVMTI_RETURN; + // Add a read edge to the module + static jvmtiError add_module_reads(Handle module, Handle to_module, TRAPS); + + // Updates a module to export a package + static jvmtiError add_module_exports(Handle module, Handle pkg_name, Handle to_module, TRAPS); + + // Updates a module to open a package + static jvmtiError add_module_opens(Handle module, Handle pkg_name, Handle to_module, TRAPS); + + // Add a used service to the module + static jvmtiError add_module_uses(Handle module, Handle service, TRAPS); + + // Add a service provider to the module + static jvmtiError add_module_provides(Handle module, Handle service, Handle impl_class, TRAPS); + // let JVMTI know that the JVM_OnLoad code is running static void enter_onload_phase() NOT_JVMTI_RETURN;
--- a/hotspot/src/share/vm/prims/whitebox.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/prims/whitebox.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -1415,14 +1415,6 @@ Modules::add_reads_module(from_module, source_module, CHECK); WB_END -WB_ENTRY(jboolean, WB_CanReadModule(JNIEnv* env, jobject o, jobject asking_module, jobject source_module)) - return Modules::can_read_module(asking_module, source_module, THREAD); -WB_END - -WB_ENTRY(jboolean, WB_IsExportedToModule(JNIEnv* env, jobject o, jobject from_module, jstring package, jobject to_module)) - return Modules::is_exported_to_module(from_module, package, to_module, THREAD); -WB_END - WB_ENTRY(void, WB_AddModulePackage(JNIEnv* env, jobject o, jclass module, jstring package)) Modules::add_module_package(module, package, CHECK); WB_END @@ -1866,10 +1858,6 @@ (void*)&WB_AddModuleExports }, {CC"AddReadsModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)V", (void*)&WB_AddReadsModule }, - {CC"CanReadModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)Z", - (void*)&WB_CanReadModule }, - {CC"IsExportedToModule", CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Z", - (void*)&WB_IsExportedToModule }, {CC"AddModulePackage", CC"(Ljava/lang/Object;Ljava/lang/String;)V", (void*)&WB_AddModulePackage }, {CC"GetModuleByPackageName", CC"(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;",
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -170,6 +170,8 @@ #define ADDEXPORTS_LEN 10 #define ADDREADS "addreads" #define ADDREADS_LEN 8 +#define ADDOPENS "addopens" +#define ADDOPENS_LEN 8 #define PATCH "patch" #define PATCH_LEN 5 #define ADDMODS "addmods" @@ -196,6 +198,7 @@ const char* property_suffix = property + MODULE_PROPERTY_PREFIX_LEN; if (matches_property_suffix(property_suffix, ADDEXPORTS, ADDEXPORTS_LEN) || matches_property_suffix(property_suffix, ADDREADS, ADDREADS_LEN) || + matches_property_suffix(property_suffix, ADDOPENS, ADDOPENS_LEN) || matches_property_suffix(property_suffix, PATCH, PATCH_LEN) || matches_property_suffix(property_suffix, ADDMODS, ADDMODS_LEN) || matches_property_suffix(property_suffix, LIMITMODS, LIMITMODS_LEN) || @@ -2555,6 +2558,7 @@ unsigned int addreads_count = 0; unsigned int addexports_count = 0; +unsigned int addopens_count = 0; unsigned int addmods_count = 0; unsigned int patch_mod_count = 0; @@ -2809,6 +2813,10 @@ if (!create_numbered_property("jdk.module.addexports", tail, addexports_count++)) { return JNI_ENOMEM; } + } else if (match_option(option, "--add-opens=", &tail)) { + if (!create_numbered_property("jdk.module.addopens", tail, addopens_count++)) { + return JNI_ENOMEM; + } } else if (match_option(option, "--add-modules=", &tail)) { if (!create_numbered_property("jdk.module.addmods", tail, addmods_count++)) { return JNI_ENOMEM;
--- a/hotspot/src/share/vm/runtime/javaCalls.cpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/runtime/javaCalls.cpp Wed Jul 05 22:32:17 2017 +0200 @@ -285,6 +285,14 @@ } +void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS) { + JavaCallArguments args; // One oop argument + args.push_oop(arg1); + args.push_oop(arg2); + args.push_oop(arg3); + call_static(result, klass, name, signature, &args, CHECK); +} + // ------------------------------------------------- // Implementation of JavaCalls (low level)
--- a/hotspot/src/share/vm/runtime/javaCalls.hpp Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/src/share/vm/runtime/javaCalls.hpp Wed Jul 05 22:32:17 2017 +0200 @@ -210,6 +210,7 @@ static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS); static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS); static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS); + static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS); // Low-level interface static void call(JavaValue* result, const methodHandle& method, JavaCallArguments* args, TRAPS);
--- a/hotspot/test/TEST.ROOT Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/TEST.ROOT Wed Jul 05 22:32:17 2017 +0200 @@ -47,8 +47,8 @@ vm.gc.ConcMarkSweep \ vm.debug -# Tests using jtreg 4.2 b03 features -requiredVersion=4.2 b03 +# Tests using jtreg 4.2 b04 features +requiredVersion=4.2 b04 # Path to libraries in the topmost test directory. This is needed so @library # does not need ../../ notation to reach them
--- a/hotspot/test/compiler/c2/Test7190310_unsafe.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/c2/Test7190310_unsafe.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,8 @@ * @test * @bug 7190310 * @summary Inlining WeakReference.get(), and hoisting $referent may lead to non-terminating loops - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open + * @modules java.base/java.lang.ref:open * * @run main/othervm -Xbatch compiler.c2.Test7190310_unsafe */
--- a/hotspot/test/compiler/codegen/Test8011901.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/codegen/Test8011901.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8011901 * @summary instruct xaddL_no_res shouldn't allow 64 bit constants. - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main/othervm -XX:-BackgroundCompilation compiler.codegen.Test8011901 */
--- a/hotspot/test/compiler/escapeAnalysis/TestUnsafePutAddressNullObjMustNotEscape.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/escapeAnalysis/TestUnsafePutAddressNullObjMustNotEscape.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8038048 * @summary assert(null_obj->escape_state() == PointsToNode::NoEscape,etc) - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+DoEscapeAnalysis * -XX:-TieredCompilation -Xbatch
--- a/hotspot/test/compiler/intrinsics/bigInteger/MontgomeryMultiplyTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/intrinsics/bigInteger/MontgomeryMultiplyTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,7 +27,8 @@ * @bug 8130150 8131779 8139907 * @summary Verify that the Montgomery multiply and square intrinsic works and correctly checks their arguments. * @requires vm.flavor == "server" - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.math:open * @library /test/lib * * @build sun.hotspot.WhiteBox
--- a/hotspot/test/compiler/intrinsics/unsafe/AllocateUninitializedArray.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/intrinsics/unsafe/AllocateUninitializedArray.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8150465 * @summary Unsafe methods to produce uninitialized arrays - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main/othervm -ea -Diters=200 -Xint * compiler.intrinsics.unsafe.AllocateUninitializedArray
--- a/hotspot/test/compiler/intrinsics/unsafe/TestUnsafeUnalignedMismatchedAccesses.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/intrinsics/unsafe/TestUnsafeUnalignedMismatchedAccesses.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8136473 * @summary Mismatched stores on same slice possible with Unsafe.Put*Unaligned methods - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation * compiler.intrinsics.unsafe.TestUnsafeUnalignedMismatchedAccesses
--- a/hotspot/test/compiler/intrinsics/unsafe/UnsafeGetAddressTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/intrinsics/unsafe/UnsafeGetAddressTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 6653795 * @summary C2 intrinsic for Unsafe.getAddress performs pointer sign extension on 32-bit systems - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main compiler.intrinsics.unsafe.UnsafeGetAddressTest */
--- a/hotspot/test/compiler/intrinsics/unsafe/UnsafeTwoCASLong.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/intrinsics/unsafe/UnsafeTwoCASLong.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8143930 * @summary C1 LinearScan asserts when compiling two back-to-back CompareAndSwapLongs - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run testng/othervm -Diters=200000 -XX:TieredStopAtLevel=1 * compiler.intrinsics.unsafe.UnsafeTwoCASLong
--- a/hotspot/test/compiler/jsr292/RedefineMethodUsedByMultipleMethodHandles.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/jsr292/RedefineMethodUsedByMultipleMethodHandles.java Wed Jul 05 22:32:17 2017 +0200 @@ -30,6 +30,7 @@ * java.compiler * java.instrument * java.management + * jdk.attach * * @run main/othervm compiler.jsr292.RedefineMethodUsedByMultipleMethodHandles */ @@ -42,7 +43,6 @@ import jdk.internal.org.objectweb.asm.MethodVisitor; import jdk.internal.org.objectweb.asm.Opcodes; -import javax.tools.ToolProvider; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -132,7 +132,7 @@ int p = vmName.indexOf('@'); assert p != -1 : "VM name not in <pid>@<host> format: " + vmName; String pid = vmName.substring(0, p); - ClassLoader cl = ToolProvider.getSystemToolClassLoader(); + ClassLoader cl = ClassLoader.getSystemClassLoader(); Class<?> c = Class.forName("com.sun.tools.attach.VirtualMachine", true, cl); Method attach = c.getDeclaredMethod("attach", String.class); Method loadAgent = c.getDeclaredMethod("loadAgent", String.class);
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,8 +27,8 @@ * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /test/lib * @library ../common/patches - * @modules java.base/jdk.internal.misc - * @modules jdk.vm.ci/jdk.vm.ci.hotspot + * @modules java.base/jdk.internal.misc:+open + * @modules jdk.vm.ci/jdk.vm.ci.hotspot:+open * * @build jdk.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper * jdk.vm.ci/jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,10 +27,10 @@ * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /test/lib * @library ../common/patches - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @modules java.base/jdk.internal.org.objectweb.asm * java.base/jdk.internal.org.objectweb.asm.tree - * jdk.vm.ci/jdk.vm.ci.hotspot + * @modules jdk.vm.ci/jdk.vm.ci.hotspot:+open * jdk.vm.ci/jdk.vm.ci.code * jdk.vm.ci/jdk.vm.ci.meta * @build jdk.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper
--- a/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,8 +26,8 @@ * @bug 8136421 * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /test/lib / - * @modules java.base/jdk.internal.misc - * @modules jdk.vm.ci/jdk.vm.ci.hotspot + * @modules java.base/jdk.internal.misc:open + * @modules jdk.vm.ci/jdk.vm.ci.hotspot:open * jdk.vm.ci/jdk.vm.ci.runtime * @run main/othervm -XX:+UnlockExperimentalVMOptions * -Dcompiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives.positive=true
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,9 +27,10 @@ * @bug 8161068 * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /test/lib /compiler/jvmci/jdk.vm.ci.hotspot.test/src + * @modules java.base/java.lang.invoke:+open * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime - * jdk.vm.ci/jdk.vm.ci.hotspot + * @modules jdk.vm.ci/jdk.vm.ci.hotspot:+open * @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI * jdk.vm.ci.hotspot.test.MethodHandleAccessProviderTest */
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,6 +27,7 @@ * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime + * jdk.attach * java.base/jdk.internal.misc * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.RedefineClassTest */ @@ -37,7 +38,6 @@ import org.junit.Assert; import org.junit.Test; -import javax.tools.ToolProvider; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -137,7 +137,7 @@ int p = vmName.indexOf('@'); assumeTrue(p != -1); String pid = vmName.substring(0, p); - ClassLoader cl = ToolProvider.getSystemToolClassLoader(); + ClassLoader cl = ClassLoader.getSystemClassLoader(); Class<?> c = Class.forName("com.sun.tools.attach.VirtualMachine", true, cl); Method attach = c.getDeclaredMethod("attach", String.class); Method loadAgent = c.getDeclaredMethod("loadAgent", String.class, String.class);
--- a/hotspot/test/compiler/rangechecks/TestExplicitRangeChecks.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/rangechecks/TestExplicitRangeChecks.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8073480 * @summary explicit range checks should be recognized by C2 * @library /test/lib / - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @build sun.hotspot.WhiteBox * @run driver ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -ea -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
--- a/hotspot/test/compiler/runtime/Test8010927.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/runtime/Test8010927.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8010927 * @summary Kitchensink crashed with SIGSEGV, Problematic frame: v ~StubRoutines::checkcast_arraycopy * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @build sun.hotspot.WhiteBox * @run driver ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission
--- a/hotspot/test/compiler/unsafe/GetUnsafeObjectG1PreBarrier.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/GetUnsafeObjectG1PreBarrier.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8016474 * @summary The bug only happens with C1 and G1 using a different ObjectAlignmentInBytes than KlassAlignmentInBytes (which is 8) * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=32 * compiler.unsafe.GetUnsafeObjectG1PreBarrier */
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestBoolean.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestBoolean.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for boolean * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestBoolean * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestBoolean * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestBoolean
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestByte.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestByte.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for byte * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestByte * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestByte * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestByte
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestChar.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestChar.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for char * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestChar * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestChar * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestChar
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestDouble.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestDouble.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for double * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestDouble * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestDouble * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestDouble
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestFloat.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestFloat.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for float * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestFloat * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestFloat * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestFloat
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestInt.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestInt.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for int * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestInt * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestInt * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestInt
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestLong.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestLong.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for long * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestLong * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestLong * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestLong
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestObject.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestObject.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for Object * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestObject * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestObject * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestObject
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestShort.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestShort.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,7 @@ * @bug 8143628 * @summary Test unsafe access for short * - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestShort * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestShort * @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestShort
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8158260 * @summary Test unaligned Unsafe accesses - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main/othervm -Diters=20000 -XX:-UseOnStackReplacement -XX:-BackgroundCompilation * compiler.unsafe.JdkInternalMiscUnsafeUnalignedAccess
--- a/hotspot/test/compiler/unsafe/TestUnsafeLoadControl.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/compiler/unsafe/TestUnsafeLoadControl.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8077504 * @summary Unsafe load can loose control dependency and cause crash - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:+open * * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement * compiler.unsafe.TestUnsafeLoadControl
--- a/hotspot/test/gc/g1/TestStringDeduplicationAgeThreshold.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationAgeThreshold.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/g1/TestStringDeduplicationFullGC.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationFullGC.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/g1/TestStringDeduplicationInterned.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationInterned.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/g1/TestStringDeduplicationPrintOptions.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationPrintOptions.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/g1/TestStringDeduplicationTableRehash.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationTableRehash.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/g1/TestStringDeduplicationTableResize.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationTableResize.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/g1/TestStringDeduplicationTools.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationTools.java Wed Jul 05 22:32:17 2017 +0200 @@ -190,6 +190,7 @@ "-Xmx" + Xmx + "m", "-XX:+UseG1GC", "-XX:+UnlockDiagnosticVMOptions", + "--add-opens=java.base/java.lang=ALL-UNNAMED", "-XX:+VerifyAfterGC" // Always verify after GC };
--- a/hotspot/test/gc/g1/TestStringDeduplicationYoungGC.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/g1/TestStringDeduplicationYoungGC.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,7 +28,8 @@ * @key gc * @requires vm.gc.G1 * @library /test/lib - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * java.management */
--- a/hotspot/test/gc/stress/gcbasher/TestGCBasher.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/gc/stress/gcbasher/TestGCBasher.java Wed Jul 05 22:32:17 2017 +0200 @@ -38,7 +38,8 @@ FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/")); Stream<Path> s = Files.walk(fs.getPath("/")); for (Path p : (Iterable<Path>)s::iterator) { - if (p.toString().endsWith(".class")) { + if (p.toString().endsWith(".class") && + !p.getFileName().toString().equals("module-info.class")) { byte[] data = Files.readAllBytes(p); Decompiler d = new Decompiler(data); ClassInfo ci = d.getClassInfo();
--- a/hotspot/test/runtime/LocalLong/LocalLongTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/LocalLong/LocalLongTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -39,6 +39,10 @@ public static void main(String... args) throws Exception { if (Platform.is64bit()) { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xint", + "--add-opens", + "java.base/java.lang=ALL-UNNAMED", + "--add-opens", + "java.base/java.lang.invoke=ALL-UNNAMED", "LocalLongHelper"); OutputAnalyzer o = new OutputAnalyzer(pb.start()); o.shouldHaveExitValue(0);
--- a/hotspot/test/runtime/Throwable/StackTraceLogging.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/Throwable/StackTraceLogging.java Wed Jul 05 22:32:17 2017 +0200 @@ -52,6 +52,8 @@ public static void main(String[] args) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xlog:stacktrace=info", "-XX:MaxJavaStackTraceDepth=1024", + "--add-opens", + "java.base/java.lang=ALL-UNNAMED", "TestThrowable"); analyzeOutputOn(pb); }
--- a/hotspot/test/runtime/Throwable/TestThrowable.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/Throwable/TestThrowable.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,8 @@ * @test * @bug 8150778 * @summary Test exception depths, and code to get stack traces - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * @library /test/lib * @run main/othervm -XX:MaxJavaStackTraceDepth=1024 TestThrowable */
--- a/hotspot/test/runtime/Throwable/ThrowableIntrospectionSegfault.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/Throwable/ThrowableIntrospectionSegfault.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,7 +25,8 @@ * @test * @bug 8033735 * @summary check backtrace field introspection - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * @run main ThrowableIntrospectionSegfault */
--- a/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -100,7 +100,7 @@ ClassFileInstaller.writeClassToDisk("GetSysPkg_package/GetSysClass", klassbuf); ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xbootclasspath/a:bl_dir", - "--add-exports=java.base/jdk.internal.loader=ALL-UNNAMED", "-cp", "." + File.pathSeparator + + "--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED", "-cp", "." + File.pathSeparator + System.getProperty("test.classes"), "GetSysPkgTest", "do_tests"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); output.shouldHaveExitValue(0);
--- a/hotspot/test/runtime/modules/AccessCheck/CheckRead.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/CheckRead.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m3") .exports("p1") @@ -80,9 +80,9 @@ // Packages: p2 // Packages exported: p2 is exported to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Define module: m3 @@ -90,10 +90,10 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .requires("m2") - .conceals("p3") + .contains("p3") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_CheckRead.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_CheckRead.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m3") .exports("p1") @@ -80,9 +80,9 @@ // Packages: p2 // Packages exported: p2 is exported to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Define module: m3 @@ -90,10 +90,10 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .requires("m2") - .conceals("p3") + .contains("p3") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualOther.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualOther.java Wed Jul 05 22:32:17 2017 +0200 @@ -70,7 +70,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .requires("m3") @@ -82,9 +82,9 @@ // Packages: p2 // Packages exported: p2 is exported to m3 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m3") + .exports("p2", Set.of("m3")) .build(); // Define module: m3 @@ -92,10 +92,10 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .requires("m2") - .conceals("p3") + .contains("p3") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualToM1.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualToM1.java Wed Jul 05 22:32:17 2017 +0200 @@ -68,7 +68,7 @@ // Packages: p1 // Packages exported: p1 is exported to unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -79,9 +79,9 @@ // Packages: p2 // Packages exported: package p2 is exported to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpUnqual.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpUnqual.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -80,7 +80,7 @@ // Packages: p2 // Packages exported: package p2 is exported to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") .exports("p2") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_PkgNotExp.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_PkgNotExp.java Wed Jul 05 22:32:17 2017 +0200 @@ -68,7 +68,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -79,9 +79,9 @@ // Packages: p2 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .conceals("p2") + .contains("p2") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_Umod.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_Umod.java Wed Jul 05 22:32:17 2017 +0200 @@ -80,7 +80,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p1") .build(); @@ -129,7 +129,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p1") .build(); @@ -178,7 +178,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p1") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_UmodUpkg.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_UmodUpkg.java Wed Jul 05 22:32:17 2017 +0200 @@ -75,7 +75,7 @@ // Packages: p3 // Packages exported: p3 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p3") .build(); @@ -124,7 +124,7 @@ // Packages: p3 // Packages exported: p3 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p3") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/ExpQualOther.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/ExpQualOther.java Wed Jul 05 22:32:17 2017 +0200 @@ -70,7 +70,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .requires("m3") @@ -82,9 +82,9 @@ // Packages: p2 // Packages exported: p2 is exported to m3 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m3") + .exports("p2", Set.of("m3")) .build(); // Define module: m3 @@ -92,10 +92,10 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .requires("m2") - .conceals("p3") + .contains("p3") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/ExpQualToM1.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/ExpQualToM1.java Wed Jul 05 22:32:17 2017 +0200 @@ -58,7 +58,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -69,9 +69,9 @@ // Packages: p2 // Packages exported: p2 is exported qualifiedly to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/ExpUnqual.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/ExpUnqual.java Wed Jul 05 22:32:17 2017 +0200 @@ -58,7 +58,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -69,7 +69,7 @@ // Packages: p2 // Packages exported: p2 is exported unqualifiedly ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") .exports("p2") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/ExportAllUnnamed.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/ExportAllUnnamed.java Wed Jul 05 22:32:17 2017 +0200 @@ -71,7 +71,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -81,9 +81,9 @@ // Packages: p2 // Packages exported: p2 is exported unqualifiedly ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/PkgNotExp.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/PkgNotExp.java Wed Jul 05 22:32:17 2017 +0200 @@ -68,7 +68,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -79,9 +79,9 @@ // Packages: p2 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .conceals("p2") + .contains("p2") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/Umod.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/Umod.java Wed Jul 05 22:32:17 2017 +0200 @@ -80,7 +80,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p1") .build(); @@ -126,7 +126,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p1") .build(); @@ -172,7 +172,7 @@ // Packages: p1 // Packages exported: p1 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p1") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpQualOther.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpQualOther.java Wed Jul 05 22:32:17 2017 +0200 @@ -70,7 +70,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -80,9 +80,9 @@ // Packages: p2 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpUnqual.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpUnqual.java Wed Jul 05 22:32:17 2017 +0200 @@ -70,7 +70,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -80,7 +80,7 @@ // Packages: p2 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") .exports("p2") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_PkgNotExp.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_PkgNotExp.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -79,9 +79,9 @@ // Packages: p2 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .conceals("p2") + .contains("p2") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUPkg.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodUPkg.java Wed Jul 05 22:32:17 2017 +0200 @@ -75,7 +75,7 @@ // Packages: p3 // Packages exported: p3 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p3") .build(); @@ -121,7 +121,7 @@ // Packages: p3 // Packages exported: p3 is exported unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .exports("p3") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_ExpQualOther.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_ExpQualOther.java Wed Jul 05 22:32:17 2017 +0200 @@ -70,7 +70,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -80,9 +80,9 @@ // Packages: p6 // Packages exported: p6 exported to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p6", "m1") + .exports("p6", Set.of("m1")) .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_NotExp.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_NotExp.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -79,9 +79,9 @@ // Packages: p6 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .conceals("p6") + .contains("p6") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_ExpQualOther.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_ExpQualOther.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .requires("m3") @@ -80,9 +80,9 @@ // Packages: p6 // Packages exported: p6 is exported to m3 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p6", "m3") + .exports("p6", Set.of("m3")) .build(); // Define module: m3 @@ -90,7 +90,7 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_NotExp.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_NotExp.java Wed Jul 05 22:32:17 2017 +0200 @@ -67,7 +67,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -77,9 +77,9 @@ // Packages: p6 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .conceals("p6") + .contains("p6") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/Umod_ExpQualOther.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/Umod_ExpQualOther.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .requires("m3") @@ -80,9 +80,9 @@ // Packages: p2 // Packages exported: p2 is exported to m3 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m3") + .exports("p2", Set.of("m3")) .build(); // Define module: m3 @@ -90,7 +90,7 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/Umod_ExpUnqual.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/Umod_ExpUnqual.java Wed Jul 05 22:32:17 2017 +0200 @@ -69,7 +69,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -79,7 +79,7 @@ // Packages: p2 // Packages exported: p2 is exported unqualifiedly ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") .exports("p2") .build();
--- a/hotspot/test/runtime/modules/AccessCheck/Umod_PkgNotExp.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/AccessCheck/Umod_PkgNotExp.java Wed Jul 05 22:32:17 2017 +0200 @@ -67,7 +67,7 @@ // Packages: none // Packages exported: none ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .build(); @@ -77,9 +77,9 @@ // Packages: p2 // Packages exported: none ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .conceals("p2") + .contains("p2") .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/IgnoreModulePropertiesTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/IgnoreModulePropertiesTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -72,6 +72,6 @@ testOption("--add-reads", "xyzz=yyzd", "jdk.module.addreads.0", "WARNING: Unknown module: xyzz"); testOption("--add-exports", "java.base/xyzz=yyzd", "jdk.module.addexports.0", "WARNING: package xyzz not in java.base"); - testOption("--patch-module", "=d", "jdk.module.patch.0", "IllegalArgumentException"); + testOption("--patch-module", "=d", "jdk.module.patch.0", "Missing module name"); } }
--- a/hotspot/test/runtime/modules/JVMAddModulePackage.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/JVMAddModulePackage.java Wed Jul 05 22:32:17 2017 +0200 @@ -33,6 +33,7 @@ */ import static jdk.test.lib.Asserts.*; +import java.sql.Time; public class JVMAddModulePackage { @@ -123,6 +124,29 @@ // Expected } + // Add package named "java" to an module defined to a class loader other than the boot or platform loader. + try { + // module1 is defined to a MyClassLoader class loader. + ModuleHelper.AddModulePackage(module1, "java/foo"); + throw new RuntimeException("Failed to get the expected IAE"); + } catch(IllegalArgumentException e) { + if (!e.getMessage().contains("prohibited package name")) { + throw new RuntimeException("Failed to get expected IAE message for prohibited package name: " + e.getMessage()); + } + } + + // Package "javabar" should be ok + ModuleHelper.AddModulePackage(module1, "javabar"); + + // Package named "java" defined to the boot class loader, should be ok + Object module_javabase = module1.getClass().getModule(); + ModuleHelper.AddModulePackage(module_javabase, "java/foo"); + + // Package named "java" defined to the platform class loader, should be ok + // The module java.sql is defined to the platform class loader. + java.sql.Time jst = new java.sql.Time(45000); // milliseconds + Object module_javasql = jst.getClass().getModule(); + ModuleHelper.AddModulePackage(module_javasql, "java/foo"); } static class MyClassLoader extends ClassLoader { }
--- a/hotspot/test/runtime/modules/JVMCanReadModule.java Thu Dec 01 21:40:21 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @modules java.base/jdk.internal.misc - * @library /test/lib .. - * @build sun.hotspot.WhiteBox - * @compile/module=java.base java/lang/reflect/ModuleHelper.java - * @run main ClassFileInstaller sun.hotspot.WhiteBox - * sun.hotspot.WhiteBox$WhiteBoxPermission - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI JVMCanReadModule - */ - -import static jdk.test.lib.Asserts.*; - -public class JVMCanReadModule { - - public static void main(String args[]) throws Throwable { - MyClassLoader asking_cl = new MyClassLoader(); - MyClassLoader target_cl = new MyClassLoader(); - Object asking_module, target_module; - boolean result; - - asking_module = ModuleHelper.ModuleObject("asking_module", asking_cl, new String[] { "mypackage" }); - assertNotNull(asking_module, "Module should not be null"); - ModuleHelper.DefineModule(asking_module, "9.0", "asking_module/here", new String[] { "mypackage" }); - target_module = ModuleHelper.ModuleObject("target_module", target_cl, new String[] { "yourpackage" }); - assertNotNull(target_module, "Module should not be null"); - ModuleHelper.DefineModule(target_module, "9.0", "target_module/here", new String[] { "yourpackage" }); - - // Set up relationship - ModuleHelper.AddReadsModule(asking_module, target_module); - - // Null asking_module argument, expect an NPE - try { - result = ModuleHelper.CanReadModule(null, target_module); - throw new RuntimeException("Failed to get the expected NPE"); - } catch(NullPointerException e) { - // Expected - } - - // Bad asking_module argument, expect an IAE - try { - result = ModuleHelper.CanReadModule(asking_cl, target_module); - throw new RuntimeException("Failed to get the expected IAE"); - } catch(IllegalArgumentException e) { - // Expected - } - - // Bad target_module argument, expect an IAE - try { - result = ModuleHelper.CanReadModule(asking_module, asking_cl); - throw new RuntimeException("Failed to get the expected IAE"); - } catch(IllegalArgumentException e) { - // Expected - } - - // Verify strict modules can not read the unnamed module - result = ModuleHelper.CanReadModule(target_module, null); - assertFalse(result, "target_module can not read unnamed module"); - - // Verify asking_module can read itself - result = ModuleHelper.CanReadModule(asking_module, asking_module); - assertTrue(result, "asking_module can read itself"); - - // Verify asking_module can read target_module - result = ModuleHelper.CanReadModule(asking_module, target_module); - assertTrue(result, "asking_module can read target_module"); - - // Verify target_module cannot read asking_module - result = ModuleHelper.CanReadModule(target_module, asking_module); - assertTrue(!result, "target_module cannot read asking_module"); - } - - static class MyClassLoader extends ClassLoader { } -}
--- a/hotspot/test/runtime/modules/JVMDefineModule.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/JVMDefineModule.java Wed Jul 05 22:32:17 2017 +0200 @@ -33,6 +33,7 @@ */ import static jdk.test.lib.Asserts.*; +import java.sql.Time; public class JVMDefineModule { @@ -238,6 +239,39 @@ } } + // Package named "java" defined to a class loader other than the boot or platform class loader, expect an IAE + m = ModuleHelper.ModuleObject("modulejavapkg1", cl, new String[] { "java/foo" }); + try { + // module m is defined to an instance of MyClassLoader class loader + ModuleHelper.DefineModule(m, "9.0", "modulejavapkg1", new String[] { "java/foo" }); + throw new RuntimeException("Failed to get expected IAE for package java/foo"); + } catch(IllegalArgumentException e) { + if (!e.getMessage().contains("prohibited package name")) { + throw new RuntimeException("Failed to get expected IAE message for prohibited package name: " + e.getMessage()); + } + } + + // Package named "javabar" defined to a class loader other than the boot or platform class loader, should be ok + m = ModuleHelper.ModuleObject("modulejavapkg2", cl, new String[] { "javabar" }); + assertNotNull(m, "Module should not be null"); + ModuleHelper.DefineModule(m, "9.0", "modulejavapkg2", new String[] { "javabar" }); + + // Package named "java" defined to the boot class loader, should be ok + // m's type is a java.lang.Object, module is java.base + // java.base module is defined to the boot loader + ClassLoader boot_loader = m.getClass().getClassLoader(); + m = ModuleHelper.ModuleObject("modulejavapkg3", boot_loader, new String[] { "java/foo" }); + assertNotNull(m, "Module should not be null"); + ModuleHelper.DefineModule(m, "9.0", "modulejavapkg3", new String[] { "java/foo" }); + + // Package named "java" defined to the platform class loader, should be ok + // java.sql module defined to the platform class loader. + java.sql.Time jst = new java.sql.Time(45 * 1000); + ClassLoader platform_loader = jst.getClass().getClassLoader(); + m = ModuleHelper.ModuleObject("modulejavapkg4", platform_loader, new String[] { "java/foo" }); + assertNotNull(m, "Module should not be null"); + ModuleHelper.DefineModule(m, "9.0", "modulejavapkg4", new String[] { "java/foo" }); + // module version that is null, should be okay m = ModuleHelper.ModuleObject("module8", cl, new String[] { "a_package_8" }); assertNotNull(m, "Module should not be null");
--- a/hotspot/test/runtime/modules/JVMIsExportedToModule.java Thu Dec 01 21:40:21 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @modules java.base/jdk.internal.misc - * @library /test/lib .. - * @build sun.hotspot.WhiteBox - * @compile/module=java.base java/lang/reflect/ModuleHelper.java - * @run main ClassFileInstaller sun.hotspot.WhiteBox - * sun.hotspot.WhiteBox$WhiteBoxPermission - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI JVMIsExportedToModule - */ - -import static jdk.test.lib.Asserts.*; - -public class JVMIsExportedToModule { - - public static void main(String args[]) throws Throwable { - MyClassLoader from_cl = new MyClassLoader(); - MyClassLoader to_cl = new MyClassLoader(); - Object from_module, to_module; - boolean result; - - from_module = ModuleHelper.ModuleObject("from_module", from_cl, new String[] { "mypackage", "this/package" }); - assertNotNull(from_module, "Module from_module should not be null"); - ModuleHelper.DefineModule(from_module, "9.0", "from_module/here", new String[] { "mypackage", "this/package" }); - to_module = ModuleHelper.ModuleObject("to_module", to_cl, new String[] { "yourpackage", "that/package" }); - assertNotNull(to_module, "Module to_module should not be null"); - ModuleHelper.DefineModule(to_module, "9.0", "to_module/here", new String[] { "yourpackage", "that/package" }); - - Object unnamed_module = JVMIsExportedToModule.class.getModule(); - assertNotNull(unnamed_module, "Module unnamed_module should not be null"); - - // Null from_module argument, expect an NPE - try { - result = ModuleHelper.IsExportedToModule(null, "mypackage", to_module); - throw new RuntimeException("Failed to get the expected NPE for null from_module"); - } catch(NullPointerException e) { - // Expected - } - - // Null to_module argument, expect an NPE - try { - result = ModuleHelper.IsExportedToModule(from_module, "mypackage", null); - throw new RuntimeException("Failed to get expected NPE for null to_module"); - } catch(NullPointerException e) { - // Expected - } - - // Null package argument, expect an NPE - try { - result = ModuleHelper.IsExportedToModule(from_module, null, to_module); - throw new RuntimeException("Failed to get the expected NPE for null package"); - } catch(NullPointerException e) { - // Expected - } - - // Bad from_module argument, expect an IAE - try { - result = ModuleHelper.IsExportedToModule(to_cl, "mypackage", to_module); - throw new RuntimeException("Failed to get the expected IAE for bad from_module"); - } catch(IllegalArgumentException e) { - // Expected - } - - // Bad to_module argument, expect an IAE - try { - result = ModuleHelper.IsExportedToModule(from_module, "mypackage", from_cl); - throw new RuntimeException("Failed to get the expected IAE"); - } catch(IllegalArgumentException e) { - // Expected - } - - // Check that package is exported to its own module - result = ModuleHelper.IsExportedToModule(from_module, "mypackage", from_module); - assertTrue(result, "Package is always exported to itself"); - - // Package is not in to_module, expect an IAE - try { - result = ModuleHelper.IsExportedToModule(from_module, "yourpackage", from_cl); - throw new RuntimeException("Failed to get the expected IAE for package not in to_module"); - } catch(IllegalArgumentException e) { - // Expected - } - - // Package is accessible when exported to unnamed module - ModuleHelper.AddModuleExportsToAll(from_module, "mypackage"); - result = ModuleHelper.IsExportedToModule(from_module, "mypackage", to_module); - assertTrue(result, "Package exported to unnamed module is visible to named module"); - - result = ModuleHelper.IsExportedToModule(from_module, "mypackage", unnamed_module); - assertTrue(result, "Package exported to unnamed module is visible to unnamed module"); - - // Package is accessible only to named module when exported to named module - ModuleHelper.AddModuleExports(from_module, "this/package", to_module); - result = ModuleHelper.IsExportedToModule(from_module, "this/package", to_module); - assertTrue(result, "Package exported to named module is visible to named module"); - result = ModuleHelper.IsExportedToModule(from_module, "this/package", unnamed_module); - assertTrue(!result, "Package exported to named module is not visible to unnamed module"); - } - - static class MyClassLoader extends ClassLoader { } -}
--- a/hotspot/test/runtime/modules/ModuleHelper.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/ModuleHelper.java Wed Jul 05 22:32:17 2017 +0200 @@ -73,17 +73,6 @@ java.lang.reflect.ModuleHelper.addExportsNoSync((Module)m, pkg, (Module)null); } - public static boolean CanReadModule(Object from, Object to) throws Throwable { - WhiteBox wb = WhiteBox.getWhiteBox(); - return wb.CanReadModule(from, to); - } - - public static boolean IsExportedToModule(Object from, String pkg, - Object to) throws Throwable { - WhiteBox wb = WhiteBox.getWhiteBox(); - return wb.IsExportedToModule(from, pkg, to); - } - public static Module ModuleObject(String name, ClassLoader loader, String[] pkgs) throws Throwable { Set<String> pkg_set = new HashSet<>(); if (pkgs != null) { @@ -95,7 +84,7 @@ } ModuleDescriptor descriptor = - new ModuleDescriptor.Builder(name).conceals(pkg_set).build(); + ModuleDescriptor.module(name).contains(pkg_set).build(); URI uri = URI.create("module:/" + name); return java.lang.reflect.ModuleHelper.newModule(loader, descriptor);
--- a/hotspot/test/runtime/modules/ModuleStress/ModuleNonBuiltinCLMain.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/ModuleNonBuiltinCLMain.java Wed Jul 05 22:32:17 2017 +0200 @@ -57,7 +57,7 @@ // Packages: p1 // Packages exported: p1 is exported to unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -71,7 +71,7 @@ targets.add("m1"); targets.add("m3"); ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") .requires("m3") .exports("p2", targets) @@ -82,7 +82,7 @@ // Packages: p3 // Packages exported: none ModuleDescriptor descriptor_m3 = - new ModuleDescriptor.Builder("m3") + ModuleDescriptor.module("m3") .requires("java.base") .build();
--- a/hotspot/test/runtime/modules/ModuleStress/ModuleSameCLMain.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/ModuleSameCLMain.java Wed Jul 05 22:32:17 2017 +0200 @@ -55,7 +55,7 @@ // Packages: p1 // Packages exported: p1 is exported to unqualifiedly ModuleDescriptor descriptor_m1 = - new ModuleDescriptor.Builder("m1") + ModuleDescriptor.module("m1") .requires("java.base") .requires("m2") .exports("p1") @@ -66,9 +66,9 @@ // Packages: p2 // Packages exported: package p2 is exported to m1 ModuleDescriptor descriptor_m2 = - new ModuleDescriptor.Builder("m2") + ModuleDescriptor.module("m2") .requires("java.base") - .exports("p2", "m1") + .exports("p2", Set.of("m1")) .build(); // Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/getModuleJNI/GetModule.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/getModuleJNI/GetModule.java Wed Jul 05 22:32:17 2017 +0200 @@ -35,10 +35,6 @@ } static native Object callGetModule(java.lang.Class clazz); - static native void callAddModuleReads(java.lang.reflect.Module from_module, - java.lang.reflect.Module source_module); - static native boolean callCanReadModule(java.lang.reflect.Module asking_module, - java.lang.reflect.Module source_module); public static void main(String[] args) { Module module; @@ -144,71 +140,6 @@ } catch(NullPointerException e) { // Expected } - - - // Tests for JNI_AddModuleReads() // - - Module javaScriptingModule = javax.script.Bindings.class.getModule(); - if (javaScriptingModule == null) { - throw new RuntimeException("Failed to get java.scripting module"); - } - Module javaLoggingModule = java.util.logging.Level.class.getModule(); - if (javaLoggingModule == null) { - throw new RuntimeException("Failed to get java.logging module"); - } - - if (callCanReadModule(javaLoggingModule, javaScriptingModule)) { - throw new RuntimeException( - "Expected FALSE because javaLoggingModule cannot read javaScriptingModule"); - } - - callAddModuleReads(javaLoggingModule, javaScriptingModule); - callAddModuleReads(javaScriptingModule, GetModule.class.getModule()); // unnamed module - - try { - callAddModuleReads(null, javaLoggingModule); - throw new RuntimeException( - "Expected NullPointerException for bad from_module not thrown"); - } catch(NullPointerException e) { - // expected - } - - try { - callAddModuleReads(javaLoggingModule, null); - throw new RuntimeException( - "Expected NullPointerException for bad source_module not thrown"); - } catch(NullPointerException e) { - // expected - } - - - // Tests for JNI_CanReadModule() // - - if (!callCanReadModule(javaLoggingModule, javaScriptingModule)) { - throw new RuntimeException( - "Expected TRUE because javaLoggingModule can read javaScriptingModule"); - } - - if (callCanReadModule(javaBaseModule, javaScriptingModule)) { - throw new RuntimeException( - "Expected FALSE because javaBaseModule cannnot read javaScriptingModule"); - } - - try { - callCanReadModule(javaLoggingModule, null); - throw new RuntimeException( - "Expected NullPointerException for bad sourceModule not thrown"); - } catch(NullPointerException e) { - // expected - } - - try { - callCanReadModule(null, javaScriptingModule); - throw new RuntimeException( - "Expected NullPointerException for bad asking_module not thrown"); - } catch(NullPointerException e) { - // expected - } } static class MyClassLoader extends ClassLoader { }
--- a/hotspot/test/runtime/modules/getModuleJNI/libGetModule.c Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/runtime/modules/getModuleJNI/libGetModule.c Wed Jul 05 22:32:17 2017 +0200 @@ -28,15 +28,3 @@ jobject res = (jobject)((*env)->GetModule(env, clazz)); return res; } - -JNIEXPORT void JNICALL -Java_GetModule_callAddModuleReads(JNIEnv *env, jclass unused, jobject from_module, jobject source_module) { - (*env)->AddModuleReads(env, from_module, source_module); -} - -JNIEXPORT jboolean JNICALL -Java_GetModule_callCanReadModule(JNIEnv *env, jclass unused, jobject asking_module, jobject source_module) { - jboolean res = (*env)->CanReadModule(env, asking_module, source_module); - return res; -} -
--- a/hotspot/test/serviceability/attach/AttachWithStalePidFile.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/serviceability/attach/AttachWithStalePidFile.java Wed Jul 05 22:32:17 2017 +0200 @@ -26,7 +26,8 @@ * @bug 7162400 * @key regression * @summary Regression test for attach issue where stale pid files in /tmp lead to connection issues - * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.misc:open + * @modules java.base/java.lang:open * @modules jdk.attach/sun.tools.attach * @library /test/lib * @run main AttachWithStalePidFile
--- a/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -32,7 +32,7 @@ * @test * @summary Tests the modules-related JDWP commands * @library /test/lib - * @ignore 8168478 + * @ignore 8170541 * @modules jdk.jdwp.agent * @modules java.base/jdk.internal.misc * @compile AllModulesCommandTestDebuggee.java @@ -96,8 +96,7 @@ if (modName != null) { // JDWP reports unnamed modules, ignore them jdwpModuleNames.add(modName); } - // Assert the JDWP CANREAD and CLASSLOADER commands - assertCanRead(modId, modName); + // Assert the CLASSLOADER commands assertClassLoader(modId, modName); } @@ -134,13 +133,6 @@ } } - private void assertCanRead(long modId, String modName) throws IOException { - // Simple assert for the CANREAD command - JdwpCanReadReply reply = new JdwpCanReadCmd(modId, modId).send(channel); - assertReply(reply); - assertTrue(reply.canRead(), "canRead() reports false for reading from the same module '" + modName + "', moduleId=" + modId); - } - private void assertClassLoader(long modId, String modName) throws IOException { // Verify that the module classloader id is valid JdwpClassLoaderReply reply = new JdwpClassLoaderCmd(modId).send(channel);
--- a/hotspot/test/serviceability/jdwp/JdwpCanReadCmd.java Thu Dec 01 21:40:21 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * The JDWP CANREAD command - */ -public class JdwpCanReadCmd extends JdwpCmd<JdwpCanReadReply> { - - public JdwpCanReadCmd(long modId, long srcModId) { - super(3, 18, JdwpCanReadReply.class, 2 * refLen()); - putRefId(modId); - putRefId(srcModId); - } - -}
--- a/hotspot/test/serviceability/jdwp/JdwpCanReadReply.java Thu Dec 01 21:40:21 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -import java.io.DataInputStream; -import java.io.IOException; - -/** - * The reply to the JDWP CANREAD command - */ -public class JdwpCanReadReply extends JdwpReply { - - private boolean canRead; - - protected void parseData(DataInputStream ds) throws IOException { - canRead = (ds.read() != 0); - } - - public boolean canRead() { - return canRead; - } - -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleExportsAndOpens/MyPackage/AddModuleExportsAndOpensTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package MyPackage; + +/** + * @test + * @summary Verifies the JVMTI AddModuleExports and AddModuleOpens API + * @compile AddModuleExportsAndOpensTest.java + * @run main/othervm/native -agentlib:AddModuleExportsAndOpensTest MyPackage.AddModuleExportsAndOpensTest + */ + +import java.io.PrintStream; +import java.lang.reflect.Module; + +public class AddModuleExportsAndOpensTest { + + static { + try { + System.loadLibrary("AddModuleExportsAndOpensTest"); + } catch (UnsatisfiedLinkError ule) { + System.err.println("Could not load AddModuleExportsAndOpensTest library"); + System.err.println("java.library.path: " + + System.getProperty("java.library.path")); + throw ule; + } + } + + native static int check(Module baseModule, Module thisModule); + + public static void main(String args[]) { + Module baseModule = Object.class.getModule(); + Module thisModule = AddModuleExportsAndOpensTest.class.getClassLoader().getUnnamedModule(); + int status = check(baseModule, thisModule); + if (status != 0) { + throw new RuntimeException("Non-zero status returned from the agent: " + status); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleExportsAndOpens/libAddModuleExportsAndOpensTest.c Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include <stdio.h> +#include <string.h> +#include "jvmti.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef JNI_ENV_ARG + +#ifdef __cplusplus +#define JNI_ENV_ARG(x, y) y +#define JNI_ENV_PTR(x) x +#else +#define JNI_ENV_ARG(x,y) x, y +#define JNI_ENV_PTR(x) (*x) +#endif + +#endif + +#define TranslateError(err) "JVMTI error" + +#define PASSED 0 +#define FAILED 2 + +static const char *EXC_CNAME = "java/lang/Exception"; +static const char* MOD_CNAME = "Ljava/lang/reflect/Module;"; + +static jvmtiEnv *jvmti = NULL; +static jint result = PASSED; + +static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved); + +JNIEXPORT +jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT +jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT +jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { + return JNI_VERSION_1_8; +} + +static +jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { + jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti), + JVMTI_VERSION_9); + if (res != JNI_OK || jvmti == NULL) { + printf(" Error: wrong result of a valid call to GetEnv!\n"); + return JNI_ERR; + } + + return JNI_OK; +} + +static +jint throw_exc(JNIEnv *env, char *msg) { + jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME)); + + if (exc_class == NULL) { + printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME); + return -1; + } + return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg); +} + +static +jclass jlrM(JNIEnv *env) { + jclass cls = NULL; + + cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME)); + if (cls == NULL) { + printf(" Error in JNI FindClass: %s\n", MOD_CNAME); + } + return cls; +} + +jmethodID +get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) { + jmethodID method = NULL; + + method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig); + if (method == NULL) { + printf(" Error in JNI GetMethodID %s with signature %s", name, sig); + } + return method; +} + +static +jboolean is_exported(JNIEnv *env, jobject module, const char* pkg, jboolean open) { + static jmethodID mIsExported = NULL; + jstring jstr = NULL; + jboolean res = JNI_FALSE; + + if (mIsExported == NULL) { + const char* sign = "(Ljava/lang/String;)Z"; + const char* name = open ? "isOpen" : "isExported"; + mIsExported = get_method(env, jlrM(env), name, sign); + } + jstr = JNI_ENV_PTR(env)->NewStringUTF(JNI_ENV_ARG(env, pkg)); + res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module), + mIsExported, jstr); + return res; +} + +static +jboolean is_exported_to(JNIEnv *env, jobject module, const char* pkg, jobject to_module, + jboolean open) { + static jmethodID mIsExportedTo = NULL; + jstring jstr = NULL; + jboolean res = JNI_FALSE; + + if (mIsExportedTo == NULL) { + const char* sign = "(Ljava/lang/String;Ljava/lang/reflect/Module;)Z"; + const char* name = open ? "isOpen" : "isExported"; + mIsExportedTo = get_method(env, jlrM(env), name, sign); + } + jstr = JNI_ENV_PTR(env)->NewStringUTF(JNI_ENV_ARG(env, pkg)); + res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module), + mIsExportedTo, jstr, to_module); + return res; +} + +static +jvmtiError add_module_exports(jobject baseModule, const char* pkg, jobject thisModule, + jboolean open) { + jvmtiError err = JVMTI_ERROR_NONE; + if (open) { + err = (*jvmti)->AddModuleOpens(jvmti, baseModule, pkg, thisModule); + } else { + err = (*jvmti)->AddModuleExports(jvmti, baseModule, pkg, thisModule); + } + return err; +} + +static +jint check_add_module_exports(JNIEnv *env, + jclass cls, + jobject baseModule, + jobject thisModule, + jboolean open) { + static char strbuf[128] = { '\0' }; + jvmtiError err = JVMTI_ERROR_NONE; + const char* pkg = open ? "jdk.internal.math" + : "jdk.internal.misc"; + const char* bad_pkg = "my.bad.pkg"; + const char* jvmti_fn = open ? "AddModuleOpens" + : "AddModuleExports"; + jboolean exported = JNI_FALSE; + + // Export from NULL module + printf("Check #N1:\n"); + err = add_module_exports(NULL, pkg, thisModule, open); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#N1: jvmtiError from %s: %d\n", jvmti_fn, err); + throw_exc(env, "Check #N1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL"); + return FAILED; + } + + // Export NULL package + printf("Check #N2:\n"); + err = add_module_exports(baseModule, NULL, thisModule, open); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#N2: jvmtiError from %s: %d\n", jvmti_fn, err); + throw_exc(env, "Check #N2: failed to return JVMTI_ERROR_NULL_POINTER for pkg==NULL"); + return FAILED; + } + + // Export to NULL module + printf("Check #N3:\n"); + err = add_module_exports(baseModule, pkg, NULL, open); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#N3: jvmtiError from %s: %d\n", jvmti_fn, err); + throw_exc(env, "Check #N3: failed to return JVMTI_ERROR_NULL_POINTER for to_module==NULL"); + return FAILED; + } + + // Export a bad package + printf("Check #I0:\n"); + err = add_module_exports(baseModule, bad_pkg, thisModule, open); + if (err != JVMTI_ERROR_ILLEGAL_ARGUMENT) { + printf("#I0: jvmtiError from %s: %d\n", jvmti_fn, err); + throw_exc(env, "Check #I0: did not get expected JVMTI_ERROR_ILLEGAL_ARGUMENT for invalid package"); + return FAILED; + } + + // Export from invalid module (cls) + printf("Check #I1:\n"); + err = add_module_exports((jobject)cls, pkg, thisModule, open); + if (err != JVMTI_ERROR_INVALID_MODULE) { + printf("#I1: jvmtiError from %s: %d\n", jvmti_fn, err); + throw_exc(env, "Check #I1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module"); + return FAILED; + } + + // Export to invalid module (cls) + printf("Check #I2:\n"); + err = add_module_exports(baseModule, pkg, (jobject)cls, open); + if (err != JVMTI_ERROR_INVALID_MODULE) { + printf("#I2: jvmtiError from %s: %d\n", jvmti_fn, err); + throw_exc(env, "Check #I2: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid to_module"); + return FAILED; + } + + // Check the pkg is not exported from baseModule to thisModule + printf("Check #C0:\n"); + exported = is_exported_to(env, baseModule, pkg, thisModule, open); + if (exported != JNI_FALSE) { + sprintf(strbuf, "Check #C0: unexpected export of %s from base to this", pkg); + throw_exc(env, strbuf); + return FAILED; + } + + // Add export of the pkg from baseModule to thisModule + printf("Check #C1:\n"); + err = add_module_exports(baseModule, pkg, thisModule, open); + if (err != JVMTI_ERROR_NONE) { + printf("#C1: jvmtiError from %s: %d\n", jvmti_fn, err); + sprintf(strbuf, "Check #C1: error in add export of %s from base to this", pkg); + throw_exc(env, strbuf); + return FAILED; + } + + // Check the pkg is exported from baseModule to thisModule + printf("Check #C2:\n"); + exported = is_exported_to(env, baseModule, pkg, thisModule, open); + if (exported == JNI_FALSE) { + sprintf(strbuf, "Check #C2: failed to export %s from base to this", pkg); + throw_exc(env, strbuf); + return FAILED; + } + + // Check the pkg is not exported to all modules + printf("Check #C3:\n"); + exported = is_exported(env, baseModule, pkg, open); + if (exported != JNI_FALSE) { + sprintf(strbuf, "Check #C3: unexpected export of %s from base to all modules", pkg); + throw_exc(env, strbuf); + return FAILED; + } + return PASSED; +} + +JNIEXPORT jint JNICALL +Java_MyPackage_AddModuleExportsAndOpensTest_check(JNIEnv *env, + jclass cls, + jobject baseModule, + jobject thisModule) { + if (jvmti == NULL) { + throw_exc(env, "JVMTI client was not properly loaded!\n"); + return FAILED; + } + + printf("\n*** Checks for JVMTI AddModuleExports ***\n\n"); + result = check_add_module_exports(env, cls, baseModule, thisModule, JNI_FALSE); + if (result != PASSED) { + return result; + } + + printf("\n*** Checks for JVMTI AddModuleOpens ***\n\n"); + result = check_add_module_exports(env, cls, baseModule, thisModule, JNI_TRUE); + if (result != PASSED) { + return result; + } + return result; +} + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleReads/MyPackage/AddModuleReadsTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package MyPackage; + +/** + * @test + * @summary Verifies the JVMTI AddModuleReads API + * @compile AddModuleReadsTest.java + * @run main/othervm/native -agentlib:AddModuleReadsTest MyPackage.AddModuleReadsTest + */ + +import java.io.PrintStream; +import java.lang.instrument.Instrumentation; +import java.lang.reflect.Module; + +public class AddModuleReadsTest { + + static { + try { + System.loadLibrary("AddModuleReadsTest"); + } catch (UnsatisfiedLinkError ule) { + System.err.println("Could not load AddModuleReadsTest library"); + System.err.println("java.library.path: " + + System.getProperty("java.library.path")); + throw ule; + } + } + + native static int check(Module unnamed, Module base, Module instrument); + + public static void main(String args[]) { + Module unnamed = AddModuleReadsTest.class.getClassLoader().getUnnamedModule(); + Module base = Object.class.getModule(); + Module instrument = Instrumentation.class.getModule(); + int status = check(unnamed, base, instrument); + if (status != 0) { + throw new RuntimeException("Non-zero status returned from the agent: " + status); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleReads/libAddModuleReadsTest.c Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include <stdio.h> +#include <string.h> +#include "jvmti.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef JNI_ENV_ARG + +#ifdef __cplusplus +#define JNI_ENV_ARG(x, y) y +#define JNI_ENV_PTR(x) x +#else +#define JNI_ENV_ARG(x,y) x, y +#define JNI_ENV_PTR(x) (*x) +#endif + +#endif + +#define TranslateError(err) "JVMTI error" + +#define PASSED 0 +#define FAILED 2 + +static const char *EXC_CNAME = "java/lang/Exception"; +static const char* MOD_CNAME = "Ljava/lang/reflect/Module;"; + +static jvmtiEnv *jvmti = NULL; +static jint result = PASSED; + +static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved); + +JNIEXPORT +jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT +jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT +jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { + return JNI_VERSION_1_8; +} + +static +jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { + jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti), + JVMTI_VERSION_9); + if (res != JNI_OK || jvmti == NULL) { + printf(" Error: wrong result of a valid call to GetEnv!\n"); + return JNI_ERR; + } + return JNI_OK; +} + +static +jint throw_exc(JNIEnv *env, char *msg) { + jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME)); + + if (exc_class == NULL) { + printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME); + return -1; + } + return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg); +} + +static +jclass jlrM(JNIEnv *env) { + jclass cls = NULL; + + cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME)); + if (cls == NULL) { + printf(" Error in JNI FindClass: %s\n", MOD_CNAME); + } + return cls; +} + +jmethodID +get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) { + jmethodID method = NULL; + + method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig); + if (method == NULL) { + printf(" Error in JNI GetMethodID %s with signature %s", name, sig); + } + return method; +} + +static +jboolean can_module_read(JNIEnv *env, jobject module, jobject to_module) { + static jmethodID mCanRead = NULL; + jboolean res = JNI_FALSE; + + if (mCanRead == NULL) { + const char* sign = "(Ljava/lang/reflect/Module;)Z"; + mCanRead = get_method(env, jlrM(env), "canRead", sign); + } + res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module), + mCanRead, to_module); + return res; +} + +static +jint check_add_module_reads(JNIEnv *env, + jclass cls, + jobject unnamedModule, + jobject baseModule, + jobject instrModule) { + jvmtiError err = JVMTI_ERROR_NONE; + jboolean can = JNI_FALSE; + + // Add an invalid read edge from NULL module + printf("Check #N1:\n"); + err = (*jvmti)->AddModuleReads(jvmti, NULL, baseModule); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#N1: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #N1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL"); + return FAILED; + } + + // Add an invalid read edge to NULL module + printf("Check #N2:\n"); + err = (*jvmti)->AddModuleReads(jvmti, baseModule, NULL); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#N2: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #N2: failed to return JVMTI_ERROR_NULL_POINTER for to_module==NULL"); + return FAILED; + } + + // Add an invalid read edge from invalid module (cls) + printf("Check #I1:\n"); + err = (*jvmti)->AddModuleReads(jvmti, cls, baseModule); + if (err != JVMTI_ERROR_INVALID_MODULE) { + printf("#I1: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #I1: failed to return JVMTI_ERROR_INVALID_MODULE for module==cls"); + return FAILED; + } + + // Add an invalid read edge to invalid module (cls) + printf("Check #I2:\n"); + err = (*jvmti)->AddModuleReads(jvmti, baseModule, cls); + if (err != JVMTI_ERROR_INVALID_MODULE) { + printf("#I2: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #I2: failed to return JVMTI_ERROR_INVALID_MODULE for to_module==cls"); + return FAILED; + } + + // Check the edge baseModule->instrModule is absent + printf("Check #C0:\n"); + can = can_module_read(env, baseModule, instrModule); + if (can != JNI_FALSE) { + throw_exc(env, "Check #C0: read edge from base to instr is unexpected"); + return FAILED; + } + + // Add read edge baseModule->instrModule + printf("Check #C1:\n"); + err = (*jvmti)->AddModuleReads(jvmti, baseModule, instrModule); + if (err != JVMTI_ERROR_NONE) { + printf("#C1: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #C1: error in add reads from base to instr"); + return FAILED; + } + + // Check the read edge baseModule->instrModule is present now + printf("Check #C2:\n"); + can = can_module_read(env, baseModule, instrModule); + if (can == JNI_FALSE) { + throw_exc(env, "Check #C2: failed to add reads from base to instr"); + return FAILED; + } + + // Check the read edge baseModule->unnamedModule is absent + printf("Check #C3:\n"); + can = can_module_read(env, baseModule, unnamedModule); + if (can != JNI_FALSE) { + throw_exc(env, "Check #C3: got unexpected read edge from base to unnamed"); + return FAILED; + } + + // Add read edge baseModule->unnamedModule + printf("Check #C4:\n"); + err = (*jvmti)->AddModuleReads(jvmti, baseModule, unnamedModule); + if (err != JVMTI_ERROR_NONE) { + printf("#C4: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #C4: failed to ignore adding read edge from base to unnamed"); + return FAILED; + } + + // Check the read edge baseModule->unnamedModule is present now + printf("Check #C5:\n"); + can = can_module_read(env, baseModule, unnamedModule); + if (can == JNI_FALSE) { + throw_exc(env, "Check #C5: did not get expected read edge from base to unnamed"); + return FAILED; + } + + // Check the read edge unnamedModule->instrModule is absent + printf("Check #C6:\n"); + can = can_module_read(env, unnamedModule, instrModule); + if (can == JNI_FALSE) { + throw_exc(env, "Check #C6: did not get expected read edge from unnamed to instr"); + return FAILED; + } + + // Add read edge unnamedModule->instrModule + printf("Check #C7:\n"); + err = (*jvmti)->AddModuleReads(jvmti, unnamedModule, instrModule); + if (err != JVMTI_ERROR_NONE) { + printf("#C7: jvmtiError from AddModuleReads: %d\n", err); + throw_exc(env, "Check #C7: failed to ignore adding read edge from unnamed to instr"); + return FAILED; + } + return PASSED; +} + +JNIEXPORT jint JNICALL +Java_MyPackage_AddModuleReadsTest_check(JNIEnv *env, + jclass cls, + jobject unnamedModule, + jobject baseModule, + jobject instrModule) { + if (jvmti == NULL) { + throw_exc(env, "JVMTI client was not properly loaded!\n"); + return FAILED; + } + + printf("\n*** Checks for JVMTI AddModuleReads ***\n\n"); + result = check_add_module_reads(env, cls, unnamedModule, baseModule, instrModule); + if (result != PASSED) { + return result; + } + return result; +} + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/MyPackage/AddModuleUsesAndProvidesTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package MyPackage; + +/** + * @test + * @summary Basic test for JVMTI AddModuleUses and AddModuleProvides + * @build java.base/java.lang.TestProvider + * java.base/jdk.internal.test.TestProviderImpl + * @compile AddModuleUsesAndProvidesTest.java + * @run main/othervm/native -agentlib:AddModuleUsesAndProvidesTest MyPackage.AddModuleUsesAndProvidesTest + */ + +import java.io.PrintStream; +import java.lang.TestProvider; +import java.lang.reflect.Module; + +public class AddModuleUsesAndProvidesTest { + + static { + try { + System.loadLibrary("AddModuleUsesAndProvidesTest"); + } catch (UnsatisfiedLinkError ule) { + System.err.println("Could not load AddModuleUsesAndProvidesTest library"); + System.err.println("java.library.path: " + + System.getProperty("java.library.path")); + throw ule; + } + } + + native static int checkUses(Module baseModule, Class<?> service); + native static int checkProvides(Module baseModule, Class<?> service, Class<?> serviceImpl); + + public static void main(String args[]) throws Exception { + Module baseModule = Object.class.getModule(); + Class<?> service = TestProvider.class; + Class<?> serviceImpl = Class.forName("jdk.internal.test.TestProviderImpl"); + + System.out.println("\n*** Checks for JVMTI AddModuleUses ***\n"); + + int status = checkUses(baseModule, service); + if (status != 0) { + throw new RuntimeException("Non-zero status returned from the agent: " + status); + } + + System.out.println("\n*** Checks for JVMTI AddModuleProvides ***\n"); + + System.out.println("Check #PC1:"); + if (TestProvider.providers().iterator().hasNext()) { + throw new RuntimeException("Check #PC1: Unexpectedly service is provided"); + } + + status = checkProvides(baseModule, service, serviceImpl); + if (status != 0) { + throw new RuntimeException("Non-zero status returned from the agent: " + status); + } + + System.out.println("Check #PC3:"); + if (!TestProvider.providers().iterator().hasNext()) { + throw new RuntimeException("Check #PC3: Unexpectedly service is not provided"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/MyPackage/java.base/java/lang/TestProvider.java Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang; + +import java.util.ServiceLoader; + +public interface TestProvider { + public static Iterable<TestProvider> providers() { + return ServiceLoader.load(TestProvider.class); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/MyPackage/java.base/jdk/internal/test/TestProviderImpl.java Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.internal.test; + +import java.lang.TestProvider; + +public class TestProviderImpl implements TestProvider { + public TestProviderImpl() { } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/libAddModuleUsesAndProvidesTest.c Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include <stdio.h> +#include <string.h> +#include "jvmti.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef JNI_ENV_ARG + +#ifdef __cplusplus +#define JNI_ENV_ARG(x, y) y +#define JNI_ENV_PTR(x) x +#else +#define JNI_ENV_ARG(x,y) x, y +#define JNI_ENV_PTR(x) (*x) +#endif + +#endif + +#define TranslateError(err) "JVMTI error" + +#define PASSED 0 +#define FAILED 2 + +static const char *EXC_CNAME = "java/lang/Exception"; +static const char* MOD_CNAME = "Ljava/lang/reflect/Module;"; + +static jvmtiEnv *jvmti = NULL; +static jint result = PASSED; + +static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved); + +JNIEXPORT +jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT +jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT +jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { + return JNI_VERSION_1_8; +} + +static +jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { + jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti), + JVMTI_VERSION_9); + if (res != JNI_OK || jvmti == NULL) { + printf(" Error: wrong result of a valid call to GetEnv!\n"); + return JNI_ERR; + } + + return JNI_OK; +} + +static +jint throw_exc(JNIEnv *env, char *msg) { + jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME)); + + if (exc_class == NULL) { + printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME); + return -1; + } + return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg); +} + +static +jclass jlrM(JNIEnv *env) { + jclass cls = NULL; + + cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME)); + if (cls == NULL) { + printf(" Error in JNI FindClass: %s\n", MOD_CNAME); + } + return cls; +} + +jmethodID +get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) { + jmethodID method = NULL; + + method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig); + if (method == NULL) { + printf(" Error in JNI GetMethodID %s with signature %s", name, sig); + } + return method; +} + +static +jboolean can_use_service(JNIEnv *env, jobject module, jclass service) { + static jmethodID mCanUse = NULL; + jboolean res = JNI_FALSE; + + if (mCanUse == NULL) { + const char* sign = "(Ljava/lang/Class;)Z"; + mCanUse = get_method(env, jlrM(env), "canUse", sign); + } + res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module), + mCanUse, service); + return res; +} + +JNIEXPORT jint JNICALL +Java_MyPackage_AddModuleUsesAndProvidesTest_checkUses(JNIEnv *env, + jclass cls, + jobject baseModule, + jclass service) { + jvmtiError err = JVMTI_ERROR_NONE; + jboolean used = JNI_FALSE; + + // Add a service to use to NULL module + printf("Check #UN1:\n"); + err = (*jvmti)->AddModuleUses(jvmti, NULL, service); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#UN1: jvmtiError from AddModuleUses: %d\n", err); + throw_exc(env, "Check #UN1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL"); + return FAILED; + } + + // Add NULL service to use to baseModule + printf("Check #UN2:\n"); + err = (*jvmti)->AddModuleUses(jvmti, baseModule, NULL); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#UN2: jvmtiError from AddModuleUses: %d\n", err); + throw_exc(env, "Check #UN2: failed to return JVMTI_ERROR_NULL_POINTER for service==NULL"); + return FAILED; + } + + // Add service to use to invalid module (cls) + printf("Check #UI1:\n"); + err = (*jvmti)->AddModuleUses(jvmti, (jobject)cls, service); + if (err != JVMTI_ERROR_INVALID_MODULE) { + printf("#UI1: jvmtiError from AddModuleUses: %d\n", err); + throw_exc(env, "Check #UI1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module"); + return FAILED; + } + + // Add invalid service (thisModule) to use to baseModule + printf("Check #UI2:\n"); + err = (*jvmti)->AddModuleUses(jvmti, baseModule, baseModule); + if (err != JVMTI_ERROR_INVALID_CLASS) { + printf("#UI2: jvmtiError from AddModuleUses: %d\n", err); + throw_exc(env, "Check #UI2: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid service"); + return FAILED; + } + + // Check if the service can not be used + printf("Check #UC1:\n"); + used = can_use_service(env, baseModule, service); + if (used != JNI_FALSE) { + throw_exc(env, "Check #UC1: unexpected use of service"); + return FAILED; + } + + // Add uses of a correct service + printf("Check #UC2:\n"); + err = (*jvmti)->AddModuleUses(jvmti, baseModule, service); + if (err != JVMTI_ERROR_NONE) { + printf("#UC2: jvmtiError from AddModuleUses: %d\n", err); + throw_exc(env, "Check #UC2: got unexpected JVMTI error"); + return FAILED; + } + + // Check if the service can not be used + printf("Check #UC3:\n"); + used = can_use_service(env, baseModule, service); + if (used == JNI_FALSE) { + throw_exc(env, "Check #UC3: service can not be used unexpectedly"); + return FAILED; + } + fflush(0); + return PASSED; +} + +JNIEXPORT jint JNICALL +Java_MyPackage_AddModuleUsesAndProvidesTest_checkProvides(JNIEnv *env, + jclass cls, + jobject baseModule, + jclass service, + jclass serviceImpl) { + jvmtiError err = JVMTI_ERROR_NONE; + jboolean provided = JNI_FALSE; + + // Add provides to NULL module + printf("Check #PN1:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, NULL, service, serviceImpl); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#PN1: jvmtiError from AddModuleProvides: %d\n", err); + throw_exc(env, "Check #PN1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL"); + return FAILED; + } + + // Add provides with NULL service + printf("Check #PN2:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, baseModule, NULL, serviceImpl); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#PN2: jvmtiError from AddModuleProvides: %d\n", err); + throw_exc(env, "Check #PN2: failed to return JVMTI_ERROR_NULL_POINTER for service==NULL"); + return FAILED; + } + + // Add provides with NULL serviceImpl + printf("Check #PN3:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, NULL); + if (err != JVMTI_ERROR_NULL_POINTER) { + printf("#PN3: jvmtiError from AddModuleProvides: %d\n", err); + throw_exc(env, "Check #PN3: failed to return JVMTI_ERROR_NULL_POINTER for serviceImpl==NULL"); + return FAILED; + } + + // Add provides to invalid module (cls) + printf("Check #PI1:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, (jobject)cls, service, serviceImpl); + if (err != JVMTI_ERROR_INVALID_MODULE) { + printf("#PI1: jvmtiError from AddModuleProvides: %d\n", err); + throw_exc(env, "Check #PI1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module"); + return FAILED; + } + + // Add provides with invalid service (baseModule) + printf("Check #PI2:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, baseModule, baseModule, serviceImpl); + if (err != JVMTI_ERROR_INVALID_CLASS) { + printf("#PI2: jvmtiError from AddModuleProvides: %d\n", err); + throw_exc(env, "Check #PI2: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid service"); + return FAILED; + } + + // Add provides with invalid serviceImpl (baseModule) + printf("Check #PI3:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, baseModule); + if (err != JVMTI_ERROR_INVALID_CLASS) { + printf("#PI3: jvmtiError from AddModuleProvides: %d\n", err); + throw_exc(env, "Check #PI3: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid serviceImpl"); + return FAILED; + } + + // Add provides to baseModule with correct service and serviceImpl + printf("Check #PC2:\n"); + err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, serviceImpl); + if (err != JVMTI_ERROR_NONE) { + printf("#PC2: jvmtiError from AddModuleExports: %d\n", err); + throw_exc(env, "Check #PC2: error in add provides to baseModule with correct service and serviceImpl"); + return FAILED; + } + fflush(0); + return PASSED; +} + +#ifdef __cplusplus +} +#endif
--- a/hotspot/test/serviceability/jvmti/GetModulesInfo/JvmtiGetAllModulesTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/serviceability/jvmti/GetModulesInfo/JvmtiGetAllModulesTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -72,8 +72,7 @@ // Load a new named module ModuleDescriptor descriptor - = new ModuleDescriptor.Builder(MY_MODULE_NAME) - .build(); + = ModuleDescriptor.module(MY_MODULE_NAME).build(); ModuleFinder finder = finderOf(descriptor); ClassLoader loader = new ClassLoader() {}; Configuration parent = Layer.boot().configuration();
--- a/hotspot/test/serviceability/sa/TestInstanceKlassSize.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/serviceability/sa/TestInstanceKlassSize.java Wed Jul 05 22:32:17 2017 +0200 @@ -46,6 +46,7 @@ * @library /test/lib * @modules java.base/jdk.internal.misc * @compile -XDignore.symbol.file=true + * --add-modules=jdk.hotspot.agent * --add-exports=jdk.hotspot.agent/sun.jvm.hotspot=ALL-UNNAMED * --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.utilities=ALL-UNNAMED * --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.oops=ALL-UNNAMED
--- a/hotspot/test/serviceability/sa/TestInstanceKlassSizeForInterface.java Thu Dec 01 21:40:21 2016 +0000 +++ b/hotspot/test/serviceability/sa/TestInstanceKlassSizeForInterface.java Wed Jul 05 22:32:17 2017 +0200 @@ -39,6 +39,7 @@ * @library /test/lib * @modules java.base/jdk.internal.misc * @compile -XDignore.symbol.file=true + * --add-modules=jdk.hotspot.agent * --add-exports=jdk.hotspot.agent/sun.jvm.hotspot=ALL-UNNAMED * --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.utilities=ALL-UNNAMED * --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.oops=ALL-UNNAMED
--- a/jaxp/.hgignore Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/.hgignore Wed Jul 05 22:32:17 2017 +0200 @@ -4,4 +4,3 @@ ^drop_included/ ^webrev /nbproject/private/ -^.hgtip
--- a/jaxp/.hgtags Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/.hgtags Wed Jul 05 22:32:17 2017 +0200 @@ -389,3 +389,4 @@ 99be33734ff62b75116b1202d49a4d4e1bda4226 jdk-9+144 71558b38bad786f11350790cef7d2c6409813e91 jdk-9+145 09eda28b98e4b9cae1d29e94f0cf1a01cc42c207 jdk-9+146 +149559dd882ddca2c78355641a46db9138b12763 jdk-9+147
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java Wed Jul 05 22:32:17 2017 +0200 @@ -471,8 +471,7 @@ String pn = _tfactory.getPackageName(); assert pn != null && pn.length() > 0; - ModuleDescriptor descriptor - = new ModuleDescriptor.Builder(mn) + ModuleDescriptor descriptor = ModuleDescriptor.module(mn) .requires("java.xml") .exports(pn) .build();
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java Wed Jul 05 22:32:17 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -607,7 +607,8 @@ //get the new scanner state to old scanner's previous state fScanner.reset(fPropertyManager); fScanner.setPropertyManager(fPropertyManager); - fEntityScanner = (XMLEntityScanner)fEntityManager.getEntityScanner() ; + fEntityScanner = fEntityManager.getEntityScanner(); + fEntityScanner.registerListener(fScanner); fEntityManager.fCurrentEntity.mayReadChunks = true; fScanner.setScannerState(XMLEvent.START_DOCUMENT);
--- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -30,6 +30,7 @@ import java.util.GregorianCalendar; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl; /** * Factory that creates new {@code javax.xml.datatype} {@code Object}s that map XML to/from Java {@code Object}s. @@ -136,6 +137,20 @@ } /** + * Creates a new instance of the {@code DatatypeFactory} {@linkplain + * #DATATYPEFACTORY_IMPLEMENTATION_CLASS builtin system-default + * implementation}. + * + * @return A new instance of the {@code DatatypeFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static DatatypeFactory newDefaultInstance() { + return new DatatypeFactoryImpl(); + } + + /** * Obtain a new instance of a {@code DatatypeFactory}. * * <p>The implementation resolution mechanisms are <a href="#DatatypeFactory.newInstance">defined</a> in this
--- a/jaxp/src/java.xml/share/classes/javax/xml/parsers/DocumentBuilderFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/parsers/DocumentBuilderFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,6 +25,7 @@ package javax.xml.parsers; +import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl; import javax.xml.validation.Schema; /** @@ -54,6 +55,19 @@ } /** + * Creates a new instance of the {@code DocumentBuilderFactory} builtin + * system-default implementation. + * + * @return A new instance of the {@code DocumentBuilderFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static DocumentBuilderFactory newDefaultInstance() { + return new DocumentBuilderFactoryImpl(); + } + + /** * Obtain a new instance of a * {@code DocumentBuilderFactory}. This static method creates * a new factory instance. @@ -93,7 +107,8 @@ * </li> * <li> * <p> - * Otherwise, the system-default implementation is returned. + * Otherwise, the {@linkplain #newDefaultInstance() system-default} + * implementation is returned. * </li> * </ul> *
--- a/jaxp/src/java.xml/share/classes/javax/xml/parsers/SAXParserFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/parsers/SAXParserFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,6 +25,7 @@ package javax.xml.parsers; +import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; import javax.xml.validation.Schema; import org.xml.sax.SAXException; import org.xml.sax.SAXNotRecognizedException; @@ -59,6 +60,19 @@ } /** + * Creates a new instance of the {@code SAXParserFactory} builtin + * system-default implementation. + * + * @return A new instance of the {@code SAXParserFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static SAXParserFactory newDefaultInstance() { + return new SAXParserFactoryImpl(); + } + + /** * Obtain a new instance of a {@code SAXParserFactory}. This * static method creates a new factory instance * This method uses the following ordered lookup procedure to determine @@ -97,7 +111,8 @@ * </li> * <li> * <p> - * Otherwise the system-default implementation is returned. + * Otherwise, the {@linkplain #newDefaultInstance() system-default} + * implementation is returned. * </li> * </ul> *
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,6 +27,7 @@ */ package javax.xml.stream; +import com.sun.xml.internal.stream.events.XMLEventFactoryImpl; import java.util.Iterator; import javax.xml.namespace.NamespaceContext; import javax.xml.namespace.QName; @@ -54,6 +55,19 @@ /** + * Creates a new instance of the {@code XMLEventFactory} builtin + * system-default implementation. + * + * @return A new instance of the {@code XMLEventFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static XMLEventFactory newDefaultFactory() { + return new XMLEventFactoryImpl(); + } + + /** * Creates a new instance of the factory in exactly the same manner as the * {@link #newFactory()} method. * @throws FactoryConfigurationError if an instance of this factory cannot be loaded @@ -108,7 +122,8 @@ * </li> * <li> * <p> - * Otherwise, the system-default implementation is returned. + * Otherwise, the {@linkplain #newDefaultFactory() system-default} + * implementation is returned. * </li> * </ul> * <p>
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,6 +28,7 @@ package javax.xml.stream; +import com.sun.xml.internal.stream.XMLInputFactoryImpl; import javax.xml.stream.util.XMLEventAllocator; import javax.xml.transform.Source; @@ -144,6 +145,19 @@ protected XMLInputFactory(){} /** + * Creates a new instance of the {@code XMLInputFactory} builtin + * system-default implementation. + * + * @return A new instance of the {@code XMLInputFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static XMLInputFactory newDefaultFactory() { + return new XMLInputFactoryImpl(); + } + + /** * Creates a new instance of the factory in exactly the same manner as the * {@link #newFactory()} method. * @throws FactoryConfigurationError if an instance of this factory cannot be loaded @@ -195,7 +209,8 @@ * ClassLoader#getSystemClassLoader() system class loader} will be used. * </li> * <li> - * <p>Otherwise, the system-default implementation is returned. + * <p>Otherwise, the {@linkplain #newDefaultFactory() system-default} + * implementation is returned. * </li> * </ul> * <p>
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,6 +28,7 @@ package javax.xml.stream; +import com.sun.xml.internal.stream.XMLOutputFactoryImpl; import javax.xml.transform.Result; /** @@ -121,6 +122,19 @@ protected XMLOutputFactory(){} /** + * Creates a new instance of the {@code XMLOutputFactory} builtin + * system-default implementation. + * + * @return A new instance of the {@code XMLOutputFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static XMLOutputFactory newDefaultFactory() { + return new XMLOutputFactoryImpl(); + } + + /** * Creates a new instance of the factory in exactly the same manner as the * {@link #newFactory()} method. * @throws FactoryConfigurationError if an instance of this factory cannot be loaded @@ -175,7 +189,8 @@ * </li> * <li> * <p> - * Otherwise, the system-default implementation is returned. + * Otherwise, the {@linkplain #newDefaultFactory() system-default} + * implementation is returned. * </li> * </ul> * <p>
--- a/jaxp/src/java.xml/share/classes/javax/xml/transform/TransformerFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/transform/TransformerFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,6 +25,8 @@ package javax.xml.transform; +import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; + /** * <p>A TransformerFactory instance can be used to create * {@link javax.xml.transform.Transformer} and @@ -51,6 +53,19 @@ /** + * Creates a new instance of the {@code TransformerFactory} builtin + * system-default implementation. + * + * @return A new instance of the {@code TransformerFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static TransformerFactory newDefaultInstance() { + return TransformerFactoryImpl.newTransformerFactoryNoServiceLoader(); + } + + /** * Obtain a new instance of a {@code TransformerFactory}. * This static method creates a new factory instance. * <p> @@ -89,7 +104,8 @@ * </li> * <li> * <p> - * Otherwise, the system-default implementation is returned. + * Otherwise, the {@linkplain #newDefaultInstance() system-default} + * implementation is returned. * </li> * </ul> *
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,6 +25,7 @@ package javax.xml.validation; +import com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory; import java.io.File; import java.net.URL; import javax.xml.transform.Source; @@ -124,6 +125,24 @@ } /** + * Creates a new instance of the {@code SchemaFactory} builtin + * system-default implementation. + * + * @implSpec The {@code SchemaFactory} builtin + * system-default implementation is only required to support the + * <a href="http://www.w3.org/TR/xmlschema-1">W3C XML Schema 1.0</a>, + * but may support additional <a href="#schemaLanguage">schema languages</a>. + * + * @return A new instance of the {@code SchemaFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static SchemaFactory newDefaultInstance() { + return XMLSchemaFactory.newXMLSchemaFactoryNoServiceLoader(); + } + + /** * Lookup an implementation of the {@code SchemaFactory} that supports the specified * schema language and return it. * @@ -179,7 +198,8 @@ * <li> * <p> * Platform default {@code SchemaFactory} is located - * in a implementation specific way. There must be a platform default + * in an implementation specific way. There must be a + * {@linkplain #newDefaultInstance() platform default} * {@code SchemaFactory} for W3C XML Schema. * </li> * </ol>
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathFactory.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathFactory.java Wed Jul 05 22:32:17 2017 +0200 @@ -25,6 +25,8 @@ package javax.xml.xpath; +import com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl; + /** * <p>An {@code XPathFactory} instance can be used to create * {@link javax.xml.xpath.XPath} objects.</p> @@ -74,6 +76,25 @@ } /** + * Creates a new instance of the {@code XPathFactory} builtin + * system-default implementation. + * + * @implSpec The {@code XPathFactory} builtin + * system-default implementation is only required to support the + * {@link #DEFAULT_OBJECT_MODEL_URI default object model}, the + * {@linkplain org.w3c.dom W3C DOM}, but may support additional + * object models. + * + * @return A new instance of the {@code XPathFactory} builtin + * system-default implementation. + * + * @since 9 + */ + public static XPathFactory newDefaultInstance() { + return XPathFactoryImpl.newXPathFactoryNoServiceLoader(); + } + + /** * <p>Get a new {@code XPathFactory} instance using the default object model, * {@link #DEFAULT_OBJECT_MODEL_URI}, * the W3C DOM.</p> @@ -153,8 +174,11 @@ * </li> * <li> * <p> - * Platform default {@code XPathFactory} is located in a platform specific way. - * There must be a platform default XPathFactory for the W3C DOM, i.e. {@link #DEFAULT_OBJECT_MODEL_URI}. + * Platform default {@code XPathFactory} is located in a platform + * specific way. + * There must be a {@linkplain #newDefaultInstance() platform default} + * {@code XPathFactory} for the W3C DOM, i.e. + * {@link #DEFAULT_OBJECT_MODEL_URI}. * </li> * </ol> * <p>If everything fails, an {@code XPathFactoryConfigurationException} will be thrown.
--- a/jaxp/src/jdk.xml.dom/share/classes/module-info.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/src/jdk.xml.dom/share/classes/module-info.java Wed Jul 05 22:32:17 2017 +0200 @@ -24,7 +24,7 @@ */ module jdk.xml.dom { - requires public java.xml; + requires transitive java.xml; exports org.w3c.dom.css; exports org.w3c.dom.html; exports org.w3c.dom.stylesheets;
--- a/jaxp/test/TEST.ROOT Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/TEST.ROOT Wed Jul 05 22:32:17 2017 +0200 @@ -23,7 +23,7 @@ groups=TEST.groups # Minimum jtreg version -requiredVersion=4.2 b03 +requiredVersion=4.2 b04 # Use new module options useNewOptions=true
--- a/jaxp/test/javax/xml/jaxp/functional/catalog/DeferFeatureTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/catalog/DeferFeatureTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -45,6 +45,7 @@ * @test * @bug 8077931 * @library /javax/xml/jaxp/libs + * @modules java.xml/javax.xml.catalog:open * @run testng/othervm -DrunSecMngr=true catalog.DeferFeatureTest * @run testng/othervm catalog.DeferFeatureTest * @summary This case tests whether the catalogs specified in delegateSystem,
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/datatype/ptests/FactoryNewInstanceTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/datatype/ptests/FactoryNewInstanceTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -24,6 +24,9 @@ package javax.xml.datatype.ptests; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; @@ -37,6 +40,7 @@ /* * @test + * @bug 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.datatype.ptests.FactoryNewInstanceTest * @run testng/othervm javax.xml.datatype.ptests.FactoryNewInstanceTest @@ -45,13 +49,30 @@ @Listeners({jaxp.library.BasePolicy.class}) public class FactoryNewInstanceTest { - private static final String DATATYPE_FACTORY_CLASSNAME = "com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl"; + private static final String DEFAULT_IMPL_CLASS = + "com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl"; + private static final String DATATYPE_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; @DataProvider(name = "parameters") public Object[][] getValidateParameters() { return new Object[][] { { DATATYPE_FACTORY_CLASSNAME, null }, { DATATYPE_FACTORY_CLASSNAME, this.getClass().getClassLoader() } }; } + /** + * Test if newDefaultInstance() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + DatatypeFactory dtf1 = DatatypeFactory.newDefaultInstance(); + DatatypeFactory dtf2 = DatatypeFactory.newInstance(); + assertNotSame(dtf1, dtf2, "same instance returned:"); + assertSame(dtf1.getClass(), dtf2.getClass(), + "unexpected class mismatch for newDefaultInstance():"); + assertEquals(dtf1.getClass().getName(), DEFAULT_IMPL_CLASS); + } + /* * test for DatatypeFactory.newInstance(java.lang.String factoryClassName, * java.lang.ClassLoader classLoader) factoryClassName points to correct
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/parsers/ptests/DocumentBuilderFactoryTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/parsers/ptests/DocumentBuilderFactoryTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -34,6 +34,8 @@ import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertNotSame; import java.io.BufferedReader; import java.io.Closeable; @@ -66,7 +68,7 @@ import org.xml.sax.helpers.DefaultHandler; /** - * @bug 8080907 + * @bug 8080907 8169778 * This checks the methods of DocumentBuilderFactoryImpl. */ /* @@ -77,10 +79,17 @@ */ @Listeners({jaxp.library.FilePolicy.class}) public class DocumentBuilderFactoryTest { + + /** + * DocumentBuilderFactory builtin system-default implementation class name. + */ + private static final String DEFAULT_IMPL_CLASS = + "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"; + /** * DocumentBuilderFactory implementation class name. */ - private static final String DOCUMENT_BUILDER_FACTORY_CLASSNAME = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"; + private static final String DOCUMENT_BUILDER_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; /** * Provide valid DocumentBuilderFactory instantiation parameters. @@ -93,6 +102,21 @@ } /** + * Test if newDefaultInstance() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + DocumentBuilderFactory dbf1 = DocumentBuilderFactory.newDefaultInstance(); + DocumentBuilderFactory dbf2 = DocumentBuilderFactory.newInstance(); + assertNotSame(dbf1, dbf2, "same instance returned:"); + assertSame(dbf1.getClass(), dbf2.getClass(), + "unexpected class mismatch for newDefaultInstance():"); + assertEquals(dbf1.getClass().getName(), DEFAULT_IMPL_CLASS); + } + + /** * Test for DocumentBuilderFactory.newInstance(java.lang.String * factoryClassName, java.lang.ClassLoader classLoader) factoryClassName * points to correct implementation of
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/parsers/ptests/SAXParserFactTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/parsers/ptests/SAXParserFactTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -24,6 +24,9 @@ package javax.xml.parsers.ptests; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; import javax.xml.parsers.SAXParserFactory; @@ -35,6 +38,7 @@ */ /* * @test + * @bug 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.parsers.ptests.SAXParserFactTest * @run testng/othervm javax.xml.parsers.ptests.SAXParserFactTest @@ -48,6 +52,23 @@ private static final String VALIDATION = "http://xml.org/sax/features/validation"; private static final String EXTERNAL_G_ENTITIES = "http://xml.org/sax/features/external-general-entities"; private static final String EXTERNAL_P_ENTITIES = "http://xml.org/sax/features/external-parameter-entities"; + private static final String DEFAULT_IMPL_CLASS = + "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"; + + /** + * Test if newDefaultInstance() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + SAXParserFactory spf1 = SAXParserFactory.newDefaultInstance(); + SAXParserFactory spf2 = SAXParserFactory.newInstance(); + assertNotSame(spf1, spf2, "same instance returned:"); + assertSame(spf1.getClass(), spf2.getClass(), + "unexpected class mismatch for newDefaultInstance():"); + assertEquals(spf1.getClass().getName(), DEFAULT_IMPL_CLASS); + } /** * Test if newSAXParser() method returns SAXParser.
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/stream/ptests/XMLEventFactoryNewInstanceTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/stream/ptests/XMLEventFactoryNewInstanceTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,6 +27,9 @@ import static jaxp.library.JAXPTestUtilities.clearSystemProperty; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; import javax.xml.stream.XMLEventFactory; @@ -38,6 +41,7 @@ /* * @test + * @bug 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.stream.ptests.XMLEventFactoryNewInstanceTest * @run testng/othervm javax.xml.stream.ptests.XMLEventFactoryNewInstanceTest @@ -46,12 +50,31 @@ @Listeners({jaxp.library.BasePolicy.class}) public class XMLEventFactoryNewInstanceTest { - private static final String XMLEVENT_FACTORY_CLASSNAME = "com.sun.xml.internal.stream.events.XMLEventFactoryImpl"; - private static final String XMLEVENT_FACRORY_ID = "javax.xml.stream.XMLEventFactory"; + private static final String DEFAULT_IMPL_CLASS = + "com.sun.xml.internal.stream.events.XMLEventFactoryImpl"; + private static final String XMLEVENT_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; + private static final String XMLEVENT_FACTORY_ID = "javax.xml.stream.XMLEventFactory"; @DataProvider(name = "parameters") public Object[][] getValidateParameters() { - return new Object[][] { { XMLEVENT_FACRORY_ID, null }, { XMLEVENT_FACRORY_ID, this.getClass().getClassLoader() } }; + return new Object[][] { + { XMLEVENT_FACTORY_ID, null }, + { XMLEVENT_FACTORY_ID, this.getClass().getClassLoader() } }; + } + + /** + * Test if newDefaultFactory() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + XMLEventFactory ef1 = XMLEventFactory.newDefaultFactory(); + XMLEventFactory ef2 = XMLEventFactory.newFactory(); + assertNotSame(ef1, ef2, "same instance returned:"); + assertSame(ef1.getClass(), ef2.getClass(), + "unexpected class mismatch for newDefaultFactory():"); + assertEquals(ef1.getClass().getName(), DEFAULT_IMPL_CLASS); } /* @@ -62,12 +85,12 @@ */ @Test(dataProvider = "parameters") public void testNewFactory(String factoryId, ClassLoader classLoader) { - setSystemProperty(XMLEVENT_FACRORY_ID, XMLEVENT_FACTORY_CLASSNAME); + setSystemProperty(XMLEVENT_FACTORY_ID, XMLEVENT_FACTORY_CLASSNAME); try { XMLEventFactory xef = XMLEventFactory.newFactory(factoryId, classLoader); assertNotNull(xef); } finally { - clearSystemProperty(XMLEVENT_FACRORY_ID); + clearSystemProperty(XMLEVENT_FACTORY_ID); } }
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/stream/ptests/XMLInputFactoryNewInstanceTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/stream/ptests/XMLInputFactoryNewInstanceTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -27,6 +27,9 @@ import static jaxp.library.JAXPTestUtilities.clearSystemProperty; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; import javax.xml.stream.XMLInputFactory; @@ -38,6 +41,7 @@ /* * @test + * @bug 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.stream.ptests.XMLInputFactoryNewInstanceTest * @run testng/othervm javax.xml.stream.ptests.XMLInputFactoryNewInstanceTest @@ -46,12 +50,31 @@ @Listeners({jaxp.library.BasePolicy.class}) public class XMLInputFactoryNewInstanceTest { - private static final String XMLINPUT_FACTORY_CLASSNAME = "com.sun.xml.internal.stream.XMLInputFactoryImpl"; - private static final String XMLINPUT_FACRORY_ID = "javax.xml.stream.XMLInputFactory"; + private static final String DEFAULT_IMPL_CLASS = + "com.sun.xml.internal.stream.XMLInputFactoryImpl"; + private static final String XMLINPUT_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; + private static final String XMLINPUT_FACTORY_ID = "javax.xml.stream.XMLInputFactory"; @DataProvider(name = "parameters") public Object[][] getValidateParameters() { - return new Object[][] { { XMLINPUT_FACRORY_ID, null }, { XMLINPUT_FACRORY_ID, this.getClass().getClassLoader() } }; + return new Object[][] { + { XMLINPUT_FACTORY_ID, null }, + { XMLINPUT_FACTORY_ID, this.getClass().getClassLoader() } }; + } + + /** + * Test if newDefaultFactory() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + XMLInputFactory if1 = XMLInputFactory.newDefaultFactory(); + XMLInputFactory if2 = XMLInputFactory.newFactory(); + assertNotSame(if1, if2, "same instance returned:"); + assertSame(if1.getClass(), if2.getClass(), + "unexpected class mismatch for newDefaultFactory():"); + assertEquals(if1.getClass().getName(), DEFAULT_IMPL_CLASS); } /* @@ -62,12 +85,12 @@ */ @Test(dataProvider = "parameters") public void testNewFactory(String factoryId, ClassLoader classLoader) { - setSystemProperty(XMLINPUT_FACRORY_ID, XMLINPUT_FACTORY_CLASSNAME); + setSystemProperty(XMLINPUT_FACTORY_ID, XMLINPUT_FACTORY_CLASSNAME); try { XMLInputFactory xif = XMLInputFactory.newFactory(factoryId, classLoader); assertNotNull(xif); } finally { - clearSystemProperty(XMLINPUT_FACRORY_ID); + clearSystemProperty(XMLINPUT_FACTORY_ID); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/stream/ptests/XMLOutputFactoryNewInstanceTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javax.xml.stream.ptests; + +import static jaxp.library.JAXPTestUtilities.setSystemProperty; +import static jaxp.library.JAXPTestUtilities.clearSystemProperty; + +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; + +import javax.xml.stream.XMLOutputFactory; + +import jaxp.library.JAXPDataProvider; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Listeners; +import org.testng.annotations.Test; + +/* + * @test + * @bug 8169778 + * @library /javax/xml/jaxp/libs + * @run testng/othervm -DrunSecMngr=true javax.xml.stream.ptests.XMLOutputFactoryNewInstanceTest + * @run testng/othervm javax.xml.stream.ptests.XMLOutputFactoryNewInstanceTest + * @summary Tests for XMLOutputFactory.newFactory(factoryId , classLoader) + */ +@Listeners({jaxp.library.BasePolicy.class}) +public class XMLOutputFactoryNewInstanceTest { + + private static final String DEFAULT_IMPL_CLASS = + "com.sun.xml.internal.stream.XMLOutputFactoryImpl"; + private static final String XMLOUTPUT_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; + private static final String XMLOUTPUT_FACTORY_ID = "javax.xml.stream.XMLOutputFactory"; + + @DataProvider(name = "parameters") + public Object[][] getValidateParameters() { + return new Object[][] { + { XMLOUTPUT_FACTORY_ID, null }, + { XMLOUTPUT_FACTORY_ID, this.getClass().getClassLoader() } }; + } + + /** + * Test if newDefaultFactory() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + XMLOutputFactory of1 = XMLOutputFactory.newDefaultFactory(); + XMLOutputFactory of2 = XMLOutputFactory.newFactory(); + assertNotSame(of1, of2, "same instance returned:"); + assertSame(of1.getClass(), of2.getClass(), + "unexpected class mismatch for newDefaultFactory():"); + assertEquals(of1.getClass().getName(), DEFAULT_IMPL_CLASS); + } + + /* + * test for XMLOutputFactory.newFactory(java.lang.String factoryId, + * java.lang.ClassLoader classLoader) factoryClassName points to correct + * implementation of javax.xml.stream.XMLOutputFactory , should return + * newInstance of XMLOutputFactory + */ + @Test(dataProvider = "parameters") + public void testNewFactory(String factoryId, ClassLoader classLoader) { + setSystemProperty(XMLOUTPUT_FACTORY_ID, XMLOUTPUT_FACTORY_CLASSNAME); + try { + XMLOutputFactory xif = XMLOutputFactory.newFactory(factoryId, classLoader); + assertNotNull(xif); + } finally { + clearSystemProperty(XMLOUTPUT_FACTORY_ID); + } + } + + /* + * test for XMLOutputFactory.newFactory(java.lang.String factoryClassName, + * java.lang.ClassLoader classLoader) factoryClassName is null , should + * throw NullPointerException + */ + @Test(expectedExceptions = NullPointerException.class, dataProvider = "new-instance-neg", dataProviderClass = JAXPDataProvider.class) + public void testNewFactoryNeg(String factoryId, ClassLoader classLoader) { + XMLOutputFactory.newFactory(factoryId, classLoader); + } + +}
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/transform/ptests/TransformerFactoryTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/transform/ptests/TransformerFactoryTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,6 +28,9 @@ import static jaxp.library.JAXPTestUtilities.compareWithGold; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -55,6 +58,7 @@ */ /* * @test + * @bug 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.transform.ptests.TransformerFactoryTest * @run testng/othervm javax.xml.transform.ptests.TransformerFactoryTest @@ -62,9 +66,15 @@ @Listeners({jaxp.library.FilePolicy.class}) public class TransformerFactoryTest { /** + * TransformerFactory builtin system-default implementation class name. + */ + private static final String DEFAULT_IMPL_CLASS = + "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"; + + /** * TransformerFactory implementation class name. */ - private static final String TRANSFORMER_FACTORY_CLASSNAME = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"; + private static final String TRANSFORMER_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; /** * Provide valid TransformerFactory instantiation parameters. @@ -77,6 +87,21 @@ } /** + * Test if newDefaultInstance() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + TransformerFactory tf1 = TransformerFactory.newDefaultInstance(); + TransformerFactory tf2 = TransformerFactory.newInstance(); + assertNotSame(tf1, tf2, "same instance returned:"); + assertSame(tf1.getClass(), tf2.getClass(), + "unexpected class mismatch for newDefaultInstance():"); + assertEquals(tf1.getClass().getName(), DEFAULT_IMPL_CLASS); + } + + /** * Test for TransformerFactory.newInstance(java.lang.String * factoryClassName, java.lang.ClassLoader classLoader) factoryClassName * points to correct implementation of
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/validation/ptests/SchemaFactoryTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/validation/ptests/SchemaFactoryTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -28,6 +28,9 @@ import static org.testng.Assert.assertNull; import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.File; @@ -66,7 +69,7 @@ /* * @test - * @bug 8080907 + * @bug 8080907 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.validation.ptests.SchemaFactoryTest * @run testng/othervm javax.xml.validation.ptests.SchemaFactoryTest @@ -102,6 +105,25 @@ { W3C_XML_SCHEMA_NS_URI, SCHEMA_FACTORY_CLASSNAME, this.getClass().getClassLoader() } }; } + /** + * Test if newDefaultInstance() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + SchemaFactory sf1 = SchemaFactory.newDefaultInstance(); + SchemaFactory sf2 = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI); + assertNotSame(sf1, sf2, "same instance returned:"); + assertSame(sf1.getClass(), sf2.getClass(), + "unexpected class mismatch for newDefaultInstance():"); + assertEquals(sf1.getClass().getName(), DEFAULT_IMPL_CLASS); + assertTrue(sf1.isSchemaLanguageSupported(W3C_XML_SCHEMA_NS_URI), + "isSchemaLanguageSupported(W3C_XML_SCHEMA_NS_URI):"); + assertFalse(sf1.isSchemaLanguageSupported(UNRECOGNIZED_NAME), + "isSchemaLanguageSupported(UNRECOGNIZED_NAME):"); + } + /* * test for SchemaFactory.newInstance(java.lang.String schemaLanguage, * java.lang.String factoryClassName, java.lang.ClassLoader classLoader) @@ -394,7 +416,10 @@ private static final String UNRECOGNIZED_NAME = "http://xml.org/sax/features/namespace-prefixes"; - private static final String SCHEMA_FACTORY_CLASSNAME = "com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory"; + private static final String DEFAULT_IMPL_CLASS = + "com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory"; + + private static final String SCHEMA_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; private SchemaFactory sf; private XMLInputFactory ifac;
--- a/jaxp/test/javax/xml/jaxp/functional/javax/xml/xpath/ptests/XPathFactoryTest.java Thu Dec 01 21:40:21 2016 +0000 +++ b/jaxp/test/javax/xml/jaxp/functional/javax/xml/xpath/ptests/XPathFactoryTest.java Wed Jul 05 22:32:17 2017 +0200 @@ -24,7 +24,13 @@ package javax.xml.xpath.ptests; import static javax.xml.xpath.XPathConstants.DOM_OBJECT_MODEL; +import static javax.xml.xpath.XPathFactory.DEFAULT_OBJECT_MODEL_URI; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNotSame; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertFalse; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathFactory; @@ -41,6 +47,7 @@ */ /* * @test + * @bug 8169778 * @library /javax/xml/jaxp/libs * @run testng/othervm -DrunSecMngr=true javax.xml.xpath.ptests.XPathFactoryTest * @run testng/othervm javax.xml.xpath.ptests.XPathFactoryTest @@ -58,9 +65,15 @@ private static final String INVALID_URL = "http://java.sun.com/jaxp/xpath/dom1"; /** + * XPathFactory builtin system-default implementation class name. + */ + private static final String DEFAULT_IMPL_CLASS = + "com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl"; + + /** * XPathFactory implementation class name. */ - private static final String XPATH_FACTORY_CLASSNAME = "com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl"; + private static final String XPATH_FACTORY_CLASSNAME = DEFAULT_IMPL_CLASS; /** @@ -74,6 +87,25 @@ } /** + * Test if newDefaultInstance() method returns an instance + * of the expected factory. + * @throws Exception If any errors occur. + */ + @Test + public void testDefaultInstance() throws Exception { + XPathFactory xpf1 = XPathFactory.newDefaultInstance(); + XPathFactory xpf2 = XPathFactory.newInstance(DEFAULT_OBJECT_MODEL_URI); + assertNotSame(xpf1, xpf2, "same instance returned:"); + assertSame(xpf1.getClass(), xpf2.getClass(), + "unexpected class mismatch for newDefaultInstance():"); + assertEquals(xpf1.getClass().getName(), DEFAULT_IMPL_CLASS); + assertTrue(xpf1.isObjectModelSupported(DEFAULT_OBJECT_MODEL_URI), + "isObjectModelSupported(DEFAULT_OBJECT_MODEL_URI):"); + assertFalse(xpf1.isObjectModelSupported(INVALID_URL), + "isObjectModelSupported(INVALID_URL):"); + } + + /** * Test for XPathFactory.newInstance(java.lang.String uri, java.lang.String * factoryClassName, java.lang.ClassLoader classLoader) factoryClassName * points to correct implementation of javax.xml.xpath.XPathFactory , should
--- a/jaxp/test/javax/xml/jaxp/module/ServiceProviderTest/src/unnamed/Main.java Thu Dec