Serialize type annotations in builtins

This commit is contained in:
Denis Zharkov
2015-10-08 12:21:47 +03:00
parent e800be18c6
commit 521e958f6d
5 changed files with 45 additions and 3 deletions
@@ -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))
}
}
}
@@ -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;
/**
* <code>extend .org.jetbrains.kotlin.serialization.Type { ... }</code>
*/
public static final
com.google.protobuf.GeneratedMessage.GeneratedExtension<
org.jetbrains.kotlin.serialization.DebugProtoBuf.Type,
java.util.List<org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation>> 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;
}
};
@@ -68,8 +68,7 @@ class BuiltInsAnnotationAndConstantLoader(
): List<AnnotationDescriptor> = emptyList()
override fun loadTypeAnnotations(proto: ProtoBuf.Type, nameResolver: NameResolver): List<AnnotationDescriptor> {
// TODO: support type annotations in built-ins
return listOf()
return proto.getExtension(BuiltInsProtoBuf.typeAnnotation).orEmpty().map { deserializer.deserializeAnnotation(it, nameResolver) }
}
override fun loadPropertyConstant(
+4
View File
@@ -51,3 +51,7 @@ extend Property {
extend ValueParameter {
repeated Annotation parameter_annotation = 150;
}
extend Type {
repeated Annotation type_annotation = 150;
}
@@ -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;
/**
* <code>extend .org.jetbrains.kotlin.serialization.Type { ... }</code>
*/
public static final
com.google.protobuf.GeneratedMessageLite.GeneratedExtension<
org.jetbrains.kotlin.serialization.ProtoBuf.Type,
java.util.List<org.jetbrains.kotlin.serialization.ProtoBuf.Annotation>> 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 {
}