FIR: introduce inline classes checks

This commit is contained in:
eugenpolytechnic
2021-02-22 15:17:26 +03:00
committed by Mikhail Glukhikh
parent 9cc8f44390
commit f6e564ffa6
46 changed files with 923 additions and 238 deletions
@@ -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<!>)
@@ -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<!>
}
@@ -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<!>
}
@@ -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
@@ -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")
}
}<!>
}
@@ -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,3 +1,4 @@
// FIR_IDENTICAL
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
@@ -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
@@ -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)
@@ -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,3 +1,4 @@
// FIR_IDENTICAL
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses