Skip to content

IEP-1727: Update target platform to Eclipse 2026-03 (4.39)#1415

Open
sigmaaa wants to merge 3 commits intomasterfrom
IEP-1727
Open

IEP-1727: Update target platform to Eclipse 2026-03 (4.39)#1415
sigmaaa wants to merge 3 commits intomasterfrom
IEP-1727

Conversation

@sigmaaa
Copy link
Collaborator

@sigmaaa sigmaaa commented Mar 18, 2026

Description

Update the project target platform to align with the March 2026 Eclipse Release (4.39).

Fixes # (IEP-1727)

Type of change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

How has this been tested?

Test the basic functionality of the IDE.

Test Configuration:

  • ESP-IDF Version:
  • OS (Windows,Linux and macOS):

Dependent components impacted by this PR:

  • Component 1
  • Component 2

Checklist

  • PR Self Reviewed
  • Applied Code formatting
  • Added Documentation
  • Added Unit Test
  • Verified on all platforms - Windows,Linux and macOS

Summary by CodeRabbit

  • Chores

    • Updated platform and tooling references to newer release streams for improved compatibility and stability.
    • Adjusted installable-unit metadata and repository links to align with current upstream releases and packaging.
  • Bug Fixes / UI Improvements

    • Fixed layout of the left navigator pane by constraining its width and refining fill behavior for more consistent sizing and better visual stability.

@coderabbitai
Copy link

coderabbitai bot commented Mar 18, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 64d74231-509c-4adc-a718-6fd7a39f98b1

📥 Commits

Reviewing files that changed from the base of the PR and between 87cc4b0 and 8ff7e41.

📒 Files selected for processing (1)
  • bundles/com.espressif.idf.sdk.config.ui/src/com/espressif/idf/sdk/config/ui/SDKConfigurationEditor.java

📝 Walkthrough

Walkthrough

Updated the target platform manifest to point multiple installable-unit locations at newer repository streams and bumped several component versions; also adjusted tree layout sizing in the SDK configuration editor UI.

Changes

Cohort / File(s) Summary
Target Platform Configuration
releng/com.espressif.idf.target/com.espressif.idf.target.target
Updated repository URLs/streams and installable-unit versions: Eclipse 4.38→4.39, Eclipse/Orbit 2025-12→2026-03, EGit 7.0→7.6, TM4E 0.17.1→0.17.2, CDT-LSP 3.4→3.5.0, LSP4E 0.29.5→0.30.0; adjusted several unit IDs/versions (commons-logging, junit-jupiter-*, snakeyaml, orbit-aggregation).
SDK UI - Layout tweak
bundles/com.espressif.idf.sdk.config.ui/src/com/espressif/idf/sdk/config/ui/SDKConfigurationEditor.java
Adjusted left Group treeComposite GridData to new GridData(SWT.FILL, SWT.FILL, false, true) and added widthHint = 250 to constrain tree column width (layout-only change).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • AndriiFilippov
  • alirana01
  • kolipakakondal

Poem

🐰 I hopped through XML, nibbled old streams away,
I nudged some versions forward, then bounded off to play.
A tidy tree now fits, a width set neat and small —
With carrot code I celebrate this manifest-ball! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: updating the target platform to Eclipse 2026-03 (version 4.39), which is clearly supported by the raw summary showing version updates across multiple components.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch IEP-1727

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can use Trivy to scan for security misconfigurations and secrets in Infrastructure as Code files.

Add a .trivyignore file to your project to customize which findings Trivy reports.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
releng/com.espressif.idf.target/com.espressif.idf.target.target (1)

1-97: Update MANIFEST.MF version constraints to match the new target platform.

The target platform includes updated versions of key dependencies, but the bundle manifests in com.espressif.idf.core have stale version constraints that should be updated:

Dependency Current Constraint Target Platform Version
LSP4E 0.18.18 0.30.0
LSP4J 0.24.0 0.30.0
CDT LSP 3.0.0 3.5.0

Updating these constraints documents the actual tested compatibility and prevents accidental downgrades in derived products.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@releng/com.espressif.idf.target/com.espressif.idf.target.target` around lines
1 - 97, Update the bundle MANIFEST.MF constraints in the com.espressif.idf.core
manifests so they match the target platform versions: change the LSP4E version
constraint from 0.18.18 to 0.30.0, LSP4J from 0.24.0 to 0.30.0, and CDT LSP
(c.t.d.lsp or the bundle id used for CDT LSP) from 3.0.0 to 3.5.0; locate and
edit the Require-Bundle/Import-Package or Bundle-ClassPath entries in
com.espressif.idf.core's MANIFEST.MF (and any other bundle manifests that
reference these IDs) to set the new version ranges so they reflect the tested
target-platform versions and prevent accidental downgrades.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@releng/com.espressif.idf.target/com.espressif.idf.target.target`:
- Line 89: Update the org.eclipse.lsp4e bundle constraint in the MANIFEST.MF
currently pinned to 0.18.18 to match the target LSP4E version 0.30.0; open the
MANIFEST.MF entry for the org.eclipse.lsp4e bundle
(bundles/com.espressif.idf.core/META-INF/MANIFEST.MF) and change the version
constraint to 0.30.0 so it aligns with the releng target update, ensuring
compatibility with the LspService.java usages of
LanguageServiceAccessor.getStartedWrappers(),
LanguageServerWrapper.serverDefinition.id, execute(), and restart() which rely
on LSP4E 0.30.0 APIs.

---

Nitpick comments:
In `@releng/com.espressif.idf.target/com.espressif.idf.target.target`:
- Around line 1-97: Update the bundle MANIFEST.MF constraints in the
com.espressif.idf.core manifests so they match the target platform versions:
change the LSP4E version constraint from 0.18.18 to 0.30.0, LSP4J from 0.24.0 to
0.30.0, and CDT LSP (c.t.d.lsp or the bundle id used for CDT LSP) from 3.0.0 to
3.5.0; locate and edit the Require-Bundle/Import-Package or Bundle-ClassPath
entries in com.espressif.idf.core's MANIFEST.MF (and any other bundle manifests
that reference these IDs) to set the new version ranges so they reflect the
tested target-platform versions and prevent accidental downgrades.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a6319865-4720-4699-9e0b-dbf15b4b15ae

📥 Commits

Reviewing files that changed from the base of the PR and between 0eb9e44 and 8880084.

📒 Files selected for processing (1)
  • releng/com.espressif.idf.target/com.espressif.idf.target.target

</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
<repository location="https://download.eclipse.org/lsp4e/releases/0.29.5/"/>
<repository location="https://download.eclipse.org/lsp4e/releases/0.30.0/"/>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for all LSP4E API usages that may be affected
echo "=== LSP4E internal API usage ==="
rg -n "LanguageServiceAccessor|LanguageServerWrapper" --type java -C 3

echo ""
echo "=== All LSP4E imports ==="
rg -n "import.*lsp4e" --type java

echo ""
echo "=== MANIFEST.MF LSP4E version constraints ==="
fd "MANIFEST.MF" --exec grep -l "lsp4" {} \; | xargs -I {} sh -c 'echo "=== {} ===" && grep -E "lsp4[ej]" {}'

Repository: espressif/idf-eclipse-plugin

Length of output: 3603


🌐 Web query:

What API changes were made in Eclipse LSP4E 0.30.0 release?

💡 Result:

The Eclipse LSP4E 0.30.0 release (February 11, 2026) includes the following API changes: - Adaptation to LSP4J version 1.0.0 (PR #1421), which itself has breaking changes such as removal of deprecated APIs, convenience constructors, properties in FormattingOptions, static methods in Either class, and websocket bundle deprecation. - Breaking change: Refactor to get rid of some deprecated APIs (PR #1496 by FlorianKroiss). Specific details on which APIs were removed or refactored are not explicitly listed in the release notes, but it is highlighted under "Breaking changes" in the official GitHub release page. No other explicit public API changes are mentioned in the release notes. The full changelog from 0.29.5 to 0.30.0 can be viewed on GitHub.

Citations:


🏁 Script executed:

# Check full LspService.java content to see `@SuppressWarnings` and method usages
cat -n bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/LspService.java

Repository: espressif/idf-eclipse-plugin

Length of output: 4280


🏁 Script executed:

# Check for any execute() or restart() method calls
rg -n "\.execute\(\)|\.restart\(\)" bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/LspService.java -C 2

Repository: espressif/idf-eclipse-plugin

Length of output: 54


🌐 Web query:

Eclipse LSP4E LanguageServiceAccessor API compatibility 0.30.0

💡 Result:

The Eclipse LSP4E LanguageServiceAccessor API is compatible with version 0.30.0. No breaking changes affecting this API are documented in the 0.30.0 release notes. The release includes adaptation to LSP4J 1.0.0 (which has breaking changes like removed deprecated APIs) and removal of some deprecated APIs in LSP4E via PR #1496, but LanguageServiceAccessor is not mentioned as affected. Access to language servers remains available through classes like LanguageServersRegistry and LanguageServers, as shown in source code snippets. Official documentation and changelogs confirm no explicit incompatibility for this API.

Citations:


🌐 Web query:

Eclipse LSP4E LanguageServerWrapper serverDefinition property 0.30.0 breaking changes

💡 Result:

In Eclipse LSP4E version 0.30.0 (released February 11, 2026), the primary breaking change listed in the official release notes is "refactor: Get rid of some deprecated APIs by @FlorianKroiss in #1496". This PR removes usages of deprecated APIs, likely from the newly adopted LSP4J 1.0.0 (feat: Adapt LSP4E to LSP4J vers. 1.0.0 by @travkin79 in #1421), which itself removed several deprecated constructors, static methods, and other APIs. No sources explicitly detail changes to the LanguageServerWrapper.serverDefinition property itself. The property remains public final in LanguageServerWrapper as per available code snippets. Any breaking changes would stem indirectly from LSP4J adaptations or deprecated Eclipse Platform APIs removed in the refactor, potentially affecting custom LanguageServerDefinition implementations if they relied on now-removed deprecated methods. Other changes in 0.30.0 are mostly fixes and features (e.g., SVG icons, JUnit updates, markdown parser singleton), with no other breaking changes noted.

Citations:


🏁 Script executed:

# Check for LSP4J imports and usage in LspService and related files
rg -n "import.*lsp4j|LSP4J" bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/ -A 2

# Check MANIFEST.MF for LSP4J version
cat bundles/com.espressif.idf.core/META-INF/MANIFEST.MF | grep -E "lsp4[ej]|Bundle-"

Repository: espressif/idf-eclipse-plugin

Length of output: 487


🌐 Web query:

Eclipse LSP4J 1.0.0 breaking changes deprecated APIs removal

💡 Result:

Eclipse LSP4J 1.0.0, released February 2026, includes several breaking API changes focused on removing long-deprecated elements and updating to new LSP/DAP specifications. Key breaking changes: - Removed deprecated org.eclipse.lsp4j.websocket bundle. Migrate to org.eclipse.lsp4j.websocket.jakarta or stay on LSP4J 0.x. - Removed deprecated ConcurrentMessageProcessor.startProcessing; use beginProcessing instead (#922). - Removed @Deprecated annotations from members deprecated in LSP/DAP protocols (#895). - Removed various deprecated APIs via issues #874, #875, #876, #877, #880: - #874: General deprecated API removal. - #875: Deprecated convenience constructors in protocol files. - #876: Deprecated LanguageServerAPI annotation (use JsonRpcData). - #877: Deprecated static methods in Either class (use TypeUtils). - #880: Deprecated get/set properties in FormattingOptions. - Type change: TextDocumentEdit.edits from List to List<Either<TextEdit, SnippetTextEdit>>. - Implemented LSP 3.18.0 (beta) and DAP 1.70.0, potentially introducing new structures. Full details in official CHANGELOG.md and japicmp report at https://download.eclipse.org/lsp4j/updates/releases/1.0.0/japicmp-report/. Projects like Spring Tools note API changes requiring updates when migrating to 1.0.0.

Citations:


Update MANIFEST.MF bundle version constraint to match LSP4E target version.

The org.eclipse.lsp4e bundle version in bundles/com.espressif.idf.core/META-INF/MANIFEST.MF is pinned to 0.18.18, which is severely outdated and inconsistent with the LSP4E 0.30.0 target being updated. The constraint should be updated to 0.30.0 to reflect the actual compatibility requirement.

The code in LspService.java uses internal LSP4E APIs (LanguageServiceAccessor.getStartedWrappers(), LanguageServerWrapper.serverDefinition.id, execute(), restart()) marked with @SuppressWarnings("restriction"). These specific APIs are compatible with LSP4E 0.30.0, but keeping the bundle constraint aligned with the target version ensures consistency and clarity about supported versions.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@releng/com.espressif.idf.target/com.espressif.idf.target.target` at line 89,
Update the org.eclipse.lsp4e bundle constraint in the MANIFEST.MF currently
pinned to 0.18.18 to match the target LSP4E version 0.30.0; open the MANIFEST.MF
entry for the org.eclipse.lsp4e bundle
(bundles/com.espressif.idf.core/META-INF/MANIFEST.MF) and change the version
constraint to 0.30.0 so it aligns with the releng target update, ensuring
compatibility with the LspService.java usages of
LanguageServiceAccessor.getStartedWrappers(),
LanguageServerWrapper.serverDefinition.id, execute(), and restart() which rely
on LSP4E 0.30.0 APIs.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
releng/com.espressif.idf.target/com.espressif.idf.target.target (1)

76-78: CDT LSP 3.5.0 update - note snakeyaml dual provisioning.

The CDT LSP update to 3.5.0 looks appropriate. Note that org.yaml.snakeyaml is now provisioned from this repository with version 0.0.0, while bundles/com.espressif.idf.core embeds lib/snakeyaml-1.30.jar in its Bundle-ClassPath and re-exports the packages.

This should work correctly since the bundle's embedded JAR takes classloader precedence, but be aware of potential version drift if the platform-provided snakeyaml diverges significantly from 1.30.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@releng/com.espressif.idf.target/com.espressif.idf.target.target` around lines
76 - 78, The commit adds a platform provision for org.yaml.snakeyaml (unit id
"org.yaml.snakeyaml") alongside the embedded snakeyaml-1.30.jar inside
bundles/com.espressif.idf.core's Bundle-ClassPath which can cause dual
provisioning and version drift; to fix, either remove or version-pin the
platform-provided unit entry in the added repository block (the <repository> and
<unit id="org.yaml.snakeyaml"> lines) or explicitly align/declare the same
version as 1.30, or update bundles/com.espressif.idf.core manifest to avoid
exporting/re-exporting the embedded snakeyaml packages so the bundle’s embedded
JAR remains authoritative, and add a short comment documenting the intended
precedence to prevent future regressions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@releng/com.espressif.idf.target/com.espressif.idf.target.target`:
- Line 26: Remove the unused Import-Package declaration for
org.apache.commons.logging from the MANIFEST.MF in the com.espressif.idf.core
bundle: locate the Import-Package entry referencing org.apache.commons.logging
(added alongside the bundle id org.apache.commons.commons-logging) and delete
that package from the Import-Package list so the MANIFEST.MF no longer imports
org.apache.commons.logging.

---

Nitpick comments:
In `@releng/com.espressif.idf.target/com.espressif.idf.target.target`:
- Around line 76-78: The commit adds a platform provision for org.yaml.snakeyaml
(unit id "org.yaml.snakeyaml") alongside the embedded snakeyaml-1.30.jar inside
bundles/com.espressif.idf.core's Bundle-ClassPath which can cause dual
provisioning and version drift; to fix, either remove or version-pin the
platform-provided unit entry in the added repository block (the <repository> and
<unit id="org.yaml.snakeyaml"> lines) or explicitly align/declare the same
version as 1.30, or update bundles/com.espressif.idf.core manifest to avoid
exporting/re-exporting the embedded snakeyaml packages so the bundle’s embedded
JAR remains authoritative, and add a short comment documenting the intended
precedence to prevent future regressions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: edcd02d8-5fc4-4e19-8c8a-d5b8fdae82d1

📥 Commits

Reviewing files that changed from the base of the PR and between 8880084 and 87cc4b0.

📒 Files selected for processing (1)
  • releng/com.espressif.idf.target/com.espressif.idf.target.target

<unit id="org.eclipse.cdt.cmake.feature.group" version="0.0.0"/>
<unit id="org.eclipse.terminal.feature.feature.group" version="0.0.0"/>
<unit id="org.apache.commons.logging" version="0.0.0"/>
<unit id="org.apache.commons.commons-logging" version="0.0.0"/>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check for Require-Bundle references to org.apache.commons.logging
echo "=== Checking for Require-Bundle references to commons.logging ==="
rg -n "Require-Bundle.*commons.logging" --type-add 'mf:*.MF' --type mf

echo ""
echo "=== Checking all MANIFEST.MF files for commons logging references ==="
fd "MANIFEST.MF" --exec grep -l "commons.*logging" {} \; | xargs -I {} sh -c 'echo "=== {} ===" && cat {}'

Repository: espressif/idf-eclipse-plugin

Length of output: 2544


🏁 Script executed:

#!/bin/bash
# Look for the old target definition to understand the change
echo "=== Checking target file history or nearby entries ==="
fd -e target | head -20 | xargs -I {} sh -c 'echo "=== {} ===" && head -50 {}'

echo ""
echo "=== Search for imports or usage of org.apache.commons.logging in source code ==="
rg "org\.apache\.commons\.logging" --type-add 'java:*.java' --type java -l 2>/dev/null | head -10

echo ""
echo "=== Check if commons-logging appears elsewhere in manifest or config ==="
rg "commons-logging" --type-add 'mf:*.MF' --type mf -A 2 -B 2

Repository: espressif/idf-eclipse-plugin

Length of output: 3783


🏁 Script executed:

#!/bin/bash
# Check if commons.logging is re-exported anywhere
echo "=== Checking all MANIFEST.MF for exports with commons.logging ==="
fd "MANIFEST.MF" -x grep -n "org.apache.commons.logging" {} \;

echo ""
echo "=== Check git history for the line that changed ==="
git log -p --follow -S "org.apache.commons.commons-logging" -- "releng/com.espressif.idf.target/com.espressif.idf.target.target" 2>/dev/null | head -100

echo ""
echo "=== Check if there's a reference to the old name in git ==="
git log -p --follow -S "org.apache.commons.logging" -- "releng/com.espressif.idf.target/com.espressif.idf.target.target" 2>/dev/null | head -100

Repository: espressif/idf-eclipse-plugin

Length of output: 298


🏁 Script executed:

#!/bin/bash
# Check if MANIFEST.MF is auto-generated or if there's a build config
echo "=== Look for build.properties or manifest generation configs ==="
fd "build.properties|pom.xml|build.gradle|MANIFEST.MF.in" -x grep -l "MANIFEST\|commons" {} \; 2>/dev/null

echo ""
echo "=== Check full MANIFEST context around the import ==="
fd "MANIFEST.MF" -x sed -n '60,70p' {} \;

echo ""
echo "=== Search for any patches, fixes or TODOs related to commons-logging ==="
rg -i "commons.logging|commons-logging" --type-add 'java:*.java' --type-add 'txt:*.txt' --type-add 'md:*.md' 2>/dev/null | head -20

Repository: espressif/idf-eclipse-plugin

Length of output: 1256


The Import-Package declaration for commons-logging appears unused and can be removed.

The target file's bundle name change from org.apache.commons.logging to org.apache.commons.commons-logging does not pose a resolution risk in this codebase. The MANIFEST.MF declares Import-Package: org.apache.commons.logging, but this package is:

  • Not imported by any Java source code
  • Not re-exported by the bundle
  • Not required by any other bundle via Require-Bundle

The unused import should be removed from bundles/com.espressif.idf.core/META-INF/MANIFEST.MF.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@releng/com.espressif.idf.target/com.espressif.idf.target.target` at line 26,
Remove the unused Import-Package declaration for org.apache.commons.logging from
the MANIFEST.MF in the com.espressif.idf.core bundle: locate the Import-Package
entry referencing org.apache.commons.logging (added alongside the bundle id
org.apache.commons.commons-logging) and delete that package from the
Import-Package list so the MANIFEST.MF no longer imports
org.apache.commons.logging.

Copy link
Collaborator

@kolipakakondal kolipakakondal left a comment

Choose a reason for hiding this comment

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

LGTM

@sigmaaa Can we consider this for v4.2.0 as well?

@sigmaaa
Copy link
Collaborator Author

sigmaaa commented Mar 20, 2026

LGTM

@sigmaaa Can we consider this for v4.2.0 as well?

Hi @kolipakakondal, I think so— I don’t see any issues with it on Mac or Windows. Andrew reported a strange issue related to sdkconfig that occurs in this PR, and I’m currently looking into it. I hope it will be resolved before the 4.2 release.

@sigmaaa sigmaaa added this to the v4.2.0 milestone Mar 21, 2026
@sigmaaa
Copy link
Collaborator Author

sigmaaa commented Mar 21, 2026

LGTM
@sigmaaa Can we consider this for v4.2.0 as well?

Hi @kolipakakondal, I think so— I don’t see any issues with it on Mac or Windows. Andrew reported a strange issue related to sdkconfig that occurs in this PR, and I’m currently looking into it. I hope it will be resolved before the 4.2 release.

Fixed in the latest commit. It appears that a recent platform SWT update caused a visual bug in sdkconfig on Linux only. Here is an example:
image

To fix this, I added layout data with a width hint.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants