From 9a8631890858ceae52410b714639de22af67ab0e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 1 Dec 2014 13:40:26 +0300 Subject: [PATCH] Introduce extension for built-ins serialization, drop .kotlin_class_names --- .../src/BuiltInsSerializer.kt | 41 +++++----- .../serialization/DebugBuiltInsProtoBuf.java | 57 +++++++++++++ .../serialization/DebugProtoBuf.java | 81 +++++++++++-------- .../types/lang/BuiltinsPackageFragment.kt | 29 +++++-- core/serialization/src/builtins.proto | 27 +++++++ core/serialization/src/descriptors.proto | 2 + .../serialization/BuiltInsProtoBuf.java | 32 ++++++++ .../serialization/DescriptorSerializer.java | 2 + .../descriptors/serialization/ProtoBuf.java | 30 +++++-- .../serialization/SerializerExtension.java | 10 ++- .../generators/protobuf/GenerateProtoBuf.kt | 16 ++-- 11 files changed, 248 insertions(+), 79 deletions(-) create mode 100644 compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugBuiltInsProtoBuf.java create mode 100644 core/serialization/src/builtins.proto create mode 100644 core/serialization/src/org/jetbrains/jet/descriptors/serialization/BuiltInsProtoBuf.java diff --git a/compiler/builtins-serializer/src/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/BuiltInsSerializer.kt index 7932f65555c..8b16a6e84a0 100644 --- a/compiler/builtins-serializer/src/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/BuiltInsSerializer.kt @@ -22,12 +22,9 @@ import org.jetbrains.jet.config.CompilerConfiguration import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment import org.jetbrains.jet.descriptors.serialization.* import org.jetbrains.jet.lang.descriptors.ClassDescriptor -import java.util.ArrayList import org.jetbrains.jet.lang.resolve.name.Name import java.io.ByteArrayOutputStream -import java.io.DataOutputStream import org.jetbrains.jet.lang.types.lang.BuiltInsSerializationUtil -import org.jetbrains.jet.lang.resolve.DescriptorUtils import com.intellij.openapi.Disposable import org.jetbrains.jet.cli.common.CLIConfigurationKeys import org.jetbrains.jet.config.CommonConfigurationKeys @@ -44,6 +41,23 @@ import org.jetbrains.jet.analyzer.ModuleContent import org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor + +private object BuiltInsSerializerExtension : SerializerExtension() { + override fun serializePackage( + packageFragments: Collection, + proto: ProtoBuf.Package.Builder, + stringTable: StringTable + ) { + val classes = packageFragments.flatMap { + it.getMemberScope().getDescriptors(DescriptorKindFilter.CLASSIFIERS).filterIsInstance() + } + + for (descriptor in DescriptorSerializer.sort(classes)) { + proto.addExtension(BuiltInsProtoBuf.className, stringTable.getSimpleNameIndex(descriptor.getName())) + } + } +} public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { private var totalSize = 0 @@ -107,9 +121,8 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { // TODO: perform some kind of validation? At the moment not possible because DescriptorValidator is in compiler-tests // DescriptorValidator.validate(packageView) - val serializer = DescriptorSerializer.createTopLevel(SerializerExtension.DEFAULT) + val serializer = DescriptorSerializer.createTopLevel(BuiltInsSerializerExtension) - val classNames = ArrayList() val classifierDescriptors = DescriptorSerializer.sort(packageView.getMemberScope().getDescriptors(DescriptorKindFilter.CLASSIFIERS)) ClassSerializationUtil.serializeClasses(classifierDescriptors, serializer, object : ClassSerializationUtil.Sink { @@ -117,17 +130,9 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { val stream = ByteArrayOutputStream() classProto.writeTo(stream) write(destDir, getFileName(classDescriptor), stream) - - if (DescriptorUtils.isTopLevelDeclaration(classDescriptor)) { - classNames.add(classDescriptor.getName()) - } } }) - val classNamesStream = ByteArrayOutputStream() - writeClassNames(serializer, classNames, classNamesStream) - write(destDir, BuiltInsSerializationUtil.getClassNamesFilePath(fqName), classNamesStream) - val packageStream = ByteArrayOutputStream() val fragments = module.getPackageFragmentProvider().getPackageFragments(fqName) val packageProto = serializer.packageProto(fragments).build() ?: error("Package fragments not serialized: $fragments") @@ -139,16 +144,6 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { write(destDir, BuiltInsSerializationUtil.getStringTableFilePath(fqName).first(), nameStream) } - fun writeClassNames(serializer: DescriptorSerializer, classNames: List, stream: ByteArrayOutputStream) { - val nameTable = serializer.getStringTable() - DataOutputStream(stream) use { output -> - output.writeInt(classNames.size()) - for (className in classNames) { - output.writeInt(nameTable.getSimpleNameIndex(className)) - } - } - } - fun write(destDir: File, fileName: String, stream: ByteArrayOutputStream) { totalSize += stream.size() totalFiles++ diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugBuiltInsProtoBuf.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugBuiltInsProtoBuf.java new file mode 100644 index 00000000000..079b1a4c9cb --- /dev/null +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugBuiltInsProtoBuf.java @@ -0,0 +1,57 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: core/serialization/src/builtins.debug.proto + +package org.jetbrains.jet.descriptors.serialization; + +public final class DebugBuiltInsProtoBuf { + private DebugBuiltInsProtoBuf() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registry.add(org.jetbrains.jet.descriptors.serialization.DebugBuiltInsProtoBuf.className); + } + public static final int CLASS_NAME_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.jet.descriptors.serialization.Package { ... } + */ + public static final + com.google.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.jet.descriptors.serialization.DebugProtoBuf.Package, + java.util.List> className = com.google.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + java.lang.Integer.class, + null); + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n+core/serialization/src/builtins.debug." + + "proto\022+org.jetbrains.jet.descriptors.ser" + + "ialization\032.core/serialization/src/descr" + + "iptors.debug.proto:M\n\nclass_name\0224.org.j" + + "etbrains.jet.descriptors.serialization.P" + + "ackage\030\226\001 \003(\005B\002\020\001B\027B\025DebugBuiltInsProtoB" + + "uf" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + className.internalInit(descriptor.getExtensions().get(0)); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + org.jetbrains.jet.descriptors.serialization.DebugProtoBuf.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugProtoBuf.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugProtoBuf.java index 42ea3910ffb..be8f708b5ea 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugProtoBuf.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DebugProtoBuf.java @@ -10091,8 +10091,9 @@ public final class DebugProtoBuf { // @@protoc_insertion_point(class_scope:org.jetbrains.jet.descriptors.serialization.Class) } - public interface PackageOrBuilder - extends com.google.protobuf.MessageOrBuilder { + public interface PackageOrBuilder extends + com.google.protobuf.GeneratedMessage. + ExtendableMessageOrBuilder { // repeated .org.jetbrains.jet.descriptors.serialization.Callable member = 1; /** @@ -10123,10 +10124,10 @@ public final class DebugProtoBuf { * Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Package} */ public static final class Package extends - com.google.protobuf.GeneratedMessage - implements PackageOrBuilder { + com.google.protobuf.GeneratedMessage.ExtendableMessage< + Package> implements PackageOrBuilder { // Use Package.newBuilder() to construct. - private Package(com.google.protobuf.GeneratedMessage.Builder builder) { + private Package(com.google.protobuf.GeneratedMessage.ExtendableBuilder builder) { super(builder); this.unknownFields = builder.getUnknownFields(); } @@ -10270,6 +10271,10 @@ public final class DebugProtoBuf { return false; } } + if (!extensionsAreInitialized()) { + memoizedIsInitialized = 0; + return false; + } memoizedIsInitialized = 1; return true; } @@ -10277,9 +10282,13 @@ public final class DebugProtoBuf { public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); + com.google.protobuf.GeneratedMessage + .ExtendableMessage.ExtensionWriter extensionWriter = + newExtensionWriter(); for (int i = 0; i < member_.size(); i++) { output.writeMessage(1, member_.get(i)); } + extensionWriter.writeUntil(200, output); getUnknownFields().writeTo(output); } @@ -10293,6 +10302,7 @@ public final class DebugProtoBuf { size += com.google.protobuf.CodedOutputStream .computeMessageSize(1, member_.get(i)); } + size += extensionsSerializedSize(); size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -10375,8 +10385,8 @@ public final class DebugProtoBuf { * Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Package} */ public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements org.jetbrains.jet.descriptors.serialization.DebugProtoBuf.PackageOrBuilder { + com.google.protobuf.GeneratedMessage.ExtendableBuilder< + org.jetbrains.jet.descriptors.serialization.DebugProtoBuf.Package, Builder> implements org.jetbrains.jet.descriptors.serialization.DebugProtoBuf.PackageOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return org.jetbrains.jet.descriptors.serialization.DebugProtoBuf.internal_static_org_jetbrains_jet_descriptors_serialization_Package_descriptor; @@ -10493,6 +10503,7 @@ public final class DebugProtoBuf { } } } + this.mergeExtensionFields(other); this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -10504,6 +10515,10 @@ public final class DebugProtoBuf { return false; } } + if (!extensionsAreInitialized()) { + + return false; + } return true; } @@ -14444,33 +14459,33 @@ public final class DebugProtoBuf { ".jet.descriptors.serialization.Callable\"" + "p\n\004Kind\022\t\n\005CLASS\020\000\022\t\n\005TRAIT\020\001\022\016\n\nENUM_CL" + "ASS\020\002\022\016\n\nENUM_ENTRY\020\003\022\024\n\020ANNOTATION_CLAS" + - "S\020\004\022\n\n\006OBJECT\020\005\022\020\n\014CLASS_OBJECT\020\006\"P\n\007Pac" + + "S\020\004\022\n\n\006OBJECT\020\005\022\020\n\014CLASS_OBJECT\020\006\"W\n\007Pac" + "kage\022E\n\006member\030\001 \003(\01325.org.jetbrains.jet" + - ".descriptors.serialization.Callable\"\220\006\n\010" + - "Callable\022\r\n\005flags\030\001 \001(\005\022\030\n\020extra_visibil" + - "ity\030\002 \001(\t\022\024\n\014getter_flags\030\t \001(\005\022\024\n\014sette", - "r_flags\030\n \001(\005\022R\n\016type_parameter\030\004 \003(\0132:." + - "org.jetbrains.jet.descriptors.serializat" + - "ion.TypeParameter\022H\n\rreceiver_type\030\005 \001(\013" + - "21.org.jetbrains.jet.descriptors.seriali" + - "zation.Type\022\014\n\004name\030\006 \002(\005\022]\n\017value_param" + - "eter\030\007 \003(\0132D.org.jetbrains.jet.descripto" + - "rs.serialization.Callable.ValueParameter" + - "\022F\n\013return_type\030\010 \002(\01321.org.jetbrains.je" + - "t.descriptors.serialization.Type\032\305\001\n\016Val" + - "ueParameter\022\r\n\005flags\030\001 \001(\005\022\014\n\004name\030\002 \002(\005", - "\022?\n\004type\030\003 \002(\01321.org.jetbrains.jet.descr" + - "iptors.serialization.Type\022N\n\023vararg_elem" + - "ent_type\030\004 \001(\01321.org.jetbrains.jet.descr" + - "iptors.serialization.Type*\005\010d\020\310\001\"Q\n\nMemb" + - "erKind\022\017\n\013DECLARATION\020\000\022\021\n\rFAKE_OVERRIDE" + - "\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTHESIZED\020\003\":\n\014C" + - "allableKind\022\007\n\003FUN\020\000\022\007\n\003VAL\020\001\022\007\n\003VAR\020\002\022\017" + - "\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n\010Modality\022\t\n\005FI" + - "NAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRACT\020\002*M\n\nVisibil" + - "ity\022\014\n\010INTERNAL\020\000\022\013\n\007PRIVATE\020\001\022\r\n\tPROTEC", - "TED\020\002\022\n\n\006PUBLIC\020\003\022\t\n\005EXTRA\020\004B\022B\rDebugPro" + - "toBuf\210\001\000" + ".descriptors.serialization.Callable*\005\010d\020" + + "\310\001\"\220\006\n\010Callable\022\r\n\005flags\030\001 \001(\005\022\030\n\020extra_" + + "visibility\030\002 \001(\t\022\024\n\014getter_flags\030\t \001(\005\022\024", + "\n\014setter_flags\030\n \001(\005\022R\n\016type_parameter\030\004" + + " \003(\0132:.org.jetbrains.jet.descriptors.ser" + + "ialization.TypeParameter\022H\n\rreceiver_typ" + + "e\030\005 \001(\01321.org.jetbrains.jet.descriptors." + + "serialization.Type\022\014\n\004name\030\006 \002(\005\022]\n\017valu" + + "e_parameter\030\007 \003(\0132D.org.jetbrains.jet.de" + + "scriptors.serialization.Callable.ValuePa" + + "rameter\022F\n\013return_type\030\010 \002(\01321.org.jetbr" + + "ains.jet.descriptors.serialization.Type\032" + + "\305\001\n\016ValueParameter\022\r\n\005flags\030\001 \001(\005\022\014\n\004nam", + "e\030\002 \002(\005\022?\n\004type\030\003 \002(\01321.org.jetbrains.je" + + "t.descriptors.serialization.Type\022N\n\023vara" + + "rg_element_type\030\004 \001(\01321.org.jetbrains.je" + + "t.descriptors.serialization.Type*\005\010d\020\310\001\"" + + "Q\n\nMemberKind\022\017\n\013DECLARATION\020\000\022\021\n\rFAKE_O" + + "VERRIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTHESIZED" + + "\020\003\":\n\014CallableKind\022\007\n\003FUN\020\000\022\007\n\003VAL\020\001\022\007\n\003" + + "VAR\020\002\022\017\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n\010Modalit" + + "y\022\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRACT\020\002*M\n\n" + + "Visibility\022\014\n\010INTERNAL\020\000\022\013\n\007PRIVATE\020\001\022\r\n", + "\tPROTECTED\020\002\022\n\n\006PUBLIC\020\003\022\t\n\005EXTRA\020\004B\022B\rD" + + "ebugProtoBuf\210\001\000" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.kt b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.kt index 0206bb96f59..3f6cc05bb5a 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.kt @@ -29,6 +29,7 @@ import java.io.DataInputStream import java.io.InputStream import java.util.ArrayList import org.jetbrains.jet.descriptors.serialization.context.DeserializationComponents +import com.google.protobuf.ExtensionRegistryLite public class BuiltinsPackageFragment( fqName: FqName, @@ -37,31 +38,47 @@ public class BuiltinsPackageFragment( private val loadResource: (path: String) -> InputStream? ) : PackageFragmentDescriptorImpl(module, fqName) { + private val extensionRegistry: ExtensionRegistryLite + + ;{ + extensionRegistry = ExtensionRegistryLite.newInstance() + BuiltInsProtoBuf.registerAllExtensions(extensionRegistry) + extensionRegistry + } + private val nameResolver = BuiltInsSerializationUtil.getStringTableFilePath(fqName).let { paths -> NameSerializationUtil.deserializeNameResolver(loadResource(paths[0]) ?: getStream(paths[1])) } public val provider: PackageFragmentProvider = PackageFragmentProviderImpl(listOf(this)) - private val members: DeserializedPackageMemberScope = + private val members: DeserializedPackageMemberScope = run { + val proto = loadPackage() DeserializedPackageMemberScope( this, - loadPackage(), + proto, nameResolver, DeserializationComponents( storageManager, module, BuiltInsClassDataFinder(), AnnotationAndConstantLoader.UNSUPPORTED, // TODO: support annotations provider, FlexibleTypeCapabilitiesDeserializer.ThrowException ), - { readClassNames() } + { readClassNames(proto) } ) + } private fun loadPackage(): ProtoBuf.Package { val stream = getStream(BuiltInsSerializationUtil.getPackageFilePath(fqName)) - return ProtoBuf.Package.parseFrom(stream) + return ProtoBuf.Package.parseFrom(stream, extensionRegistry) } - private fun readClassNames(): List { - val stream = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(fqName)) + private fun readClassNames(proto: ProtoBuf.Package): List { + val stream = loadResource(BuiltInsSerializationUtil.getClassNamesFilePath(fqName)) + + if (stream == null) { + return proto.getExtension(BuiltInsProtoBuf.className)?.map { id -> nameResolver.getName(id) } ?: listOf() + } + + // TODO: drop return DataInputStream(stream).use { data -> val size = data.readInt() val result = ArrayList(size) diff --git a/core/serialization/src/builtins.proto b/core/serialization/src/builtins.proto new file mode 100644 index 00000000000..d8cb5332b92 --- /dev/null +++ b/core/serialization/src/builtins.proto @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.descriptors.serialization; + +import "core/serialization/src/descriptors.proto"; + +option java_outer_classname = "BuiltInsProtoBuf"; +option optimize_for = LITE_RUNTIME; + +extend Package { + // id in StringTable + repeated int32 class_name = 150 [packed = true]; +} diff --git a/core/serialization/src/descriptors.proto b/core/serialization/src/descriptors.proto index 1de20c77499..ad878ae2178 100644 --- a/core/serialization/src/descriptors.proto +++ b/core/serialization/src/descriptors.proto @@ -155,6 +155,8 @@ message Class { message Package { repeated Callable member = 1; + + extensions 100 to 199; } message Callable { diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/BuiltInsProtoBuf.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/BuiltInsProtoBuf.java new file mode 100644 index 00000000000..79a57c7175b --- /dev/null +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/BuiltInsProtoBuf.java @@ -0,0 +1,32 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: core/serialization/src/builtins.proto + +package org.jetbrains.jet.descriptors.serialization; + +public final class BuiltInsProtoBuf { + private BuiltInsProtoBuf() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + registry.add(org.jetbrains.jet.descriptors.serialization.BuiltInsProtoBuf.className); + } + public static final int CLASS_NAME_FIELD_NUMBER = 150; + /** + * extend .org.jetbrains.jet.descriptors.serialization.Package { ... } + */ + public static final + com.google.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.jet.descriptors.serialization.ProtoBuf.Package, + java.util.List> className = com.google.protobuf.GeneratedMessageLite + .newRepeatedGeneratedExtension( + org.jetbrains.jet.descriptors.serialization.ProtoBuf.Package.getDefaultInstance(), + null, + null, + 150, + com.google.protobuf.WireFormat.FieldType.INT32, + true); + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java index b68e4e790d2..a074caabb97 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java @@ -418,6 +418,8 @@ public class DescriptorSerializer { } } + extension.serializePackage(fragments, builder, stringTable); + return builder; } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ProtoBuf.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ProtoBuf.java index d2580bafb5b..34fbe01f3af 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ProtoBuf.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ProtoBuf.java @@ -7726,8 +7726,9 @@ public final class ProtoBuf { // @@protoc_insertion_point(class_scope:org.jetbrains.jet.descriptors.serialization.Class) } - public interface PackageOrBuilder - extends com.google.protobuf.MessageLiteOrBuilder { + public interface PackageOrBuilder extends + com.google.protobuf.GeneratedMessageLite. + ExtendableMessageOrBuilder { // repeated .org.jetbrains.jet.descriptors.serialization.Callable member = 1; /** @@ -7748,10 +7749,10 @@ public final class ProtoBuf { * Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Package} */ public static final class Package extends - com.google.protobuf.GeneratedMessageLite - implements PackageOrBuilder { + com.google.protobuf.GeneratedMessageLite.ExtendableMessage< + Package> implements PackageOrBuilder { // Use Package.newBuilder() to construct. - private Package(com.google.protobuf.GeneratedMessageLite.Builder builder) { + private Package(com.google.protobuf.GeneratedMessageLite.ExtendableBuilder builder) { super(builder); } @@ -7874,6 +7875,10 @@ public final class ProtoBuf { return false; } } + if (!extensionsAreInitialized()) { + memoizedIsInitialized = 0; + return false; + } memoizedIsInitialized = 1; return true; } @@ -7881,9 +7886,13 @@ public final class ProtoBuf { public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); + com.google.protobuf.GeneratedMessageLite + .ExtendableMessage.ExtensionWriter extensionWriter = + newExtensionWriter(); for (int i = 0; i < member_.size(); i++) { output.writeMessage(1, member_.get(i)); } + extensionWriter.writeUntil(200, output); } private int memoizedSerializedSize = -1; @@ -7896,6 +7905,7 @@ public final class ProtoBuf { size += com.google.protobuf.CodedOutputStream .computeMessageSize(1, member_.get(i)); } + size += extensionsSerializedSize(); memoizedSerializedSize = size; return size; } @@ -7971,9 +7981,8 @@ public final class ProtoBuf { * Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Package} */ public static final class Builder extends - com.google.protobuf.GeneratedMessageLite.Builder< - org.jetbrains.jet.descriptors.serialization.ProtoBuf.Package, Builder> - implements org.jetbrains.jet.descriptors.serialization.ProtoBuf.PackageOrBuilder { + com.google.protobuf.GeneratedMessageLite.ExtendableBuilder< + org.jetbrains.jet.descriptors.serialization.ProtoBuf.Package, Builder> implements org.jetbrains.jet.descriptors.serialization.ProtoBuf.PackageOrBuilder { // Construct using org.jetbrains.jet.descriptors.serialization.ProtoBuf.Package.newBuilder() private Builder() { maybeForceBuilderInitialization(); @@ -8031,6 +8040,7 @@ public final class ProtoBuf { } } + this.mergeExtensionFields(other); return this; } @@ -8041,6 +8051,10 @@ public final class ProtoBuf { return false; } } + if (!extensionsAreInitialized()) { + + return false; + } return true; } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/SerializerExtension.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/SerializerExtension.java index 8b1e58743a4..516e2d6713f 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/SerializerExtension.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/SerializerExtension.java @@ -18,10 +18,18 @@ package org.jetbrains.jet.descriptors.serialization; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; +import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; +import java.util.Collection; + public abstract class SerializerExtension { - public static final SerializerExtension DEFAULT = new SerializerExtension() {}; + public void serializePackage( + @NotNull Collection packageFragments, + @NotNull ProtoBuf.Package.Builder proto, + @NotNull StringTable stringTable + ) { + } public void serializeCallable( @NotNull CallableMemberDescriptor callable, diff --git a/generators/src/org/jetbrains/jet/generators/protobuf/GenerateProtoBuf.kt b/generators/src/org/jetbrains/jet/generators/protobuf/GenerateProtoBuf.kt index 1bc9a81303b..570f1eeccc2 100644 --- a/generators/src/org/jetbrains/jet/generators/protobuf/GenerateProtoBuf.kt +++ b/generators/src/org/jetbrains/jet/generators/protobuf/GenerateProtoBuf.kt @@ -34,14 +34,14 @@ fun main(args: Array) { try { checkVersion() - val commonProto = "core/serialization/src/descriptors.proto" - val javaProto = "core/serialization.java/src/java_descriptors.proto" - - execProtoc(commonProto, "core/serialization/src") - execProtoc(javaProto, "core/serialization.java/src") - - modifyAndExecProtoc(commonProto, "compiler/tests") - modifyAndExecProtoc(javaProto, "compiler/tests") + for ((protoPath, outPath) in listOf( + Pair("core/serialization/src/descriptors.proto", "core/serialization/src"), + Pair("core/serialization/src/builtins.proto", "core/serialization/src"), + Pair("core/serialization.java/src/java_descriptors.proto", "core/serialization.java/src") + )) { + execProtoc(protoPath, outPath) + modifyAndExecProtoc(protoPath, "compiler/tests") + } } catch (e: Throwable) { e.printStackTrace()