[FIR] Supertype and inheritance checkers group

This commit is contained in:
Nick
2020-07-24 18:33:52 +03:00
parent 252eb1ad23
commit 28700ed64c
61 changed files with 1205 additions and 190 deletions
@@ -0,0 +1,5 @@
class A
interface C
enum class B : C, <!CLASS_IN_SUPERTYPE_FOR_ENUM!>A<!>(), Any()
@@ -0,0 +1,21 @@
FILE: classInSupertypeForEnum.kt
public final class A : R|kotlin/Any| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
public abstract interface C : R|kotlin/Any| {
}
public final enum class B : R|C|, R|A|, R|kotlin/Any|, R|kotlin/Enum<B>| {
private constructor(): R|B| {
super<R|kotlin/Enum<B>|>()
}
public final static fun values(): R|kotlin/Array<B>| {
}
public final static fun valueOf(value: R|kotlin/String|): R|B| {
}
}
@@ -0,0 +1,7 @@
interface <!CONSTRUCTOR_IN_INTERFACE!>A(val s: String)<!>
interface <!CONSTRUCTOR_IN_INTERFACE!>B constructor(val s: String)<!>
interface C {
<!CONSTRUCTOR_IN_INTERFACE!>constructor(val s: String)<!> {}
}
@@ -0,0 +1,11 @@
FILE: constructorInInterface.kt
public abstract interface A : R|kotlin/Any| {
}
public abstract interface B : R|kotlin/Any| {
}
public abstract interface C : R|kotlin/Any| {
public constructor(s: R|kotlin/String|): R|C| {
super<R|kotlin/Any|>()
}
}
@@ -0,0 +1,9 @@
class A
interface B : <!DELEGATION_IN_INTERFACE, INTERFACE_WITH_SUPERCLASS!>A<!> by a {
val a: A
}
val test = A()
interface C : <!DELEGATION_IN_INTERFACE, INTERFACE_WITH_SUPERCLASS!>A<!> by test
@@ -0,0 +1,20 @@
FILE: delegationInInterface.kt
public final class A : R|kotlin/Any| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
public abstract interface B : R|A| {
local final field <$$delegate_0>: R|A|
public abstract val a: R|A|
public get(): R|A|
}
public final val test: R|A| = R|/A.A|()
public get(): R|A|
public abstract interface C : R|A| {
local final field <$$delegate_0>: R|A|
}
@@ -0,0 +1,8 @@
class A
interface B : <!INTERFACE_WITH_SUPERCLASS, SUPERTYPE_INITIALIZED_IN_INTERFACE!>A<!>()
interface C
class D
interface E : <!INTERFACE_WITH_SUPERCLASS, SUPERTYPE_INITIALIZED_IN_INTERFACE!>A<!>(), C, D()
@@ -0,0 +1,19 @@
FILE: interfaceWithSuperclass.kt
public final class A : R|kotlin/Any| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
public abstract interface B : R|A| {
}
public abstract interface C : R|kotlin/Any| {
}
public final class D : R|kotlin/Any| {
public constructor(): R|D| {
super<R|kotlin/Any|>()
}
}
public abstract interface E : R|A|, R|C|, R|D| {
}
@@ -0,0 +1,25 @@
interface A {
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun toString() = "Hello"<!>
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun equals(other: Any?) = true<!>
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun hashCode(): Int {
return 42;
}<!>
}
interface B {
override fun toString(): String
override fun equals(other: Any?): Boolean
override fun hashCode(): Int
}
interface C {
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override operator fun toString(): String = "Rest"<!>
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override operator fun equals(other: Any?): Boolean = false<!>
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override operator fun hashCode(): Int = 2<!>
}
interface D {
override operator fun toString(): String
override operator fun equals(other: Any?): Boolean
override operator fun hashCode(): Int
}
@@ -0,0 +1,45 @@
FILE: methodOfAnyImplementedInInterface.kt
public abstract interface A : R|kotlin/Any| {
public open override fun toString(): R|kotlin/String| {
^toString String(Hello)
}
public open override fun equals(other: R|kotlin/Any?|): R|kotlin/Boolean| {
^equals Boolean(true)
}
public open override fun hashCode(): R|kotlin/Int| {
^hashCode Int(42)
}
}
public abstract interface B : R|kotlin/Any| {
public abstract override fun toString(): R|kotlin/String|
public abstract override fun equals(other: R|kotlin/Any?|): R|kotlin/Boolean|
public abstract override fun hashCode(): R|kotlin/Int|
}
public abstract interface C : R|kotlin/Any| {
public open override operator fun toString(): R|kotlin/String| {
^toString String(Rest)
}
public open override operator fun equals(other: R|kotlin/Any?|): R|kotlin/Boolean| {
^equals Boolean(false)
}
public open override operator fun hashCode(): R|kotlin/Int| {
^hashCode Int(2)
}
}
public abstract interface D : R|kotlin/Any| {
public abstract override operator fun toString(): R|kotlin/String|
public abstract override operator fun equals(other: R|kotlin/Any?|): R|kotlin/Boolean|
public abstract override operator fun hashCode(): R|kotlin/Int|
}
@@ -0,0 +1,3 @@
sealed class A
val b = <!SEALED_CLASS_CONSTRUCTOR_CALL!>A<!>()
@@ -0,0 +1,9 @@
FILE: sealedClassConstructorCall.kt
public sealed class A : R|kotlin/Any| {
private constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
public final val b: R|A| = R|/A.A|()
public get(): R|A|
@@ -0,0 +1,40 @@
sealed class A
<!REDECLARATION!>class B : A()<!>
interface C : <!INTERFACE_WITH_SUPERCLASS!>A<!>
interface D : C, <!INTERFACE_WITH_SUPERCLASS!>A<!>
class E : B, A()
sealed class P {
object H: P()
class J : P()
object T {
object V : P()
class M : P()
}
val p: P = object : <!SEALED_SUPERTYPE_IN_LOCAL_CLASS!>P<!>() {
}
val r = object : <!SEALED_SUPERTYPE_IN_LOCAL_CLASS!>P<!>() {
}
}
class K : P()
<!REDECLARATION!>object B<!> {
class I : <!SEALED_SUPERTYPE!>P<!>()
}
fun test() {
class L : <!SEALED_SUPERTYPE_IN_LOCAL_CLASS!>P<!>()
val a = object : <!SEALED_SUPERTYPE_IN_LOCAL_CLASS!>P<!>() {
}
}
@@ -0,0 +1,117 @@
FILE: sealedSupertype.kt
public sealed class A : R|kotlin/Any| {
private constructor(): R|A| {
super<R|kotlin/Any|>()
}
}
public final class B : R|A| {
public constructor(): R|B| {
super<R|A|>()
}
}
public abstract interface C : R|A| {
}
public abstract interface D : R|C|, R|A| {
}
public final class E : R|B|, R|A| {
public constructor(): R|E| {
super<R|A|>()
}
}
public sealed class P : R|kotlin/Any| {
private constructor(): R|P| {
super<R|kotlin/Any|>()
}
public final object H : R|P| {
private constructor(): R|P.H| {
super<R|P|>()
}
}
public final class J : R|P| {
public constructor(): R|P.J| {
super<R|P|>()
}
}
public final object T : R|kotlin/Any| {
private constructor(): R|P.T| {
super<R|kotlin/Any|>()
}
public final object V : R|P| {
private constructor(): R|P.T.V| {
super<R|P|>()
}
}
public final class M : R|P| {
public constructor(): R|P.T.M| {
super<R|P|>()
}
}
}
public final val p: R|P| = object : R|P| {
private constructor(): R|<anonymous>| {
super<R|P|>()
}
}
public get(): R|P|
public final val r: R|<anonymous>| = object : R|P| {
private constructor(): R|<anonymous>| {
super<R|P|>()
}
}
public get(): R|<anonymous>|
}
public final class K : R|P| {
public constructor(): R|K| {
super<R|P|>()
}
}
public final object B : R|kotlin/Any| {
private constructor(): R|B| {
super<R|kotlin/Any|>()
}
public final class I : R|P| {
public constructor(): R|B.I| {
super<R|P|>()
}
}
}
public final fun test(): R|kotlin/Unit| {
local final class L : R|P| {
public constructor(): R|L| {
super<R|P|>()
}
}
lval a: R|<anonymous>| = object : R|P| {
private constructor(): R|<anonymous>| {
super<R|P|>()
}
}
}
@@ -2,7 +2,7 @@ open class A {
open fun foo() {}
}
interface ATrait : A {
interface ATrait : <!INTERFACE_WITH_SUPERCLASS!>A<!> {
override fun foo() {
<!SUPERCLASS_NOT_ACCESSIBLE_FROM_INTERFACE!>super<A><!>.foo()
}
@@ -0,0 +1,13 @@
interface A
interface B : <!SUPERTYPE_INITIALIZED_IN_INTERFACE!>A<!>()
class C
interface D : <!INTERFACE_WITH_SUPERCLASS, SUPERTYPE_INITIALIZED_IN_INTERFACE!>C<!>()
interface E : <!INTERFACE_WITH_SUPERCLASS, SUPERTYPE_INITIALIZED_IN_INTERFACE!>Any<!>()
interface F : A, <!SUPERTYPE_INITIALIZED_IN_INTERFACE!>B<!>(), <!INTERFACE_WITH_SUPERCLASS!>C<!>, D(), Any() {
}
@@ -0,0 +1,17 @@
FILE: supertypeInitializedInInterface.kt
public abstract interface A : R|kotlin/Any| {
}
public abstract interface B : R|A| {
}
public final class C : R|kotlin/Any| {
public constructor(): R|C| {
super<R|kotlin/Any|>()
}
}
public abstract interface D : R|C| {
}
public abstract interface E : R|kotlin/Any| {
}
public abstract interface F : R|A|, R|B|, R|C|, R|D|, R|kotlin/Any| {
}
@@ -0,0 +1,3 @@
enum class A<<!TYPE_PARAMETERS_IN_ENUM!>B<!>, C : B, D>
enum class B
@@ -0,0 +1,25 @@
FILE: typeParametersInEnum.kt
public final enum class A<B, C : R|B|, D> : R|kotlin/Enum<A<B, C, D>>| {
private constructor<B, C : R|B|, D>(): R|A<B, C, D>| {
super<R|kotlin/Enum<A<B, C, D>>|>()
}
public final static fun values(): R|kotlin/Array<A>| {
}
public final static fun valueOf(value: R|kotlin/String|): R|A| {
}
}
public final enum class B : R|kotlin/Enum<B>| {
private constructor(): R|B| {
super<R|kotlin/Enum<B>|>()
}
public final static fun values(): R|kotlin/Array<B>| {
}
public final static fun valueOf(value: R|kotlin/String|): R|B| {
}
}