Community
Participate
Working Groups
I see the following UI freeze related to org.eclipse.ui.dialogs.FilteredTree. Also relevant for org.eclipse.e4.ui.dialogs.filteredtree.FilteredTree IMHO. I suggest to activate setUseHashlookup on both viewers. Stack Trace at java.base@11.0.2/java.util.HashMap.hash(HashMap.java:339) at java.base@11.0.2/java.util.HashMap.compute(HashMap.java:1203) at org.eclipse.equinox.internal.p2.metadata.index.CapabilityIndex.<init>(CapabilityIndex.java:61) at org.eclipse.equinox.internal.p2.engine.Profile.getIndex(Profile.java:184) at org.eclipse.equinox.p2.query.ExpressionMatchQuery.perform(ExpressionMatchQuery.java:68) at org.eclipse.equinox.internal.p2.metadata.index.IndexProvider.query(IndexProvider.java:26) at org.eclipse.equinox.internal.p2.metadata.index.IndexProvider.query(IndexProvider.java:36) at org.eclipse.equinox.internal.p2.metadata.TranslationSupport.getLocalizationFragments(TranslationSupport.java:270) at org.eclipse.equinox.internal.p2.metadata.TranslationSupport.getLocalizedIUProperty(TranslationSupport.java:291) at org.eclipse.equinox.internal.p2.metadata.TranslationSupport.getIUProperty(TranslationSupport.java:174) at org.eclipse.equinox.internal.p2.metadata.InstallableUnit.getProperty(InstallableUnit.java:203) at org.eclipse.equinox.internal.p2.ui.viewers.IUComparator.compare(IUComparator.java:61) at org.eclipse.jface.viewers.ViewerComparator.lambda$0(ViewerComparator.java:206) at org.eclipse.jface.viewers.ViewerComparator$$Lambda$406/0x000000010094c840.compare(Unknown Source) at java.base@11.0.2/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) at java.base@11.0.2/java.util.TimSort.sort(TimSort.java:220) at java.base@11.0.2/java.util.Arrays.sort(Arrays.java:1441) at org.eclipse.jface.viewers.ViewerComparator.sort(ViewerComparator.java:206) at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:644) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:815) at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:604) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:766) at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1586) at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:780) at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$1(AbstractTreeViewer.java:1571) at org.eclipse.jface.viewers.AbstractTreeViewer$$Lambda$407/0x000000010094cc40.run(Unknown Source) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1393) at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:363) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1354) at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1565) at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.inputChanged(FilteredTree.java:863) at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282) at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1631) at org.eclipse.equinox.internal.p2.ui.dialogs.InstalledIUGroup.createViewer(InstalledIUGroup.java:78) at org.eclipse.equinox.internal.p2.ui.dialogs.StructuredIUGroup.createGroupComposite(StructuredIUGroup.java:81) at org.eclipse.equinox.internal.p2.ui.dialogs.InstalledIUGroup.<init>(InstalledIUGroup.java:54) at org.eclipse.equinox.p2.ui.InstalledSoftwarePage.createControl(InstalledSoftwarePage.java:98) at org.eclipse.ui.internal.about.InstallationDialog.tabSelected(InstallationDialog.java:242) at org.eclipse.ui.internal.about.InstallationDialog.createContents(InstallationDialog.java:219) at org.eclipse.jface.window.Window.create(Window.java:431) at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1094) at org.eclipse.jface.window.Window.open(Window.java:788) at org.eclipse.ui.internal.dialogs.AboutDialog.lambda$0(AboutDialog.java:134) at org.eclipse.ui.internal.dialogs.AboutDialog$$Lambda$1945/0x00000001016e7440.run(Unknown Source) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:72) at org.eclipse.ui.internal.dialogs.AboutDialog.buttonPressed(AboutDialog.java:130) at org.eclipse.jface.dialogs.Dialog.lambda$0(Dialog.java:619) at org.eclipse.jface.dialogs.Dialog$$Lambda$806/0x0000000100f32440.accept(Unknown Source) at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5618) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1405) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4882) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4406) at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) at org.eclipse.jface.window.Window.open(Window.java:799) at org.eclipse.ui.internal.about.AboutHandler.execute(AboutHandler.java:31) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283) at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:95) at jdk.internal.reflect.GeneratedMethodAccessor54.invoke(Unknown Source) at java.base@11.0.2/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.2/java.lang.reflect.Method.invoke(Method.java:566) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:318) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:252) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:498) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:389) at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:142) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580) at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:412) at org.eclipse.jface.action.ActionContributionItem$$Lambda$340/0x00000001007a4840.handleEvent(Unknown Source) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5618) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1405) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4882) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4406) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:635) at org.eclipse.ui.internal.Workbench$$Lambda$118/0x000000010036d840.run(Unknown Source) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base@11.0.2/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.2/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.2/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.2/java.lang.reflect.Method.invoke(Method.java:566) at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) at app//org.eclipse.equinox.launcher.Main.run(Main.java:1468) at app//org.eclipse.equinox.launcher.Main.main(Main.java:1441)
New Gerrit change created: https://git.eclipse.org/r/147615
For record tracking: Andrey and Julian added the following:(summary by me, please correct, if summery is not correct). ---- Making FilteredTree using hashCode may affect customers with broken hash/equals implementations for with mutable hashCode. He suggested to change the concrete uses of this code in platform, and may be to provide a different constructor. ---- So we can: 1.) Add new option to opt-in (client stays slow) 2.) document the change and allow clients to opt-out FilteredTree from e4 has not been released as API, so I will change it directly. This leaves the option: 3.) Leave and deprecated ui.FilteredTree pointing to the new e4 one (which was anymore the plan long term as the ui one cannot be used by e4 RCP applications)
I tried the same global enabling of setHashLookup(true) for CheckboxTreeViewer in bug 546450, and that was also rejected. I guess you may experience the same problems with this approach of setting it globally.
(In reply to Michael Keppler from comment #3) > I tried the same global enabling of setHashLookup(true) for > CheckboxTreeViewer in bug 546450, and that was also rejected. I guess you > may experience the same problems with this approach of setting it globally. Indeed. But I could switch to the e4 FilteredTree, which we forgot to release as API in the past. Forgetfulness pays out in this case.. ;-)
(In reply to Michael Keppler from comment #3) > I tried the same global enabling of setHashLookup(true) for > CheckboxTreeViewer in bug 546450, and that was also rejected. I guess you > may experience the same problems with this approach of setting it globally. As suggested by Andrey, I created a new constructor which allows to activate this. I also deprecated the old one, so that clients are guided to use the new constructor and tried to make it obvious in the Javadoc, that "true" is the right choice.
Gerrit change https://git.eclipse.org/r/147615 was merged to [master]. Commit: http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=d7e73547b0062070de9f65b1ffe82ab5ab4008e0
New Gerrit change created: https://git.eclipse.org/r/147789
New Gerrit change created: https://git.eclipse.org/r/147790
Gerrit change https://git.eclipse.org/r/147789 was merged to [master]. Commit: http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=d064d6699c6b02ee7afbeee1197c5657e4abb780
New Gerrit change created: https://git.eclipse.org/r/147816
Gerrit change https://git.eclipse.org/r/147816 was merged to [master]. Commit: http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=db57fa26f349a8236aa1ee0d40e2e3938614c2a0
This caused releng test fail, see https://download.eclipse.org/eclipse/downloads/drops4/I20190816-0155/compilelogs/platform.doc.isv.javadoc.txt ../../../eclipse.platform.ui/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java:236: warning: empty <p> tag * <p> ^ 1 warning The line in question is now 242. Please fix.
(In reply to Andrey Loskutov from comment #12) > This caused releng test fail, see > https://download.eclipse.org/eclipse/downloads/drops4/I20190816-0155/ > compilelogs/platform.doc.isv.javadoc.txt > > ../../../eclipse.platform.ui/bundles/org.eclipse.ui.workbench/Eclipse > UI/org/eclipse/ui/dialogs/FilteredTree.java:236: warning: empty <p> tag > * <p> > ^ > 1 warning > > The line in question is now 242. Please fix. Done