From 521e958f6d7233fdf975a6f8e5d1e77791dd8a62 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 8 Oct 2015 12:21:47 +0300 Subject: [PATCH] Serialize type annotations in builtins --- .../builtins/BuiltInsSerializerExtension.kt | 7 +++++++ .../builtins/DebugBuiltInsProtoBuf.java | 18 +++++++++++++++++- .../BuiltInsAnnotationAndConstantLoader.kt | 3 +-- core/deserialization/src/builtins.proto | 4 ++++ .../builtins/BuiltInsProtoBuf.java | 16 ++++++++++++++++ 5 files changed, 45 insertions(+), 3 deletions(-) diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt index 489c44b7499..b9b4bee0914 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerExtension.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.resolve.constants.NullValue import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.serialization.* +import org.jetbrains.kotlin.types.JetType public class BuiltInsSerializerExtension : SerializerExtension() { private val stringTable = StringTableImpl() @@ -83,4 +84,10 @@ public class BuiltInsSerializerExtension : SerializerExtension() { proto.addExtension(BuiltInsProtoBuf.parameterAnnotation, annotationSerializer.serializeAnnotation(annotation)) } } + + override fun serializeType(type: JetType, proto: ProtoBuf.Type.Builder) { + for (annotation in type.annotations) { + proto.addExtension(BuiltInsProtoBuf.typeAnnotation, annotationSerializer.serializeAnnotation(annotation)) + } + } } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java index d2877296f7d..e7cd94767ad 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java @@ -16,6 +16,7 @@ public final class DebugBuiltInsProtoBuf { 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.parameterAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.typeAnnotation); } public static final int CLASS_NAME_FIELD_NUMBER = 150; /** @@ -116,6 +117,17 @@ public final class DebugBuiltInsProtoBuf { .newFileScopedGeneratedExtension( org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); + public static final int TYPE_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Type { ... } + */ + public static final + com.google.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.kotlin.serialization.DebugProtoBuf.Type, + java.util.List> typeAnnotation = com.google.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -156,7 +168,10 @@ public final class DebugBuiltInsProtoBuf { "\201\001\n\024parameter_annotation\0222.org.jetbrains" + ".kotlin.serialization.ValueParameter\030\226\001 ", "\003(\0132..org.jetbrains.kotlin.serialization" + - ".AnnotationB\027B\025DebugBuiltInsProtoBuf" + ".Annotation:r\n\017type_annotation\022(.org.jet" + + "brains.kotlin.serialization.Type\030\226\001 \003(\0132" + + "..org.jetbrains.kotlin.serialization.Ann" + + "otationB\027B\025DebugBuiltInsProtoBuf" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -172,6 +187,7 @@ public final class DebugBuiltInsProtoBuf { propertyAnnotation.internalInit(descriptor.getExtensions().get(6)); compileTimeValue.internalInit(descriptor.getExtensions().get(7)); parameterAnnotation.internalInit(descriptor.getExtensions().get(8)); + typeAnnotation.internalInit(descriptor.getExtensions().get(9)); return null; } }; diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt index 4bae9d8aa7d..3c6f200756a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt @@ -68,8 +68,7 @@ class BuiltInsAnnotationAndConstantLoader( ): List = emptyList() override fun loadTypeAnnotations(proto: ProtoBuf.Type, nameResolver: NameResolver): List { - // TODO: support type annotations in built-ins - return listOf() + return proto.getExtension(BuiltInsProtoBuf.typeAnnotation).orEmpty().map { deserializer.deserializeAnnotation(it, nameResolver) } } override fun loadPropertyConstant( diff --git a/core/deserialization/src/builtins.proto b/core/deserialization/src/builtins.proto index fb72c6a227f..3f5b60ae717 100644 --- a/core/deserialization/src/builtins.proto +++ b/core/deserialization/src/builtins.proto @@ -51,3 +51,7 @@ extend Property { extend ValueParameter { repeated Annotation parameter_annotation = 150; } + +extend Type { + repeated Annotation type_annotation = 150; +} diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java index 6200ff6dc4e..3701f36eb2f 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java @@ -16,6 +16,7 @@ public final class BuiltInsProtoBuf { registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.propertyAnnotation); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.compileTimeValue); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.parameterAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.typeAnnotation); } public static final int CLASS_NAME_FIELD_NUMBER = 150; /** @@ -152,6 +153,21 @@ public final class BuiltInsProtoBuf { 150, com.google.protobuf.WireFormat.FieldType.MESSAGE, false); + public static final int TYPE_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Type { ... } + */ + public static final + com.google.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.kotlin.serialization.ProtoBuf.Type, + java.util.List> typeAnnotation = com.google.protobuf.GeneratedMessageLite + .newRepeatedGeneratedExtension( + org.jetbrains.kotlin.serialization.ProtoBuf.Type.getDefaultInstance(), + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.getDefaultInstance(), + null, + 150, + com.google.protobuf.WireFormat.FieldType.MESSAGE, + false); static { }