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 {
}