diff options
author | Stephan Bergmann <stephan.bergmann@allotropia.de> | 2024-03-22 15:53:49 +0100 |
---|---|---|
committer | Stephan Bergmann <stephan.bergmann@allotropia.de> | 2024-04-02 18:56:13 +0200 |
commit | 58c4457a902c846229dc3383cc31bbc8f4b3aed9 (patch) | |
tree | e378f7553ea6ab2daf4e0a7e8b9767fbb0b9c9db /scripting/java/com/sun | |
parent | a0c53ab43840d1c84d7d246b2cbc73c3a8862155 (diff) |
Update to latest Rhino 1.7.14
...at the expense of losing, at least for now, the script editor for it (which
had been hacked into the old upstream sources in a hard-to-maintain way).
rhino-1.7.14.zip is taken from
<https://github.com/mozilla/rhino/releases/download/Rhino1_7_14_Release/rhino-1.7.14.zip>.
Building it would now use Gradle, but instead just hack together an invocation
of javac and jar in external/rhino/ExternalProject_rhino.mk that effectively
generates the same jar as the upstream-built jar available at
<https://github.com/mozilla/rhino/releases/download/Rhino1_7_14_Release/rhino-1.7.14.jar>.
All the various patches are no longer necessary:
* external/rhino/rhino1_5R5.patch and external/rhino/OfficeScriptInfo.java were
mostly for the hacked-in script editor, which has been abandoned at least for
now (see above).
* external/rhino/rhino1_5R5-find_swing.patch (originally from
0a7f9346503a557f583bced269655fa1996550af "ause109: #i106296# make build.xml
aware of TARFILE_LOCATION") appears to be obsolete.
* external/rhino/rhino1_5R5-updateToolTip.patch is covered by
<https://github.com/mozilla/rhino/commit/ab20a73b16f68daf715c7ac4808c119bb15d698c>
"Fix bug 414869: Rhino debugger fails to launch due to updates in mac os x
leopard".
* external/rhino/rhino-classpath.patch.1 from
bb58293296f843654045d7b0eba6899d11533a4a "rhino: unbreak build on Fedora 34"
was only relevant when building with Ant.
Change-Id: I5fca5915d785716f7aaf313ff2469a20f55f707a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165190
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
Diffstat (limited to 'scripting/java/com/sun')
3 files changed, 4 insertions, 428 deletions
diff --git a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java deleted file mode 100644 index 1f0e8fd72a16..000000000000 --- a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.script.framework.provider.javascript; - -import com.sun.star.script.framework.container.ScriptMetaData; -import com.sun.star.script.framework.log.LogUtils; -import com.sun.star.script.framework.provider.ScriptEditorBase; -import com.sun.star.script.framework.provider.SwingInvocation; -import com.sun.star.script.provider.XScriptContext; - -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; - -import java.io.IOException; -import java.io.InputStream; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import org.mozilla.javascript.Context; -import org.mozilla.javascript.ImporterTopLevel; -import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.tools.debugger.Main; -import org.mozilla.javascript.tools.debugger.ScopeProvider; - -public class ScriptEditorForJavaScript extends ScriptEditorBase { - - // global ScriptEditorForJavaScript instance - private static ScriptEditorForJavaScript theScriptEditorForJavaScript; - - // template for JavaScript scripts - private static String JSTEMPLATE; - - private static Main rhinoWindow; - private URL scriptURL; - // global list of ScriptEditors, key is [external form of URL] of file being edited - private static Map<String, ScriptEditorForJavaScript> BEING_EDITED = new - HashMap<String, ScriptEditorForJavaScript>(); - - static { - JSTEMPLATE = "// JavaScript script"; - try { - URL url = ScriptEditorForJavaScript.class.getResource("template.js"); - if (url != null) { - InputStream in = url.openStream(); - StringBuilder buf = new StringBuilder(); - byte[] b = new byte[1024]; - int len; - - while ((len = in.read(b)) != -1) { - buf.append(new String(b, 0, len)); - } - - in.close(); - - JSTEMPLATE = buf.toString(); - } - } catch (IOException ioe) { - } catch (Exception e) { - } - } - - /** - * Returns the global ScriptEditorForJavaScript instance. - */ - - public static synchronized ScriptEditorForJavaScript getEditor() { - if (theScriptEditorForJavaScript == null) { - theScriptEditorForJavaScript = new ScriptEditorForJavaScript(); - } - - return theScriptEditorForJavaScript; - } - - /** - * Get the ScriptEditorForJavaScript instance for this URL - * - * @param url The URL of the script source file - * - * @return The ScriptEditorForJavaScript associated with - * the given URL if one exists, otherwise null. - */ - public static ScriptEditorForJavaScript getEditor(URL url) { - synchronized (BEING_EDITED) { - return BEING_EDITED.get(url.toExternalForm()); - } - } - - /** - * Returns whether or not the script source being edited in this - * ScriptEditorForJavaScript has been modified - */ - public boolean isModified() { - return rhinoWindow.isModified(scriptURL); - } - - /** - * Returns the text being displayed in this ScriptEditorForJavaScript - * - * @return The text displayed in this ScriptEditorForJavaScript - */ - public String getText() { - return rhinoWindow.getText(scriptURL); - } - - /** - * Returns the Rhino Debugger url of this ScriptEditorForJavaScript - * - * @return The url of this ScriptEditorForJavaScript - */ - public String getURL() { - return scriptURL.toString(); - } - - /** - * Returns the template text for JavaScript scripts - * - * @return The template text for JavaScript scripts - */ - public String getTemplate() { - return JSTEMPLATE; - } - - /** - * Returns the default extension for JavaScript scripts - * - * @return The default extension for JavaScript scripts - */ - public String getExtension() { - return "js"; - } - - /** - * Opens an editor window for the specified ScriptMetaData. - * If an editor window is already open for that data it will be - * moved to the front. - * - * @param context The context in which to execute the script - * @param entry The metadata describing the script - */ - public void edit(final XScriptContext context, ScriptMetaData entry) { - try { - String sUrl = entry.getParcelLocation(); - - if (!sUrl.endsWith("/")) { - sUrl += "/"; - } - - sUrl += entry.getLanguageName(); - final URL url = entry.getSourceURL(); - SwingInvocation.invoke( - new Runnable() { - public void run() { - synchronized (BEING_EDITED) { - ScriptEditorForJavaScript editor = BEING_EDITED.get(url.toExternalForm()); - - if (editor == null) { - editor = new ScriptEditorForJavaScript(context, url); - BEING_EDITED.put(url.toExternalForm(), editor); - } - } - - assert rhinoWindow != null; - rhinoWindow.showScriptWindow(url); - rhinoWindow.toFront(); - } - }); - } catch (IOException e) { - LogUtils.DEBUG("Caught exception: " + e); - LogUtils.DEBUG(LogUtils.getTrace(e)); - } - } - - // Ensures that new instances of this class can only be created using - // the factory methods - private ScriptEditorForJavaScript() { - } - - private ScriptEditorForJavaScript(XScriptContext context, URL url) { - setContext(context); - // Need to check that before showing the window. Checking in execute() has no effect. - if (!isMacroExecutionEnabled()) { - showErrorMessage("Macro Execution has been disabled."); - return ; - } - initUI(); - Scriptable scope = getScope(context); - rhinoWindow.openFile(url, scope, new CloseHandler(url)); - this.scriptURL = url; - } - - /** - * Executes the script edited by the editor - * - */ - - public Object execute() throws Exception { - rhinoWindow.toFront(); - - return rhinoWindow.runScriptWindow(scriptURL); - } - - /** - * Indicates the line where error occurred - * - */ - public void indicateErrorLine(int lineNum) { - rhinoWindow.toFront(); - rhinoWindow.highlighLineInScriptWindow(scriptURL, lineNum); - } - // This code is based on the main method of the Rhino Debugger Main class - // We pass in the XScriptContext in the global scope for script execution - private void initUI() { - try { - synchronized (ScriptEditorForJavaScript.class) { - if (rhinoWindow != null) { - return; - } - - final Main sdb = new Main("Rhino JavaScript Debugger"); - sdb.pack(); - sdb.setSize(640, 640); - sdb.setVisible(true); - sdb.setExitAction(new Runnable() { - public void run() { - sdb.clearAllBreakpoints(); - sdb.dispose(); - shutdown(); - } - }); - Context.addContextListener(sdb); - sdb.setScopeProvider(new ScopeProvider() { - @Override - public Scriptable getScope() { - return org.mozilla.javascript.tools.shell.Main.getScope(); - } - }); - sdb.addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - shutdown(); - } - }); - rhinoWindow = sdb; - } - } catch (Exception exc) { - LogUtils.DEBUG(LogUtils.getTrace(exc)); - } - } - - private void shutdown() { - // dereference Rhino Debugger window - rhinoWindow = null; - this.scriptURL = null; - - // remove all scripts from BEING_EDITED - synchronized (BEING_EDITED) { - java.util.Iterator<String> iter = BEING_EDITED.keySet().iterator(); - java.util.ArrayList<String> keysToRemove = new java.util.ArrayList<String>(); - - while (iter.hasNext()) { - String key = iter.next(); - keysToRemove.add(key); - } - - for (int i = 0; i < keysToRemove.size(); i++) { - BEING_EDITED.remove(keysToRemove.get(i)); - } - - keysToRemove = null; - } - - } - private Scriptable getScope(XScriptContext xsctxt) { - Context ctxt = Context.enter(); - ImporterTopLevel scope = new ImporterTopLevel(ctxt); - - Scriptable jsCtxt = Context.toObject(xsctxt, scope); - scope.put("XSCRIPTCONTEXT", scope, jsCtxt); - - Scriptable jsArgs = Context.toObject(new Object[0], scope); - scope.put("ARGUMENTS", scope, jsArgs); - - Context.exit(); - return scope; - } - - private static class CloseHandler implements Runnable { - - private final URL url; - - private CloseHandler(URL url) { - this.url = url; - } - - public void run() { - synchronized (BEING_EDITED) { - BEING_EDITED.remove(this.url.toExternalForm()); - } - } - } -} diff --git a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptProviderForJavaScript.java b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptProviderForJavaScript.java index 9465a646f64d..2572ce0ee55e 100644 --- a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptProviderForJavaScript.java +++ b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptProviderForJavaScript.java @@ -44,8 +44,6 @@ import com.sun.star.script.provider.XScript; import com.sun.star.uno.XComponentContext; -import java.net.URL; - import org.mozilla.javascript.Context; import org.mozilla.javascript.ImporterTopLevel; import org.mozilla.javascript.JavaScriptException; @@ -78,12 +76,12 @@ public class ScriptProviderForJavaScript { @Override public boolean hasScriptEditor() { - return true; + return false; } @Override public ScriptEditor getScriptEditor() { - return ScriptEditorForJavaScript.getEditor(); + return null; } } @@ -198,31 +196,10 @@ class ScriptImpl implements XScript { try { Object result = null; - ScriptEditorForJavaScript editor = - ScriptEditorForJavaScript.getEditor(metaData.getSourceURL()); - - if (editor != null) { - result = editor.execute(); - - if (result != null && - result.getClass().getName().equals("org.mozilla.javascript.Undefined")) { - // Always return a string - // TODO revisit - return Context.toString(result); - } - - } - String source; - if (editor != null && editor.isModified()) { - LogUtils.DEBUG("GOT A MODIFIED SOURCE"); - source = editor.getText(); - } else { - metaData.loadSource(); - source = metaData.getSource(); - - } + metaData.loadSource(); + source = metaData.getSource(); if (source == null || source.length() == 0) { throw new ScriptFrameworkErrorException( @@ -285,7 +262,6 @@ class ScriptImpl implements XScript { LogUtils.DEBUG("\t lineNum " + se.lineNum); LogUtils.DEBUG("\t language " + se.language); LogUtils.DEBUG("\t scriptName " + se.scriptName); - raiseEditor(se.lineNum); throw new InvocationTargetException( "JavaScript uncaught exception" + metaData.getLanguageName(), null, se); } catch (Exception ex) { @@ -300,31 +276,4 @@ class ScriptImpl implements XScript { } } } - - private void raiseEditor(int lineNum) { - try { - URL sourceUrl = metaData.getSourceURL(); - - ScriptEditorForJavaScript editor = - ScriptEditorForJavaScript.getEditor(sourceUrl); - - if (editor == null) { - editor = ScriptEditorForJavaScript.getEditor(); - - editor.edit( - ScriptContext.createContext(m_xModel, m_xInvocContext, - m_xContext, m_xMultiComponentFactory), - metaData); - - editor = ScriptEditorForJavaScript.getEditor(sourceUrl); - } - - if (editor != null) { - System.out.println("** Have raised IDE for JavaScript, calling indicateErrorLine for line " - + lineNum); - editor.indicateErrorLine(lineNum); - } - } catch (java.net.MalformedURLException ignore) { - } - } } diff --git a/scripting/java/com/sun/star/script/framework/provider/javascript/template.js b/scripting/java/com/sun/star/script/framework/provider/javascript/template.js deleted file mode 100644 index 939ba339cd7c..000000000000 --- a/scripting/java/com/sun/star/script/framework/provider/javascript/template.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -// Hello World in JavaScript -// Import standard OpenOffice.org API classes. For more information on -// these classes and the OpenOffice.org API, see the OpenOffice.org -// Developers Guide at: -// https://api.libreoffice.org/ - -importClass(Packages.com.sun.star.uno.UnoRuntime); -importClass(Packages.com.sun.star.text.XTextDocument); -importClass(Packages.com.sun.star.text.XText); -importClass(Packages.com.sun.star.text.XTextRange); -importClass(Packages.com.sun.star.frame.XModel); - -// Import XScriptContext class. An instance of this class is available -// to all JavaScript scripts in the global variable "XSCRIPTCONTEXT". This -// variable can be used to access the document for which this script -// was invoked. - -// Methods available are: - -// XSCRIPTCONTEXT.getDocument() returns XModel -// XSCRIPTCONTEXT.getInvocationContext() returns XScriptInvocationContext or NULL -// XSCRIPTCONTEXT.getDesktop() returns XDesktop -// XSCRIPTCONTEXT.getComponentContext() returns XComponentContext - -// For more information on using this class see the scripting -// developer guides at: - -// https://api.libreoffice.org/docs/DevelopersGuide/ScriptingFramework/ScriptingFramework.xhtml - - -oDoc = UnoRuntime.queryInterface(XModel,XSCRIPTCONTEXT.getInvocationContext()); -if ( !oDoc ) - oDoc = XSCRIPTCONTEXT.getDocument(); -xTextDoc = UnoRuntime.queryInterface(XTextDocument,oDoc); -xText = xTextDoc.getText(); -xTextRange = xText.getEnd(); -xTextRange.setString( "Hello World (in JavaScript)" ); |