Rename inline class -> @JvmInline value class in stdlib and compiler

This commit is contained in:
Ilmir Usmanov
2021-02-18 15:01:15 +01:00
parent 62123d72e2
commit d67e4f0c48
27 changed files with 103 additions and 35 deletions
@@ -11,7 +11,8 @@ import org.jetbrains.kotlin.fir.PrivateForInline
* [Map] which allows store null values
*/
@OptIn(PrivateForInline::class)
internal inline class NullableMap<KEY, VALUE>(private val map: MutableMap<KEY, Any> = HashMap()) {
@JvmInline
internal value class NullableMap<KEY, VALUE>(private val map: MutableMap<KEY, Any> = HashMap()) {
/**
* Get value if it is present in map
@@ -5,7 +5,8 @@
package org.jetbrains.kotlin.backend.common.serialization.encodings
inline class BinaryCoordinates(private val decoded: BinaryLattice) {
@JvmInline
value class BinaryCoordinates(private val decoded: BinaryLattice) {
private fun diff(): Int = decoded.second
val startOffset: Int get() = decoded.first
@@ -17,7 +17,8 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptorVisibility
import org.jetbrains.kotlin.serialization.deserialization.memberKind
import org.jetbrains.kotlin.types.Variance
inline class ClassFlags(val flags: Long) {
@JvmInline
value class ClassFlags(val flags: Long) {
val modality: Modality get() = ProtoEnumFlags.modality(IrFlags.MODALITY.get(flags.toInt()))
val visibility: DescriptorVisibility get() = ProtoEnumFlags.descriptorVisibility(IrFlags.VISIBILITY.get(flags.toInt()))
@@ -50,7 +51,8 @@ inline class ClassFlags(val flags: Long) {
}
}
inline class FunctionFlags(val flags: Long) {
@JvmInline
value class FunctionFlags(val flags: Long) {
val modality: Modality get() = ProtoEnumFlags.modality(IrFlags.MODALITY.get(flags.toInt()))
val visibility: DescriptorVisibility get() = ProtoEnumFlags.descriptorVisibility(IrFlags.VISIBILITY.get(flags.toInt()))
@@ -100,7 +102,8 @@ inline class FunctionFlags(val flags: Long) {
}
}
inline class PropertyFlags(val flags: Long) {
@JvmInline
value class PropertyFlags(val flags: Long) {
val modality: Modality get() = ProtoEnumFlags.modality(IrFlags.MODALITY.get(flags.toInt()))
val visibility: DescriptorVisibility get() = ProtoEnumFlags.descriptorVisibility(IrFlags.VISIBILITY.get(flags.toInt()))
@@ -138,7 +141,8 @@ inline class PropertyFlags(val flags: Long) {
}
}
inline class ValueParameterFlags(val flags: Long) {
@JvmInline
value class ValueParameterFlags(val flags: Long) {
val isCrossInline: Boolean get() = IrFlags.IS_CROSSINLINE.get(flags.toInt())
val isNoInline: Boolean get() = IrFlags.IS_NOINLINE.get(flags.toInt())
@@ -163,7 +167,8 @@ inline class ValueParameterFlags(val flags: Long) {
}
}
inline class TypeAliasFlags(val flags: Long) {
@JvmInline
value class TypeAliasFlags(val flags: Long) {
val visibility: DescriptorVisibility get() = ProtoEnumFlags.descriptorVisibility(IrFlags.VISIBILITY.get(flags.toInt()))
val isActual: Boolean get() = IrFlags.IS_ACTUAL.get(flags.toInt())
@@ -180,7 +185,8 @@ inline class TypeAliasFlags(val flags: Long) {
}
}
inline class TypeParameterFlags(val flags: Long) {
@JvmInline
value class TypeParameterFlags(val flags: Long) {
val variance: Variance get() = ProtoEnumFlags.variance(IrFlags.VARIANCE.get(flags.toInt()))
val isReified: Boolean get() = IrFlags.IS_REIFIED.get(flags.toInt())
@@ -197,7 +203,8 @@ inline class TypeParameterFlags(val flags: Long) {
}
}
inline class FieldFlags(val flags: Long) {
@JvmInline
value class FieldFlags(val flags: Long) {
val visibility: DescriptorVisibility get() = ProtoEnumFlags.descriptorVisibility(IrFlags.VISIBILITY.get(flags.toInt()))
val isFinal: Boolean get() = IrFlags.IS_FINAL.get(flags.toInt())
@@ -216,7 +223,8 @@ inline class FieldFlags(val flags: Long) {
}
}
inline class LocalVariableFlags(val flags: Long) {
@JvmInline
value class LocalVariableFlags(val flags: Long) {
val isVar: Boolean get() = IrFlags.IS_LOCAL_VAR.get(flags.toInt())
val isConst: Boolean get() = IrFlags.IS_LOCAL_CONST.get(flags.toInt())
@@ -11,7 +11,8 @@ package org.jetbrains.kotlin.backend.common.serialization.encodings
* j = j1.j2.j3.j4
* ij -> i1.j1.i2.j2.i3.j3.i4.j4
*/
inline class BinaryLattice(private val code: Long) {
@JvmInline
value class BinaryLattice(private val code: Long) {
val first: Int get() = decodeInt(code)
val second: Int get() = decodeInt(code ushr 1)
@@ -5,7 +5,8 @@
package org.jetbrains.kotlin.backend.common.serialization.encodings
inline class BinaryNameAndType(private val decoded: BinaryLattice) {
@JvmInline
value class BinaryNameAndType(private val decoded: BinaryLattice) {
val nameIndex: Int get() = decoded.first
val typeIndex: Int get() = decoded.second
@@ -5,7 +5,8 @@
package org.jetbrains.kotlin.backend.common.serialization.encodings
inline class BinarySymbolData(val code: Long) {
@JvmInline
value class BinarySymbolData(val code: Long) {
enum class SymbolKind {
FUNCTION_SYMBOL,
CONSTRUCTOR_SYMBOL,
@@ -7,7 +7,8 @@ package org.jetbrains.kotlin.backend.common.serialization.encodings
import org.jetbrains.kotlin.types.Variance
inline class BinaryTypeProjection(val code: Long) {
@JvmInline
value class BinaryTypeProjection(val code: Long) {
private fun varianceId(): Int = (code and 0x3L).toInt() - 1
@@ -7,4 +7,7 @@ This mode is not recommended for production use,
as no stability/compatibility guarantees are given on
compiler or generated code. Use it at your own risk!
OK
compiler/testData/cli/jvm/inlineClass.kt:1:1: warning: inline classes are deprecated in favor of value classes
inline class Foo(val x: Int)
^
OK
@@ -7,7 +7,7 @@ This mode is not recommended for production use,
as no stability/compatibility guarantees are given on
compiler or generated code. Use it at your own risk!
compiler/testData/cli/jvm/inlineClass.kt:1:1: error: the feature "inline classes" is disabled
compiler/testData/cli/jvm/inlineClass.kt:1:1: warning: inline classes are deprecated in favor of value classes
inline class Foo(val x: Int)
^
COMPILATION_ERROR
OK
+2 -2
View File
@@ -1,10 +1,10 @@
-- Common --
Exit code: OK
Output:
compiler/testData/multiplatform/inlineClasses/common.kt:3:8: warning: the feature "inline classes" is experimental
compiler/testData/multiplatform/inlineClasses/common.kt:3:8: warning: inline classes are deprecated in favor of value classes
expect inline class Foo1(val x: Int)
^
compiler/testData/multiplatform/inlineClasses/common.kt:4:8: warning: the feature "inline classes" is experimental
compiler/testData/multiplatform/inlineClasses/common.kt:4:8: warning: inline classes are deprecated in favor of value classes
expect inline class Foo2(val y: String)
^
@@ -131,7 +131,8 @@ enum class TableTimeUnit(val postfixText: String, val nsMultiplier: Double, val
}
}
inline class TableTimeUnitConversion(val value: Double) {
@JvmInline
value class TableTimeUnitConversion(val value: Double) {
infix fun to(dest: TableTimeUnit): Double {
return value * dest.nsMultiplier
}
+8 -2
View File
@@ -40,11 +40,13 @@ class UnsignedTypeGenerator(val type: UnsignedType, out: PrintWriter) : BuiltIns
override fun generateBody() {
out.println("import kotlin.experimental.*")
out.println("import kotlin.jvm.*")
out.println()
out.println("@SinceKotlin(\"1.3\")")
out.println("@ExperimentalUnsignedTypes")
out.println("public inline class $className @PublishedApi internal constructor(@PublishedApi internal val data: $storageType) : Comparable<$className> {")
out.println("@JvmInline")
out.println("public value class $className @PublishedApi internal constructor(@PublishedApi internal val data: $storageType) : Comparable<$className> {")
out.println()
out.println(""" companion object {
/**
@@ -419,9 +421,13 @@ class UnsignedArrayGenerator(val type: UnsignedType, out: PrintWriter) : BuiltIn
val storageElementType = type.asSigned.capitalized
val storageArrayType = storageElementType + "Array"
override fun generateBody() {
out.println("import kotlin.jvm.*")
out.println()
out.println("@SinceKotlin(\"1.3\")")
out.println("@ExperimentalUnsignedTypes")
out.println("public inline class $arrayType")
out.println("@JvmInline")
out.println("public value class $arrayType")
out.println("@PublishedApi")
out.println("internal constructor(@PublishedApi internal val storage: $storageArrayType) : Collection<$elementType> {")
out.println(
+1 -1
View File
@@ -14,4 +14,4 @@ suspend fun bar(): Unit {
println(a + b)
}
// LINES: 39 4 4 4 7 5 5 45 45 5 91 45 5 5 6 4 4 4 9 15 9 9 9 * 9 15 10 10 11 11 11 11 11 * 11 12 12 13 13 13 13 13 13 13 14 14 * 9 15 9 9 9 9
// LINES: 39 4 4 4 7 5 5 45 45 5 93 45 5 5 6 4 4 4 9 15 9 9 9 * 9 15 10 10 11 11 11 11 11 * 11 12 12 13 13 13 13 13 13 13 14 14 * 9 15 9 9 9 9
+10 -1
View File
@@ -1995,6 +1995,7 @@ public final annotation class RequiresOptIn : kotlin.Annotation {
}
@kotlin.SinceKotlin(version = "1.3")
@kotlin.jvm.JvmInline
public final inline class Result<out T> : kotlin.io.Serializable {
public final val isFailure: kotlin.Boolean { get; }
@@ -2242,6 +2243,7 @@ public final data class Triple<out A, out B, out C> : kotlin.io.Serializable {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UByte : kotlin.Comparable<kotlin.UByte> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.UByte): kotlin.UByte
@@ -2385,6 +2387,7 @@ public final inline class UByte : kotlin.Comparable<kotlin.UByte> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UByteArray : kotlin.collections.Collection<kotlin.UByte> {
public constructor UByteArray(size: kotlin.Int)
@@ -2411,6 +2414,7 @@ public final inline class UByteArray : kotlin.collections.Collection<kotlin.UByt
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UInt : kotlin.Comparable<kotlin.UInt> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.UInt): kotlin.UInt
@@ -2560,6 +2564,7 @@ public final inline class UInt : kotlin.Comparable<kotlin.UInt> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UIntArray : kotlin.collections.Collection<kotlin.UInt> {
public constructor UIntArray(size: kotlin.Int)
@@ -2586,6 +2591,7 @@ public final inline class UIntArray : kotlin.collections.Collection<kotlin.UInt>
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class ULong : kotlin.Comparable<kotlin.ULong> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.ULong): kotlin.ULong
@@ -2735,6 +2741,7 @@ public final inline class ULong : kotlin.Comparable<kotlin.ULong> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class ULongArray : kotlin.collections.Collection<kotlin.ULong> {
public constructor ULongArray(size: kotlin.Int)
@@ -2761,6 +2768,7 @@ public final inline class ULongArray : kotlin.collections.Collection<kotlin.ULon
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UShort : kotlin.Comparable<kotlin.UShort> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.UShort): kotlin.UShort
@@ -2904,6 +2912,7 @@ public final inline class UShort : kotlin.Comparable<kotlin.UShort> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UShortArray : kotlin.collections.Collection<kotlin.UShort> {
public constructor UShortArray(size: kotlin.Int)
@@ -2971,4 +2980,4 @@ public final annotation class UseExperimental : kotlin.Annotation {
public constructor UseExperimental(vararg markerClass: kotlin.reflect.KClass<out kotlin.Annotation>)
public final val markerClass: kotlin.Array<out kotlin.reflect.KClass<out kotlin.Annotation>> { get; }
}
}
@@ -158,6 +158,7 @@ public abstract class AbstractLongTimeSource : kotlin.time.TimeSource {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.jvm.JvmInline
public final inline class Duration : kotlin.Comparable<kotlin.time.Duration> {
public final val absoluteValue: kotlin.time.Duration { get; }
+10 -1
View File
@@ -1985,6 +1985,7 @@ public final annotation class RequiresOptIn : kotlin.Annotation {
}
@kotlin.SinceKotlin(version = "1.3")
@kotlin.jvm.JvmInline
public final inline class Result<out T> : kotlin.io.Serializable {
public final val isFailure: kotlin.Boolean { get; }
@@ -2247,6 +2248,7 @@ public final data class Triple<out A, out B, out C> : kotlin.io.Serializable {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UByte : kotlin.Comparable<kotlin.UByte> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.UByte): kotlin.UByte
@@ -2390,6 +2392,7 @@ public final inline class UByte : kotlin.Comparable<kotlin.UByte> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UByteArray : kotlin.collections.Collection<kotlin.UByte> {
public constructor UByteArray(size: kotlin.Int)
@@ -2416,6 +2419,7 @@ public final inline class UByteArray : kotlin.collections.Collection<kotlin.UByt
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UInt : kotlin.Comparable<kotlin.UInt> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.UInt): kotlin.UInt
@@ -2565,6 +2569,7 @@ public final inline class UInt : kotlin.Comparable<kotlin.UInt> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UIntArray : kotlin.collections.Collection<kotlin.UInt> {
public constructor UIntArray(size: kotlin.Int)
@@ -2591,6 +2596,7 @@ public final inline class UIntArray : kotlin.collections.Collection<kotlin.UInt>
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class ULong : kotlin.Comparable<kotlin.ULong> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.ULong): kotlin.ULong
@@ -2740,6 +2746,7 @@ public final inline class ULong : kotlin.Comparable<kotlin.ULong> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class ULongArray : kotlin.collections.Collection<kotlin.ULong> {
public constructor ULongArray(size: kotlin.Int)
@@ -2766,6 +2773,7 @@ public final inline class ULongArray : kotlin.collections.Collection<kotlin.ULon
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UShort : kotlin.Comparable<kotlin.UShort> {
@kotlin.internal.InlineOnly
public final inline infix fun and(other: kotlin.UShort): kotlin.UShort
@@ -2909,6 +2917,7 @@ public final inline class UShort : kotlin.Comparable<kotlin.UShort> {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.ExperimentalUnsignedTypes
@kotlin.jvm.JvmInline
public final inline class UShortArray : kotlin.collections.Collection<kotlin.UShort> {
public constructor UShortArray(size: kotlin.Int)
@@ -2972,4 +2981,4 @@ public final annotation class UseExperimental : kotlin.Annotation {
public constructor UseExperimental(vararg markerClass: kotlin.reflect.KClass<out kotlin.Annotation>)
public final val markerClass: kotlin.Array<out kotlin.reflect.KClass<out kotlin.Annotation>> { get; }
}
}
+1
View File
@@ -158,6 +158,7 @@ public abstract class AbstractLongTimeSource : kotlin.time.TimeSource {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.jvm.JvmInline
public final inline class Duration : kotlin.Comparable<kotlin.time.Duration> {
public final val absoluteValue: kotlin.time.Duration { get; }
+3 -1
View File
@@ -6,6 +6,7 @@
package kotlin.time
import kotlin.contracts.*
import kotlin.jvm.JvmInline
import kotlin.math.abs
@OptIn(ExperimentalTime::class)
@@ -27,7 +28,8 @@ private inline val storageUnit get() = DurationUnit.NANOSECONDS
*/
@SinceKotlin("1.3")
@ExperimentalTime
public inline class Duration internal constructor(internal val value: Double) : Comparable<Duration> {
@JvmInline
public value class Duration internal constructor(internal val value: Double) : Comparable<Duration> {
init {
require(!value.isNaN()) { "Duration value cannot be NaN." }
}
+3 -1
View File
@@ -10,6 +10,7 @@ package kotlin
import kotlin.contracts.*
import kotlin.internal.InlineOnly
import kotlin.jvm.JvmField
import kotlin.jvm.JvmInline
import kotlin.jvm.JvmName
/**
@@ -17,7 +18,8 @@ import kotlin.jvm.JvmName
* or a failure with an arbitrary [Throwable] exception.
*/
@SinceKotlin("1.3")
public inline class Result<out T> @PublishedApi internal constructor(
@JvmInline
public value class Result<out T> @PublishedApi internal constructor(
@PublishedApi
internal val value: Any?
) : Serializable {
@@ -8,10 +8,12 @@
package kotlin
import kotlin.experimental.*
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class UByte @PublishedApi internal constructor(@PublishedApi internal val data: Byte) : Comparable<UByte> {
@JvmInline
public value class UByte @PublishedApi internal constructor(@PublishedApi internal val data: Byte) : Comparable<UByte> {
companion object {
/**
@@ -7,9 +7,12 @@
package kotlin
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class UByteArray
@JvmInline
public value class UByteArray
@PublishedApi
internal constructor(@PublishedApi internal val storage: ByteArray) : Collection<UByte> {
+3 -1
View File
@@ -8,10 +8,12 @@
package kotlin
import kotlin.experimental.*
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class UInt @PublishedApi internal constructor(@PublishedApi internal val data: Int) : Comparable<UInt> {
@JvmInline
public value class UInt @PublishedApi internal constructor(@PublishedApi internal val data: Int) : Comparable<UInt> {
companion object {
/**
@@ -7,9 +7,12 @@
package kotlin
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class UIntArray
@JvmInline
public value class UIntArray
@PublishedApi
internal constructor(@PublishedApi internal val storage: IntArray) : Collection<UInt> {
@@ -8,10 +8,12 @@
package kotlin
import kotlin.experimental.*
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class ULong @PublishedApi internal constructor(@PublishedApi internal val data: Long) : Comparable<ULong> {
@JvmInline
public value class ULong @PublishedApi internal constructor(@PublishedApi internal val data: Long) : Comparable<ULong> {
companion object {
/**
@@ -7,9 +7,12 @@
package kotlin
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class ULongArray
@JvmInline
public value class ULongArray
@PublishedApi
internal constructor(@PublishedApi internal val storage: LongArray) : Collection<ULong> {
@@ -8,10 +8,12 @@
package kotlin
import kotlin.experimental.*
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class UShort @PublishedApi internal constructor(@PublishedApi internal val data: Short) : Comparable<UShort> {
@JvmInline
public value class UShort @PublishedApi internal constructor(@PublishedApi internal val data: Short) : Comparable<UShort> {
companion object {
/**
@@ -7,9 +7,12 @@
package kotlin
import kotlin.jvm.*
@SinceKotlin("1.3")
@ExperimentalUnsignedTypes
public inline class UShortArray
@JvmInline
public value class UShortArray
@PublishedApi
internal constructor(@PublishedApi internal val storage: ShortArray) : Collection<UShort> {