Community
Participate
Working Groups
build I20040505 2am. there was an error in the java editor opening a file, however after this error occured we still try to give focus to this editor and get into an infinite loop.. .see stack trace below at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160) at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method) at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599) at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037) at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:610) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1678) at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit (AbstractTextEditor.java:2155) at org.eclipse.ui.texteditor.AbstractTextEditor.init (AbstractTextEditor.java:2173) at org.eclipse.ui.internal.EditorManager.createSite (EditorManager.java:569) at org.eclipse.ui.internal.EditorManager.openInternalEditor (EditorManager.java:633) at org.eclipse.ui.internal.EditorManager.access$7 (EditorManager.java:619) at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:604) at org.eclipse.core.runtime.Platform.run(Platform.java:545) at org.eclipse.ui.internal.EditorManager.busyRestoreEditor (EditorManager.java:773) at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766) at org.eclipse.swt.custom.BusyIndicator.showWhile (BusyIndicator.java:84) at org.eclipse.ui.internal.EditorManager.restoreEditor (EditorManager.java:762) at org.eclipse.ui.internal.EditorManager$Editor.getEditor (EditorManager.java:1136) at org.eclipse.ui.internal.EditorManager$Editor.getPart (EditorManager.java:1128) at org.eclipse.ui.internal.PartPane.requestActivation (PartPane.java:246) at org.eclipse.ui.internal.EditorPane.requestActivation (EditorPane.java:150) at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801) at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913) at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756) at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160) at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method) at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599) at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037) at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:610) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1678) at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit (AbstractTextEditor.java:2155) at org.eclipse.ui.texteditor.AbstractTextEditor.init (AbstractTextEditor.java:2173) at org.eclipse.ui.internal.EditorManager.createSite (EditorManager.java:569) at org.eclipse.ui.internal.EditorManager.openInternalEditor (EditorManager.java:633) at org.eclipse.ui.internal.EditorManager.access$7 (EditorManager.java:619) at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:604) at org.eclipse.core.runtime.Platform.run(Platform.java:545) at org.eclipse.ui.internal.EditorManager.busyRestoreEditor (EditorManager.java:773) at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766) at org.eclipse.swt.custom.BusyIndicator.showWhile (BusyIndicator.java:84) at org.eclipse.ui.internal.EditorManager.restoreEditor (EditorManager.java:762) at org.eclipse.ui.internal.EditorManager$Editor.getEditor (EditorManager.java:1136) at org.eclipse.ui.internal.EditorManager$Editor.getPart (EditorManager.java:1128) at org.eclipse.ui.internal.PartPane.requestActivation (PartPane.java:246) at org.eclipse.ui.internal.EditorPane.requestActivation (EditorPane.java:150) at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801) at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913) at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756) at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160) at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method) at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599) at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037) at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:610) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1678) at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit (AbstractTextEditor.java:2155) at org.eclipse.ui.texteditor.AbstractTextEditor.init (AbstractTextEditor.java:2173) at org.eclipse.ui.internal.EditorManager.createSite (EditorManager.java:569) at org.eclipse.ui.internal.EditorManager.openInternalEditor (EditorManager.java:633) at org.eclipse.ui.internal.EditorManager.access$7 (EditorManager.java:619) at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:604) at org.eclipse.core.runtime.Platform.run(Platform.java:545) at org.eclipse.ui.internal.EditorManager.busyRestoreEditor (EditorManager.java:773) at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766) at org.eclipse.swt.custom.BusyIndicator.showWhile (BusyIndicator.java:84) at org.eclipse.ui.internal.EditorManager.restoreEditor (EditorManager.java:762) at org.eclipse.ui.internal.EditorManager$Editor.getEditor (EditorManager.java:1136) at org.eclipse.ui.internal.EditorManager$Editor.getPart (EditorManager.java:1128) at org.eclipse.ui.internal.PartPane.requestActivation (PartPane.java:246) at org.eclipse.ui.internal.EditorPane.requestActivation (EditorPane.java:150) at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801) at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913) at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756) at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160) at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method) at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599) at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037) at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:610) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1678) at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit (AbstractTextEditor.java:2155) at org.eclipse.ui.texteditor.AbstractTextEditor.init (AbstractTextEditor.java:2173) at org.eclipse.ui.internal.EditorManager.createSite (EditorManager.java:569) at org.eclipse.ui.internal.EditorManager.openInternalEditor (EditorManager.java:633) at org.eclipse.ui.internal.EditorManager.access$7 (EditorManager.java:619) at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:604) at org.eclipse.core.runtime.Platform.run(Platform.java:545) at org.eclipse.ui.internal.EditorManager.busyRestoreEditor (EditorManager.java:773) at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766) at org.eclipse.swt.custom.BusyIndicator.showWhile (BusyIndicator.java:84) at org.eclipse.ui.internal.EditorManager.restoreEditor (EditorManager.java:762) at org.eclipse.ui.internal.EditorManager$Editor.getEditor (EditorManager.java:1136) at org.eclipse.ui.internal.EditorManager$Editor.getPart (EditorManager.java:1128) at org.eclipse.ui.internal.PartPane.requestActivation (PartPane.java:246) at org.eclipse.ui.internal.EditorPane.requestActivation (EditorPane.java:150) at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801) at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913) at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756) at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012) !ENTRY org.eclipse.core.runtime 4 2 May 05, 2004 10:52:28.440 !MESSAGE Problems occurred when invoking code from plug- in: "org.eclipse.core.runtime". !STACK 0 java.lang.NullPointerException at org.eclipse.jdt.internal.ui.javaeditor.BasicJavaEditorActionContributor.setActi veEditor(BasicJavaEditorActionContributor.java:242) at org.eclipse.jdt.internal.ui.javaeditor.BasicEditorActionContributor.setActiveEd itor(BasicEditorActionContributor.java:83) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditorActionContributor.s etActiveEditor(CompilationUnitEditorActionContributor.java:59) at org.eclipse.ui.internal.EditorActionBars.partChanged (EditorActionBars.java:291) at org.eclipse.ui.internal.WorkbenchPage$2.run(WorkbenchPage.java:474) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:604) at org.eclipse.core.runtime.Platform.run(Platform.java:545) at org.eclipse.ui.internal.WorkbenchPage.activatePart (WorkbenchPage.java:466) at org.eclipse.ui.internal.WorkbenchPage.setActivePart (WorkbenchPage.java:2596) at org.eclipse.ui.internal.WorkbenchPage.requestActivation (WorkbenchPage.java:2307) at org.eclipse.ui.internal.PartPane.requestActivation (PartPane.java:246) at org.eclipse.ui.internal.EditorPane.requestActivation (EditorPane.java:150) at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801) at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913) at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756) at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160) at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method) at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599) at org.eclipse.swt.widgets.Control.setSavedFocus(Control.java:2262) at org.eclipse.swt.widgets.Decorations.restoreFocus (Decorations.java:733) at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE (Decorations.java:1477) at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:1327) at org.eclipse.swt.widgets.Control.windowProc(Control.java:2949) at org.eclipse.swt.widgets.Decorations.windowProc (Decorations.java:1449) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160) at org.eclipse.swt.internal.win32.OS.DestroyWindow(Native Method) at org.eclipse.swt.widgets.Control.destroyWidget(Control.java:504) at org.eclipse.swt.widgets.Widget.dispose(Widget.java:369) at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:371) at org.eclipse.swt.widgets.Shell.dispose(Shell.java:486) at org.eclipse.jface.window.Window.close(Window.java:253) at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:811) at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.buttonPressed (InternalErrorDialog.java:88) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:491) at org.eclipse.swt.widgets.TypedListener.handleEvent (TypedListener.java:89) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2594) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2272) at org.eclipse.jface.window.Window.runEventLoop(Window.java:668) at org.eclipse.jface.window.Window.open(Window.java:648) at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open (InternalErrorDialog.java:71) at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.openQuestion (InternalErrorDialog.java:173) at org.eclipse.ui.internal.ide.IDEExceptionHandler.openQuestionDialog (IDEExceptionHandler.java:151) at org.eclipse.ui.internal.ide.IDEExceptionHandler.handleException (IDEExceptionHandler.java:83) at org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor.eventLoopException (IDEWorkbenchAdvisor.java:230) at org.eclipse.ui.internal.ExceptionHandler.handleException (ExceptionHandler.java:53) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1357) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench (Workbench.java:243) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:140) at org.eclipse.ui.internal.ide.IDEApplication.run (IDEApplication.java:90) at org.eclipse.core.internal.runtime.PlatformActivator$1.run (PlatformActivator.java:283) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:242) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:119) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.eclipse.core.launcher.Main.basicRun(Main.java:269) at org.eclipse.core.launcher.Main.run(Main.java:700) at org.eclipse.core.launcher.Main.main(Main.java:684)
Michael and I tried using the org.eclipse.ui.examples.multipageeditor example to re-produce this bug but it could not be re-produced. We introduced exceptions at various places (constructor, saving, switching pages) but they were caught and handled properly, not causing any infinite loops. When looking at the stack trace and the code, in ApplicationWindow.run, we get the current control that has focus, do some work, return focus to the previous control by calling setFocus which causes an EditorPane to requestActivation; the internalInit method in AbstractTextEditor will then call ApplicationWindow.run and we'll be in the loop.
What was the focus control before the run? If it was the editor, then it should have already been fully initialized. ApplicationWindow.run should be changed to use forceFocus instead of setFocus.
I've released the forceFocus change in ApplicationWindow.run.
There was a change to ApplicationWindow at May 19, 9:19 p.m. It claimed to be fixing this bug. Is that true?
Hanna, can you please verify whether the forceFocus change fixed the problem?
As I mentionned in comment #1, this bug was only encountered once and could not be reproduced using the multi-page editor example. Nick's comment in his change (setFocus to forceFocus) makes sense for preventing this bug from occuring.