--- old/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/resources/jjs.js 2020-04-15 18:45:22.000000000 +0530 +++ /dev/null 2020-04-15 18:45:22.000000000 +0530 @@ -1,147 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. 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. - */ - -(function () { - -// Check if java.desktop module is available and we're running in non-headless mode. -// We access AWT via script to avoid direct dependency on java.desktop module. -function isHeadless() { - var GraphicsEnvironment = java.awt.GraphicsEnvironment; - return Java.isType(GraphicsEnvironment)? GraphicsEnvironment.isHeadless() : true; -} - - -// Function that shows a JFileChooser dialog and returns the file name chosen (if chosen). -// We access swing from script to avoid direct dependency on java.desktop module. -function chooseFile() { - var JFileChooser = javax.swing.JFileChooser; - if (!Java.isType(JFileChooser)) { - return null; - } - - var ExtensionFilter = javax.swing.filechooser.FileNameExtensionFilter; - function run() { - var chooser = new JFileChooser(); - chooser.fileFilter = new ExtensionFilter('JavaScript Files', 'js'); - var retVal = chooser.showOpenDialog(null); - return retVal == JFileChooser.APPROVE_OPTION ? - chooser.selectedFile.absolutePath : null; - } - - var FutureTask = java.util.concurrent.FutureTask; - var fileChooserTask = new FutureTask(run); - javax.swing.SwingUtilities.invokeLater(fileChooserTask); - - return fileChooserTask.get(); -} - -// Function that opens up the desktop browser application with the given URI. -// We access AWT from script to avoid direct dependency on java.desktop module. -function browse(uri) { - var Desktop = java.awt.Desktop; - if (Java.isType(Desktop)) { - Desktop.desktop.browse(uri); - } -} - -function printDoc(list) { - list.forEach(function(doc) { - print(); - print(doc.signature()); - print(); - print(doc.javadoc()); - }); -} - -var JShell = null; -var jshell = null; - -function javadoc(obj) { - var str = String(obj); - if (!JShell) { - // first time - resolve JShell class - JShell = Packages.jdk.jshell.JShell; - // if JShell class is available, create an instance - jshell = Java.isType(JShell)? JShell.create() : null; - } - - if (!jshell) { - // we don't have jshell. Just print the default! - return print(str); - } - - /* - * A java method object's String representation looks something like this: - * - * For an overloaded method: - * - * [jdk.dynalink.beans.OverloadedDynamicMethod - * String java.lang.System.getProperty(String,String) - * String java.lang.System.getProperty(String) - * ] - * - * For a non-overloaded method: - * - * [jdk.dynalink.beans.SimpleDynamicMethod void java.lang.System.exit(int)] - * - * jshell expects "java.lang.System.getProperty(" or "java.lang.System.exit(" - * to retrieve the javadoc comment(s) for the method. - */ - var javaCode = str.split(" ")[2]; // stuff after second whitespace char - javaCode = javaCode.substring(0, javaCode.indexOf('(') + 1); // strip argument types - - try { - var analysis = jshell.sourceCodeAnalysis(); - var docList = analysis.documentation(javaCode, javaCode.length, true); - if (!docList.isEmpty()) { - return printDoc(docList); - } - - /* - * May be the method is a Java instance method. In such a case, jshell expects - * a valid starting portion of an instance method call expression. We cast null - * to Java object and call method on it. i.e., We pass something like this: - * - * "((java.io.PrintStream)null).println(" - */ - var javaType = javaCode.substring(0, javaCode.lastIndexOf('.')); - javaCode = "((" + javaType + ")null)" + javaCode.substring(javaCode.lastIndexOf('.')); - docList = analysis.documentation(javaCode, javaCode.length, true); - if (!docList.isEmpty()) { - return printDoc(docList); - } - } catch (e) { - } - print(str); -} - -return { - isHeadless: isHeadless, - chooseFile: chooseFile, - browse: browse, - javadoc: javadoc -}; - -})();