You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fory.apache.org by ch...@apache.org on 2026/08/30 16:26:47 UTC

(fory) branch main updated: fix(kotlin): accept supported metadata versions (#4001)

This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory.git


The following commit(s) were added to refs/heads/main by this push:
     new a45aba8f5 fix(kotlin): accept supported metadata versions (#4001)
a45aba8f5 is described below

commit a45aba8f598f4155eba50736ad1669d6b27e26b2
Author: Shawn Yang <sh...@gmail.com>
AuthorDate: Mon Aug 31 00:26:43 2026 +0800

    fix(kotlin): accept supported metadata versions (#4001)
    
    ## Why?
    
    
    
    ## What does this PR do?
    
    
    
    ## Related issues
    
    Closes #3998
    
    ## AI Contribution Checklist
    
    
    
    - [ ] Substantial AI assistance was used in this PR: `yes` / `no`
    - [ ] If `yes`, I included a completed [AI Contribution
    Checklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)
    in this PR description and the required `AI Usage Disclosure`.
    - [ ] If `yes`, my PR description includes the required `ai_review`
    summary and screenshot evidence or equivalent persisted links of the
    final clean AI review results from both fresh reviewers described in
    `AI_POLICY.md`, the Fory-guided reviewer and the independent general
    reviewer, on the current PR diff or current HEAD after the latest code
    changes.
    
    
    
    ## Does this PR introduce any user-facing change?
    
    
    
    - [ ] Does this PR introduce any public API change?
    - [ ] Does this PR introduce any binary protocol compatibility change?
    
    ## Benchmark
---
 AGENTS.md                                                         | 4 ++++
 docs/json/kotlin.md                                               | 4 ++--
 docs/json/troubleshooting.md                                      | 2 +-
 .../kotlin/org/apache/fory/json/kotlin/KotlinMetadataModels.kt    | 8 ++------
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/AGENTS.md b/AGENTS.md
index 6cd4756c9..b6d9202a1 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -161,6 +161,10 @@ This is the entry point for AI guidance in Apache Fory. Read this file first, th
   `Object` quoted values remain strings. Quoted scalar common paths must parse directly from reader
   storage with no intermediate object allocation, reuse the unquoted token parser, and keep larger
   quoted handling in a separate cold method so native token parsing does not regress.
+- Fory JSON Kotlin metadata-version compatibility belongs to
+  `KotlinClassMetadata.readStrict`. Do not add compiler or metadata minor-version allowlists after a
+  successful strict parse. Validate unsupported declaration shapes and mismatched JVM members at
+  the concrete consumer instead.
 - Decoder depth and the generic-type stack paired with that depth use root-operation failure cleanup. Nested decoders decrement depth and pop generic types only after successful child reads; do not add nested `try/finally` to restore them after exceptions. The root operation's `finally`/reset must clear both decoder depth and the generic-type stack.
 - Keep public APIs minimal. Public APIs must match user ownership and mental model, not internal implementation details; generated flows stay type-owned, while custom serializer registration stays explicit.
 - A Fory instance may register types or serializers only before its first root
diff --git a/docs/json/kotlin.md b/docs/json/kotlin.md
index feb7a320f..0a6825f3c 100644
--- a/docs/json/kotlin.md
+++ b/docs/json/kotlin.md
@@ -25,8 +25,8 @@ Fory JSON; it does not change Fory's binary protocols.
 
 ## Installation
 
-The runtime supports Kotlin/JVM metadata ABI 2.3 and is built with Kotlin 2.3.20. Use the same Fory
-version for every module:
+The runtime accepts model metadata supported by Kotlin's strict metadata reader and is built with
+Kotlin 2.3.20. Use the same Fory version for every module:
 
 ```kotlin title="build.gradle.kts"
 plugins {
diff --git a/docs/json/troubleshooting.md b/docs/json/troubleshooting.md
index 94839267c..5d301fddf 100644
--- a/docs/json/troubleshooting.md
+++ b/docs/json/troubleshooting.md
@@ -37,7 +37,7 @@ license: |
 | OutputStream write fails                   | The underlying `IOException` is wrapped as the cause of `ForyJsonException`                                                                         |
 | Kotlin null or missing member fails        | Check the exact `jsonTypeRef`, constructor default, and nullable occurrence; null does not request a compiler default                               |
 | Raw/star/projected Kotlin generic fails    | Supply a complete `jsonTypeRef<T>()`; `in` and star projections cannot reconstruct one exact schema                                                 |
-| Unsupported Kotlin metadata                | Compile the model with a supported Kotlin 2.3 compiler and ensure its validated JVM members match the metadata                                      |
+| Unsupported Kotlin metadata                | Ensure the resolved `kotlin-metadata-jvm` supports the model compiler's metadata and that validated JVM members match it                            |
 | Kotlin model fails after Android shrinking | Apply KSP; for an exact Mixin, use it when either its source or target is Kotlin, and verify that the generated rules are packaged                  |
 | Kotlin model is absent in Native Image     | Install `ForyJsonKotlin` from a reachable `ForyJsonProvider`, enable code generation, and make the exact binding reachable from that configuration  |
 
diff --git a/kotlin/fory-json-kotlin/src/main/kotlin/org/apache/fory/json/kotlin/KotlinMetadataModels.kt b/kotlin/fory-json-kotlin/src/main/kotlin/org/apache/fory/json/kotlin/KotlinMetadataModels.kt
index b5a408ed7..be68e4738 100644
--- a/kotlin/fory-json-kotlin/src/main/kotlin/org/apache/fory/json/kotlin/KotlinMetadataModels.kt
+++ b/kotlin/fory-json-kotlin/src/main/kotlin/org/apache/fory/json/kotlin/KotlinMetadataModels.kt
@@ -634,6 +634,8 @@ internal object KotlinMetadataTypes {
         ?: throw ForyJsonException("Unsupported Kotlin metadata on ${type.name}: missing @Metadata")
     val metadata =
       try {
+        // readStrict owns metadata-version compatibility. Callers validate the concrete Kotlin
+        // declaration and its matching JVM members instead of gating compiler minor versions.
         KotlinClassMetadata.readStrict(annotation)
       } catch (cause: IllegalArgumentException) {
         throw ForyJsonException("Unsupported Kotlin metadata on ${type.name}", cause)
@@ -643,12 +645,6 @@ internal object KotlinMetadataTypes {
         "Unsupported Kotlin metadata on ${type.name}: not a class declaration",
       )
     }
-    val version = metadata.version
-    if (version.major != 2 || version.minor != 3) {
-      throw ForyJsonException(
-        "Unsupported Kotlin metadata on ${type.name}: ABI $version; expected 2.3",
-      )
-    }
     return metadata
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@fory.apache.org
For additional commands, e-mail: commits-help@fory.apache.org