Skip to content

fix: IntelliJ 2026.3 compatibility - #964

Open
dividedmind wants to merge 4 commits into
mainfrom
fix/intellij-2026.3-compatibility
Open

dividedmind wants to merge 4 commits into
mainfrom
fix/intellij-2026.3-compatibility

Conversation

@dividedmind

Copy link
Copy Markdown
Contributor

Summary

2026.3 moved the Problems tool window out of the core platform into a bundled plugin of its own, com.intellij.problemsView, whose classes are visible only to plugins which depend on it. Our scanner findings panel extends it, so it fails to load there — including in the released artifact, which is compiled against platform 251 and therefore sees no API change at all. This adds the dependency, plus everything needed to build and test against 2026.3 so the next move of this kind is caught locally.

Changes

  • fix: an optional <depends>com.intellij.problemsView</depends> with an empty config file, mirroring the existing JCEF pattern. Optional keeps one artifact working everywhere: older platforms have no plugin with this ID and ignore it, and the Problems View classes are part of their core platform anyway. This is the only commit that changes what ships.
  • test: HttpConfigurable.setProxyLogin/setPlainProxyPassword and StdModuleTypes were removed in 2026.3; the tests now use ProxyCredentialStore and JavaModuleType.getModuleType(), both of which exist unchanged back to 251, so neither replacement is conditional.
  • build: platformVersion >= 263 dependencies for the modules 2026.3 split out of the core plugin (Problems View, built-in server, external system, VCS core, Jackson), the Java plugin on the test classpath because idea_rt.jar ships with it now, intellij.libraries.misc.plugin dropped from javaTestCompanionPlugins, and gradle-263.properties pinning the EAP build.
  • build: a runIdeOn task which launches another IDE build with the plugin compiled against the default platform — the combination users install, and the only local check that exercises it.

Verification

  • Compiles on 251, 262 and 263 (main and test sources, all modules).
  • The five proxySettings* tests pass on both 251 and 263, so the credential-store rewrite is behaviourally equivalent.
  • Manually confirmed in a running 2026.3 EAP, via both -PplatformVersion=263 runIde and runIdeOn: the AppMap findings tab is present in the Problems tool window.

Worth noting that the automated checks could not have caught this one. The test JVM runs with -Didea.force.use.core.classloader=true, so class loader isolation never applies there, and the Plugin Verifier analyses the 251-built artifact statically without modelling how the platform wires a plugin's class loader. Hence runIdeOn.

Out of scope

  • CI and the Plugin Verifier still stop at 262. 2026.3 is an EAP, so its build number goes stale by hand and old builds eventually disappear from the download servers; 263 should replace 262 as the "latest released" target once it ships.
  • The IGP 2.17.0 → 2.19.0 bump is blocked: 2.19.0 requests attributes per project dependency, which collides with testImplementation(project(":plugin-core", "testOutput")). Unblocking it means reworking how test classes are shared between modules.

2026.3 moved the Problems tool window out of the core platform into a
bundled plugin of its own, com.intellij.problemsView, and its classes
are visible only to plugins which depend on it. Without the dependency
our scanner findings panel fails to load there -- in a build compiled
against platform 251, which sees no API change at all.

The dependency is optional so that a single artifact keeps working on
older platforms: they have no plugin with this ID and ignore it, and
the Problems View classes are part of their core platform anyway. The
config file it names is empty, the dependency itself is what matters.

Assisted-by: Claude:claude-opus-5
HttpConfigurable.setProxyLogin and setPlainProxyPassword are gone. They
wrote to the proxy credential store, which the tests now use directly;
the getters our production code reads are unaffected. StdModuleTypes is
gone as well, JavaModuleType.getModuleType() replaces it.

Both replacements exist unchanged back to platform 251, so neither is
conditional on the platform version. The proxy tests pass on 251 and on
263.

Assisted-by: Claude:claude-opus-5
2026.3 splits a number of modules out of the core plugin, each with its
own class loader, so they are no longer on the default compile and test
classpath: the Problems View became a bundled plugin, and the built-in
server, external system, VCS core and Jackson library modules have to
be requested explicitly.

Two further moves show up only when running tests. idea_rt.jar, which
the platform test framework needs to start, ships with the Java plugin
rather than the core platform, so the Java plugin joins the test
classpath; and intellij.libraries.misc.plugin was dissolved again, so
it leaves javaTestCompanionPlugins.

All of it is conditional on the platform version. The shipped artifact
is built on 251, where none of these IDs resolve, and the runtime side
of the Problems View move is handled by the plugin descriptor instead.
2026.3 is still an EAP, so gradle-263.properties pins a build number
which has to be bumped by hand; neither CI nor the Plugin Verifier
targets it yet.

Assisted-by: Claude:claude-opus-5
What moves between platform versions shows in how the platform wires a
plugin's class loader, and that is what our existing checks miss: the
tests force the core class loader, and the Plugin Verifier does not
model it. runIde does not answer the question either, because it
rebuilds the plugin against the platform under test.

runIdeOn launches another IDE build with the plugin as compiled against
the default platform, which is the combination users actually install.

Assisted-by: Claude:claude-opus-5
@dividedmind
dividedmind requested review from kgilpin and a balanced review from Copilot October 19, 2026 18:10
@dividedmind dividedmind self-assigned this Oct 19, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

The custom testWithoutAgent target lacks the Java plugin dependency needed to start platform tests on 263.

No open issues 🎉

What changed in this PR

Restores IntelliJ 2026.3 compatibility while preserving support for older platforms.

Changes:

  • Adds an optional Problems View dependency for runtime class loading.
  • Updates tests to use compatible platform APIs.
  • Adds 263 build dependencies, an EAP target, and cross-version launch support.
File Description
plugin-java/​src/​test/​java/​appland/​execution/​AppMapJavaAgentRunnerTest.java Replaces the removed module-type API.
plugin-core/​src/​test/​java/​appland/​cli/​DefaultCommandLineServiceTest.java Uses the proxy credential store.
plugin-core/​src/​main/​resources/​META-INF/​appmap-problems-view.xml Supplies the optional dependency descriptor.
plugin-core/​src/​main/​resources/​META-INF/​appmap-core.xml Declares the Problems View dependency.
gradle-263.properties Pins the 2026.3 EAP build.
build.gradle.kts Adds compatibility dependencies and runIdeOn.

Review effort: Balanced

This branch has not been deployed

No deployments
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