Provide bundle groups without scanning the installation - #2866
Conversation
2f85446 to
7cd3ad3
Compare
|
Something for early next release |
Test Results 51 files - 3 51 suites - 3 58m 27s ⏱️ +21s Results for commit 7bc93b0. ± Comparison against base commit a68c37a. This pull request removes 3 tests.♻️ This comment has been updated with latest results. |
7cd3ad3 to
03e3ae4
Compare
|
This pull request changes some projects for the first time in this development cycle. 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 patchFurther information are available in Common Build Issues - Missing version increments. |
|
Wow, that's a lot of code. I guess it moved from somewhere? |
Yes, most comes from org.eclipse.equinox.internal.p2.update |
|
I guess without history. Oh well... |
|
I see that at least |
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. |
|
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. |
Lots of the non-API code can be deleted. I update the PR. |
3b2c3d0 to
4a67509
Compare
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, on the IDE startup path and 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 from the platform.xml p2 writes at provisioning time, with a scan of the features directory as a fallback, branding from the about.ini of the branding bundle, and description and bundle list from feature.xml on first access. No plug-in jar is opened at any point. Its platform.xml model and parser are copied from the read path of org.eclipse.equinox.internal.p2.update and pruned; a copy rather than a dependency keeps p2 out of org.eclipse.rcp, which ships without it. BundleGroupComponent is removed in the same change, since two registered providers would list every feature twice in the About dialog. With it gone nothing reaches the branding reader in org.eclipse.update.configurator any more, so that package and the IBundleGroup implementation of FeatureEntry go as well. It was exported to org.eclipse.update.core only, which no longer exists. The deprecated IPlatformConfiguration API and its factory stay untouched. Assisted-by: multiple AI agents and layers of automated tooling 🤖
4a67509 to
7bc93b0
Compare
Fixes #2863
The SDK's only
IBundleGroupProviderwasBundleGroupComponentinorg.eclipse.update.configurator, which built the legacyPlatformConfigurationand opened everyplugins/*.jarto read its manifest, on the UI thread during startup.The new bundle
org.eclipse.core.runtime.bundlegroupsreplaces it with a provider that reads the feature list from theplatform.xmlp2 writes at provisioning time, falling back to a scan of thefeaturesdirectory.Branding comes from the branding bundle's
about.ini, description and bundle list fromfeature.xmlon first access, so no plug-in jar is opened at any point.Besides the startup cost this takes the last consumer off
IPlatformConfigurationFactory, so its announced removal becomes a no-op rather than a regression in the About dialog.With
BundleGroupComponentgone nothing reaches the branding reader inorg.eclipse.update.configuratorany more, so that package and theIBundleGrouphalf ofFeatureEntryare deleted here too instead of being left as a duplicate of what the new bundle carries.The deprecated
IPlatformConfigurationAPI and its factory stay untouched.The
platform.xmlmodel and parser are copied from the read path oforg.eclipse.equinox.internal.p2.updateand 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.Consumers need no change, 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 inorg.eclipse.rcp/feature.xmlineclipse.platform.releng.aggregator.Until that lands there is no bundle group provider at all, since the old one is removed here.