// FIR_IDENTICAL // !LANGUAGE: +ProhibitVisibilityOfNestedClassifiersFromSupertypesOfCompanion // !DIAGNOSTICS: -UNUSED_VARIABLE // See KT-21515 for a class diagram and details // Object is to prevent accidental short-name import object O { open class Alpha { class FromAlpha companion object { class FromCompanionAlpha } } open class Beta : Alpha() { class FromBeta companion object { class FromCompanionBeta } } open class A { class FromA companion object : Beta() { class FromCompanionA } } ////////////////////////// open class FarAway { class FromFarAway } open class Gamma { class FromGamma companion object : FarAway() { class FromCompanionGamma } } open class B : A() { class FromB companion object : Gamma() { class FromCompanionB } } } /////////////////////////////// open class Delta { class FromDelta } class C : O.B() { companion object : Delta() { class FromCompanionC } // VISIBLE: Classifiers from direct superclasses val c = FromA() val d = FromB() // VISIBLE: Classifiers from our own companion val n = FromCompanionC() // INVISIBLE: direct superclasses themselves. val a = A() val b = B() // DEPRECATED: Classifiers from companions of direct superclasses val e = FromCompanionA() val f = FromCompanionB() // INVISIBLE: "cousin" supertypes themselves val g = Alpha() val h = Beta() val i = Gamma() // DEPRECATED: classifiers from "cousin" superclasses val k = FromAlpha() val l = FromBeta() val m = FromGamma() // INVISIBLE: We don't see classifiers from companions of "cousin" superclasses val o = FromCompanionAlpha() val p = FromCompanionBeta() val q = FromCompanionGamma() // DEPRECATED: Classifiers from supertypes of our own companion val r = FromDelta() }