From 4bd1d064bb41525ca4ddd6914939a316c0eadb07 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 13 Jan 2016 16:19:07 +0300 Subject: [PATCH] Do not load built-ins in old format, drop class_name extension --- .../builtins/BuiltInsSerializerExtension.kt | 11 --- .../builtins/DebugBuiltInsProtoBuf.java | 99 ++++++++----------- .../builtins/BuiltinsPackageFragment.kt | 33 +++---- core/deserialization/src/builtins.proto | 2 - .../builtins/BuiltInsProtoBuf.java | 16 --- .../DeserializedPackageFragment.kt | 11 +-- .../js/KotlinJavascriptPackageFragment.kt | 11 ++- 7 files changed, 65 insertions(+), 118 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 131b6283532..398c20625d8 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 @@ -17,10 +17,7 @@ package org.jetbrains.kotlin.serialization.builtins import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol -import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter -import org.jetbrains.kotlin.serialization.DescriptorSerializer import org.jetbrains.kotlin.serialization.KotlinSerializerExtensionBase import org.jetbrains.kotlin.serialization.ProtoBuf @@ -32,14 +29,6 @@ class BuiltInsSerializerExtension( override fun serializePackage(proto: ProtoBuf.Package.Builder) { if (packageFragments.isEmpty()) return - val classes = packageFragments.flatMap { - it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS).filterIsInstance() - } - - for (descriptor in DescriptorSerializer.sort(classes)) { - proto.addExtension(BuiltInsProtoBuf.className, stringTable.getSimpleNameIndex(descriptor.name)) - } - proto.setExtension(BuiltInsProtoBuf.packageFqName, stringTable.getPackageFqNameIndex(packageFragments.first().fqName)) } } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java index f27e7cc0b81..c18ea26722d 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/DebugBuiltInsProtoBuf.java @@ -7,7 +7,6 @@ public final class DebugBuiltInsProtoBuf { private DebugBuiltInsProtoBuf() {} public static void registerAllExtensions( com.google.protobuf.ExtensionRegistry registry) { - registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.className); registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.packageFqName); registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.classAnnotation); registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.constructorAnnotation); @@ -1308,17 +1307,6 @@ public final class DebugBuiltInsProtoBuf { // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.builtins.BuiltIns) } - public static final int CLASS_NAME_FIELD_NUMBER = 150; - /** - * extend .org.jetbrains.kotlin.serialization.Package { ... } - */ - public static final - com.google.protobuf.GeneratedMessage.GeneratedExtension< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Package, - java.util.List> className = com.google.protobuf.GeneratedMessage - .newFileScopedGeneratedExtension( - java.lang.Integer.class, - null); public static final int PACKAGE_FQ_NAME_FIELD_NUMBER = 151; /** * extend .org.jetbrains.kotlin.serialization.Package { ... } @@ -1453,40 +1441,38 @@ public final class DebugBuiltInsProtoBuf { "ion.QualifiedNameTable\022<\n\007package\030\003 \001(\0132" + "+.org.jetbrains.kotlin.serialization.Pac" + "kage\0228\n\005class\030\004 \003(\0132).org.jetbrains.kotl", - "in.serialization.Class:D\n\nclass_name\022+.o" + - "rg.jetbrains.kotlin.serialization.Packag" + - "e\030\226\001 \003(\005B\002\020\001:E\n\017package_fq_name\022+.org.je" + - "tbrains.kotlin.serialization.Package\030\227\001 " + - "\001(\005:t\n\020class_annotation\022).org.jetbrains." + - "kotlin.serialization.Class\030\226\001 \003(\0132..org." + - "jetbrains.kotlin.serialization.Annotatio" + - "n:\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:", - "}\n\025enum_entry_annotation\022-.org.jetbrains" + - ".kotlin.serialization.EnumEntry\030\226\001 \003(\0132." + - ".org.jetbrains.kotlin.serialization.Anno" + - "tation:\201\001\n\024parameter_annotation\0222.org.je" + - "tbrains.kotlin.serialization.ValueParame" + - "ter\030\226\001 \003(\0132..org.jetbrains.kotlin.serial" + - "ization.Annotation:r\n\017type_annotation\022(." + - "org.jetbrains.kotlin.serialization.Type\030" + - "\226\001 \003(\0132..org.jetbrains.kotlin.serializat" + - "ion.Annotation:\205\001\n\031type_parameter_annota", - "tion\0221.org.jetbrains.kotlin.serializatio" + - "n.TypeParameter\030\226\001 \003(\0132..org.jetbrains.k" + - "otlin.serialization.AnnotationB\027B\025DebugB" + - "uiltInsProtoBuf" + "in.serialization.Class:E\n\017package_fq_nam" + + "e\022+.org.jetbrains.kotlin.serialization.P" + + "ackage\030\227\001 \001(\005:t\n\020class_annotation\022).org." + + "jetbrains.kotlin.serialization.Class\030\226\001 " + + "\003(\0132..org.jetbrains.kotlin.serialization" + + ".Annotation:\200\001\n\026constructor_annotation\022/" + + ".org.jetbrains.kotlin.serialization.Cons" + + "tructor\030\226\001 \003(\0132..org.jetbrains.kotlin.se" + + "rialization.Annotation:z\n\023function_annot" + + "ation\022,.org.jetbrains.kotlin.serializati", + "on.Function\030\226\001 \003(\0132..org.jetbrains.kotli" + + "n.serialization.Annotation:z\n\023property_a" + + "nnotation\022,.org.jetbrains.kotlin.seriali" + + "zation.Property\030\226\001 \003(\0132..org.jetbrains.k" + + "otlin.serialization.Annotation:\210\001\n\022compi" + + "le_time_value\022,.org.jetbrains.kotlin.ser" + + "ialization.Property\030\227\001 \001(\0132=.org.jetbrai" + + "ns.kotlin.serialization.Annotation.Argum" + + "ent.Value:}\n\025enum_entry_annotation\022-.org" + + ".jetbrains.kotlin.serialization.EnumEntr", + "y\030\226\001 \003(\0132..org.jetbrains.kotlin.serializ" + + "ation.Annotation:\201\001\n\024parameter_annotatio" + + "n\0222.org.jetbrains.kotlin.serialization.V" + + "alueParameter\030\226\001 \003(\0132..org.jetbrains.kot" + + "lin.serialization.Annotation:r\n\017type_ann" + + "otation\022(.org.jetbrains.kotlin.serializa" + + "tion.Type\030\226\001 \003(\0132..org.jetbrains.kotlin." + + "serialization.Annotation:\205\001\n\031type_parame" + + "ter_annotation\0221.org.jetbrains.kotlin.se" + + "rialization.TypeParameter\030\226\001 \003(\0132..org.j", + "etbrains.kotlin.serialization.Annotation" + + "B\027B\025DebugBuiltInsProtoBuf" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -1499,17 +1485,16 @@ public final class DebugBuiltInsProtoBuf { com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_builtins_BuiltIns_descriptor, new java.lang.String[] { "Strings", "QualifiedNames", "Package", "Class", }); - className.internalInit(descriptor.getExtensions().get(0)); - packageFqName.internalInit(descriptor.getExtensions().get(1)); - classAnnotation.internalInit(descriptor.getExtensions().get(2)); - constructorAnnotation.internalInit(descriptor.getExtensions().get(3)); - functionAnnotation.internalInit(descriptor.getExtensions().get(4)); - propertyAnnotation.internalInit(descriptor.getExtensions().get(5)); - compileTimeValue.internalInit(descriptor.getExtensions().get(6)); - enumEntryAnnotation.internalInit(descriptor.getExtensions().get(7)); - parameterAnnotation.internalInit(descriptor.getExtensions().get(8)); - typeAnnotation.internalInit(descriptor.getExtensions().get(9)); - typeParameterAnnotation.internalInit(descriptor.getExtensions().get(10)); + packageFqName.internalInit(descriptor.getExtensions().get(0)); + classAnnotation.internalInit(descriptor.getExtensions().get(1)); + constructorAnnotation.internalInit(descriptor.getExtensions().get(2)); + functionAnnotation.internalInit(descriptor.getExtensions().get(3)); + propertyAnnotation.internalInit(descriptor.getExtensions().get(4)); + compileTimeValue.internalInit(descriptor.getExtensions().get(5)); + enumEntryAnnotation.internalInit(descriptor.getExtensions().get(6)); + parameterAnnotation.internalInit(descriptor.getExtensions().get(7)); + typeAnnotation.internalInit(descriptor.getExtensions().get(8)); + typeParameterAnnotation.internalInit(descriptor.getExtensions().get(9)); return null; } }; diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt index bf555e41cc9..d99361536b6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt @@ -18,8 +18,6 @@ package org.jetbrains.kotlin.builtins import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl @@ -34,7 +32,8 @@ class BuiltinsPackageFragment( module: ModuleDescriptor, loadResource: (path: String) -> InputStream? ) : DeserializedPackageFragment(fqName, storageManager, module, BuiltInsSerializedResourcePaths, loadResource) { - val builtinsMessage = loadResource(BuiltInsSerializedResourcePaths.getBuiltInsFilePath(fqName))?.let { stream -> + private val builtinsMessage = run { + val stream = loadResourceSure(BuiltInsSerializedResourcePaths.getBuiltInsFilePath(fqName)) val dataInput = DataInputStream(stream) val version = BuiltInsBinaryVersion(*(1..dataInput.readInt()).map { dataInput.readInt() }.toIntArray()) @@ -50,24 +49,16 @@ class BuiltinsPackageFragment( BuiltInsProtoBuf.BuiltIns.parseFrom(stream, BuiltInsSerializedResourcePaths.extensionRegistry) } - override val nameResolver = - builtinsMessage?.let { NameResolverImpl(it.strings, it.qualifiedNames) } - ?: NameResolverImpl.read(loadResourceSure(serializedResourcePaths.getStringTableFilePath(fqName))) + override val nameResolver = NameResolverImpl(builtinsMessage.strings, builtinsMessage.qualifiedNames) - override val classIdToProto = builtinsMessage?.let { builtins -> - builtins.classList.toMapBy { klass -> - nameResolver.getClassId(klass.fqName) - } - } + override val classIdToProto = + builtinsMessage.classList.toMapBy { klass -> + nameResolver.getClassId(klass.fqName) + } - override fun computeMemberScope() = builtinsMessage?.let { builtins -> - DeserializedPackageMemberScope( - this, builtins.`package`, nameResolver, packagePartSource = null, components = components, - classNames = { classIdToProto!!.keys.filter { classId -> !classId.isNestedClass }.map { it.shortClassName } } - ) - } ?: super.computeMemberScope() - - override fun loadClassNames(packageProto: ProtoBuf.Package): Collection { - return packageProto.getExtension(BuiltInsProtoBuf.className)?.map { id -> nameResolver.getName(id) } ?: listOf() - } + override fun computeMemberScope() = + DeserializedPackageMemberScope( + this, builtinsMessage.`package`, nameResolver, packagePartSource = null, components = components, + classNames = { classIdToProto.keys.filter { classId -> !classId.isNestedClass }.map { it.shortClassName } } + ) } diff --git a/core/deserialization/src/builtins.proto b/core/deserialization/src/builtins.proto index 8559ac8c11f..4856d56f26a 100644 --- a/core/deserialization/src/builtins.proto +++ b/core/deserialization/src/builtins.proto @@ -31,8 +31,6 @@ message BuiltIns { } extend Package { - // id in StringTable - repeated int32 class_name = 150 [packed = true]; optional int32 package_fq_name = 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 d51673f71a2..42e315a96e5 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsProtoBuf.java @@ -7,7 +7,6 @@ public final class BuiltInsProtoBuf { private BuiltInsProtoBuf() {} public static void registerAllExtensions( com.google.protobuf.ExtensionRegistryLite registry) { - registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.className); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.packageFqName); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.classAnnotation); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.constructorAnnotation); @@ -870,21 +869,6 @@ public final class BuiltInsProtoBuf { // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.builtins.BuiltIns) } - public static final int CLASS_NAME_FIELD_NUMBER = 150; - /** - * extend .org.jetbrains.kotlin.serialization.Package { ... } - */ - public static final - com.google.protobuf.GeneratedMessageLite.GeneratedExtension< - org.jetbrains.kotlin.serialization.ProtoBuf.Package, - java.util.List> className = com.google.protobuf.GeneratedMessageLite - .newRepeatedGeneratedExtension( - org.jetbrains.kotlin.serialization.ProtoBuf.Package.getDefaultInstance(), - null, - null, - 150, - com.google.protobuf.WireFormat.FieldType.INT32, - true); public static final int PACKAGE_FQ_NAME_FIELD_NUMBER = 151; /** * extend .org.jetbrains.kotlin.serialization.Package { ... } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt index 6ae484b5e94..dc58a778a83 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt @@ -49,14 +49,7 @@ abstract class DeserializedPackageFragment( computeMemberScope() } - protected open fun computeMemberScope(): DeserializedPackageMemberScope { - val packageStream = loadResourceSure(serializedResourcePaths.getPackageFilePath(fqName)) - val packageProto = ProtoBuf.Package.parseFrom(packageStream, serializedResourcePaths.extensionRegistry) - return DeserializedPackageMemberScope( - this, packageProto, nameResolver, packagePartSource = null, components = components, - classNames = { loadClassNames(packageProto) } - ) - } + protected abstract fun computeMemberScope(): DeserializedPackageMemberScope override fun getMemberScope() = deserializedMemberScope @@ -64,8 +57,6 @@ abstract class DeserializedPackageFragment( return name in getMemberScope().classNames } - protected abstract fun loadClassNames(packageProto: ProtoBuf.Package): Collection - protected fun loadResourceSure(path: String): InputStream = loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path") } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt index 071248d345f..3cafa2fe438 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.storage.StorageManager import java.io.InputStream @@ -36,7 +37,15 @@ class KotlinJavascriptPackageFragment( override val classIdToProto: Map? get() = null - override fun loadClassNames(packageProto: ProtoBuf.Package): Collection { + override fun computeMemberScope(): DeserializedPackageMemberScope { + val packageStream = loadResourceSure(serializedResourcePaths.getPackageFilePath(fqName)) + val packageProto = ProtoBuf.Package.parseFrom(packageStream, serializedResourcePaths.extensionRegistry) + return DeserializedPackageMemberScope( + this, packageProto, nameResolver, packagePartSource = null, components = components, classNames = { loadClassNames() } + ) + } + + private fun loadClassNames(): Collection { val classesStream = loadResourceSure(KotlinJavascriptSerializedResourcePaths.getClassesInPackageFilePath(fqName)) val classesProto = JsProtoBuf.Classes.parseFrom(classesStream, serializedResourcePaths.extensionRegistry) return classesProto.classNameList?.map { id -> nameResolver.getName(id) } ?: listOf()