From 8c7e55e16aa03d50c8eaf8e40ef1916c3aec0213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Sun, 1 Mar 2026 16:15:53 +0100 Subject: [PATCH 01/35] Reorder classpath container to have junit container come first --- bundles/org.eclipse.osgi/.classpath | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.osgi/.classpath b/bundles/org.eclipse.osgi/.classpath index 7a20478fd02..b97d05a70c9 100644 --- a/bundles/org.eclipse.osgi/.classpath +++ b/bundles/org.eclipse.osgi/.classpath @@ -1,6 +1,7 @@ + @@ -25,6 +26,5 @@ - From c37fbdc7f7e5a9e587ff87944e612020597925dc Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Sun, 1 Mar 2026 15:21:19 +0000 Subject: [PATCH 02/35] Version bump(s) for 4.40 stream --- bundles/org.eclipse.osgi/META-INF/MANIFEST.MF | 2 +- bundles/org.eclipse.osgi/pom.xml | 2 +- features/org.eclipse.equinox.core.feature/feature.xml | 2 +- features/org.eclipse.equinox.core.sdk/feature.xml | 2 +- features/org.eclipse.equinox.server.core/feature.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF index b16b4684244..a6a98d04c0b 100644 --- a/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF @@ -107,7 +107,7 @@ Bundle-Activator: org.eclipse.osgi.internal.framework.SystemBundleActivator Bundle-Description: %systemBundle Bundle-Copyright: %copyright Bundle-Vendor: %eclipse.org -Bundle-Version: 3.24.100.qualifier +Bundle-Version: 3.24.200.qualifier Bundle-Localization: systembundle Bundle-DocUrl: http://www.eclipse.org Eclipse-ExtensibleAPI: true diff --git a/bundles/org.eclipse.osgi/pom.xml b/bundles/org.eclipse.osgi/pom.xml index 1740845e6a1..bdc3a5db5ea 100644 --- a/bundles/org.eclipse.osgi/pom.xml +++ b/bundles/org.eclipse.osgi/pom.xml @@ -19,7 +19,7 @@ org.eclipse.platform org.eclipse.osgi - 3.24.100-SNAPSHOT + 3.24.200-SNAPSHOT eclipse-plugin diff --git a/features/org.eclipse.equinox.core.feature/feature.xml b/features/org.eclipse.equinox.core.feature/feature.xml index 1673d330cdf..37011ac1e53 100644 --- a/features/org.eclipse.equinox.core.feature/feature.xml +++ b/features/org.eclipse.equinox.core.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.core.sdk/feature.xml b/features/org.eclipse.equinox.core.sdk/feature.xml index be2cebe84d9..62f8e0a7b6f 100644 --- a/features/org.eclipse.equinox.core.sdk/feature.xml +++ b/features/org.eclipse.equinox.core.sdk/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.server.core/feature.xml b/features/org.eclipse.equinox.server.core/feature.xml index 2f81f5b4769..6b1de67389a 100644 --- a/features/org.eclipse.equinox.server.core/feature.xml +++ b/features/org.eclipse.equinox.server.core/feature.xml @@ -2,7 +2,7 @@ From 92cf61fe861b2defdf42baa3f8b23469db126841 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 07:19:28 +0000 Subject: [PATCH 03/35] Bump actions/upload-artifact from 6 to 7 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 27d95ab71a3..d1fbf93f0d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,7 +68,7 @@ jobs: -Dequinox.binaries.loc=${{ github.workspace }}/equinox.binaries clean verify - name: Upload native artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 if: success() with: name: ${{ matrix.config.name }} launcher artifacts @@ -77,7 +77,7 @@ jobs: equinox.binaries/org.eclipse.equinox.launcher.${{ matrix.config.ws }}.${{ matrix.config.os }}.x86_64/eclipse_*.${{ matrix.config.native-extension }} if-no-files-found: error - name: Upload ${{ matrix.config.name }} Test Results - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: test-results-${{ matrix.config.name }}64 if-no-files-found: error @@ -118,7 +118,7 @@ jobs: -fn clean verify - name: Upload TCK Results - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 if: always() with: name: tck-results @@ -129,7 +129,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Upload - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Event File path: ${{ github.event_path }} From 96ba5ab7b766752a0ab62e8239b2ddbd57584e6c Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Fri, 6 Mar 2026 23:32:40 +0100 Subject: [PATCH 04/35] Set compiler.problem.forbiddenReference to error for all projects If it's not already an error. --- .../.settings/org.eclipse.jdt.core.prefs | 1 + .../.settings/org.eclipse.jdt.core.prefs | 1 + .../.settings/org.eclipse.jdt.core.prefs | 1 + .../.settings/org.eclipse.jdt.core.prefs | 1 + .../.settings/org.eclipse.jdt.core.prefs | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 1 + 6 files changed, 6 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.equinox.concurrent/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.concurrent/.settings/org.eclipse.jdt.core.prefs index f9198ba838e..4e4ae8f26d8 100644 --- a/bundles/org.eclipse.equinox.concurrent/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.equinox.concurrent/.settings/org.eclipse.jdt.core.prefs @@ -9,6 +9,7 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 diff --git a/bundles/org.eclipse.equinox.console.jaas.fragment/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.console.jaas.fragment/.settings/org.eclipse.jdt.core.prefs index e8e7adda28a..7ec4d72abe9 100644 --- a/bundles/org.eclipse.equinox.console.jaas.fragment/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.equinox.console.jaas.fragment/.settings/org.eclipse.jdt.core.prefs @@ -5,6 +5,7 @@ org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 diff --git a/bundles/org.eclipse.equinox.http.service.api/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.http.service.api/.settings/org.eclipse.jdt.core.prefs index 9f6ece88bdf..2d98c1a047d 100644 --- a/bundles/org.eclipse.equinox.http.service.api/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.equinox.http.service.api/.settings/org.eclipse.jdt.core.prefs @@ -4,5 +4,6 @@ org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bundles/org.eclipse.equinox.launcher.tests/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.launcher.tests/.settings/org.eclipse.jdt.core.prefs index 62ef3488cc0..fa415ae829f 100644 --- a/bundles/org.eclipse.equinox.launcher.tests/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.equinox.launcher.tests/.settings/org.eclipse.jdt.core.prefs @@ -4,6 +4,7 @@ org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 diff --git a/bundles/org.eclipse.equinox.security.tests/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.security.tests/.settings/org.eclipse.jdt.core.prefs index 814916f088b..228bb5728db 100644 --- a/bundles/org.eclipse.equinox.security.tests/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.equinox.security.tests/.settings/org.eclipse.jdt.core.prefs @@ -44,7 +44,7 @@ org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled org.eclipse.jdt.core.compiler.problem.fieldHiding=warning org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning diff --git a/bundles/org.eclipse.equinox.slf4j/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.slf4j/.settings/org.eclipse.jdt.core.prefs index 62ef3488cc0..fa415ae829f 100644 --- a/bundles/org.eclipse.equinox.slf4j/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.equinox.slf4j/.settings/org.eclipse.jdt.core.prefs @@ -4,6 +4,7 @@ org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 From b41ad9aee70e20562e3088ece7a81d8be21198f3 Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Fri, 6 Mar 2026 23:03:29 +0000 Subject: [PATCH 05/35] Version bump(s) for 4.40 stream --- bundles/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../org.eclipse.equinox.http.service.api/META-INF/MANIFEST.MF | 2 +- bundles/org.eclipse.equinox.security.tests/META-INF/MANIFEST.MF | 2 +- bundles/org.eclipse.equinox.slf4j/META-INF/MANIFEST.MF | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF index 0c16d3ad898..33d6b430724 100644 --- a/bundles/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.equinox.concurrent -Bundle-Version: 1.3.400.qualifier +Bundle-Version: 1.3.500.qualifier Bundle-Vendor: %pluginProvider Bundle-RequiredExecutionEnvironment: JavaSE-17 Import-Package: org.eclipse.core.runtime;common=split;version="3.4.0" diff --git a/bundles/org.eclipse.equinox.console.jaas.fragment/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.console.jaas.fragment/META-INF/MANIFEST.MF index 56d869777fc..6cfad9279a1 100644 --- a/bundles/org.eclipse.equinox.console.jaas.fragment/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.console.jaas.fragment/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %bundleName Bundle-Vendor: %bundleVendor Bundle-Localization: plugin Bundle-SymbolicName: org.eclipse.equinox.console.jaas.fragment -Bundle-Version: 1.2.100.qualifier +Bundle-Version: 1.2.200.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-17 DynamicImport-Package: org.eclipse.equinox.console.jaas Fragment-Host: org.apache.sshd.osgi;bundle-version="2.2.0" diff --git a/bundles/org.eclipse.equinox.http.service.api/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.http.service.api/META-INF/MANIFEST.MF index f7d21f721af..5e71e56df76 100644 --- a/bundles/org.eclipse.equinox.http.service.api/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.http.service.api/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: OSGi service http APIs Bundle-SymbolicName: org.eclipse.equinox.http.service.api -Bundle-Version: 1.2.102.qualifier +Bundle-Version: 1.2.202.qualifier Bundle-Vendor: Eclipse.org - Equinox Automatic-Module-Name: org.eclipse.equinox.http.service.api Bundle-RequiredExecutionEnvironment: JavaSE-1.8 diff --git a/bundles/org.eclipse.equinox.security.tests/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.security.tests/META-INF/MANIFEST.MF index 2fd3612144f..16f4e1660d2 100644 --- a/bundles/org.eclipse.equinox.security.tests/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.security.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Equinox security tests Bundle-SymbolicName: org.eclipse.equinox.security.tests;singleton:=true -Bundle-Version: 1.3.600.qualifier +Bundle-Version: 1.3.700.qualifier Bundle-Activator: org.eclipse.equinox.internal.security.tests.SecurityTestsActivator Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-Vendor: Eclipse.org diff --git a/bundles/org.eclipse.equinox.slf4j/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.slf4j/META-INF/MANIFEST.MF index 696d5905d7f..fa53bdf3d3b 100644 --- a/bundles/org.eclipse.equinox.slf4j/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.slf4j/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %bundleName Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-SymbolicName: org.eclipse.equinox.slf4j -Bundle-Version: 1.0.200.qualifier +Bundle-Version: 1.0.300.qualifier Import-Package: org.eclipse.equinox.log;version="[1.1.0,2.0.0)", org.osgi.framework;version="[1.10.0,2.0.0)", org.osgi.service.log;version="[1.5.0,2.0.0)", From df9c55a13269300033e3070f8b0eb3da600dde39 Mon Sep 17 00:00:00 2001 From: Ed Merks Date: Tue, 10 Mar 2026 14:10:00 +0100 Subject: [PATCH 06/35] Disable the jar creation because the jars are no longer populated --- releng/org.eclipse.equinox.releng/Equinox.setup | 2 ++ 1 file changed, 2 insertions(+) diff --git a/releng/org.eclipse.equinox.releng/Equinox.setup b/releng/org.eclipse.equinox.releng/Equinox.setup index b59396769a6..42cb0d65378 100644 --- a/releng/org.eclipse.equinox.releng/Equinox.setup +++ b/releng/org.eclipse.equinox.releng/Equinox.setup @@ -247,6 +247,7 @@ Create an empty jar as a placeholder for the jar that will eventually be created. This ensures that PDE will add the jar to the classpath of projects needing the ant jar. @@ -261,6 +262,7 @@ Create an empty jar as a placeholder for the jar that will eventually be created. This ensures that PDE will add the jar to the classpath of projects needing the ant jar. From 64e5abc96a8d709693733f31385230c15cd3786f Mon Sep 17 00:00:00 2001 From: Ed Merks Date: Tue, 10 Mar 2026 15:26:11 +0100 Subject: [PATCH 07/35] Revert "Disable the jar creation because the jars are no longer populated" This reverts commit df9c55a13269300033e3070f8b0eb3da600dde39. --- releng/org.eclipse.equinox.releng/Equinox.setup | 2 -- 1 file changed, 2 deletions(-) diff --git a/releng/org.eclipse.equinox.releng/Equinox.setup b/releng/org.eclipse.equinox.releng/Equinox.setup index 42cb0d65378..b59396769a6 100644 --- a/releng/org.eclipse.equinox.releng/Equinox.setup +++ b/releng/org.eclipse.equinox.releng/Equinox.setup @@ -247,7 +247,6 @@ Create an empty jar as a placeholder for the jar that will eventually be created. This ensures that PDE will add the jar to the classpath of projects needing the ant jar. @@ -262,7 +261,6 @@ Create an empty jar as a placeholder for the jar that will eventually be created. This ensures that PDE will add the jar to the classpath of projects needing the ant jar. From d74419595c13839b34bcc5b2279c5cccfa1fea80 Mon Sep 17 00:00:00 2001 From: Ed Merks Date: Wed, 11 Mar 2026 13:24:22 +0100 Subject: [PATCH 08/35] Set lastModified of empty jars to be really old --- releng/org.eclipse.equinox.releng/Equinox.setup | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/releng/org.eclipse.equinox.releng/Equinox.setup b/releng/org.eclipse.equinox.releng/Equinox.setup index b59396769a6..4b658a42c11 100644 --- a/releng/org.eclipse.equinox.releng/Equinox.setup +++ b/releng/org.eclipse.equinox.releng/Equinox.setup @@ -248,7 +248,8 @@ xsi:type="setup:ResourceCreationTask" excludedTriggers="BOOTSTRAP" targetURL="${github.clone.equinox.p2.location|uri}/bundles/org.eclipse.equinox.p2.jarprocessor/lib/jarprocessor-ant.jar" - encoding="base64"> + encoding="base64" + lastModified="0"> Create an empty jar as a placeholder for the jar that will eventually be created. This ensures that PDE will add the jar to the classpath of projects needing the ant jar. UEsDBAoAAAAAAHtelUw05vp1HAAAABwAAAAFAHAAZW1wdHlTRFsApAAAAAAIAL/UyvdjZGBpEGFg @@ -262,7 +263,8 @@ xsi:type="setup:ResourceCreationTask" excludedTriggers="BOOTSTRAP" targetURL="${github.clone.equinox.p2.location|uri}/bundles/org.eclipse.equinox.p2.repository.tools/lib/repository-tools-ant.jar" - encoding="base64"> + encoding="base64" + lastModified="0"> Create an empty jar as a placeholder for the jar that will eventually be created. This ensures that PDE will add the jar to the classpath of projects needing the ant jar. UEsDBAoAAAAAAHtelUw05vp1HAAAABwAAAAFAHAAZW1wdHlTRFsApAAAAAAIAL/UyvdjZGBpEGFg From fd979b283c29d6fe05673100d88bef8823839880 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 05:54:20 +0000 Subject: [PATCH 09/35] Bump json from 2.18.1 to 2.19.2 in /docs Bumps [json](https://github.com/ruby/json) from 2.18.1 to 2.19.2. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.18.1...v2.19.2) --- updated-dependencies: - dependency-name: json dependency-version: 2.19.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 466e586b0a9..5005f34697d 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -224,7 +224,7 @@ GEM gemoji (>= 3, < 5) html-pipeline (~> 2.2) jekyll (>= 3.0, < 5.0) - json (2.18.1) + json (2.19.2) kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) From be5262efa65baad325c0c2257393f599abe13725 Mon Sep 17 00:00:00 2001 From: William Riley Date: Tue, 10 Mar 2026 16:20:24 +0000 Subject: [PATCH 10/35] Protect against NPE via slf4j.EquinoxLogger Some callers of SLF4J log null messages which OSGi Logger does not allow. Fixes: #1253 --- .../eclipse/equinox/slf4j/EquinoxLogger.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java b/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java index 07de11a78c0..0fa635b90ec 100644 --- a/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java +++ b/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java @@ -92,25 +92,39 @@ protected void handleNormalizedLoggingCall(Level level, Marker marker, String me } if(level == Level.TRACE && logger.isTraceEnabled()) { - String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments); + String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); logger.trace(formattedMessage,throwable); } if(level == Level.DEBUG && logger.isDebugEnabled()) { - String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments); + String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); logger.debug(formattedMessage,throwable); } if(level == Level.WARN && logger.isWarnEnabled()) { - String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments); + String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); logger.warn(formattedMessage,throwable); } if(level == Level.INFO && logger.isInfoEnabled()) { - String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments); + String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); logger.info(formattedMessage, throwable); } if(level == Level.ERROR && logger.isInfoEnabled()) { - String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments); + String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); logger.info(formattedMessage, throwable); } } + /** + * Wrapper around SLF4J basicArrayFormat that guards against a null message pattern. + * OSGi does not allow logging a null message + * @param messagePattern + * @param arguments + */ + private String safeBasicArrayFormat(String messagePattern, Object[] arguments) { + if(messagePattern == null) { + return String.valueOf(messagePattern); + } else { + return MessageFormatter.basicArrayFormat(messagePattern, arguments); + } + } + } \ No newline at end of file From fab8511043a2031239bb136558ded9a50133d705 Mon Sep 17 00:00:00 2001 From: William Riley Date: Wed, 11 Mar 2026 08:04:47 +0000 Subject: [PATCH 11/35] Avoid passing null arg to OSGi logger Does not cause exception but does cause unexpected behaviour Issue #1253 --- .../src/org/eclipse/equinox/slf4j/EquinoxLogger.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java b/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java index 0fa635b90ec..44a3254400d 100644 --- a/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java +++ b/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java @@ -90,26 +90,28 @@ protected void handleNormalizedLoggingCall(Level level, Marker marker, String me if (logger == null) { return; } + //Must not pass a null argument to OSGi Logger + Object[] loggerArguments = throwable != null ? new Object[] { throwable } : new Object[0]; if(level == Level.TRACE && logger.isTraceEnabled()) { String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); - logger.trace(formattedMessage,throwable); + logger.trace(formattedMessage, loggerArguments); } if(level == Level.DEBUG && logger.isDebugEnabled()) { String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); - logger.debug(formattedMessage,throwable); + logger.debug(formattedMessage, loggerArguments); } if(level == Level.WARN && logger.isWarnEnabled()) { String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); - logger.warn(formattedMessage,throwable); + logger.warn(formattedMessage, loggerArguments); } if(level == Level.INFO && logger.isInfoEnabled()) { String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); - logger.info(formattedMessage, throwable); + logger.info(formattedMessage, loggerArguments); } if(level == Level.ERROR && logger.isInfoEnabled()) { String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); - logger.info(formattedMessage, throwable); + logger.info(formattedMessage, loggerArguments); } } From bf9df0eb2d1c561156f34abacd52326574fddb80 Mon Sep 17 00:00:00 2001 From: William Riley Date: Wed, 11 Mar 2026 08:06:51 +0000 Subject: [PATCH 12/35] Correct handling of SLF4J error log calls Correct enabled check & fix to log as error not info Issue #1253 --- .../src/org/eclipse/equinox/slf4j/EquinoxLogger.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java b/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java index 44a3254400d..ad9420039d2 100644 --- a/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java +++ b/bundles/org.eclipse.equinox.slf4j/src/org/eclipse/equinox/slf4j/EquinoxLogger.java @@ -109,9 +109,9 @@ protected void handleNormalizedLoggingCall(Level level, Marker marker, String me String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); logger.info(formattedMessage, loggerArguments); } - if(level == Level.ERROR && logger.isInfoEnabled()) { + if(level == Level.ERROR && logger.isErrorEnabled()) { String formattedMessage = safeBasicArrayFormat(messagePattern, arguments); - logger.info(formattedMessage, loggerArguments); + logger.error(formattedMessage, loggerArguments); } } From f3d53ac52c291164c9ba2ec450c12d91f2fa91e3 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 31 Mar 2026 15:59:45 -0500 Subject: [PATCH 13/35] Wait for STARTED event before adding test listener Async framework event may still be getting delivered and we need to make sure no pending events are waiting to be logged before adding the test listener; otherwise timing issues could happen with unexpected logs for the pending events from starting the framework. --- .../equinox/log/test/LogEquinoxTraceTest.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogEquinoxTraceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogEquinoxTraceTest.java index 1c529ddbbab..111fc6caf14 100644 --- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogEquinoxTraceTest.java +++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogEquinoxTraceTest.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.eclipse.equinox.log.SynchronousLogListener; import org.eclipse.osgi.internal.debug.Debug; import org.eclipse.osgi.launch.Equinox; @@ -39,6 +41,7 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; import org.osgi.framework.Constants; +import org.osgi.framework.FrameworkEvent; import org.osgi.framework.ServiceReference; import org.osgi.service.condition.Condition; import org.osgi.service.log.LogEntry; @@ -87,16 +90,28 @@ public void setUp() throws Exception { Map configuration = new HashMap<>(); configuration.put(Constants.FRAMEWORK_STORAGE, config.getAbsolutePath()); equinox = new Equinox(configuration); + equinox.init(); + + BundleContext systemContext = equinox.getBundleContext(); + CountDownLatch frameworkStarted = new CountDownLatch(1); + systemContext.addFrameworkListener((e) -> { + if (FrameworkEvent.STARTED == e.getType()) { + frameworkStarted.countDown(); + } + }); + equinox.start(); - loggerAdmin = equinox.getBundleContext() - .getService(equinox.getBundleContext().getServiceReference(LoggerAdmin.class)); - LogReaderService logReader = equinox.getBundleContext() - .getService(equinox.getBundleContext().getServiceReference(LogReaderService.class)); + // Need to wait for the STARTED event before continuing to ensure + // all events are flushed before adding the test log listener + frameworkStarted.await(1, TimeUnit.MINUTES); + loggerAdmin = systemContext.getService(systemContext.getServiceReference(LoggerAdmin.class)); testListener = new TestListener(); + + LogReaderService logReader = systemContext + .getService(systemContext.getServiceReference(LogReaderService.class)); logReader.addLogListener(testListener); - BundleContext systemContext = equinox.getBundleContext(); debugOptions = systemContext.getService(systemContext.getServiceReference(DebugOptions.class)); } From c71d914a6279cba9deff35c1797fd1abf60d4bbd Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Tue, 31 Mar 2026 21:08:37 +0000 Subject: [PATCH 14/35] Version bump(s) for 4.40 stream --- bundles/org.eclipse.osgi.tests/META-INF/MANIFEST.MF | 2 +- bundles/org.eclipse.osgi.tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.osgi.tests/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/META-INF/MANIFEST.MF index 5a06f171c24..b68eb0954a3 100644 --- a/bundles/org.eclipse.osgi.tests/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Core OSGi Tests Bundle-SymbolicName: org.eclipse.osgi.tests;singleton:=true -Bundle-Version: 3.22.500.qualifier +Bundle-Version: 3.22.600.qualifier Bundle-Vendor: Eclipse.org Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)", diff --git a/bundles/org.eclipse.osgi.tests/pom.xml b/bundles/org.eclipse.osgi.tests/pom.xml index 09e3a9eaf35..7dc8e53b825 100644 --- a/bundles/org.eclipse.osgi.tests/pom.xml +++ b/bundles/org.eclipse.osgi.tests/pom.xml @@ -19,7 +19,7 @@ org.eclipse.platform org.eclipse.osgi.tests - 3.22.500-SNAPSHOT + 3.22.600-SNAPSHOT eclipse-test-plugin From e50ec5fec2380a565b06d83d98162996f2f80a7c Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Fri, 3 Apr 2026 20:29:56 +0200 Subject: [PATCH 15/35] Restore explicit zero dependencies pom.xml for o.e.equinox.supplement This partially reverts commit 1b8d960f72ccc273431f9cc8df774c56c4e829c9 Fixes https://github.com/eclipse-equinox/equinox/issues/1263 --- .../supplement/build.properties | 5 +-- bundles/org.eclipse.osgi/supplement/pom.xml | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 bundles/org.eclipse.osgi/supplement/pom.xml diff --git a/bundles/org.eclipse.osgi/supplement/build.properties b/bundles/org.eclipse.osgi/supplement/build.properties index 0d5ad4382ea..bf127181573 100644 --- a/bundles/org.eclipse.osgi/supplement/build.properties +++ b/bundles/org.eclipse.osgi/supplement/build.properties @@ -1,6 +1,6 @@ ############################################################################### -# Copyright (c) 2005, 2022 IBM Corporation and others. +# Copyright (c) 2005, 2026 IBM Corporation and others. # # This program and the accompanying materials # are made available under the terms of the Eclipse Public License 2.0 @@ -19,6 +19,3 @@ bin.includes = META-INF/,\ plugin.properties,\ about.html src.includes = about.html - -# Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless -tycho.pomless.parent = ../../../ diff --git a/bundles/org.eclipse.osgi/supplement/pom.xml b/bundles/org.eclipse.osgi/supplement/pom.xml new file mode 100644 index 00000000000..ffe709e89b5 --- /dev/null +++ b/bundles/org.eclipse.osgi/supplement/pom.xml @@ -0,0 +1,31 @@ + + + + 4.0.0 + + + org.eclipse.equinox + parent + 4.40.0-SNAPSHOT + ../../.. + + + org.eclipse.equinox.supplement + 1.12.200-SNAPSHOT + eclipse-plugin + + From d52d783e048f35fb19dc928015647a7c0f4dbb44 Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Fri, 3 Apr 2026 18:38:13 +0000 Subject: [PATCH 16/35] Version bump(s) for 4.40 stream --- bundles/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF | 2 +- bundles/org.eclipse.osgi/supplement/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF index 57c7ca02970..409bb94838e 100644 --- a/bundles/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.equinox.supplement -Bundle-Version: 1.12.200.qualifier +Bundle-Version: 1.12.300.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Export-Package: org.eclipse.equinox.log;version="1.1", diff --git a/bundles/org.eclipse.osgi/supplement/pom.xml b/bundles/org.eclipse.osgi/supplement/pom.xml index ffe709e89b5..8063456a93c 100644 --- a/bundles/org.eclipse.osgi/supplement/pom.xml +++ b/bundles/org.eclipse.osgi/supplement/pom.xml @@ -22,7 +22,7 @@ org.eclipse.equinox.supplement - 1.12.200-SNAPSHOT + 1.12.300-SNAPSHOT eclipse-plugin - - 4.0.0 - - - org.eclipse.equinox - parent - 4.40.0-SNAPSHOT - ../../.. - - - org.eclipse.equinox.supplement - 1.12.300-SNAPSHOT - eclipse-plugin - - From d66ee66d43dd64622da770308cb0e4087f759036 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 05:38:48 +0000 Subject: [PATCH 18/35] Bump activesupport from 8.0.2 to 8.0.4.1 in /docs Bumps [activesupport](https://github.com/rails/rails) from 8.0.2 to 8.0.4.1. - [Release notes](https://github.com/rails/rails/releases) - [Changelog](https://github.com/rails/rails/blob/v8.1.3/activesupport/CHANGELOG.md) - [Commits](https://github.com/rails/rails/compare/v8.0.2...v8.0.4.1) --- updated-dependencies: - dependency-name: activesupport dependency-version: 8.0.4.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 5005f34697d..bbc3566dd8c 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - activesupport (8.0.2) + activesupport (8.0.4.1) base64 benchmark (>= 0.3) bigdecimal @@ -10,29 +10,29 @@ GEM drb i18n (>= 1.6, < 2) logger (>= 1.4.2) - minitest (>= 5.1) + minitest (>= 5.1, < 6) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) uri (>= 0.13.1) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) - base64 (0.2.0) - benchmark (0.4.0) - bigdecimal (3.1.9) + base64 (0.3.0) + benchmark (0.5.0) + bigdecimal (4.1.1) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.12.2) colorator (1.1.0) commonmarker (0.23.11) - concurrent-ruby (1.3.5) - connection_pool (2.5.1) + concurrent-ruby (1.3.6) + connection_pool (3.0.2) csv (3.3.4) dnsruby (1.73.1) base64 (>= 0.2) logger (~> 1.6) simpleidn (~> 0.2.1) - drb (2.2.1) + drb (2.2.3) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) @@ -112,7 +112,7 @@ GEM activesupport (>= 2) nokogiri (>= 1.4) http_parser.rb (0.8.0) - i18n (1.14.7) + i18n (1.14.8) concurrent-ruby (~> 1.0) jekyll (3.10.0) addressable (~> 2.4) @@ -239,7 +239,7 @@ GEM jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.25.5) + minitest (5.27.0) net-http (0.9.1) uri (>= 0.11.1) nokogiri (1.19.1-aarch64-linux-gnu) From 07770b434842d24fd1af3b402d0b54756e87af25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 15:53:18 +0000 Subject: [PATCH 19/35] Bump emibcn/badge-action from 2.0.3 to 2.0.4 Bumps [emibcn/badge-action](https://github.com/emibcn/badge-action) from 2.0.3 to 2.0.4. - [Release notes](https://github.com/emibcn/badge-action/releases) - [Commits](https://github.com/emibcn/badge-action/compare/808173dd03e2f30c980d03ee49e181626088eee8...f9150fde070fcca0c4e832437611b44838fcd325) --- updated-dependencies: - dependency-name: emibcn/badge-action dependency-version: 2.0.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index f4f4b9a98b1..8e0428dc067 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -106,7 +106,7 @@ jobs: ;; esac - name: Create badge of ${{ matrix.tck.name }} - uses: emibcn/badge-action@808173dd03e2f30c980d03ee49e181626088eee8 + uses: emibcn/badge-action@f9150fde070fcca0c4e832437611b44838fcd325 with: # label: ${{ matrix.tck.chapter }} - ${{ matrix.tck.label }} ${{ matrix.tck.suffix }} label: '${{ fromJSON( steps.test-results.outputs.json ).formatted.stats.tests }} tests' From 7ba474e2d72b10442a333edda0791f8f751ed054 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 06:16:23 +0000 Subject: [PATCH 20/35] Bump addressable from 2.8.7 to 2.9.0 in /docs Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.8.7 to 2.9.0. - [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md) - [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.8.7...addressable-2.9.0) --- updated-dependencies: - dependency-name: addressable dependency-version: 2.9.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index bbc3566dd8c..36d8dd30a02 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -14,8 +14,8 @@ GEM securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) uri (>= 0.13.1) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) base64 (0.3.0) benchmark (0.5.0) bigdecimal (4.1.1) From f245096b02125cc52f3c5fa90cc8348d2dcd69d3 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Sat, 4 Apr 2026 18:37:48 +0200 Subject: [PATCH 21/35] [Build] Ensure availability guards in macOS native launcher and clean up Also build launcher binaries for macOS on agents of the targeted architecture. --- Jenkinsfile | 6 ++---- .../META-INF/MANIFEST.MF | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../library/cocoa/build.sh | 3 +-- .../library/cocoa/make_cocoa.mak | 3 ++- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b716b34f574..2a85ec5777d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,6 +15,7 @@ def runOnNativeBuildAgent(String platform, Closure body) { def final nativeBuildStageName = 'Perform native launcher build' + def agentLabel = 'native.builder-' + platform if (platform == 'gtk.linux.x86_64') { podTemplate(inheritFrom: 'basic' /* inherit general configuration */, containers: [ containerTemplate(name: 'launcherbuild', image: 'eclipse/platformreleng-debian-swtgtk3nativebuild:10', @@ -25,12 +26,9 @@ def runOnNativeBuildAgent(String platform, Closure body) { node(POD_LABEL) { stage(nativeBuildStageName) { container('launcherbuild') { body() } } } } } else { - if (platform == 'cocoa.macosx.x86_64') { - platform = 'cocoa.macosx.aarch64' - } // See the Definition of the RelEng Jenkins instance in // https://github.com/eclipse-cbi/jiro/tree/master/instances/eclipse.platform.releng - node('native.builder-' + platform) { stage(nativeBuildStageName) { body() } } + node(agentLabel) { stage(nativeBuildStageName) { body() } } } } diff --git a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/META-INF/MANIFEST.MF index 5a4639dfbcb..c240119147f 100644 --- a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.aarch64;singleton:=true -Bundle-Version: 1.2.1400.qualifier +Bundle-Version: 1.2.1500.qualifier Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.7.0,1.8.0)" Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=aarch64) ) Bundle-Localization: launcher.cocoa.macosx.aarch64 diff --git a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF index 056ee170bdd..094872d3236 100644 --- a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.x86_64;singleton:=true -Bundle-Version: 1.2.1400.qualifier +Bundle-Version: 1.2.1500.qualifier Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.7.0,1.8.0)" Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) ) Bundle-Localization: launcher.cocoa.macosx.x86_64 diff --git a/features/org.eclipse.equinox.executable.feature/library/cocoa/build.sh b/features/org.eclipse.equinox.executable.feature/library/cocoa/build.sh index 2996497b014..d8bb894241e 100755 --- a/features/org.eclipse.equinox.executable.feature/library/cocoa/build.sh +++ b/features/org.eclipse.equinox.executable.feature/library/cocoa/build.sh @@ -61,7 +61,6 @@ echo "build $defaultOSArch" PROGRAM_OUTPUT="$programOutput" DEFAULT_OS="$defaultOS" DEFAULT_WS="$defaultWS" -DEPLOYMENT_TARGET=11.0 if [ "$BINARIES_DIR" = "" ]; then BINARIES_DIR="../../../../../equinox.binaries"; fi if [ "$defaultOSArch" == "arm64" ] || [ "$defaultOSArch" == "aarch64" ] @@ -84,7 +83,7 @@ fi ARCHS="-arch $defaultOSArch" export PROGRAM_OUTPUT DEFAULT_OS DEFAULT_OS_ARCH DEFAULT_WS ARCHS JAVA_HEADERS EXE_OUTPUT_DIR LIB_OUTPUT_DIR -export MACOSX_DEPLOYMENT_TARGET=$DEPLOYMENT_TARGET +export MACOSX_DEPLOYMENT_TARGET=11 if [ "$extraArgs" != "" ]; then make -f $makefile $extraArgs diff --git a/features/org.eclipse.equinox.executable.feature/library/cocoa/make_cocoa.mak b/features/org.eclipse.equinox.executable.feature/library/cocoa/make_cocoa.mak index aaafb34c72d..98f8594faf1 100644 --- a/features/org.eclipse.equinox.executable.feature/library/cocoa/make_cocoa.mak +++ b/features/org.eclipse.equinox.executable.feature/library/cocoa/make_cocoa.mak @@ -44,7 +44,8 @@ ifeq ($(ARCHS),-arch x86_64) endif CFLAGS = -O \ - -Wall \ + -Wall -Werror \ + -Wunguarded-availability \ -DCOCOA -xobjective-c \ $(ARCHS) \ -DMACOSX \ From e63f61ca1b1d719354f6b4305a445b30f4be62d7 Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Wed, 8 Apr 2026 16:38:37 +0000 Subject: [PATCH 22/35] Binaries LBv1-1920 --- .../build.properties | 2 +- .../build.properties | 2 +- .../library/make_version.mak | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties index 5e45c16a351..4f37c7092df 100644 --- a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties +++ b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties @@ -16,7 +16,7 @@ bin.includes = META-INF/,\ about.html generateSourceBundle=false -binaryTag=LBv1-1916 +binaryTag=LBv1-1920 # Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless tycho.pomless.parent = ../../launcher-binary-parent diff --git a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties index 2d9f4089cc7..e1311c45462 100644 --- a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties +++ b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties @@ -16,7 +16,7 @@ bin.includes = META-INF/,\ about.html generateSourceBundle=false -binaryTag=LBv1-1916 +binaryTag=LBv1-1920 # Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless tycho.pomless.parent = ../../launcher-binary-parent diff --git a/features/org.eclipse.equinox.executable.feature/library/make_version.mak b/features/org.eclipse.equinox.executable.feature/library/make_version.mak index 6ad9147cc91..b1952bc77a8 100644 --- a/features/org.eclipse.equinox.executable.feature/library/make_version.mak +++ b/features/org.eclipse.equinox.executable.feature/library/make_version.mak @@ -13,5 +13,5 @@ #******************************************************************************* maj_ver=1 -min_ver=1919 +min_ver=1920 LIB_VERSION = $(maj_ver)$(min_ver) From 17d48df5fec1a976bf836ab7000b4a259c5dfd9b Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Mon, 13 Apr 2026 08:37:30 -0500 Subject: [PATCH 23/35] Correctly wait 1 second on condition --- .../eclipse/osgi/storage/bundlefile/CloseableBundleFile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java index 80ea9a1fca8..225b05ce7dd 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java @@ -365,7 +365,7 @@ public void close() throws IOException { // wait for them all to close because this is being closed by the // MRUBundleFileList try { - refCondition.await(1000, TimeUnit.MICROSECONDS); // timeout after 1 second + refCondition.await(1, TimeUnit.SECONDS); // timeout after 1 second } catch (InterruptedException e) { // do nothing for now ... } From 2e7e8a31e00eec0cedaf4c198d89b949351e5483 Mon Sep 17 00:00:00 2001 From: "Klare, Heiko" Date: Tue, 14 Apr 2026 13:20:31 +0200 Subject: [PATCH 24/35] [Build] Build macOS native launcher binaries on macOS 15 agents With recent changes, the macOS native launcher binaries are built on the Jenkins agents with the fitting architecture. This includes the usage of different macOS SDKs. For the x86 build, a macOS 15 SDK is used, whereas the aarch64 build uses a macOS 26 SDK. After that change, the behavior of applications using the binaries built with macOS 26 SDK show significantly changes behavior and appearance (such as title bar text alignment, background colors, invisible lists and the like), rendering applications hardly usable or even partly unusable. With this change, the binaries are always built on the x86 agent, which runs macOS 15 and uses the according SDK, to restore existing behavior. This is supposed to be a temporary solution until the Eclipse Platform has been updated to be compatible with the macOS 26 SDK behavior. --- Jenkinsfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 2a85ec5777d..988c9a85800 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,6 +15,10 @@ def runOnNativeBuildAgent(String platform, Closure body) { def final nativeBuildStageName = 'Perform native launcher build' + // Use x86 agent for aarch64 build to ensure that the baseline macOS SDK (the oldest) is used consistently for all binary builds + if (platform == 'cocoa.macosx.aarch64') { + platform = 'cocoa.macosx.x86_64' + } def agentLabel = 'native.builder-' + platform if (platform == 'gtk.linux.x86_64') { podTemplate(inheritFrom: 'basic' /* inherit general configuration */, containers: [ From 36de39bde95dcbf3cd4364fe09dfc931264a1389 Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Tue, 14 Apr 2026 22:55:26 +0000 Subject: [PATCH 25/35] Binaries LBv1-1921 --- .../build.properties | 2 +- .../build.properties | 2 +- .../library/make_version.mak | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties index 4f37c7092df..8f1943387a6 100644 --- a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties +++ b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.aarch64/build.properties @@ -16,7 +16,7 @@ bin.includes = META-INF/,\ about.html generateSourceBundle=false -binaryTag=LBv1-1920 +binaryTag=LBv1-1921 # Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless tycho.pomless.parent = ../../launcher-binary-parent diff --git a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties index e1311c45462..2f0c27893ca 100644 --- a/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties +++ b/bundles/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties @@ -16,7 +16,7 @@ bin.includes = META-INF/,\ about.html generateSourceBundle=false -binaryTag=LBv1-1920 +binaryTag=LBv1-1921 # Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless tycho.pomless.parent = ../../launcher-binary-parent diff --git a/features/org.eclipse.equinox.executable.feature/library/make_version.mak b/features/org.eclipse.equinox.executable.feature/library/make_version.mak index b1952bc77a8..2bd0a0eedc6 100644 --- a/features/org.eclipse.equinox.executable.feature/library/make_version.mak +++ b/features/org.eclipse.equinox.executable.feature/library/make_version.mak @@ -13,5 +13,5 @@ #******************************************************************************* maj_ver=1 -min_ver=1920 +min_ver=1921 LIB_VERSION = $(maj_ver)$(min_ver) From 429eff3071b298db707c4862978eb6a002e12a12 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 28 Apr 2026 14:33:04 -0500 Subject: [PATCH 26/35] Add test for concurrent getContent calls --- .../plurl/test/PlurlConcurrencyTest.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java diff --git a/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java b/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java new file mode 100644 index 00000000000..eaf339a2824 --- /dev/null +++ b/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2026 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.plurl.test; + +import static org.junit.Assert.assertNull; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.equinox.plurl.impl.PlurlImpl; +import org.junit.Test; + +public class PlurlConcurrencyTest { + @Test + public void testConcurrentMWERun() throws InterruptedException { + new PlurlImpl().install(); + + for (int i = 0; i < 1000; i++) { + List threads = new ArrayList<>(); + List> errors = new ArrayList<>(); + + for (int j = 0; j < 10; j++) { + AtomicReference error = new AtomicReference<>(); + errors.add(error); + + Thread thread = new Thread(() -> { + try { + URL url = this.getClass().getClassLoader() + .getResource(this.getClass().getName().replace(".", "/") + ".class"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + url.getContent(); + } catch (Throwable t) { + error.set(t); + } + }); + threads.add(thread); + thread.start(); + } + + for (Thread thread : threads) { + thread.join(); + } + + for (int j = 0; j < errors.size(); j++) { + Throwable t = errors.get(j).get(); + assertNull("Thread threw an error: " + j, t); //$NON-NLS-1$ + } + } + } +} From c71d2a6a27cd0e865422e7152d3fd26e3502e090 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 28 Apr 2026 14:33:29 -0500 Subject: [PATCH 27/35] Cache build-in factories at construction Avoids using the same ServiceLoader instance from muiltiple threads. ServiceLoader instances are not thread-safe. --- .../org/eclipse/equinox/plurl/impl/PlurlImpl.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java index 1e065a5eba3..481191883bf 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java @@ -150,8 +150,8 @@ static enum SetFactories { List contentHandlerFactories = Collections.emptyList(); List plurlImpls = Collections.emptyList(); - final ServiceLoader builtinURLStreamHandlerFactoryLoader; - final ServiceLoader builtinContentHandlerFactoryLoader; + final List builtinURLStreamHandlerFactoryLoader; + final List builtinContentHandlerFactoryLoader; final CallStack callStack; private final ThreadLocal> creatingProtocols = new ThreadLocal<>(); @@ -503,8 +503,14 @@ public Field getStaticField(Class clazz, Class type) { } public PlurlImpl() { - builtinContentHandlerFactoryLoader = ServiceLoader.load(ContentHandlerFactory.class); - builtinURLStreamHandlerFactoryLoader = ServiceLoader.load(URLStreamHandlerFactory.class); + List serviceLoaderCHFs = new ArrayList<>(); + ServiceLoader.load(ContentHandlerFactory.class).forEach(serviceLoaderCHFs::add); + builtinContentHandlerFactoryLoader = Collections.unmodifiableList(serviceLoaderCHFs); + + List serviceLoaderUSHFs = new ArrayList<>(); + ServiceLoader.load(URLStreamHandlerFactory.class).forEach(serviceLoaderUSHFs::add); + builtinURLStreamHandlerFactoryLoader = Collections.unmodifiableList(serviceLoaderUSHFs); + callStack = createCallStack(); } From c74a34ac856c8fdf2fe06c98d66e42ffbf53b9f7 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 29 Apr 2026 09:50:44 -0500 Subject: [PATCH 28/35] Improve concurrency test Use different protocol/content-type each iteration to make sure the handler factory is called each iteration. --- .../plurl/test/PlurlConcurrencyTest.java | 63 ++++++++++++++++--- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java b/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java index eaf339a2824..9b905930583 100644 --- a/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java +++ b/bundles/org.eclipse.osgi/container/src_test/org/eclipse/equinox/plurl/test/PlurlConcurrencyTest.java @@ -13,33 +13,75 @@ *******************************************************************************/ package org.eclipse.equinox.plurl.test; +import static org.eclipse.equinox.plurl.test.PlurlContentHandlerFactoryTest.checkContent; +import static org.eclipse.equinox.plurl.test.PlurlStreamHandlerFactoryTest.checkProtocol; +import static org.eclipse.equinox.plurl.test.PlurlTestHandlers.createTestContentHandlerFactory; +import static org.eclipse.equinox.plurl.test.PlurlTestHandlers.createTestURLStreamHandlerFactory; +import static org.eclipse.equinox.plurl.test.PlurlTestHandlers.TestFactoryType.PLURL_FACTORY; import static org.junit.Assert.assertNull; -import java.net.URL; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference; -import org.eclipse.equinox.plurl.impl.PlurlImpl; +import org.eclipse.equinox.plurl.test.PlurlTestHandlers.TestContentHandlerFactory; +import org.eclipse.equinox.plurl.test.PlurlTestHandlers.TestURLStreamHandlerFactory; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; import org.junit.Test; public class PlurlConcurrencyTest { + private static PlurlTestHandlers plurlTestHandlers; + + @Before + public synchronized void installPlurl() { + if (plurlTestHandlers == null) { + plurlTestHandlers = new PlurlTestHandlers(); + } + } + + @After + public void cleanupHandlers() { + plurlTestHandlers.cleanupHandlers(); + } + + @AfterClass + public static void uninstallPlurl() { + plurlTestHandlers.uninstall(true); + plurlTestHandlers = null; + } + + private static final int CONCURRENCY_TEST_ITERATIONS = 100; + private static final int CONCURRENT_THREAD_COUNT = 10; @Test - public void testConcurrentMWERun() throws InterruptedException { - new PlurlImpl().install(); + public void testConcurrentGetContentCalls() throws InterruptedException, IOException { + // Note that if the test fails it only fails the first iteration because of an + // implementation detail in ServiceLoader. + for (int i = 0; i < CONCURRENCY_TEST_ITERATIONS; i++) { + // install the URL handler, unique to this iteration + TestURLStreamHandlerFactory testPlurlFactory = createTestURLStreamHandlerFactory(PLURL_FACTORY, + "getcontent" + i); //$NON-NLS-1$ + testPlurlFactory.shouldHandle.set(true); + plurlTestHandlers.add(PLURL_FACTORY, testPlurlFactory); + checkProtocol(testPlurlFactory.TYPES, true); + + // install the content factory, unique to this iteration + TestContentHandlerFactory testContentFactory = createTestContentHandlerFactory(PLURL_FACTORY, + "getcontent" + i); //$NON-NLS-1$ + testContentFactory.shouldHandle.set(true); + plurlTestHandlers.add(PLURL_FACTORY, testContentFactory); - for (int i = 0; i < 1000; i++) { List threads = new ArrayList<>(); List> errors = new ArrayList<>(); - for (int j = 0; j < 10; j++) { + for (int j = 0; j < CONCURRENT_THREAD_COUNT; j++) { AtomicReference error = new AtomicReference<>(); errors.add(error); Thread thread = new Thread(() -> { try { - URL url = this.getClass().getClassLoader() - .getResource(this.getClass().getName().replace(".", "/") + ".class"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - url.getContent(); + checkContent(testContentFactory.TYPES, true); } catch (Throwable t) { error.set(t); } @@ -52,6 +94,9 @@ public void testConcurrentMWERun() throws InterruptedException { thread.join(); } + plurlTestHandlers.remove(PLURL_FACTORY, testContentFactory); + plurlTestHandlers.remove(PLURL_FACTORY, testPlurlFactory); + for (int j = 0; j < errors.size(); j++) { Throwable t = errors.get(j).get(); assertNull("Thread threw an error: " + j, t); //$NON-NLS-1$ From 84add06061be5b73e6e76a28d3803ef02a1ca9a3 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 29 Apr 2026 13:32:02 -0500 Subject: [PATCH 29/35] Remove ServiceLoader lookups for URLStreamHandlerFactory The ServiceLoader usage is incorrectly looking up URLStreamHandlerFactory. The java.net.spi.URLStreamHandlerProvider was added in Java 9. We could decide to lookup providers instead, but at this time it seems unnecessary because the JVM will do this if we return null. In the future we can decide if providers should be called by Plurl, but that seems an unnecessary complication. The ContentHandlerFactory ServiceLoader usage remains necessary because we must not return null from the Plurl factory for ContentHandlerFactory. --- bundles/org.eclipse.osgi/bnd.bnd | 3 +- .../eclipse/equinox/plurl/impl/PlurlImpl.java | 30 +++++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/bundles/org.eclipse.osgi/bnd.bnd b/bundles/org.eclipse.osgi/bnd.bnd index 2705eaef44b..3d89ded0e5a 100644 --- a/bundles/org.eclipse.osgi/bnd.bnd +++ b/bundles/org.eclipse.osgi/bnd.bnd @@ -5,7 +5,6 @@ Require-Capability: \ osgi.serviceloader;osgi.serviceloader="org.osgi.framework.connect.FrameworkUtilHelper", \ - osgi.serviceloader;osgi.serviceloader="java.net.ContentHandlerFactory", \ - osgi.serviceloader;osgi.serviceloader="java.net.URLStreamHandlerFactory" + osgi.serviceloader;osgi.serviceloader="java.net.ContentHandlerFactory" diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java index 481191883bf..9912be54ec4 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/equinox/plurl/impl/PlurlImpl.java @@ -150,8 +150,7 @@ static enum SetFactories { List contentHandlerFactories = Collections.emptyList(); List plurlImpls = Collections.emptyList(); - final List builtinURLStreamHandlerFactoryLoader; - final List builtinContentHandlerFactoryLoader; + final List builtinContentHandlerFactories; final CallStack callStack; private final ThreadLocal> creatingProtocols = new ThreadLocal<>(); @@ -503,13 +502,19 @@ public Field getStaticField(Class clazz, Class type) { } public PlurlImpl() { + // IMPLEMENTATION NOTE: + // We must do the ServiceLoader lookup for the built-in ContentHandlerFactory + // because the Plurl ContentHandlerFactory must never return null; + // otherwise the Plurl factory will never be called again for the requested + // content type. So a check for built-in handlers must be done before returning + // the Plurl handler. + // This is not necessary for URLStreamHandlerFactory or the new + // URLStreamHandlerProvider that may be available from the JVM because returning + // null from that factory still allows us to be called again if the protocol is + // requested again later. List serviceLoaderCHFs = new ArrayList<>(); ServiceLoader.load(ContentHandlerFactory.class).forEach(serviceLoaderCHFs::add); - builtinContentHandlerFactoryLoader = Collections.unmodifiableList(serviceLoaderCHFs); - - List serviceLoaderUSHFs = new ArrayList<>(); - ServiceLoader.load(URLStreamHandlerFactory.class).forEach(serviceLoaderUSHFs::add); - builtinURLStreamHandlerFactoryLoader = Collections.unmodifiableList(serviceLoaderUSHFs); + builtinContentHandlerFactories = Collections.unmodifiableList(serviceLoaderCHFs); callStack = createCallStack(); } @@ -591,7 +596,7 @@ public URLStreamHandler run() { ContentHandler findBuiltinContentHandlerImpl(String contentType) { // first check service loader - for (ContentHandlerFactory f : builtinContentHandlerFactoryLoader) { + for (ContentHandlerFactory f : builtinContentHandlerFactories) { ContentHandler h = f.createContentHandler(contentType); if (h != null) { return h; @@ -634,14 +639,7 @@ ContentHandler findBuiltinContentHandlerImpl(String contentType) { } URLStreamHandler findBuiltinURLStreamHandlerImpl(String protocol) { - // first check service loader - for (URLStreamHandlerFactory f : builtinURLStreamHandlerFactoryLoader) { - URLStreamHandler h = f.createURLStreamHandler(protocol); - if (h != null) { - return h; - } - } - // now check property + // check handlers pkgs property String builtInHandlers = System.getProperty(PROTOCOL_HANDLER_PKGS); if (builtInHandlers == null) return null; From 399983d425c42c578343cb495e34ae893c189d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Thu, 30 Apr 2026 09:48:41 +0300 Subject: [PATCH 30/35] Update tycho-build to 5.0.2 --- .mvn/extensions.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml index 1bea74fa702..27b350875b6 100644 --- a/.mvn/extensions.xml +++ b/.mvn/extensions.xml @@ -3,6 +3,6 @@ org.eclipse.tycho tycho-build - 5.0.1 + 5.0.2 From 2b81b0379b43ad44fbf8dcb37c30a28cae3e3c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Thu, 30 Apr 2026 10:21:44 +0300 Subject: [PATCH 31/35] Update bnd-maven-plugin to 7.2.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 45ab4864749..53459951076 100644 --- a/pom.xml +++ b/pom.xml @@ -259,7 +259,7 @@ biz.aQute.bnd bnd-maven-plugin - 7.1.0 + 7.2.3 org.eclipse.tycho From 641cfddf573f30ebc39e53b398cb12d712f0f3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Thu, 30 Apr 2026 11:28:47 +0300 Subject: [PATCH 32/35] Update mockito-core to 5.23.0 --- bundles/org.eclipse.osgi/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.osgi/pom.xml b/bundles/org.eclipse.osgi/pom.xml index bdc3a5db5ea..64b659439f1 100644 --- a/bundles/org.eclipse.osgi/pom.xml +++ b/bundles/org.eclipse.osgi/pom.xml @@ -77,7 +77,7 @@ org.mockito mockito-core - 5.18.0 + 5.23.0 test From a9d18c0233ffedb72dd01ae5a6c24eded88aa13b Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Thu, 16 Apr 2026 23:35:09 +0200 Subject: [PATCH 33/35] Add apache.commons.commons-fileupload to equinox.server.jetty feature --- features/org.eclipse.equinox.server.jetty/feature.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/features/org.eclipse.equinox.server.jetty/feature.xml b/features/org.eclipse.equinox.server.jetty/feature.xml index daaa1b48ba9..d223d8ae128 100644 --- a/features/org.eclipse.equinox.server.jetty/feature.xml +++ b/features/org.eclipse.equinox.server.jetty/feature.xml @@ -15,6 +15,10 @@ %license + + + + From 1028c983549a016a67eabba1cdce5288933859de Mon Sep 17 00:00:00 2001 From: Eclipse Equinox Bot Date: Thu, 16 Apr 2026 21:49:57 +0000 Subject: [PATCH 34/35] Version bump(s) for 4.40 stream --- features/org.eclipse.equinox.server.jetty/feature.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/org.eclipse.equinox.server.jetty/feature.xml b/features/org.eclipse.equinox.server.jetty/feature.xml index d223d8ae128..ab2855c5fe8 100644 --- a/features/org.eclipse.equinox.server.jetty/feature.xml +++ b/features/org.eclipse.equinox.server.jetty/feature.xml @@ -2,7 +2,7 @@ From e9d19507f435fdd5a4f2c95de1a678a1b42204c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 10 May 2026 16:25:27 +0000 Subject: [PATCH 35/35] Bump nokogiri from 1.19.1 to 1.19.3 in /docs Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.19.1 to 1.19.3. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.19.1...v1.19.3) --- updated-dependencies: - dependency-name: nokogiri dependency-version: 1.19.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 36d8dd30a02..a22a66f5343 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -242,21 +242,21 @@ GEM minitest (5.27.0) net-http (0.9.1) uri (>= 0.11.1) - nokogiri (1.19.1-aarch64-linux-gnu) + nokogiri (1.19.3-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.19.1-aarch64-linux-musl) + nokogiri (1.19.3-aarch64-linux-musl) racc (~> 1.4) - nokogiri (1.19.1-arm-linux-gnu) + nokogiri (1.19.3-arm-linux-gnu) racc (~> 1.4) - nokogiri (1.19.1-arm-linux-musl) + nokogiri (1.19.3-arm-linux-musl) racc (~> 1.4) - nokogiri (1.19.1-arm64-darwin) + nokogiri (1.19.3-arm64-darwin) racc (~> 1.4) - nokogiri (1.19.1-x86_64-darwin) + nokogiri (1.19.3-x86_64-darwin) racc (~> 1.4) - nokogiri (1.19.1-x86_64-linux-gnu) + nokogiri (1.19.3-x86_64-linux-gnu) racc (~> 1.4) - nokogiri (1.19.1-x86_64-linux-musl) + nokogiri (1.19.3-x86_64-linux-musl) racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3)