// FIR_IDENTICAL interface FirElement { fun accept() {} } // Provides `FirElement::accept`, because has no override for it abstract class FirPureAbstractElement : FirElement interface FirDeclarationStatus : FirElement { override fun accept() {} } interface FirResolvedDeclarationStatus : FirDeclarationStatus { override fun accept() {} } // IDEALLY: // Provides `FirDeclarationStatus::accept`, because interits // `FirElement::accept` and `FirDeclarationStatus::accept`, // and the latter subsumes the former. // REALLY: // Contains an IO, which is an override. So, unlike `FirPureAbstractElement`, // this class does have some override. We make sure this IO is green Kotlin // by calculating `nonSubsumed()` for the base functions open class FirDeclarationStatusImpl : FirPureAbstractElement(), FirDeclarationStatus // IDEALLY: // Provides `FirResolvedDeclarationStatus::accept`, because // inherits `FirDeclarationStatus::accept` and `FirResolvedDeclarationStatus::accept`, // and the latter subsumes the former. // REALLY: // Inherits `IO FirDeclarationStatusImpl::accept` and `FirResolvedDeclarationStatus::accept`. // Contains an IO for the above 2 functions. To check if this is green, we unwrap the IO in // the base and then check `nonSubsumed()`, thus doing what is written in "IDEALLY". class FirResolvedDeclarationStatusImpl : FirDeclarationStatusImpl(), FirResolvedDeclarationStatus