Skip to content

Provide bundle groups without scanning the installation - #2866

Open
vogella wants to merge 2 commits into
eclipse-platform:masterfrom
vogella:bundle-group-provider
Open

Provide bundle groups without scanning the installation#2866
vogella wants to merge 2 commits into
eclipse-platform:masterfrom
vogella:bundle-group-provider

Conversation

@vogella

@vogella vogella commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Fixes #2863

The SDK's only IBundleGroupProvider was BundleGroupComponent in org.eclipse.update.configurator, which built the legacy PlatformConfiguration and opened every plugins/*.jar to read its manifest, on the UI thread during startup. This replaces it with a provider in the new bundle org.eclipse.core.runtime.bundlegroups that reads the feature list from the platform.xml p2 writes at provisioning time, falling back to a scan of the features directory for installations without one. Branding still comes from the branding bundle's about.ini, and description, license and bundle list are parsed from feature.xml on first access, so no plug-in jar is opened at any point.

Besides removing the startup cost, this takes the last consumer off IPlatformConfigurationFactory. After this change nothing outside org.eclipse.update.configurator references the deprecated API, so its announced removal becomes a no-op rather than a regression in the About dialog. The bundle itself and the deprecated API stay untouched until then.

The platform.xml model and parser are copied from the read path of org.eclipse.equinox.internal.p2.update and pruned to what a feature entry needs. Copying rather than depending keeps p2 out of org.eclipse.rcp, which ships without it; PDE set the same precedent with org.eclipse.pde.internal.core.update.configurator. No consumer changes are needed since they all go through Platform.getBundleGroupProviders().

Note for merging: this needs a matching <plugin id="org.eclipse.core.runtime.bundlegroups" version="0.0.0"/> entry in org.eclipse.rcp/feature.xml over in eclipse.platform.releng.aggregator. Until that lands there is no bundle group provider at all, since the old one is removed here.

@vogella
vogella force-pushed the bundle-group-provider branch from 2f85446 to 7cd3ad3 Compare August 10, 2026 17:57
@vogella

vogella commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Something for early next release

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Test Results

    54 files  +   18      54 suites  +18   1h 0m 11s ⏱️ + 17m 38s
 4 759 tests ±    0   4 737 ✅ +   23   22 💤  - 23  0 ❌ ±0 
12 168 runs  +4 056  12 015 ✅ +4 014  153 💤 +42  0 ❌ ±0 

Results for commit 5b5056d. ± Comparison against base commit fd0d61c.

♻️ This comment has been updated with latest results.

@vogella vogella added plan Planned bugs/enhancements for a release and removed Planned for 4.42 labels Aug 30, 2026
The only IBundleGroupProvider in the SDK was BundleGroupComponent in
org.eclipse.update.configurator. Asking it for bundle groups built the
legacy PlatformConfiguration, which reconciles the install site and opens
every plugins/*.jar to read its manifest. That happens on the IDE startup
path, on the UI thread, because WorkbenchActionBuilder needs feature
information to decide whether to contribute the Welcome and Tips and
Tricks actions.

The new bundle org.eclipse.core.runtime.bundlegroups registers an
equivalent provider that reads only feature data. The feature list comes
from the platform.xml that p2 writes at provisioning time, with a scan of
the features directory as a fallback for installations without one. Name,
provider, images and the welcome and tips and tricks references still come
from the about.ini of the branding bundle, and description, license and
bundle list are parsed from feature.xml on first access. No plug-in jar is
opened at any point.

The platform.xml model and parser are copied from the read path of
org.eclipse.equinox.internal.p2.update in
org.eclipse.equinox.p2.touchpoint.eclipse, pruned to the elements and
attributes a feature entry needs. The writer, the write-side state and the
configuration cache were not taken. A copy rather than a dependency keeps
p2 out of org.eclipse.rcp, which ships without it, and PDE set the same
precedent with org.eclipse.pde.internal.core.update.configurator. The
branding reader is copied from org.eclipse.update.internal.configurator
because p2 has no equivalent.

BundleGroupComponent and its Service-Component entry are removed in the
same change, since two registered providers would list every feature twice
in the About dialog. Nothing else in org.eclipse.update.configurator is
touched: the deprecated IPlatformConfiguration API and its factory stay
until their announced removal.
@vogella
vogella force-pushed the bundle-group-provider branch from 7cd3ad3 to 03e3ae4 Compare August 31, 2026 13:55
@eclipse-platform-bot

Copy link
Copy Markdown
Contributor

This pull request changes some projects for the first time in this development cycle.
Therefore the following files need a version increment:

runtime/bundles/org.eclipse.e4.core.di/META-INF/MANIFEST.MF

An additional commit containing all the necessary changes was pushed to the top of this PR's branch. To obtain these changes (for example if you want to push more changes) either fetch from your fork or apply the git patch.

Git patch
From 8bbbb19a6c4697b52319feae90855937b227a854 Mon Sep 17 00:00:00 2001
From: Eclipse Platform Bot <platform-bot@eclipse.org>
Date: Mon, 31 Aug 2026 14:02:08 +0000
Subject: [PATCH] Version bump(s) for 4.42 stream


diff --git a/runtime/bundles/org.eclipse.e4.core.di/META-INF/MANIFEST.MF b/runtime/bundles/org.eclipse.e4.core.di/META-INF/MANIFEST.MF
index 6ab76dfa84..43f99afc01 100644
--- a/runtime/bundles/org.eclipse.e4.core.di/META-INF/MANIFEST.MF
+++ b/runtime/bundles/org.eclipse.e4.core.di/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-SymbolicName: org.eclipse.e4.core.di
-Bundle-Version: 1.9.900.qualifier
+Bundle-Version: 1.9.1000.qualifier
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-- 
2.55.0

Further information are available in Common Build Issues - Missing version increments.

@merks

merks commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Wow, that's a lot of code. I guess it moved from somewhere?

@vogella

vogella commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

org.eclipse.update.configurator

Yes, most comes from org.eclipse.equinox.internal.p2.update

@merks

merks commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

I guess without history. Oh well...

@HeikoKlare

Copy link
Copy Markdown
Contributor

I see that at least AboutInfo and IniFileReader are identical to those in org.eclipse.update.configurator. Isn't there a chance to move them (and maybe other) instead and have them referenced to avoid duplication?

@vogella

vogella commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

I see that at least AboutInfo and IniFileReader are identical to those in org.eclipse.update.configurator. Isn't there a chance to move them (and maybe other) instead and have them referenced to avoid duplication?

The whole code in update.configurator can be deleted once this is in and the planned API deletion period for update.configurator has been reached.

@HeikoKlare

Copy link
Copy Markdown
Contributor

That code is not API, is it? So why not (re)move it right away?

@vogella

vogella commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

That code is not API, is it? So why not (re)move it right away?

I check tomorrow, IIRC some API marked for deletion was using it.

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

Labels

plan Planned bugs/enhancements for a release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Provide IBundleGroupProvider from a dedicated bundle instead of org.eclipse.update.configurator

4 participants