Skip to content

Conversation

@chrisrueger
Copy link
Contributor

@chrisrueger chrisrueger commented May 6, 2025

This migrates the bndtools Resolution View (https://bndtools.org/manual/resolution-view.html) to PDE.

Still work in progress. Just created the Draft PR for discussion of first results.

This is the first screenshot of the Resolution view.

image

You can click on on any

  • .bnd file
  • .jar file
  • entry in the repositories view

Open issues

  • ClassCastException class java.util.Collections$UnmodifiableRandomAccessList cannot be cast to class org.osgi.framework.Version

@github-actions
Copy link

github-actions bot commented May 6, 2025

Test Results

   285 files  +   95     285 suites  +95   49m 13s ⏱️ + 6m 21s
 3 611 tests ±    0   3 535 ✅ ±    0   76 💤 ± 0  0 ❌ ±0 
11 025 runs  +3 675  10 794 ✅ +3 597  231 💤 +78  0 ❌ ±0 

Results for commit f166aaa. ± Comparison against base commit 7c4e17e.

♻️ This comment has been updated with latest results.

Copy link
Contributor

@laeubi laeubi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this, what currently is missing:

  • License headers, these must be restored from git history of bnd
  • the view must be made available in plugin.xml so it can actually be shown

Beside that it would be good to have one commit that contains the original files from BND (with just the header added) and one follow up that adds your changes /adjustment (e.g. package name changes, formatting, cleanup and so on), so it is easier to create a CQ for this.

@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch from 4a169df to 1420d6e Compare May 7, 2025 07:59
chrisrueger added a commit to chrisrueger/eclipse.platform.releng.aggregator that referenced this pull request May 7, 2025
@chrisrueger
Copy link
Contributor Author

Waiting for eclipse-platform/eclipse.platform.releng.aggregator#3030 for required util library-

Until this is available build will fail.

@chrisrueger
Copy link
Contributor Author

Thanks for working on this, what currently is missing:

  • License headers, these must be restored from git history of bnd
    Beside that it would be good to have one commit that contains the original files from BND (with just the header added) and one follow up that adds your changes /adjustment (e.g. package name changes, formatting, cleanup and so on), so it is easier to create a CQ for this.

Done in 1st commit f40532e

  • the view must be made available in plugin.xml so it can actually be shown

Already the case.

laeubi pushed a commit to eclipse-platform/eclipse.platform.releng.aggregator that referenced this pull request May 7, 2025
@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch from 4096368 to f5d3388 Compare May 7, 2025 09:14
@laeubi laeubi force-pushed the bnd-resolutionview-to-pde branch from f5d3388 to e4b3ab7 Compare May 7, 2025 12:32
@laeubi
Copy link
Contributor

laeubi commented May 7, 2025

@chrisrueger I created https://gitlab.eclipse.org/eclipsefdn/emo-team/iplab/-/issues/21016 now to import the content from bndtools repo into PDE.

@chrisrueger chrisrueger changed the title Bnd-to-PDE: Migrate Resolutionview to PDE Bndtools-to-PDE: Migrate Resolutionview to PDE May 7, 2025
@chrisrueger chrisrueger marked this pull request as ready for review May 7, 2025 14:14
@chrisrueger chrisrueger marked this pull request as draft May 7, 2025 17:52
@chrisrueger
Copy link
Contributor Author

I think I found the reason

  • PDE Target Platform State repo returns Capabilities like that:

{osgi.ee=OSGi/Minimum, x-equinox-ee=1, version=[1.0.0]}

the version attribute is a Collection, but currently a Version is expected.

image

and Booom a ClassCastException is thrown.

I will investigate and work out a fix.

@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch from e4b3ab7 to b277fab Compare May 7, 2025 19:16
@chrisrueger
Copy link
Contributor Author

Fixed the ClassCastException in b277fab

When I click on the repo "PDE Target Platform State" I get this:


java.lang.ClassCastException: class java.util.Collections$UnmodifiableRandomAccessList cannot be cast to class org.osgi.framework.Version (java.util.Collections$UnmodifiableRandomAccessList is in module java.base of loader 'bootstrap'; org.osgi.framework.Version is in unnamed module of loader org.eclipse.equinox.launcher.Main$StartupClassLoader @5034c75a)
	at org.eclipse.pde.bnd.ui.model.resolution.CapReqComparator.compareCapToCap(CapReqComparator.java:74)
	at org.eclipse.pde.bnd.ui.model.resolution.CapReqComparator.compareCapToObj(CapReqComparator.java:41)
	at org.eclipse.pde.bnd.ui.model.resolution.CapReqComparator.compare(CapReqComparator.java:23)
	at java.base/java.util.TimSort.binarySort(Unknown Source)
	at java.base/java.util.TimSort.sort(Unknown Source)
	at java.base/java.util.Arrays.sort(Unknown Source)
	at org.eclipse.pde.bnd.ui.model.resolution.CapReqMapContentProvider.getElements(CapReqMapContentProvider.java:67)
	at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:940)
	at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:701)
	at org.eclipse.jface.viewers.AbstractTableViewer.getRawChildren(AbstractTableViewer.java:1107)
	at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:848)
	at org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(StructuredViewer.java:1024)
	at org.eclipse.jface.viewers.ColumnViewer.getSortedChildren(ColumnViewer.java:818)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:670)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:616)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:608)
	at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:562)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1391)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1352)
	at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:562)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:279)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1635)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.setInput(ResolutionView.java:519)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView$8.lambda$1(ResolutionView.java:680)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4382)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4005)
	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.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/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1403)

It does not happen when I click on single entries.
I suspect something in TargetPlatformRepository is not yet handled by CapReqComparator

@chrisrueger
Copy link
Contributor Author

chrisrueger commented May 7, 2025

Now a new exception when I click on the "PDE Target Platform State" and have the Resolution View open:


!ENTRY org.eclipse.e4.tools.emf.editor3x 4 0 2025-05-07 21:25:52.420
!MESSAGE bundle org.eclipse.e4.tools.emf.editor3x:4.10.0.qualifier (97)[org.eclipse.e4.tools.emf.editor3x.EditorProjectFunction(27)] : Could not load implementation object class org.eclipse.e4.tools.emf.editor3x.EditorProjectFunction
!STACK 0
java.lang.ClassNotFoundException: org.eclipse.e4.tools.emf.editor3x.EditorProjectFunction cannot be found by org.eclipse.e4.tools.emf.editor3x_4.10.0.qualifier
	at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:567)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:562)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:438)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:195)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:652)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:1027)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:229)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:226)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:120)
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:588)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:553)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:666)
	at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.<init>(EclipseContextOSGi.java:50)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.createServiceContext(EclipseContextFactory.java:106)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.getServiceContext(EclipseContextFactory.java:64)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.notifyEvent(TargetPlatformService.java:343)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.setWorkspaceTargetDefinition(TargetPlatformService.java:334)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.getWorkspaceTargetDefinition(TargetPlatformService.java:315)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getUnresolvedRepositoryBasedWorkspaceTarget(TargetPlatformHelper.java:285)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:556)
	at org.eclipse.pde.internal.core.PluginModelManager.getState(PluginModelManager.java:1207)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.getTargetPlatformState(TargetRepository.java:217)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.bundles(TargetRepository.java:190)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProvider(TargetRepository.java:174)
	at java.base/java.util.stream.Collectors.lambda$toMap$68(Unknown Source)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at aQute.bnd.osgi.resource.ResourceUtils.findProviders(ResourceUtils.java:849)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProviders(TargetRepository.java:169)
	at aQute.bnd.osgi.resource.ResourceUtils.getAllResources(ResourceUtils.java:665)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.getLoadersFromSelection(ResolutionView.java:638)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.selectionChanged(ResolutionView.java:572)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:266)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:123)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:78)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250)
	at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:105)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:358)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:374)
	at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:134)
	at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:819)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:167)
	at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:816)
	at org.eclipse.jface.viewers.ColumnViewer.firePostSelectionChanged(ColumnViewer.java:1062)
	at org.eclipse.jface.viewers.StructuredViewer.handlePostSelect(StructuredViewer.java:1184)
	at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:83)
	at org.eclipse.jface.util.OpenStrategy.firePostSelectionEvent(OpenStrategy.java:283)
	at org.eclipse.jface.util.OpenStrategy$1.lambda$1(OpenStrategy.java:437)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4382)
	at org.eclipse.swt.widgets.Display.observerProc(Display.java:3918)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5578)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5979)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.mouseDownSuper(Widget.java:1216)
	at org.eclipse.swt.widgets.Tree.mouseDownSuper(Tree.java:2190)
	at org.eclipse.swt.widgets.Widget.mouseDown(Widget.java:1208)
	at org.eclipse.swt.widgets.Control.mouseDown(Control.java:2598)
	at org.eclipse.swt.widgets.Tree.mouseDown(Tree.java:2157)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6286)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2407)
	at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2502)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6402)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5705)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5845)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4000)
	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.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/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1403)

!ENTRY org.eclipse.e4.tools.emf.editor3x 4 0 2025-05-07 21:25:52.427
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.ServiceException: Exception in org.apache.felix.scr.impl.manager.SingleComponentManager.getService()
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:238)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:120)
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:588)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:553)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:666)
	at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.<init>(EclipseContextOSGi.java:50)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.createServiceContext(EclipseContextFactory.java:106)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.getServiceContext(EclipseContextFactory.java:64)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.notifyEvent(TargetPlatformService.java:343)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.setWorkspaceTargetDefinition(TargetPlatformService.java:334)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.getWorkspaceTargetDefinition(TargetPlatformService.java:315)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getUnresolvedRepositoryBasedWorkspaceTarget(TargetPlatformHelper.java:285)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:556)
	at org.eclipse.pde.internal.core.PluginModelManager.getState(PluginModelManager.java:1207)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.getTargetPlatformState(TargetRepository.java:217)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.bundles(TargetRepository.java:190)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProvider(TargetRepository.java:174)
	at java.base/java.util.stream.Collectors.lambda$toMap$68(Unknown Source)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at aQute.bnd.osgi.resource.ResourceUtils.findProviders(ResourceUtils.java:849)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProviders(TargetRepository.java:169)
	at aQute.bnd.osgi.resource.ResourceUtils.getAllResources(ResourceUtils.java:665)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.getLoadersFromSelection(ResolutionView.java:638)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.selectionChanged(ResolutionView.java:572)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:266)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:123)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:78)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250)
	at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:105)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:358)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:374)
	at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:134)
	at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:819)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:167)
	at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:816)
	at org.eclipse.jface.viewers.ColumnViewer.firePostSelectionChanged(ColumnViewer.java:1062)
	at org.eclipse.jface.viewers.StructuredViewer.handlePostSelect(StructuredViewer.java:1184)
	at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:83)
	at org.eclipse.jface.util.OpenStrategy.firePostSelectionEvent(OpenStrategy.java:283)
	at org.eclipse.jface.util.OpenStrategy$1.lambda$1(OpenStrategy.java:437)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4382)
	at org.eclipse.swt.widgets.Display.observerProc(Display.java:3918)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5578)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5979)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.mouseDownSuper(Widget.java:1216)
	at org.eclipse.swt.widgets.Tree.mouseDownSuper(Tree.java:2190)
	at org.eclipse.swt.widgets.Widget.mouseDown(Widget.java:1208)
	at org.eclipse.swt.widgets.Control.mouseDown(Control.java:2598)
	at org.eclipse.swt.widgets.Tree.mouseDown(Tree.java:2157)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6286)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2407)
	at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2502)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6402)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5705)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5845)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4000)
	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.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/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1403)
Caused by: java.lang.IllegalStateException: Could not load implementation object class org.eclipse.e4.tools.emf.editor3x.EditorProjectFunction
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:1038)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:229)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:226)
	... 99 more

!ENTRY org.eclipse.e4.tools.emf.editor3x 4 0 2025-05-07 21:25:52.428
!MESSAGE bundle org.eclipse.e4.tools.emf.editor3x:4.10.0.qualifier (97)[org.eclipse.e4.tools.emf.editor3x.XMIResourceFunction(26)] : Could not load implementation object class org.eclipse.e4.tools.emf.editor3x.XMIResourceFunction
!STACK 0
java.lang.ClassNotFoundException: org.eclipse.e4.tools.emf.editor3x.XMIResourceFunction cannot be found by org.eclipse.e4.tools.emf.editor3x_4.10.0.qualifier
	at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:567)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:562)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:438)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:195)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:652)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:1027)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:229)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:226)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:120)
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:588)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:553)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:666)
	at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.<init>(EclipseContextOSGi.java:50)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.createServiceContext(EclipseContextFactory.java:106)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.getServiceContext(EclipseContextFactory.java:64)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.notifyEvent(TargetPlatformService.java:343)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.setWorkspaceTargetDefinition(TargetPlatformService.java:334)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.getWorkspaceTargetDefinition(TargetPlatformService.java:315)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getUnresolvedRepositoryBasedWorkspaceTarget(TargetPlatformHelper.java:285)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:556)
	at org.eclipse.pde.internal.core.PluginModelManager.getState(PluginModelManager.java:1207)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.getTargetPlatformState(TargetRepository.java:217)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.bundles(TargetRepository.java:190)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProvider(TargetRepository.java:174)
	at java.base/java.util.stream.Collectors.lambda$toMap$68(Unknown Source)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at aQute.bnd.osgi.resource.ResourceUtils.findProviders(ResourceUtils.java:849)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProviders(TargetRepository.java:169)
	at aQute.bnd.osgi.resource.ResourceUtils.getAllResources(ResourceUtils.java:665)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.getLoadersFromSelection(ResolutionView.java:638)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.selectionChanged(ResolutionView.java:572)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:266)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:123)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:78)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250)
	at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:105)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:358)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:374)
	at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:134)
	at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:819)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:167)
	at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:816)
	at org.eclipse.jface.viewers.ColumnViewer.firePostSelectionChanged(ColumnViewer.java:1062)
	at org.eclipse.jface.viewers.StructuredViewer.handlePostSelect(StructuredViewer.java:1184)
	at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:83)
	at org.eclipse.jface.util.OpenStrategy.firePostSelectionEvent(OpenStrategy.java:283)
	at org.eclipse.jface.util.OpenStrategy$1.lambda$1(OpenStrategy.java:437)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4382)
	at org.eclipse.swt.widgets.Display.observerProc(Display.java:3918)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5578)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5979)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.mouseDownSuper(Widget.java:1216)
	at org.eclipse.swt.widgets.Tree.mouseDownSuper(Tree.java:2190)
	at org.eclipse.swt.widgets.Widget.mouseDown(Widget.java:1208)
	at org.eclipse.swt.widgets.Control.mouseDown(Control.java:2598)
	at org.eclipse.swt.widgets.Tree.mouseDown(Tree.java:2157)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6286)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2407)
	at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2502)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6402)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5705)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5845)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4000)
	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.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/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1403)

!ENTRY org.eclipse.e4.tools.emf.editor3x 4 0 2025-05-07 21:25:52.434
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.ServiceException: Exception in org.apache.felix.scr.impl.manager.SingleComponentManager.getService()
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:238)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:120)
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:588)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:553)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:666)
	at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.<init>(EclipseContextOSGi.java:50)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.createServiceContext(EclipseContextFactory.java:106)
	at org.eclipse.e4.core.contexts.EclipseContextFactory.getServiceContext(EclipseContextFactory.java:64)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.notifyEvent(TargetPlatformService.java:343)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.setWorkspaceTargetDefinition(TargetPlatformService.java:334)
	at org.eclipse.pde.internal.core.target.TargetPlatformService.getWorkspaceTargetDefinition(TargetPlatformService.java:315)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getUnresolvedRepositoryBasedWorkspaceTarget(TargetPlatformHelper.java:285)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:556)
	at org.eclipse.pde.internal.core.PluginModelManager.getState(PluginModelManager.java:1207)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.getTargetPlatformState(TargetRepository.java:217)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.bundles(TargetRepository.java:190)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProvider(TargetRepository.java:174)
	at java.base/java.util.stream.Collectors.lambda$toMap$68(Unknown Source)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at aQute.bnd.osgi.resource.ResourceUtils.findProviders(ResourceUtils.java:849)
	at org.eclipse.pde.internal.core.bnd.TargetRepository.findProviders(TargetRepository.java:169)
	at aQute.bnd.osgi.resource.ResourceUtils.getAllResources(ResourceUtils.java:665)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.getLoadersFromSelection(ResolutionView.java:638)
	at org.eclipse.pde.bnd.ui.views.resolution.ResolutionView.selectionChanged(ResolutionView.java:572)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:266)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:123)
	at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:78)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250)
	at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59)
	at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:105)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:358)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:374)
	at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:134)
	at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:819)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:167)
	at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:816)
	at org.eclipse.jface.viewers.ColumnViewer.firePostSelectionChanged(ColumnViewer.java:1062)
	at org.eclipse.jface.viewers.StructuredViewer.handlePostSelect(StructuredViewer.java:1184)
	at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:83)
	at org.eclipse.jface.util.OpenStrategy.firePostSelectionEvent(OpenStrategy.java:283)
	at org.eclipse.jface.util.OpenStrategy$1.lambda$1(OpenStrategy.java:437)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4382)
	at org.eclipse.swt.widgets.Display.observerProc(Display.java:3918)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5578)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5979)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.mouseDownSuper(Widget.java:1216)
	at org.eclipse.swt.widgets.Tree.mouseDownSuper(Tree.java:2190)
	at org.eclipse.swt.widgets.Widget.mouseDown(Widget.java:1208)
	at org.eclipse.swt.widgets.Control.mouseDown(Control.java:2598)
	at org.eclipse.swt.widgets.Tree.mouseDown(Tree.java:2157)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6286)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:239)
	at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2407)
	at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2502)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6402)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5705)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5845)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4000)
	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.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/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1403)
Caused by: java.lang.IllegalStateException: Could not load implementation object class org.eclipse.e4.tools.emf.editor3x.XMIResourceFunction
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:1038)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:229)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:226)
	... 99 more

@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch from b277fab to 7f5b317 Compare May 7, 2025 19:36
@chrisrueger chrisrueger marked this pull request as ready for review May 7, 2025 21:20
@chrisrueger
Copy link
Contributor Author

chrisrueger commented May 7, 2025

@laeubi I think this is in an OK state for the first version.

Regarding the last exception (java.lang.ClassNotFoundException: org.eclipse.e4.tools.emf.editor3x.EditorProjectFunction cannot be found by org.eclipse.e4.tools.emf.editor3x_4.10.0.qualifier)

I don't know what I can do here. Maybe it is just my setup. You remember my Eclipse SDK has still some read problems but I can launch the Runtime Workspace, but there are some errors still.

If you think this is ok too, then I do a final squash of commits.

@laeubi
Copy link
Contributor

laeubi commented May 8, 2025

If you think this is ok too, then I do a final squash of commits.

Yes but please keep the first one intact where you imported the files from bnd tools!

@laeubi
Copy link
Contributor

laeubi commented May 8, 2025

While we are waiting for CQ approval, you probably want to prepare a N&N entry here:

https://github.com/eclipse-platform/www.eclipse.org-eclipse/blob/master/news/4.36/pde.md

after this is merged we can find it here: https://eclipse.dev/eclipse/markdown/?f=news/4.36/pde.md

And should add a note here: https://github.com/eclipse-pde/eclipse.pde/blob/master/ui/org.eclipse.pde.bnd.ui/README.MD#available-components

@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch 2 times, most recently from 3aff451 to 7ed950b Compare May 8, 2025 07:36
- This commit does not compile
- it only serves the purpose of having all migrated files in one place +
the license headers
- later commits will put those files in different folders, do cleanup
etc.
Copy link
Member

@HannesWell HannesWell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @chrisrueger
thanks for this contribution. This looks promising and at the moment PDE indeed lacks the capability to analyze resolution problems easily. I hope this can close this gap.

I didn't had the time yet to look into the details, but just from looking over this briefly, I was wondering if the icons are also available as SVG images?
We have recently added SVG support in SWT and a lot of icons where migrated to use their SVG version.
It would be great if new icons are added as SVG directly.

@chrisrueger
Copy link
Contributor Author

I was wondering if the icons are also available as SVG images?

I just copied them over from bndtools as they were there for decades :)

We have recently added SVG support in SWT and a lot of icons where migrated to use their SVG version.
It would be great if new icons are added as SVG directly.

I will try if I can do that somehow.

@HannesWell
Copy link
Member

HannesWell commented May 8, 2025

I was wondering if the icons are also available as SVG images?

I just copied them over from bndtools as they were there for decades :)

That's not a surprise. :D

We have recently added SVG support in SWT and a lot of icons where migrated to use their SVG version.
It would be great if new icons are added as SVG directly.

I will try if I can do that somehow.

That would be great, thanks. On the other hand, it's not a blocker if that's too much work. Just one day they should be SVGs and ideally from day one.

@chrisrueger
Copy link
Contributor Author

That would be great, thanks. On the other hand, it's not a blocker if that's too much work. Just one day they should be SVGs and ideally from day one.

Quick question regarding active / inactive state? I read somewhere that Eclipse can do this automatically quite well (don't remember where I read that). So should I just convert and use the active state images and Eclipse will do the inactive somewhow?

Example:

image

Should I convert both or is the green one enough and the greyed out can be done automatically?

@laeubi
Copy link
Contributor

laeubi commented May 9, 2025

@HeikoKlare can you advice regarding the active/inactive ones?

@HeikoKlare
Copy link
Contributor

I read somewhere that Eclipse can do this automatically quite well (don't remember where I read that

Might be that you are referring to this recent news: https://eclipse.dev/eclipse/markdown/?f=news/4.36/platform.md#improved-disabled-icons-generation-

Should I convert both or is the green one enough and the greyed out can be done automatically?

I would not provide pre-generated disabled/inactive icons anymore. The algorithm for calculating them out of the original icon has been improved (see the news above) such that results are (almost) equal to how the pre-generated disabled icons in Eclipse looked before. For the disabled icon of ToolItems or the disabled image descriptors of ActionContributionItems, the algorithm in SWT will automatically be used for generating a disabled image if none is provided. If you want to manually generate a disabled /inactive version of an image, there is an according copy-like Image constructor: new Image(originalImage.getDevice(), originalImage, SWT.IMAGE_DISABLE).

A further benefit of using the automatic algorithm in SWT is that you can exchange the used algorithm (also see the news above), so that a different look will consistently be applied to also your disabled/inactive images if (and only if) they are generated with that algorithm.

@chrisrueger
Copy link
Contributor Author

Question regarding the icons: Bndtools has used some icons from https://icons8.com/license
(see https://github.com/bndtools/bnd/blob/master/README.md?plain=1#L113 )

The icons are free if there is a link to icons8. How do we do this now in Eclipse?

If there is a way, I would also check for SVG replacements for the current icons. Or where do you guys get icons from?

@laeubi
Copy link
Contributor

laeubi commented May 9, 2025

@chrisrueger we have https://github.com/eclipse-platform/eclipse.platform.images/ for Eclipse images, if you can use or derive icons from there it would be the best.

@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch from 7ed950b to 7e91689 Compare May 12, 2025 18:23
@chrisrueger
Copy link
Contributor Author

@HannesWell @laeubi @HeikoKlare I replaced as many icons with svgs as I could from https://github.com/eclipse-platform/eclipse.platform.images/ 7e91689

For some I did not find good replacements and left them .png. I suggest I adress the rest in another PR.

- 1st draft of Bndtools Resolution view, which shows Requirements and
Capabilities of selected resources (.jar files, .bnd files,
RepositoryView entries)
add some missing icons
fix more icons
Add license headers to migrated files

Replace SelectionUtils with Adapters.adapt()
cleanup, add suggestions from PR
fix icon
fix compile warnings
fix ClassCastException in CapReqComparator

- reason was that the namespace 'osgi.ee' can contain List<Version>
- so we now handle cases of single Version vs. List<Version>
- for lists we take the highest version for comparison

remove temp. migration package
svg images

- update as many images to svg (taken from
https://github.com/eclipse-platform/eclipse.platform.images/tree/master/org.eclipse.images/eclipse-svg)
- for some I coudn't find replacements yet. Will do them in another PR
@chrisrueger chrisrueger force-pushed the bnd-resolutionview-to-pde branch from 7e91689 to f166aaa Compare May 13, 2025 07:06
Copy link
Contributor

@laeubi laeubi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CQ is approved now. When build succeeds I'll merge this any improvement can then be made with follow up PRs.

@laeubi laeubi merged commit dd904a1 into eclipse-pde:master May 13, 2025
16 of 19 checks passed
@laeubi laeubi added the noteworthy Noteworthy feature label May 13, 2025
@laeubi
Copy link
Contributor

laeubi commented May 13, 2025

@chrisrueger thanks for this useful addition, please add a note for this new feature here: https://github.com/eclipse-platform/www.eclipse.org-eclipse/blob/master/news/4.36/pde.md

@chrisrueger
Copy link
Contributor Author

@laeubi first draft of New and Noteworthy eclipse-platform/www.eclipse.org-eclipse#342

@HannesWell
Copy link
Member

I replaced as many icons with svgs as I could from https://github.com/eclipse-platform/eclipse.platform.images/ 7e91689

For some I did not find good replacements and left them .png. I suggest I adress the rest in another PR.

Thank you for the updates. Subsequent enhancements are always possible. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

noteworthy Noteworthy feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants