class Candidate(val symbol: AbstractFirBasedSymbol<*>) abstract class AbstractFirBasedSymbol where E : FirSymbolOwner, E : FirDeclaration { lateinit var fir: E } interface FirDeclaration interface FirSymbolOwner where E : FirSymbolOwner, E : FirDeclaration { val symbol: AbstractFirBasedSymbol } interface FirCallableMemberDeclaration> : FirSymbolOwner, FirDeclaration { override val symbol: AbstractFirBasedSymbol } fun foo(candidate: Candidate) { val me = candidate.symbol.fir if (me is FirCallableMemberDeclaration<*> && me.symbol != null) {} }