From 8a44e093dc3e192990fde8ab37ab08c737f06b39 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Tue, 23 Nov 2021 16:46:45 +0000 Subject: [PATCH] 8268725: jshell does not support the --enable-native-access option Reviewed-by: sundar --- .../jdk/internal/jshell/tool/JShellTool.java | 6 ++ .../jshell/tool/resources/l10n.properties | 2 + .../jshell/ToolEnableNativeAccessTest.java | 63 +++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 test/langtools/jdk/jshell/ToolEnableNativeAccessTest.java diff --git a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java index 532454b7cbcc1..b257b13236330 100644 --- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java @@ -274,6 +274,7 @@ private enum OptionKind { ADD_EXPORTS("--add-exports", false), ENABLE_PREVIEW("--enable-preview", true), SOURCE_RELEASE("-source", true, true, true, false, false), // virtual option, generated by --enable-preview + ENABLE_NATIVE_ACCESS("--enable-native-access", true, true, false, true, true), TO_COMPILER("-C", false, false, true, false, false), TO_REMOTE_VM("-R", false, false, false, true, false),; final String optionFlag; @@ -363,6 +364,7 @@ private class OptionParserBase { private final OptionSpec argAddModules = parser.accepts("add-modules").withRequiredArg(); private final OptionSpec argAddExports = parser.accepts("add-exports").withRequiredArg(); private final OptionSpecBuilder argEnablePreview = parser.accepts("enable-preview"); + private final OptionSpecBuilder argEnableNativeAccess = parser.accepts("enable-native-access"); private final NonOptionArgumentSpec argNonOptions = parser.nonOptions(); private Options opts = new Options(); @@ -471,6 +473,10 @@ Options parse(OptionSet options) { OptionKind.SOURCE_RELEASE.optionFlag, System.getProperty("java.specification.version"))); } + if (options.has(argEnableNativeAccess)) { + opts.addAll(OptionKind.ENABLE_NATIVE_ACCESS, List.of( + OptionKind.ENABLE_NATIVE_ACCESS.optionFlag, "ALL-UNNAMED")); + } if (failed) { exitCode = 1; diff --git a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties index dd21e32031786..8606527e557da 100644 --- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties @@ -207,6 +207,8 @@ where possible options include:\n\ \ --add-modules (,)*\n\ \ Specify modules to resolve, or all modules on the\n\ \ module path if is ALL-MODULE-PATHs\n\ +\ --enable-native-access\n\ +\ Allow code to run restricted native methods\n\ \ --enable-preview Allow code to depend on preview features of this release\n\ \ --startup One run replacement for the startup definitions\n\ \ --no-startup Do not run the startup definitions\n\ diff --git a/test/langtools/jdk/jshell/ToolEnableNativeAccessTest.java b/test/langtools/jdk/jshell/ToolEnableNativeAccessTest.java new file mode 100644 index 0000000000000..212301c0fd83e --- /dev/null +++ b/test/langtools/jdk/jshell/ToolEnableNativeAccessTest.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8268725 + * @summary Tests for the --enable-native-access option + * @modules jdk.jshell + * @run testng ToolEnableNativeAccessTest + */ + +import org.testng.annotations.Test; + +import static org.testng.Assert.assertTrue; + +public class ToolEnableNativeAccessTest extends ReplToolTesting { + + @Test + public void testOptionDebug() { + test( + (a) -> assertCommand(a, "/debug b", + "RemoteVM Options: []\n" + + "Compiler options: []"), + (a) -> assertCommand(a, "/env --enable-native-access", + "| Setting new options and restoring state."), + (a) -> assertCommandCheckOutput(a, "/debug b", s -> { + assertTrue(s.contains("RemoteVM Options: [--enable-native-access, ALL-UNNAMED]")); + assertTrue(s.contains("Compiler options: []")); + }) + ); + } + + @Test + public void testCommandLineFlag() { + test(new String[] {"--enable-native-access"}, + (a) -> assertCommandCheckOutput(a, "/debug b", s -> { + assertTrue(s.contains("RemoteVM Options: [--enable-native-access, ALL-UNNAMED]")); + assertTrue(s.contains("Compiler options: []")); + }) + ); + } + +}