Add "hasEnumEntries" class flag to kotlinx-metadata
^KT-53929 Fixed
This commit is contained in:
@@ -32,7 +32,7 @@ public class Flags {
|
||||
public static final BooleanFlagField IS_EXPECT_CLASS = FlagField.booleanAfter(IS_EXTERNAL_CLASS);
|
||||
public static final BooleanFlagField IS_VALUE_CLASS = FlagField.booleanAfter(IS_EXPECT_CLASS);
|
||||
public static final BooleanFlagField IS_FUN_INTERFACE = FlagField.booleanAfter(IS_VALUE_CLASS);
|
||||
private static final BooleanFlagField HAS_ENUM_ENTRIES = FlagField.booleanAfter(IS_FUN_INTERFACE);
|
||||
public static final BooleanFlagField HAS_ENUM_ENTRIES = FlagField.booleanAfter(IS_FUN_INTERFACE);
|
||||
|
||||
// Constructors
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ public final class kotlinx/metadata/Flag {
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/Flag$Class {
|
||||
public static final field HAS_ENUM_ENTRIES Lkotlinx/metadata/Flag;
|
||||
public static final field INSTANCE Lkotlinx/metadata/Flag$Class;
|
||||
public static final field IS_ANNOTATION_CLASS Lkotlinx/metadata/Flag;
|
||||
public static final field IS_CLASS Lkotlinx/metadata/Flag;
|
||||
|
||||
@@ -224,6 +224,13 @@ class Flag(private val offset: Int, private val bitWidth: Int, private val value
|
||||
*/
|
||||
@JvmField
|
||||
val IS_FUN = Flag(F.IS_FUN_INTERFACE)
|
||||
|
||||
/**
|
||||
* Signifies that the corresponding enum class has ".entries" property in bytecode.
|
||||
* Always `false` for not enum classes.
|
||||
*/
|
||||
@JvmField
|
||||
val HAS_ENUM_ENTRIES = Flag(F.HAS_ENUM_ENTRIES)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -501,6 +501,10 @@ class ClassPrinter(private val settings: KotlinpSettings) : AbstractPrinter<Kotl
|
||||
supertypes.joinTo(result)
|
||||
}
|
||||
result.appendLine(" {")
|
||||
if (Flag.Class.HAS_ENUM_ENTRIES(flags!!)) {
|
||||
sb.appendLine()
|
||||
sb.appendLine(" // has Enum.entries")
|
||||
}
|
||||
result.append(sb)
|
||||
result.appendLine("}")
|
||||
}
|
||||
|
||||
+10
@@ -44,6 +44,11 @@ public class KotlinpTestGenerated extends AbstractKotlinpTest {
|
||||
runTest("libraries/tools/kotlinp/testData/Contracts.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("EnumEntries.kt")
|
||||
public void testEnumEntries() throws Exception {
|
||||
runTest("libraries/tools/kotlinp/testData/EnumEntries.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("FunInterface.kt")
|
||||
public void testFunInterface() throws Exception {
|
||||
runTest("libraries/tools/kotlinp/testData/FunInterface.kt");
|
||||
@@ -74,6 +79,11 @@ public class KotlinpTestGenerated extends AbstractKotlinpTest {
|
||||
runTest("libraries/tools/kotlinp/testData/NestedClasses.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NotEnumWithEnumEntriesEnabled.kt")
|
||||
public void testNotEnumWithEnumEntriesEnabled() throws Exception {
|
||||
runTest("libraries/tools/kotlinp/testData/NotEnumWithEnumEntriesEnabled.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("OptionalAnnotation.kt")
|
||||
public void testOptionalAnnotation() throws Exception {
|
||||
runTest("libraries/tools/kotlinp/testData/OptionalAnnotation.kt");
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// !LANGUAGE: +EnumEntries
|
||||
|
||||
enum class MyEnum {
|
||||
ONE, TWO
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// MyEnum.class
|
||||
// ------------------------------------------
|
||||
public final enum class MyEnum : kotlin/Enum<MyEnum> {
|
||||
|
||||
// signature: <init>(Ljava/lang/String;I)V
|
||||
private constructor()
|
||||
|
||||
ONE,
|
||||
|
||||
TWO,
|
||||
|
||||
// module name: test-module
|
||||
|
||||
// has Enum.entries
|
||||
}
|
||||
// META-INF/test-module.kotlin_module
|
||||
// ------------------------------------------
|
||||
module {
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// !LANGUAGE: +EnumEntries
|
||||
|
||||
class UsualClass {
|
||||
fun foo() {}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// UsualClass.class
|
||||
// ------------------------------------------
|
||||
public final class UsualClass : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public constructor()
|
||||
|
||||
// signature: foo()V
|
||||
public final fun foo(): kotlin/Unit
|
||||
|
||||
// module name: test-module
|
||||
}
|
||||
// META-INF/test-module.kotlin_module
|
||||
// ------------------------------------------
|
||||
module {
|
||||
}
|
||||
+2
-1
@@ -1023,7 +1023,8 @@ class MetadataDeclarationsComparator private constructor(private val config: Con
|
||||
Flag.Class::IS_EXTERNAL,
|
||||
Flag.Class::IS_EXPECT,
|
||||
Flag.Class::IS_VALUE,
|
||||
Flag.Class::IS_FUN
|
||||
Flag.Class::IS_FUN,
|
||||
Flag.Class::HAS_ENUM_ENTRIES,
|
||||
)
|
||||
|
||||
private val TYPE_ALIAS_FLAGS: Array<KProperty0<Flag>> = arrayOf(
|
||||
|
||||
Reference in New Issue
Block a user