summaryrefslogtreecommitdiff
path: root/scripting/java/com/sun
diff options
context:
space:
mode:
authorStephan Bergmann <stephan.bergmann@allotropia.de>2024-03-22 15:53:49 +0100
committerStephan Bergmann <stephan.bergmann@allotropia.de>2024-04-02 18:56:13 +0200
commit58c4457a902c846229dc3383cc31bbc8f4b3aed9 (patch)
treee378f7553ea6ab2daf4e0a7e8b9767fbb0b9c9db /scripting/java/com/sun
parenta0c53ab43840d1c84d7d246b2cbc73c3a8862155 (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')
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java319
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/javascript/ScriptProviderForJavaScript.java59
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/javascript/template.js54
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)" );