From 2eb0898fef7b7fef7285b7ee1837b73336b9f7be Mon Sep 17 00:00:00 2001 From: Jaikiran Pai Date: Tue, 14 Oct 2025 06:10:09 +0000 Subject: [PATCH] 8367157: Remove jrunscript tool Reviewed-by: erikj, ayang, ihse, alanb --- make/modules/java.scripting/Java.gmk | 2 - make/modules/java.scripting/Launcher.gmk | 39 - .../com/sun/tools/script/shell/Main.java | 595 ----------- .../com/sun/tools/script/shell/init.js | 927 ------------------ .../tools/script/shell/messages.properties | 68 -- .../share/classes/module-info.java | 11 +- src/java.scripting/share/man/jrunscript.md | 141 --- test/jdk/TEST.groups | 4 +- .../jdk/sun/tools/jrunscript/CheckEngine.java | 36 - test/jdk/sun/tools/jrunscript/Hello.java | 34 - test/jdk/sun/tools/jrunscript/common.sh | 66 -- test/jdk/sun/tools/jrunscript/dash-e.out | 1 - test/jdk/sun/tools/jrunscript/dash-f.out | 1 - test/jdk/sun/tools/jrunscript/hello.js | 7 - .../sun/tools/jrunscript/jrunscript-DTest.sh | 55 -- .../tools/jrunscript/jrunscript-argsTest.sh | 60 -- .../sun/tools/jrunscript/jrunscript-cpTest.sh | 73 -- .../sun/tools/jrunscript/jrunscript-eTest.sh | 57 -- .../sun/tools/jrunscript/jrunscript-fTest.sh | 58 -- .../tools/jrunscript/jrunscript-helpTest.sh | 58 -- .../sun/tools/jrunscript/jrunscriptTest.sh | 62 -- test/jdk/sun/tools/jrunscript/repl.out | 7 - test/jdk/tools/launcher/HelpFlagsTest.java | 3 +- test/jdk/tools/launcher/VersionCheck.java | 3 +- 24 files changed, 4 insertions(+), 2364 deletions(-) delete mode 100644 make/modules/java.scripting/Launcher.gmk delete mode 100644 src/java.scripting/share/classes/com/sun/tools/script/shell/Main.java delete mode 100644 src/java.scripting/share/classes/com/sun/tools/script/shell/init.js delete mode 100644 src/java.scripting/share/classes/com/sun/tools/script/shell/messages.properties delete mode 100644 src/java.scripting/share/man/jrunscript.md delete mode 100644 test/jdk/sun/tools/jrunscript/CheckEngine.java delete mode 100644 test/jdk/sun/tools/jrunscript/Hello.java delete mode 100644 test/jdk/sun/tools/jrunscript/common.sh delete mode 100644 test/jdk/sun/tools/jrunscript/dash-e.out delete mode 100644 test/jdk/sun/tools/jrunscript/dash-f.out delete mode 100644 test/jdk/sun/tools/jrunscript/hello.js delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscript-DTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscript-argsTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscript-cpTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscript-eTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscript-fTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscript-helpTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/jrunscriptTest.sh delete mode 100644 test/jdk/sun/tools/jrunscript/repl.out diff --git a/make/modules/java.scripting/Java.gmk b/make/modules/java.scripting/Java.gmk index 1909ec1a2df..6e5ea0e2c73 100644 --- a/make/modules/java.scripting/Java.gmk +++ b/make/modules/java.scripting/Java.gmk @@ -27,7 +27,5 @@ DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' -COPY += .js -CLEAN += .properties ################################################################################ diff --git a/make/modules/java.scripting/Launcher.gmk b/make/modules/java.scripting/Launcher.gmk deleted file mode 100644 index ee6b93fbf2c..00000000000 --- a/make/modules/java.scripting/Launcher.gmk +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -################################################################################ - -include LauncherCommon.gmk - -################################################################################ -## Build jrunscript -################################################################################ - -$(eval $(call SetupBuildLauncher, jrunscript, \ - MAIN_CLASS := com.sun.tools.script.shell.Main, \ - JAVA_ARGS := --add-modules ALL-DEFAULT, \ -)) - -################################################################################ diff --git a/src/java.scripting/share/classes/com/sun/tools/script/shell/Main.java b/src/java.scripting/share/classes/com/sun/tools/script/shell/Main.java deleted file mode 100644 index 96fd6d010ac..00000000000 --- a/src/java.scripting/share/classes/com/sun/tools/script/shell/Main.java +++ /dev/null @@ -1,595 +0,0 @@ -/* - * Copyright (c) 2005, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.tools.script.shell; - -import java.io.*; -import java.net.*; -import java.nio.charset.Charset; -import java.text.*; -import java.util.*; -import javax.script.*; - -/** - * This is the main class for Java script shell. - */ -public class Main { - /** - * main entry point to the command line tool - * @param args command line argument array - */ - public static void main(String[] args) { - // print deprecation warning - getError().println(getMessage("deprecated.warning", - new Object[] { PROGRAM_NAME })); - - // parse command line options - String[] scriptArgs = processOptions(args); - - // process each script command - for (Command cmd : scripts) { - cmd.run(scriptArgs); - } - - System.exit(EXIT_SUCCESS); - } - - // Each -e or -f or interactive mode is represented - // by an instance of Command. - private static interface Command { - public void run(String[] arguments); - } - - /** - * Parses and processes command line options. - * @param args command line argument array - */ - private static String[] processOptions(String[] args) { - // current scripting language selected - String currentLanguage = DEFAULT_LANGUAGE; - // current script file encoding selected - String currentEncoding = null; - - // check for -classpath or -cp first - checkClassPath(args); - - // have we seen -e or -f ? - boolean seenScript = false; - // have we seen -f - already? - boolean seenStdin = false; - for (int i=0; i < args.length; i++) { - String arg = args[i]; - if (arg.equals("-classpath") || - arg.equals("-cp")) { - // handled already, just continue - i++; - continue; - } - - // collect non-option arguments and pass these as script arguments - if (!arg.startsWith("-")) { - int numScriptArgs; - int startScriptArg; - if (seenScript) { - // if we have seen -e or -f already all non-option arguments - // are passed as script arguments - numScriptArgs = args.length - i; - startScriptArg = i; - } else { - // if we have not seen -e or -f, first non-option argument - // is treated as script file name and rest of the non-option - // arguments are passed to script as script arguments - numScriptArgs = args.length - i - 1; - startScriptArg = i + 1; - ScriptEngine se = getScriptEngine(currentLanguage); - addFileSource(se, args[i], currentEncoding); - } - // collect script arguments and return to main - String[] result = new String[numScriptArgs]; - System.arraycopy(args, startScriptArg, result, 0, numScriptArgs); - return result; - } - - if (arg.startsWith("-D")) { - String value = arg.substring(2); - int eq = value.indexOf('='); - if (eq != -1) { - System.setProperty(value.substring(0, eq), - value.substring(eq + 1)); - } else { - if (!value.isEmpty()) { - System.setProperty(value, ""); - } else { - // do not allow empty property name - usage(EXIT_CMD_NO_PROPNAME); - } - } - continue; - } else if (arg.equals("-?") || - arg.equals("-h") || - arg.equals("--help") || - // -help: legacy. - arg.equals("-help")) { - usage(EXIT_SUCCESS); - } else if (arg.equals("-e")) { - seenScript = true; - if (++i == args.length) - usage(EXIT_CMD_NO_SCRIPT); - - ScriptEngine se = getScriptEngine(currentLanguage); - addStringSource(se, args[i]); - continue; - } else if (arg.equals("-encoding")) { - if (++i == args.length) - usage(EXIT_CMD_NO_ENCODING); - currentEncoding = args[i]; - continue; - } else if (arg.equals("-f")) { - seenScript = true; - if (++i == args.length) - usage(EXIT_CMD_NO_FILE); - ScriptEngine se = getScriptEngine(currentLanguage); - if (args[i].equals("-")) { - if (seenStdin) { - usage(EXIT_MULTIPLE_STDIN); - } else { - seenStdin = true; - } - addInteractiveMode(se); - } else { - addFileSource(se, args[i], currentEncoding); - } - continue; - } else if (arg.equals("-l")) { - if (++i == args.length) - usage(EXIT_CMD_NO_LANG); - currentLanguage = args[i]; - continue; - } else if (arg.equals("-q")) { - listScriptEngines(); - } - // some unknown option... - usage(EXIT_UNKNOWN_OPTION); - } - - if (! seenScript) { - ScriptEngine se = getScriptEngine(currentLanguage); - addInteractiveMode(se); - } - return new String[0]; - } - - /** - * Adds interactive mode Command - * @param se ScriptEngine to use in interactive mode. - */ - private static void addInteractiveMode(final ScriptEngine se) { - scripts.add(new Command() { - public void run(String[] args) { - setScriptArguments(se, args); - processSource(se, "-", null); - } - }); - } - - /** - * Adds script source file Command - * @param se ScriptEngine used to evaluate the script file - * @param fileName script file name - * @param encoding script file encoding - */ - private static void addFileSource(final ScriptEngine se, - final String fileName, - final String encoding) { - scripts.add(new Command() { - public void run(String[] args) { - setScriptArguments(se, args); - processSource(se, fileName, encoding); - } - }); - } - - /** - * Adds script string source Command - * @param se ScriptEngine to be used to evaluate the script string - * @param source Script source string - */ - private static void addStringSource(final ScriptEngine se, - final String source) { - scripts.add(new Command() { - public void run(String[] args) { - setScriptArguments(se, args); - String oldFile = setScriptFilename(se, ""); - try { - evaluateString(se, source); - } finally { - setScriptFilename(se, oldFile); - } - } - }); - } - - /** - * Prints list of script engines available and exits. - */ - private static void listScriptEngines() { - List factories = engineManager.getEngineFactories(); - for (ScriptEngineFactory factory: factories) { - getError().println(getMessage("engine.info", - new Object[] { factory.getLanguageName(), - factory.getLanguageVersion(), - factory.getEngineName(), - factory.getEngineVersion() - })); - } - System.exit(EXIT_SUCCESS); - } - - /** - * Processes a given source file or standard input. - * @param se ScriptEngine to be used to evaluate - * @param filename file name, can be null - * @param encoding script file encoding, can be null - */ - private static void processSource(ScriptEngine se, String filename, - String encoding) { - if (filename.equals("-")) { - Charset charset = Charset.forName(System.getProperty("stdin.encoding"), Charset.defaultCharset()); - BufferedReader in = new BufferedReader(new InputStreamReader(System.in, charset)); - boolean hitEOF = false; - String prompt = getPrompt(se); - se.put(ScriptEngine.FILENAME, ""); - while (!hitEOF) { - getError().print(prompt); - String source = ""; - try { - source = in.readLine(); - } catch (IOException ioe) { - getError().println(ioe.toString()); - } - if (source == null) { - hitEOF = true; - break; - } - Object res = evaluateString(se, source, false); - if (res != null) { - res = res.toString(); - if (res == null) { - res = "null"; - } - getError().println(res); - } - } - } else { - FileInputStream fis = null; - try { - fis = new FileInputStream(filename); - } catch (FileNotFoundException fnfe) { - getError().println(getMessage("file.not.found", - new Object[] { filename })); - System.exit(EXIT_FILE_NOT_FOUND); - } - evaluateStream(se, fis, filename, encoding); - } - } - - /** - * Evaluates given script source - * @param se ScriptEngine to evaluate the string - * @param script Script source string - * @param exitOnError whether to exit the process on script error - */ - private static Object evaluateString(ScriptEngine se, - String script, boolean exitOnError) { - try { - return se.eval(script); - } catch (ScriptException sexp) { - getError().println(getMessage("string.script.error", - new Object[] { sexp.getMessage() })); - if (exitOnError) - System.exit(EXIT_SCRIPT_ERROR); - } catch (Exception exp) { - exp.printStackTrace(getError()); - if (exitOnError) - System.exit(EXIT_SCRIPT_ERROR); - } - - return null; - } - - /** - * Evaluate script string source and exit on script error - * @param se ScriptEngine to evaluate the string - * @param script Script source string - */ - private static void evaluateString(ScriptEngine se, String script) { - evaluateString(se, script, true); - } - - /** - * Evaluates script from given reader - * @param se ScriptEngine to evaluate the string - * @param reader Reader from which is script is read - * @param name file name to report in error. - */ - private static Object evaluateReader(ScriptEngine se, - Reader reader, String name) { - String oldFilename = setScriptFilename(se, name); - try { - return se.eval(reader); - } catch (ScriptException sexp) { - getError().println(getMessage("file.script.error", - new Object[] { name, sexp.getMessage() })); - System.exit(EXIT_SCRIPT_ERROR); - } catch (Exception exp) { - exp.printStackTrace(getError()); - System.exit(EXIT_SCRIPT_ERROR); - } finally { - setScriptFilename(se, oldFilename); - } - return null; - } - - /** - * Evaluates given input stream - * @param se ScriptEngine to evaluate the string - * @param is InputStream from which script is read - * @param name file name to report in error - */ - private static Object evaluateStream(ScriptEngine se, - InputStream is, String name, - String encoding) { - BufferedReader reader = null; - if (encoding != null) { - try { - reader = new BufferedReader(new InputStreamReader(is, - encoding)); - } catch (UnsupportedEncodingException uee) { - getError().println(getMessage("encoding.unsupported", - new Object[] { encoding })); - System.exit(EXIT_NO_ENCODING_FOUND); - } - } else { - reader = new BufferedReader(new InputStreamReader(is)); - } - return evaluateReader(se, reader, name); - } - - /** - * Prints usage message and exits - * @param exitCode process exit code - */ - private static void usage(int exitCode) { - getError().println(getMessage("main.usage", - new Object[] { PROGRAM_NAME })); - System.exit(exitCode); - } - - /** - * Gets prompt for interactive mode - * @return prompt string to use - */ - private static String getPrompt(ScriptEngine se) { - List names = se.getFactory().getNames(); - return names.get(0) + "> "; - } - - /** - * Get formatted, localized error message - */ - private static String getMessage(String key, Object[] params) { - return MessageFormat.format(msgRes.getString(key), params); - } - - // stream to print error messages - private static PrintStream getError() { - return System.err; - } - - // get current script engine - private static ScriptEngine getScriptEngine(String lang) { - ScriptEngine se = engines.get(lang); - if (se == null) { - se = engineManager.getEngineByName(lang); - if (se == null) { - getError().println(getMessage("engine.not.found", - new Object[] { lang })); - System.exit(EXIT_ENGINE_NOT_FOUND); - } - - // initialize the engine - initScriptEngine(se); - // to avoid re-initialization of engine, store it in a map - engines.put(lang, se); - } - return se; - } - - // initialize a given script engine - private static void initScriptEngine(ScriptEngine se) { - // put engine global variable - se.put("engine", se); - - // load init. file from resource - List exts = se.getFactory().getExtensions(); - InputStream sysIn = null; - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - for (String ext : exts) { - try { - sysIn = Main.class.getModule().getResourceAsStream("com/sun/tools/script/shell/init." + ext); - } catch (IOException ioe) { - throw new RuntimeException(ioe); - } - if (sysIn != null) break; - } - if (sysIn != null) { - evaluateStream(se, sysIn, "", null); - } - } - - /** - * Checks for -classpath, -cp in command line args. Creates a ClassLoader - * and sets it as Thread context loader for current thread. - * - * @param args command line argument array - */ - private static void checkClassPath(String[] args) { - String classPath = null; - for (int i = 0; i < args.length; i++) { - if (args[i].equals("-classpath") || - args[i].equals("-cp")) { - if (++i == args.length) { - // just -classpath or -cp with no value - usage(EXIT_CMD_NO_CLASSPATH); - } else { - classPath = args[i]; - } - } - } - - if (classPath != null) { - /* We create a class loader, configure it with specified - * classpath values and set the same as context loader. - * Note that ScriptEngineManager uses context loader to - * load script engines. So, this ensures that user defined - * script engines will be loaded. For classes referred - * from scripts, Rhino engine uses thread context loader - * but this is script engine dependent. We don't have - * script engine independent solution anyway. Unless we - * know the class loader used by a specific engine, we - * can't configure correct loader. - */ - URL[] urls = pathToURLs(classPath); - URLClassLoader loader = new URLClassLoader(urls); - Thread.currentThread().setContextClassLoader(loader); - } - - // now initialize script engine manager. Note that this has to - // be done after setting the context loader so that manager - // will see script engines from user specified classpath - engineManager = new ScriptEngineManager(); - } - - /** - * Utility method for converting a search path string to an array - * of directory and JAR file URLs. - * - * @param path the search path string - * @return the resulting array of directory and JAR file URLs - */ - private static URL[] pathToURLs(String path) { - String[] components = path.split(File.pathSeparator); - URL[] urls = new URL[components.length]; - int count = 0; - while(count < components.length) { - URL url = fileToURL(new File(components[count])); - if (url != null) { - urls[count++] = url; - } - } - if (urls.length != count) { - URL[] tmp = new URL[count]; - System.arraycopy(urls, 0, tmp, 0, count); - urls = tmp; - } - return urls; - } - - /** - * Returns the directory or JAR file URL corresponding to the specified - * local file name. - * - * @param file the File object - * @return the resulting directory or JAR file URL, or null if unknown - */ - private static URL fileToURL(File file) { - String name; - try { - name = file.getCanonicalPath(); - } catch (IOException e) { - name = file.getAbsolutePath(); - } - name = name.replace(File.separatorChar, '/'); - if (!name.startsWith("/")) { - name = "/" + name; - } - // If the file does not exist, then assume that it's a directory - if (!file.isFile()) { - name = name + "/"; - } - try { - @SuppressWarnings("deprecation") - var result = new URL("file", "", name); - return result; - } catch (MalformedURLException e) { - throw new IllegalArgumentException("file"); - } - } - - private static void setScriptArguments(ScriptEngine se, String[] args) { - se.put("arguments", args); - se.put(ScriptEngine.ARGV, args); - } - - private static String setScriptFilename(ScriptEngine se, String name) { - String oldName = (String) se.get(ScriptEngine.FILENAME); - se.put(ScriptEngine.FILENAME, name); - return oldName; - } - - // exit codes - private static final int EXIT_SUCCESS = 0; - private static final int EXIT_CMD_NO_CLASSPATH = 1; - private static final int EXIT_CMD_NO_FILE = 2; - private static final int EXIT_CMD_NO_SCRIPT = 3; - private static final int EXIT_CMD_NO_LANG = 4; - private static final int EXIT_CMD_NO_ENCODING = 5; - private static final int EXIT_CMD_NO_PROPNAME = 6; - private static final int EXIT_UNKNOWN_OPTION = 7; - private static final int EXIT_ENGINE_NOT_FOUND = 8; - private static final int EXIT_NO_ENCODING_FOUND = 9; - private static final int EXIT_SCRIPT_ERROR = 10; - private static final int EXIT_FILE_NOT_FOUND = 11; - private static final int EXIT_MULTIPLE_STDIN = 12; - - // default scripting language - private static final String DEFAULT_LANGUAGE = "js"; - // list of scripts to process - private static List scripts; - // the script engine manager - private static ScriptEngineManager engineManager; - // map of engines we loaded - private static Map engines; - // error messages resource - private static ResourceBundle msgRes; - private static String BUNDLE_NAME = "com.sun.tools.script.shell.messages"; - private static String PROGRAM_NAME = "jrunscript"; - - static { - scripts = new ArrayList(); - engines = new HashMap(); - msgRes = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault()); - } -} diff --git a/src/java.scripting/share/classes/com/sun/tools/script/shell/init.js b/src/java.scripting/share/classes/com/sun/tools/script/shell/init.js deleted file mode 100644 index ced3ba06367..00000000000 --- a/src/java.scripting/share/classes/com/sun/tools/script/shell/init.js +++ /dev/null @@ -1,927 +0,0 @@ -/* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * jrunscript JavaScript built-in functions and objects. - */ - -/** - * Creates an object that delegates all method calls on - * it to the 'invoke' method on the given delegate object.
- * - * Example: - *
- * 
- *     var x  = { invoke: function(name, args) { //code...}
- *     var y = new JSInvoker(x);
- *     y.func(3, 3); // calls x.invoke('func', args); where args is array of arguments
- * 
- * 
- * @param obj object to be wrapped by JSInvoker - * @constructor - */ -function JSInvoker(obj) { - return new JSAdapter({ - __get__ : function(name) { - return function() { - return obj.invoke(name, arguments); - } - } - }); -} - -/** - * This variable represents OS environment. Environment - * variables can be accessed as fields of this object. For - * example, env.PATH will return PATH value configured. - */ -var env = new JSAdapter({ - __get__ : function (name) { - return java.lang.System.getenv(name); - }, - __has__ : function (name) { - return java.lang.System.getenv().containsKey(name); - }, - __getIds__ : function() { - return java.lang.System.getenv().keySet().toArray(); - }, - __delete__ : function(name) { - println("can't delete env item"); - }, - __put__ : function (name, value) { - println("can't change env item"); - }, - toString: function() { - return java.lang.System.getenv().toString(); - } -}); - -/** - * Creates a convenient script object to deal with java.util.Map instances. - * The result script object's field names are keys of the Map. For example, - * scriptObj.keyName can be used to access value associated with given key.
- * Example: - *
- * 
- *     var x = java.lang.SystemProperties();
- *     var y = jmap(x);
- *     println(y['java.class.path']); // prints java.class.path System property
- *     delete y['java.class.path']; // remove java.class.path System property
- * 
- * 
- * - * @param map java.util.Map instance that will be wrapped - * @constructor - */ -function jmap(map) { - return new JSAdapter({ - __get__ : function(name) { - if (map.containsKey(name)) { - return map.get(name); - } else { - return undefined; - } - }, - __has__ : function(name) { - return map.containsKey(name); - }, - - __delete__ : function (name) { - return map.remove(name); - }, - __put__ : function(name, value) { - map.put(name, value); - }, - __getIds__ : function() { - return map.keySet().toArray(); - }, - toString: function() { - return map.toString(); - } - }); -} - -/** - * Creates a convenient script object to deal with java.util.List instances. - * The result script object behaves like an array. For example, - * scriptObj[index] syntax can be used to access values in the List instance. - * 'length' field gives size of the List.
- * - * Example: - *
- * 
- *    var x = new java.util.ArrayList(4);
- *    x.add('Java');
- *    x.add('JavaScript');
- *    x.add('SQL');
- *    x.add('XML');
- *
- *    var y = jlist(x);
- *    println(y[2]); // prints third element of list
- *    println(y.length); // prints size of the list
- *
- * @param map java.util.List instance that will be wrapped
- * @constructor
- */
-function jlist(list) {
-    function isValid(index) {
-        return typeof(index) == 'number' &&
-            index > -1 && index < list.size();
-    }
-    return new JSAdapter({
-        __get__ :  function(name) {
-            if (isValid(name)) {
-                return list.get(name);
-            } else if (name == 'length') {
-                return list.size();
-            } else {
-                return undefined;
-            }
-        },
-        __has__ : function (name) {
-            return isValid(name) || name == 'length';
-        },
-        __delete__ : function(name) {
-            if (isValid(name)) {
-                list.remove(name);
-            }
-        },
-        __put__ : function(name, value) {
-            if (isValid(name)) {
-                list.set(name, value);
-            }
-        },
-        __getIds__: function() {
-            var res = new Array(list.size());
-            for (var i = 0; i < res.length; i++) {
-                res[i] = i;
-            }
-            return res;
-        },
-        toString: function() {
-            return list.toString();
-        }
-    });
-}
-
-/**
- * This is java.lang.System properties wrapped by JSAdapter.
- * For eg. to access java.class.path property, you can use
- * the syntax sysProps["java.class.path"]
- */
-var sysProps = new JSAdapter({
-    __get__ : function (name) {
-        return java.lang.System.getProperty(name);
-    },
-    __has__ : function (name) {
-        return java.lang.System.getProperty(name) != null;
-    },
-    __getIds__ : function() {
-        return java.lang.System.getProperties().keySet().toArray();
-    },
-    __delete__ : function(name) {
-        java.lang.System.clearProperty(name);
-        return true;
-    },
-    __put__ : function (name, value) {
-        java.lang.System.setProperty(name, value);
-    },
-    toString: function() {
-        return "";
-    }
-});
-
-// stdout, stderr & stdin
-var out = java.lang.System.out;
-var err = java.lang.System.err;
-// can't use 'in' because it is a JavaScript keyword :-(
-var inp = java.lang.System["in"];
-
-var BufferedInputStream = java.io.BufferedInputStream;
-var BufferedOutputStream = java.io.BufferedOutputStream;
-var BufferedReader = java.io.BufferedReader;
-var DataInputStream = java.io.DataInputStream;
-var File = java.io.File;
-var FileInputStream = java.io.FileInputStream;
-var FileOutputStream = java.io.FileOutputStream;
-var InputStream = java.io.InputStream;
-var InputStreamReader = java.io.InputStreamReader;
-var OutputStream = java.io.OutputStream;
-var Reader = java.io.Reader;
-var URL = java.net.URL;
-
-/**
- * Generic any object to input stream mapper
- * @param str input file name, URL or InputStream
- * @return InputStream object
- * @private
- */
-function inStream(str) {
-    if (typeof(str) == "string") {
-        // '-' means standard input
-        if (str == '-') {
-            return java.lang.System["in"];
-        }
-        // try file first
-        var file = null;
-        try {
-            file = pathToFile(str);
-        } catch (e) {
-        }
-        if (file && file.exists()) {
-            return new FileInputStream(file);
-        } else {
-            try {
-                // treat the string as URL
-                return new URL(str).openStream();
-            } catch (e) {
-                throw 'file or URL ' + str + ' not found';
-            }
-        }
-    } else {
-        if (str instanceof InputStream) {
-            return str;
-        } else if (str instanceof URL) {
-            return str.openStream();
-        } else if (str instanceof File) {
-            return new FileInputStream(str);
-        }
-    }
-    // everything failed, just give input stream
-    return java.lang.System["in"];
-}
-
-/**
- * Generic any object to output stream mapper
- *
- * @param out output file name or stream
- * @return OutputStream object
- * @private
- */
-function outStream(out) {
-    if (typeof(out) == "string") {
-        if (out == '>') {
-            return java.lang.System.out;
-        } else {
-            // treat it as file
-            return new FileOutputStream(pathToFile(out));
-        }
-    } else {
-        if (out instanceof OutputStream) {
-            return out;
-        } else if (out instanceof File) {
-            return new FileOutputStream(out);
-        }
-    }
-
-    // everything failed, just return System.out
-    return java.lang.System.out;
-}
-
-/**
- * stream close takes care not to close stdin, out & err.
- * @private
- */
-function streamClose(stream) {
-    if (stream) {
-        if (stream != java.lang.System["in"] &&
-            stream != java.lang.System.out &&
-            stream != java.lang.System.err) {
-            try {
-                stream.close();
-            } catch (e) {
-                println(e);
-            }
-        }
-    }
-}
-
-/**
- * Loads and evaluates JavaScript code from a stream or file or URL
- * - * Examples: - *
- * 
- *    load('test.js'); // load script file 'test.js'
- *    load('http://java.sun.com/foo.js'); // load from a URL
- * 
- * 
- * - * @param str input from which script is loaded and evaluated - */ -if (typeof(load) == 'undefined') { - this.load = function(str) { - var stream = inStream(str); - var bstream = new BufferedInputStream(stream); - var reader = new BufferedReader(new InputStreamReader(bstream)); - var oldFilename = engine.get(engine.FILENAME); - engine.put(engine.FILENAME, str); - try { - engine.eval(reader); - } finally { - engine.put(engine.FILENAME, oldFilename); - streamClose(stream); - } - } -} - -// file system utilities - -/** - * Creates a Java byte[] of given length - * @param len size of the array to create - * @private - */ -function javaByteArray(len) { - return java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, len); -} - -var curDir = new File('.'); - -/** - * Print present working directory - */ -function pwd() { - println(curDir.getAbsolutePath()); -} - -/** - * Changes present working directory to given directory - * @param target directory to change to. optional, defaults to user's HOME - */ -function cd(target) { - if (target == undefined) { - target = sysProps["user.home"]; - } - if (!(target instanceof File)) { - target = pathToFile(target); - } - if (target.exists() && target.isDirectory()) { - curDir = target; - } else { - println(target + " is not a directory"); - } -} - -/** - * Converts path to java.io.File taking care of shell present working dir - * - * @param pathname file path to be converted - * @private - */ -function pathToFile(pathname) { - var tmp = pathname; - if (!(tmp instanceof File)) { - tmp = new File(tmp); - } - if (!tmp.isAbsolute()) { - return new File(curDir, pathname); - } else { - return tmp; - } -} - -/** - * Copies a file or URL or stream to another file or stream - * - * @param from input file or URL or stream - * @param to output stream or file - */ -function cp(from, to) { - if (from == to) { - println("file " + from + " cannot be copied onto itself!"); - return; - } - var inp = inStream(from); - var out = outStream(to); - var binp = new BufferedInputStream(inp); - var bout = new BufferedOutputStream(out); - var buff = javaByteArray(1024); - var len; - while ((len = binp.read(buff)) > 0 ) - bout.write(buff, 0, len); - - bout.flush(); - streamClose(inp); - streamClose(out); -} - -/** - * Shows the content of a file or URL or any InputStream
- * Examples: - *
- * 
- *    cat('test.txt'); // show test.txt file contents
- *    cat('http://java.net'); // show the contents from the URL http://java.net
- * 
- * 
- * @param obj input to show - * @param pattern optional. show only the lines matching the pattern - */ -function cat(obj, pattern) { - if (obj instanceof File && obj.isDirectory()) { - ls(obj); - return; - } - - var inp = null; - if (!(obj instanceof Reader)) { - inp = inStream(obj); - obj = new BufferedReader(new InputStreamReader(inp)); - } - var line; - if (pattern) { - var count = 1; - while ((line=obj.readLine()) != null) { - if (line.match(pattern)) { - println(count + "\t: " + line); - } - count++; - } - } else { - while ((line=obj.readLine()) != null) { - println(line); - } - } -} - -/** - * Returns directory part of a filename - * - * @param pathname input path name - * @return directory part of the given file name - */ -function dirname(pathname) { - var dirName = "."; - // Normalize '/' to local file separator before work. - var i = pathname.replace('/', File.separatorChar ).lastIndexOf( - File.separator ); - if ( i != -1 ) - dirName = pathname.substring(0, i); - return dirName; -} - -/** - * Creates a new dir of given name - * - * @param dir name of the new directory - */ -function mkdir(dir) { - dir = pathToFile(dir); - println(dir.mkdir()? "created" : "can not create dir"); -} - -/** - * Creates the directory named by given pathname, including - * any necessary but nonexistent parent directories. - * - * @param dir input path name - */ -function mkdirs(dir) { - dir = pathToFile(dir); - println(dir.mkdirs()? "created" : "can not create dirs"); -} - -/** - * Removes a given file - * - * @param pathname name of the file - */ -function rm(pathname) { - var file = pathToFile(pathname); - if (!file.exists()) { - println("file not found: " + pathname); - return false; - } - // note that delete is a keyword in JavaScript! - println(file["delete"]()? "deleted" : "can not delete"); -} - -/** - * Removes a given directory - * - * @param pathname name of the directory - */ -function rmdir(pathname) { - rm(pathname); -} - -/** - * Synonym for 'rm' - */ -function del(pathname) { - rm(pathname); -} - -/** - * Moves a file to another - * - * @param from original name of the file - * @param to new name for the file - */ -function mv(from, to) { - println(pathToFile(from).renameTo(pathToFile(to))? - "moved" : "can not move"); -} - -/** - * Synonym for 'mv'. - */ -function ren(from, to) { - mv(from, to); -} - -var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; - -/** - * Helper function called by ls - * @private - */ -function printFile(f) { - var sb = new java.lang.StringBuffer(); - sb.append(f.isDirectory()? "d" : "-"); - sb.append(f.canRead() ? "r": "-" ); - sb.append(f.canWrite() ? "w": "-" ); - sb.append(" "); - - var d = new java.util.Date(f.lastModified()); - var c = new java.util.GregorianCalendar(); - c.setTime(d); - var day = c.get(java.util.Calendar.DAY_OF_MONTH); - sb.append(months[c.get(java.util.Calendar.MONTH)] - + " " + day ); - if (day < 10) { - sb.append(" "); - } - - // to get fixed length 'length' field - var fieldlen = 8; - var len = new java.lang.StringBuffer(); - for(var j=0; j - * - * Examples: - *
- * 
- *    find('.')
- *    find('.', '.*\.class', rm);  // remove all .class files
- *    find('.', '.*\.java');       // print fullpath of each .java file
- *    find('.', '.*\.java', cat);  // print all .java files
- * 
- * 
- * - * @param dir directory to search files - * @param pattern to search in the files - * @param callback function to call for matching files - */ -function find(dir, pattern, callback) { - dir = pathToFile(dir); - if (!callback) callback = print; - var files = dir.listFiles(); - for (var f in files) { - var file = files[f]; - if (file.isDirectory()) { - find(file, pattern, callback); - } else { - if (pattern) { - if (file.getName().match(pattern)) { - callback(file); - } - } else { - callback(file); - } - } - } -} - -// process utilities - -/** - * Exec's a child process, waits for completion & returns exit code - * - * @param cmd command to execute in child process - */ -function exec(cmd) { - var process = java.lang.Runtime.getRuntime().exec(cmd); - var inp = new DataInputStream(process.getInputStream()); - var line = null; - while ((line = inp.readLine()) != null) { - println(line); - } - process.waitFor(); - $exit = process.exitValue(); -} - -if (typeof(exit) == 'undefined') { - /** - * Exit the shell program. - * - * @param exitCode integer code returned to OS shell. - * optional, defaults to 0 - */ - this.exit = function (code) { - if (code) { - java.lang.System.exit(code + 0); - } else { - java.lang.System.exit(0); - } - } -} - -if (typeof(quit) == 'undefined') { - /** - * synonym for exit - */ - this.quit = function (code) { - exit(code); - } -} - -// XML utilities - -/** - * Converts input to DOM Document object - * - * @param inp file or reader. optional, without this param, - * this function returns a new DOM Document. - * @return returns a DOM Document object - */ -function XMLDocument(inp) { - var factory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); - var builder = factory.newDocumentBuilder(); - if (inp) { - if (typeof(inp) == "string") { - return builder.parse(pathToFile(inp)); - } else { - return builder.parse(inp); - } - } else { - return builder.newDocument(); - } -} - -/** - * Converts arbitrary stream, file, URL to XMLSource - * - * @param inp input stream or file or URL - * @return XMLSource object - */ -function XMLSource(inp) { - if (inp instanceof javax.xml.transform.Source) { - return inp; - } else if (inp instanceof Packages.org.w3c.dom.Document) { - return new javax.xml.transform.dom.DOMSource(inp); - } else { - inp = new BufferedInputStream(inStream(inp)); - return new javax.xml.transform.stream.StreamSource(inp); - } -} - -/** - * Converts arbitrary stream, file to XMLResult - * - * @param inp output stream or file - * @return XMLResult object - */ -function XMLResult(out) { - if (out instanceof javax.xml.transform.Result) { - return out; - } else if (out instanceof Packages.org.w3c.dom.Document) { - return new javax.xml.transform.dom.DOMResult(out); - } else { - out = new BufferedOutputStream(outStream(out)); - return new javax.xml.transform.stream.StreamResult(out); - } -} - -/** - * Perform XSLT transform - * - * @param inp Input XML to transform (URL, File or InputStream) - * @param style XSL Stylesheet to be used (URL, File or InputStream). optional. - * @param out Output XML (File or OutputStream - */ -function XSLTransform(inp, style, out) { - switch (arguments.length) { - case 2: - inp = arguments[0]; - out = arguments[1]; - break; - case 3: - inp = arguments[0]; - style = arguments[1]; - out = arguments[2]; - break; - default: - println("XSL transform requires 2 or 3 arguments"); - return; - } - - var factory = javax.xml.transform.TransformerFactory.newInstance(); - var transformer; - if (style) { - transformer = factory.newTransformer(XMLSource(style)); - } else { - transformer = factory.newTransformer(); - } - var source = XMLSource(inp); - var result = XMLResult(out); - transformer.transform(source, result); - if (source.getInputStream) { - streamClose(source.getInputStream()); - } - if (result.getOutputStream) { - streamClose(result.getOutputStream()); - } -} - -// miscellaneous utilities - -/** - * Prints which command is selected from PATH - * - * @param cmd name of the command searched from PATH - */ -function which(cmd) { - var st = new java.util.StringTokenizer(env.PATH, File.pathSeparator); - while (st.hasMoreTokens()) { - var file = new File(st.nextToken(), cmd); - if (file.exists()) { - println(file.getAbsolutePath()); - return; - } - } -} - -/** - * Prints IP addresses of given domain name - * - * @param name domain name - */ -function ip(name) { - var addrs = InetAddress.getAllByName(name); - for (var i in addrs) { - println(addrs[i]); - } -} - -/** - * Prints current date in current locale - */ -function date() { - println(new Date().toLocaleString()); -} - -/** - * Echoes the given string arguments - */ -function echo(x) { - for (var i = 0; i < arguments.length; i++) { - println(arguments[i]); - } -} - -if (typeof(printf) == 'undefined') { - /** - * This is C-like printf - * - * @param format string to format the rest of the print items - * @param args variadic argument list - */ - this.printf = function (format, args/*, more args*/) { - var array = java.lang.reflect.Array.newInstance(java.lang.Object, - arguments.length - 1); - for (var i = 0; i < array.length; i++) { - array[i] = arguments[i+1]; - } - java.lang.System.out.printf(format, array); - } -} - -/** - * Reads one or more lines from stdin after printing prompt - * - * @param prompt optional, default is '>' - * @param multiline to tell whether to read single line or multiple lines - */ -function read(prompt, multiline) { - if (!prompt) { - prompt = '>'; - } - var inp = java.lang.System["in"]; - var reader = new BufferedReader(new InputStreamReader(inp)); - if (multiline) { - var line = ''; - while (true) { - java.lang.System.err.print(prompt); - java.lang.System.err.flush(); - var tmp = reader.readLine(); - if (tmp == '' || tmp == null) break; - line += tmp + '\n'; - } - return line; - } else { - java.lang.System.err.print(prompt); - java.lang.System.err.flush(); - return reader.readLine(); - } -} - -if (typeof(println) == 'undefined') { - // just synonym to print - this.println = print; -} - diff --git a/src/java.scripting/share/classes/com/sun/tools/script/shell/messages.properties b/src/java.scripting/share/classes/com/sun/tools/script/shell/messages.properties deleted file mode 100644 index a6c7762ed34..00000000000 --- a/src/java.scripting/share/classes/com/sun/tools/script/shell/messages.properties +++ /dev/null @@ -1,68 +0,0 @@ -# -# Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -string.script.error=\ - script error: {0} - -file.script.error=\ - script error in file {0} : {1} - -file.not.found=\ - script file {0} is not found - -engine.not.found=\ - script engine for language {0} can not be found - -engine.info=\ - Language {0} {1} implementation "{2}" {3} - -encoding.unsupported=\ - encoding {0} is not supported - -main.usage=\ -Usage: {0} [options] [arguments...]\n\ -\n\ -where [options] include:\n\ -\ \-classpath Specify where to find user class files \n\ -\ \-cp Specify where to find user class files \n\ -\ \-D= Set a system property \n\ -\ \-J Pass directly to the runtime system \n\ -\ \-l Use specified scripting language \n\ -\ \-e