diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 8df947fca40..c988c334c89 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -277,8 +277,6 @@ class FirElementSerializer private constructor( extension.serializeClass(klass, builder, versionRequirementTable, this) - writeVersionRequirementForInlineClasses(klass, builder, versionRequirementTable) - if (metDefinitelyNotNullType) { builder.addVersionRequirement( writeLanguageVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes, versionRequirementTable) @@ -484,10 +482,6 @@ class FirElementSerializer private constructor( builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } - if (property.hasInlineClassTypesInSignature()) { - builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses)) - } - if (local.metDefinitelyNotNullType) { builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes)) } @@ -583,10 +577,6 @@ class FirElementSerializer private constructor( builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } - if (function.hasInlineClassTypesInSignature()) { - builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses)) - } - if (local.metDefinitelyNotNullType) { builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes)) } @@ -693,10 +683,6 @@ class FirElementSerializer private constructor( builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } - if (constructor.hasInlineClassTypesInSignature()) { - builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses)) - } - if (local.metDefinitelyNotNullType) { builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes)) } @@ -1076,28 +1062,11 @@ class FirElementSerializer private constructor( private fun useTypeTable(): Boolean = extension.shouldUseTypeTable() - private fun FirDeclaration.hasInlineClassTypesInSignature(): Boolean { - // TODO - return false - } - private fun FirCallableDeclaration.isSuspendOrHasSuspendTypesInSignature(): Boolean { // TODO (types in signature) return this.isSuspend } - private fun writeVersionRequirementForInlineClasses( - klass: FirClass, - builder: ProtoBuf.Class.Builder, - versionRequirementTable: MutableVersionRequirementTable - ) { - if (klass !is FirRegularClass || !klass.isInline && !klass.hasInlineClassTypesInSignature()) return - - builder.addVersionRequirement( - writeLanguageVersionRequirement(LanguageFeature.InlineClasses, versionRequirementTable) - ) - } - private fun MutableVersionRequirementTable.serializeVersionRequirements(container: FirAnnotationContainer): List = serializeVersionRequirements(container.annotations) diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 0833ec96752..fb4a5fdee3f 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -25,8 +25,10 @@ import org.jetbrains.kotlin.metadata.serialization.MutableTypeTable import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.* +import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry +import org.jetbrains.kotlin.resolve.MemberComparator +import org.jetbrains.kotlin.resolve.RequireKotlinConstants import org.jetbrains.kotlin.resolve.calls.components.isActualParameterWithAnyExpectedDefault import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.constants.IntValue @@ -35,13 +37,13 @@ import org.jetbrains.kotlin.resolve.constants.StringValue import org.jetbrains.kotlin.resolve.descriptorUtil.inlineClassRepresentation import org.jetbrains.kotlin.resolve.descriptorUtil.multiFieldValueClassRepresentation import org.jetbrains.kotlin.resolve.descriptorUtil.nonSourceAnnotations +import org.jetbrains.kotlin.resolve.isValueClass import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags import org.jetbrains.kotlin.serialization.deserialization.descriptorVisibility import org.jetbrains.kotlin.serialization.deserialization.memberKind import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.extensions.TypeAttributeTranslators import org.jetbrains.kotlin.types.typeUtil.contains -import org.jetbrains.kotlin.types.typeUtil.immediateSupertypes import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations import java.util.* @@ -193,8 +195,6 @@ class DescriptorSerializer private constructor( plugins.forEach { it.afterClass(classDescriptor, builder, versionRequirementTable, this, extension) } - writeVersionRequirementForInlineClasses(classDescriptor, builder, versionRequirementTable) - if (metDefinitelyNotNullType) { builder.addVersionRequirement( writeLanguageVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes, versionRequirementTable) @@ -207,28 +207,6 @@ class DescriptorSerializer private constructor( return builder } - private fun writeVersionRequirementForInlineClasses( - classDescriptor: ClassDescriptor, - builder: ProtoBuf.Class.Builder, - versionRequirementTable: MutableVersionRequirementTable - ) { - if (!classDescriptor.isInlineClass() && !classDescriptor.hasInlineClassTypesInSignature()) return - - builder.addVersionRequirement( - writeLanguageVersionRequirement(LanguageFeature.InlineClasses, versionRequirementTable) - ) - } - - private fun ClassDescriptor.hasInlineClassTypesInSignature(): Boolean { - for (typeParameter in declaredTypeParameters) { - if (typeParameter.upperBounds.any { it.contains(UnwrappedType::isInlineClassType) }) return true - } - - if (defaultType.immediateSupertypes().any { supertype -> supertype.contains(UnwrappedType::isInlineClassType) }) return true - - return false - } - fun propertyProto(descriptor: PropertyDescriptor): ProtoBuf.Property.Builder? { val builder = ProtoBuf.Property.newBuilder() @@ -322,10 +300,6 @@ class DescriptorSerializer private constructor( builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } - if (descriptor.hasInlineClassTypesInSignature()) { - builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses)) - } - if (local.metDefinitelyNotNullType) { builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes)) } @@ -419,10 +393,6 @@ class DescriptorSerializer private constructor( builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } - if (descriptor.hasInlineClassTypesInSignature()) { - builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses)) - } - if (local.metDefinitelyNotNullType) { builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes)) } @@ -455,10 +425,6 @@ class DescriptorSerializer private constructor( builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } - if (descriptor.hasInlineClassTypesInSignature()) { - builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses)) - } - if (local.metDefinitelyNotNullType) { builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes)) } @@ -480,10 +446,6 @@ class DescriptorSerializer private constructor( return allTypesFromSignature().any { type -> type.contains(UnwrappedType::isSuspendFunctionTypeOrSubtype) } } - private fun CallableMemberDescriptor.hasInlineClassTypesInSignature(): Boolean { - return allTypesFromSignature().any { type -> type.contains(UnwrappedType::isInlineClassType) } - } - private fun CallableMemberDescriptor.allTypesFromSignature(): List { return listOfNotNull( extensionReceiverParameter?.type, @@ -760,9 +722,6 @@ class DescriptorSerializer private constructor( return writeLanguageVersionRequirement(languageFeature, this) } - private fun MutableVersionRequirementTable.writeCompilerVersionRequirement(major: Int, minor: Int, patch: Int): Int = - writeCompilerVersionRequirement(major, minor, patch, this) - // Returns a list of indices into versionRequirementTable, or empty list if there's no @RequireKotlin on the descriptor private fun MutableVersionRequirementTable.serializeVersionRequirements(descriptor: DeclarationDescriptor): List = descriptor.annotations @@ -925,17 +884,6 @@ class DescriptorSerializer private constructor( ) } - fun writeCompilerVersionRequirement( - major: Int, - minor: Int, - patch: Int, - versionRequirementTable: MutableVersionRequirementTable - ): Int = writeVersionRequirement( - major, minor, patch, - ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, - versionRequirementTable - ) - fun writeVersionRequirement( major: Int, minor: Int, diff --git a/compiler/testData/versionRequirement/inlineClassReturnTypeMangled.kt b/compiler/testData/versionRequirement/inlineClassReturnTypeMangled.kt index 1d52e0c3bde..4a61bffc516 100644 --- a/compiler/testData/versionRequirement/inlineClassReturnTypeMangled.kt +++ b/compiler/testData/versionRequirement/inlineClassReturnTypeMangled.kt @@ -5,11 +5,4 @@ inline class IC(val x: Int) class C { fun returnsInlineClassType(): IC = IC(42) val propertyOfInlineClassType: IC get() = IC(42) - - @Suppress("INAPPLICABLE_JVM_NAME") - @JvmName("returnsInlineClassTypeJvmName") - fun returnsInlineClassTypeJvmName(): IC = IC(42) } - -fun returnsInlineClassType(): IC = IC(42) -val propertyOfInlineClassType: IC get() = IC(42) diff --git a/compiler/testData/versionRequirement/inlineClassesAndRelevantDeclarations13.kt b/compiler/testData/versionRequirement/inlineClassesAndRelevantDeclarations13.kt deleted file mode 100644 index fe276694fa0..00000000000 --- a/compiler/testData/versionRequirement/inlineClassesAndRelevantDeclarations13.kt +++ /dev/null @@ -1,17 +0,0 @@ -package test - -inline class IC(val x: String) - -typealias ICAlias = IC - -class Ctor(ic: IC) - -fun simpleFun(f: IC) {} -fun aliasedFun(f: ICAlias) {} - -val simpleProp: IC = IC("") - -fun result(r: List?>) {} - -abstract class Foo : List -interface Bar diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt index be276585535..69ea63f1797 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt @@ -227,21 +227,4 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() { ) ) } - - fun testInlineClassesAndRelevantDeclarations13() { - doTest( - VersionRequirement.Version(1, 3), DeprecationLevel.ERROR, null, ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION, null, - fqNamesWithRequirements = listOf( - "test.IC", - "test.Ctor.", - "test.simpleFun", - "test.aliasedFun", - "test.simpleProp", - "test.result", - "test.Foo", - "test.Bar" - ), - shouldBeSingleRequirement = false - ) - } } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/JvmVersionRequirementTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/JvmVersionRequirementTest.kt index 9b59db8970d..791bf456d89 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/JvmVersionRequirementTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/JvmVersionRequirementTest.kt @@ -112,8 +112,7 @@ class JvmVersionRequirementTest : AbstractVersionRequirementTest() { fun testInlineClassReturnTypeMangled() { // Class members returning inline class values are mangled, - // and have "since 1.4", "require 1.4.30" version requirement along with - // "since 1.3" version requirement for inline class in signature + // and have "language >= 1.4" and "compiler >= 1.4.30" version requirements. doTest( VersionRequirement.Version(1, 4, 0), DeprecationLevel.ERROR, null, LANGUAGE_VERSION, null, fqNamesWithRequirements = listOf( @@ -126,36 +125,11 @@ class JvmVersionRequirementTest : AbstractVersionRequirementTest() { doTest( VersionRequirement.Version(1, 4, 30), DeprecationLevel.ERROR, null, COMPILER_VERSION, null, fqNamesWithRequirements = listOf( - "test.C.propertyOfInlineClassType", "test.C.returnsInlineClassType", - ), - shouldBeSingleRequirement = false, - customLanguageVersion = LanguageVersion.KOTLIN_1_4 - ) - // Top-level functions and properties returning inline class values are NOT mangled, - // and have "since 1.3" version requirement for inline class in signature only. - doTest( - VersionRequirement.Version(1, 3, 0), DeprecationLevel.ERROR, null, LANGUAGE_VERSION, null, - fqNamesWithRequirements = listOf( - "test.propertyOfInlineClassType", - "test.returnsInlineClassType", - ), - shouldBeSingleRequirement = false, - customLanguageVersion = LanguageVersion.KOTLIN_1_4 - ) - // In Kotlin 1.3, all functions and properties returning inline class values are NOT mangled, - // and have "since 1.3" version requirement for inline class in signature only. - doTest( - VersionRequirement.Version(1, 3, 0), DeprecationLevel.ERROR, null, LANGUAGE_VERSION, null, - fqNamesWithRequirements = listOf( - "test.propertyOfInlineClassType", "test.C.propertyOfInlineClassType", - "test.C.returnsInlineClassTypeJvmName", - "test.returnsInlineClassType", - "test.C.returnsInlineClassType" ), - shouldBeSingleRequirement = true, - customLanguageVersion = LanguageVersion.KOTLIN_1_3 + customLanguageVersion = LanguageVersion.KOTLIN_1_4, + shouldBeSingleRequirement = false, ) } diff --git a/libraries/tools/kotlinp/testData/Annotations.txt b/libraries/tools/kotlinp/testData/Annotations.txt index 433b46073ac..55f9de54320 100644 --- a/libraries/tools/kotlinp/testData/Annotations.txt +++ b/libraries/tools/kotlinp/testData/Annotations.txt @@ -2,7 +2,6 @@ // ------------------------------------------ public final annotation class A : kotlin/Annotation { - // requires language version 1.3.0 (level=ERROR) // signature: (ZCBSIFJDLkotlin/UInt;Lkotlin/UByte;Lkotlin/UShort;Lkotlin/ULong;Lkotlin/UInt;Lkotlin/UByte;Lkotlin/UShort;Lkotlin/ULong;[Z[C[B[S[I[F[J[DLjava/lang/String;Lkotlin/annotation/AnnotationTarget;Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;LB;Lkotlin/Array;Lkotlin/Array;Lkotlin/Array;Lkotlin/Array;)V public constructor(z: kotlin/Boolean, c: kotlin/Char, b: kotlin/Byte, s: kotlin/Short, i: kotlin/Int, f: kotlin/Float, j: kotlin/Long, d: kotlin/Double, ui: kotlin/UInt, ub: kotlin/UByte, us: kotlin/UShort, ul: kotlin/ULong, ui_max: kotlin/UInt, ub_max: kotlin/UByte, us_max: kotlin/UShort, ul_max: kotlin/ULong, za: kotlin/BooleanArray, ca: kotlin/CharArray, ba: kotlin/ByteArray, sa: kotlin/ShortArray, ia: kotlin/IntArray, fa: kotlin/FloatArray, ja: kotlin/LongArray, da: kotlin/DoubleArray, str: kotlin/String, enum: kotlin/annotation/AnnotationTarget, klass: kotlin/reflect/KClass<*>, klass2: kotlin/reflect/KClass<*>, anno: B, stra: kotlin/Array, ka: kotlin/Array>, ea: kotlin/Array, aa: kotlin/Array) @@ -98,56 +97,48 @@ public final annotation class A : kotlin/Annotation { public final val stra: kotlin/Array public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: ub()B public final val ub: kotlin/UByte public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: ub_max()B public final val ub_max: kotlin/UByte public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: ui()I public final val ui: kotlin/UInt public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: ui_max()I public final val ui_max: kotlin/UInt public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: ul()J public final val ul: kotlin/ULong public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: ul_max()J public final val ul_max: kotlin/ULong public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: us()S public final val us: kotlin/UShort public final get - // requires language version 1.3.0 (level=ERROR) // requires compiler version 1.4.30 (level=ERROR) // requires language version 1.4.0 (level=ERROR) // getter: us_max()S diff --git a/libraries/tools/kotlinp/testData/ValueClass.txt b/libraries/tools/kotlinp/testData/ValueClass.txt index 6392bcbf063..36754899dd6 100644 --- a/libraries/tools/kotlinp/testData/ValueClass.txt +++ b/libraries/tools/kotlinp/testData/ValueClass.txt @@ -1,9 +1,7 @@ // A.class // ------------------------------------------ -// requires language version 1.3.0 (level=ERROR) public final value class A : kotlin/Any { - // requires language version 1.3.0 (level=ERROR) // signature: constructor-impl(Ljava/lang/Integer;)Ljava/lang/Integer; public constructor(i: kotlin/Int?) @@ -28,10 +26,8 @@ public final value class A : kotlin/Any { } // B.class // ------------------------------------------ -// requires language version 1.3.0 (level=ERROR) public final value class B : kotlin/Any { - // requires language version 1.3.0 (level=ERROR) // requires language version 1.3.0 (level=ERROR) // signature: constructor-impl(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; public constructor(f: suspend kotlin/Function1, kotlin/Any?>) @@ -58,10 +54,8 @@ public final value class B : kotlin/Any { } // Z.class // ------------------------------------------ -// requires language version 1.3.0 (level=ERROR) public final value class Z : kotlin/Any { - // requires language version 1.3.0 (level=ERROR) // signature: constructor-impl(Ljava/lang/String;)Ljava/lang/String; public constructor(s: kotlin/String)