Bug 483814 - [clean up][api] ICleanUp#createFix(..) needs an IProgressMonitor
Summary: [clean up][api] ICleanUp#createFix(..) needs an IProgressMonitor
Status: ASSIGNED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.6   Edit
Hardware: PC Windows 7
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: JDT-UI-Inbox CLA
QA Contact:
URL:
Whiteboard: stalebug
Keywords:
Depends on:
Blocks:
 
Reported: 2015-12-07 10:24 EST by Markus Keller CLA
Modified: 2024-03-14 04:36 EDT (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Keller CLA 2015-12-07 10:24:38 EST
In a workspace with outdated indexes (runtime workspace after switching to a new base build) and with the Gerrit for bug 357795 (I think that shouldn't matter), I tried to save a file with a structure similar to this:

import static java.util.SourCream.*;
public class Try {
    void foo() {
        azerty("bad", false);
    }
}

The UI thread locked up because the Organize Imports Clean Up that was configured as Save Action required an up-to-date index. That would be OK-ish, but there must be a way for the user to cancel the operation.

A progress monitor must be passed through these 3 APIs:

ImportsFix.createCleanUp(CompilationUnit, CodeGenerationSettings, boolean, RefactoringStatus) line: 52	
ImportsCleanUp.createFix(CleanUpContext) line: 59	
CleanUpRefactoring.calculateChange(CleanUpContext, ICleanUp[], List<ICleanUp>, HashSet<ICleanUp>) line: 789	

ICleanUp#createFix(..) must be deprecated and replaced by a default method that takes an IProgressMonitor.

The reason for the excessive delay is probably bug 474045.


Complete stacktrace:
	at org.eclipse.jdt.internal.core.JavaModelManager.secondaryTypes(JavaModelManager.java:4566)
	at org.eclipse.jdt.internal.core.NameLookup.findSecondaryType(NameLookup.java:592)
	at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:773)
	at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:663)
	at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:845)
	at org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1277)
	at org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1366)
	at org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1270)
	at org.eclipse.jdt.internal.core.dom.rewrite.imports.StaticConflictingSimpleNameFinder.findConflictingSimpleNames(StaticConflictingSimpleNameFinder.java:48)
	at org.eclipse.jdt.internal.core.dom.rewrite.imports.ConflictIdentifier.findConflictingSimpleNames(ConflictIdentifier.java:158)
	at org.eclipse.jdt.internal.core.dom.rewrite.imports.ConflictIdentifier.identifyConflicts(ConflictIdentifier.java:110)
	at org.eclipse.jdt.internal.core.dom.rewrite.imports.ImportRewriteAnalyzer.computeImportOrder(ImportRewriteAnalyzer.java:561)
	at org.eclipse.jdt.internal.core.dom.rewrite.imports.ImportRewriteAnalyzer.analyzeRewrite(ImportRewriteAnalyzer.java:540)
	at org.eclipse.jdt.core.dom.rewrite.ImportRewrite.rewriteImports(ImportRewrite.java:1176)
	at org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation.createTextEdit(OrganizeImportsOperation.java:596)
	at org.eclipse.jdt.internal.corext.fix.ImportsFix.createCleanUp(ImportsFix.java:52)
	at org.eclipse.jdt.internal.ui.fix.ImportsCleanUp.createFix(ImportsCleanUp.java:59)
	at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.calculateChange(CleanUpRefactoring.java:789)
	at org.eclipse.jdt.internal.corext.fix.CleanUpPostSaveListener.saved(CleanUpPostSaveListener.java:387)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$5.run(CompilationUnitDocumentProvider.java:1639)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.notifyPostSaveListeners(CompilationUnitDocumentProvider.java:1633)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1413)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$4.execute(CompilationUnitDocumentProvider.java:1491)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.run(TextFileDocumentProvider.java:130)
	at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:67)
	at org.eclipse.ui.actions.WorkspaceModifyOperation.lambda$0(WorkspaceModifyOperation.java:107)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2240)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2267)
	at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:128)
	at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:73)
	at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:63)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:458)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:761)
	at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5016)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1251)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1305)
	at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7108)
	at org.eclipse.ui.Saveable.doSave(Saveable.java:216)
	at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:357)
	at org.eclipse.ui.internal.SaveableHelper$3.run(SaveableHelper.java:201)
	at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:285)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:460)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:368)
	at org.eclipse.ui.internal.WorkbenchWindow$14.run(WorkbenchWindow.java:2181)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2177)
	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:293)
	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:271)
	at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:213)
	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:148)
	at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3896)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3910)
	at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:54)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
	at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:264)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:494)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:491)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:286)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:507)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:558)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:378)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:324)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:86)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1269)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1080)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1105)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1090)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1132)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1128)
	at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1550)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4821)
	at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:349)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4702)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:344)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5061)
	at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2446)
	at org.eclipse.swt.internal.BidiUtil.windowProc(BidiUtil.java:701)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2552)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3777)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1122)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1023)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:157)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:691)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:604)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:670)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:609)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1516)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1489)
Comment 1 Eclipse Genie CLA 2020-11-10 06:15:40 EST
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.
Comment 2 Andy Lee CLA 2022-03-18 09:39:10 EDT
Running into this semi-frequently now due to Bug 578359; would love to see this operation moved off of the UI thread. Eclipse occasionally freezing for 30+ minutes when you save a file is pretty disruptive.
Comment 3 Eclipse Genie CLA 2024-03-14 04:36:45 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.