[FIR] KT-56612: Fully-expand types when casting bare types

^KT-56612 Fixed

Merge-request: KT-MR-8849
Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
This commit is contained in:
Nikolay Lunyak
2023-02-17 09:15:59 +00:00
committed by Space Team
parent 0963bd25a8
commit 516efe77c9
13 changed files with 163 additions and 10 deletions
+29
View File
@@ -0,0 +1,29 @@
// FIR_IDENTICAL
interface FlameGraphModel<T>
internal typealias CallUsageNode = CallTreeNode<BaseCallStackElement>
interface CallTreeNode<out T : Any> : TreeNodeWithParent<CallWithValue<T>>
interface TreeNodeWithParent<out Data>
interface CallWithValue<out T : Any>
abstract class BaseCallStackElement
open class CallUsageNodeFlameGraphModel<Call : Any> : FlameGraphModel<CallTreeNode<Call>>
fun foo(model: FlameGraphModel<CallUsageNode>) {
// K1: Ok
val afterCast = model as CallUsageNodeFlameGraphModel
}
internal typealias CallTreeNodeTypealias<K> = CallTreeNode<K>
open class CallUsageNodeFlameGraphModelWithTypealiasedSupertypeArgument<Call : Any> : FlameGraphModel<CallTreeNodeTypealias<Call>>
fun bar(model: FlameGraphModel<CallUsageNode>) {
// K1: Ok
val afterCast = model as CallUsageNodeFlameGraphModelWithTypealiasedSupertypeArgument
}
+51
View File
@@ -0,0 +1,51 @@
package
public fun bar(/*0*/ model: FlameGraphModel<CallUsageNode /* = CallTreeNode<BaseCallStackElement> */>): kotlin.Unit
public fun foo(/*0*/ model: FlameGraphModel<CallUsageNode /* = CallTreeNode<BaseCallStackElement> */>): kotlin.Unit
public abstract class BaseCallStackElement {
public constructor BaseCallStackElement()
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 interface CallTreeNode</*0*/ out T : kotlin.Any> : TreeNodeWithParent<CallWithValue<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 open class CallUsageNodeFlameGraphModel</*0*/ Call : kotlin.Any> : FlameGraphModel<CallTreeNode<Call>> {
public constructor CallUsageNodeFlameGraphModel</*0*/ Call : kotlin.Any>()
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 CallUsageNodeFlameGraphModelWithTypealiasedSupertypeArgument</*0*/ Call : kotlin.Any> : FlameGraphModel<CallTreeNodeTypealias<Call> /* = CallTreeNode<Call> */> {
public constructor CallUsageNodeFlameGraphModelWithTypealiasedSupertypeArgument</*0*/ Call : kotlin.Any>()
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 interface CallWithValue</*0*/ out T : kotlin.Any> {
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 interface FlameGraphModel</*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 interface TreeNodeWithParent</*0*/ out Data> {
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
}
internal typealias CallTreeNodeTypealias</*0*/ K> = CallTreeNode<K>
internal typealias CallUsageNode = CallTreeNode<BaseCallStackElement>