Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 414048

Summary: Editors Ping Pong once the Outline View has been activated
Product: [Eclipse Project] Platform Reporter: Eric Moffatt <emoffatt>
Component: UIAssignee: Eric Moffatt <emoffatt>
Status: VERIFIED FIXED QA Contact:
Severity: major    
Priority: P3 CC: anton, curtis.windatt.public, daniel_megert, javadev, lneumeier, markus.kell.r, pelder.eclipse, pwebster
Version: 4.3Flags: pwebster: review+
Target Milestone: 4.3.1   
Hardware: PC   
OS: Windows 7   
Whiteboard:
Bug Depends on: 409324    
Bug Blocks: 409746    

Description Eric Moffatt CLA 2013-07-30 13:37:24 EDT
+++ This bug was initially created as a clone of Bug #409324 +++

4.3.0.I20130526-2000

I sometimes get the ISE below when I switch between open editor tabs using the mouse. It doesn't happen all the time, but once it started, it usually continues to happen with every further click.

I haven't seen this before the I20130526-2000 build.

Warning
Tue May 28 20:08:52 CEST 2013
Blocked recursive attempt to activate part

java.lang.IllegalStateException
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$2.setFocus(ContributedPartRenderer.java:119)
	at org.eclipse.swt.custom.CTabItem.setFocus(CTabItem.java:329)
	at org.eclipse.swt.custom.CTabFolder.setFocus(CTabFolder.java:2509)
	at org.eclipse.swt.widgets.Control.fixFocus(Control.java:1053)
	at org.eclipse.swt.widgets.Control.setVisible(Control.java:3819)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3049)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3006)
	at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1101)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer$1.handleEvent(LazyStackRenderer.java:66)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:41)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:180)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4688)
	at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:205)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38)
	at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
	at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
	at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
	at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
	at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:80)
	at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:58)
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
	at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:171)
	at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:576)
	at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:543)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:605)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:585)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.setPart(PartServiceImpl.java:158)
	at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
	at java.lang.reflect.Method.invoke(Method.java:613)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:88)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:107)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:328)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:342)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.activate(EclipseContext.java:625)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.activateBranch(EclipseContext.java:630)
	at org.eclipse.e4.ui.internal.workbench.PartActivationHistory.activate(PartActivationHistory.java:52)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:588)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:539)
	at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:104)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$1.handleEvent(ContributedPartRenderer.java:59)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1453)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1416)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:2856)
	at org.eclipse.swt.widgets.Widget.wmSetFocus(Widget.java:2421)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:5235)
	at org.eclipse.swt.widgets.Canvas.WM_SETFOCUS(Canvas.java:457)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4681)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4977)
	at org.eclipse.swt.internal.win32.OS.$$YJP$$CallWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.CallWindowProcW(OS.java)
	at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2443)
	at org.eclipse.swt.internal.BidiUtil.windowProc(BidiUtil.java:639)
	at org.eclipse.swt.internal.win32.OS.$$YJP$$SetFocus(Native Method)
	at org.eclipse.swt.internal.win32.OS.SetFocus(OS.java)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:1098)
	at org.eclipse.swt.widgets.Control.setFocus(Control.java:3323)
	at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1042)
	at org.eclipse.ui.texteditor.AbstractTextEditor.setFocus(AbstractTextEditor.java:6213)
	at org.eclipse.ui.texteditor.StatusTextEditor.setFocus(StatusTextEditor.java:122)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.setFocus(JavaEditor.java:2389)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.delegateSetFocus(CompatibilityPart.java:192)
	at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
	at java.lang.reflect.Method.invoke(Method.java:613)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:249)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:220)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:107)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.focusGui(PartRenderingEngine.java:763)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$2.setFocus(ContributedPartRenderer.java:102)
	at org.eclipse.swt.custom.CTabItem.setFocus(CTabItem.java:329)
	at org.eclipse.swt.custom.CTabFolder.setFocus(CTabFolder.java:2509)
	at org.eclipse.swt.widgets.Control.fixFocus(Control.java:1053)
	at org.eclipse.swt.widgets.Control.setVisible(Control.java:3819)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3049)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3057)
	at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1753)
	at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:278)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4170)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
	at java.lang.reflect.Method.invoke(Method.java:613)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
Comment 1 Eric Moffatt CLA 2013-07-30 13:40:02 EDT
Paul, could you review this and release it to maintenance if you think it's OK ?
Comment 3 Paul Elder CLA 2013-08-28 14:34:12 EDT
Verified in build 4.3.0.M20130828-0800 (Win 7-64) using steps from bug 498324 comment 4.
Comment 4 Dani Megert CLA 2013-08-29 09:08:39 EDT
(In reply to comment #3)
> Verified in build 4.3.0.M20130828-0800 (Win 7-64) using steps from bug
> 498324 comment 4.

Note that the logging was removed for 4.3, so, if you just used those steps without adding the logging back or debugging it, then the verification is not valid.
Comment 5 Paul Elder CLA 2013-08-29 12:46:47 EDT
(In reply to comment #4)
> (In reply to comment #3)
> > Verified in build 4.3.0.M20130828-0800 (Win 7-64) using steps from bug
> > 498324 comment 4.
> 
> Note that the logging was removed for 4.3, so, if you just used those steps
> without adding the logging back or debugging it, then the verification is
> not valid.

With an IPartListener2 installed to log activity, this is what I see (starting with no editors open). There is obviously something still going on during the initial open of Object.class via a Ctrl-Click. I'll add a comparison with 4.3.0 shortly.

---- open C.java ----
C.java: opened
C.java: visible
C.java: broughtToTop
Package Explorer: deactivated
C.java: activated
---- Ctrl-Click Object ----
C.java: deactivated
C.java: hidden
C.java: visible
C.java: broughtToTop
C.java: activated
Object.class: opened
Object.class: visible
Object.class: broughtToTop
C.java: deactivated
C.java: hidden
Object.class: visible
Object.class: broughtToTop
Object.class: activated
Object.class: activated
---- Click C.java ----
Object.class: deactivated
Object.class: hidden
C.java: visible
C.java: broughtToTop
C.java: activated
----- Click Object.class ----
C.java: deactivated
C.java: hidden
Object.class: visible
Object.class: broughtToTop
Object.class: activated
---- Click C.java ----
Object.class: deactivated
Object.class: hidden
C.java: visible
C.java: broughtToTop
C.java: activated
---- Ctrl-Click Object ----
C.java: deactivated
C.java: hidden
Object.class: visible
Object.class: broughtToTop
Object.class: activated
Comment 6 Paul Elder CLA 2013-08-29 13:10:33 EDT
There remains some ping-ponging on the first open of Object.class, but the ping-ponging noted in the original defect, related to having the Outline view activated, and then switching between C.java and Object.class has been eliminated.

I'm going to leave this as verified.