Community
Participate
Working Groups
VM = Sidecar 1122 with -verify Starting Eclipse with an empty workspace, debug.ui is activated as per the stack trace below. This causes some 30 classes and 160K of code to be loaded. It also causes debug.core and ui.workbench.texteditor to be activated for a further 35 classed and 110K of code. This seems to be related to the external tools support and the drop down activation problem. However, even if that problem is fixed, it still appears that too much work is being done to facilitate some presence in the external tools framework. Activating plugin: org.eclipse.debug.ui Plugin activation stack: org.eclipse.debug.ui Class loading stack: org.eclipse.ui.externaltools.internal.menu.ExternalToolMenuDelegate Stack trace: java.lang.Throwable at java.lang.Throwable.<init>(Throwable.java) at org.eclipse.core.internal.runtime.PluginStats.traceActivate (PluginStats.java:89) at org.eclipse.core.internal.runtime.PluginStats.startActivation (PluginStats.java:71) at org.eclipse.core.internal.plugins.PluginDescriptor.doPluginActivation (PluginDescriptor.java:187) at org.eclipse.core.internal.plugins.PluginClassLoader.activatePlugin (PluginClassLoader.java:59) at org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf (PluginClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.access$0 (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader$DelegateLoader.loadClass (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassPrerequisites (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java) at java.lang.ClassLoader.loadClass(ClassLoader.java) at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java) at java.net.URLClassLoader.defineClass(URLClassLoader.java) at java.net.URLClassLoader.access$400(URLClassLoader.java) at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java) at java.security.AccessController.doPrivileged (AccessController.java:217) at java.net.URLClassLoader.findClass(URLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClass (DelegatingURLClassLoader.java) at org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf (PluginClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java) at java.lang.ClassLoader.loadClass(ClassLoader.java) at org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension (PluginDescriptor.java:130) at org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension (PluginDescriptor.java:167) at org.eclipse.core.internal.plugins.ConfigurationElement.createExecutableExtension (ConfigurationElement.java:103) at org.eclipse.ui.internal.WorkbenchPlugin$1.run (WorkbenchPlugin.java:116) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65) at org.eclipse.ui.internal.WorkbenchPlugin.createExtension (WorkbenchPlugin.java:113) at org.eclipse.ui.internal.PluginAction.createDelegate (PluginAction.java:85) at org.eclipse.ui.internal.WWinPluginPulldown.getPulldownDelegate (WWinPluginPulldown.java:72) at org.eclipse.ui.internal.WWinPluginPulldown$MenuProxy.getMenu (WWinPluginPulldown.java:29) at org.eclipse.jface.action.ActionContributionItem.fill (ActionContributionItem.java:228) at org.eclipse.jface.action.SubContributionItem.fill (SubContributionItem.java:45) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:535) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:447) at org.eclipse.jface.action.MenuManager.fill(MenuManager.java:182) at org.eclipse.jface.action.SubContributionItem.fill (SubContributionItem.java:45) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:535) at org.eclipse.jface.action.MenuManager.updateAll(MenuManager.java:582) at org.eclipse.ui.internal.WorkbenchWindow.updateActionBars (WorkbenchWindow.java:1442) at org.eclipse.ui.internal.WorkbenchWindow.updateActionSets (WorkbenchWindow.java:1460) at org.eclipse.ui.internal.WorkbenchWindow$7.run (WorkbenchWindow.java:1268) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65) at org.eclipse.ui.internal.WorkbenchWindow.setActivePage (WorkbenchWindow.java:1242) at org.eclipse.ui.internal.WorkbenchWindow.restoreState (WorkbenchWindow.java:1125) at org.eclipse.ui.internal.Workbench.restoreState(Workbench.java:1231) at org.eclipse.ui.internal.Workbench.access$7(Workbench.java:1200) at org.eclipse.ui.internal.Workbench$8.run(Workbench.java:838) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:843) at org.eclipse.core.runtime.Platform.run(Platform.java:413) at org.eclipse.ui.internal.Workbench.openPreviousWorkbenchState (Workbench.java:790) at org.eclipse.ui.internal.Workbench.init(Workbench.java:603) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1346) at org.eclipse.core.internal.boot.InternalBootLoader.run (InternalBootLoader.java:841) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462) at java.lang.reflect.AccessibleObject.invokeL(AccessibleObject.java:203) at java.lang.reflect.Method.invoke(Method.java:271) at org.eclipse.core.launcher.Main.basicRun(Main.java:247) at org.eclipse.core.launcher.Main.run(Main.java:703) at org.eclipse.core.launcher.Main.main(Main.java:539)
It does not look like we will be able to fix this for M4. We were looking at deferring submenu creation until the main menu was pulled down. But we cannot do this due to the structure of the API. We are investigating other options, like allowing plugins to add and remove items dynamically to action sets and having the workbench persist them, but this will not be done for M4. Darin, how much room for improvement is there in reducing the startup time for debug and external tools, so that the effects of this are minimized? For example, would it be possible for you to persist a picture of the menus without having to recreate the launch configs?
*** This bug has been marked as a duplicate of 18830 ***
It is non-trivial work to persist the images/labels as temporary delegates, and then replace actions with the real "launch actions". As well, external tools subclasses the "AbstractLaunchToolbarAction" (defined in the debug UI), which will still cause the debug UI plug-in to be loaded (I believe). I believe we should just determine the proper solution, rather implementing a temporary fix.