Do not write version requirements for suspend functions
Previous attempt was at6807ed6642, but it was reverted in7771e5914d(see that commit for the explanation). Now it should be fine to remove these version requirements. No issue reported because it's mostly not a user-visible change. The main effect is that it reduces differences in metadata between K1 and K2, namely it fixes the ValueClass.kt kotlinp test.
This commit is contained in:
committed by
Space Team
parent
06e370b012
commit
9c03dcd230
+2
-22
@@ -478,10 +478,6 @@ class FirElementSerializer private constructor(
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(property))
|
||||
|
||||
if (property.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
@@ -573,10 +569,6 @@ class FirElementSerializer private constructor(
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(function))
|
||||
|
||||
if (function.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
@@ -679,10 +671,6 @@ class FirElementSerializer private constructor(
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(constructor))
|
||||
|
||||
if (constructor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
@@ -1062,11 +1050,6 @@ class FirElementSerializer private constructor(
|
||||
|
||||
private fun useTypeTable(): Boolean = extension.shouldUseTypeTable()
|
||||
|
||||
private fun FirCallableDeclaration.isSuspendOrHasSuspendTypesInSignature(): Boolean {
|
||||
// TODO (types in signature)
|
||||
return this.isSuspend
|
||||
}
|
||||
|
||||
private fun MutableVersionRequirementTable.serializeVersionRequirements(container: FirAnnotationContainer): List<Int> =
|
||||
serializeVersionRequirements(container.annotations)
|
||||
|
||||
@@ -1082,9 +1065,6 @@ class FirElementSerializer private constructor(
|
||||
return writeLanguageVersionRequirement(languageFeature, this)
|
||||
}
|
||||
|
||||
private fun MutableVersionRequirementTable.writeVersionRequirementDependingOnCoroutinesVersion(): Int =
|
||||
writeVersionRequirement(LanguageFeature.ReleaseCoroutines)
|
||||
|
||||
private fun serializeVersionRequirementFromRequireKotlin(annotation: FirAnnotation): ProtoBuf.VersionRequirement.Builder? {
|
||||
val argumentMapping = annotation.argumentMapping.mapping
|
||||
|
||||
@@ -1240,7 +1220,7 @@ class FirElementSerializer private constructor(
|
||||
return serializer
|
||||
}
|
||||
|
||||
fun writeLanguageVersionRequirement(
|
||||
private fun writeLanguageVersionRequirement(
|
||||
languageFeature: LanguageFeature,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
): Int {
|
||||
@@ -1252,7 +1232,7 @@ class FirElementSerializer private constructor(
|
||||
)
|
||||
}
|
||||
|
||||
fun writeVersionRequirement(
|
||||
private fun writeVersionRequirement(
|
||||
major: Int,
|
||||
minor: Int,
|
||||
patch: Int,
|
||||
|
||||
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.serialization
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.builtins.transformSuspendFunctionToRuntimeFunctionType
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
@@ -43,7 +42,6 @@ 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.replaceAnnotations
|
||||
import java.util.*
|
||||
|
||||
@@ -296,10 +294,6 @@ class DescriptorSerializer private constructor(
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
@@ -389,10 +383,6 @@ class DescriptorSerializer private constructor(
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
@@ -421,10 +411,6 @@ class DescriptorSerializer private constructor(
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
@@ -437,24 +423,6 @@ class DescriptorSerializer private constructor(
|
||||
return builder
|
||||
}
|
||||
|
||||
private fun MutableVersionRequirementTable.writeVersionRequirementDependingOnCoroutinesVersion(): Int =
|
||||
writeVersionRequirement(LanguageFeature.ReleaseCoroutines)
|
||||
|
||||
private fun CallableMemberDescriptor.isSuspendOrHasSuspendTypesInSignature(): Boolean {
|
||||
if (this is FunctionDescriptor && isSuspend) return true
|
||||
|
||||
return allTypesFromSignature().any { type -> type.contains(UnwrappedType::isSuspendFunctionTypeOrSubtype) }
|
||||
}
|
||||
|
||||
private fun CallableMemberDescriptor.allTypesFromSignature(): List<KotlinType> {
|
||||
return listOfNotNull(
|
||||
extensionReceiverParameter?.type,
|
||||
returnType,
|
||||
*typeParameters.flatMap { it.upperBounds }.toTypedArray(),
|
||||
*valueParameters.map(ValueParameterDescriptor::getType).toTypedArray()
|
||||
)
|
||||
}
|
||||
|
||||
private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder? {
|
||||
val builder = ProtoBuf.TypeAlias.newBuilder()
|
||||
val local = createChildSerializer(descriptor)
|
||||
|
||||
@@ -12,8 +12,6 @@ class Outer {
|
||||
|
||||
@RequireKotlin("1.3")
|
||||
val x = ""
|
||||
|
||||
suspend fun s() {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
package test
|
||||
|
||||
suspend fun topLevel() {}
|
||||
|
||||
class Foo {
|
||||
constructor(block: suspend () -> Unit)
|
||||
|
||||
suspend fun member() {}
|
||||
}
|
||||
|
||||
fun async1(block: suspend () -> Unit) {}
|
||||
fun (suspend () -> Unit).async2() {}
|
||||
fun async3(): suspend () -> Unit = null!!
|
||||
fun async4(): Map<Int, suspend () -> Unit>? = null
|
||||
|
||||
val (suspend () -> Unit).asyncVal: () -> Unit get() = {}
|
||||
@@ -124,23 +124,6 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() {
|
||||
|
||||
protected abstract fun loadModule(directory: File): ModuleDescriptor
|
||||
|
||||
fun testSuspendFun() {
|
||||
doTest(
|
||||
VersionRequirement.Version(1, 3), DeprecationLevel.ERROR, null, ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION, null,
|
||||
customLanguageVersion = LanguageVersion.KOTLIN_1_3,
|
||||
fqNamesWithRequirements = listOf(
|
||||
"test.topLevel",
|
||||
"test.Foo.member",
|
||||
"test.Foo.<init>",
|
||||
"test.async1",
|
||||
"test.async2",
|
||||
"test.async3",
|
||||
"test.async4",
|
||||
"test.asyncVal"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun testDefinitelyNotNull() {
|
||||
doTest(
|
||||
VersionRequirement.Version(1, 7), DeprecationLevel.ERROR, null, ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION, null,
|
||||
@@ -221,7 +204,6 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() {
|
||||
"test.Outer.Inner.Deep.<init>",
|
||||
"test.Outer.Inner.Deep.f",
|
||||
"test.Outer.Inner.Deep.x",
|
||||
"test.Outer.Inner.Deep.s",
|
||||
"test.Outer.Nested.g",
|
||||
"test.Outer.Companion"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user