Do not load built-ins in old format, drop class_name extension

This commit is contained in:
Alexander Udalov
2016-01-13 16:19:07 +03:00
parent 625c46d568
commit 4bd1d064bb
7 changed files with 65 additions and 118 deletions
@@ -17,10 +17,7 @@
package org.jetbrains.kotlin.serialization.builtins package org.jetbrains.kotlin.serialization.builtins
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor 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.KotlinSerializerExtensionBase
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
@@ -32,14 +29,6 @@ class BuiltInsSerializerExtension(
override fun serializePackage(proto: ProtoBuf.Package.Builder) { override fun serializePackage(proto: ProtoBuf.Package.Builder) {
if (packageFragments.isEmpty()) return if (packageFragments.isEmpty()) return
val classes = packageFragments.flatMap {
it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS).filterIsInstance<ClassDescriptor>()
}
for (descriptor in DescriptorSerializer.sort(classes)) {
proto.addExtension(BuiltInsProtoBuf.className, stringTable.getSimpleNameIndex(descriptor.name))
}
proto.setExtension(BuiltInsProtoBuf.packageFqName, stringTable.getPackageFqNameIndex(packageFragments.first().fqName)) proto.setExtension(BuiltInsProtoBuf.packageFqName, stringTable.getPackageFqNameIndex(packageFragments.first().fqName))
} }
} }
@@ -7,7 +7,6 @@ public final class DebugBuiltInsProtoBuf {
private DebugBuiltInsProtoBuf() {} private DebugBuiltInsProtoBuf() {}
public static void registerAllExtensions( public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) { 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.packageFqName);
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.classAnnotation); registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.classAnnotation);
registry.add(org.jetbrains.kotlin.serialization.builtins.DebugBuiltInsProtoBuf.constructorAnnotation); 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) // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.builtins.BuiltIns)
} }
public static final int CLASS_NAME_FIELD_NUMBER = 150;
/**
* <code>extend .org.jetbrains.kotlin.serialization.Package { ... }</code>
*/
public static final
com.google.protobuf.GeneratedMessage.GeneratedExtension<
org.jetbrains.kotlin.serialization.DebugProtoBuf.Package,
java.util.List<java.lang.Integer>> className = com.google.protobuf.GeneratedMessage
.newFileScopedGeneratedExtension(
java.lang.Integer.class,
null);
public static final int PACKAGE_FQ_NAME_FIELD_NUMBER = 151; public static final int PACKAGE_FQ_NAME_FIELD_NUMBER = 151;
/** /**
* <code>extend .org.jetbrains.kotlin.serialization.Package { ... }</code> * <code>extend .org.jetbrains.kotlin.serialization.Package { ... }</code>
@@ -1453,40 +1441,38 @@ public final class DebugBuiltInsProtoBuf {
"ion.QualifiedNameTable\022<\n\007package\030\003 \001(\0132" + "ion.QualifiedNameTable\022<\n\007package\030\003 \001(\0132" +
"+.org.jetbrains.kotlin.serialization.Pac" + "+.org.jetbrains.kotlin.serialization.Pac" +
"kage\0228\n\005class\030\004 \003(\0132).org.jetbrains.kotl", "kage\0228\n\005class\030\004 \003(\0132).org.jetbrains.kotl",
"in.serialization.Class:D\n\nclass_name\022+.o" + "in.serialization.Class:E\n\017package_fq_nam" +
"rg.jetbrains.kotlin.serialization.Packag" + "e\022+.org.jetbrains.kotlin.serialization.P" +
"e\030\226\001 \003(\005B\002\020\001:E\n\017package_fq_name\022+.org.je" + "ackage\030\227\001 \001(\005:t\n\020class_annotation\022).org." +
"tbrains.kotlin.serialization.Package\030\227\001 " + "jetbrains.kotlin.serialization.Class\030\226\001 " +
"\001(\005:t\n\020class_annotation\022).org.jetbrains." + "\003(\0132..org.jetbrains.kotlin.serialization" +
"kotlin.serialization.Class\030\226\001 \003(\0132..org." + ".Annotation:\200\001\n\026constructor_annotation\022/" +
"jetbrains.kotlin.serialization.Annotatio" + ".org.jetbrains.kotlin.serialization.Cons" +
"n:\200\001\n\026constructor_annotation\022/.org.jetbr" + "tructor\030\226\001 \003(\0132..org.jetbrains.kotlin.se" +
"ains.kotlin.serialization.Constructor\030\226\001" + "rialization.Annotation:z\n\023function_annot" +
" \003(\0132..org.jetbrains.kotlin.serializatio", "ation\022,.org.jetbrains.kotlin.serializati",
"n.Annotation:z\n\023function_annotation\022,.or" + "on.Function\030\226\001 \003(\0132..org.jetbrains.kotli" +
"g.jetbrains.kotlin.serialization.Functio" + "n.serialization.Annotation:z\n\023property_a" +
"n\030\226\001 \003(\0132..org.jetbrains.kotlin.serializ" + "nnotation\022,.org.jetbrains.kotlin.seriali" +
"ation.Annotation:z\n\023property_annotation\022" + "zation.Property\030\226\001 \003(\0132..org.jetbrains.k" +
",.org.jetbrains.kotlin.serialization.Pro" + "otlin.serialization.Annotation:\210\001\n\022compi" +
"perty\030\226\001 \003(\0132..org.jetbrains.kotlin.seri" + "le_time_value\022,.org.jetbrains.kotlin.ser" +
"alization.Annotation:\210\001\n\022compile_time_va" + "ialization.Property\030\227\001 \001(\0132=.org.jetbrai" +
"lue\022,.org.jetbrains.kotlin.serialization" + "ns.kotlin.serialization.Annotation.Argum" +
".Property\030\227\001 \001(\0132=.org.jetbrains.kotlin." + "ent.Value:}\n\025enum_entry_annotation\022-.org" +
"serialization.Annotation.Argument.Value:", ".jetbrains.kotlin.serialization.EnumEntr",
"}\n\025enum_entry_annotation\022-.org.jetbrains" + "y\030\226\001 \003(\0132..org.jetbrains.kotlin.serializ" +
".kotlin.serialization.EnumEntry\030\226\001 \003(\0132." + "ation.Annotation:\201\001\n\024parameter_annotatio" +
".org.jetbrains.kotlin.serialization.Anno" + "n\0222.org.jetbrains.kotlin.serialization.V" +
"tation:\201\001\n\024parameter_annotation\0222.org.je" + "alueParameter\030\226\001 \003(\0132..org.jetbrains.kot" +
"tbrains.kotlin.serialization.ValueParame" + "lin.serialization.Annotation:r\n\017type_ann" +
"ter\030\226\001 \003(\0132..org.jetbrains.kotlin.serial" + "otation\022(.org.jetbrains.kotlin.serializa" +
"ization.Annotation:r\n\017type_annotation\022(." + "tion.Type\030\226\001 \003(\0132..org.jetbrains.kotlin." +
"org.jetbrains.kotlin.serialization.Type\030" + "serialization.Annotation:\205\001\n\031type_parame" +
"\226\001 \003(\0132..org.jetbrains.kotlin.serializat" + "ter_annotation\0221.org.jetbrains.kotlin.se" +
"ion.Annotation:\205\001\n\031type_parameter_annota", "rialization.TypeParameter\030\226\001 \003(\0132..org.j",
"tion\0221.org.jetbrains.kotlin.serializatio" + "etbrains.kotlin.serialization.Annotation" +
"n.TypeParameter\030\226\001 \003(\0132..org.jetbrains.k" + "B\027B\025DebugBuiltInsProtoBuf"
"otlin.serialization.AnnotationB\027B\025DebugB" +
"uiltInsProtoBuf"
}; };
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -1499,17 +1485,16 @@ public final class DebugBuiltInsProtoBuf {
com.google.protobuf.GeneratedMessage.FieldAccessorTable( com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_org_jetbrains_kotlin_serialization_builtins_BuiltIns_descriptor, internal_static_org_jetbrains_kotlin_serialization_builtins_BuiltIns_descriptor,
new java.lang.String[] { "Strings", "QualifiedNames", "Package", "Class", }); new java.lang.String[] { "Strings", "QualifiedNames", "Package", "Class", });
className.internalInit(descriptor.getExtensions().get(0)); packageFqName.internalInit(descriptor.getExtensions().get(0));
packageFqName.internalInit(descriptor.getExtensions().get(1)); classAnnotation.internalInit(descriptor.getExtensions().get(1));
classAnnotation.internalInit(descriptor.getExtensions().get(2)); constructorAnnotation.internalInit(descriptor.getExtensions().get(2));
constructorAnnotation.internalInit(descriptor.getExtensions().get(3)); functionAnnotation.internalInit(descriptor.getExtensions().get(3));
functionAnnotation.internalInit(descriptor.getExtensions().get(4)); propertyAnnotation.internalInit(descriptor.getExtensions().get(4));
propertyAnnotation.internalInit(descriptor.getExtensions().get(5)); compileTimeValue.internalInit(descriptor.getExtensions().get(5));
compileTimeValue.internalInit(descriptor.getExtensions().get(6)); enumEntryAnnotation.internalInit(descriptor.getExtensions().get(6));
enumEntryAnnotation.internalInit(descriptor.getExtensions().get(7)); parameterAnnotation.internalInit(descriptor.getExtensions().get(7));
parameterAnnotation.internalInit(descriptor.getExtensions().get(8)); typeAnnotation.internalInit(descriptor.getExtensions().get(8));
typeAnnotation.internalInit(descriptor.getExtensions().get(9)); typeParameterAnnotation.internalInit(descriptor.getExtensions().get(9));
typeParameterAnnotation.internalInit(descriptor.getExtensions().get(10));
return null; return null;
} }
}; };
@@ -18,8 +18,6 @@ package org.jetbrains.kotlin.builtins
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.name.FqName 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.builtins.BuiltInsProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
@@ -34,7 +32,8 @@ class BuiltinsPackageFragment(
module: ModuleDescriptor, module: ModuleDescriptor,
loadResource: (path: String) -> InputStream? loadResource: (path: String) -> InputStream?
) : DeserializedPackageFragment(fqName, storageManager, module, BuiltInsSerializedResourcePaths, loadResource) { ) : 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 dataInput = DataInputStream(stream)
val version = BuiltInsBinaryVersion(*(1..dataInput.readInt()).map { dataInput.readInt() }.toIntArray()) val version = BuiltInsBinaryVersion(*(1..dataInput.readInt()).map { dataInput.readInt() }.toIntArray())
@@ -50,24 +49,16 @@ class BuiltinsPackageFragment(
BuiltInsProtoBuf.BuiltIns.parseFrom(stream, BuiltInsSerializedResourcePaths.extensionRegistry) BuiltInsProtoBuf.BuiltIns.parseFrom(stream, BuiltInsSerializedResourcePaths.extensionRegistry)
} }
override val nameResolver = override val nameResolver = NameResolverImpl(builtinsMessage.strings, builtinsMessage.qualifiedNames)
builtinsMessage?.let { NameResolverImpl(it.strings, it.qualifiedNames) }
?: NameResolverImpl.read(loadResourceSure(serializedResourcePaths.getStringTableFilePath(fqName)))
override val classIdToProto = builtinsMessage?.let { builtins -> override val classIdToProto =
builtins.classList.toMapBy { klass -> builtinsMessage.classList.toMapBy { klass ->
nameResolver.getClassId(klass.fqName) nameResolver.getClassId(klass.fqName)
} }
}
override fun computeMemberScope() = builtinsMessage?.let { builtins -> override fun computeMemberScope() =
DeserializedPackageMemberScope( DeserializedPackageMemberScope(
this, builtins.`package`, nameResolver, packagePartSource = null, components = components, this, builtinsMessage.`package`, nameResolver, packagePartSource = null, components = components,
classNames = { classIdToProto!!.keys.filter { classId -> !classId.isNestedClass }.map { it.shortClassName } } classNames = { classIdToProto.keys.filter { classId -> !classId.isNestedClass }.map { it.shortClassName } }
) )
} ?: super.computeMemberScope()
override fun loadClassNames(packageProto: ProtoBuf.Package): Collection<Name> {
return packageProto.getExtension(BuiltInsProtoBuf.className)?.map { id -> nameResolver.getName(id) } ?: listOf()
}
} }
-2
View File
@@ -31,8 +31,6 @@ message BuiltIns {
} }
extend Package { extend Package {
// id in StringTable
repeated int32 class_name = 150 [packed = true];
optional int32 package_fq_name = 151; optional int32 package_fq_name = 151;
} }
@@ -7,7 +7,6 @@ public final class BuiltInsProtoBuf {
private BuiltInsProtoBuf() {} private BuiltInsProtoBuf() {}
public static void registerAllExtensions( public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) { 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.packageFqName);
registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.classAnnotation); registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.classAnnotation);
registry.add(org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf.constructorAnnotation); 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) // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.builtins.BuiltIns)
} }
public static final int CLASS_NAME_FIELD_NUMBER = 150;
/**
* <code>extend .org.jetbrains.kotlin.serialization.Package { ... }</code>
*/
public static final
com.google.protobuf.GeneratedMessageLite.GeneratedExtension<
org.jetbrains.kotlin.serialization.ProtoBuf.Package,
java.util.List<java.lang.Integer>> 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; public static final int PACKAGE_FQ_NAME_FIELD_NUMBER = 151;
/** /**
* <code>extend .org.jetbrains.kotlin.serialization.Package { ... }</code> * <code>extend .org.jetbrains.kotlin.serialization.Package { ... }</code>
@@ -49,14 +49,7 @@ abstract class DeserializedPackageFragment(
computeMemberScope() computeMemberScope()
} }
protected open fun computeMemberScope(): DeserializedPackageMemberScope { protected abstract 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) }
)
}
override fun getMemberScope() = deserializedMemberScope override fun getMemberScope() = deserializedMemberScope
@@ -64,8 +57,6 @@ abstract class DeserializedPackageFragment(
return name in getMemberScope().classNames return name in getMemberScope().classNames
} }
protected abstract fun loadClassNames(packageProto: ProtoBuf.Package): Collection<Name>
protected fun loadResourceSure(path: String): InputStream = protected fun loadResourceSure(path: String): InputStream =
loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path") loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path")
} }
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
import java.io.InputStream import java.io.InputStream
@@ -36,7 +37,15 @@ class KotlinJavascriptPackageFragment(
override val classIdToProto: Map<ClassId, ProtoBuf.Class>? get() = null override val classIdToProto: Map<ClassId, ProtoBuf.Class>? get() = null
override fun loadClassNames(packageProto: ProtoBuf.Package): Collection<Name> { 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<Name> {
val classesStream = loadResourceSure(KotlinJavascriptSerializedResourcePaths.getClassesInPackageFilePath(fqName)) val classesStream = loadResourceSure(KotlinJavascriptSerializedResourcePaths.getClassesInPackageFilePath(fqName))
val classesProto = JsProtoBuf.Classes.parseFrom(classesStream, serializedResourcePaths.extensionRegistry) val classesProto = JsProtoBuf.Classes.parseFrom(classesStream, serializedResourcePaths.extensionRegistry)
return classesProto.classNameList?.map { id -> nameResolver.getName(id) } ?: listOf() return classesProto.classNameList?.map { id -> nameResolver.getName(id) } ?: listOf()