diff --git a/plugins/kotlinx-serialization/testData/diagnostics/DuplicateSerialName.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/DuplicateSerialName.fir.kt new file mode 100644 index 00000000000..808573495ce --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/DuplicateSerialName.fir.kt @@ -0,0 +1,10 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* + +@Serializable +open class Parent(open val arg: Int) + +@Serializable +class Derived(override val arg: Int): Parent(arg) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.fir.kt new file mode 100644 index 00000000000..6bd4954094e --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.fir.kt @@ -0,0 +1,29 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// SKIP_TXT +import kotlinx.serialization.* + + +@Serializable +enum class ImplicitlyDuplicated { + @SerialName("foo") + FIRST, + @SerialName("foo") + SECOND +} + +@Serializable +enum class ExplicitlyDuplicated { + FIRST, + SECOND, + @SerialName("FIRST") + THIRD +} + +@Serializable +enum class ReversedExplicitlyDuplicated { + @SerialName("THIRD") + FIRST, + SECOND, + THIRD +} \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.fir.fail b/plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.fir.fail new file mode 100644 index 00000000000..88f7edcbc38 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.fir.fail @@ -0,0 +1,3 @@ +An operation is not implemented: Support @Serializer(for=...) supertype generation +kotlin.NotImplementedError: An operation is not implemented: Support @Serializer(for=...) supertype generation + at org.jetbrains.kotlinx.serialization.compiler.fir.SerializationFirSupertypesExtension.computeAdditionalSupertypes(SerializationFirSupertypesExtension.kt:39) diff --git a/plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.fir.kt new file mode 100644 index 00000000000..ed54229944f --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.fir.kt @@ -0,0 +1,10 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE, -OPT_IN_USAGE +// SKIP_TXT + +// FILE: test.kt +import kotlinx.serialization.* + +class Foo(i: Int, val j: Int) + +@Serializer(forClass = Foo::class) +object ExternalSerializer \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient.fir.kt new file mode 100644 index 00000000000..ee0e7ee3b94 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient.fir.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.Serializable +import java.io.Serializable as JavaSerializable + +@Serializable +class Data(val x: Int, @Transient val y: String) + +@Serializable +class Data2(val x: Int, @Transient val y: String) : JavaSerializable \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient2.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient2.fir.kt new file mode 100644 index 00000000000..c5e287d89de --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient2.fir.kt @@ -0,0 +1,20 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient +import java.io.Serializable as JavaSerializable +import kotlin.jvm.Transient as JavaTransient + +@Serializable +class Data(val x: Int, @Transient val y: String = "a") + +@Serializable +class Data2(val x: Int, @Transient val y: String = "a") : JavaSerializable + +@Serializable +class Data3(val x: Int, @Transient @JavaTransient val y: String = "a") : JavaSerializable + +@Serializable +class Data4(val x: Int, @JavaTransient val y: String) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/InheritableInfo.kt b/plugins/kotlinx-serialization/testData/diagnostics/InheritableInfo.kt index 6ec7d9d129b..cdf122eb157 100644 --- a/plugins/kotlinx-serialization/testData/diagnostics/InheritableInfo.kt +++ b/plugins/kotlinx-serialization/testData/diagnostics/InheritableInfo.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE // WITH_STDLIB // SKIP_TXT diff --git a/plugins/kotlinx-serialization/testData/diagnostics/LazyRecursionBug.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/LazyRecursionBug.fir.kt new file mode 100644 index 00000000000..e0cd23e5dce --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/LazyRecursionBug.fir.kt @@ -0,0 +1,10 @@ +// This test enshures that analysis ends up without compiler exceptions +// !DIAGNOSTICS: -OPT_IN_USAGE + +import kotlinx.serialization.* + +@Serializable +class Digest() { + @Serializer(forClass = Digest::class) + companion object : KSerializer {} +} diff --git a/plugins/kotlinx-serialization/testData/diagnostics/LocalAndAnonymous.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/LocalAndAnonymous.fir.kt new file mode 100644 index 00000000000..071b465334a --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/LocalAndAnonymous.fir.kt @@ -0,0 +1,47 @@ +// !DIAGNOSTICS: -OPT_IN_USAGE_ERROR, -OPT_IN_USAGE +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.* +import kotlinx.serialization.descriptors.* +import kotlinx.serialization.encoding.* + +fun container() { + @Serializable + class X // local classes are allowed + + val y = @Serializable object { + fun inObjectFun() { + @Serializable + class X // local classes in anonymous object functions are not allowed + } + } + + + class LocalSerializer : KSerializer { + override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", PrimitiveKind.INT) + override fun serialize(encoder: Encoder, value: Any?) { + encoder.encodeNull() + } + + override fun deserialize(decoder: Decoder): Any? { + return decoder.decodeNull() + } + } + + @Serializable + class WithLocalSerializerInProperty(@Serializable(with = LocalSerializer::class) val x: Any?) + + @Serializable(with = LocalSerializer::class) + data class WithLocalSerializer(val i: Int) +} + +val topLevelAnon = @Serializable object {} + +@Serializable class A { + @Serializable class B // nested classes are allowed + + @Serializable inner class C // inner classes are not + + @Serializable object F {} // regular named object, OK +} diff --git a/plugins/kotlinx-serialization/testData/diagnostics/NoSuitableCtorInParent.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/NoSuitableCtorInParent.fir.kt new file mode 100644 index 00000000000..194cf5167d9 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/NoSuitableCtorInParent.fir.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* + +open class NonSerializableParent(val arg: Int) + +@Serializable +class Derived(val someData: String): NonSerializableParent(42) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/NonSerializable.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/NonSerializable.fir.kt new file mode 100644 index 00000000000..ac5fda18ed8 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/NonSerializable.fir.kt @@ -0,0 +1,17 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* + +class NonSerializable + +@Serializable +class Basic(val foo: NonSerializable) + +@Serializable +class Inside(val foo: List) + +@Serializable +class WithImplicitType { + val foo = NonSerializable() +} \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/NullabilityIncompatible.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/NullabilityIncompatible.fir.kt new file mode 100644 index 00000000000..1d951491b9e --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/NullabilityIncompatible.fir.kt @@ -0,0 +1,17 @@ +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* +import kotlinx.serialization.descriptors.* +import kotlinx.serialization.encoding.* + +@Serializable(NopeNullableSerializer::class) +class Nope {} + +class NopeNullableSerializer: KSerializer { + override val descriptor: SerialDescriptor get() = TODO() + override fun deserialize(decoder: Decoder): Nope? = TODO() + override fun serialize(encoder: Encoder, value: Nope?) = TODO() +} + +@Serializable +class Foo(val foo: Nope) diff --git a/plugins/kotlinx-serialization/testData/diagnostics/ParamIsNotProperty.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/ParamIsNotProperty.fir.kt new file mode 100644 index 00000000000..1bca02e11a3 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/ParamIsNotProperty.fir.kt @@ -0,0 +1,7 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* + +@Serializable +class Test(val someData: String, cantBeDeserialized: Int) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/SerializableEnums.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/SerializableEnums.fir.kt new file mode 100644 index 00000000000..b6e92f8c6e7 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/SerializableEnums.fir.kt @@ -0,0 +1,24 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* +import kotlinx.serialization.encoding.* + +enum class SimpleEnum { A, B } + +enum class MarkedNameEnum { @SerialName("a") A, B} + +@Serializable +enum class ExplicitlyMarkedEnum { @SerialName("a") A, B} + +@Serializable(EnumSerializer::class) +enum class ExplicitlyMarkedEnumCustom { @SerialName("a") A, B} + +object EnumSerializer: KSerializer { + override val descriptor = TODO() + override fun serialize(encoder: Encoder, value: ExplicitlyMarkedEnumCustom) = TODO() + override fun deserialize(decoder: Decoder): ExplicitlyMarkedEnumCustom = TODO() +} + +@Serializable +data class EnumUsage(val s: SimpleEnum, val m: MarkedNameEnum, val e: ExplicitlyMarkedEnum) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/SerializableIgnored.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/SerializableIgnored.fir.kt new file mode 100644 index 00000000000..a1635f8dc77 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/SerializableIgnored.fir.kt @@ -0,0 +1,11 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// SKIP_TXT + +// FILE: test.kt +import kotlinx.serialization.* + +@Serializable +interface INonSerializable + +@Serializable +sealed interface SealedSerializable \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeCompatibleForSpecials.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeCompatibleForSpecials.fir.kt new file mode 100644 index 00000000000..a835d3413bd --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeCompatibleForSpecials.fir.kt @@ -0,0 +1,19 @@ +// !DIAGNOSTICS: -OPT_IN_USAGE +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.* + +class Bar +@Serializer(forClass = Bar::class) +object BarSerializer: KSerializer + +class Baz +@Serializer(forClass = Baz::class) +object BazSerializer: KSerializer + +@Serializable +class Foo1(@Polymorphic val i: Baz) + +@Serializable +class Foo2(val li: MutableList<@Serializable(with = BazSerializer::class) Baz>) diff --git a/plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeIncompatible.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeIncompatible.fir.kt new file mode 100644 index 00000000000..131648e958f --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeIncompatible.fir.kt @@ -0,0 +1,39 @@ +// !DIAGNOSTICS: -OPT_IN_USAGE +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.* + +class Bar +@Serializer(forClass = Bar::class) +object BarSerializer: KSerializer + +class Baz +@Serializer(forClass = Baz::class) +object BazSerializer: KSerializer +@Serializer(forClass = Baz::class) +object NullableBazSerializer: KSerializer + +@Serializable(with = BazSerializer::class) +class Biz(val i: Int) + +@Serializable +class Foo(@Serializable(with = BazSerializer::class) val i: Bar) + +@Serializable +class Foo2(val li: List<@Serializable(with = BazSerializer::class) Bar>) + +@Serializable +class Foo3(@Serializable(with = BazSerializer::class) val i: Baz) + +@Serializable +class Foo4(val li: List<@Serializable(with = BazSerializer::class) Baz>) + +@Serializable +class Foo5(@Serializable(with = BazSerializer::class) val i: Bar?) + +@Serializable +class Foo6(@Serializable(with = NullableBazSerializer::class) val i: Bar) + +@Serializable +class Foo7(@Serializable(with = NullableBazSerializer::class) val i: Bar?) diff --git a/plugins/kotlinx-serialization/testData/diagnostics/Transients.fir.kt b/plugins/kotlinx-serialization/testData/diagnostics/Transients.fir.kt new file mode 100644 index 00000000000..d26139a5dd6 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/Transients.fir.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE +// WITH_STDLIB +// FILE: test.kt +import kotlinx.serialization.* + +@Serializable +data class WithTransients(@Transient val missing: Int) { + @Transient val redundant: Int get() = 42 + + @Transient + lateinit var allowTransientLateinitWithoutInitializer: String +} \ No newline at end of file diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirDiagnosticTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirDiagnosticTestGenerated.java new file mode 100644 index 00000000000..9e17c3514d6 --- /dev/null +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirDiagnosticTestGenerated.java @@ -0,0 +1,195 @@ +/* + * Copyright 2010-2022 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.runners; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +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") +public class SerializationFirDiagnosticTestGenerated extends AbstractSerializationFirDiagnosticTest { + @Nested + @TestMetadata("plugins/kotlinx-serialization/testData/diagnostics") + @TestDataPath("$PROJECT_ROOT") + public class Diagnostics { + @Test + public void testAllFilesPresentInDiagnostics() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/kotlinx-serialization/testData/diagnostics"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + } + + @Test + @TestMetadata("DuplicateSerialName.kt") + public void testDuplicateSerialName() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/DuplicateSerialName.kt"); + } + + @Test + @TestMetadata("EnumDuplicateSerialName.kt") + public void testEnumDuplicateSerialName() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.kt"); + } + + @Test + @TestMetadata("ExternalSerializers.kt") + public void testExternalSerializers() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/ExternalSerializers.kt"); + } + + @Test + @TestMetadata("IncorrectTransient.kt") + public void testIncorrectTransient() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient.kt"); + } + + @Test + @TestMetadata("IncorrectTransient2.kt") + public void testIncorrectTransient2() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/IncorrectTransient2.kt"); + } + + @Test + @TestMetadata("InheritableInfo.kt") + public void testInheritableInfo() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/InheritableInfo.kt"); + } + + @Test + @TestMetadata("LazyRecursionBug.kt") + public void testLazyRecursionBug() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/LazyRecursionBug.kt"); + } + + @Test + @TestMetadata("LocalAndAnonymous.kt") + public void testLocalAndAnonymous() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/LocalAndAnonymous.kt"); + } + + @Test + @TestMetadata("NoSuitableCtorInParent.kt") + public void testNoSuitableCtorInParent() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/NoSuitableCtorInParent.kt"); + } + + @Test + @TestMetadata("NonSerializable.kt") + public void testNonSerializable() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/NonSerializable.kt"); + } + + @Test + @TestMetadata("NullabilityIncompatible.kt") + public void testNullabilityIncompatible() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/NullabilityIncompatible.kt"); + } + + @Test + @TestMetadata("ParamIsNotProperty.kt") + public void testParamIsNotProperty() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/ParamIsNotProperty.kt"); + } + + @Test + @TestMetadata("SerializableEnums.kt") + public void testSerializableEnums() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/SerializableEnums.kt"); + } + + @Test + @TestMetadata("SerializableIgnored.kt") + public void testSerializableIgnored() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/SerializableIgnored.kt"); + } + + @Test + @TestMetadata("SerializerTypeCompatibleForSpecials.kt") + public void testSerializerTypeCompatibleForSpecials() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeCompatibleForSpecials.kt"); + } + + @Test + @TestMetadata("SerializerTypeIncompatible.kt") + public void testSerializerTypeIncompatible() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/SerializerTypeIncompatible.kt"); + } + + @Test + @TestMetadata("Transients.kt") + public void testTransients() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/Transients.kt"); + } + } + + @Nested + @TestMetadata("plugins/kotlinx-serialization/testData/firMembers") + @TestDataPath("$PROJECT_ROOT") + public class FirMembers { + @Test + @TestMetadata("abstractAndSealed.kt") + public void testAbstractAndSealed() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/abstractAndSealed.kt"); + } + + @Test + public void testAllFilesPresentInFirMembers() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/kotlinx-serialization/testData/firMembers"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classWithCompanionObject.kt") + public void testClassWithCompanionObject() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/classWithCompanionObject.kt"); + } + + @Test + @TestMetadata("classWithGenericParameters.kt") + public void testClassWithGenericParameters() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/classWithGenericParameters.kt"); + } + + @Test + @TestMetadata("defaultProperties.kt") + public void testDefaultProperties() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/defaultProperties.kt"); + } + + @Test + @TestMetadata("enums.kt") + public void testEnums() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/enums.kt"); + } + + @Test + @TestMetadata("inlineClasses.kt") + public void testInlineClasses() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/inlineClasses.kt"); + } + + @Test + @TestMetadata("multipleProperties.kt") + public void testMultipleProperties() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/multipleProperties.kt"); + } + + @Test + @TestMetadata("privatePropertiesSerialization.kt") + public void testPrivatePropertiesSerialization() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/privatePropertiesSerialization.kt"); + } + + @Test + @TestMetadata("serializableObject.kt") + public void testSerializableObject() throws Exception { + runTest("plugins/kotlinx-serialization/testData/firMembers/serializableObject.kt"); + } + } +} diff --git a/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/TestGenerator.kt b/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/TestGenerator.kt index b288af30260..746e97ab4cd 100644 --- a/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/TestGenerator.kt +++ b/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/TestGenerator.kt @@ -23,6 +23,11 @@ fun main(args: Array) { model("diagnostics", excludedPattern = excludedFirTestdataPattern) } + testClass { + model("diagnostics", excludedPattern = excludedFirTestdataPattern) + model("firMembers") + } + // ------------------------------- asm instructions ------------------------------- testClass { diff --git a/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/AsmLikeInstructionsListingTests.kt b/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/AsmLikeInstructionsListingTests.kt index 109514e32e0..693ad412c82 100644 --- a/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/AsmLikeInstructionsListingTests.kt +++ b/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/AsmLikeInstructionsListingTests.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlinx.serialization.runners import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.AsmLikeInstructionListingDirectives import org.jetbrains.kotlin.test.runners.codegen.AbstractAsmLikeInstructionListingTest +import org.jetbrains.kotlin.test.runners.codegen.AbstractFirAsmLikeInstructionListingTest import org.jetbrains.kotlin.test.runners.codegen.AbstractIrAsmLikeInstructionListingTest import org.jetbrains.kotlinx.serialization.configureForKotlinxSerialization diff --git a/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/DiagnosticTests.kt b/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/DiagnosticTests.kt index 613d89b42fa..c91fa2dac8c 100644 --- a/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/DiagnosticTests.kt +++ b/plugins/kotlinx-serialization/tests/org/jetbrains/kotlinx/serialization/runners/DiagnosticTests.kt @@ -6,7 +6,10 @@ package org.jetbrains.kotlinx.serialization.runners import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP import org.jetbrains.kotlin.test.runners.AbstractDiagnosticTest +import org.jetbrains.kotlin.test.runners.AbstractFirDiagnosticTest +import org.jetbrains.kotlin.test.runners.configurationForClassicAndFirTestsAlongside import org.jetbrains.kotlinx.serialization.configureForKotlinxSerialization abstract class AbstractSerializationPluginDiagnosticTest : AbstractDiagnosticTest() { @@ -15,3 +18,22 @@ abstract class AbstractSerializationPluginDiagnosticTest : AbstractDiagnosticTes builder.configureForKotlinxSerialization() } } + +abstract class AbstractSerializationFirDiagnosticTest : AbstractFirDiagnosticTest() { + override fun configure(builder: TestConfigurationBuilder) { + super.configure(builder) + with(builder) { + configureForKotlinxSerialization() + + forTestsMatching("*/diagnostics/*") { + configurationForClassicAndFirTestsAlongside() + } + + forTestsMatching("*/firMembers/*") { + defaultDirectives { + +FIR_DUMP + } + } + } + } +}