From 1fd794dfdb1a48922bf6c12ba28f919e29b748c6 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 10 Apr 2017 15:51:29 +0200 Subject: [PATCH] Cache editor tools (don't create new instance for each menu item) --- app/src/processing/app/Editor.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ace0faa97..0125feb95 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -198,6 +198,8 @@ public class Editor extends JFrame implements RunnerListener { private Runnable exportAppHandler; private Runnable timeoutUploadHandler; + private Map internalToolCache = new HashMap(); + public Editor(Base ibase, File file, int[] storedLocation, int[] defaultLocation, Platform platform) throws Exception { super("Arduino"); this.base = ibase; @@ -963,8 +965,7 @@ public class Editor extends JFrame implements RunnerListener { JMenuItem createToolMenuItem(String className) { try { - Class toolClass = Class.forName(className); - final Tool tool = (Tool) toolClass.newInstance(); + final Tool tool = getOrCreateToolInstance(className); JMenuItem item = new JMenuItem(tool.getMenuTitle()); @@ -983,6 +984,20 @@ public class Editor extends JFrame implements RunnerListener { } } + private Tool getOrCreateToolInstance(String className) { + Tool internalTool = internalToolCache.get(className); + if (internalTool == null) { + try { + Class toolClass = Class.forName(className); + internalTool = (Tool) toolClass.newInstance(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + internalToolCache.put(className, internalTool); + } + return internalTool; + } private void addInternalTools(JMenu menu) { JMenuItem item;