UI freezes in the Eclipse 4.7 IDE with Sonarlint

344 views
Skip to first unread message

lars....@vogella.com

unread,
May 17, 2017, 2:13:05 AM5/17/17
to SonarLint
Hi,

If I start Eclipse 4.7 with SonarLint installed, the IDE freezes at startup time. Stacktrace below.
To test:

1.) Download Eclipse SDK from http://download.eclipse.org/eclipse/downloads/
2.) Install SonarLint
3.) Open a few files (in my case I have around 20 open)
4.) Activate the UI freeze monitor (Windows -> Preferences -> General -> UI Responsiveness Monitor)
5.) Restart Eclipse and after it unfreezes, check the Error log

From the stacktrace it looks to me that you are scheduling the analysis jobs in the UI thread ( at org.sonarlint.eclipse.ui.internal.SonarLintUiPlugin$AnalyzeCurrentFileJob.runInUIThread(SonarLintUiPlugin.java:243)).
Can you move that to the background thread?

Best regards, Lars



Stack Trace
    at org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VCommandEditor$2.<init>(VCommandEditor.java:79)
    at org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VCommandEditor.init(VCommandEditor.java:80)
    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:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990)
    at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
    at org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor.registerVirtualEditors(ModelEditor.java:1216)
    at org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor.postCreate(ModelEditor.java:462)
    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:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:955)
    at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
    at org.eclipse.e4.tools.compat.internal.PartHelper.createComponent(PartHelper.java:76)
    at org.eclipse.e4.tools.compat.parts.DIEditorPart.createPartControl(DIEditorPart.java:101)
    at org.eclipse.e4.tools.emf.editor3x.E4WorkbenchModelEditor.createPartControl(E4WorkbenchModelEditor.java:45)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:151)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPartControl(CompatibilityEditor.java:99)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:355)
    at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:955)
    at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56)
    at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:997)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:666)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.createElement(PartServiceImpl.java:1230)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1191)
    at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:392)
    at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:290)
    at org.eclipse.ui.internal.WorkbenchPage.findEditor(WorkbenchPage.java:2244)
    at org.eclipse.ui.ide.ResourceUtil.findEditor(ResourceUtil.java:91)
    at org.sonarlint.eclipse.ui.internal.server.actions.JobUtils.collectOpenedFiles(JobUtils.java:102)
    at org.sonarlint.eclipse.ui.internal.server.actions.JobUtils.scheduleAnalysisOfOpenFiles(JobUtils.java:80)
    at org.sonarlint.eclipse.ui.internal.SonarLintUiPlugin$AnalyzeCurrentFileJob.runInUIThread(SonarLintUiPlugin.java:243)
    at org.eclipse.ui.progress.UIJob.lambda$0(UIJob.java:95)
    at org.eclipse.ui.progress.UIJob$$Lambda$334/14291844.run(Unknown Source)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4492)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4105)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1044)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
    at org.eclipse.ui.internal.Workbench$$Lambda$70/1441577726.run(Unknown Source)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
    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:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1472)

Julien HENRY

unread,
May 17, 2017, 2:47:17 AM5/17/17
to lars....@vogella.com, SonarLint
Hi Lars,

Thanks for this good feedback. I have created a ticket and I will fix it for the next version:

++

Julien

2017-05-17 8:13 GMT+02:00 <lars....@vogella.com>:
the IDE freezes at startup time. Stacktrace below.
To test:

1.) Download Eclipse SDK from http://download.eclipse.org/eclipse/downloads/
2.) Install SonarLint
3.) Open a few files (in my case I have around 20 open)
4.) Activate the UI freeze monitor (Windows -> Preferences -> General -> UI Responsiveness Monitor)
5.) Restart Eclipse and after it unfreezes, check the Error log

From the stacktrace it looks to me that you are scheduling the analysis jobs in the UI thread ( at org.sonarlint.eclipse.ui.internal.SonarLintUiPlugin$AnalyzeCurrentFileJob.runInUIThread(SonarLintUiPlugin.java:243)).
Can you move that to the background thread?



Julien Henry | SonarSource

Developer

http://sonarsource.com

Reply all
Reply to author
Forward
0 new messages