Eclipse UI freezes for seconds on save

Hello, after upgrading to eclipse 2025-03, I’ve had performance issues that took me some time to debug.
From a brand-new installation & workspace, 9 times out of 10 when I save a file my UI freezes for 1~10s.
Enabling the UI Freeze Detector gave me the following 2 stacks:

	at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method)
	at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
	at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
	at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
	at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
	at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
	at java.base@21.0.6/java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:420)
	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:40)
	at org.gradle.tooling.internal.consumer.DefaultModelBuilder.get(DefaultModelBuilder.java:50)
	at org.sonarlint.eclipse.buildship.internal.GradleUtils.getProjectConnection(GradleUtils.java:229)
	at org.sonarlint.eclipse.buildship.internal.GradleUtils.getExclusions(GradleUtils.java:179)
	at org.sonarlint.eclipse.buildship.internal.GradleProjectConfigurationExtension.getExclusions(GradleProjectConfigurationExtension.java:85)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.getExclusions(FileSystemSynchronizer.java:359)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.visitDeltaPostChange(FileSystemSynchronizer.java:210)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.lambda$0(FileSystemSynchronizer.java:83)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer$$Lambda/0x0000713e951cccc0.visit(Unknown Source)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:77)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:61)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.resourceChanged(FileSystemSynchronizer.java:83)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:321)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:311)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:174)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:465)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1593)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2471)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
	at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:131)
	at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:76)
	at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:66)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:461)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:783)
	at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5020)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1262)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1316)
	at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7260)
	at org.eclipse.ui.Saveable.doSave(Saveable.java:213)
	at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:317)
	at org.eclipse.ui.internal.SaveableHelper.lambda$1(SaveableHelper.java:195)
	at org.eclipse.ui.internal.SaveableHelper$$Lambda/0x0000713e951f4000.run(Unknown Source)
	at org.eclipse.ui.internal.SaveableHelper.lambda$3(SaveableHelper.java:261)
	at org.eclipse.ui.internal.SaveableHelper$$Lambda/0x0000713e951f4218.run(Unknown Source)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:434)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:354)
	at org.eclipse.ui.internal.WorkbenchWindow.lambda$7(WorkbenchWindow.java:2335)
	at org.eclipse.ui.internal.WorkbenchWindow$$Lambda/0x0000713e951f4430.run(Unknown Source)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2332)
	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:268)
	at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:206)
	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:150)
	at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3819)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3832)
	at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:81)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:277)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:98)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$DMH/0x0000713e94ed0000.invokeVirtual(LambdaForm$DMH)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$MH/0x0000713e951e5400.invoke(LambdaForm$MH)
	at java.base@21.0.6/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:157)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.6/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:299)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:233)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:174)
	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:165)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:204)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:569)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:644)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:439)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1961)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1651)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1678)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1661)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1700)
	at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:996)
	at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:3999)
	at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:931)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:2630)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:6842)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6169)
	at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_do_event(Native Method)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1605)
	at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_iteration_do(Native Method)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4521)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:668)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x0000713e9427d7d0.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:576)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:178)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
	at java.base@21.0.6/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$MH/0x0000713e94006800.invoke(LambdaForm$MH)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$MH/0x0000713e94006c00.invokeExact_MT(LambdaForm$MH)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:155)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.6/java.lang.reflect.Method.invoke(Method.java:580)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:670)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:607)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1492)
	at app//org.eclipse.equinox.launcher.Main.main(Main.java:1465)
	at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method)
	at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
	at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
	at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
	at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
	at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
	at java.base@21.0.6/java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:420)
	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:40)
	at org.gradle.tooling.internal.consumer.DefaultModelBuilder.get(DefaultModelBuilder.java:50)
	at org.sonarlint.eclipse.buildship.internal.GradleUtils.getExclusions(GradleUtils.java:193)
	at org.sonarlint.eclipse.buildship.internal.GradleProjectConfigurationExtension.getExclusions(GradleProjectConfigurationExtension.java:85)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.getExclusions(FileSystemSynchronizer.java:359)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.visitDeltaPostChange(FileSystemSynchronizer.java:210)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.lambda$0(FileSystemSynchronizer.java:83)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer$$Lambda/0x0000713e951cccc0.visit(Unknown Source)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:77)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:61)
	at org.sonarlint.eclipse.core.internal.backend.FileSystemSynchronizer.resourceChanged(FileSystemSynchronizer.java:83)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:321)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:311)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:174)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:465)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1593)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2471)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
	at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:131)
	at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:76)
	at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:66)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:461)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:783)
	at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5020)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1262)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1316)
	at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7260)
	at org.eclipse.ui.Saveable.doSave(Saveable.java:213)
	at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:317)
	at org.eclipse.ui.internal.SaveableHelper.lambda$1(SaveableHelper.java:195)
	at org.eclipse.ui.internal.SaveableHelper$$Lambda/0x0000713e951f4000.run(Unknown Source)
	at org.eclipse.ui.internal.SaveableHelper.lambda$3(SaveableHelper.java:261)
	at org.eclipse.ui.internal.SaveableHelper$$Lambda/0x0000713e951f4218.run(Unknown Source)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:434)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:354)
	at org.eclipse.ui.internal.WorkbenchWindow.lambda$7(WorkbenchWindow.java:2335)
	at org.eclipse.ui.internal.WorkbenchWindow$$Lambda/0x0000713e951f4430.run(Unknown Source)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2332)
	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:268)
	at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:206)
	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:150)
	at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3819)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3832)
	at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:81)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:277)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:98)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$DMH/0x0000713e94ed0000.invokeVirtual(LambdaForm$DMH)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$MH/0x0000713e951e5400.invoke(LambdaForm$MH)
	at java.base@21.0.6/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:157)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.6/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:299)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:233)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:174)
	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:165)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:204)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:569)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:644)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:439)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1961)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1651)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1678)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1661)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1700)
	at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:996)
	at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:3999)
	at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:931)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:2630)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:6842)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6169)
	at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_do_event(Native Method)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1605)
	at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_iteration_do(Native Method)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4521)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:668)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x0000713e9427d7d0.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:576)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:178)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
	at java.base@21.0.6/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$MH/0x0000713e94006800.invoke(LambdaForm$MH)
	at java.base@21.0.6/java.lang.invoke.LambdaForm$MH/0x0000713e94006c00.invokeExact_MT(LambdaForm$MH)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:155)
	at java.base@21.0.6/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.6/java.lang.reflect.Method.invoke(Method.java:580)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:670)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:607)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1492)
	at app//org.eclipse.equinox.launcher.Main.main(Main.java:1465)

After a quick search on this forum, I found: Eclipse hangs org.sonarlint.eclipse.buildship.internal.GradleUtils that was about the same issue.
However no fix or explanation was provided, apart for the exclusion option that has been added. I quickly tried the opt-out feature and it seems to fix the issue. However the opt-out seem to be only per-project (no global configuration) and as I have 100+ projects, periodically regenerated via gradle, I can’t possibly re-set this option every time on every projects.
I tried to extract some sonarqube logs after a freeze, but I was no able to take it all due to the sheer quantity : https://stuff.stooit.com/d/1/67fd025cad106/sonarlintlogs.txt

Some context:

  • I’m using eclipse 2025-03 up-to-date
  • Sonarlint 11.4.0 with no server
  • 100+ projects in eclipse, all using gradle & buildship eclipse
  • most projects are Java 21, some are Java 11
  • I don’t know if this matters at all or not, but we’re using org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2 in gradle

Thanks

Hello @tiller,

Thanks for reporting, and sorry for the very late answer.

I just merged a fix to run this computation on a background thread. The long computation will still happen - it’s also something that could be improved - but at least now the UI shouldn’t be freezing anymore.

The fix should be released in the next version, around June 9.

Please let us know if it worked for you

2 Likes

The new version has been released, could you give it a try?

Hi, thanks for the update.

I’ve been trying for the past 30min, and so far it seems OK.

But! There’s always a but :slight_smile: I selected all my 96 projects, right clicked > sonarqube > analyze and… my UI went AWOL for 2min, then got greeted by a sonarqube message asking me if I’d rather configure a cloud.

The UI freeze monitor picked on that and the stack looks suspiciously the same as before:

!ENTRY org.eclipse.ui.monitoring 4 0 2025-06-13 14:52:45.577
!MESSAGE UI freeze of 113s at 14:50:52.729
!SUBENTRY 1 org.eclipse.ui.monitoring 1 0 2025-06-13 14:52:45.577
!MESSAGE Sample at 14:51:35.354 (+42.625s)
Thread 'main' tid=1 (WAITING)
!STACK 0
Stack Trace
	at java.base@21.0.7/jdk.internal.misc.Unsafe.park(Native Method)
	at java.base@21.0.7/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
	at java.base@21.0.7/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
	at java.base@21.0.7/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
	at java.base@21.0.7/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
	at java.base@21.0.7/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
	at java.base@21.0.7/java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:420)
	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:40)
	at org.gradle.tooling.internal.consumer.DefaultModelBuilder.get(DefaultModelBuilder.java:50)
	at org.sonarlint.eclipse.buildship.internal.GradleUtils.getExclusions(GradleUtils.java:193)
	at org.sonarlint.eclipse.buildship.internal.GradleProjectConfigurationExtension.getExclusions(GradleProjectConfigurationExtension.java:85)
	at org.sonarlint.eclipse.core.internal.resources.DefaultSonarLintProjectAdapter.getExclusions(DefaultSonarLintProjectAdapter.java:165)
	at org.sonarlint.eclipse.core.internal.resources.DefaultSonarLintProjectAdapter.files(DefaultSonarLintProjectAdapter.java:95)
	at org.sonarlint.eclipse.ui.internal.util.SelectionUtils.collectFiles(SelectionUtils.java:130)
	at org.sonarlint.eclipse.ui.internal.util.SelectionUtils.allSelectedFiles(SelectionUtils.java:108)
	at org.sonarlint.eclipse.ui.internal.command.AnalyzeCommand.findSelectedFilesPerProject(AnalyzeCommand.java:135)
	at org.sonarlint.eclipse.ui.internal.command.AnalyzeCommand.execute(AnalyzeCommand.java:61)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:277)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:98)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$DMH/0x000077c74cff4c00.invokeVirtual(LambdaForm$DMH)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$MH/0x000077c74d27c800.invoke(LambdaForm$MH)
	at java.base@21.0.7/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:157)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.7/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:299)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:233)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:174)
	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:165)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:204)
	at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:444)
	at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.handleWidgetSelection(AbstractContributionItem.java:475)
	at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.lambda$2(AbstractContributionItem.java:497)
	at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem$$Lambda/0x000077c74c653060.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5862)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1656)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5077)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4522)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:678)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x000077c74c387800.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
	at java.base@21.0.7/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$MH/0x000077c74c015800.invoke(LambdaForm$MH)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$MH/0x000077c74c015c00.invokeExact_MT(LambdaForm$MH)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:155)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.7/java.lang.reflect.Method.invoke(Method.java:580)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at app//org.eclipse.equinox.launcher.Main.main(Main.java:1403)
!SUBENTRY 1 org.eclipse.ui.monitoring 1 0 2025-06-13 14:52:45.577
!MESSAGE Sample at 14:52:18.071 (+42.717s)
Thread 'main' tid=1 (WAITING)
!STACK 0
Stack Trace
	at java.base@21.0.7/jdk.internal.misc.Unsafe.park(Native Method)
	at java.base@21.0.7/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
	at java.base@21.0.7/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
	at java.base@21.0.7/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
	at java.base@21.0.7/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
	at java.base@21.0.7/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
	at java.base@21.0.7/java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:420)
	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:40)
	at org.gradle.tooling.internal.consumer.DefaultModelBuilder.get(DefaultModelBuilder.java:50)
	at org.sonarlint.eclipse.buildship.internal.GradleUtils.getExclusions(GradleUtils.java:193)
	at org.sonarlint.eclipse.buildship.internal.GradleProjectConfigurationExtension.getExclusions(GradleProjectConfigurationExtension.java:85)
	at org.sonarlint.eclipse.core.internal.resources.DefaultSonarLintProjectAdapter.getExclusions(DefaultSonarLintProjectAdapter.java:165)
	at org.sonarlint.eclipse.core.internal.resources.DefaultSonarLintProjectAdapter.files(DefaultSonarLintProjectAdapter.java:95)
	at org.sonarlint.eclipse.ui.internal.util.SelectionUtils.collectFiles(SelectionUtils.java:130)
	at org.sonarlint.eclipse.ui.internal.util.SelectionUtils.allSelectedFiles(SelectionUtils.java:108)
	at org.sonarlint.eclipse.ui.internal.command.AnalyzeCommand.findSelectedFilesPerProject(AnalyzeCommand.java:135)
	at org.sonarlint.eclipse.ui.internal.command.AnalyzeCommand.execute(AnalyzeCommand.java:61)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:277)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:98)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$DMH/0x000077c74cff4c00.invokeVirtual(LambdaForm$DMH)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$MH/0x000077c74d27c800.invoke(LambdaForm$MH)
	at java.base@21.0.7/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:157)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.7/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:299)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:233)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:174)
	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:165)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:204)
	at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:444)
	at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.handleWidgetSelection(AbstractContributionItem.java:475)
	at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.lambda$2(AbstractContributionItem.java:497)
	at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem$$Lambda/0x000077c74c653060.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5862)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1656)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5077)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4522)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:678)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x000077c74c387800.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
	at java.base@21.0.7/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$MH/0x000077c74c015800.invoke(LambdaForm$MH)
	at java.base@21.0.7/java.lang.invoke.LambdaForm$MH/0x000077c74c015c00.invokeExact_MT(LambdaForm$MH)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:155)
	at java.base@21.0.7/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.7/java.lang.reflect.Method.invoke(Method.java:580)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at app//org.eclipse.equinox.launcher.Main.main(Main.java:1403)

Eclipse 2025-06, SonarLint for Eclipse 11.9.0.82894

Hi @tiller,

Glad the first problem went away!

And thanks for reporting this one. The stack trace is in fact slightly different compared to the previous one you sent. I created this ticket, we won’t be able to fix it for the next release coming at the beginning of next week, I will have a look for the one in 2 weeks.

1 Like

Hello @tiller,

The latest release contains a fix for your problem, let us know if the UI freezes disappeared! Thanks

3 Likes

I did a quick test, and indeed this seems fixed! Thanks :slight_smile:

4 Likes