[FIR] Implement RECURSIVE_TYPEALIAS_EXPANSION, CYCLIC_INHERITANCE_HIERARCHY diagnostics, fix stackoverlow exception in case if typealias points to type with type arguments
This commit is contained in:
committed by
teamcityserver
parent
d1531f9cdd
commit
c4c2fbb5a0
-4
@@ -1,4 +0,0 @@
|
||||
open class C : D() {
|
||||
open class CC
|
||||
}
|
||||
open class D : C.CC()
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class C : <!CYCLIC_INHERITANCE_HIERARCHY!>D<!>() {
|
||||
open class CC
|
||||
}
|
||||
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
open class E : E.EE() {
|
||||
open class EE
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class E : <!CYCLIC_INHERITANCE_HIERARCHY!>E.EE<!>() {
|
||||
open class EE
|
||||
}
|
||||
|
||||
Vendored
-8
@@ -1,8 +0,0 @@
|
||||
open class A : B()
|
||||
open class B : <!OTHER_ERROR!>A<!>()
|
||||
|
||||
fun <T> select(vararg xs: T): T = xs[0]
|
||||
|
||||
fun foo() {
|
||||
val x = select(A(), B(), "foo")
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class A : <!CYCLIC_INHERITANCE_HIERARCHY!>B<!>()
|
||||
open class B : <!CYCLIC_INHERITANCE_HIERARCHY!>A<!>()
|
||||
|
||||
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
open class A : B()
|
||||
open class B : <!OTHER_ERROR!>A<!>()
|
||||
|
||||
fun <T> select(vararg xs: T): T = xs[0]
|
||||
|
||||
fun foo() {
|
||||
select(A(), B())
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class A : <!CYCLIC_INHERITANCE_HIERARCHY!>B<!>()
|
||||
open class B : <!CYCLIC_INHERITANCE_HIERARCHY!>A<!>()
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
interface A {
|
||||
fun foo() {}
|
||||
}
|
||||
interface B : A, E {}
|
||||
interface C : <!OTHER_ERROR!>B<!> {}
|
||||
interface D : <!OTHER_ERROR!>B<!> {}
|
||||
interface E : F {}
|
||||
interface F : D, C {}
|
||||
interface G : F {}
|
||||
interface H : F {}
|
||||
|
||||
val a : A? = null
|
||||
val b : B? = null
|
||||
val c : C? = null
|
||||
val d : D? = null
|
||||
val e : E? = null
|
||||
val f : F? = null
|
||||
val g : G? = null
|
||||
val h : H? = null
|
||||
|
||||
fun test() {
|
||||
a?.foo()
|
||||
b?.foo()
|
||||
c?.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
d?.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
e?.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
f?.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
g?.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
h?.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface A {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
// FILE: A.java
|
||||
|
||||
interface A extends C {
|
||||
void foo();
|
||||
}
|
||||
|
||||
// FILE: B.kt
|
||||
|
||||
interface B : <!EXPOSED_SUPER_INTERFACE!>A<!> {
|
||||
fun bar()
|
||||
}
|
||||
|
||||
// FILE: C.java
|
||||
|
||||
interface C extends B {
|
||||
void baz();
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
|
||||
interface A extends C {
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// FILE: J.java
|
||||
|
||||
class J extends K {
|
||||
void foo() {}
|
||||
}
|
||||
|
||||
// FILE: K.kt
|
||||
|
||||
class K : <!EXPOSED_SUPER_CLASS!>J<!>() {
|
||||
fun bar() {}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: J.java
|
||||
|
||||
class J extends K {
|
||||
|
||||
+1
-1
@@ -12,6 +12,6 @@ class J extends I {
|
||||
|
||||
// FILE: K.kt
|
||||
|
||||
open class K : <!EXPOSED_SUPER_CLASS!>J<!>() {
|
||||
open class K : <!CYCLIC_INHERITANCE_HIERARCHY!>J<!>() {
|
||||
fun baz() {}
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ interface ExceptionTracker : <!EXPOSED_SUPER_INTERFACE!>LockBasedStorageManager.
|
||||
|
||||
// FILE: StorageManager.kt
|
||||
|
||||
interface StorageManager : ExceptionTracker {
|
||||
interface StorageManager : <!CYCLIC_INHERITANCE_HIERARCHY!>ExceptionTracker<!> {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// KT-303 Stack overflow on a cyclic class hierarchy
|
||||
|
||||
open class Foo() : Bar() {
|
||||
open class Foo() : <!CYCLIC_INHERITANCE_HIERARCHY!>Bar<!>() {
|
||||
val a : Int = 1
|
||||
}
|
||||
|
||||
open class Bar() : <!OTHER_ERROR!>Foo<!>() {
|
||||
open class Bar() : <!CYCLIC_INHERITANCE_HIERARCHY!>Foo<!>() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
// As in KT-18514
|
||||
object A : A.I {
|
||||
interface I
|
||||
}
|
||||
|
||||
// Similar to 'classIndirectlyInheritsNested.kt'
|
||||
object D : E() {
|
||||
open class NestedD
|
||||
}
|
||||
|
||||
open class E : D.NestedD()
|
||||
|
||||
|
||||
|
||||
// Similar to 'twoClassesWithNestedCycle.kt'
|
||||
object G : H.NestedH() {
|
||||
open class NestedG
|
||||
}
|
||||
object H : G.NestedG() {
|
||||
open class NestedH
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// As in KT-18514
|
||||
object A : <!CYCLIC_INHERITANCE_HIERARCHY!>A.I<!> {
|
||||
interface I
|
||||
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
open class A : B.BB() {
|
||||
open class AA
|
||||
}
|
||||
open class B : A.AA() {
|
||||
open class BB
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class A : <!CYCLIC_INHERITANCE_HIERARCHY!>B.BB<!>() {
|
||||
open class AA
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user