Skip discriminator entries when decoding inline-map sealed children#3173
Open
tadfisher wants to merge 1 commit intoKotlin:devfrom
Open
Skip discriminator entries when decoding inline-map sealed children#3173tadfisher wants to merge 1 commit intoKotlin:devfrom
tadfisher wants to merge 1 commit intoKotlin:devfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #3172
Streaming JSON decoding is missing an edge-case where:
I believe the only case this can happen is when you have a value class, wrapping
Map<K, V>, in a sealed hierarchy. If we're in this case, skip the discriminator entry and proceed to decode the object as a Map.Tree decoding doesn't handle the discriminator either; skip it by filtering it out of
keys.There's an ancillary issue the test revealed: encoding the value class with JsonTreeEncoder is missing the discriminator entirely, probably because we don't set a tag for
Mapvalues. Added similar handling for the case where we have a discriminator but no tag, and returnthisdecoder so that we encode the wrapped value without dealing with tags.