Serialize/deserialize annotations on enum entries
#KT-10338 Fixed
This commit is contained in:
+10
-1
@@ -174,7 +174,8 @@ public class DescriptorSerializer {
|
||||
for (DeclarationDescriptor descriptor : sort(DescriptorUtils.getAllDescriptors(classDescriptor.getUnsubstitutedInnerClassesScope()))) {
|
||||
int name = getSimpleNameIndex(descriptor.getName());
|
||||
if (isEnumEntry(descriptor)) {
|
||||
builder.addEnumEntry(name);
|
||||
builder.addEnumEntryName(name);
|
||||
builder.addEnumEntry(enumEntryProto((ClassDescriptor) descriptor));
|
||||
}
|
||||
else {
|
||||
builder.addNestedClassName(name);
|
||||
@@ -357,6 +358,14 @@ public class DescriptorSerializer {
|
||||
return builder;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ProtoBuf.EnumEntry.Builder enumEntryProto(@NotNull ClassDescriptor descriptor) {
|
||||
ProtoBuf.EnumEntry.Builder builder = ProtoBuf.EnumEntry.newBuilder();
|
||||
builder.setName(getSimpleNameIndex(descriptor.getName()));
|
||||
extension.serializeEnumEntry(descriptor, builder);
|
||||
return builder;
|
||||
}
|
||||
|
||||
private static int getAccessorFlags(@NotNull PropertyAccessorDescriptor accessor) {
|
||||
return Flags.getAccessorFlags(
|
||||
hasAnnotations(accessor),
|
||||
|
||||
@@ -45,6 +45,9 @@ public abstract class SerializerExtension {
|
||||
public void serializeProperty(@NotNull PropertyDescriptor descriptor, @NotNull ProtoBuf.Property.Builder proto) {
|
||||
}
|
||||
|
||||
public void serializeEnumEntry(@NotNull ClassDescriptor descriptor, @NotNull ProtoBuf.EnumEntry.Builder proto) {
|
||||
}
|
||||
|
||||
public void serializeValueParameter(@NotNull ValueParameterDescriptor descriptor, @NotNull ProtoBuf.ValueParameter.Builder proto) {
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -54,6 +54,12 @@ public open class KotlinSerializerExtensionBase(private val protocol: Serializer
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeEnumEntry(descriptor: ClassDescriptor, proto: ProtoBuf.EnumEntry.Builder) {
|
||||
for (annotation in descriptor.annotations) {
|
||||
proto.addExtension(protocol.enumEntryAnnotation, annotationSerializer.serializeAnnotation(annotation))
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeValueParameter(descriptor: ValueParameterDescriptor, proto: ProtoBuf.ValueParameter.Builder) {
|
||||
for (annotation in descriptor.annotations) {
|
||||
proto.addExtension(protocol.parameterAnnotation, annotationSerializer.serializeAnnotation(annotation))
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package test
|
||||
|
||||
annotation class Anno(val value: String = "0", val x: Int = 0)
|
||||
annotation class Bnno
|
||||
|
||||
enum class Eee {
|
||||
@Anno()
|
||||
Entry1,
|
||||
Entry2,
|
||||
@Anno("3") @Bnno
|
||||
Entry3,
|
||||
@Anno("4", 4)
|
||||
Entry4,
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package test
|
||||
|
||||
public final annotation class Anno : kotlin.Annotation {
|
||||
public constructor Anno(/*0*/ value: kotlin.String = ..., /*1*/ x: kotlin.Int = ...)
|
||||
public final val value: kotlin.String
|
||||
public final val x: kotlin.Int
|
||||
}
|
||||
|
||||
public final annotation class Bnno : kotlin.Annotation {
|
||||
public constructor Bnno()
|
||||
}
|
||||
|
||||
public final enum class Eee : kotlin.Enum<test.Eee> {
|
||||
@test.Anno() enum entry Entry1
|
||||
|
||||
enum entry Entry2
|
||||
|
||||
@test.Anno(value = "3") @test.Bnno() enum entry Entry3
|
||||
|
||||
@test.Anno(value = "4", x = 4) enum entry Entry4
|
||||
|
||||
private constructor Eee()
|
||||
public final override /*1*/ /*fake_override*/ val name: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
|
||||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
|
||||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: test.Eee): kotlin.Int
|
||||
|
||||
// Static members
|
||||
@kotlin.Deprecated(level = DeprecationLevel.ERROR, message = "Use 'values()' function instead", replaceWith = kotlin.ReplaceWith(expression = "this.values()", imports = {})) public final /*synthesized*/ val values: kotlin.Array<test.Eee>
|
||||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): test.Eee
|
||||
public final /*synthesized*/ fun values(): kotlin.Array<test.Eee>
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -74,6 +74,10 @@ public class BuiltInsSerializerTest : TestCaseWithTmpdir() {
|
||||
doTest("annotationTargets.kt")
|
||||
}
|
||||
|
||||
fun testAnnotatedEnumEntry() {
|
||||
doTest("annotatedEnumEntry.kt")
|
||||
}
|
||||
|
||||
fun testPrimitives() {
|
||||
doTest("annotationArguments/primitives.kt")
|
||||
}
|
||||
|
||||
+30
-14
@@ -14,6 +14,7 @@ public final class DebugBuiltInsProtoBuf {
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.functionAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.propertyAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.compileTimeValue);
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.enumEntryAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.parameterAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.typeAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.typeParameterAnnotation);
|
||||
@@ -95,6 +96,17 @@ public final class DebugBuiltInsProtoBuf {
|
||||
.newFileScopedGeneratedExtension(
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.class,
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.getDefaultInstance());
|
||||
public static final int ENUM_ENTRY_ANNOTATION_FIELD_NUMBER = 150;
|
||||
/**
|
||||
* <code>extend .org.jetbrains.kotlin.serialization.EnumEntry { ... }</code>
|
||||
*/
|
||||
public static final
|
||||
com.google.protobuf.GeneratedMessage.GeneratedExtension<
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.EnumEntry,
|
||||
java.util.List<org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation>> enumEntryAnnotation = com.google.protobuf.GeneratedMessage
|
||||
.newFileScopedGeneratedExtension(
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class,
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
|
||||
public static final int PARAMETER_ANNOTATION_FIELD_NUMBER = 150;
|
||||
/**
|
||||
* <code>extend .org.jetbrains.kotlin.serialization.ValueParameter { ... }</code>
|
||||
@@ -160,17 +172,20 @@ public final class DebugBuiltInsProtoBuf {
|
||||
"lue\022,.org.jetbrains.kotlin.serialization" +
|
||||
".Property\030\227\001 \001(\0132=.org.jetbrains.kotlin." +
|
||||
"serialization.Annotation.Argument.Value:" +
|
||||
"\201\001\n\024parameter_annotation\0222.org.jetbrains" +
|
||||
".kotlin.serialization.ValueParameter\030\226\001 " +
|
||||
"\003(\0132..org.jetbrains.kotlin.serialization" +
|
||||
".Annotation:r\n\017type_annotation\022(.org.jet" +
|
||||
"brains.kotlin.serialization.Type\030\226\001 \003(\0132" +
|
||||
"..org.jetbrains.kotlin.serialization.Ann" +
|
||||
"otation:\205\001\n\031type_parameter_annotation\0221.",
|
||||
"org.jetbrains.kotlin.serialization.TypeP" +
|
||||
"arameter\030\226\001 \003(\0132..org.jetbrains.kotlin.s" +
|
||||
"erialization.AnnotationB\027B\025DebugBuiltIns" +
|
||||
"ProtoBuf"
|
||||
"}\n\025enum_entry_annotation\022-.org.jetbrains" +
|
||||
".kotlin.serialization.EnumEntry\030\226\001 \003(\0132." +
|
||||
".org.jetbrains.kotlin.serialization.Anno" +
|
||||
"tation:\201\001\n\024parameter_annotation\0222.org.je" +
|
||||
"tbrains.kotlin.serialization.ValueParame" +
|
||||
"ter\030\226\001 \003(\0132..org.jetbrains.kotlin.serial" +
|
||||
"ization.Annotation:r\n\017type_annotation\022(.",
|
||||
"org.jetbrains.kotlin.serialization.Type\030" +
|
||||
"\226\001 \003(\0132..org.jetbrains.kotlin.serializat" +
|
||||
"ion.Annotation:\205\001\n\031type_parameter_annota" +
|
||||
"tion\0221.org.jetbrains.kotlin.serializatio" +
|
||||
"n.TypeParameter\030\226\001 \003(\0132..org.jetbrains.k" +
|
||||
"otlin.serialization.AnnotationB\027B\025DebugB" +
|
||||
"uiltInsProtoBuf"
|
||||
};
|
||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||
@@ -184,9 +199,10 @@ public final class DebugBuiltInsProtoBuf {
|
||||
functionAnnotation.internalInit(descriptor.getExtensions().get(4));
|
||||
propertyAnnotation.internalInit(descriptor.getExtensions().get(5));
|
||||
compileTimeValue.internalInit(descriptor.getExtensions().get(6));
|
||||
parameterAnnotation.internalInit(descriptor.getExtensions().get(7));
|
||||
typeAnnotation.internalInit(descriptor.getExtensions().get(8));
|
||||
typeParameterAnnotation.internalInit(descriptor.getExtensions().get(9));
|
||||
enumEntryAnnotation.internalInit(descriptor.getExtensions().get(7));
|
||||
parameterAnnotation.internalInit(descriptor.getExtensions().get(8));
|
||||
typeAnnotation.internalInit(descriptor.getExtensions().get(9));
|
||||
typeParameterAnnotation.internalInit(descriptor.getExtensions().get(10));
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ public final class DebugJsProtoBuf {
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.functionAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.propertyAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.compileTimeValue);
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.enumEntryAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.parameterAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.typeAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.typeParameterAnnotation);
|
||||
@@ -1859,6 +1860,17 @@ public final class DebugJsProtoBuf {
|
||||
.newFileScopedGeneratedExtension(
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.class,
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.getDefaultInstance());
|
||||
public static final int ENUM_ENTRY_ANNOTATION_FIELD_NUMBER = 130;
|
||||
/**
|
||||
* <code>extend .org.jetbrains.kotlin.serialization.EnumEntry { ... }</code>
|
||||
*/
|
||||
public static final
|
||||
com.google.protobuf.GeneratedMessage.GeneratedExtension<
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.EnumEntry,
|
||||
java.util.List<org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation>> enumEntryAnnotation = com.google.protobuf.GeneratedMessage
|
||||
.newFileScopedGeneratedExtension(
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class,
|
||||
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
|
||||
public static final int PARAMETER_ANNOTATION_FIELD_NUMBER = 130;
|
||||
/**
|
||||
* <code>extend .org.jetbrains.kotlin.serialization.ValueParameter { ... }</code>
|
||||
@@ -1939,17 +1951,20 @@ public final class DebugJsProtoBuf {
|
||||
"ime_value\022,.org.jetbrains.kotlin.seriali" +
|
||||
"zation.Property\030\203\001 \001(\0132=.org.jetbrains.k" +
|
||||
"otlin.serialization.Annotation.Argument." +
|
||||
"Value:\201\001\n\024parameter_annotation\0222.org.jet" +
|
||||
"brains.kotlin.serialization.ValueParamet" +
|
||||
"er\030\202\001 \003(\0132..org.jetbrains.kotlin.seriali" +
|
||||
"zation.Annotation:r\n\017type_annotation\022(.o" +
|
||||
"rg.jetbrains.kotlin.serialization.Type\030\202" +
|
||||
"\001 \003(\0132..org.jetbrains.kotlin.serializati" +
|
||||
"on.Annotation:\205\001\n\031type_parameter_annotat",
|
||||
"ion\0221.org.jetbrains.kotlin.serialization" +
|
||||
".TypeParameter\030\202\001 \003(\0132..org.jetbrains.ko" +
|
||||
"tlin.serialization.AnnotationB\021B\017DebugJs" +
|
||||
"ProtoBuf"
|
||||
"Value:}\n\025enum_entry_annotation\022-.org.jet" +
|
||||
"brains.kotlin.serialization.EnumEntry\030\202\001" +
|
||||
" \003(\0132..org.jetbrains.kotlin.serializatio" +
|
||||
"n.Annotation:\201\001\n\024parameter_annotation\0222." +
|
||||
"org.jetbrains.kotlin.serialization.Value" +
|
||||
"Parameter\030\202\001 \003(\0132..org.jetbrains.kotlin." +
|
||||
"serialization.Annotation:r\n\017type_annotat",
|
||||
"ion\022(.org.jetbrains.kotlin.serialization" +
|
||||
".Type\030\202\001 \003(\0132..org.jetbrains.kotlin.seri" +
|
||||
"alization.Annotation:\205\001\n\031type_parameter_" +
|
||||
"annotation\0221.org.jetbrains.kotlin.serial" +
|
||||
"ization.TypeParameter\030\202\001 \003(\0132..org.jetbr" +
|
||||
"ains.kotlin.serialization.AnnotationB\021B\017" +
|
||||
"DebugJsProtoBuf"
|
||||
};
|
||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||
@@ -1979,9 +1994,10 @@ public final class DebugJsProtoBuf {
|
||||
functionAnnotation.internalInit(descriptor.getExtensions().get(2));
|
||||
propertyAnnotation.internalInit(descriptor.getExtensions().get(3));
|
||||
compileTimeValue.internalInit(descriptor.getExtensions().get(4));
|
||||
parameterAnnotation.internalInit(descriptor.getExtensions().get(5));
|
||||
typeAnnotation.internalInit(descriptor.getExtensions().get(6));
|
||||
typeParameterAnnotation.internalInit(descriptor.getExtensions().get(7));
|
||||
enumEntryAnnotation.internalInit(descriptor.getExtensions().get(5));
|
||||
parameterAnnotation.internalInit(descriptor.getExtensions().get(6));
|
||||
typeAnnotation.internalInit(descriptor.getExtensions().get(7));
|
||||
typeParameterAnnotation.internalInit(descriptor.getExtensions().get(8));
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -111,6 +111,10 @@ public class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() {
|
||||
doTest("builtinsSerializer/annotationTargets.kt")
|
||||
}
|
||||
|
||||
fun testAnnotatedEnumEntry() {
|
||||
doTest("builtinsSerializer/annotatedEnumEntry.kt")
|
||||
}
|
||||
|
||||
fun testPrimitives() {
|
||||
doTest("builtinsSerializer/annotationArguments/primitives.kt")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user