FIR: introduce inline classes checks
This commit is contained in:
committed by
Mikhail Glukhikh
parent
9cc8f44390
commit
f6e564ffa6
+1
-1
@@ -14,4 +14,4 @@ value object InlineObject
|
||||
value enum class InlineEnum
|
||||
|
||||
@JvmInline
|
||||
value class NotVal(x: Int)
|
||||
value class NotVal(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>x: Int<!>)
|
||||
|
||||
+4
-4
@@ -26,9 +26,9 @@ object VarObject {
|
||||
|
||||
@JvmInline
|
||||
value class Z(val data: Int) {
|
||||
val testVal by Val()
|
||||
var testVar by Var()
|
||||
val testVal by <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>Val()<!>
|
||||
var testVar by <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>Var()<!>
|
||||
|
||||
val testValBySingleton by ValObject
|
||||
var testVarBySingleton by VarObject
|
||||
val testValBySingleton by <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>ValObject<!>
|
||||
var testVarBySingleton by <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>VarObject<!>
|
||||
}
|
||||
|
||||
Vendored
+4
-4
@@ -19,13 +19,13 @@ value class Foo(val x: Int) : A, B {
|
||||
val a0
|
||||
get() = 0
|
||||
|
||||
val a1 = 0
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>val a1<!> = 0
|
||||
|
||||
var a2: Int
|
||||
get() = 1
|
||||
set(value) {}
|
||||
|
||||
var a3: Int = 0
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>var a3: Int<!> = 0
|
||||
get() = 1
|
||||
set(value) {
|
||||
field = value
|
||||
@@ -34,7 +34,7 @@ value class Foo(val x: Int) : A, B {
|
||||
override val goodSize: Int
|
||||
get() = 0
|
||||
|
||||
override val badSize: Int = 0
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>override val badSize: Int<!> = 0
|
||||
|
||||
lateinit var lateinitProperty: String
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>lateinit var lateinitProperty: String<!>
|
||||
}
|
||||
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
// !SKIP_JAVAC
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
package kotlin.jvm
|
||||
|
||||
annotation class JvmInline
|
||||
|
||||
@JvmInline
|
||||
value class Test1(val x: Test1)
|
||||
|
||||
@JvmInline
|
||||
value class Test2A(val x: Test2B)
|
||||
@JvmInline
|
||||
value class Test2B(val x: Test2A)
|
||||
|
||||
@JvmInline
|
||||
value class Test3A(val x: Test3B)
|
||||
@JvmInline
|
||||
value class Test3B(val x: Test3C)
|
||||
@JvmInline
|
||||
value class Test3C(val x: Test3A)
|
||||
|
||||
@JvmInline
|
||||
value class TestNullable(val x: TestNullable?)
|
||||
|
||||
@JvmInline
|
||||
value class TestRecursionInTypeArguments(val x: List<TestRecursionInTypeArguments>)
|
||||
|
||||
@JvmInline
|
||||
value class TestRecursionInArray(val x: Array<TestRecursionInArray>)
|
||||
|
||||
@JvmInline
|
||||
value class TestRecursionInUpperBounds<T : TestRecursionInUpperBounds<T>>(val x: T)
|
||||
|
||||
@JvmInline
|
||||
value class Id<T>(val x: T)
|
||||
@JvmInline
|
||||
value class TestRecursionThroughId(val x: Id<TestRecursionThroughId>)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !SKIP_JAVAC
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
|
||||
compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.fir.kt
Vendored
+18
-18
@@ -8,34 +8,34 @@ annotation class JvmInline
|
||||
|
||||
@JvmInline
|
||||
value class IC1(val x: Any) {
|
||||
fun box() {}
|
||||
fun box(x: Any) {}
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>() {}
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>(x: Any) {}
|
||||
|
||||
fun unbox() {}
|
||||
fun unbox(x: Any) {}
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>unbox<!>() {}
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>unbox<!>(x: Any) {}
|
||||
|
||||
override fun equals(other: Any?): Boolean = true
|
||||
override fun hashCode(): Int = 0
|
||||
override fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>equals<!>(other: Any?): Boolean = true
|
||||
override fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>hashCode<!>(): Int = 0
|
||||
}
|
||||
|
||||
@JvmInline
|
||||
value class IC2(val x: Any) {
|
||||
fun box(x: Any) {}
|
||||
fun box(): Any = TODO()
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>(x: Any) {}
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>(): Any = TODO()
|
||||
|
||||
fun unbox(x: Any) {}
|
||||
fun unbox(): Any = TODO()
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>unbox<!>(x: Any) {}
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>unbox<!>(): Any = TODO()
|
||||
|
||||
fun equals(my: Any, other: Any): Boolean = true
|
||||
fun hashCode(a: Any): Int = 0
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>equals<!>(my: Any, other: Any): Boolean = true
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>hashCode<!>(a: Any): Int = 0
|
||||
}
|
||||
|
||||
@JvmInline
|
||||
value class IC3(val x: Any) {
|
||||
fun box(x: Any): Any = TODO()
|
||||
fun unbox(x: Any): Any = TODO()
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>(x: Any): Any = TODO()
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>unbox<!>(x: Any): Any = TODO()
|
||||
|
||||
fun equals(): Boolean = true
|
||||
fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>equals<!>(): Boolean = true
|
||||
}
|
||||
|
||||
interface WithBox {
|
||||
@@ -44,12 +44,12 @@ interface WithBox {
|
||||
|
||||
@JvmInline
|
||||
value class IC4(val s: String) : WithBox {
|
||||
override fun box(): String = ""
|
||||
override fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>(): String = ""
|
||||
}
|
||||
|
||||
@JvmInline
|
||||
value class IC5(val a: String) {
|
||||
constructor(i: Int) : this(i.toString()) {
|
||||
constructor(i: Int) : this(i.toString()) <!SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS!>{
|
||||
TODO("something")
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
Vendored
-21
@@ -1,21 +0,0 @@
|
||||
// !SKIP_JAVAC
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
package kotlin.jvm
|
||||
|
||||
annotation class JvmInline
|
||||
|
||||
abstract class AbstractBaseClass
|
||||
|
||||
open class OpenBaseClass
|
||||
|
||||
interface BaseInterface
|
||||
|
||||
@JvmInline
|
||||
value class TestExtendsAbstractClass(val x: Int) : AbstractBaseClass()
|
||||
|
||||
@JvmInline
|
||||
value class TestExtendsOpenClass(val x: Int) : OpenBaseClass()
|
||||
|
||||
@JvmInline
|
||||
value class TestImplementsInterface(val x: Int) : BaseInterface
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !SKIP_JAVAC
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
|
||||
+2
-2
@@ -10,7 +10,7 @@ interface IFoo
|
||||
object FooImpl : IFoo
|
||||
|
||||
@JvmInline
|
||||
value class Test1(val x: Any) : IFoo by FooImpl
|
||||
value class Test1(val x: Any) : <!INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION!>IFoo<!> by FooImpl
|
||||
|
||||
@JvmInline
|
||||
value class Test2(val x: IFoo) : IFoo by x
|
||||
value class Test2(val x: IFoo) : <!INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION!>IFoo<!> by x
|
||||
|
||||
+14
-14
@@ -10,43 +10,43 @@ annotation class JvmInline
|
||||
value class A0(val x: Int)
|
||||
|
||||
@JvmInline
|
||||
value class A1
|
||||
<!ABSENCE_OF_PRIMARY_CONSTRUCTOR_FOR_INLINE_CLASS!>value<!> class A1
|
||||
@JvmInline
|
||||
value class A2()
|
||||
value class A2<!INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE!>()<!>
|
||||
@JvmInline
|
||||
value class A3(x: Int)
|
||||
value class A3(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>x: Int<!>)
|
||||
@JvmInline
|
||||
value class A4(var x: Int)
|
||||
value class A4(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>var x: Int<!>)
|
||||
@JvmInline
|
||||
value class A5(val x: Int, val y: Int)
|
||||
value class A5<!INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE!>(val x: Int, val y: Int)<!>
|
||||
@JvmInline
|
||||
value class A6(x: Int, val y: Int)
|
||||
value class A6<!INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE!>(x: Int, val y: Int)<!>
|
||||
@JvmInline
|
||||
value class A7(vararg val x: Int)
|
||||
value class A7(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>vararg val x: Int<!>)
|
||||
@JvmInline
|
||||
value class A8(<!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> val x: Int)
|
||||
value class A8(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!><!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> val x: Int<!>)
|
||||
@JvmInline
|
||||
value class A9(final val x: Int)
|
||||
|
||||
class B1 {
|
||||
companion object {
|
||||
@JvmInline
|
||||
value class C1(val x: Int)
|
||||
<!INLINE_CLASS_NOT_TOP_LEVEL!>value<!> class C1(val x: Int)
|
||||
}
|
||||
|
||||
@JvmInline
|
||||
value class C2(val x: Int)
|
||||
<!INLINE_CLASS_NOT_TOP_LEVEL!>value<!> class C2(val x: Int)
|
||||
}
|
||||
|
||||
object B2 {
|
||||
@JvmInline
|
||||
value class C3(val x: Int)
|
||||
<!INLINE_CLASS_NOT_TOP_LEVEL!>value<!> class C3(val x: Int)
|
||||
}
|
||||
|
||||
@JvmInline
|
||||
final value class D0(val x: Int)
|
||||
open value class D1(val x: Int)
|
||||
abstract value class D2(val x: Int)
|
||||
sealed value class D3(val x: Int)
|
||||
<!INLINE_CLASS_NOT_FINAL!>open<!> value class D1(val x: Int)
|
||||
<!INLINE_CLASS_NOT_FINAL!>abstract<!> value class D2(val x: Int)
|
||||
<!INLINE_CLASS_NOT_FINAL!>sealed<!> value class D3(val x: Int)
|
||||
|
||||
value data class D4(val x: String)
|
||||
|
||||
Vendored
-31
@@ -1,31 +0,0 @@
|
||||
// !SKIP_JAVAC
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
package kotlin.jvm
|
||||
|
||||
annotation class JvmInline
|
||||
|
||||
@JvmInline
|
||||
value class Foo<T>(val x: T)
|
||||
@JvmInline
|
||||
value class FooNullable<T>(val x: T?)
|
||||
|
||||
@JvmInline
|
||||
value class FooGenericArray<T>(val x: Array<T>)
|
||||
@JvmInline
|
||||
value class FooGenericArray2<T>(val x: Array<Array<T>>)
|
||||
|
||||
@JvmInline
|
||||
value class FooStarProjectedArray(val x: Array<*>)
|
||||
@JvmInline
|
||||
value class FooStarProjectedArray2(val x: Array<Array<*>>)
|
||||
|
||||
@JvmInline
|
||||
value class Bar(val u: Unit)
|
||||
@JvmInline
|
||||
value class BarNullable(val u: Unit?)
|
||||
|
||||
@JvmInline
|
||||
value class Baz(val u: Nothing)
|
||||
@JvmInline
|
||||
value class BazNullable(val u: Nothing?)
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !SKIP_JAVAC
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
|
||||
Reference in New Issue
Block a user