Files
kotlin-fork/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectNew.kt
T
Dmitry Savvinov d570b863ce Introduce deprecation of companion objects nested classes
Introdude deprecation as per KT-21515. Warning is reported on type
usage, that soon will became invisible. Quickfix by adding explicit
import is added.

Idea behind implementation is to mark scopes that are deprecated (see
ClassResolutionScopesSupport).

Then, during walk along hierarchy of scopes, look at deprecation status
of the scope that has provided this classifier.
Note that we also have to check if there are *some* non-deprecated
visibility paths (because we can see classifier by two paths, e.g. if
we've added explicit import) -- then this type reference shouldn't be
treated as deprecated.
2018-02-21 16:04:49 +03:00

99 lines
2.4 KiB
Kotlin
Vendored

// !LANGUAGE: +ProhibitVisibilityOfNestedClassifiersFromSupertypesOfCompanion
// 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? = null
val d: FromB? = null
// VISIBLE: Classifiers from our own companion
val n: FromCompanionC? = null
// INVISIBLE: direct superclasses themselves.
val a: <!UNRESOLVED_REFERENCE!>A<!>? = null
val b: <!UNRESOLVED_REFERENCE!>B<!>? = null
// DEPRECATED: Classifiers from companions of direct superclasses
val e: <!UNRESOLVED_REFERENCE!>FromCompanionA<!>? = null
val f: <!UNRESOLVED_REFERENCE!>FromCompanionB<!>? = null
// INVISIBLE: "cousin" supertypes themselves
val g: <!UNRESOLVED_REFERENCE!>Alpha<!>? = null
val h: <!UNRESOLVED_REFERENCE!>Beta<!>? = null
val i: <!UNRESOLVED_REFERENCE!>Gamma<!>? = null
// DEPRECATED: classifiers from "cousin" superclasses
val k: <!UNRESOLVED_REFERENCE!>FromAlpha<!>? = null
val l: <!UNRESOLVED_REFERENCE!>FromBeta<!>? = null
val m: <!UNRESOLVED_REFERENCE!>FromGamma<!>? = null
// INVISIBLE: We don't see classifiers from companions of "cousin" superclasses
val o: <!UNRESOLVED_REFERENCE!>FromCompanionAlpha<!>? = null
val p: <!UNRESOLVED_REFERENCE!>FromCompanionBeta<!>? = null
val q: <!UNRESOLVED_REFERENCE!>FromCompanionGamma<!>? = null
// DEPRECATED: Classifiers from supertypes of our own companion
val r: <!UNRESOLVED_REFERENCE!>FromDelta<!>? = null
}