Skip to content

fix(ktor): [Ktor 3.6 2] Preserve Ktor 3.0 runtime compatibility - #6517

Merged
adinauer merged 2 commits into
dependabot/gradle/ktorClient-3.6.1from
fix/ktor-inline-attribute-key
Nov 11, 2026
Merged

adinauer merged 2 commits into
dependabot/gradle/ktorClient-3.6.1from
fix/ktor-inline-attribute-key

Conversation

@adinauer

@adinauer adinauer commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

PR Stack (Ktor 3.6)


📜 Description

Construct the Ktor client plugin's attribute keys with explicit TypeInfo values instead of using Ktor's inline AttributeKey factory.

💡 Motivation and Context

When compiled against Ktor 3.6.1, the inline factory embeds a call to a new three-argument TypeInfo constructor. Running those compiled SDK classes with older Ktor 3.x versions then fails with NoSuchMethodError.

The explicit construction uses the stable two-argument TypeInfo constructor and preserves runtime compatibility with Ktor 3.0.0 through 3.6.1.

💚 How did you test it?

  • Ran ./gradlew spotlessApply updateKotlinAbi
  • Ran all 32 SentryKtorClientPluginTest tests after compiling once against Ktor 3.6.1 and replacing only the Ktor runtime dependencies with 3.0.0, 3.1.3, 3.2.3, 3.3.3, 3.4.3, 3.5.1, and 3.6.1; all passed
  • Ran ./gradlew :sentry-ktor-client:checkKotlinAbi
  • Verified with javap that the compiled plugin calls TypeInfo(KClass, KType) and does not reference TypeInfo(KClass, boolean, KType)

📝 Checklist

  • I added GH Issue ID & Linear ID
  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.
  • Public API changes reviewed by another Mobile SDK team member or implemented according to the develop docs spec.

🔮 Next steps

None.

#skip-changelog

⚠️ Merge this PR using a merge commit (not squash). Only the collection branch is squash-merged into main.

Avoid inlining Ktor 3.6's AttributeKey factory. The inlined code
references a TypeInfo constructor unavailable in older Ktor 3.x
runtimes.

Construct TypeInfo explicitly through its stable two-argument
constructor instead.
@adinauer
adinauer marked this pull request as ready for review November 9, 2026 13:18
@adinauer
adinauer requested a review from a team as a code owner November 9, 2026 13:18
@adinauer
adinauer requested review from markushi and runningcode and removed request for a team November 9, 2026 13:18
@sentry

sentry Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
SDK Size io.sentry.tests.size 8.63.0 (1) release

⚙️ sentry-android Build Distribution Settings

* test(ktor): Add Ktor 3.0 compatibility suite

Compile the production integration against the catalog Ktor version
while compiling and running the existing tests against Ktor 3.0.0.

Add the compatibility suite to check so inline API binary
incompatibilities fail CI.

* test(ktor): Simplify Ktor 3.0 suite configuration

Use Ktor's enforced platform to pin all compatibility test artifacts to
3.0.0 instead of maintaining a custom resolution strategy. Reuse the
standard test source directories so the suite follows source changes.

Co-Authored-By: Claude <noreply@anthropic.com>

* Update sentry-ktor-client/build.gradle.kts

Co-authored-by: Nelson Osacky <nelson.osacky@sentry.io>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nelson Osacky <nelson.osacky@sentry.io>
@adinauer
adinauer merged commit 4583d57 into dependabot/gradle/ktorClient-3.6.1 Nov 11, 2026
21 checks passed
@adinauer
adinauer deleted the fix/ktor-inline-attribute-key branch November 11, 2026 11:05

@cursor cursor Bot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d28f60a. Configure here.


kotlin.target.compilations.named("testKtor300") {
associateWith(kotlin.target.compilations.getByName("main"))
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Test suite misses production classes

High Severity

The testKtor300 suite never depends on project(), so main output can be missing from the Test runtime classpath. Extra JVM test suites do not inherit production classes the way built-in test does, and associateWith only friends the Kotlin compilation. Without the plugin jar on that classpath, the suite cannot load SentryKtorClientPlugin and does not verify Ktor 3.0.0 runtime compatibility.

Fix in Cursor Fix in Web

Triggered by project rule: PR Review Guidelines for Cursor Bugbot

Reviewed by Cursor Bugbot for commit d28f60a. Configure here.

adinauer added a commit that referenced this pull request Nov 11, 2026
* chore(deps): bump ktorClient from 3.0.0 to 3.6.1

Bumps `ktorClient` from 3.0.0 to 3.6.1.

Updates `io.ktor:ktor-client-core` from 3.0.0 to 3.6.1
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/3.6.1/CHANGELOG.md)
- [Commits](ktorio/ktor@3.0.0...3.6.1)

Updates `io.ktor:ktor-client-java` from 3.0.0 to 3.6.1
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/3.6.1/CHANGELOG.md)
- [Commits](ktorio/ktor@3.0.0...3.6.1)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-core
  dependency-version: 3.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.ktor:ktor-client-java
  dependency-version: 3.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(ktor): [Ktor 3.6 2] Preserve Ktor 3.0 runtime compatibility (#6517)

* fix(ktor): Preserve Ktor 3.0 runtime compatibility

Avoid inlining Ktor 3.6's AttributeKey factory. The inlined code
references a TypeInfo constructor unavailable in older Ktor 3.x
runtimes.

Construct TypeInfo explicitly through its stable two-argument
constructor instead.

* test(ktor): [Ktor 3.6 3] Add Ktor 3.0 compatibility suite (#6520)

* test(ktor): Add Ktor 3.0 compatibility suite

Compile the production integration against the catalog Ktor version
while compiling and running the existing tests against Ktor 3.0.0.

Add the compatibility suite to check so inline API binary
incompatibilities fail CI.

* test(ktor): Simplify Ktor 3.0 suite configuration

Use Ktor's enforced platform to pin all compatibility test artifacts to
3.0.0 instead of maintaining a custom resolution strategy. Reuse the
standard test source directories so the suite follows source changes.

Co-Authored-By: Claude <noreply@anthropic.com>

* Update sentry-ktor-client/build.gradle.kts

Co-authored-by: Nelson Osacky <nelson.osacky@sentry.io>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nelson Osacky <nelson.osacky@sentry.io>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nelson Osacky <nelson.osacky@sentry.io>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexander Dinauer <adinauer@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nelson Osacky <nelson.osacky@sentry.io>
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