abstract class AbstractFirBasedSymbol where E : FirDeclaration, E : FirSymbolOwner { lateinit var fir: E get set constructor() /* primary */ { super/*Any*/() /* () */ } } class Candidate { val symbol: AbstractFirBasedSymbol<*> field = symbol get constructor(symbol: AbstractFirBasedSymbol<*>) /* primary */ { super/*Any*/() /* () */ } } interface FirCallableMemberDeclaration> : FirDeclaration, FirSymbolOwner { abstract override val symbol: AbstractFirBasedSymbol abstract override get } interface FirDeclaration { } interface FirSymbolOwner where E : FirDeclaration, E : FirSymbolOwner { abstract val symbol: AbstractFirBasedSymbol abstract get } fun foo(candidate: Candidate) { val me: FirSymbolOwner<*> = candidate.().() when { when { me is FirCallableMemberDeclaration<*> -> EQEQ(arg0 = me /*as FirCallableMemberDeclaration> */.(), arg1 = null).not() else -> false } -> { // BLOCK } } }