KT-29340 Provide effective modality for enum class in IR

* if enum class has abstract members, then it is ABSTRACT
* otherwise, if enum class has entries with members, then it is OPEN
* otherwise, it is FINAL.
This commit is contained in:
Dmitry Petrov
2019-01-21 12:53:13 +03:00
parent efdb4e1d5d
commit 360bfcaf6a
16 changed files with 776 additions and 39 deletions
@@ -0,0 +1,46 @@
enum class TestFinalEnum1 {
X1
}
enum class TestFinalEnum2(val x: Int) {
X1(1)
}
enum class TestFinalEnum3 {
X1
;
fun doStuff() {}
}
enum class TestOpenEnum1 {
X1 {
override fun toString() = "X1"
}
}
enum class TestOpenEnum2 {
X1 {
override fun foo() {}
};
open fun foo() {}
}
enum class TestAbstractEnum1 {
X1 {
override fun foo() {}
};
abstract fun foo()
}
interface IFoo {
fun foo()
}
enum class TestAbstractEnum2 : IFoo {
X1 {
override fun foo() {}
}
}