JS: serialize/deserialize type annotations similarly to JVM

No new tests added because there are some on extension functions, which soon
will depend on type annotations to be preserved to work correctly
This commit is contained in:
Alexander Udalov
2015-05-15 20:12:42 +03:00
parent a2b1a86ef5
commit 7a1b3bfbed
5 changed files with 818 additions and 806 deletions
File diff suppressed because it is too large Load Diff
+4
View File
@@ -34,6 +34,10 @@ extend Callable.ValueParameter {
repeated Annotation parameter_annotation = 130;
}
extend Type {
repeated Annotation type_annotation = 130;
}
message Classes {
// id in StringTable
repeated int32 class_name = 1 [packed = true];
File diff suppressed because it is too large Load Diff
@@ -58,8 +58,8 @@ class KotlinJavascriptAnnotationAndConstantLoader(
}
override fun loadTypeAnnotations(proto: ProtoBuf.Type, nameResolver: NameResolver): List<AnnotationDescriptor> {
// TODO: support type annotations for js descriptors
return listOf()
val annotations = proto.getExtension(JsProtoBuf.typeAnnotation).orEmpty()
return annotations.map { proto -> deserializer.deserializeAnnotation(proto, nameResolver) }
}
override fun loadPropertyConstant(
@@ -16,11 +16,17 @@
package org.jetbrains.kotlin.serialization.js
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.resolve.constants.NullValue
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.serialization.*
import org.jetbrains.kotlin.serialization.AnnotationSerializer
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.SerializerExtension
import org.jetbrains.kotlin.serialization.StringTable
import org.jetbrains.kotlin.types.JetType
public object KotlinJavascriptSerializerExtension : SerializerExtension() {
override fun serializeClass(descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder, stringTable: StringTable) {
@@ -54,4 +60,10 @@ public object KotlinJavascriptSerializerExtension : SerializerExtension() {
proto.addExtension(JsProtoBuf.parameterAnnotation, AnnotationSerializer.serializeAnnotation(annotation, stringTable))
}
}
}
override fun serializeType(type: JetType, proto: ProtoBuf.Type.Builder, stringTable: StringTable) {
for (annotation in type.getAnnotations()) {
proto.addExtension(JsProtoBuf.typeAnnotation, AnnotationSerializer.serializeAnnotation(annotation, stringTable))
}
}
}