class IrClassSymbolImpl(descriptor: String? = null) : IrBindableSymbolBase(descriptor), IrClassSymbol interface IrClassSymbol : IrClassifierSymbol, IrBindableSymbol interface IrClassifierSymbol : IrSymbol, TypeConstructorMarker { override val descriptor: CharSequence } interface IrSymbol { val descriptor: Any } interface TypeConstructorMarker interface IrBindableSymbol : IrSymbol { override val descriptor: D } abstract class IrBindableSymbolBase(descriptor: D?) : IrBindableSymbol, IrSymbolBase(descriptor) abstract class IrSymbolBase( private val _descriptor: D? ) : IrSymbol { override val descriptor: D get() = _descriptor!! }