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:
@@ -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()<!>
|
||||
Reference in New Issue
Block a user