FILE: moreSpecificProtectedSimple.fir.kt public abstract interface Base : R|kotlin/Any| { } public abstract interface Derived : R|Base| { } public abstract interface M1 : R|kotlin/Any| { public abstract val success: R|kotlin/Boolean| public get(): R|kotlin/Boolean| } public abstract interface M1Sub : R|M1| { } public open class A : R|kotlin/Any| { public constructor(): R|A| { super() } protected open fun baz(a: R|Derived|): R|M1| { ^baz R|kotlin/TODO|() } protected open fun foo(a: R|Derived|): R|M1| { ^foo R|kotlin/TODO|() } public final fun f(a: R|A|, b: R|B|, d: R|Derived|): R|kotlin/Unit| { R|/a|.R|/A.baz|(R|/d|).R|/M1.success| R|/a|.R|/A.foo|(R|/d|).R|/M1.success| R|/b|.R|/B.baz|(R|/d|).R|kotlin/String.length| R|/b|.R|/B.foo|(R|/d|).R|kotlin/String.length| when (R|/a|) { ($subj$ is R|B|) -> { R|/a|.R|/A.baz|(R|/d|).# R|/a|.R|/A.baz|(R|/d|).R|/M1.success| R|/a|.R|/A.foo|(R|/d|).R|/M1.success| } } } } public final class B : R|A| { public constructor(): R|B| { super() } protected open override fun baz(a: R|Derived|): R|M1Sub| { ^baz R|kotlin/TODO|() } public final fun baz(a: R|Base|): R|kotlin/String| { ^baz R|kotlin/TODO|() } protected open override fun foo(a: R|Derived|): R|M1| { ^foo R|kotlin/TODO|() } public final fun foo(a: R|Base|): R|kotlin/String| { ^foo R|kotlin/TODO|() } }