eclipse-lsp4e / eclipse-lsp4e/lsp4e
LSSymbolsContentProvider populating the outline view freezes UI for minutes for large files.
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 85
- Forks
- 69
- Avg merge
- 8h 33m
- Merged PRs (30d)
- 6
Description
Opening large json files results in UI freezes sometimes lasting for minutes caused by the org.eclipse.lsp4e.outline.LSSymbolsContentProvider. Maybe the number of items populated to the outline should limited or not all items should be added at the same time.
"main" #1 prio=6 os_prio=0 cpu=77390.62ms elapsed=1488.10s tid=0x000002b98cb78d70 nid=0x817c runnable [0x000000ce59afc000]
java.lang.Thread.State: RUNNABLE
at org.eclipse.swt.internal.win32.OS.CallWindowProc(Native Method)
at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1576)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:6142)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
at org.eclipse.swt.internal.win32.OS.SendMessage(Native Method)
at org.eclipse.swt.widgets.Tree.createItem(Tree.java:2129)
at org.eclipse.swt.widgets.TreeItem.<init>(TreeItem.java:180)
at org.eclipse.swt.widgets.TreeItem.<init>(TreeItem.java:86)
at org.eclipse.jface.viewers.TreeViewer.createNewRowPart(TreeViewer.java:767)
at org.eclipse.jface.viewers.TreeViewer.newItem(TreeViewer.java:279)
at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:863)
at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2813)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1971)
at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:684)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1947)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1904)
at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:532)
at org.eclipse.jface.viewers.StructuredViewer.lambda$3(StructuredViewer.java:1482)
at org.eclipse.jface.viewers.StructuredViewer$$Lambda$484/0x0000000800604c98.run(Unknown Source)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1398)
at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:365)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1359)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1482)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:538)
at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:352)
at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:495)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1418)
at org.eclipse.lsp4e.outline.LSSymbolsContentProvider.lambda$3(LSSymbolsContentProvider.java:335)
at org.eclipse.lsp4e.outline.LSSymbolsContentProvider$$Lambda$1460/0x0000000800be3058.run(Unknown Source)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
- locked <0x000000077eef7980> (a org.eclipse.swt.widgets.RunnableLock)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4029)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3645)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643)
at org.eclipse.ui.internal.Workbench$$Lambda$183/0x00000008002aea58.run(Unknown Source)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@17.0.6/Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@17.0.6/NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.6/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@17.0.6/Method.java:568)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
Locked ownable synchronizers:
- None
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at org.eclipse.lsp4e.outline.LSSymbolsContentProvider, especially the refresh path reported at line 335, and compare it with the SWT/JFace stack trace in the issue. Reproduce with a large JSON file and inspect how outline items are populated. Done means the outline no longer freezes the UI for minutes while retaining useful large-file behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- desktop, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100