From afd8895e51b7e36e9ca2e2e4f762536472541d99 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Tue, 16 Jan 2024 11:34:59 +0200 Subject: [PATCH] [FIR] Introduce the `PluginGenerated` source kind Make parcelize work consistently with `FirOverrideChecker`. Actually, there is a philosophical question about what to do when a plugin generates a class in a new package, and this class is red code (for instance, doesn't implement an abstract member from a supertype). There's no source to report such an error, but we probably do want to run checkers to avoid trying to compile red code to binaries (because it may crash in backend, or it may silently work). --- .../customSerlializable.txt | 8 +- .../generatedCompanionWithFoo.txt | 2 +- .../nestedClassAndMaterializeMember.txt | 4 +- .../generatedCompanionWorksAsValue.txt | 2 +- .../kotlin/fir/plugin/ClassBuildingContext.kt | 3 + .../fir/plugin/PropertyBuildingContext.kt | 4 + .../plugin/SimpleFunctionBuildingContext.kt | 4 + .../org/jetbrains/kotlin/KtSourceElement.kt | 3 + .../testData/codegen/Basic.asm.fir.txt | 277 ++++++++++-------- .../testData/codegen/Sealed.asm.fir.txt | 160 +++++----- .../withoutParcelableSupertype.fir.kt | 20 ++ .../diagnostics/withoutParcelableSupertype.kt | 1 - .../diagnostics/wrongAnnotationTarget.fir.kt | 25 ++ .../diagnostics/wrongAnnotationTarget.kt | 1 - 14 files changed, 318 insertions(+), 196 deletions(-) create mode 100644 plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.fir.kt create mode 100644 plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.fir.kt diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/customSerlializable.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/customSerlializable.txt index 708d0e867f7..c08d7b98597 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/customSerlializable.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/customSerlializable.txt @@ -46,7 +46,7 @@ KtFunctionSymbol: type: test/FirstTarget symbolKind: LOCAL typeParameters: [] - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(customSerlializable.kt) getContainingJvmClassName: test.Serializer getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null @@ -56,7 +56,7 @@ KtFunctionSymbol: annotationsList: [] ownTypeArguments: [] type: test/Serializer - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(customSerlializable.kt) getContainingJvmClassName: test.Serializer getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null @@ -109,7 +109,7 @@ KtFunctionSymbol: type: test/SecondTarget symbolKind: LOCAL typeParameters: [] - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(customSerlializable.kt) getContainingJvmClassName: test.Serializer getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null @@ -119,7 +119,7 @@ KtFunctionSymbol: annotationsList: [] ownTypeArguments: [] type: test/Serializer - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(customSerlializable.kt) getContainingJvmClassName: test.Serializer getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/generatedCompanionWithFoo.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/generatedCompanionWithFoo.txt index 6272186639f..1cc10090d86 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/generatedCompanionWithFoo.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/generatedCompanionWithFoo.txt @@ -31,7 +31,7 @@ KtFunctionSymbol: annotationsList: [] ownTypeArguments: [] type: test/WithGeneratedCompanion.Companion - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(generatedCompanionWithFoo.kt) getContainingJvmClassName: test.WithGeneratedCompanion.Companion getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/nestedClassAndMaterializeMember.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/nestedClassAndMaterializeMember.txt index 25d87005e48..73d8c3b10a1 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/nestedClassAndMaterializeMember.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/withTestCompilerPluginEnabled/nestedClassAndMaterializeMember.txt @@ -31,7 +31,7 @@ KtFunctionSymbol: annotationsList: [] ownTypeArguments: [] type: test/MyClass - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(nestedClassAndMaterializeMember.kt) getContainingJvmClassName: test.MyClass getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null @@ -200,7 +200,7 @@ KtNamedClassOrObjectSymbol: symbolKind: CLASS_MEMBER typeParameters: [] visibility: Public - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(nestedClassAndMaterializeMember.kt) getContainingModule: KtSourceModule "Sources of main" annotationApplicableTargets: null deprecationStatus: null diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/withTestCompilerPluginEnabled/generatedCompanionWorksAsValue.txt b/analysis/analysis-api/testData/symbols/symbolByReference/withTestCompilerPluginEnabled/generatedCompanionWorksAsValue.txt index 0247ec46434..9a05c65b628 100644 --- a/analysis/analysis-api/testData/symbols/symbolByReference/withTestCompilerPluginEnabled/generatedCompanionWorksAsValue.txt +++ b/analysis/analysis-api/testData/symbols/symbolByReference/withTestCompilerPluginEnabled/generatedCompanionWorksAsValue.txt @@ -23,7 +23,7 @@ KtNamedClassOrObjectSymbol: symbolKind: CLASS_MEMBER typeParameters: [] visibility: Public - getContainingFileSymbol: null + getContainingFileSymbol: KtFileSymbol(generatedCompanionWorksAsValue.kt) getContainingModule: KtSourceModule "Sources of main" annotationApplicableTargets: null deprecationStatus: null diff --git a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt index 085b56f35b1..2bfa95cb63c 100644 --- a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt +++ b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.fir.plugin import org.jetbrains.kotlin.GeneratedDeclarationKey +import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.fakeElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.containingClassForLocalAttr import org.jetbrains.kotlin.fir.declarations.FirRegularClass @@ -68,6 +70,7 @@ public class ClassBuildingContext( classKind = this@ClassBuildingContext.classKind scopeProvider = session.kotlinScopeProvider status = generateStatus() + source = owner?.source?.fakeElement(KtFakeSourceElementKind.PluginGenerated) name = classId.shortClassName symbol = FirRegularClassSymbol(classId) diff --git a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/PropertyBuildingContext.kt b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/PropertyBuildingContext.kt index 82e43dc015a..f9d07f73f7a 100644 --- a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/PropertyBuildingContext.kt +++ b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/PropertyBuildingContext.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.fir.plugin import org.jetbrains.kotlin.GeneratedDeclarationKey +import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fakeElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildProperty @@ -69,6 +71,8 @@ public class PropertyBuildingContext( moduleData = session.moduleData origin = key.origin + source = owner?.source?.fakeElement(KtFakeSourceElementKind.PluginGenerated) + symbol = FirPropertySymbol(callableId) name = callableId.callableName diff --git a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/SimpleFunctionBuildingContext.kt b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/SimpleFunctionBuildingContext.kt index fbe8fd3927f..b8dbd28aa09 100644 --- a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/SimpleFunctionBuildingContext.kt +++ b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/SimpleFunctionBuildingContext.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.fir.plugin import org.jetbrains.kotlin.GeneratedDeclarationKey +import org.jetbrains.kotlin.KtFakeSourceElementKind +import org.jetbrains.kotlin.fakeElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction @@ -57,6 +59,8 @@ public class SimpleFunctionBuildingContext( moduleData = session.moduleData origin = key.origin + source = owner?.source?.fakeElement(KtFakeSourceElementKind.PluginGenerated) + symbol = FirNamedFunctionSymbol(callableId) name = callableId.callableName diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt index 31d6389d31c..a1506226c02 100644 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt @@ -309,6 +309,9 @@ sealed class KtFakeSourceElementKind(final override val shouldSkipErrorTypeRepor // For it.functionFromAny() calls on a stub type object CastToAnyForStubTypes : KtFakeSourceElementKind() + + // For plugin-generated things + object PluginGenerated : KtFakeSourceElementKind() } sealed class AbstractKtSourceElement { diff --git a/plugins/kotlinx-serialization/testData/codegen/Basic.asm.fir.txt b/plugins/kotlinx-serialization/testData/codegen/Basic.asm.fir.txt index cf3e680eb2b..acd7fc18771 100644 --- a/plugins/kotlinx-serialization/testData/codegen/Basic.asm.fir.txt +++ b/plugins/kotlinx-serialization/testData/codegen/Basic.asm.fir.txt @@ -8,6 +8,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa DUP INVOKESPECIAL (ListOfUsers$$serializer, , ()V) PUTSTATIC (ListOfUsers$$serializer, INSTANCE, LListOfUsers$$serializer;) + LABEL (L0) + LINENUMBER (12) NEW (kotlinx/serialization/internal/PluginGeneratedSerialDescriptor) DUP LDC (ListOfUsers) @@ -23,6 +25,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ALOAD (0) CHECKCAST (kotlinx/serialization/descriptors/SerialDescriptor) PUTSTATIC (ListOfUsers$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) + LABEL (L1) + LINENUMBER (13) RETURN } @@ -36,6 +40,7 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa public final kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) + LINENUMBER (12) INVOKESTATIC (ListOfUsers, access$get$childSerializers$cp, ()[Lkotlinx/serialization/KSerializer;) ASTORE (1) ICONST_1 @@ -57,6 +62,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ALOAD (1) LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (12) GETSTATIC (ListOfUsers$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) ICONST_1 @@ -73,7 +80,40 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ASTORE (8) ALOAD (7) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSequentially, ()Z) - IFEQ (L1) + IFEQ (L2) + ALOAD (7) + ALOAD (2) + ICONST_0 + ALOAD (8) + ICONST_0 + AALOAD + CHECKCAST (kotlinx/serialization/DeserializationStrategy) + ALOAD (6) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSerializableElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;) + CHECKCAST (java/util/List) + ASTORE (6) + ILOAD (5) + ICONST_1 + IOR + ISTORE (5) + GOTO (L3) + LABEL (L2) + ILOAD (3) + IFEQ (L3) + ALOAD (7) + ALOAD (2) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) + ISTORE (4) + ILOAD (4) + TABLESWITCH + -1: L4 + 0: L5 + default: L6 + LABEL (L4) + ICONST_0 + ISTORE (3) + GOTO (L2) + LABEL (L5) ALOAD (7) ALOAD (2) ICONST_0 @@ -90,46 +130,13 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa IOR ISTORE (5) GOTO (L2) - LABEL (L1) - ILOAD (3) - IFEQ (L2) - ALOAD (7) - ALOAD (2) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) - ISTORE (4) - ILOAD (4) - TABLESWITCH - -1: L3 - 0: L4 - default: L5 - LABEL (L3) - ICONST_0 - ISTORE (3) - GOTO (L1) - LABEL (L4) - ALOAD (7) - ALOAD (2) - ICONST_0 - ALOAD (8) - ICONST_0 - AALOAD - CHECKCAST (kotlinx/serialization/DeserializationStrategy) - ALOAD (6) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSerializableElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;) - CHECKCAST (java/util/List) - ASTORE (6) - ILOAD (5) - ICONST_1 - IOR - ISTORE (5) - GOTO (L1) - LABEL (L5) + LABEL (L6) NEW (kotlinx/serialization/UnknownFieldException) DUP ILOAD (4) INVOKESPECIAL (kotlinx/serialization/UnknownFieldException, , (I)V) ATHROW - LABEL (L2) + LABEL (L3) ALOAD (7) ALOAD (2) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) @@ -140,11 +147,12 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ACONST_NULL INVOKESPECIAL (ListOfUsers, , (ILjava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V) ARETURN - LABEL (L6) + LABEL (L7) } public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) + LINENUMBER (12) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (ListOfUsers$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LListOfUsers;) @@ -167,6 +175,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ALOAD (2) LDC (value) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (12) GETSTATIC (ListOfUsers$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (3) ALOAD (1) @@ -180,12 +190,15 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa ALOAD (4) ALOAD (3) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeEncoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) + LABEL (L2) + LINENUMBER (13) RETURN - LABEL (L1) + LABEL (L3) } public void serialize(kotlinx.serialization.encoding.Encoder encoder, java.lang.Object value) { LABEL (L0) + LINENUMBER (12) ALOAD (0) ALOAD (1) ALOAD (2) @@ -231,6 +244,8 @@ public final class ListOfUsers : java/lang/Object { ACONST_NULL INVOKESPECIAL (ListOfUsers$Companion, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) PUTSTATIC (ListOfUsers, Companion, LListOfUsers$Companion;) + LABEL (L0) + LINENUMBER (12) ICONST_1 ANEWARRAY (kotlinx/serialization/KSerializer) ASTORE (0) @@ -320,6 +335,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ DUP INVOKESPECIAL (OptionalUser$$serializer, , ()V) PUTSTATIC (OptionalUser$$serializer, INSTANCE, LOptionalUser$$serializer;) + LABEL (L0) + LINENUMBER (9) NEW (kotlinx/serialization/internal/PluginGeneratedSerialDescriptor) DUP LDC (OptionalUser) @@ -335,6 +352,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ALOAD (0) CHECKCAST (kotlinx/serialization/descriptors/SerialDescriptor) PUTSTATIC (OptionalUser$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) + LABEL (L1) + LINENUMBER (10) RETURN } @@ -348,6 +367,7 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ public final kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) + LINENUMBER (9) ICONST_1 ANEWARRAY (kotlinx/serialization/KSerializer) ASTORE (1) @@ -365,6 +385,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ALOAD (1) LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (9) GETSTATIC (OptionalUser$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) ICONST_1 @@ -379,7 +401,38 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ASTORE (7) ALOAD (7) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSequentially, ()Z) - IFEQ (L1) + IFEQ (L2) + ALOAD (7) + ALOAD (2) + ICONST_0 + GETSTATIC (User$$serializer, INSTANCE, LUser$$serializer;) + CHECKCAST (kotlinx/serialization/DeserializationStrategy) + ALOAD (6) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSerializableElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;) + CHECKCAST (User) + ASTORE (6) + ILOAD (5) + ICONST_1 + IOR + ISTORE (5) + GOTO (L3) + LABEL (L2) + ILOAD (3) + IFEQ (L3) + ALOAD (7) + ALOAD (2) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) + ISTORE (4) + ILOAD (4) + TABLESWITCH + -1: L4 + 0: L5 + default: L6 + LABEL (L4) + ICONST_0 + ISTORE (3) + GOTO (L2) + LABEL (L5) ALOAD (7) ALOAD (2) ICONST_0 @@ -394,44 +447,13 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ IOR ISTORE (5) GOTO (L2) - LABEL (L1) - ILOAD (3) - IFEQ (L2) - ALOAD (7) - ALOAD (2) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) - ISTORE (4) - ILOAD (4) - TABLESWITCH - -1: L3 - 0: L4 - default: L5 - LABEL (L3) - ICONST_0 - ISTORE (3) - GOTO (L1) - LABEL (L4) - ALOAD (7) - ALOAD (2) - ICONST_0 - GETSTATIC (User$$serializer, INSTANCE, LUser$$serializer;) - CHECKCAST (kotlinx/serialization/DeserializationStrategy) - ALOAD (6) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSerializableElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;) - CHECKCAST (User) - ASTORE (6) - ILOAD (5) - ICONST_1 - IOR - ISTORE (5) - GOTO (L1) - LABEL (L5) + LABEL (L6) NEW (kotlinx/serialization/UnknownFieldException) DUP ILOAD (4) INVOKESPECIAL (kotlinx/serialization/UnknownFieldException, , (I)V) ATHROW - LABEL (L2) + LABEL (L3) ALOAD (7) ALOAD (2) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) @@ -442,11 +464,12 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ACONST_NULL INVOKESPECIAL (OptionalUser, , (ILUser;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V) ARETURN - LABEL (L6) + LABEL (L7) } public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) + LINENUMBER (9) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (OptionalUser$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LOptionalUser;) @@ -469,6 +492,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ALOAD (2) LDC (value) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (9) GETSTATIC (OptionalUser$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (3) ALOAD (1) @@ -482,12 +507,15 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ ALOAD (4) ALOAD (3) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeEncoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) + LABEL (L2) + LINENUMBER (10) RETURN - LABEL (L1) + LABEL (L3) } public void serialize(kotlinx.serialization.encoding.Encoder encoder, java.lang.Object value) { LABEL (L0) + LINENUMBER (9) ALOAD (0) ALOAD (1) ALOAD (2) @@ -677,6 +705,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in DUP INVOKESPECIAL (User$$serializer, , ()V) PUTSTATIC (User$$serializer, INSTANCE, LUser$$serializer;) + LABEL (L0) + LINENUMBER (6) NEW (kotlinx/serialization/internal/PluginGeneratedSerialDescriptor) DUP LDC (User) @@ -696,6 +726,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ALOAD (0) CHECKCAST (kotlinx/serialization/descriptors/SerialDescriptor) PUTSTATIC (User$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) + LABEL (L1) + LINENUMBER (7) RETURN } @@ -709,6 +741,7 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in public final kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) + LINENUMBER (6) ICONST_2 ANEWARRAY (kotlinx/serialization/KSerializer) ASTORE (1) @@ -730,6 +763,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ALOAD (1) LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (6) GETSTATIC (User$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) ICONST_1 @@ -746,7 +781,7 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ASTORE (8) ALOAD (8) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSequentially, ()Z) - IFEQ (L1) + IFEQ (L2) ALOAD (8) ALOAD (2) ICONST_0 @@ -756,6 +791,45 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ICONST_1 IOR ISTORE (5) + ALOAD (8) + ALOAD (2) + ICONST_1 + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeStringElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;) + ASTORE (7) + ILOAD (5) + ICONST_2 + IOR + ISTORE (5) + GOTO (L3) + LABEL (L2) + ILOAD (3) + IFEQ (L3) + ALOAD (8) + ALOAD (2) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) + ISTORE (4) + ILOAD (4) + TABLESWITCH + -1: L4 + 0: L5 + 1: L6 + default: L7 + LABEL (L4) + ICONST_0 + ISTORE (3) + GOTO (L2) + LABEL (L5) + ALOAD (8) + ALOAD (2) + ICONST_0 + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeStringElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;) + ASTORE (6) + ILOAD (5) + ICONST_1 + IOR + ISTORE (5) + GOTO (L2) + LABEL (L6) ALOAD (8) ALOAD (2) ICONST_1 @@ -766,52 +840,13 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in IOR ISTORE (5) GOTO (L2) - LABEL (L1) - ILOAD (3) - IFEQ (L2) - ALOAD (8) - ALOAD (2) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) - ISTORE (4) - ILOAD (4) - TABLESWITCH - -1: L3 - 0: L4 - 1: L5 - default: L6 - LABEL (L3) - ICONST_0 - ISTORE (3) - GOTO (L1) - LABEL (L4) - ALOAD (8) - ALOAD (2) - ICONST_0 - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeStringElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;) - ASTORE (6) - ILOAD (5) - ICONST_1 - IOR - ISTORE (5) - GOTO (L1) - LABEL (L5) - ALOAD (8) - ALOAD (2) - ICONST_1 - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeStringElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;) - ASTORE (7) - ILOAD (5) - ICONST_2 - IOR - ISTORE (5) - GOTO (L1) - LABEL (L6) + LABEL (L7) NEW (kotlinx/serialization/UnknownFieldException) DUP ILOAD (4) INVOKESPECIAL (kotlinx/serialization/UnknownFieldException, , (I)V) ATHROW - LABEL (L2) + LABEL (L3) ALOAD (8) ALOAD (2) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) @@ -823,11 +858,12 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ACONST_NULL INVOKESPECIAL (User, , (ILjava/lang/String;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V) ARETURN - LABEL (L7) + LABEL (L8) } public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) + LINENUMBER (6) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (User$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LUser;) @@ -850,6 +886,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ALOAD (2) LDC (value) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (6) GETSTATIC (User$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (3) ALOAD (1) @@ -863,12 +901,15 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in ALOAD (4) ALOAD (3) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeEncoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) + LABEL (L2) + LINENUMBER (7) RETURN - LABEL (L1) + LABEL (L3) } public void serialize(kotlinx.serialization.encoding.Encoder encoder, java.lang.Object value) { LABEL (L0) + LINENUMBER (6) ALOAD (0) ALOAD (1) ALOAD (2) diff --git a/plugins/kotlinx-serialization/testData/codegen/Sealed.asm.fir.txt b/plugins/kotlinx-serialization/testData/codegen/Sealed.asm.fir.txt index f131b8cd159..1d6f5cd96ed 100644 --- a/plugins/kotlinx-serialization/testData/codegen/Sealed.asm.fir.txt +++ b/plugins/kotlinx-serialization/testData/codegen/Sealed.asm.fir.txt @@ -8,6 +8,8 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati DUP INVOKESPECIAL (Container$$serializer, , ()V) PUTSTATIC (Container$$serializer, INSTANCE, LContainer$$serializer;) + LABEL (L0) + LINENUMBER (18) NEW (kotlinx/serialization/internal/PluginGeneratedSerialDescriptor) DUP LDC (Container) @@ -23,6 +25,8 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati ALOAD (0) CHECKCAST (kotlinx/serialization/descriptors/SerialDescriptor) PUTSTATIC (Container$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) + LABEL (L1) + LINENUMBER (19) RETURN } @@ -36,6 +40,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati public final kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) + LINENUMBER (18) INVOKESTATIC (Container, access$get$childSerializers$cp, ()[Lkotlinx/serialization/KSerializer;) ASTORE (1) ICONST_1 @@ -57,6 +62,8 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati ALOAD (1) LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (18) GETSTATIC (Container$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) ICONST_1 @@ -73,7 +80,40 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati ASTORE (8) ALOAD (7) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSequentially, ()Z) - IFEQ (L1) + IFEQ (L2) + ALOAD (7) + ALOAD (2) + ICONST_0 + ALOAD (8) + ICONST_0 + AALOAD + CHECKCAST (kotlinx/serialization/DeserializationStrategy) + ALOAD (6) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSerializableElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;) + CHECKCAST (Result) + ASTORE (6) + ILOAD (5) + ICONST_1 + IOR + ISTORE (5) + GOTO (L3) + LABEL (L2) + ILOAD (3) + IFEQ (L3) + ALOAD (7) + ALOAD (2) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) + ISTORE (4) + ILOAD (4) + TABLESWITCH + -1: L4 + 0: L5 + default: L6 + LABEL (L4) + ICONST_0 + ISTORE (3) + GOTO (L2) + LABEL (L5) ALOAD (7) ALOAD (2) ICONST_0 @@ -90,46 +130,13 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati IOR ISTORE (5) GOTO (L2) - LABEL (L1) - ILOAD (3) - IFEQ (L2) - ALOAD (7) - ALOAD (2) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) - ISTORE (4) - ILOAD (4) - TABLESWITCH - -1: L3 - 0: L4 - default: L5 - LABEL (L3) - ICONST_0 - ISTORE (3) - GOTO (L1) - LABEL (L4) - ALOAD (7) - ALOAD (2) - ICONST_0 - ALOAD (8) - ICONST_0 - AALOAD - CHECKCAST (kotlinx/serialization/DeserializationStrategy) - ALOAD (6) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSerializableElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;) - CHECKCAST (Result) - ASTORE (6) - ILOAD (5) - ICONST_1 - IOR - ISTORE (5) - GOTO (L1) - LABEL (L5) + LABEL (L6) NEW (kotlinx/serialization/UnknownFieldException) DUP ILOAD (4) INVOKESPECIAL (kotlinx/serialization/UnknownFieldException, , (I)V) ATHROW - LABEL (L2) + LABEL (L3) ALOAD (7) ALOAD (2) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) @@ -140,11 +147,12 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati ACONST_NULL INVOKESPECIAL (Container, , (ILResult;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V) ARETURN - LABEL (L6) + LABEL (L7) } public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) + LINENUMBER (18) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (Container$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LContainer;) @@ -180,6 +188,7 @@ public final class Container$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) + LINENUMBER (18) GETSTATIC (Container$$serializer, INSTANCE, LContainer$$serializer;) CHECKCAST (kotlinx/serialization/KSerializer) ARETURN @@ -200,6 +209,8 @@ public final class Container : java/lang/Object { ACONST_NULL INVOKESPECIAL (Container$Companion, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) PUTSTATIC (Container, Companion, LContainer$Companion;) + LABEL (L0) + LINENUMBER (18) ICONST_1 ANEWARRAY (kotlinx/serialization/KSerializer) ASTORE (0) @@ -297,6 +308,7 @@ public final class Result$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) + LINENUMBER (12) ALOAD (0) INVOKESPECIAL (Result$Companion, get$cachedSerializer, ()Lkotlinx/serialization/KSerializer;) ARETURN @@ -357,6 +369,8 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati DUP INVOKESPECIAL (Result$OK$$serializer, , ()V) PUTSTATIC (Result$OK$$serializer, INSTANCE, LResult$OK$$serializer;) + LABEL (L0) + LINENUMBER (14) NEW (kotlinx/serialization/internal/PluginGeneratedSerialDescriptor) DUP LDC (Result.OK) @@ -385,6 +399,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati public final kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) + LINENUMBER (14) ICONST_1 ANEWARRAY (kotlinx/serialization/KSerializer) ASTORE (1) @@ -402,6 +417,8 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati ALOAD (1) LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L1) + LINENUMBER (14) GETSTATIC (Result$OK$$serializer, descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) ICONST_1 @@ -416,7 +433,34 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati ASTORE (7) ALOAD (7) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeSequentially, ()Z) - IFEQ (L1) + IFEQ (L2) + ALOAD (7) + ALOAD (2) + ICONST_0 + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeStringElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;) + ASTORE (6) + ILOAD (5) + ICONST_1 + IOR + ISTORE (5) + GOTO (L3) + LABEL (L2) + ILOAD (3) + IFEQ (L3) + ALOAD (7) + ALOAD (2) + INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) + ISTORE (4) + ILOAD (4) + TABLESWITCH + -1: L4 + 0: L5 + default: L6 + LABEL (L4) + ICONST_0 + ISTORE (3) + GOTO (L2) + LABEL (L5) ALOAD (7) ALOAD (2) ICONST_0 @@ -427,40 +471,13 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati IOR ISTORE (5) GOTO (L2) - LABEL (L1) - ILOAD (3) - IFEQ (L2) - ALOAD (7) - ALOAD (2) - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeElementIndex, (Lkotlinx/serialization/descriptors/SerialDescriptor;)I) - ISTORE (4) - ILOAD (4) - TABLESWITCH - -1: L3 - 0: L4 - default: L5 - LABEL (L3) - ICONST_0 - ISTORE (3) - GOTO (L1) - LABEL (L4) - ALOAD (7) - ALOAD (2) - ICONST_0 - INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, decodeStringElement, (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;) - ASTORE (6) - ILOAD (5) - ICONST_1 - IOR - ISTORE (5) - GOTO (L1) - LABEL (L5) + LABEL (L6) NEW (kotlinx/serialization/UnknownFieldException) DUP ILOAD (4) INVOKESPECIAL (kotlinx/serialization/UnknownFieldException, , (I)V) ATHROW - LABEL (L2) + LABEL (L3) ALOAD (7) ALOAD (2) INVOKEINTERFACE (kotlinx/serialization/encoding/CompositeDecoder, endStructure, (Lkotlinx/serialization/descriptors/SerialDescriptor;)V) @@ -471,11 +488,12 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati ACONST_NULL INVOKESPECIAL (Result$OK, , (ILjava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V) ARETURN - LABEL (L6) + LABEL (L7) } public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) + LINENUMBER (14) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (Result$OK$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LResult$OK;) @@ -511,6 +529,7 @@ public final class Result$OK$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) + LINENUMBER (14) GETSTATIC (Result$OK$$serializer, INSTANCE, LResult$OK$$serializer;) CHECKCAST (kotlinx/serialization/KSerializer) ARETURN @@ -606,10 +625,14 @@ public abstract class Result : java/lang/Object, X { ACONST_NULL INVOKESPECIAL (Result$Companion, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) PUTSTATIC (Result, Companion, LResult$Companion;) + LABEL (L0) + LINENUMBER (12) GETSTATIC (kotlin/LazyThreadSafetyMode, PUBLICATION, Lkotlin/LazyThreadSafetyMode;) INVOKEDYNAMIC (invoke, ()Lkotlin/jvm/functions/Function0;, java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; (6), ()Ljava/lang/Object;, Result._init_$_anonymous_()Lkotlinx/serialization/KSerializer; (6), ()Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlin/LazyKt, lazy, (Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;) PUTSTATIC (Result, $cachedSerializer$delegate, Lkotlin/Lazy;) + LABEL (L1) + LINENUMBER (16) RETURN } @@ -673,6 +696,7 @@ public final class X$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) + LINENUMBER (6) NEW (kotlinx/serialization/SealedClassSerializer) DUP LDC (X) diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.fir.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.fir.kt new file mode 100644 index 00000000000..18a0bea2a6b --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.fir.kt @@ -0,0 +1,20 @@ +package test + +import kotlinx.parcelize.Parcelize +import android.os.Parcelable + +@Parcelize +class Without(val firstName: String, val secondName: String, val age: Int) + +@Parcelize +class With(val firstName: String, val secondName: String, val age: Int) : Parcelable + +interface MyParcelableIntf : Parcelable + +abstract class MyParcelableCl : Parcelable + +@Parcelize +class WithIntfSubtype(val firstName: String, val secondName: String, val age: Int) : MyParcelableIntf + +@Parcelize +class WithClSubtype(val firstName: String, val secondName: String, val age: Int) : MyParcelableCl() diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt index e645a745617..15db9a34601 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL package test import kotlinx.parcelize.Parcelize diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.fir.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.fir.kt new file mode 100644 index 00000000000..c4378a1b3e1 --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.fir.kt @@ -0,0 +1,25 @@ +package test + +import kotlinx.parcelize.Parcelize +import android.os.Parcelable + +@Parcelize +interface Intf : Parcelable + +@Parcelize +object Obj + +class A { + @Parcelize + companion object { + fun foo() {} + } +} + +@Parcelize +enum class Enum { + WHITE, BLACK +} + +@Parcelize +annotation class Anno diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt index 03c50ceb188..c22022d3865 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL package test import kotlinx.parcelize.Parcelize