diff --git a/build.gradle.kts b/build.gradle.kts index a1dfb181225..fd3e60dbd8b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -752,6 +752,8 @@ tasks { dependsOn("jvmCompilerIntegrationTest") dependsOn(":plugins:parcelize:parcelize-compiler:test") + dependsOn(":kotlinx-serialization-compiler-plugin:test") + dependsOn(":kotlin-util-io:test") dependsOn(":kotlin-util-klib:test") @@ -881,7 +883,6 @@ tasks { ":kotlin-sam-with-receiver-compiler-plugin:test", ":plugins:uast-kotlin:test", ":kotlin-annotation-processing-gradle:test", - ":kotlinx-serialization-compiler-plugin:test", ":kotlinx-serialization-ide-plugin:test", ":idea:jvm-debugger:jvm-debugger-test:test", "idea-plugin-additional-tests", diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt index 26d3bb50bfd..110029fa040 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt @@ -87,12 +87,11 @@ open class CompilerConfigurationProviderImpl( val initialConfiguration = createCompilerConfiguration(module) val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment, initialConfiguration) val project = projectEnv.project - configurators.forEach { it.registerCompilerExtensions(project) } return KotlinCoreEnvironment.createForTests( projectEnv, initialConfiguration, configFiles - ) + ).also { configurators.forEach { it.registerCompilerExtensions(project) } } } @TestInfrastructureInternals diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 556f0013621..c8815116204 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -7694,6 +7694,11 @@ + + + + + @@ -7728,6 +7733,11 @@ + + + + + @@ -7768,6 +7778,11 @@ + + + + + @@ -7788,6 +7803,11 @@ + + + + + diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts b/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts index fc7f496f9a6..43c8902ae5d 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts @@ -20,8 +20,16 @@ dependencies { runtimeOnly(kotlinStdlib()) testCompile(projectTests(":compiler:tests-common")) + testApi(projectTests(":compiler:test-infrastructure")) + testApi(projectTests(":compiler:test-infrastructure-utils")) + testApi(projectTests(":compiler:tests-compiler-utils")) + testApi(projectTests(":compiler:tests-common-new")) + testImplementation(projectTests(":generators:test-generator")) testCompile(commonDep("junit:junit")) - testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.1.0") + testApiJUnit5(vintageEngine = true) + + testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.2.2") + testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2") testRuntimeOnly(intellijCoreDep()) { includeJars("intellij-core") } testRuntimeOnly(intellijDep()) { includeJars("platform-concurrency") } @@ -43,6 +51,9 @@ sourcesJar() javadocJar() testsJar() -projectTest(parallel = true) { +projectTest(parallel = true, jUnit5Enabled = true) { workingDir = rootDir + useJUnitPlatform() } + +val generateTests by generator("org.jetbrains.kotlinx.serialization.TestGeneratorKt") \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt index 5e591d36d90..be561974183 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt @@ -7,10 +7,13 @@ package org.jetbrains.kotlinx.serialization.compiler.resolve import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.KtDeclarationWithInitializer +import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny import org.jetbrains.kotlin.resolve.hasBackingField import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor import org.jetbrains.kotlin.serialization.deserialization.getName @@ -47,13 +50,15 @@ class SerializableProperties(private val serializableClass: ClassDescriptor, val .filter { it.kind == CallableMemberDescriptor.Kind.DECLARATION } .filter(::isPropSerializable) .map { prop -> + val declaresDefaultValue = prop.declaresDefaultValue() SerializableProperty( prop, primaryConstructorProperties[prop] ?: false, prop.hasBackingField(bindingContext) || (prop is DeserializedPropertyDescriptor && prop.backingField != null) // workaround for TODO in .hasBackingField // workaround for overridden getter (val) and getter+setter (var) - in this case hasBackingField returning false // but initializer presents only for property with backing field - || prop.declaresDefaultValue + || declaresDefaultValue, + declaresDefaultValue ) } .filterNot { it.transient } @@ -88,6 +93,26 @@ class SerializableProperties(private val serializableClass: ClassDescriptor, val ?.original?.valueParameters?.any { it.declaresDefaultValue() } ?: false } +fun PropertyDescriptor.declaresDefaultValue(): Boolean{ + when (val declaration = this.source.getPsi()) { + is KtDeclarationWithInitializer -> return declaration.initializer != null + is KtParameter -> return declaration.defaultValue != null + is Any -> return false // Not-null check + } + // PSI is null, property is from another module + if (this !is DeserializedPropertyDescriptor) return false + val myClassCtor = (this.containingDeclaration as? ClassDescriptor)?.unsubstitutedPrimaryConstructor ?: return false + // If property is a constructor parameter, check parameter default value + // (serializable classes always have parameters-as-properties, so no name clash here) + if (myClassCtor.valueParameters.find { it.name == this.name }?.declaresDefaultValue() == true) return true + // If it is a body property, then it is likely to have initializer when getter is not specified + // note this approach is not working well if we have smth like `get() = field`, but such cases on cross-module boundaries + // should be very marginal. If we want to solve them, we need to add protobuf metadata extension. + if (getter?.isDefault == true) return true + return false +} + + internal val SerializableProperties.goldenMask: Int get() { var goldenMask = 0 diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperty.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperty.kt index a959da01d81..c3e42649a48 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperty.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperty.kt @@ -29,22 +29,16 @@ import org.jetbrains.kotlinx.serialization.compiler.backend.common.analyzeSpecia class SerializableProperty( val descriptor: PropertyDescriptor, val isConstructorParameterWithDefault: Boolean, - hasBackingField: Boolean + hasBackingField: Boolean, + declaresDefaultValue: Boolean ) { val name = descriptor.annotations.serialNameValue ?: descriptor.name.asString() val type = descriptor.type val genericIndex = type.genericIndex val module = descriptor.module val serializableWith = descriptor.serializableWith ?: analyzeSpecialSerializers(module, descriptor.annotations)?.defaultType - val optional = !descriptor.annotations.serialRequired && descriptor.declaresDefaultValue + val optional = !descriptor.annotations.serialRequired && declaresDefaultValue val transient = descriptor.annotations.serialTransient || !hasBackingField val annotationsWithArguments: List, List>> = descriptor.annotationsWithArguments() } - -val PropertyDescriptor.declaresDefaultValue: Boolean - get() = when (val declaration = this.source.getPsi()) { - is KtDeclarationWithInitializer -> declaration.initializer != null - is KtParameter -> declaration.defaultValue != null - else -> false - } \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBoxTest.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBoxTest.kt new file mode 100644 index 00000000000..95098e88725 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBoxTest.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlinx.serialization + +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.runners.codegen.AbstractIrBlackBoxCodegenTest + +open class AbstractSerializationIrBoxTest : AbstractIrBlackBoxCodegenTest() { + private val coreLibraryPath = getSerializationCoreLibraryJar() + private val jsonLibraryPath = getSerializationLibraryJar("kotlinx.serialization.json.Json") + + override fun configure(builder: TestConfigurationBuilder) { + super.configure(builder) + val librariesPaths = listOf(coreLibraryPath!!, jsonLibraryPath!!) + builder.configureForKotlinxSerialization(librariesPaths) + } + +} \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt index 18e7cc91ee6..1b99d2a906b 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt @@ -5,9 +5,17 @@ package org.jetbrains.kotlinx.serialization +import com.intellij.openapi.project.Project import junit.framework.TestCase +import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.EnvironmentConfigurator +import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlinx.serialization.compiler.diagnostic.VersionReader +import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar import org.junit.Test import java.io.File import kotlin.test.assertTrue @@ -31,8 +39,33 @@ class RuntimeLibraryInClasspathTest { } } -internal fun getSerializationCoreLibraryJar(): File? = try { - PathUtil.getResourcePathForClass(Class.forName("kotlinx.serialization.KSerializer")) +internal fun getSerializationCoreLibraryJar(): File? = getSerializationLibraryJar("kotlinx.serialization.KSerializer") + +internal fun getSerializationLibraryJar(classToDetect: String): File? = try { + PathUtil.getResourcePathForClass(Class.forName(classToDetect)) } catch (e: ClassNotFoundException) { null } + +internal fun TestConfigurationBuilder.configureForKotlinxSerialization(librariesPaths: List) { + useConfigurators( + { services -> + object : EnvironmentConfigurator(services) { + override fun configureCompilerConfiguration( + configuration: CompilerConfiguration, + module: TestModule + ) { + configuration.addJvmClasspathRoots(librariesPaths) + } + + override fun registerCompilerExtensions(project: Project) { + SerializationComponentRegistrar.registerExtensions(project) + } + } + }) + useCustomRuntimeClasspathProvider { + object : RuntimeClasspathProvider() { + override fun runtimeClassPaths(): List = librariesPaths + } + } +} \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java new file mode 100644 index 00000000000..865356285e4 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlinx.serialization; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr") +@TestDataPath("$PROJECT_ROOT") +public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxTest { + @Test + public void testAllFilesPresentInBoxIr() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("multimoduleInheritance.kt") + public void testMultimoduleInheritance() throws Exception { + runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/multimoduleInheritance.kt"); + } +} diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/TestGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/TestGenerator.kt new file mode 100644 index 00000000000..bd0cd9b45f1 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/TestGenerator.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlinx.serialization + +import org.jetbrains.kotlin.test.generators.generateTestGroupSuiteWithJUnit5 + +fun main(args: Array) { + System.setProperty("java.awt.headless", "true") + + generateTestGroupSuiteWithJUnit5(args) { + testGroup( + "plugins/kotlin-serialization/kotlin-serialization-compiler/test", + "plugins/kotlin-serialization/kotlin-serialization-compiler/testData" + ) { + + // New test infrastructure ONLY + testClass { + model("boxIr") + } + } + } +} \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/multimoduleInheritance.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/multimoduleInheritance.kt new file mode 100644 index 00000000000..0e9428103b7 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/multimoduleInheritance.kt @@ -0,0 +1,56 @@ +// IGNORE_BACKEND_FIR: JVM_IR +// TARGET_BACKEND: JVM_IR + +// WITH_RUNTIME + +// MODULE: lib +// FILE: lib.kt + +package a + +import kotlinx.serialization.* + +@Serializable +open class OpenBody { + var optional: String? = "foo" +} + +@Serializable +abstract class AbstractConstructor(var optional: String = "foo") + + +// MODULE: app(lib) +// FILE: app.kt + +package test + +import a.* +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlin.test.assertEquals + +@Serializable +class Test1: OpenBody() + +@Serializable +class Test2: AbstractConstructor() + +fun test1() { + val string = Json.encodeToString(Test1.serializer(), Test1()) + assertEquals("{}", string) + val reconstructed = Json.decodeFromString(Test1.serializer(), string) + assertEquals("foo", reconstructed.optional) +} + +fun test2() { + val string = Json.encodeToString(Test2.serializer(), Test2()) + assertEquals("{}", string) + val reconstructed = Json.decodeFromString(Test2.serializer(), string) + assertEquals("foo", reconstructed.optional) +} + +fun box(): String { + test1() + test2() + return "OK" +} \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt index e260436683a..a39e0696931 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.ir.txt @@ -72,8 +72,6 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ICONST_1 ISTORE (3) ICONST_0 - ISTORE (4) - ICONST_0 ISTORE (5) ACONST_NULL ASTORE (6) @@ -386,8 +384,6 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ICONST_1 ISTORE (3) ICONST_0 - ISTORE (4) - ICONST_0 ISTORE (5) ACONST_NULL ASTORE (6) @@ -773,8 +769,6 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ICONST_1 ISTORE (3) ICONST_0 - ISTORE (4) - ICONST_0 ISTORE (5) ACONST_NULL ASTORE (6) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt index 500076c5d44..cb16c06db6d 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt @@ -68,8 +68,6 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati ICONST_1 ISTORE (3) ICONST_0 - ISTORE (4) - ICONST_0 ISTORE (5) ACONST_NULL ASTORE (6) @@ -274,14 +272,14 @@ public final class Container : java/lang/Object { } } -final class Result$Companion$$cachedSerializer$delegate$2 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function0 { - public final static Result$Companion$$cachedSerializer$delegate$2 INSTANCE +final class Result$Companion$$cachedSerializer$delegate$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function0 { + public final static Result$Companion$$cachedSerializer$delegate$1 INSTANCE static void () { NEW DUP - INVOKESPECIAL (Result$Companion$$cachedSerializer$delegate$2, , ()V) - PUTSTATIC (INSTANCE, LResult$Companion$$cachedSerializer$delegate$2;) + INVOKESPECIAL (Result$Companion$$cachedSerializer$delegate$1, , ()V) + PUTSTATIC (INSTANCE, LResult$Companion$$cachedSerializer$delegate$1;) RETURN } @@ -344,7 +342,7 @@ final class Result$Companion$$cachedSerializer$delegate$2 : kotlin/jvm/internal/ LABEL (L0) LINENUMBER (7) ALOAD (0) - INVOKEVIRTUAL (Result$Companion$$cachedSerializer$delegate$2, invoke, ()Lkotlinx/serialization/KSerializer;) + INVOKEVIRTUAL (Result$Companion$$cachedSerializer$delegate$1, invoke, ()Lkotlinx/serialization/KSerializer;) ARETURN LABEL (L1) } @@ -368,10 +366,13 @@ public final class Result$Companion : java/lang/Object { LABEL (L1) } + private final kotlin.Lazy get$cachedSerializer$delegate() + public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) LINENUMBER (7) - INVOKESTATIC (Result, access$get$cachedSerializer$delegate$cp, ()Lkotlin/Lazy;) + ALOAD (0) + INVOKESPECIAL (Result$Companion, get$cachedSerializer$delegate, ()Lkotlin/Lazy;) INVOKEINTERFACE (kotlin/Lazy, getValue, ()Ljava/lang/Object;) CHECKCAST ARETURN @@ -379,14 +380,14 @@ public final class Result$Companion : java/lang/Object { } } -final class Result$Err$$cachedSerializer$delegate$2 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function0 { - public final static Result$Err$$cachedSerializer$delegate$2 INSTANCE +final class Result$Err$$cachedSerializer$delegate$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function0 { + public final static Result$Err$$cachedSerializer$delegate$1 INSTANCE static void () { NEW DUP - INVOKESPECIAL (Result$Err$$cachedSerializer$delegate$2, , ()V) - PUTSTATIC (INSTANCE, LResult$Err$$cachedSerializer$delegate$2;) + INVOKESPECIAL (Result$Err$$cachedSerializer$delegate$1, , ()V) + PUTSTATIC (INSTANCE, LResult$Err$$cachedSerializer$delegate$1;) RETURN } @@ -416,7 +417,7 @@ final class Result$Err$$cachedSerializer$delegate$2 : kotlin/jvm/internal/Lambda LABEL (L0) LINENUMBER (10) ALOAD (0) - INVOKEVIRTUAL (Result$Err$$cachedSerializer$delegate$2, invoke, ()Lkotlinx/serialization/KSerializer;) + INVOKEVIRTUAL (Result$Err$$cachedSerializer$delegate$1, invoke, ()Lkotlinx/serialization/KSerializer;) ARETURN LABEL (L1) } @@ -435,7 +436,7 @@ public final class Result$Err : Result { LABEL (L0) LINENUMBER (10) GETSTATIC (PUBLICATION, Lkotlin/LazyThreadSafetyMode;) - GETSTATIC (INSTANCE, LResult$Err$$cachedSerializer$delegate$2;) + GETSTATIC (INSTANCE, LResult$Err$$cachedSerializer$delegate$1;) CHECKCAST INVOKESTATIC (kotlin/LazyKt, lazy, (Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;) PUTSTATIC ($cachedSerializer$delegate, Lkotlin/Lazy;) @@ -452,10 +453,13 @@ public final class Result$Err : Result { LABEL (L1) } + private final kotlin.Lazy get$cachedSerializer$delegate() + public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) LINENUMBER (10) - GETSTATIC ($cachedSerializer$delegate, Lkotlin/Lazy;) + ALOAD (0) + INVOKESPECIAL (Result$Err, get$cachedSerializer$delegate, ()Lkotlin/Lazy;) INVOKEINTERFACE (kotlin/Lazy, getValue, ()Ljava/lang/Object;) CHECKCAST ARETURN @@ -531,8 +535,6 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati ICONST_1 ISTORE (3) ICONST_0 - ISTORE (4) - ICONST_0 ISTORE (5) ACONST_NULL ASTORE (6) @@ -745,7 +747,7 @@ public abstract class Result : java/lang/Object { LABEL (L0) LINENUMBER (7) GETSTATIC (PUBLICATION, Lkotlin/LazyThreadSafetyMode;) - GETSTATIC (INSTANCE, LResult$Companion$$cachedSerializer$delegate$2;) + GETSTATIC (INSTANCE, LResult$Companion$$cachedSerializer$delegate$1;) CHECKCAST INVOKESTATIC (kotlin/LazyKt, lazy, (Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;) PUTSTATIC ($cachedSerializer$delegate, Lkotlin/Lazy;)