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
@@ -7,4 +7,4 @@ inline annotation class InlineAnn
inline object InlineObject
inline enum class InlineEnum
inline class NotVal(x: Int)
inline class NotVal(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>x: Int<!>)
@@ -20,9 +20,9 @@ object VarObject {
}
inline 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<!>
}
@@ -1,13 +0,0 @@
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
abstract class AbstractBaseClass
open class OpenBaseClass
interface BaseInterface
inline class TestExtendsAbstractClass(val x: Int) : AbstractBaseClass()
inline class TestExtendsOpenClass(val x: Int) : OpenBaseClass()
inline class TestImplementsInterface(val x: Int) : BaseInterface
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
abstract class AbstractBaseClass
@@ -4,6 +4,6 @@ interface IFoo
object FooImpl : IFoo
inline class Test1(val x: Any) : IFoo by FooImpl
inline class Test1(val x: Any) : <!INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION!>IFoo<!> by FooImpl
inline class Test2(val x: IFoo) : IFoo by x
inline class Test2(val x: IFoo) : <!INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION!>IFoo<!> by x
@@ -3,38 +3,38 @@
inline class A0(val x: Int)
inline class A1
inline class A2()
inline class A3(x: Int)
inline class A4(var x: Int)
inline class A5(val x: Int, val y: Int)
inline class A6(x: Int, val y: Int)
inline class A7(vararg val x: Int)
inline class A8(<!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> val x: Int)
<!ABSENCE_OF_PRIMARY_CONSTRUCTOR_FOR_INLINE_CLASS!>inline<!> class A1
inline class A2<!INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE!>()<!>
inline class A3(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>x: Int<!>)
inline class A4(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>var x: Int<!>)
inline class A5<!INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE!>(val x: Int, val y: Int)<!>
inline class A6<!INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE!>(x: Int, val y: Int)<!>
inline class A7(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>vararg val x: Int<!>)
inline class A8(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!><!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> val x: Int<!>)
inline class A9(final val x: Int)
class B1 {
companion object {
inline class C1(val x: Int)
inner inline class C11(val x: Int)
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C1(val x: Int)
inner <!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C11(val x: Int)
}
inline class C2(val x: Int)
inner inline class C21(val x: Int)
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C2(val x: Int)
inner <!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C21(val x: Int)
}
object B2 {
inline class C3(val x: Int)
inner inline class C31(val x: Int)
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C3(val x: Int)
inner <!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C31(val x: Int)
}
fun foo() {
inline class C4(val x: Int)
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C4(val x: Int)
}
final inline class D0(val x: Int)
open inline class D1(val x: Int)
abstract inline class D2(val x: Int)
sealed inline class D3(val x: Int)
<!INLINE_CLASS_NOT_FINAL!>open<!> inline class D1(val x: Int)
<!INLINE_CLASS_NOT_FINAL!>abstract<!> inline class D2(val x: Int)
<!INLINE_CLASS_NOT_FINAL!>sealed<!> inline class D3(val x: Int)
<!INCOMPATIBLE_MODIFIERS!>inline<!> <!INCOMPATIBLE_MODIFIERS!>data<!> class D4(val x: String)
@@ -1,16 +0,0 @@
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
inline class Foo<T>(val x: T)
inline class FooNullable<T>(val x: T?)
inline class FooGenericArray<T>(val x: Array<T>)
inline class FooGenericArray2<T>(val x: Array<Array<T>>)
inline class FooStarProjectedArray(val x: Array<*>)
inline class FooStarProjectedArray2(val x: Array<Array<*>>)
inline class Bar(val u: Unit)
inline class BarNullable(val u: Unit?)
inline class Baz(val u: Nothing)
inline class BazNullable(val u: Nothing?)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
inline class Foo<T>(val x: <!INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
@@ -2,7 +2,7 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
inline class Foo(val x: Int) {
inner class InnerC
inner object InnerO
inner interface InnerI
<!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> class InnerC
<!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> object InnerO
<!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> interface InnerI
}
@@ -13,13 +13,13 @@ inline 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
@@ -28,7 +28,7 @@ inline 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,21 +0,0 @@
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
inline class Test1(val x: Test1)
inline class Test2A(val x: Test2B)
inline class Test2B(val x: Test2A)
inline class Test3A(val x: Test3B)
inline class Test3B(val x: Test3C)
inline class Test3C(val x: Test3A)
inline class TestNullable(val x: TestNullable?)
inline class TestRecursionInTypeArguments(val x: List<TestRecursionInTypeArguments>)
inline class TestRecursionInArray(val x: Array<TestRecursionInArray>)
inline class TestRecursionInUpperBounds<T : TestRecursionInUpperBounds<T>>(val x: T)
inline class Id<T>(val x: T)
inline class TestRecursionThroughId(val x: Id<TestRecursionThroughId>)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
inline class Test1(val x: <!INLINE_CLASS_CANNOT_BE_RECURSIVE!>Test1<!>)
@@ -2,32 +2,32 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
inline 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
}
inline 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
}
inline 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 {
@@ -35,11 +35,11 @@ interface WithBox {
}
inline class IC4(val s: String) : WithBox {
override fun box(): String = ""
override fun <!RESERVED_MEMBER_INSIDE_INLINE_CLASS!>box<!>(): String = ""
}
inline 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")
}
}
}<!>
}