diff options
Diffstat (limited to 'rhino/rhino1_5R5.patch')
-rw-r--r-- | rhino/rhino1_5R5.patch | 1441 |
1 files changed, 1441 insertions, 0 deletions
diff --git a/rhino/rhino1_5R5.patch b/rhino/rhino1_5R5.patch new file mode 100644 index 000000000000..1a63b0ab0353 --- /dev/null +++ b/rhino/rhino1_5R5.patch @@ -0,0 +1,1441 @@ +*** misc/rhino1_5R5/src/org/mozilla/javascript/DefiningClassLoader.java Tue Mar 22 13:20:47 2005 +--- misc/build/rhino1_5R5/src/org/mozilla/javascript/DefiningClassLoader.java Tue Jul 4 14:59:43 2006 +*************** +*** 38,43 **** +--- 38,44 ---- + package org.mozilla.javascript; + + import java.lang.reflect.Method; ++ import java.lang.reflect.InvocationTargetException; + + /** + * Load generated classes. +*************** +*** 49,59 **** + implements GeneratedClassLoader + { + public DefiningClassLoader() { +! this.parentLoader = getClass().getClassLoader(); + } + + public DefiningClassLoader(ClassLoader parentLoader) { + this.parentLoader = parentLoader; + } + + public Class defineClass(String name, byte[] data) { +--- 49,82 ---- + implements GeneratedClassLoader + { + public DefiningClassLoader() { +! init(getClass().getClassLoader()); + } + + public DefiningClassLoader(ClassLoader parentLoader) { ++ ++ init(parentLoader); ++ } ++ ++ private void init(ClassLoader parentLoader) { ++ + this.parentLoader = parentLoader; ++ ++ this.contextLoader = null; ++ if (method_getContextClassLoader != null) { ++ try { ++ this.contextLoader = (ClassLoader) ++ method_getContextClassLoader.invoke( ++ Thread.currentThread(), ++ ScriptRuntime.emptyArgs); ++ } catch (IllegalAccessException ex) { ++ } catch (InvocationTargetException ex) { ++ } catch (SecurityException ex) { ++ } ++ if (this.contextLoader == this.parentLoader) { ++ this.contextLoader = null; ++ } ++ } ++ + } + + public Class defineClass(String name, byte[] data) { +*************** +*** 69,78 **** + { + Class cl = findLoadedClass(name); + if (cl == null) { +! if (parentLoader != null) { +! cl = parentLoader.loadClass(name); + } else { +! cl = findSystemClass(name); + } + } + if (resolve) { +--- 92,111 ---- + { + Class cl = findLoadedClass(name); + if (cl == null) { +! // First try parent class loader and if that does not work, try +! // contextLoader, but that will be null if +! // Thread.getContextClassLoader() == parentLoader +! // or on JDK 1.1 due to lack Thread.getContextClassLoader(). +! // To avoid catching and rethrowing ClassNotFoundException +! // in this cases, use try/catch check only if contextLoader != null. +! if (contextLoader == null) { +! cl = loadFromParent(name); + } else { +! try { +! cl = loadFromParent(name); +! } catch (ClassNotFoundException ex) { +! cl = contextLoader.loadClass(name); +! } + } + } + if (resolve) { +*************** +*** 81,85 **** +--- 114,150 ---- + return cl; + } + ++ private Class loadFromParent(String name) ++ throws ClassNotFoundException ++ { ++ if (parentLoader != null) { ++ return parentLoader.loadClass(name); ++ } else { ++ return findSystemClass(name); ++ } ++ ++ } ++ + private ClassLoader parentLoader; ++ ++ private ClassLoader contextLoader; ++ ++ // We'd like to use "Thread.getContextClassLoader", but ++ // that's only available on Java2. ++ private static Method method_getContextClassLoader; ++ ++ static { ++ try { ++ // Don't use "Thread.class": that performs the lookup ++ // in the class initializer, which doesn't allow us to ++ // catch possible security exceptions. ++ Class threadClass = Class.forName("java.lang.Thread"); ++ method_getContextClassLoader = ++ threadClass.getDeclaredMethod("getContextClassLoader", ++ new Class[0]); ++ } catch (ClassNotFoundException e) { ++ } catch (NoSuchMethodException e) { ++ } catch (SecurityException e) { ++ } ++ } + } +*** misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/OfficeScriptInfo.java Tue Jul 4 15:14:27 2006 +--- misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/OfficeScriptInfo.java Tue Jul 4 14:59:43 2006 +*************** +*** 1 **** +! dummy +--- 1,136 ---- +! /************************************************************************* +! * +! * $RCSfile: rhino1_5R5.patch,v $ +! * +! * $Revision: 1.2 $ +! * +! * last change: $Author: obo $ $Date: 2008-01-04 15:22:56 $ +! * +! * The Contents of this file are made available subject to +! * the terms of GNU Lesser General Public License Version 2.1. +! * +! * +! * GNU Lesser General Public License Version 2.1 +! * ============================================= +! * Copyright 2005 by Sun Microsystems, Inc. +! * 901 San Antonio Road, Palo Alto, CA 94303, USA +! * +! * This library is free software; you can redistribute it and/or +! * modify it under the terms of the GNU Lesser General Public +! * License version 2.1, as published by the Free Software Foundation. +! * +! * This library 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 +! * Lesser General Public License for more details. +! * +! * You should have received a copy of the GNU Lesser General Public +! * License along with this library; if not, write to the Free Software +! * Foundation, Inc., 59 Temple Place, Suite 330, Boston, +! * MA 02111-1307 USA +! * +! ************************************************************************/ +! +! +! package org.mozilla.javascript.tools.debugger; +! import java.net.URL; +! import java.util.Hashtable; +! import org.mozilla.javascript.Scriptable; +! +! public class OfficeScriptInfo +! { +! private Hashtable loadedSFScripts = new Hashtable(); +! +! public void addScript( URL url, Scriptable scope, Runnable closeCallback ) +! { +! addScript( url.toString(), url, scope, closeCallback ); +! } +! +! public void addScript( String key, URL url, Scriptable scope, Runnable closeCallback ) +! { +! SFScriptInfo si = (SFScriptInfo)loadedSFScripts.get( key ); +! if ( si == null ) +! { +! si = new SFScriptInfo(); +! si.url = url; +! si.scope = scope; +! si.closeCallback = closeCallback; +! loadedSFScripts.put( key, si ); +! } +! } +! +! public void deleteScript( String key ) +! { +! SFScriptInfo info = (SFScriptInfo)loadedSFScripts.remove( key ); +! if ( info != null ) +! { +! if ( info.closeCallback != null ) +! { +! System.out.println("** In removeSFScriptInfo have callback for " + key ); +! info.closeCallback.run(); // really need to do this in seperate thread???? +! } +! } +! } +! +! public Scriptable getScriptScope( String key ) +! { +! Scriptable result = null; +! SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key ); +! if ( info != null ) +! { +! result = info.scope; +! } +! return result; +! } +! +! public URL getScriptUrl( String key ) +! { +! URL result = null; +! SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key ); +! if ( info != null ) +! { +! result = info.url; +! } +! return result; +! } +! public boolean hasScript( String key ) +! { +! boolean result = true; +! SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key ); +! if ( info == null ) +! { +! result = false; +! } +! return result; +! } +! +! public void setScriptRunning( String key, boolean running ) +! { +! SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key ); +! if ( info != null ) +! { +! info.isExecuting = running; +! } +! } +! +! public boolean isScriptRunning( String key ) +! { +! boolean result = false; +! SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key ); +! if ( info != null ) +! { +! result = info.isExecuting; +! } +! return result; +! } +! +! +! +! class SFScriptInfo +! { +! Scriptable scope; +! boolean isExecuting; +! URL url; +! Runnable closeCallback; +! } +! } +*** misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/shell/JavaPolicySecurity.java Tue Mar 22 13:20:49 2005 +--- misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/shell/JavaPolicySecurity.java Tue Jul 4 14:59:43 2006 +*************** +*** 36,41 **** +--- 36,42 ---- + package org.mozilla.javascript.tools.shell; + + import java.security.*; ++ import java.security.cert.Certificate; + import java.net.MalformedURLException; + import java.net.URL; + import java.util.Hashtable; +*************** +*** 124,130 **** + + public JavaPolicySecurity() { + // To trigger error on jdk-1.1 with lazy load +! new CodeSource(null, null); + } + + protected void callProcessFileSecure(final Context cx, +--- 125,131 ---- + + public JavaPolicySecurity() { + // To trigger error on jdk-1.1 with lazy load +! new CodeSource(null, (Certificate [])null); + } + + protected void callProcessFileSecure(final Context cx, +*************** +*** 167,173 **** + } + + private ProtectionDomain getUrlDomain(URL url) { +! CodeSource cs = new CodeSource(url, null); + PermissionCollection pc = Policy.getPolicy().getPermissions(cs); + return new ProtectionDomain(cs, pc); + } +--- 168,174 ---- + } + + private ProtectionDomain getUrlDomain(URL url) { +! CodeSource cs = new CodeSource(url, (Certificate [])null); + PermissionCollection pc = Policy.getPolicy().getPermissions(cs); + return new ProtectionDomain(cs, pc); + } +*** misc/rhino1_5R5/toolsrc/build.xml 2007-11-30 13:22:35.000000000 +0000 +--- misc/build/rhino1_5R5/toolsrc/build.xml 2007-11-30 13:24:25.000000000 +0000 +*************** +*** 20,65 **** + <!-- Download source from Sun's site, unzip it, remove + the files we don't need, and change the package + --> +! <get src="http://java.sun.com/products/jfc/tsc/articles/treetable2/downloads/src.zip" dest="${nest}/${build.dir}/swingExSrc.zip"/> +! <unzip src="${nest}/${build.dir}/swingExSrc.zip" dest="${src.debugger}"/> + <delete file="${src.debugger}/FileSystemModel2.java" /> + <delete file="${src.debugger}/MergeSort.java" /> + <delete file="${src.debugger}/TreeTableExample2.java" /> +- <replace file="${src.debugger}/AbstractCellEditor.java"> +- <replacetoken>import java.awt.Component;</replacetoken> +- <replacevalue> +- package org.mozilla.javascript.tools.debugger; +- import java.awt.Component; +- </replacevalue> +- </replace> +- <replace file="${src.debugger}/AbstractTreeTableModel.java"> +- <replacetoken>import javax.swing.tree.*;</replacetoken> +- <replacevalue> +- package org.mozilla.javascript.tools.debugger; +- import javax.swing.tree.*; +- </replacevalue> +- </replace> +- <replace file="${src.debugger}/JTreeTable.java"> +- <replacetoken>import javax.swing.*;</replacetoken> +- <replacevalue> +- package org.mozilla.javascript.tools.debugger; +- import javax.swing.*; +- </replacevalue> +- </replace> +- <replace file="${src.debugger}/TreeTableModel.java"> +- <replacetoken>import javax.swing.tree.TreeModel;</replacetoken> +- <replacevalue> +- package org.mozilla.javascript.tools.debugger; +- import javax.swing.tree.TreeModel; +- </replacevalue> +- </replace> +- <replace file="${src.debugger}/TreeTableModelAdapter.java"> +- <replacetoken>import javax.swing.JTree;</replacetoken> +- <replacevalue> +- package org.mozilla.javascript.tools.debugger; +- import javax.swing.JTree; +- </replacevalue> +- </replace> + </target> + + <target name="compile" depends="properties,get-swing-ex"> +--- 20,29 ---- + <!-- Download source from Sun's site, unzip it, remove + the files we don't need, and change the package + --> +! <unzip src="../../../../../download/swingExSrc.zip" dest="${src.debugger}"/> + <delete file="${src.debugger}/FileSystemModel2.java" /> + <delete file="${src.debugger}/MergeSort.java" /> + <delete file="${src.debugger}/TreeTableExample2.java" /> + </target> + + <target name="compile" depends="properties,get-swing-ex"> +*** misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/Main.java Tue Mar 22 13:20:49 2005 +--- misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/Main.java Tue Jul 4 14:59:43 2006 +*************** +*** 470,484 **** +--- 470,490 ---- + case KeyEvent.VK_BACK_SPACE: + case KeyEvent.VK_ENTER: + case KeyEvent.VK_DELETE: ++ if (w.isEditable() == false) { + e.consume(); ++ } + break; + } + } + public void keyTyped(KeyEvent e) { ++ if (w.isEditable() == false) { + e.consume(); ++ } + } + public void keyReleased(KeyEvent e) { ++ if (w.isEditable() == false) { + e.consume(); ++ } + } + } + +*************** +*** 879,885 **** + } + }; + +! class FileWindow extends JInternalFrame implements ActionListener { + + Main db; + SourceInfo sourceInfo; +--- 885,891 ---- + } + }; + +! class FileWindow extends JInternalFrame implements ActionListener, DocumentListener { + + Main db; + SourceInfo sourceInfo; +*************** +*** 888,902 **** + JScrollPane p; + int currentPos; + JLabel statusBar; + + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + if (cmd.equals("Cut")) { +! // textArea.cut(); + } else if (cmd.equals("Copy")) { + textArea.copy(); + } else if (cmd.equals("Paste")) { +! // textArea.paste(); + } + } + +--- 894,909 ---- + JScrollPane p; + int currentPos; + JLabel statusBar; ++ boolean isModified = false; + + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + if (cmd.equals("Cut")) { +! textArea.cut(); + } else if (cmd.equals("Copy")) { + textArea.copy(); + } else if (cmd.equals("Paste")) { +! textArea.paste(); + } + } + +*************** +*** 910,926 **** + } + + void load() { +! Scriptable scope = db.getScope(); + if (scope == null) { + MessageDialogWrapper.showMessageDialog(db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE); + } else { + String url = getUrl(); + if (url != null) { +! new Thread(new LoadFile(db,scope,url)).start(); + } + } + } + + public int getPosition(int line) { + int result = -1; + try { +--- 917,989 ---- + } + + void load() { +! //Scriptable scope = db.getScope(); +! Scriptable scope = db.officeScripts.getScriptScope( getUrl() ); +! if ( scope == null ) +! { +! scope = db.getScope(); +! } + if (scope == null) { + MessageDialogWrapper.showMessageDialog(db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE); + } else { + String url = getUrl(); + if (url != null) { +! new Thread(new LoadFile(db,scope, url, new StringReader(textArea.getText()))).start(); + } + } + } + ++ void save() { ++ if (getUrl() != null) { ++ OutputStream os = null; ++ try { ++ if ( getUrl().startsWith("vnd.sun.star") ) ++ { ++ URL scriptUrl = db.officeScripts.getScriptUrl( getUrl() ); ++ if ( scriptUrl == null ) ++ { ++ throw new IOException("Can't optain stream for " + getUrl() ); ++ } ++ os = scriptUrl.openConnection().getOutputStream(); ++ } ++ else ++ { ++ os = new FileOutputStream( getUrl() ); ++ } ++ String s = textArea.getText(); ++ os.write(s.getBytes(), 0, s.length()); ++ ++ this.isModified = false; ++ } ++ catch (IOException ioe) { ++ JOptionPane.showMessageDialog(this, ++ "Error saving file: " + ioe.getMessage(), ++ "Error", JOptionPane.ERROR_MESSAGE); ++ } ++ finally ++ { ++ if ( os != null ) ++ { ++ try ++ { ++ os.close(); ++ os = null; ++ } ++ catch( IOException ioe ) ++ { ++ System.err.println("Error closing stream: " + ioe.getMessage() ); ++ ioe.printStackTrace(); ++ } ++ } ++ } ++ } ++ } ++ ++ public boolean isEditable() { ++ return db.isSourceEditingEnabled(); ++ } ++ ++ + public int getPosition(int line) { + int result = -1; + try { +*************** +*** 953,959 **** + fileHeader.repaint(); + } + } +! + FileWindow(Main db, SourceInfo sourceInfo) { + super(SourceInfo.getShortName(sourceInfo.getUrl()), + true, true, true, true); +--- 1016,1022 ---- + fileHeader.repaint(); + } + } +! public Main getDB() { return db; } + FileWindow(Main db, SourceInfo sourceInfo) { + super(SourceInfo.getShortName(sourceInfo.getUrl()), + true, true, true, true); +*************** +*** 972,977 **** +--- 1035,1048 ---- + pack(); + updateText(); + textArea.select(0); ++ addInternalFrameListener( new InternalFrameAdapter() { ++ public void internalFrameClosed(InternalFrameEvent e) { ++ // clean up scriptItems and sourceNames hashes ++ getDB().removeScript( getUrl() ); ++ // remove scripts for officeScripts ++ getDB().officeScripts.deleteScript( getUrl() ); ++ } ++ } ); + } + + private void updateToolTip() { +*************** +*** 990,996 **** +--- 1061,1070 ---- + void updateText() { + String newText = sourceInfo.getSource(); + if (!textArea.getText().equals(newText)) { ++ textArea.getDocument().removeDocumentListener(this); + textArea.setText(newText); ++ this.isModified = false; ++ textArea.getDocument().addDocumentListener(this); + int pos = 0; + if (currentPos != -1) { + pos = currentPos; +*************** +*** 1001,1006 **** +--- 1075,1105 ---- + fileHeader.repaint(); + } + ++ /* Implementation of DocumentListener interface */ ++ public void insertUpdate(DocumentEvent e) { ++ doChanged(e); ++ } ++ ++ public void removeUpdate(DocumentEvent e) { ++ doChanged(e); ++ } ++ ++ public void changedUpdate(DocumentEvent e) { ++ doChanged(e); ++ } ++ ++ public void doChanged(DocumentEvent e) { ++ this.isModified = true; ++ } ++ ++ public boolean isModified() { ++ return this.isModified; ++ } ++ ++ public String getText() { ++ return textArea.getText(); ++ } ++ + void setPosition(int pos) { + textArea.select(pos); + currentPos = pos; +*************** +*** 1618,1624 **** + if (line != -1) { + db.currentWindow = w; + } +! db.menubar.addFile(url); + w.setVisible(true); + if (activate) { + try { +--- 1717,1723 ---- + if (line != -1) { + db.currentWindow = w; + } +! // db.menubar.addFile(url); + w.setVisible(true); + if (activate) { + try { +*************** +*** 1752,1759 **** + Menubar(Main db) { + super(); + this.db = db; +! String[] fileItems = {"Open...", "Run...", "", "Exit"}; +! String[] fileCmds = {"Open", "Load", "", "Exit"}; + char[] fileShortCuts = {'0', 'N', '\0', 'X'}; + int[] fileAccelerators = {KeyEvent.VK_O, + KeyEvent.VK_N, +--- 1851,1860 ---- + Menubar(Main db) { + super(); + this.db = db; +! // String[] fileItems = {"Open...", "Run...", "", "Exit"}; +! // String[] fileCmds = {"Open", "Load", "", "Exit"}; +! String[] fileItems = {"Run", "Save", "", "Exit"}; +! String[] fileCmds = {"Run", "Save", "", "Exit"}; + char[] fileShortCuts = {'0', 'N', '\0', 'X'}; + int[] fileAccelerators = {KeyEvent.VK_O, + KeyEvent.VK_N, +*************** +*** 1795,1800 **** +--- 1896,1904 ---- + KeyStroke k = KeyStroke.getKeyStroke(fileAccelerators[i], Event.CTRL_MASK); + item.setAccelerator(k); + } ++ if (fileItems[i].equals("Save")) { ++ saveItem = item; ++ } + } + } + for (int i = 0; i < editItems.length; ++i) { +*************** +*** 1849,1857 **** + item.addActionListener(this); + windowMenu.add(item = new JMenuItem("Tile", 'T')); + item.addActionListener(this); +! windowMenu.addSeparator(); +! windowMenu.add(item = new JMenuItem("Console", 'C')); +! item.addActionListener(this); + add(windowMenu); + + } +--- 1953,1961 ---- + item.addActionListener(this); + windowMenu.add(item = new JMenuItem("Tile", 'T')); + item.addActionListener(this); +! // windowMenu.addSeparator(); +! // windowMenu.add(item = new JMenuItem("Console", 'C')); +! // item.addActionListener(this); + add(windowMenu); + + } +*************** +*** 1925,1935 **** +--- 2029,2044 ---- + item.addActionListener(this); + } + ++ public void setSaveEnabled(boolean state) { ++ saveItem.setEnabled(state); ++ } ++ + Main db; + JMenu windowMenu; + JCheckBoxMenuItem breakOnExceptions; + JCheckBoxMenuItem breakOnEnter; + JCheckBoxMenuItem breakOnReturn; ++ JMenuItem saveItem; + }; + + class EnterInterrupt implements Runnable { +*************** +*** 1942,1947 **** +--- 2051,2063 ---- + public void run() { + JMenu menu = db.getJMenuBar().getMenu(0); + //menu.getItem(0).setEnabled(false); // File->Load ++ ++ // disable Edit menu Cut, Copy, Paste items ++ menu = db.getJMenuBar().getMenu(1); ++ for (int i = 0; i < 3; i++) { ++ menu.getItem(i).setEnabled(false); ++ } ++ + menu = db.getJMenuBar().getMenu(2); + menu.getItem(0).setEnabled(false); // Debug->Break + int count = menu.getItemCount(); +*************** +*** 1954,1959 **** +--- 2070,2079 ---- + b = true; + } + db.toolBar.setEnabled(true); ++ ++ // set flag to disable source editing ++ db.setSourceEditingEnabled(false); ++ + // raise the debugger window + db.toFront(); + } +*************** +*** 1967,1972 **** +--- 2087,2099 ---- + public void run() { + JMenu menu = db.getJMenuBar().getMenu(0); + menu.getItem(0).setEnabled(true); // File->Load ++ ++ // enable Edit menu items ++ menu = db.getJMenuBar().getMenu(1); ++ for (int i = 0; i < 3; i++) { ++ menu.getItem(i).setEnabled(true); ++ } ++ + menu = db.getJMenuBar().getMenu(2); + menu.getItem(0).setEnabled(true); // Debug->Break + int count = menu.getItemCount() - 1; +*************** +*** 1980,1985 **** +--- 2107,2116 ---- + db.toolBar.getComponent(ci).setEnabled(b); + b = false; + } ++ ++ // set flag to enable source editing ++ db.setSourceEditingEnabled(true); ++ + //db.console.consoleTextArea.requestFocus(); + } + }; +*************** +*** 1988,2004 **** + { + String fileName; + Main db; + OpenFile(Main db, String fileName) + { + this.fileName = fileName; + this.db = db; + } + public void run() { + Context cx = Context.enter(); + ContextData contextData = ContextData.get(cx); + contextData.breakNextLine = true; + try { +! cx.compileReader(new FileReader(fileName), fileName, 1, null); + } catch (Exception exc) { + String msg = exc.getMessage(); + if (exc instanceof EcmaError) { +--- 2119,2142 ---- + { + String fileName; + Main db; ++ Reader reader = null; + OpenFile(Main db, String fileName) + { + this.fileName = fileName; + this.db = db; + } ++ OpenFile(Main db, String fileName, Reader reader) { ++ this(db, fileName); ++ this.reader = reader; ++ } + public void run() { + Context cx = Context.enter(); + ContextData contextData = ContextData.get(cx); + contextData.breakNextLine = true; + try { +! cx.compileReader( +! reader == null ? new FileReader(fileName) : reader, +! fileName, 1, null); + } catch (Exception exc) { + String msg = exc.getMessage(); + if (exc instanceof EcmaError) { +*************** +*** 2019,2047 **** + Scriptable scope; + String fileName; + Main db; + LoadFile(Main db, Scriptable scope, String fileName) { + this.scope = scope; + this.fileName = fileName; + this.db = db; + } + public void run() { + Context cx = Context.enter(); + ContextData contextData = ContextData.get(cx); + contextData.breakNextLine = true; + try { +! cx.evaluateReader(scope, new FileReader(fileName), + fileName, 1, null); + } catch (Exception exc) { + String msg = exc.getMessage(); + if (exc instanceof EcmaError) { + EcmaError err = (EcmaError)exc; + msg = err.getSourceName() + ", line " + err.getLineNumber() + ": " + msg; +! } + MessageDialogWrapper.showMessageDialog(db, + msg, + "Run", + JOptionPane.ERROR_MESSAGE); + } finally { + cx.exit(); + } + } +--- 2157,2235 ---- + Scriptable scope; + String fileName; + Main db; ++ Reader reader = null; ++ Object result = null; ++ Exception exception = null; ++ int lineNum = -1; ++ boolean sfExecute = false; ++ + LoadFile(Main db, Scriptable scope, String fileName) { + this.scope = scope; + this.fileName = fileName; + this.db = db; + } ++ ++ LoadFile(Main db, Scriptable scope, String fileName, Reader reader) { ++ this(db, scope, fileName); ++ this.reader = reader; ++ } ++ LoadFile(Main db, Scriptable scope, String fileName, Reader reader, boolean sfExecute ) { ++ this(db, scope, fileName); ++ this.reader = reader; ++ this.sfExecute = sfExecute; ++ } ++ + public void run() { ++ if ( db.officeScripts.isScriptRunning( fileName ) ) ++ { ++ exception = new Exception("The script is already executing"); ++ if ( !sfExecute ) { ++ MessageDialogWrapper.showMessageDialog(db, ++ "Script already executing", ++ "Run", ++ JOptionPane.ERROR_MESSAGE); ++ } ++ return; ++ } ++ db.officeScripts.setScriptRunning( fileName, true ); + Context cx = Context.enter(); + ContextData contextData = ContextData.get(cx); ++ if ( sfExecute ) ++ { ++ contextData.breakNextLine = false; ++ } ++ else ++ { + contextData.breakNextLine = true; ++ } ++ /* ++ FileWindow w = (FileWindow)db.getSelectedFrame(); ++ if ( sfExecute ) ++ { ++ db.swingInvoke(new SetFilePosition(db, w, -1 ) ); ++ }*/ + try { +! result = cx.evaluateReader(scope, +! reader == null ? new FileReader(fileName) : reader, + fileName, 1, null); + } catch (Exception exc) { ++ exception = exc; + String msg = exc.getMessage(); + if (exc instanceof EcmaError) { + EcmaError err = (EcmaError)exc; + msg = err.getSourceName() + ", line " + err.getLineNumber() + ": " + msg; +! +! int lineNum = err.getLineNumber() ; +! //db.swingInvoke(new SetFilePosition(db, w, lineNum ) ); +! if ( !sfExecute ) { + MessageDialogWrapper.showMessageDialog(db, + msg, + "Run", + JOptionPane.ERROR_MESSAGE); ++ } ++ } + } finally { ++ db.officeScripts.setScriptRunning( fileName, false ); + cx.exit(); + } + } +*************** +*** 2416,2428 **** + super.setVisible(b); + if (b) { + // this needs to be done after the window is visible +! console.consoleTextArea.requestFocus(); + context.split.setDividerLocation(0.5); + try { +! console.setMaximum(true); +! console.setSelected(true); +! console.show(); +! console.consoleTextArea.requestFocus(); + } catch (Exception exc) { + } + } +--- 2604,2616 ---- + super.setVisible(b); + if (b) { + // this needs to be done after the window is visible +! // console.consoleTextArea.requestFocus(); + context.split.setDividerLocation(0.5); + try { +! // console.setMaximum(true); +! // console.setSelected(true); +! // console.show(); +! // console.consoleTextArea.requestFocus(); + } catch (Exception exc) { + } + } +*************** +*** 2449,2483 **** + + Hashtable functionNames = new Hashtable(); + +- ScriptItem getScriptItem(DebuggableScript fnOrScript) { +- ScriptItem item = (ScriptItem)scriptItems.get(fnOrScript); +- if (item == null) { +- String url = getNormilizedUrl(fnOrScript); +- SourceInfo si = (SourceInfo)sourceNames.get(url); +- if (si == null) { +- if (!fnOrScript.isGeneratedScript()) { +- // Not eval or Function, try to load it from URL +- String source = null; +- try { +- InputStream is = openSource(url); +- try { source = readSource(is); } +- finally { is.close(); } +- } catch (IOException ex) { +- System.err.println +- ("Failed to load source from "+url+": "+ ex); +- } +- if (source != null) { +- si = registerSource(url, source); +- } +- } +- } +- if (si != null) { +- item = registerScript(si, fnOrScript); +- } +- } +- return item; +- } +- + /* Debugger Interface */ + + public void handleCompilationDone(Context cx, DebuggableScript fnOrScript, +--- 2637,2642 ---- +*************** +*** 2490,2496 **** + + String getNormilizedUrl(DebuggableScript fnOrScript) { + String url = fnOrScript.getSourceName(); +! if (url == null) { url = "<stdin>"; } + else { + // Not to produce window for eval from different lines, + // strip line numbers, i.e. replace all #[0-9]+\(eval\) by (eval) +--- 2649,2655 ---- + + String getNormilizedUrl(DebuggableScript fnOrScript) { + String url = fnOrScript.getSourceName(); +! if (url == null) { url = "document"; } + else { + // Not to produce window for eval from different lines, + // strip line numbers, i.e. replace all #[0-9]+\(eval\) by (eval) +*************** +*** 2601,2607 **** + if (si == null) { + si = new SourceInfo(sourceUrl, source); + sourceNames.put(sourceUrl, si); +! } else { + si.setSource(source); + } + } +--- 2760,2766 ---- + if (si == null) { + si = new SourceInfo(sourceUrl, source); + sourceNames.put(sourceUrl, si); +! } else if (!source.equals(si.getSource())) { + si.setSource(source); + } + } +*************** +*** 2762,2768 **** + desk = new JDesktopPane(); + desk.setPreferredSize(new Dimension(600, 300)); + desk.setMinimumSize(new Dimension(150, 50)); +! desk.add(console = new JSInternalConsole("JavaScript Console")); + context = new ContextWindow(this); + context.setPreferredSize(new Dimension(600, 120)); + context.setMinimumSize(new Dimension(50, 50)); +--- 2921,2927 ---- + desk = new JDesktopPane(); + desk.setPreferredSize(new Dimension(600, 300)); + desk.setMinimumSize(new Dimension(150, 50)); +! // desk.add(console = new JSInternalConsole("JavaScript Console")); + context = new ContextWindow(this); + context.setPreferredSize(new Dimension(600, 120)); + context.setMinimumSize(new Dimension(50, 50)); +*************** +*** 2871,2877 **** + FrameHelper frame = contextData.getFrame(frameIndex); + String sourceName = frame.getUrl(); + if (sourceName == null || sourceName.equals("<stdin>")) { +! console.show(); + helper.reset(); + return; + } +--- 3030,3036 ---- + FrameHelper frame = contextData.getFrame(frameIndex); + String sourceName = frame.getUrl(); + if (sourceName == null || sourceName.equals("<stdin>")) { +! // console.show(); + helper.reset(); + return; + } +*************** +*** 2895,2900 **** +--- 3054,3072 ---- + int dispatcherIsWaiting = 0; + Context currentContext = null; + ++ // Flag used to establish whether source code editing is allowed in ++ // the debugger, switched on and off depending on whether a debug session ++ // is active ++ boolean sourceEditingEnabled = true; ++ ++ public boolean isSourceEditingEnabled() { ++ return sourceEditingEnabled; ++ } ++ ++ void setSourceEditingEnabled(boolean b) { ++ sourceEditingEnabled = b; ++ } ++ + Context getCurrentContext() { + return currentContext; + } +*************** +*** 3028,3041 **** + swingInvoke(CreateFileWindow.action(this, si, line)); + } + } else { +! if (console.isVisible()) { + final JSInternalConsole finalConsole = console; + swingInvoke(new Runnable() { + public void run() { + finalConsole.show(); + } + }); +! } + } + swingInvoke(new EnterInterrupt(this, cx)); + swingInvoke(new UpdateContext(this, cx)); +--- 3200,3213 ---- + swingInvoke(CreateFileWindow.action(this, si, line)); + } + } else { +! /* if (console.isVisible()) { + final JSInternalConsole finalConsole = console; + swingInvoke(new Runnable() { + public void run() { + finalConsole.show(); + } + }); +! } */ + } + swingInvoke(new EnterInterrupt(this, cx)); + swingInvoke(new UpdateContext(this, cx)); +*************** +*** 3217,3222 **** +--- 3389,3402 ---- + fileName)).start(); + } + } ++ } else if (cmd.equals("Run")) { ++ FileWindow w = (FileWindow)getSelectedFrame(); ++ if (w != null) ++ w.load(); ++ } else if (cmd.equals("Save")) { ++ FileWindow w = (FileWindow)getSelectedFrame(); ++ if (w != null) ++ w.save(); + } else if (cmd.equals("More Windows...")) { + MoreWindows dlg = new MoreWindows(this, fileWindows, + "Window", "Files"); +*************** +*** 3509,3514 **** +--- 3689,3748 ---- + } + } + ++ JInternalFrame getFrameForUrl( URL url ) ++ { ++ JInternalFrame[] frames = desk.getAllFrames(); ++ for (int i = 0; i < frames.length; i++) { ++ FileWindow w = (FileWindow)frames[i]; ++ if ( url.toString().equals( w.getUrl() ) ) { ++ return w; ++ } ++ } ++ return null; ++ } ++ public void highlighLineInSelectedWindow(URL url, int lineNum ){ ++ //FileWindow w = (FileWindow)getFrameForUrl( url ); ++ FileWindow w = (FileWindow)getSelectedFrame(); ++ if (w != null) ++ { ++ if ( lineNum > -1 ) ++ swingInvoke(new SetFilePosition(this, w, lineNum ) ); ++ } ++ } ++ public Object runSelectedWindow( URL scriptUrl ) throws Exception ++ { ++ Object result = null; ++ FileWindow w = (FileWindow)getSelectedFrame(); ++ //FileWindow w = (FileWindow)getFrameForUrl( scriptUrl ); ++ w.toFront(); ++ if (w != null) ++ { ++ Scriptable scope = w.db.getScope(); ++ if (scope == null) ++ { ++ MessageDialogWrapper.showMessageDialog(w.db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE); ++ result = null; ++ } ++ else ++ { ++ String url = w.getUrl(); ++ Thread executorThread = null; ++ if (url != null) ++ { ++ LoadFile executor = new LoadFile(w.db,scope, url, new StringReader(w.textArea.getText()), true ); ++ executor.run(); ++ result = executor.result; ++ if ( executor.exception != null ) ++ { ++ throw executor.exception; ++ } ++ } ++ } ++ } ++ return result; ++ ++ } ++ + // + // public interface + // +*************** +*** 3604,3609 **** +--- 3838,3906 ---- + return console.getErr(); + } + ++ public void openFile(URL scriptUrl, Scriptable scope, Runnable closeCallback ) { ++ if (scope == null) { ++ MessageDialogWrapper.showMessageDialog(this, ++ "Can't compile scripts: no scope available", ++ "Open", JOptionPane.ERROR_MESSAGE); ++ } else { ++ if (scriptUrl != null) { ++ try ++ { ++ InputStreamReader reader = new InputStreamReader(scriptUrl.openStream()); ++ String fileName = null; ++ if ( scriptUrl.getProtocol().startsWith("vnd.sun.star.") ) ++ { ++ fileName = scriptUrl.toString(); ++ } ++ else ++ { ++ fileName = scriptUrl.getPath(); ++ } ++ officeScripts.addScript( fileName, scriptUrl, scope, closeCallback ); ++ //new Thread(new OpenFile(this, scope, fileName, reader )).start(); ++ swingInvoke( new OpenFile(this, fileName, reader )); ++ } ++ catch ( IOException e ) ++ { ++ MessageDialogWrapper.showMessageDialog(this, ++ "Can't open stream for script: " + e.toString(), ++ "Open", JOptionPane.ERROR_MESSAGE); ++ } ++ } ++ } ++ split1.setDividerLocation(1.0); ++ } ++ ++ public void openFile(String fileName) { ++ Scriptable scope = getScope(); ++ if (scope == null) { ++ MessageDialogWrapper.showMessageDialog(this, ++ "Can't compile scripts: no scope available", ++ "Open", JOptionPane.ERROR_MESSAGE); ++ } else { ++ if (fileName != null) { ++ new Thread(new OpenFile(this, fileName)).start(); ++ } ++ } ++ split1.setDividerLocation(1.0); ++ } ++ ++ public void openStream(InputStream in) { ++ Scriptable scope = getScope(); ++ if (scope == null) { ++ MessageDialogWrapper.showMessageDialog(this, ++ "Can't compile scripts: no scope available", ++ "Open", JOptionPane.ERROR_MESSAGE); ++ } else { ++ if (in != null) { ++ new Thread(new OpenFile(this, null, new InputStreamReader(in))).start(); ++ } ++ } ++ split1.setDividerLocation(1.0); ++ menubar.setSaveEnabled(false); ++ } ++ + public static void main(String[] args) { + try { + mainThread = Thread.currentThread(); +*************** +*** 3635,3639 **** +--- 3932,4093 ---- + } + } + ++ // patched Office specific interface ++ ++ OfficeScriptInfo officeScripts = new OfficeScriptInfo(); ++ ++ void removeScript( String url ) ++ { ++ // Remove the FileWindow from list of open sources ++ fileWindows.remove( url ); ++ ++ // Remove sourceInfo from sourceNames, ensures that ++ // breakpoints etc are deleted ++ synchronized (sourceNames) { ++ sourceNames.remove( url ); ++ } ++ // Removes scriptItems for the script, ensures that a new open ( from openFile ) ++ // will succeed, openFile should open file but fails due to fact that ++ synchronized ( scriptItems ) ++ { ++ Iterator iter = scriptItems.entrySet().iterator(); ++ while ( iter.hasNext() ) ++ { ++ Map.Entry me = ( Map.Entry )iter.next(); ++ ScriptItem item = (ScriptItem)me.getValue(); ++ SourceInfo si = item.getSourceInfo(); ++ if ( si.getUrl().equals( url ) ) ++ { ++ //match ++ scriptItems.remove( me.getKey() ); ++ break; ++ } ++ } ++ } ++ officeScripts.deleteScript( url ); ++ } ++ ++ ++ ScriptItem getScriptItem(DebuggableScript fnOrScript) { ++ ScriptItem item = (ScriptItem)scriptItems.get(fnOrScript); ++ if (item == null) { ++ String url = getNormilizedUrl(fnOrScript); ++ SourceInfo si = (SourceInfo)sourceNames.get(url); ++ if (si == null) { ++ if (!fnOrScript.isGeneratedScript()) { ++ // Not eval or Function, try to load it from URL ++ String source = null; ++ try { ++ InputStream is = openSource(url); ++ try { source = readSource(is); } ++ finally { is.close(); } ++ } catch (IOException ex) { ++ System.err.println ++ ("Failed to load source from "+url+": "+ ex); ++ } ++ if (source != null) { ++ si = registerSource(url, source); ++ } ++ } ++ } ++ if (si != null) { ++ item = registerScript(si, fnOrScript); ++ } ++ } ++ ++ return item; ++ } ++ ++ public void showScriptWindow(URL url ){ ++ String key = url.getPath(); ++ if ( url.getProtocol().startsWith("vnd.sun.star") ) ++ { ++ key = url.toString(); ++ } ++ FileWindow w = (FileWindow)getFileWindow( key ); ++ if ( w != null ) ++ { ++ //w.maximize(); ++ desk.getDesktopManager().deiconifyFrame(w); ++ desk.getDesktopManager().activateFrame(w); ++ w.show(); ++ w.toFront(); ++ } ++ } ++ ++ public void highlighLineInScriptWindow(URL url, int lineNum ){ ++ String key = url.getPath(); ++ if ( url.getProtocol().startsWith("vnd.sun.star") ) ++ { ++ key = url.getPath(); ++ } ++ FileWindow w = (FileWindow)getFileWindow( key ); ++ if (w != null) ++ { ++ if ( lineNum > -1 ) ++ swingInvoke(new SetFilePosition(this, w, lineNum ) ); ++ } ++ } ++ public Object runScriptWindow( URL scriptUrl ) throws Exception ++ { ++ String key = scriptUrl.getPath(); ++ if ( scriptUrl.getProtocol().startsWith("vnd.sun.star") ) ++ { ++ key = scriptUrl.toString(); ++ } ++ FileWindow w = (FileWindow)getFileWindow( key ); ++ Object result = null; ++ w.toFront(); ++ if (w != null) ++ { ++ //Scriptable scope = w.db.getScope(); ++ Scriptable scope = w.db.officeScripts.getScriptScope( key ); ++ if (scope == null) ++ { ++ MessageDialogWrapper.showMessageDialog(w.db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE); ++ result = null; ++ } ++ else ++ { ++ String url = w.getUrl(); ++ Thread executorThread = null; ++ if (url != null) ++ { ++ LoadFile executor = new LoadFile(w.db,scope, url, new StringReader(w.textArea.getText()), true ); ++ executor.run(); ++ result = executor.result; ++ if ( executor.exception != null ) ++ { ++ throw executor.exception; ++ } ++ } ++ } ++ } ++ return result; ++ ++ } ++ ++ public boolean isModified( URL url ) ++ { ++ String key = url.getPath(); ++ if ( url.getProtocol().startsWith("vnd.sun.star") ) ++ { ++ key = url.toString(); ++ } ++ FileWindow w = (FileWindow)getFileWindow( key ); ++ return w.isModified(); ++ } ++ ++ public String getText( URL url ) ++ { ++ String key = url.toString(); ++ if ( url.getProtocol().startsWith("vnd.sun.star") ) ++ { ++ key = url.toString(); ++ } ++ FileWindow w = (FileWindow)getFileWindow( key ); ++ return w.getText(); ++ } ++ + } + |