SLCORE-2243 Add connected mode and on-demand artifact resolvers#1925
Conversation
SummaryThis PR introduces a resolver-based architecture for plugin artifact management in connected mode and on-demand scenarios. The key changes are:
What reviewers should knowStart here:
Key logic to understand:
Watch for:
|
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
.../src/main/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolver.java
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
This PR introduces new artifact resolver implementations intended to support downloading analyzers in both connected mode (from server) and on-demand mode (from a remote URL/cache), along with corresponding unit tests.
Changes:
- Add
ConnectedModeArtifactResolverto resolve/sync plugins from SonarQube/SonarCloud storage/server plugin lists, including companion plugin handling. - Add
OnDemandArtifactResolverto download/version-cache specific artifacts on demand with signature verification and event publishing. - Add unit tests covering download scheduling, status reporting, and success/error paths for both resolvers.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 9 comments.
| File | Description |
|---|---|
backend/core/src/main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java |
New connected-mode resolver that reads server plugin lists / storage, schedules downloads, and publishes status update events. |
backend/core/src/main/java/org/sonarsource/sonarlint/core/plugin/ondemand/OnDemandArtifactResolver.java |
New on-demand resolver that downloads artifacts into a versioned cache, verifies signatures, and publishes status update events. |
backend/core/src/test/java/org/sonarsource/sonarlint/core/plugin/ConnectedModeArtifactResolverTest.java |
New unit tests validating connected-mode resolver behavior across storage/server/error scenarios. |
backend/core/src/test/java/org/sonarsource/sonarlint/core/plugin/ondemand/OnDemandArtifactResolverTest.java |
New unit tests validating on-demand resolver behavior for async downloads, caching, and event publishing. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
...e/src/main/java/org/sonarsource/sonarlint/core/plugin/ondemand/OnDemandArtifactResolver.java
Outdated
Show resolved
Hide resolved
.../src/main/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolver.java
Show resolved
Hide resolved
.../test/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolverTest.java
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
.../src/main/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolver.java
Show resolved
Hide resolved
.../test/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolverTest.java
Show resolved
Hide resolved
...e/src/test/java/org/sonarsource/sonarlint/core/plugin/ConnectedModeArtifactResolverTest.java
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
c81873d to
cf5fc28
Compare
There was a problem hiding this comment.
Conclusion: Solid work overall — the async download pattern, cache management, and version-gate logic are well structured. Two bugs need fixing before merge: a race condition in the synchronous extra-artifact path and a missing error handler in companion-plugin downloads.
...e/src/main/java/org/sonarsource/sonarlint/core/plugin/ondemand/OnDemandArtifactResolver.java
Outdated
Show resolved
Hide resolved
...e/src/main/java/org/sonarsource/sonarlint/core/plugin/ondemand/OnDemandArtifactResolver.java
Outdated
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
cf5fc28 to
22b01b7
Compare
.../test/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolverTest.java
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
164f088 to
2d8567a
Compare
22b01b7 to
2ca7ac5
Compare
...e/src/main/java/org/sonarsource/sonarlint/core/plugin/ondemand/OnDemandArtifactResolver.java
Outdated
Show resolved
Hide resolved
...main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ConnectedModeArtifactResolver.java
Outdated
Show resolved
Hide resolved
.../src/main/java/org/sonarsource/sonarlint/core/plugin/resolvers/OnDemandArtifactResolver.java
Show resolved
Hide resolved
474a0c7 to
f2d5ed6
Compare
2ca7ac5 to
56c111f
Compare
There was a problem hiding this comment.
Conclusion: Most of the previous round's issues have been addressed cleanly — the companion-hash check, the stuck-in-DOWNLOADING bug, scheduleIfNotInProgress extraction, and the blocking test helper are all fixed. Three issues remain open: the IAC fallback event notification bug (real data loss in production), the useless null guard on version(), and the isSonarCloud ternary duplication.
9a15124 to
6080d4f
Compare
6080d4f to
d450532
Compare
1baf305 to
a350610
Compare
...re/src/main/java/org/sonarsource/sonarlint/core/plugin/resolvers/ServerPluginDownloader.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Conclusion: The two previously flagged issues remain unaddressed. The IAC fallback bug (#2972231832) is a functional defect that will leave ANSIBLE and GITHUBACTIONS languages stuck in DOWNLOADING state permanently on any server that does not have iacenterprise but has iac.
|



No description provided.