FIR: introduce inline classes checks
This commit is contained in:
committed by
Mikhail Glukhikh
parent
9cc8f44390
commit
f6e564ffa6
Vendored
+1
-1
@@ -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<!>)
|
||||
|
||||
+5
-5
@@ -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<!>
|
||||
}
|
||||
|
||||
Vendored
-13
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
|
||||
abstract class AbstractBaseClass
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+18
-18
@@ -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)
|
||||
|
||||
Vendored
-16
@@ -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?)
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
|
||||
inline class Foo<T>(val x: <!INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
|
||||
|
||||
+3
-3
@@ -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
|
||||
}
|
||||
|
||||
+4
-4
@@ -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<!>
|
||||
}
|
||||
|
||||
-21
@@ -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<!>)
|
||||
|
||||
+19
-19
@@ -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")
|
||||
}
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user