Fix StackOverflowError on cyclic hierarchy Java<->Kotlin

Report errors not only when superclasses are MutableClassDescriptorLite, but
any classes

 #KT-2115 Fixed
This commit is contained in:
Alexander Udalov
2014-04-02 22:08:24 +04:00
parent 4241eb9661
commit 9b2291d381
9 changed files with 114 additions and 41 deletions
@@ -0,0 +1,30 @@
trait A {
fun foo() {}
}
trait B : A, <!CYCLIC_INHERITANCE_HIERARCHY!>E<!> {}
trait C : <!CYCLIC_INHERITANCE_HIERARCHY!>B<!> {}
trait D : <!CYCLIC_INHERITANCE_HIERARCHY!>B<!> {}
trait E : <!CYCLIC_INHERITANCE_HIERARCHY!>F<!> {}
trait F : <!CYCLIC_INHERITANCE_HIERARCHY!>D<!>, <!CYCLIC_INHERITANCE_HIERARCHY!>C<!> {}
trait G : F {}
trait 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<!>()
}
@@ -0,0 +1,17 @@
// FILE: A.java
interface A extends C {
void foo();
}
// FILE: B.kt
trait B : <!CYCLIC_INHERITANCE_HIERARCHY!>A<!> {
fun bar()
}
// FILE: C.java
interface C extends B {
void baz();
}
@@ -0,0 +1,11 @@
// FILE: J.java
class J extends K {
void foo() {}
}
// FILE: K.kt
class K : <!CYCLIC_INHERITANCE_HIERARCHY!>J<!>() {
fun bar() {}
}
@@ -0,0 +1,17 @@
// FILE: I.kt
open class I : <!CYCLIC_INHERITANCE_HIERARCHY!>K<!>() {
fun foo() {}
}
// FILE: J.java
class J extends I {
void bar() {}
}
// FILE: K.kt
open class K : <!CYCLIC_INHERITANCE_HIERARCHY!>J<!>() {
fun baz() {}
}
@@ -0,0 +1,11 @@
// KT-303 Stack overflow on a cyclic class hierarchy
open class Foo() : <!CYCLIC_INHERITANCE_HIERARCHY!>Bar<!>() {
val a : Int = 1
}
open class Bar() : <!CYCLIC_INHERITANCE_HIERARCHY!>Foo<!>() {
}
val x : Int = <!TYPE_MISMATCH!>Foo()<!>