-
Notifications
You must be signed in to change notification settings - Fork 665
Closed
Labels
Description
Describe the bug
Here is the reproducer: https://github.com/altavir/serialization-bug-demo/blob/44bad76052505897764f365fc65aa6371e0d2643/src/main/kotlin/Demo2.kt#L10
A class with recursive generic breaks the compilation even when a custom serializer is provided
Expected behavior
Should ignore recursive types when external serializer is provided and report fail-fast error without custom serializer.
Environment
- Kotlin version: 1.5.10 - 1.5.21
- Library version: 1.2.2
The stack trace:
e: java.lang.StackOverflowError
at java.base/java.util.AbstractCollection.toArray(AbstractCollection.java:200)
at org.jetbrains.kotlin.types.IndexedParametersSubstitution.<init>(TypeSubstitution.kt:184)
at org.jetbrains.kotlin.types.TypeConstructorSubstitution$Companion.create(TypeSubstitution.kt:83)
at org.jetbrains.kotlin.types.KotlinTypeFactory.computeMemberScope(KotlinTypeFactory.kt:54)
at org.jetbrains.kotlin.types.KotlinTypeFactory.simpleType(KotlinTypeFactory.kt:85)
at org.jetbrains.kotlin.types.KotlinTypeFactory.simpleType$default(KotlinTypeFactory.kt:72)
at org.jetbrains.kotlin.types.TypeSubstitutionKt.replace(TypeSubstitution.kt:157)
at org.jetbrains.kotlin.types.TypeSubstitutionKt.replace(TypeSubstitution.kt:142)
at org.jetbrains.kotlin.types.TypeSubstitutionKt.replace$default(TypeSubstitution.kt:130)
at org.jetbrains.kotlin.types.TypeSubstitutionKt.replace(TypeSubstitution.kt)
at org.jetbrains.kotlin.types.TypeSubstitutor.substituteCompoundType(TypeSubstitutor.java:352)
at org.jetbrains.kotlin.types.TypeSubstitutor.unsafeSubstitute(TypeSubstitutor.java:284)
at org.jetbrains.kotlin.types.TypeSubstitutor.substituteWithoutApproximation(TypeSubstitutor.java:162)
at org.jetbrains.kotlin.types.TypeSubstitutor.substitute(TypeSubstitutor.java:147)
at org.jetbrains.kotlin.types.TypeSubstitutor.substitute(TypeSubstitutor.java:140)
at org.jetbrains.kotlin.types.TypeUtils.createSubstitutedSupertype(TypeUtils.java:263)
at org.jetbrains.kotlin.types.TypeUtils.getImmediateSupertypes(TypeUtils.java:249)
at org.jetbrains.kotlin.types.TypeUtils.collectAllSupertypes(TypeUtils.java:271)
at org.jetbrains.kotlin.types.TypeUtils.collectAllSupertypes(TypeUtils.java:274)
at org.jetbrains.kotlin.types.TypeUtils.getAllSupertypes(TypeUtils.java:284)
at org.jetbrains.kotlin.types.typeUtil.TypeUtilsKt.supertypes(TypeUtils.kt:53)
at org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationPluginDeclarationChecker.checkSerializerNullability(SerializationPluginDeclarationChecker.kt:326)
at org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationPluginDeclarationChecker.checkType(SerializationPluginDeclarationChecker.kt:289)
at org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationPluginDeclarationChecker.checkTypeArguments(SerializationPluginDeclarationChecker.kt:253)
at org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationPluginDeclarationChecker.checkType(SerializationPluginDeclarationChecker.kt:290)
at org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationPluginDeclarationChecker.checkTypeArguments(SerializationPluginDeclarationChecker.kt:253)