From e1ccb92438916cca4a859e5628bb3faa6a8e5ebc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 2 Oct 2015 16:21:00 +0300 Subject: [PATCH] Write built-in extensions to new protobuf messages --- .../builtins/BuiltInsSerializerExtension.kt | 25 ++++- .../builtins/DebugBuiltInsProtoBuf.java | 103 ++++++++++++++---- .../BuiltInsAnnotationAndConstantLoader.kt | 4 +- core/deserialization/src/builtins.proto | 15 ++- .../builtins/BuiltInsProtoBuf.java | 74 ++++++++++++- 5 files changed, 193 insertions(+), 28 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 b4d0319d34e..489c44b7499 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 @@ -45,11 +45,34 @@ public class BuiltInsSerializerExtension : SerializerExtension() { override fun serializeCallable(callable: CallableMemberDescriptor, proto: ProtoBuf.Callable.Builder) { for (annotation in callable.annotations) { - proto.addExtension(BuiltInsProtoBuf.callableAnnotation, annotationSerializer.serializeAnnotation(annotation)) + proto.addExtension(BuiltInsProtoBuf.oldCallableAnnotation, annotationSerializer.serializeAnnotation(annotation)) } val propertyDescriptor = callable as? PropertyDescriptor ?: return val compileTimeConstant = propertyDescriptor.compileTimeInitializer if (compileTimeConstant != null && compileTimeConstant !is NullValue) { + val valueProto = annotationSerializer.valueProto(compileTimeConstant) + proto.setExtension(BuiltInsProtoBuf.oldCompileTimeValue, valueProto.build()) + } + } + + override fun serializeConstructor(descriptor: ConstructorDescriptor, proto: ProtoBuf.Constructor.Builder) { + for (annotation in descriptor.annotations) { + proto.addExtension(BuiltInsProtoBuf.constructorAnnotation, annotationSerializer.serializeAnnotation(annotation)) + } + } + + override fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) { + for (annotation in descriptor.annotations) { + proto.addExtension(BuiltInsProtoBuf.functionAnnotation, annotationSerializer.serializeAnnotation(annotation)) + } + } + + override fun serializeProperty(descriptor: PropertyDescriptor, proto: ProtoBuf.Property.Builder) { + for (annotation in descriptor.annotations) { + proto.addExtension(BuiltInsProtoBuf.propertyAnnotation, annotationSerializer.serializeAnnotation(annotation)) + } + val compileTimeConstant = descriptor.compileTimeInitializer ?: return + if (compileTimeConstant !is NullValue) { val valueProto = annotationSerializer.valueProto(compileTimeConstant) proto.setExtension(BuiltInsProtoBuf.compileTimeValue, valueProto.build()) } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java index e9e06130ac1..d2877296f7d 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java @@ -9,7 +9,11 @@ public final class DebugBuiltInsProtoBuf { com.google.protobuf.ExtensionRegistry registry) { registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.className); registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.classAnnotation); - registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.callableAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.oldCallableAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.oldCompileTimeValue); + registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.constructorAnnotation); + 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.parameterAnnotation); } @@ -35,24 +39,68 @@ public final class DebugBuiltInsProtoBuf { .newFileScopedGeneratedExtension( org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); - public static final int CALLABLE_ANNOTATION_FIELD_NUMBER = 150; + public static final int OLD_CALLABLE_ANNOTATION_FIELD_NUMBER = 150; /** * extend .org.jetbrains.kotlin.serialization.Callable { ... } */ public static final com.google.protobuf.GeneratedMessage.GeneratedExtension< org.jetbrains.kotlin.serialization.DebugProtoBuf.Callable, - java.util.List> callableAnnotation = com.google.protobuf.GeneratedMessage + java.util.List> oldCallableAnnotation = com.google.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); + public static final int OLD_COMPILE_TIME_VALUE_FIELD_NUMBER = 151; + /** + * extend .org.jetbrains.kotlin.serialization.Callable { ... } + */ + public static final + com.google.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.kotlin.serialization.DebugProtoBuf.Callable, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value> oldCompileTimeValue = com.google.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.class, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.getDefaultInstance()); + public static final int CONSTRUCTOR_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Constructor { ... } + */ + public static final + com.google.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.kotlin.serialization.DebugProtoBuf.Constructor, + java.util.List> constructorAnnotation = com.google.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); + public static final int FUNCTION_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Function { ... } + */ + public static final + com.google.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.kotlin.serialization.DebugProtoBuf.Function, + java.util.List> functionAnnotation = com.google.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); + public static final int PROPERTY_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Property { ... } + */ + public static final + com.google.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.kotlin.serialization.DebugProtoBuf.Property, + java.util.List> propertyAnnotation = com.google.protobuf.GeneratedMessage .newFileScopedGeneratedExtension( org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance()); public static final int COMPILE_TIME_VALUE_FIELD_NUMBER = 151; /** - * extend .org.jetbrains.kotlin.serialization.Callable { ... } + * extend .org.jetbrains.kotlin.serialization.Property { ... } */ public static final com.google.protobuf.GeneratedMessage.GeneratedExtension< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Callable, + org.jetbrains.kotlin.serialization.DebugProtoBuf.Property, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value> compileTimeValue = com.google.protobuf.GeneratedMessage .newFileScopedGeneratedExtension( org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.class, @@ -85,17 +133,30 @@ public final class DebugBuiltInsProtoBuf { "e\030\226\001 \003(\005B\002\020\001:t\n\020class_annotation\022).org.j" + "etbrains.kotlin.serialization.Class\030\226\001 \003" + "(\0132..org.jetbrains.kotlin.serialization." + - "Annotation:z\n\023callable_annotation\022,.org." + - "jetbrains.kotlin.serialization.Callable\030", - "\226\001 \003(\0132..org.jetbrains.kotlin.serializat" + - "ion.Annotation:\210\001\n\022compile_time_value\022,." + - "org.jetbrains.kotlin.serialization.Calla" + - "ble\030\227\001 \001(\0132=.org.jetbrains.kotlin.serial" + - "ization.Annotation.Argument.Value:\201\001\n\024pa" + - "rameter_annotation\0222.org.jetbrains.kotli" + - "n.serialization.ValueParameter\030\226\001 \003(\0132.." + - "org.jetbrains.kotlin.serialization.Annot" + - "ationB\027B\025DebugBuiltInsProtoBuf" + "Annotation:~\n\027old_callable_annotation\022,." + + "org.jetbrains.kotlin.serialization.Calla", + "ble\030\226\001 \003(\0132..org.jetbrains.kotlin.serial" + + "ization.Annotation:\214\001\n\026old_compile_time_" + + "value\022,.org.jetbrains.kotlin.serializati" + + "on.Callable\030\227\001 \001(\0132=.org.jetbrains.kotli" + + "n.serialization.Annotation.Argument.Valu" + + "e:\200\001\n\026constructor_annotation\022/.org.jetbr" + + "ains.kotlin.serialization.Constructor\030\226\001" + + " \003(\0132..org.jetbrains.kotlin.serializatio" + + "n.Annotation:z\n\023function_annotation\022,.or" + + "g.jetbrains.kotlin.serialization.Functio", + "n\030\226\001 \003(\0132..org.jetbrains.kotlin.serializ" + + "ation.Annotation:z\n\023property_annotation\022" + + ",.org.jetbrains.kotlin.serialization.Pro" + + "perty\030\226\001 \003(\0132..org.jetbrains.kotlin.seri" + + "alization.Annotation:\210\001\n\022compile_time_va" + + "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" + + ".AnnotationB\027B\025DebugBuiltInsProtoBuf" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -104,9 +165,13 @@ public final class DebugBuiltInsProtoBuf { descriptor = root; className.internalInit(descriptor.getExtensions().get(0)); classAnnotation.internalInit(descriptor.getExtensions().get(1)); - callableAnnotation.internalInit(descriptor.getExtensions().get(2)); - compileTimeValue.internalInit(descriptor.getExtensions().get(3)); - parameterAnnotation.internalInit(descriptor.getExtensions().get(4)); + oldCallableAnnotation.internalInit(descriptor.getExtensions().get(2)); + oldCompileTimeValue.internalInit(descriptor.getExtensions().get(3)); + constructorAnnotation.internalInit(descriptor.getExtensions().get(4)); + functionAnnotation.internalInit(descriptor.getExtensions().get(5)); + propertyAnnotation.internalInit(descriptor.getExtensions().get(6)); + compileTimeValue.internalInit(descriptor.getExtensions().get(7)); + parameterAnnotation.internalInit(descriptor.getExtensions().get(8)); 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 be76e0f0d5b..4bae9d8aa7d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt @@ -46,7 +46,7 @@ class BuiltInsAnnotationAndConstantLoader( ): List { proto as ProtoBuf.Callable // TODO - val annotations = proto.getExtension(BuiltInsProtoBuf.callableAnnotation).orEmpty() + val annotations = proto.getExtension(BuiltInsProtoBuf.oldCallableAnnotation).orEmpty() return annotations.map { proto -> AnnotationWithTarget(deserializer.deserializeAnnotation(proto, container.nameResolver), null) } } @@ -77,7 +77,7 @@ class BuiltInsAnnotationAndConstantLoader( proto: ProtoBuf.Callable, expectedType: JetType ): ConstantValue<*>? { - val value = proto.getExtension(BuiltInsProtoBuf.compileTimeValue) + val value = proto.getExtension(BuiltInsProtoBuf.oldCompileTimeValue) return deserializer.resolveValue(expectedType, value, container.nameResolver) } } diff --git a/core/deserialization/src/builtins.proto b/core/deserialization/src/builtins.proto index b4c11da5ce6..fb72c6a227f 100644 --- a/core/deserialization/src/builtins.proto +++ b/core/deserialization/src/builtins.proto @@ -31,7 +31,20 @@ extend Class { } extend Callable { - repeated Annotation callable_annotation = 150; + repeated Annotation old_callable_annotation = 150; + optional Annotation.Argument.Value old_compile_time_value = 151; +} + +extend Constructor { + repeated Annotation constructor_annotation = 150; +} + +extend Function { + repeated Annotation function_annotation = 150; +} + +extend Property { + repeated Annotation property_annotation = 150; optional Annotation.Argument.Value compile_time_value = 151; } 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 19b0eb8f4db..6200ff6dc4e 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java @@ -9,7 +9,11 @@ public final class BuiltInsProtoBuf { com.google.protobuf.ExtensionRegistryLite registry) { registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.className); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.classAnnotation); - registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.callableAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.oldCallableAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.oldCompileTimeValue); + registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.constructorAnnotation); + registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.functionAnnotation); + 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); } @@ -43,14 +47,14 @@ public final class BuiltInsProtoBuf { 150, com.google.protobuf.WireFormat.FieldType.MESSAGE, false); - public static final int CALLABLE_ANNOTATION_FIELD_NUMBER = 150; + public static final int OLD_CALLABLE_ANNOTATION_FIELD_NUMBER = 150; /** * extend .org.jetbrains.kotlin.serialization.Callable { ... } */ public static final com.google.protobuf.GeneratedMessageLite.GeneratedExtension< org.jetbrains.kotlin.serialization.ProtoBuf.Callable, - java.util.List> callableAnnotation = com.google.protobuf.GeneratedMessageLite + java.util.List> oldCallableAnnotation = com.google.protobuf.GeneratedMessageLite .newRepeatedGeneratedExtension( org.jetbrains.kotlin.serialization.ProtoBuf.Callable.getDefaultInstance(), org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.getDefaultInstance(), @@ -58,14 +62,14 @@ public final class BuiltInsProtoBuf { 150, com.google.protobuf.WireFormat.FieldType.MESSAGE, false); - public static final int COMPILE_TIME_VALUE_FIELD_NUMBER = 151; + public static final int OLD_COMPILE_TIME_VALUE_FIELD_NUMBER = 151; /** * extend .org.jetbrains.kotlin.serialization.Callable { ... } */ public static final com.google.protobuf.GeneratedMessageLite.GeneratedExtension< org.jetbrains.kotlin.serialization.ProtoBuf.Callable, - org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value> compileTimeValue = com.google.protobuf.GeneratedMessageLite + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value> oldCompileTimeValue = com.google.protobuf.GeneratedMessageLite .newSingularGeneratedExtension( org.jetbrains.kotlin.serialization.ProtoBuf.Callable.getDefaultInstance(), org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.getDefaultInstance(), @@ -73,6 +77,66 @@ public final class BuiltInsProtoBuf { null, 151, com.google.protobuf.WireFormat.FieldType.MESSAGE); + public static final int CONSTRUCTOR_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Constructor { ... } + */ + public static final + com.google.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.kotlin.serialization.ProtoBuf.Constructor, + java.util.List> constructorAnnotation = com.google.protobuf.GeneratedMessageLite + .newRepeatedGeneratedExtension( + org.jetbrains.kotlin.serialization.ProtoBuf.Constructor.getDefaultInstance(), + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.getDefaultInstance(), + null, + 150, + com.google.protobuf.WireFormat.FieldType.MESSAGE, + false); + public static final int FUNCTION_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Function { ... } + */ + public static final + com.google.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.kotlin.serialization.ProtoBuf.Function, + java.util.List> functionAnnotation = com.google.protobuf.GeneratedMessageLite + .newRepeatedGeneratedExtension( + org.jetbrains.kotlin.serialization.ProtoBuf.Function.getDefaultInstance(), + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.getDefaultInstance(), + null, + 150, + com.google.protobuf.WireFormat.FieldType.MESSAGE, + false); + public static final int PROPERTY_ANNOTATION_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.kotlin.serialization.Property { ... } + */ + public static final + com.google.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.kotlin.serialization.ProtoBuf.Property, + java.util.List> propertyAnnotation = com.google.protobuf.GeneratedMessageLite + .newRepeatedGeneratedExtension( + org.jetbrains.kotlin.serialization.ProtoBuf.Property.getDefaultInstance(), + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.getDefaultInstance(), + null, + 150, + com.google.protobuf.WireFormat.FieldType.MESSAGE, + false); + public static final int COMPILE_TIME_VALUE_FIELD_NUMBER = 151; + /** + * extend .org.jetbrains.kotlin.serialization.Property { ... } + */ + public static final + com.google.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.kotlin.serialization.ProtoBuf.Property, + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value> compileTimeValue = com.google.protobuf.GeneratedMessageLite + .newSingularGeneratedExtension( + org.jetbrains.kotlin.serialization.ProtoBuf.Property.getDefaultInstance(), + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.getDefaultInstance(), + org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.getDefaultInstance(), + null, + 151, + com.google.protobuf.WireFormat.FieldType.MESSAGE); public static final int PARAMETER_ANNOTATION_FIELD_NUMBER = 150; /** * extend .org.jetbrains.kotlin.serialization.ValueParameter { ... }