class FirSession {
  constructor(name: String) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val name: String
    field = name
    get

}

interface Fir2IrComponents {
  abstract val session: FirSession
    abstract get

  abstract val classifierStorage: Fir2IrClassifierStorage
    abstract get

}

class Fir2IrComponentsStorage : Fir2IrComponents {
  constructor(session: FirSession) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override val session: FirSession
    field = session
    override get

  override lateinit var classifierStorage: Fir2IrClassifierStorage
    override get
    open set

}

class Fir2IrClassifierStorage : Fir2IrComponents {
  constructor(components: Fir2IrComponents) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private val components: Fir2IrComponents
    field = components
    private get

  override val classifierStorage: Fir2IrClassifierStorage
    override get(): Fir2IrClassifierStorage {
      return <this>.#components.<get-classifierStorage>()
    }

  override val session: FirSession
    override get(): FirSession {
      return <this>.#components.<get-session>()
    }

  private val name: String
    field = <this>.<get-session>().<get-name>()
    private get

}
