[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
@@ -24,17 +24,17 @@ interface T2<T> {}
interface Test() {
}
interface Test1 : C2() {}
interface Test1 : <!INTERFACE_WITH_SUPERCLASS, SUPERTYPE_INITIALIZED_IN_INTERFACE!>C2<!>() {}
interface Test2 : C2 {}
interface Test2 : <!INTERFACE_WITH_SUPERCLASS!>C2<!> {}
interface Test3 : C2, C3 {}
interface Test3 : <!INTERFACE_WITH_SUPERCLASS!>C2<!>, C3 {}
interface Test4 : T1 {}
interface Test5 : T1, T1 {}
interface Test6 : C1 {}
interface Test6 : <!INTERFACE_WITH_SUPERCLASS!>C1<!> {}
class CTest1() : OC1() {}
@@ -1,5 +1,5 @@
// JAVAC_EXPECTED_FILE
interface MyTrait: Object {
interface MyTrait: <!INTERFACE_WITH_SUPERCLASS!>Object<!> {
override fun toString(): String
public override fun finalize()
public override fun wait()
@@ -1,46 +0,0 @@
// !DIAGNOSTICS: -WARNING +CAST_NEVER_SUCCEEDS
interface T1
interface T2
interface T3
open class OC1: T1
open class OC2: OC1(), T2
class FC1: OC2(), T3
interface T4: OC1
interface T5: T2
fun <TP1: OC1, TP2: T2, TP3: OC2> test(
t2: T2,
t4: T4,
fc1: FC1,
oc1: OC1,
oc2: OC2,
tp1: TP1,
tp2: TP2
) {
fc1 as FC1
fc1 as OC1
fc1 as T1
fc1 as TP1
oc1 as FC1
oc1 as OC2
oc2 as OC1
oc1 as T2
oc1 as T1
oc1 as TP1
oc1 as TP2
t2 as FC1
t2 as OC2
t4 as OC1
t2 as T2
t2 as T5
t2 as TP2
tp1 as FC1
tp1 as OC1
tp1 as OC2
tp2 as T2
tp2 as T5
tp1 as TP3
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -WARNING +CAST_NEVER_SUCCEEDS
interface T1
interface T2
@@ -2,6 +2,6 @@ open class C {
val x = 1
}
interface Tr : C {
interface Tr : <!INTERFACE_WITH_SUPERCLASS!>C<!> {
fun getX() = 1
}
@@ -1,7 +1,7 @@
// FILE: test.kt
enum class MyEnum(): MyClass() {}
enum class MyEnum(): <!CLASS_IN_SUPERTYPE_FOR_ENUM!>MyClass<!>() {}
enum class MyEnum2(): MyTrait {}
enum class MyEnum3(): MyEnumBase() {}
enum class MyEnum3(): <!CLASS_IN_SUPERTYPE_FOR_ENUM!>MyEnumBase<!>() {}
open class MyClass() {}
@@ -2,6 +2,6 @@
package bug
public enum class Foo<T> {
public enum class Foo<<!TYPE_PARAMETERS_IN_ENUM!>T<!>> {
A()
}
@@ -1,9 +1,9 @@
interface IA {
override fun toString(): String = "IA"
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun toString(): String = "IA"<!>
override fun equals(other: Any?): Boolean = super.equals(other)
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun equals(other: Any?): Boolean = super.equals(other)<!>
override fun hashCode(): Int {
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun hashCode(): Int {
return 42;
}
}<!>
}
@@ -1,13 +1,13 @@
interface IA
interface IB : IA {
override fun toString(): String = "IB"
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun toString(): String = "IB"<!>
}
interface IC : IB {
override fun toString(): String = "IC"
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun toString(): String = "IC"<!>
}
interface ID : IC {
override fun toString(): String = "ID"
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun toString(): String = "ID"<!>
}
@@ -7,5 +7,5 @@ interface IRight {
}
interface IDiamond : ILeft, IRight {
override fun toString(): String = "IDiamond"
<!ANY_METHOD_IMPLEMENTED_IN_INTERFACE!>override fun toString(): String = "IDiamond"<!>
}
@@ -1,11 +0,0 @@
open class Aaa() {
open fun foo() = 1
}
open class Bbb() : Aaa() {
override fun foo() = 2
}
interface Ccc : Aaa
class Ddd() : Bbb(), Ccc
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
open class Aaa() {
open fun foo() = 1
}
@@ -4,7 +4,7 @@ open class AL {
fun get(i : Int) : Any? = i
}
interface ALE<T> : AL {
interface ALE<T> : <!INTERFACE_WITH_SUPERCLASS!>AL<!> {
fun getOrNull(index: Int, value: T) : T {
return get(index) as? T ?: value
}
@@ -1,10 +1,10 @@
sealed class Base
class Derived: Base() {
class Derived2: Base()
class Derived2: <!SEALED_SUPERTYPE!>Base<!>()
}
fun test() {
class Local: Base()
class Local: <!SEALED_SUPERTYPE_IN_LOCAL_CLASS!>Base<!>()
}
-13
View File
@@ -1,13 +0,0 @@
sealed class Sealed {
object First: Sealed()
open class NonFirst: Sealed() {
object Second: NonFirst()
object Third: NonFirst()
fun foo(): Int {
val s = object: Sealed() {}
class Local: Sealed() {}
return s.hashCode()
}
}
val p: Sealed = object: Sealed() {}
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
sealed class Sealed {
object First: Sealed()
open class NonFirst: Sealed() {
@@ -1,3 +1,3 @@
sealed class Base {
fun foo() = Base()
fun foo() = <!SEALED_CLASS_CONSTRUCTOR_CALL!>Base<!>()
}
@@ -2,8 +2,8 @@ class A {
sealed class Base
}
class Derived : A.Base()
class Derived : <!SEALED_SUPERTYPE!>A.Base<!>()
fun test() {
class DerivedLocal : A.Base()
class DerivedLocal : <!SEALED_SUPERTYPE_IN_LOCAL_CLASS!>A.Base<!>()
}
@@ -1,6 +1,6 @@
interface A1 : <!UNRESOLVED_REFERENCE!>B<!>
interface A2 : <!UNRESOLVED_REFERENCE!>B<!>()
interface A2 : <!SUPERTYPE_INITIALIZED_IN_INTERFACE, UNRESOLVED_REFERENCE!>B<!>()
class A3 : <!UNRESOLVED_REFERENCE!>B<!>, <!UNRESOLVED_REFERENCE!>B<!>
@@ -1,10 +0,0 @@
open class A {
open fun foo() {}
}
interface ATrait : A {
override fun foo() {
<!SUPERCLASS_NOT_ACCESSIBLE_FROM_INTERFACE!>super<A><!>.foo()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
open class A {
open fun foo() {}
}
@@ -1,5 +0,0 @@
interface AnyTrait : Any
class Foo : AnyTrait
class Bar : AnyTrait, Any()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface AnyTrait : <!INTERFACE_WITH_SUPERCLASS!>Any<!>
class Foo : AnyTrait
@@ -1,9 +1,9 @@
open class bar()
interface Foo() : bar(), bar, bar {
interface Foo() : <!INTERFACE_WITH_SUPERCLASS!>bar<!>(), bar, bar {
}
interface Foo2 : bar, Foo {
interface Foo2 : <!INTERFACE_WITH_SUPERCLASS!>bar<!>, Foo {
}
open class Foo1() : bar(), bar, Foo, <!UNRESOLVED_REFERENCE!>Foo<!>() {}
@@ -17,8 +17,8 @@ val test3a = <!HIDDEN!>EnumClass<!>()
sealed class SealedClass
typealias Test4 = SealedClass
val test4 = Test4()
val test4a = SealedClass()
val test4 = <!SEALED_CLASS_CONSTRUCTOR_CALL!>Test4<!>()
val test4a = <!SEALED_CLASS_CONSTRUCTOR_CALL!>SealedClass<!>()
class Outer {
inner class Inner