[NI] Fix poor performance of recursive types approximation

#KT-32407 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2019-08-05 14:41:36 +03:00
parent 5f76918c90
commit 0219b86d06
7 changed files with 145 additions and 24 deletions
@@ -0,0 +1,22 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +NewInference
// FILE: MenuItemBase.java
public class MenuItemBase<C extends ContextMenuBase<C, I, S>, I extends MenuItemBase<C, I, S>, S extends SubMenuBase<C, I, S>> {
public String getText() { return null; }
}
// FILE: ContextMenuBase.java
public class ContextMenuBase<C extends ContextMenuBase<C, I, S>, I extends MenuItemBase<C, I, S>, S extends SubMenuBase<C, I, S>> {}
// FILE: SubMenuBase.java
public class SubMenuBase<C extends ContextMenuBase<C, I, S>, I extends MenuItemBase<C, I, S>, S extends SubMenuBase<C, I, S>> {}
// FILE: test.kt
fun test(m: MenuItemBase<*, *, *>) {
m.text
}
@@ -0,0 +1,25 @@
package
public fun test(/*0*/ m: MenuItemBase<*, *, *>): kotlin.Unit
public open class ContextMenuBase</*0*/ C : ContextMenuBase<C!, I!, S!>!, /*1*/ I : MenuItemBase<C!, I!, S!>!, /*2*/ S : SubMenuBase<C!, I!, S!>!> {
public constructor ContextMenuBase</*0*/ C : ContextMenuBase<C!, I!, S!>!, /*1*/ I : MenuItemBase<C!, I!, S!>!, /*2*/ S : SubMenuBase<C!, I!, S!>!>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class MenuItemBase</*0*/ C : ContextMenuBase<C!, I!, S!>!, /*1*/ I : MenuItemBase<C!, I!, S!>!, /*2*/ S : SubMenuBase<C!, I!, S!>!> {
public constructor MenuItemBase</*0*/ C : ContextMenuBase<C!, I!, S!>!, /*1*/ I : MenuItemBase<C!, I!, S!>!, /*2*/ S : SubMenuBase<C!, I!, S!>!>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getText(): kotlin.String!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class SubMenuBase</*0*/ C : ContextMenuBase<C!, I!, S!>!, /*1*/ I : MenuItemBase<C!, I!, S!>!, /*2*/ S : SubMenuBase<C!, I!, S!>!> {
public constructor SubMenuBase</*0*/ C : ContextMenuBase<C!, I!, S!>!, /*1*/ I : MenuItemBase<C!, I!, S!>!, /*2*/ S : SubMenuBase<C!, I!, S!>!>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}