Bug 536918 - [Project Explorer] UI freezes due DynamicSourcesWorkingSetUpdater
Summary: [Project Explorer] UI freezes due DynamicSourcesWorkingSetUpdater
Status: RESOLVED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.9   Edit
Hardware: PC All
: P3 normal with 2 votes (vote)
Target Milestone: 4.11 M3   Edit
Assignee: Andrey Loskutov CLA
QA Contact: Till Brychcy CLA
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2018-07-11 11:17 EDT by Dawid Pakula CLA
Modified: 2019-02-03 10:55 EST (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dawid Pakula CLA 2018-07-11 11:17:49 EDT
Example stacktraces from UI monitoring:

Stack Trace
	at java.base@9.0.4/java.lang.Class.forName0(Native Method)
	at java.base@9.0.4/java.lang.Class.forName(Class.java:375)
	at org.eclipse.core.internal.expressions.Expressions.loadClass(Expressions.java:109)
	at org.eclipse.core.internal.expressions.AdaptExpression.evaluate(AdaptExpression.java:85)
	at org.eclipse.core.internal.expressions.CompositeExpression.evaluateOr(CompositeExpression.java:65)
	at org.eclipse.core.internal.expressions.OrExpression.evaluate(OrExpression.java:22)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin$Evaluator.run(NavigatorPlugin.java:246)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.navigator.CustomAndExpression.evaluate(CustomAndExpression.java:71)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin$Evaluator.run(NavigatorPlugin.java:246)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin.safeEvaluate(NavigatorPlugin.java:261)
	at org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor.isTriggerPoint(NavigatorContentDescriptor.java:414)
	at org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager.findDescriptors(NavigatorContentDescriptorManager.java:174)
	at org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager.findDescriptorsForTriggerPoint(NavigatorContentDescriptorManager.java:128)
	at org.eclipse.ui.internal.navigator.NavigatorContentService.findDescriptorsByTriggerPoint(NavigatorContentService.java:770)
	at org.eclipse.ui.internal.navigator.NavigatorContentService.findContentExtensionsByTriggerPoint(NavigatorContentService.java:618)
	at org.eclipse.ui.internal.navigator.NavigatorContentService.findContentExtensionsByTriggerPoint(NavigatorContentService.java:599)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:386)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:434)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2152)
	at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:543)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2190)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2874)
	at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:791)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2764)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1947)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1923)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1880)
	at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:529)
	at org.eclipse.jface.viewers.StructuredViewer.lambda$3(StructuredViewer.java:1530)
	at org.eclipse.jface.viewers.StructuredViewer$$Lambda$311/1270516.run(Unknown Source)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1446)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:360)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1407)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1530)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:535)
	at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:349)
	at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:492)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1466)
	at org.eclipse.ui.internal.navigator.resources.actions.WorkingSetActionProvider$WorkingSetManagerListener.propertyChange(WorkingSetActionProvider.java:117)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$5.run(AbstractWorkingSetManager.java:375)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.lambda$1(AbstractWorkingSetManager.java:383)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$$Lambda$167/1299436497.run(Unknown Source)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.firePropertyChange(AbstractWorkingSetManager.java:388)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.workingSetChanged(AbstractWorkingSetManager.java:411)
	at org.eclipse.ui.internal.WorkingSetManager.workingSetChanged(WorkingSetManager.java:168)
	at org.eclipse.ui.internal.AbstractWorkingSet.fireWorkingSetChanged(AbstractWorkingSet.java:136)
	at org.eclipse.ui.internal.WorkingSet.setElements(WorkingSet.java:242)
	at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.lambda$0(DynamicSourcesWorkingSetUpdater.java:216)
	at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater$$Lambda$462/20374782.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:4043)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3714)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1170)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1059)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:667)
	at org.eclipse.ui.internal.Workbench$$Lambda$88/50058128.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:597)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
	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 java.base@9.0.4/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@9.0.4/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base@9.0.4/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@9.0.4/java.lang.reflect.Method.invoke(Method.java:564)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:656)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:592)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1498)


Stack Trace
	at java.base@9.0.4/java.lang.Class.forName0(Native Method)
	at java.base@9.0.4/java.lang.Class.forName(Class.java:375)
	at org.eclipse.core.internal.expressions.Expressions.loadClass(Expressions.java:109)
	at org.eclipse.core.internal.expressions.AdaptExpression.evaluate(AdaptExpression.java:85)
	at org.eclipse.core.internal.expressions.CompositeExpression.evaluateOr(CompositeExpression.java:65)
	at org.eclipse.core.internal.expressions.OrExpression.evaluate(OrExpression.java:22)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin$Evaluator.run(NavigatorPlugin.java:246)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.navigator.CustomAndExpression.evaluate(CustomAndExpression.java:71)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin$Evaluator.run(NavigatorPlugin.java:246)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin.safeEvaluate(NavigatorPlugin.java:261)
	at org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor.isTriggerPoint(NavigatorContentDescriptor.java:414)
	at org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager.findDescriptors(NavigatorContentDescriptorManager.java:174)
	at org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager.findDescriptorsForTriggerPoint(NavigatorContentDescriptorManager.java:128)
	at org.eclipse.ui.internal.navigator.NavigatorContentService.findDescriptorsByTriggerPoint(NavigatorContentService.java:770)
	at org.eclipse.ui.internal.navigator.NavigatorContentService.findContentExtensionsByTriggerPoint(NavigatorContentService.java:618)
	at org.eclipse.ui.internal.navigator.NavigatorContentService.findContentExtensionsByTriggerPoint(NavigatorContentService.java:599)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:386)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:434)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2152)
	at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:543)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2190)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2874)
	at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:791)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2764)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1947)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:674)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1923)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1880)
	at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:529)
	at org.eclipse.jface.viewers.StructuredViewer.lambda$3(StructuredViewer.java:1530)
	at org.eclipse.jface.viewers.StructuredViewer$$Lambda$311/1270516.run(Unknown Source)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1446)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:360)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1407)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1530)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:535)
	at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:349)
	at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:492)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1466)
	at org.eclipse.ui.internal.navigator.resources.actions.WorkingSetActionProvider$WorkingSetManagerListener.propertyChange(WorkingSetActionProvider.java:117)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$5.run(AbstractWorkingSetManager.java:375)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.lambda$1(AbstractWorkingSetManager.java:383)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$$Lambda$167/1299436497.run(Unknown Source)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.firePropertyChange(AbstractWorkingSetManager.java:388)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.workingSetChanged(AbstractWorkingSetManager.java:411)
	at org.eclipse.ui.internal.WorkingSetManager.workingSetChanged(WorkingSetManager.java:168)
	at org.eclipse.ui.internal.AbstractWorkingSet.fireWorkingSetChanged(AbstractWorkingSet.java:136)
	at org.eclipse.ui.internal.AggregateWorkingSet.constructElements(AggregateWorkingSet.java:121)
	at org.eclipse.ui.internal.AggregateWorkingSet.propertyChange(AggregateWorkingSet.java:242)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$5.run(AbstractWorkingSetManager.java:375)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.lambda$1(AbstractWorkingSetManager.java:383)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$$Lambda$167/1299436497.run(Unknown Source)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.firePropertyChange(AbstractWorkingSetManager.java:388)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.workingSetChanged(AbstractWorkingSetManager.java:411)
	at org.eclipse.ui.internal.WorkingSetManager.workingSetChanged(WorkingSetManager.java:168)
	at org.eclipse.ui.internal.AbstractWorkingSet.fireWorkingSetChanged(AbstractWorkingSet.java:136)
	at org.eclipse.ui.internal.WorkingSet.setElements(WorkingSet.java:242)
	at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.lambda$0(DynamicSourcesWorkingSetUpdater.java:214)
	at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater$$Lambda$462/20374782.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:4043)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3714)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1170)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1059)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:667)
	at org.eclipse.ui.internal.Workbench$$Lambda$88/50058128.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:597)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
	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 java.base@9.0.4/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@9.0.4/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base@9.0.4/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@9.0.4/java.lang.reflect.Method.invoke(Method.java:564)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:656)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:592)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1498)
Comment 1 Till Brychcy CLA 2018-07-11 12:38:58 EDT
Do you use "Working Sets" as "Top Level Elements" of the project view?
Comment 2 Dawid Pakula CLA 2018-07-11 16:30:50 EDT
(In reply to Till Brychcy from comment #1)
> Do you use "Working Sets" as "Top Level Elements" of the project view?
No

Project Presentation: flat
Top Level Elements: Projects
Package Presentation: flat
Show 'References Libraries' Node: checked
Link with Editor: checked
Active working set: "Window Working Set", problem exists after deselect
Package Explorer: closed


Problem sometimes disappear after restart until I'll open couple files (I have large code base, mostly eclipse plugins).
Comment 3 Till Brychcy CLA 2018-07-12 02:15:23 EDT
Do you have a working set selection active in the "Project Explorer"?
Comment 4 Dawid Pakula CLA 2018-07-12 03:41:35 EDT
(In reply to Till Brychcy from comment #3)
> Do you have a working set selection active in the "Project Explorer"?

Yes, "Window Working Set" but problem exists after deselect
Comment 5 Dawid Pakula CLA 2018-07-13 10:57:35 EDT
Maybe problem is with eclipse that aren't jars? M2E is part of committer package and couple plugins aren't jars but unzipped folders. Also javax.xml.rpc and couple others.

I sometimes see such errors in logs:
Java Model Exception: Java Model Status [/Applications/EclipseJavaPhoton.app/Contents/Eclipse/plugins/org.eclipse.m2e.maven.indexer_1.9.0.20180606-2035 does not exist]
	at org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:580)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:253)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:593)
	at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:323)
	at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:309)
	at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:264)
	at org.eclipse.jdt.internal.core.PackageFragmentRoot.getModuleDescription(PackageFragmentRoot.java:885)
	at org.eclipse.jdt.internal.core.search.matching.JavaSearchNameEnvironment.mapToClassPathLocation(JavaSearchNameEnvironment.java:185)
	at org.eclipse.jdt.internal.core.search.matching.JavaSearchNameEnvironment.computeClasspathLocations(JavaSearchNameEnvironment.java:131)
	at org.eclipse.jdt.internal.core.search.matching.JavaSearchNameEnvironment.<init>(JavaSearchNameEnvironment.java:75)
	at org.eclipse.jdt.internal.core.search.matching.IndexBasedJavaSearchEnvironment.create(IndexBasedJavaSearchEnvironment.java:331)
	at org.eclipse.jdt.internal.core.search.matching.MatchLocator.initialize(MatchLocator.java:1217)
	at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1255)
	at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1372)
	at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1514)
	at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:109)
	at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:247)
	at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:592)
	at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:667)
	at org.eclipse.jdt.internal.ui.search.JavaSearchQuery.run(JavaSearchQuery.java:175)
	at org.eclipse.search2.internal.ui.InternalSearchUI$InternalSearchJob.run(InternalSearchUI.java:92)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)


 Target Platform is "Running Platform".
Comment 6 elecharny CLA 2018-12-13 11:16:17 EST
Exact same problem on my Eclipse 2018-09 setup (which is 2 weeks old, on a brand new computer, no plugins installed others than the ones bundled with the eclipse WTP installation). Mac OSX High Sierra,  

java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eclipse.buildId=4.9.0.I20180906-0745
java.version=1.8.0_191
java.vendor=Oracle Corporation
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_GB
Framework arguments:  -product org.eclipse.epp.package.rcp.product -keyring /Users/elecharny/.eclipse_keyring
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.rcp.product -keyring /Users/elecharny/.eclipse_keyring


Messages :

Sample at 17:04:18.109 (+0.313s) Thread 'main' tid=1 (RUNNABLE)
Sample at 17:04:17.796 (+0.307s) Thread 'main' tid=1 (RUNNABLE)
Sample at 17:04:17.489 (+0.818s) Thread 'main' tid=1 (RUNNABLE)

for a combined 1.9 s freeze. 

Presentation: flat
Top Level Elements: workspace
Package Presentation: Hierarchical

Same thing: restarting eclipse kind of restore the standard behavior (ie, no freeze) for a bit of time, until a few debug sessions. 

Pretty annoying, as I get a freeze for almost every step while debugging...
Comment 7 Till Brychcy CLA 2018-12-13 12:33:38 EST
Try using the package explorer instead of the project explorer.
Comment 8 elecharny CLA 2018-12-13 13:21:37 EST
I'm using the package explorer already...
Comment 9 Till Brychcy CLA 2018-12-13 13:31:48 EST
OK, then it is not clear that it is the same issue (this bug is about the project explorer, which is more generic and has different performance problems)
Comment 10 elecharny CLA 2018-12-13 13:43:47 EST Comment hidden (obsolete)
Comment 11 elecharny CLA 2018-12-13 13:47:15 EST Comment hidden (obsolete)
Comment 12 Till Brychcy CLA 2018-12-13 14:41:56 EST
The top of the stack is similar, but the expressions from you stack trace are called
from ViewerFilter which is a different situation. 

Maybe the combination of hierarchical package presentation and some active filters is expensive here?

(I've set your to comments to "obsolete" just to keep this bug readable. Next time please add them as attachment and just quote relevant sections here)

org.eclipse.core.internal.expressions.Expressions.loadClass(Expressions.java:112)
	at org.eclipse.core.internal.expressions.AdaptExpression.evaluate(AdaptExpression.java:91)
	at org.eclipse.core.internal.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:55)
	at org.eclipse.core.internal.expressions.AndExpression.evaluate(AndExpression.java:34)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin$Evaluator.run(NavigatorPlugin.java:249)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.ui.internal.navigator.CustomAndExpression.evaluate(CustomAndExpression.java:74)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin$Evaluator.run(NavigatorPlugin.java:249)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.ui.internal.navigator.NavigatorPlugin.safeEvaluate(NavigatorPlugin.java:264)
	at org.eclipse.ui.internal.navigator.filters.CoreExpressionFilter.select(CoreExpressionFilter.java:47)
	at org.eclipse.jface.viewers.ViewerFilter.filter(ViewerFilter.java:59)
	at o
Comment 13 Till Brychcy CLA 2018-12-13 15:11:41 EST
Also, debugging doesn't cause any resource changes, so this shouldn't cause invocations of DynamicSourcesWorkingSetUpdater.triggerUpdate
Comment 14 Till Brychcy CLA 2018-12-13 15:15:20 EST
(actually some resource change events do happen, but none that cause triggerUpdate)
Comment 15 elecharny CLA 2018-12-13 18:08:47 EST
I don't think I have any active filter. As I said, I just installed Eclipse 2018-09 1 week ago, loaded my pet projects (ApacheDS and Apache LDAP API) into it and started debugging them.
Comment 16 Andrey Loskutov CLA 2019-02-01 17:01:00 EST
Just got multiple half-minute UI freezes on latest I20190201-0600 build *after* I've played with Project Explorer and switched back to Packages Explorer. Project Explorer was not closed but also not visible (behind other view). Newerteless it tried to update itself after I've *opened* another Java editor. With the same workbench setup Packages Explorer NEVER shows such freezes.

Project presentation: flat.
Top level elements: Projects.
Link with Editor: enabled or disabled, doesn't matter.
Selected Working Sets: *all* existing, including "Java Main" and "Java Test" resources.
Those two are the reason for freezes.

To reproduce, open Project Explorer and open one by one few Java files. On every "open" UI will freeze. On "close" too. Type in the editor and UI will freeze again. I have no idea how people can work with the Project Explorer.

I see in the debugger that org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.JavaElementChangeListener.processJavaDelta(IJavaElementDelta) is the root cause.

On every open/close/edit of a Java file it runs into this:

IJavaElement jElement= delta.getElement();
			int type= jElement.getElementType();
			if (type == IJavaElement.JAVA_PROJECT) {
				triggerUpdate();

This is bad. Deltas are hierarchical, so we don't change the project if we just change the file, no update should happen here.
On opening editors we stop at the same place, because there is a Java element delta about working copy changes.

I have ~170 projects with ~36000 files, 8 GB JVM heap, I7 CPU with 8 cores and SSD - and freezes!!!
From the logic it looks like all my java sources in the workspace are distributed into those two working sets, so once they are enabled, they will try to update themselves (and so all the shown Java elements in Project Explorer) on every file change or open/close editor events.

I believe I have a patch, will push in a minute.

Stack Traces:

	at org.eclipse.jdt.internal.core.JavaProject.contains(JavaProject.java:1106)
	at org.eclipse.jdt.internal.core.JavaModel.contains(JavaModel.java:100)
	at org.eclipse.jdt.internal.ui.JavaElementContainmentAdapter.contains(JavaElementContainmentAdapter.java:46)
	at org.eclipse.ui.ResourceWorkingSetFilter.isEnclosed(ResourceWorkingSetFilter.java:99)
	at org.eclipse.ui.ResourceWorkingSetFilter.select(ResourceWorkingSetFilter.java:66)
	at org.eclipse.jface.viewers.ViewerFilter.filter(ViewerFilter.java:59)
	at org.eclipse.ui.ResourceWorkingSetFilter.filter(ResourceWorkingSetFilter.java:161)
	at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:907)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:621)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2663)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1953)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:677)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1959)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:677)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1929)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1886)
	at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:532)
	at org.eclipse.jface.viewers.StructuredViewer.lambda$3(StructuredViewer.java:1533)
	at org.eclipse.jface.viewers.StructuredViewer$$Lambda$349/0x000000080074d440.run(Unknown Source)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1449)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:363)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1410)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1533)
	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:1469)
	at org.eclipse.ui.internal.navigator.resources.actions.WorkingSetActionProvider$WorkingSetManagerListener.propertyChange(WorkingSetActionProvider.java:120)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$5.run(AbstractWorkingSetManager.java:381)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.lambda$1(AbstractWorkingSetManager.java:389)
	at org.eclipse.ui.internal.AbstractWorkingSetManager$$Lambda$320/0x00000008006eb440.run(Unknown Source)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.firePropertyChange(AbstractWorkingSetManager.java:394)
	at org.eclipse.ui.internal.AbstractWorkingSetManager.workingSetChanged(AbstractWorkingSetManager.java:417)
	at org.eclipse.ui.internal.WorkingSetManager.workingSetChanged(WorkingSetManager.java:166)
	at org.eclipse.ui.internal.AbstractWorkingSet.fireWorkingSetChanged(AbstractWorkingSet.java:139)
	at org.eclipse.ui.internal.WorkingSet.setElements(WorkingSet.java:245)
	at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.lambda$0(DynamicSourcesWorkingSetUpdater.java:221)
	at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater$$Lambda$583/0x0000000800c5f040.run(Unknown Source)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3919)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3550)


Slightly different at the top:

	at java.base@11.0.1/java.util.HashMap.hash(HashMap.java:339)
	at java.base@11.0.1/java.util.LinkedHashMap.get(LinkedHashMap.java:440)
	at java.base@11.0.1/java.util.Collections$SynchronizedMap.get(Collections.java:2592)
	at org.eclipse.jdt.internal.core.ExternalFoldersManager.getFolder(ExternalFoldersManager.java:432)
	at org.eclipse.jdt.internal.core.JavaProject.contains(JavaProject.java:1101)
	at org.eclipse.jdt.internal.core.JavaModel.contains(JavaModel.java:100)
	at org.eclipse.jdt.internal.ui.JavaElementContainmentAdapter.contains(JavaElementContainmentAdapter.java:46)
	at org.eclipse.ui.ResourceWorkingSetFilter.isEnclosed(ResourceWorkingSetFilter.java:99)
	at org.eclipse.ui.ResourceWorkingSetFilter.select(ResourceWorkingSetFilter.java:66)

and also

	at java.base@11.0.1/java.util.HashMap.hash(HashMap.java:339)
	at java.base@11.0.1/java.util.HashMap.get(HashMap.java:552)
	at org.eclipse.jdt.internal.core.JavaModelManager.getPerProjectInfo(JavaModelManager.java:2507)
	at org.eclipse.jdt.internal.core.JavaModelManager.getPerProjectInfoCheckExistence(JavaModelManager.java:2522)
	at org.eclipse.jdt.internal.core.JavaProject.getPerProjectInfo(JavaProject.java:2335)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2394)
	at org.eclipse.jdt.internal.core.JavaProject.contains(JavaProject.java:1086)
	at org.eclipse.jdt.internal.core.JavaModel.contains(JavaModel.java:100)
	at org.eclipse.jdt.internal.ui.JavaElementContainmentAdapter.contains(JavaElementContainmentAdapter.java:46)
	at org.eclipse.ui.ResourceWorkingSetFilter.isEnclosed(ResourceWorkingSetFilter.java:99)
	at org.eclipse.ui.ResourceWorkingSetFilter.select(ResourceWorkingSetFilter.java:66)
Comment 17 Eclipse Genie CLA 2019-02-01 17:04:21 EST
New Gerrit change created: https://git.eclipse.org/r/136171
Comment 18 Till Brychcy CLA 2019-02-02 04:51:03 EST
(In reply to Andrey Loskutov from comment #16)
> Just got multiple half-minute UI freezes on latest I20190201-0600 build
> *after* I've played with Project Explorer and switched back to Packages
> Explorer. Project Explorer was not closed but also not visible (behind other
> view). Newerteless it tried to update itself after I've *opened* another
> Java editor. With the same workbench setup Packages Explorer NEVER shows
> such freezes.

If optimizing the DynamicSourcesWorkingSetUpdater is possible, we should do it.
Still it sounds, like there also is a problem in project explorer.


> 
> On every open/close/edit of a Java file it runs into this:
> 
> IJavaElement jElement= delta.getElement();
> 			int type= jElement.getElementType();
> 			if (type == IJavaElement.JAVA_PROJECT) {
> 				triggerUpdate();

This exists so buildpath configuration changes are detected, so your idea of checking if children are affected is good.
Comment 19 Andrey Loskutov CLA 2019-02-02 04:55:11 EST
(In reply to Till Brychcy from comment #18)
> (In reply to Andrey Loskutov from comment #16)
> > Just got multiple half-minute UI freezes on latest I20190201-0600 build
> > *after* I've played with Project Explorer and switched back to Packages
> > Explorer. Project Explorer was not closed but also not visible (behind other
> > view). Newerteless it tried to update itself after I've *opened* another
> > Java editor. With the same workbench setup Packages Explorer NEVER shows
> > such freezes.
> 
> If optimizing the DynamicSourcesWorkingSetUpdater is possible, we should do
> it.
> Still it sounds, like there also is a problem in project explorer.

You mean, that it reacts if hidden? Yes, this affects many views, but it is not the main issue here. If it is visible, it still should not eat CPU cycles just because of that :-). 
 
> > 
> > On every open/close/edit of a Java file it runs into this:
> > 
> > IJavaElement jElement= delta.getElement();
> > 			int type= jElement.getElementType();
> > 			if (type == IJavaElement.JAVA_PROJECT) {
> > 				triggerUpdate();
> 
> This exists so buildpath configuration changes are detected, so your idea of
> checking if children are affected is good.

Could you provide an example? You mean, only if .classpath is changed, right? Or is there a JDT flag in the delta?
Comment 20 Till Brychcy CLA 2019-02-02 05:48:19 EST
(In reply to Andrey Loskutov from comment #19)
> You mean, that it reacts if hidden? Yes, this affects many views, but it is
> not the main issue here. If it is visible, it still should not eat CPU
> cycles just because of that :-). 

The other issue is that it looks like it has a performance issue (that can be avoided as it looks like package explorer performs well in the same situation)

>  
> > > 
> > > On every open/close/edit of a Java file it runs into this:
> > > 
> > > IJavaElement jElement= delta.getElement();
> > > 			int type= jElement.getElementType();
> > > 			if (type == IJavaElement.JAVA_PROJECT) {
> > > 				triggerUpdate();
> > 
> > This exists so buildpath configuration changes are detected, so your idea of
> > checking if children are affected is good.
> 
> Could you provide an example? You mean, only if .classpath is changed,
> right? Or is there a JDT flag in the delta?

As I wrote in the gerrit comment, an example would be to toggle "Contains test sources" on a source folder. And yes, these should correspond to .classpath modifications.
Comment 21 Eclipse Genie CLA 2019-02-02 06:40:59 EST
New Gerrit change created: https://git.eclipse.org/r/136178
Comment 24 Andrey Loskutov CLA 2019-02-02 09:28:04 EST
DynamicSourcesWorkingSetUpdater seem to have another problem: it is *always* watching resource/java elements events, even if no UI is there using this working sets, or if UI is there but working sets aren't used or not enabled. I'm not sure how to address this. I personally do not use Projekt Explorer so I don't like to see this updater running all the time, it is wasting my CPU/memory. But I haven't yet understood how this should be regulated. It looks like as soon as some working set with working set updater exists, it is always created on startup and can do whatever it likes.

Till, I'm missing something? Is this really designed without any "suspend if no one uses you" trigger?
Comment 25 Till Brychcy CLA 2019-02-02 09:59:36 EST
I don't quite understand what you meant by "are not enabled". Working sets can also be used in many other situations, like search, call hierarchy, problems view. I don't think there is a mechanism to update working sets "on-demand". Also, I'm not sure if introducing an on-demand computation mechanism is even a good idea, as you might get annoying delays when you want to use them.

DynamicSourcesWorkingSetUpdater already does the main computation work in a non-UI job.
(I modelled it after OthersWorkingSetUpdater, which didn't have this)

I also didn't understand your reference to "Project Explorer". You can use working set filters in Package explorer and Navigator views, too. It just seems that project explorer has a performance issue with workings updates, that other views don't have.

I think the real problem is that Project Explorer is doing expensive work on the UI thread.
Comment 26 Eclipse Genie CLA 2019-02-02 15:16:44 EST
New Gerrit change created: https://git.eclipse.org/r/136192
Comment 27 Till Brychcy CLA 2019-02-02 15:25:23 EST
(In reply to Eclipse Genie from comment #26)
> New Gerrit change created: https://git.eclipse.org/r/136192

The change in the first gerrit actually broke the case if the directory for an optional source folder was created. Fixed by checking flags (as suggested by Andrey) and traversing to the PackageFragmentRoot level.

Also Andrey wondered if both a ResourceChangeListener and a JavaElementChangeListener a re really needed and I've checked and he is right: only the JavaElementChangeListener is needed. (OthersWorkingSetUpdater needs both as it also handles non-java projects)
Comment 28 Till Brychcy CLA 2019-02-02 15:36:31 EST
(In reply to Andrey Loskutov from comment #24)
> [...] I personally do not use Projekt Explorer
> so I don't like to see this updater running all the time, it is wasting my
> CPU/memory.

Note that the actual work done by the updater is almost free: The working set computation uses java model info that is computed anyway (and cached). Also the updater is only run (after the fixes from this bug) when projects are opened or closed or the classpath is changed.

I haven't checked if that is the case, but if the package explorer does expensive work in response to changes in working sets it doesn't actually use, it really has a bug.
Comment 30 Till Brychcy CLA 2019-02-03 10:31:28 EST
(In reply to Till Brychcy from comment #28)
> I haven't checked if that is the case, but if the package explorer does

I meant the _project_ explorer here
Comment 31 Till Brychcy CLA 2019-02-03 10:55:49 EST
Released for 4.11M3

Can somebody who had the problem please try a recent integration build from http://download.eclipse.org/eclipse/downloads/ ?

There should be no more updates on file changes and especially not when an editor is opened.

Thanks Andrey, for tracking this down!

The issue that project explorer seems to have some inefficiencies that package explorer doesn't have should be handled in platform bug (if still necessary)