K1/K2: add Enum.entries unconditionally and filter them out in tower

Before this commit, we added Enum.entries only in case when
LanguageFeature.EnumEntries was ON (with an exception in K1/Java case).
In this commit we add Enum.entries unconditionally, and in case
the language feature is OFF we filter them out during tower resolve.
This commit is contained in:
Mikhail Glukhikh
2022-07-27 11:22:49 +02:00
committed by Space
parent 0a5b3f1e13
commit 7333589663
97 changed files with 322 additions and 21 deletions
@@ -8,7 +8,7 @@ import kotlin.test.assertTrue
enum class E { X, Y, Z }
fun box(): String {
assertTrue(E::class.members.size in 11..12, "" + E::class.members.size)
assertTrue(E::class.members.size in 12..13, "" + E::class.members.size)
assertEquals("Y", E::name.call(E.Y))
assertEquals(2, E::ordinal.call(E.Z))
return "OK"
@@ -12,6 +12,7 @@ public final enum class MyEnum : kotlin.Enum<test.MyEnum> {
public final /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<test.MyEnum!>!
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<test.MyEnum>
public final /*synthesized*/ fun valueOf(/*0*/ kotlin.String): test.MyEnum
public final /*synthesized*/ fun values(): kotlin.Array<test.MyEnum>
}
@@ -18,6 +18,7 @@ public final enum class MyEnum : kotlin.Enum<test.MyEnum> {
public final /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<test.MyEnum!>!
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<test.MyEnum>
public final /*synthesized*/ fun valueOf(/*0*/ kotlin.String): test.MyEnum
public final /*synthesized*/ fun values(): kotlin.Array<test.MyEnum>
}
@@ -20,6 +20,7 @@ public final enum class K : kotlin.Enum<test.K> {
public final /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<test.K!>!
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<test.K>
public final /*synthesized*/ fun valueOf(/*0*/ kotlin.String): test.K
public final /*synthesized*/ fun values(): kotlin.Array<test.K>
}
@@ -28,6 +28,7 @@ package test {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<test.MyEnum>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): test.MyEnum
public final /*synthesized*/ fun values(): kotlin.Array<test.MyEnum>
}
@@ -45,6 +45,7 @@ package foo {
public open override /*3*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<foo.ExportedEnum>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): foo.ExportedEnum
public final /*synthesized*/ fun values(): kotlin.Array<foo.ExportedEnum>
}
@@ -35,6 +35,7 @@ package foo {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<foo.Nums>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): foo.Nums
public final /*synthesized*/ fun values(): kotlin.Array<foo.Nums>
}
@@ -17,6 +17,7 @@ public final external enum class E : kotlin.Enum<E> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<E>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): E
public final /*synthesized*/ fun values(): kotlin.Array<E>
}
@@ -30,6 +30,7 @@ public external interface I {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<I.E>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): I.E
public final /*synthesized*/ fun values(): kotlin.Array<I.E>
}
@@ -41,6 +41,7 @@ public final external enum class E : kotlin.Enum<E> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<E>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): E
public final /*synthesized*/ fun values(): kotlin.Array<E>
}
@@ -58,6 +59,7 @@ public final external enum class F : kotlin.Enum<F>, I {
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<F>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): F
public final /*synthesized*/ fun values(): kotlin.Array<F>
}
@@ -22,6 +22,7 @@ public final external inline enum class E : kotlin.Enum<E> {
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<E>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): E
public final /*synthesized*/ fun values(): kotlin.Array<E>
}
@@ -34,6 +34,7 @@ public final external enum class E : kotlin.Enum<E> {
}
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<E>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): E
public final /*synthesized*/ fun values(): kotlin.Array<E>
}
@@ -56,6 +56,7 @@ public final enum class EnumSpecialized : kotlin.Enum<EnumSpecialized>, Foo<kotl
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<EnumSpecialized>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): EnumSpecialized
public final /*synthesized*/ fun values(): kotlin.Array<EnumSpecialized>
}
@@ -19,6 +19,7 @@ public final enum class MyEnum : kotlin.Enum<MyEnum> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<MyEnum>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): MyEnum
public final /*synthesized*/ fun values(): kotlin.Array<MyEnum>
}
@@ -42,6 +43,7 @@ public final enum class MyOtherEnum : kotlin.Enum<MyOtherEnum> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<MyOtherEnum>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): MyOtherEnum
public final /*synthesized*/ fun values(): kotlin.Array<MyOtherEnum>
}
@@ -33,6 +33,7 @@ public final enum class JvmTarget : kotlin.Enum<JvmTarget> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<JvmTarget>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): JvmTarget
public final /*synthesized*/ fun values(): kotlin.Array<JvmTarget>
}
@@ -20,6 +20,7 @@ public final enum class Color : kotlin.Enum<Color> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<Color>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Color
public final /*synthesized*/ fun values(): kotlin.Array<Color>
}
@@ -20,6 +20,7 @@ public final enum class Format : kotlin.Enum<Format> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<Format>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Format
public final /*synthesized*/ fun values(): kotlin.Array<Format>
}
@@ -46,6 +46,7 @@ package test {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<test.E>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): test.E
public final /*synthesized*/ fun values(): kotlin.Array<test.E>
}
@@ -63,6 +63,7 @@ public final enum class Foo3 : kotlin.Enum<Foo3> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<Foo3>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Foo3
public final /*synthesized*/ fun values(): kotlin.Array<Foo3>
}
@@ -60,6 +60,7 @@ public final enum class Foo3 : kotlin.Enum<Foo3> {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<Foo3>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Foo3
public final /*synthesized*/ fun values(): kotlin.Array<Foo3>
}
@@ -11,6 +11,9 @@ public abstract interface CustomAnnotation : R|kotlin/Any| {
public final static fun valueOf(value: R|kotlin/String|): R|test/CustomAnnotation.MyEnum| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/CustomAnnotation.MyEnum>|
public get(): R|kotlin/enums/EnumEntries<test/CustomAnnotation.MyEnum>|
}
@R|test/CustomAnnotation.MyAnnotation|(value = R|test/CustomAnnotation.MyEnum.ONE|()) public open class MyTest : R|kotlin/Any| {
public constructor(): R|test/CustomAnnotation.MyTest|
@@ -11,6 +11,9 @@ public open class EnumArgumentWithCustomToString : R|kotlin/Any| {
public final static fun valueOf(value: R|kotlin/String|): R|test/EnumArgumentWithCustomToString.E| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumArgumentWithCustomToString.E>|
public get(): R|kotlin/enums/EnumEntries<test/EnumArgumentWithCustomToString.E>|
}
public final annotation class EnumAnno : R|kotlin/Annotation| {
public constructor(value: R|test/EnumArgumentWithCustomToString.E|): R|test/EnumArgumentWithCustomToString.EnumAnno|
@@ -10,6 +10,9 @@ public final enum class EnumConstructorParameter : R|kotlin/Enum<test/EnumConstr
public final static fun valueOf(value: R|kotlin/String|): R|test/EnumConstructorParameter| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumConstructorParameter>|
public get(): R|kotlin/enums/EnumEntries<test/EnumConstructorParameter>|
public final annotation class Anno : R|kotlin/Annotation| {
public constructor(value: R|kotlin/String|): R|test/EnumConstructorParameter.Anno|
@@ -15,5 +15,8 @@ public open class NestedEnumArgument : R|kotlin/Any| {
public final static fun valueOf(value: R|kotlin/String|): R|test/NestedEnumArgument.E| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/NestedEnumArgument.E>|
public get(): R|kotlin/enums/EnumEntries<test/NestedEnumArgument.E>|
}
}
@@ -13,4 +13,7 @@ public final enum class EnumMembers : R|kotlin/Enum<test/EnumMembers!>| {
public final static fun valueOf(value: R|kotlin/String|): R|test/EnumMembers| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumMembers>|
public get(): R|kotlin/enums/EnumEntries<test/EnumMembers>|
}
@@ -7,6 +7,9 @@ public final enum class EnumWithSpecializedEntry : R|kotlin/Enum<test/EnumWithSp
public final static fun valueOf(value: R|kotlin/String|): R|test/EnumWithSpecializedEntry| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumWithSpecializedEntry>|
public get(): R|kotlin/enums/EnumEntries<test/EnumWithSpecializedEntry>|
public/*package*/ open class Nested : R|kotlin/Any| {
public/*package*/ constructor(): R|test/EnumWithSpecializedEntry.Nested|
@@ -7,4 +7,7 @@ public final enum class JavaEnum : R|kotlin/Enum<test/JavaEnum!>| {
public final static fun valueOf(value: R|kotlin/String|): R|test/JavaEnum| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/JavaEnum>|
public get(): R|kotlin/enums/EnumEntries<test/JavaEnum>|
}
@@ -8,6 +8,9 @@ public final enum class Enum : R|kotlin/Enum<test/Enum!>| {
public final static fun valueOf(value: R|kotlin/String|): R|test/Enum| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/Enum>|
public get(): R|kotlin/enums/EnumEntries<test/Enum>|
public open inner class Inner : R|kotlin/Any| {
public/*package*/ open fun bar(): R|kotlin/Unit|
@@ -16,4 +16,7 @@ public final enum class StaticMembersInEnum : R|kotlin/Enum<test/StaticMembersIn
public final static fun valueOf(value: R|kotlin/String|): R|test/StaticMembersInEnum| {
}
public final static val entries: R|kotlin/enums/EnumEntries<test/StaticMembersInEnum>|
public get(): R|kotlin/enums/EnumEntries<test/StaticMembersInEnum>|
}