abstract class AbstractFirBasedSymbol<E> where E : FirDeclaration, E : FirSymbolOwner<E> {
  lateinit var fir: E
    get
    set

  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class Candidate {
  val symbol: AbstractFirBasedSymbol<*>
    field = symbol
    get

  constructor(symbol: AbstractFirBasedSymbol<*>) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> : FirDeclaration, FirSymbolOwner<F> {
  abstract override val symbol: AbstractFirBasedSymbol<F>
    abstract override get

}

interface FirDeclaration {
}

interface FirSymbolOwner<E> where E : FirDeclaration, E : FirSymbolOwner<E> {
  abstract val symbol: AbstractFirBasedSymbol<E>
    abstract get

}

fun foo(candidate: Candidate) {
  val me: Any = candidate.<get-symbol>().<get-fir>()
  when {
    when {
      me is FirCallableMemberDeclaration<*> -> EQEQ(arg0 = me /*as FirCallableMemberDeclaration<*> */.<get-symbol>(), arg1 = null).not()
      else -> false
    } -> { // BLOCK
    }
  }
}

