Ignore:
Timestamp:
2011-01-22T12:18:25+01:00 (14 years ago)
Author:
guggis
Message:

'Now caches compiled scripts, if possible. Fixes OutOfMemory when running groovy scripts.'

Location:
applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/RunScriptDialog.java

    r25071 r25107  
    1414import java.io.FileReader;
    1515import java.io.IOException;
    16 import java.net.MalformedURLException;
    17 import java.net.URL;
    18 import java.net.URLClassLoader;
    1916import java.util.Collections;
    2017import java.util.LinkedList;
    2118import java.util.List;
    2219import java.util.logging.Logger;
    23 import java.util.regex.Matcher;
    24 import java.util.regex.Pattern;
    25 
    26 import javax.activation.MimetypesFileTypeMap;
     20
     21import javax.script.Compilable;
     22import javax.script.CompiledScript;
    2723import javax.script.ScriptEngine;
    28 import javax.script.ScriptEngineFactory;
    29 import javax.script.ScriptEngineManager;
    3024import javax.script.ScriptException;
    3125import javax.swing.AbstractAction;
     
    4640import org.openstreetmap.josm.gui.widgets.HtmlPanel;
    4741import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
     42import org.openstreetmap.josm.plugins.scripting.preferences.PreferenceKeys;
    4843import org.openstreetmap.josm.tools.ImageProvider;
    4944import org.openstreetmap.josm.tools.WindowGeometry;
     
    5348 * running a script.</p>
    5449 */
    55 public class RunScriptDialog extends JDialog {
     50public class RunScriptDialog extends JDialog implements PreferenceKeys{
    5651        static private final Logger logger = Logger.getLogger(RunScriptDialog.class.getName());
    57        
    58         /**
    59          * <p>The preferences key for the script file history.</p>
    60          */
    61         static private final String PREF_KEY_FILE_HISTORY = "scripting.RunScriptDialog.file-history";
    62        
    63         /**
    64          * <p>The preferences key for the last script file name entered in the script file
    65          * selection field.</p>
    66          */     
    67         static private final String PREF_KEY_LAST_FILE = "scripting.RunScriptDialog.last-file";
    6852
    6953        /** the input field for the script file name */
     
    227211                        HelpAwareOptionPane.showOptionDialog(
    228212                                        RunScriptDialog.this,
    229                                         tr("The script file ''{0}'' isn't readable.", f.toString()),
     213                                        tr("The script file ''{0}'' isn''t readable.", f.toString()),
    230214                                        tr("File not readable"),
    231215                                        JOptionPane.ERROR_MESSAGE,
     
    263247                                        "<html>"
    264248                                        + tr(
    265                                                 "<p>The script can''t be executed, becasue there are currently no scripting engines installed.</p>"
     249                                                "<p>The script can''t be executed, because there are currently no scripting engines installed.</p>"
    266250                                                + "<p>Refer to the online help for information about how to install a scripting engine with JOSM.</p>"                                         
    267251                                        )                                       
     
    308292                        final ScriptEngine engine = getScriptEngine(f);
    309293                        if (engine == null) return;
     294               
    310295                        SwingUtilities.invokeLater(
    311296                            new Runnable() {
     
    313298                                        FileReader reader = null;
    314299                                                try {
    315                                                         reader = new FileReader(f);
    316                                                         engine.eval(reader);
     300                                                        if (engine instanceof Compilable) {
     301                                                                CompiledScript script = CompiledScriptCache.getInstance().compile((Compilable)engine,f);
     302                                                                logger.info("running compiled script for " + f);
     303                                                                script.eval();
     304                                                        } else {
     305                                                                reader = new FileReader(f);                                                             
     306                                                                engine.eval(reader);
     307                                                        }
    317308                                                } catch(ScriptException e){
    318309                                                        warnExecutingScriptFailed(e);
     
    327318                            }
    328319                    );
     320                       
    329321                        setVisible(false);             
    330322                }       
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/ScriptEngineProvider.java

    r25071 r25107  
    77import java.io.IOException;
    88import java.io.InputStream;
     9import java.lang.reflect.Field;
    910import java.net.MalformedURLException;
    1011import java.net.URL;
     
    4445        private final List<File> scriptEngineJars = new ArrayList<File>();
    4546        private MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
     47        private ClassLoader scriptClassLoader = getClass().getClassLoader();
    4648               
    4749        protected void loadMimeTypesMap() {
     
    8183                        scriptEngineJars.add(new File(jar));
    8284                }               
     85                scriptClassLoader = buildClassLoader();
    8386        }
    8487       
     
    151154         */
    152155        public ScriptEngine getEngineByName(String name) {
    153                 ScriptEngineManager mgr = new ScriptEngineManager(buildClassLoader());
     156                ScriptEngineManager mgr = new ScriptEngineManager(scriptClassLoader);
    154157                return mgr.getEngineByName(name);
    155158        }
     
    201204                        }
    202205                }
     206                buildClassLoader();
    203207                loadScriptEngineFactories();
    204208                fireContentsChanged(this, 0, scriptEngineJars.size());
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/ScriptEngineSelectionDialog.java

    r25071 r25107  
    1313import java.awt.event.MouseAdapter;
    1414import java.awt.event.MouseEvent;
    15 import java.util.List;
    1615
    1716import javax.script.ScriptEngine;
    18 import javax.script.ScriptEngineFactory;
    1917import javax.swing.AbstractAction;
    2018import javax.swing.BorderFactory;
     
    2220import javax.swing.JComponent;
    2321import javax.swing.JDialog;
    24 import javax.swing.JLabel;
    2522import javax.swing.JList;
    2623import javax.swing.JOptionPane;
    2724import javax.swing.JPanel;
    2825import javax.swing.KeyStroke;
    29 import javax.swing.ListCellRenderer;
    3026import javax.swing.ListSelectionModel;
    31 import javax.swing.UIManager;
    3227import javax.swing.event.ListSelectionEvent;
    3328import javax.swing.event.ListSelectionListener;
     
    3833import org.openstreetmap.josm.gui.help.HelpUtil;
    3934import org.openstreetmap.josm.gui.widgets.HtmlPanel;
     35import org.openstreetmap.josm.plugins.scripting.ui.ScriptEngineCellRenderer;
    4036import org.openstreetmap.josm.tools.ImageProvider;
    4137import org.openstreetmap.josm.tools.WindowGeometry;
    42 import org.openstreetmap.josm.plugins.scripting.ui.ScriptEngineCellRenderer;
    4338
    4439/**
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/preferences/PreferenceKeys.java

    r25071 r25107  
    99         */
    1010        String PREF_KEY_SCRIPTING_ENGINE_JARS = "scripting.engine-jars";
    11 
     11       
     12        /**
     13         * <p>The preferences key for the script file history.</p>
     14         */
     15        String PREF_KEY_FILE_HISTORY = "scripting.RunScriptDialog.file-history";
     16       
     17        /**
     18         * <p>The preferences key for the last script file name entered in the script file
     19         * selection field.</p>
     20         */     
     21        String PREF_KEY_LAST_FILE = "scripting.RunScriptDialog.last-file";
    1222}
Note: See TracChangeset for help on using the changeset viewer.