Files
kotlin-fork/compiler/testData/diagnostics/tests/controlFlowAnalysis/enumCompanionInterdependence.kt
T
2023-01-30 09:29:57 +00:00

82 lines
1.9 KiB
Kotlin
Vendored

enum class B(val x: Int) {
B1(1),
B2(2);
companion object {
val SUM = B1.x + B2.x
val COPY = B1
}
}
enum class C(val x: Int) {
C1(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>SUM<!>),
C2(1);
companion object {
val COPY = C2
val SUM = C1.x + COPY.x
}
}
// From KT-11769
enum class Fruit(personal: Int) {
APPLE(1);
companion object {
val common = 20
}
val score = personal + <!UNINITIALIZED_VARIABLE!>common<!>
val score2 = { personal + common }()
}
// Another example from KT-11769
enum class EnumCompanion1(val x: Int) {
INSTANCE(<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.foo()),
ANOTHER(<!UNINITIALIZED_ENUM_COMPANION!>foo()<!>);
companion object {
fun foo() = 42
}
}
// Also should be reported for implicit receiver
enum class EnumCompanion2(val x: Int) {
INSTANCE(<!UNINITIALIZED_ENUM_COMPANION!>foo()<!>);
companion object {
fun foo() = 42
}
}
// But not for another enum
enum class EnumCompanion3(val x: Int) {
INSTANCE(EnumCompanion1.foo()),
ANOTHER(EnumCompanion2.foo());
companion object
}
interface ExtractableCodeDescriptor {
fun isInterface(): Boolean
}
enum class ExtractionTarget(val targetName: String) {
FUNCTION("function") {
override fun isAvailable(descriptor: ExtractableCodeDescriptor) = true
},
LAZY_PROPERTY("lazy property") {
override fun isAvailable(descriptor: ExtractableCodeDescriptor): Boolean {
// Should not report UNINITIALIZED_ENUM_COMPANION
return checkNotTrait(descriptor)
}
};
abstract fun isAvailable(descriptor: ExtractableCodeDescriptor): Boolean
companion object {
fun checkNotTrait(descriptor: ExtractableCodeDescriptor): Boolean {
return !descriptor.isInterface()
}
}
}