From ed6fe15e07c34d5be134a5b2549b99dc15c62db0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 24 Aug 2022 01:46:37 +0200 Subject: [PATCH] Support serialization of builtins with ExperimentalStdlibApi This will allow to remove OptIn and ExperimentalStdlibApi from serialized builtins after bootstrap. #KT-53073 --- .../builtins/BuiltInsSerializerExtension.kt | 35 +++++++++++++++---- .../serialization/AnnotationSerializer.kt | 23 ++++++------ .../builtin-classes/default/kotlin-ranges.txt | 8 ++--- .../builtin-classes/default/kotlin.txt | 34 +++++++++--------- .../builtin-classes/java6/kotlin-ranges.txt | 8 ++--- .../testData/builtin-classes/java6/kotlin.txt | 34 +++++++++--------- .../builtin-classes/java8/kotlin-ranges.txt | 8 ++--- .../testData/builtin-classes/java8/kotlin.txt | 34 +++++++++--------- .../newMethods/kotlin-ranges.txt | 8 ++--- .../builtin-classes/newMethods/kotlin.txt | 34 +++++++++--------- .../AbstractBuiltInsWithJDKMembersTest.kt | 18 +++++++++- 11 files changed, 143 insertions(+), 101 deletions(-) diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt index f02d0633402..96e4ad9f21c 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt @@ -16,25 +16,43 @@ package org.jetbrains.kotlin.serialization.builtins +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass +import org.jetbrains.kotlin.resolve.descriptorUtil.classId import org.jetbrains.kotlin.serialization.AnnotationSerializer import org.jetbrains.kotlin.serialization.KotlinSerializerExtensionBase import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.error.ErrorUtils import org.jetbrains.kotlin.types.typeUtil.isUnresolvedType class BuiltInsSerializerExtension : KotlinSerializerExtensionBase(BuiltInSerializerProtocol) { private val shortNameToClassId = mapOf( "IntRange" to "kotlin/ranges/IntRange", "LongRange" to "kotlin/ranges/LongRange", - "CharRange" to "kotlin/ranges/CharRange" + "CharRange" to "kotlin/ranges/CharRange", + "ExperimentalStdlibApi" to "kotlin/ExperimentalStdlibApi", + ) + + private val ignoredAnnotationShortNames = setOf( + "JvmStatic", "JvmField", "OptIn", ) override fun createAnnotationSerializer(): AnnotationSerializer = object : AnnotationSerializer(stringTable) { - override fun ignoreAnnotation(type: KotlinType): Boolean = - type.presentableName == "JvmStatic" || type.presentableName == "JvmField" || super.ignoreAnnotation(type) + override fun getAnnotationClassId(annotation: AnnotationDescriptor): ClassId? { + val type = annotation.type + val annotationClass = annotation.annotationClass ?: error("Annotation type is not a class: $type") + if (ErrorUtils.isError(annotationClass)) { + if (type.presentableName in ignoredAnnotationShortNames) return null + return ClassId.fromString(resolveUnresolvedType(type)) + } + + return annotationClass.classId + } } override val metadataVersion: BinaryVersion @@ -43,12 +61,17 @@ class BuiltInsSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeriali override fun shouldUseTypeTable(): Boolean = true override fun serializeErrorType(type: KotlinType, builder: ProtoBuf.Type.Builder) { - val className = shortNameToClassId[type.presentableName] - ?: throw UnsupportedOperationException("Unsupported unresolved type: ${type.unwrap()}") - + val className = resolveUnresolvedType(type) builder.className = stringTable.getQualifiedClassNameIndex(className, false) } + private fun resolveUnresolvedType(type: KotlinType): String = + shortNameToClassId[type.presentableName] + ?: throw UnsupportedOperationException( + "Unsupported unresolved type: ${type.unwrap()}.\n" + + "Consider adding it to `BuiltInsSerializerExtension.shortNameToClassId`." + ) + private val KotlinType.presentableName: String get() { val unwrapped = unwrap() diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt index 37a4202d810..d58517e7841 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt @@ -24,20 +24,16 @@ import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument.Value import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument.Value.Type import org.jetbrains.kotlin.metadata.deserialization.Flags +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.constants.* import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass +import org.jetbrains.kotlin.resolve.descriptorUtil.classId import org.jetbrains.kotlin.types.error.ErrorUtils -import org.jetbrains.kotlin.types.KotlinType open class AnnotationSerializer(private val stringTable: DescriptorAwareStringTable) { fun serializeAnnotation(annotation: AnnotationDescriptor): ProtoBuf.Annotation? = ProtoBuf.Annotation.newBuilder().apply { - val annotationClass = annotation.annotationClass ?: error("Annotation type is not a class: ${annotation.type}") - if (ErrorUtils.isError(annotationClass)) { - if (ignoreAnnotation(annotation.type)) return null - error("Unresolved annotation type: ${annotation.type} at ${annotation.source.containingFile}") - } - - id = stringTable.getFqNameIndex(annotationClass) + val classId = getAnnotationClassId(annotation) ?: return null + id = stringTable.getQualifiedClassNameIndex(classId) for ((name, value) in annotation.allValueArguments) { val argument = ProtoBuf.Annotation.Argument.newBuilder() @@ -47,6 +43,15 @@ open class AnnotationSerializer(private val stringTable: DescriptorAwareStringTa } }.build() + protected open fun getAnnotationClassId(annotation: AnnotationDescriptor): ClassId? { + val annotationClass = annotation.annotationClass ?: error("Annotation type is not a class: ${annotation.type}") + if (ErrorUtils.isError(annotationClass)) { + error("Unresolved annotation type: ${annotation.type} at ${annotation.source.containingFile}") + } + + return annotationClass.classId + } + fun valueProto(constant: ConstantValue<*>): Value.Builder = Value.newBuilder().apply { constant.accept(object : AnnotationArgumentVisitor { override fun visitAnnotationValue(value: AnnotationValue, data: Unit) { @@ -175,6 +180,4 @@ open class AnnotationSerializer(private val stringTable: DescriptorAwareStringTa } }, Unit) } - - protected open fun ignoreAnnotation(type: KotlinType): Boolean = false } diff --git a/compiler/testData/builtin-classes/default/kotlin-ranges.txt b/compiler/testData/builtin-classes/default/kotlin-ranges.txt index 5cfe0b5eaf8..7059b6de5fa 100644 --- a/compiler/testData/builtin-classes/default/kotlin-ranges.txt +++ b/compiler/testData/builtin-classes/default/kotlin-ranges.txt @@ -36,7 +36,7 @@ internal final class CharProgressionIterator : kotlin.collections.CharIterator { public final class CharRange : kotlin.ranges.CharProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor CharRange(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Char + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char public open override /*1*/ val endInclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char @@ -104,7 +104,7 @@ internal final class IntProgressionIterator : kotlin.collections.IntIterator { public final class IntRange : kotlin.ranges.IntProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor IntRange(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Int + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int public open override /*1*/ val endInclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int @@ -163,7 +163,7 @@ internal final class LongProgressionIterator : kotlin.collections.LongIterator { public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor LongRange(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Long + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long public open override /*1*/ val endInclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long @@ -186,7 +186,7 @@ public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.Clos } } -@kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public interface OpenEndRange> { +@kotlin.SinceKotlin(version = "1.7") public interface OpenEndRange> { public abstract val endExclusive: T public abstract fun ``(): T public abstract val start: T diff --git a/compiler/testData/builtin-classes/default/kotlin.txt b/compiler/testData/builtin-classes/default/kotlin.txt index 2a48dc559de..e1caeea5084 100644 --- a/compiler/testData/builtin-classes/default/kotlin.txt +++ b/compiler/testData/builtin-classes/default/kotlin.txt @@ -87,10 +87,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable { public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -145,7 +145,7 @@ public final class Char : kotlin.Comparable { @kotlin.internal.IntrinsicConstEvaluation public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Char @kotlin.internal.IntrinsicConstEvaluation public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Char public final operator fun rangeTo(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toByte()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toByte(): kotlin.Byte @kotlin.internal.IntrinsicConstEvaluation public final fun toChar(): kotlin.Char @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toDouble()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toDouble(): kotlin.Double @@ -472,10 +472,10 @@ public final class Int : kotlin.Number, kotlin.Comparable { public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -560,10 +560,10 @@ public final class Long : kotlin.Number, kotlin.Comparable { public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Long @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -710,10 +710,10 @@ public final class Short : kotlin.Number, kotlin.Comparable { public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float diff --git a/compiler/testData/builtin-classes/java6/kotlin-ranges.txt b/compiler/testData/builtin-classes/java6/kotlin-ranges.txt index 5cfe0b5eaf8..7059b6de5fa 100644 --- a/compiler/testData/builtin-classes/java6/kotlin-ranges.txt +++ b/compiler/testData/builtin-classes/java6/kotlin-ranges.txt @@ -36,7 +36,7 @@ internal final class CharProgressionIterator : kotlin.collections.CharIterator { public final class CharRange : kotlin.ranges.CharProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor CharRange(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Char + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char public open override /*1*/ val endInclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char @@ -104,7 +104,7 @@ internal final class IntProgressionIterator : kotlin.collections.IntIterator { public final class IntRange : kotlin.ranges.IntProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor IntRange(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Int + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int public open override /*1*/ val endInclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int @@ -163,7 +163,7 @@ internal final class LongProgressionIterator : kotlin.collections.LongIterator { public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor LongRange(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Long + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long public open override /*1*/ val endInclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long @@ -186,7 +186,7 @@ public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.Clos } } -@kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public interface OpenEndRange> { +@kotlin.SinceKotlin(version = "1.7") public interface OpenEndRange> { public abstract val endExclusive: T public abstract fun ``(): T public abstract val start: T diff --git a/compiler/testData/builtin-classes/java6/kotlin.txt b/compiler/testData/builtin-classes/java6/kotlin.txt index d79a3f6d495..9e93d51c5f9 100644 --- a/compiler/testData/builtin-classes/java6/kotlin.txt +++ b/compiler/testData/builtin-classes/java6/kotlin.txt @@ -89,10 +89,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable, java.io public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -148,7 +148,7 @@ public final class Char : kotlin.Comparable, java.io.Serializable { @kotlin.internal.IntrinsicConstEvaluation public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Char @kotlin.internal.IntrinsicConstEvaluation public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Char public final operator fun rangeTo(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toByte()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toByte(): kotlin.Byte @kotlin.internal.IntrinsicConstEvaluation public final fun toChar(): kotlin.Char @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toDouble()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toDouble(): kotlin.Double @@ -486,10 +486,10 @@ public final class Int : kotlin.Number, kotlin.Comparable, java.io.S public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -575,10 +575,10 @@ public final class Long : kotlin.Number, kotlin.Comparable, java.io public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Long @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -728,10 +728,10 @@ public final class Short : kotlin.Number, kotlin.Comparable, java. public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float diff --git a/compiler/testData/builtin-classes/java8/kotlin-ranges.txt b/compiler/testData/builtin-classes/java8/kotlin-ranges.txt index cea7f2a6350..b3ed37b7ed0 100644 --- a/compiler/testData/builtin-classes/java8/kotlin-ranges.txt +++ b/compiler/testData/builtin-classes/java8/kotlin-ranges.txt @@ -39,7 +39,7 @@ internal final class CharProgressionIterator : kotlin.collections.CharIterator { public final class CharRange : kotlin.ranges.CharProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor CharRange(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Char + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char public open override /*1*/ val endInclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char @@ -112,7 +112,7 @@ internal final class IntProgressionIterator : kotlin.collections.IntIterator { public final class IntRange : kotlin.ranges.IntProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor IntRange(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Int + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int public open override /*1*/ val endInclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int @@ -176,7 +176,7 @@ internal final class LongProgressionIterator : kotlin.collections.LongIterator { public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor LongRange(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Long + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long public open override /*1*/ val endInclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long @@ -201,7 +201,7 @@ public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.Clos } } -@kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public interface OpenEndRange> { +@kotlin.SinceKotlin(version = "1.7") public interface OpenEndRange> { public abstract val endExclusive: T public abstract fun ``(): T public abstract val start: T diff --git a/compiler/testData/builtin-classes/java8/kotlin.txt b/compiler/testData/builtin-classes/java8/kotlin.txt index 455e020e73d..f033bd2c4a7 100644 --- a/compiler/testData/builtin-classes/java8/kotlin.txt +++ b/compiler/testData/builtin-classes/java8/kotlin.txt @@ -89,10 +89,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable, java.io public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -148,7 +148,7 @@ public final class Char : kotlin.Comparable, java.io.Serializable { @kotlin.internal.IntrinsicConstEvaluation public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Char @kotlin.internal.IntrinsicConstEvaluation public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Char public final operator fun rangeTo(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toByte()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toByte(): kotlin.Byte @kotlin.internal.IntrinsicConstEvaluation public final fun toChar(): kotlin.Char @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toDouble()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toDouble(): kotlin.Double @@ -488,10 +488,10 @@ public final class Int : kotlin.Number, kotlin.Comparable, java.io.S public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -577,10 +577,10 @@ public final class Long : kotlin.Number, kotlin.Comparable, java.io public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Long @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -730,10 +730,10 @@ public final class Short : kotlin.Number, kotlin.Comparable, java. public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float diff --git a/compiler/testData/builtin-classes/newMethods/kotlin-ranges.txt b/compiler/testData/builtin-classes/newMethods/kotlin-ranges.txt index 5cfe0b5eaf8..7059b6de5fa 100644 --- a/compiler/testData/builtin-classes/newMethods/kotlin-ranges.txt +++ b/compiler/testData/builtin-classes/newMethods/kotlin-ranges.txt @@ -36,7 +36,7 @@ internal final class CharProgressionIterator : kotlin.collections.CharIterator { public final class CharRange : kotlin.ranges.CharProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor CharRange(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Char + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Char type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char public open override /*1*/ val endInclusive: kotlin.Char public open override /*1*/ fun ``(): kotlin.Char @@ -104,7 +104,7 @@ internal final class IntProgressionIterator : kotlin.collections.IntIterator { public final class IntRange : kotlin.ranges.IntProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor IntRange(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Int + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Int type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int public open override /*1*/ val endInclusive: kotlin.Int public open override /*1*/ fun ``(): kotlin.Int @@ -163,7 +163,7 @@ internal final class LongProgressionIterator : kotlin.collections.LongIterator { public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.ClosedRange, kotlin.ranges.OpenEndRange { /*primary*/ public constructor LongRange(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long) - @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public open override /*1*/ val endExclusive: kotlin.Long + @kotlin.Deprecated(message = "Can throw an exception when it's impossible to represent the value with Long type, for example, when the range includes MAX_VALUE. It's recommended to use 'endInclusive' property that doesn't throw.") @kotlin.SinceKotlin(version = "1.7") public open override /*1*/ val endExclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long public open override /*1*/ val endInclusive: kotlin.Long public open override /*1*/ fun ``(): kotlin.Long @@ -186,7 +186,7 @@ public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.Clos } } -@kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public interface OpenEndRange> { +@kotlin.SinceKotlin(version = "1.7") public interface OpenEndRange> { public abstract val endExclusive: T public abstract fun ``(): T public abstract val start: T diff --git a/compiler/testData/builtin-classes/newMethods/kotlin.txt b/compiler/testData/builtin-classes/newMethods/kotlin.txt index 7f40870693e..161cb411eaf 100644 --- a/compiler/testData/builtin-classes/newMethods/kotlin.txt +++ b/compiler/testData/builtin-classes/newMethods/kotlin.txt @@ -89,10 +89,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable, java.io public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -148,7 +148,7 @@ public final class Char : kotlin.Comparable, java.io.Serializable { @kotlin.internal.IntrinsicConstEvaluation public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Char @kotlin.internal.IntrinsicConstEvaluation public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Char public final operator fun rangeTo(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toByte()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toByte(): kotlin.Byte @kotlin.internal.IntrinsicConstEvaluation public final fun toChar(): kotlin.Char @kotlin.Deprecated(message = "Conversion of Char to Number is deprecated. Use Char.code property instead.", replaceWith = kotlin.ReplaceWith(expression = "this.code.toDouble()", imports = {})) @kotlin.DeprecatedSinceKotlin(warningSince = "1.5") @kotlin.internal.IntrinsicConstEvaluation public final fun toDouble(): kotlin.Double @@ -486,10 +486,10 @@ public final class Int : kotlin.Number, kotlin.Comparable, java.io.S public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -575,10 +575,10 @@ public final class Long : kotlin.Number, kotlin.Comparable, java.io public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Long @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float @@ -728,10 +728,10 @@ public final class Short : kotlin.Number, kotlin.Comparable, java. public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange - @kotlin.SinceKotlin(version = "1.7") @kotlin.ExperimentalStdlibApi public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + @kotlin.SinceKotlin(version = "1.7") public final operator fun rangeUntil(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Byte): kotlin.Int @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Double): kotlin.Double @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.IntrinsicConstEvaluation public final operator fun rem(/*0*/ other: kotlin.Float): kotlin.Float diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt index 461eb2da68b..d9cd67b2c17 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAME import org.jetbrains.kotlin.builtins.StandardNames.COLLECTIONS_PACKAGE_FQ_NAME import org.jetbrains.kotlin.builtins.StandardNames.RANGES_PACKAGE_FQ_NAME import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.packageFragments import org.jetbrains.kotlin.renderer.AnnotationArgumentsRenderingPolicy @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.test.KotlinTestWithEnvironment import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparatorAdaptor +import org.jetbrains.kotlin.types.isError import java.io.File abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() { @@ -60,9 +62,23 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() annotationArgumentsRenderingPolicy = AnnotationArgumentsRenderingPolicy.UNLESS_EMPTY modifiers = DescriptorRendererModifier.ALL excludedTypeAnnotationClasses = setOf(StandardNames.FqNames.unsafeVariance) - annotationFilter = { !it.isSourceAnnotation } + annotationFilter = ::isSignificantAnnotation } ) } + + private fun isSignificantAnnotation(annotation: AnnotationDescriptor): Boolean { + // Do not render annotations with error classifiers. Sometimes builtins reference annotations with missing classes, e.g. @OptIn. + if (annotation.type.isError) return false + + // Do not render SOURCE-retention annotations because they are not serialized to metadata. + if (annotation.isSourceAnnotation) return false + + // Do not render @ExperimentalStdlibApi, because this annotation is serialized via a hack in BuiltInsSerializerExtension, but + // when analyzing sources, it's unresolved (as should be) and thus has error type, so it's filtered out. + if (annotation.fqName?.asString() == "kotlin.ExperimentalStdlibApi") return false + + return true + } } }