Fix default type of static classes inside parametrized parents

Default type of LazySubstitutingClassDescriptor is not lazy. However, most of default types are,
and there is an optimization in KotlinTypeFactory, which uses default type for simple type without
type arguments and/or annotations. LazySubstitutingClassDescriptor's default type creates simple type
with factory, which may therefore cause recursion.

#KT-34029 Fixed
This commit is contained in:
Pavel Kirpichenkov
2019-10-24 11:04:16 +03:00
parent 905823fb1d
commit c21e699783
6 changed files with 46 additions and 1 deletions
@@ -0,0 +1,6 @@
open class MyClass<T> {
object MyObject : MyClass<Boolean>() { }
}
val foo1 = MyClass.MyObject // it's ok
val foo2 = <!FUNCTION_CALL_EXPECTED!>MyClass<Boolean><!>.<!NESTED_CLASS_ACCESSED_VIA_INSTANCE_REFERENCE!>MyObject<!> // here's stofl
@@ -0,0 +1,18 @@
package
public val foo1: MyClass.MyObject
public val foo2: [ERROR : Type for MyClass<Boolean>.MyObject]
public open class MyClass</*0*/ T> {
public constructor MyClass</*0*/ T>()
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 object MyObject : MyClass<kotlin.Boolean> {
private constructor MyObject()
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
}
}