Community
Participate
Working Groups
The Java Debugger contributes toggle actions to view toolbars to show/hide qualified names of Java elements. It seems these actions are being instantiated immediately when the associated view is created, as the proxy/plugin action is registered as a selection changed listener. This, of course, causes the associated plug-in to be loaded early than required. Looking at the code in PartPluginAction#registerSelectionListener(..) fires a selection change event to the listener being registered, which causes the delegate to be instantiated: protected void registerSelectionListener(IWorkbenchPart aPart) { ISelectionProvider selectionProvider = aPart.getSite ().getSelectionProvider(); if (selectionProvider != null) { selectionProvider.addSelectionChangedListener(this); selectionChanged(selectionProvider.getSelection()); } } Here's an example stack trace where the delegate gets instantiated: Thread [main] (Suspended (breakpoint at line 79 in org.eclipse.jdt.internal.debug.ui.actions.ToggleDelegateAction)) org.eclipse.jdt.internal.debug.ui.actions.ShowQualifiedAction (org.eclipse.jdt.internal.debug.ui.actions.ToggleDelegateAction).selectionChange d(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) line: 79 org.eclipse.ui.internal.ViewPluginAction (org.eclipse.ui.internal.PluginAction).refreshEnablement() line: 204 org.eclipse.ui.internal.ViewPluginAction (org.eclipse.ui.internal.PluginAction).createDelegate() line: 106 org.eclipse.ui.internal.ViewPluginAction (org.eclipse.ui.internal.PluginAction).selectionChanged (org.eclipse.jface.viewers.ISelection) line: 269 org.eclipse.ui.internal.ViewPluginAction (org.eclipse.ui.internal.PartPluginAction).registerSelectionListener (org.eclipse.ui.IWorkbenchPart) line: 39 org.eclipse.ui.internal.ViewPluginAction.<init> (org.eclipse.core.runtime.IConfigurationElement, java.lang.String, org.eclipse.ui.IViewPart, java.lang.String, int) line: 35 org.eclipse.ui.internal.ActionDescriptor.createAction(int, org.eclipse.core.runtime.IConfigurationElement, java.lang.Object, java.lang.String, java.lang.String) line: 182 org.eclipse.ui.internal.ActionDescriptor.<init> (org.eclipse.core.runtime.IConfigurationElement, int, java.lang.Object) line: 120 org.eclipse.ui.internal.ViewerActionBuilder.createActionDescriptor (org.eclipse.core.runtime.IConfigurationElement) line: 30 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.PluginActionBuilder).readElement (org.eclipse.core.runtime.IConfigurationElement) line: 323 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.registry.RegistryReader).readElements (org.eclipse.core.runtime.IConfigurationElement[]) line: 127 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.registry.RegistryReader).readElementChildren (org.eclipse.core.runtime.IConfigurationElement) line: 117 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.PluginActionBuilder).readElement (org.eclipse.core.runtime.IConfigurationElement) line: 329 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.registry.RegistryReader).readElements (org.eclipse.core.runtime.IConfigurationElement[]) line: 127 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.registry.RegistryReader).readExtension (org.eclipse.core.runtime.IExtension) line: 136 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.registry.RegistryReader).readRegistry (org.eclipse.core.runtime.IPluginRegistry, java.lang.String, java.lang.String) line: 148 org.eclipse.ui.internal.ViewerActionBuilder (org.eclipse.ui.internal.PluginActionBuilder).readContributions (java.lang.String, java.lang.String, java.lang.String) line: 296 org.eclipse.ui.internal.ViewerActionBuilder.readViewerContributions (java.lang.String, org.eclipse.jface.viewers.ISelectionProvider, org.eclipse.ui.IWorkbenchPart) line: 52 org.eclipse.ui.internal.PopupMenuExtender.readStaticActions() line: 76 org.eclipse.ui.internal.PopupMenuExtender.<init>(java.lang.String, org.eclipse.jface.action.MenuManager, org.eclipse.jface.viewers.ISelectionProvider, org.eclipse.ui.IWorkbenchPart) line: 39 org.eclipse.ui.internal.ViewSite (org.eclipse.ui.internal.PartSite).registerContextMenu(java.lang.String, org.eclipse.jface.action.MenuManager, org.eclipse.jface.viewers.ISelectionProvider) line: 151 org.eclipse.ui.internal.ViewSite (org.eclipse.ui.internal.PartSite).registerContextMenu (org.eclipse.jface.action.MenuManager, org.eclipse.jface.viewers.ISelectionProvider) line: 157 org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView (org.eclipse.debug.ui.AbstractDebugView).createContextMenu (org.eclipse.swt.widgets.Control) line: 434 org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView (org.eclipse.debug.ui.AbstractDebugView).createPartControl (org.eclipse.swt.widgets.Composite) line: 281 org.eclipse.ui.internal.PartPane$4.run() line: 135 org.eclipse.core.internal.runtime.InternalPlatform.run (org.eclipse.core.runtime.ISafeRunnable) line: 852 org.eclipse.core.runtime.Platform.run (org.eclipse.core.runtime.ISafeRunnable) line: 413 org.eclipse.ui.internal.ViewPane (org.eclipse.ui.internal.PartPane).createChildControl() line: 133 org.eclipse.ui.internal.ViewPane.createChildControl() line: 202 org.eclipse.ui.internal.ViewPane (org.eclipse.ui.internal.PartPane).createControl (org.eclipse.swt.widgets.Composite) line: 177 org.eclipse.ui.internal.ViewPane.createControl (org.eclipse.swt.widgets.Composite) line: 181 org.eclipse.ui.internal.PartTabFolder.createPartTab (org.eclipse.ui.internal.LayoutPart, java.lang.String, int) line: 251 org.eclipse.ui.internal.PartTabFolder.createControl (org.eclipse.swt.widgets.Composite) line: 223 org.eclipse.ui.internal.RootLayoutContainer (org.eclipse.ui.internal.PartSashContainer).createControl (org.eclipse.swt.widgets.Composite) line: 191 org.eclipse.ui.internal.PerspectivePresentation.activate (org.eclipse.swt.widgets.Composite) line: 94 org.eclipse.ui.internal.Perspective.onActivate() line: 665 org.eclipse.ui.internal.WorkbenchPage.setPerspective (org.eclipse.ui.internal.Perspective) line: 2344 org.eclipse.ui.internal.WorkbenchPage.busySetPerspective (org.eclipse.ui.IPerspectiveDescriptor) line: 550 org.eclipse.ui.internal.WorkbenchPage.access$7 (org.eclipse.ui.internal.WorkbenchPage, org.eclipse.ui.IPerspectiveDescriptor) line: 538 org.eclipse.ui.internal.WorkbenchPage$10.run() line: 2464 org.eclipse.swt.custom.BusyIndicator.showWhile (org.eclipse.swt.widgets.Display, java.lang.Runnable) line: 65 org.eclipse.ui.internal.WorkbenchPage.setPerspective (org.eclipse.ui.IPerspectiveDescriptor) line: 2462 org.eclipse.ui.internal.SetPagePerspectiveAction.run() line: 66 org.eclipse.ui.internal.SetPagePerspectiveAction (org.eclipse.jface.action.Action).runWithEvent(org.eclipse.swt.widgets.Event) line: 804 org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection (org.eclipse.swt.widgets.Event) line: 422 org.eclipse.jface.action.ActionContributionItem.handleWidgetEvent (org.eclipse.swt.widgets.Event) line: 374 org.eclipse.jface.action.ActionContributionItem.access$0 (org.eclipse.jface.action.ActionContributionItem, org.eclipse.swt.widgets.Event) line: 368 org.eclipse.jface.action.ActionContributionItem$ActionListener.handleEve nt(org.eclipse.swt.widgets.Event) line: 69 org.eclipse.swt.widgets.EventTable.sendEvent (org.eclipse.swt.widgets.Event) line: 77 org.eclipse.swt.widgets.ToolItem (org.eclipse.swt.widgets.Widget).sendEvent(org.eclipse.swt.widgets.Event) line: 836 org.eclipse.swt.widgets.Display.runDeferredEvents() line: 1692 org.eclipse.swt.widgets.Display.readAndDispatch() line: 1410 org.eclipse.ui.internal.Workbench.runEventLoop() line: 1467 org.eclipse.ui.internal.Workbench.run(java.lang.Object) line: 1450 org.eclipse.core.internal.boot.InternalBootLoader.run(java.lang.String, java.net.URL, java.lang.String, java.lang.String[], java.lang.Runnable) line: 845 org.eclipse.core.boot.BootLoader.run(java.lang.String, java.net.URL, java.lang.String, java.lang.String[], java.lang.Runnable) line: 462 sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method] sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39 [local variables unavailable] sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25 [local variables unavailable] java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) line: 324 [local variables unavailable] org.eclipse.core.launcher.Main.basicRun(java.lang.String[]) line: 247 org.eclipse.core.launcher.Main.run(java.lang.String[]) line: 703 org.eclipse.core.launcher.Main.main(java.lang.String[]) line: 539
In the selectionChanged method, the delegate will only be instantiated if it's plugin is already activated. Somehow the java debugger plugin must have been activated somewhere else. That's is why the delegate was instantiated. Changes were done for the 2.0 release to instantiate all delegates when a plugin becomes activated. I do not recall all the details behind why this was done (since I was not involved in that area at the time). Are you sure the java debug plugin was not already activated when the delegate was instantiated?
You're correct. The plug-in was already loaded.