diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 73b9b7b7bff..26275615fd1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -237,7 +237,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { ProtoBuf.Class classProto = serializer.classProto(descriptor).build(); - ClassData data = new ClassData(createNameResolver(serializer.getNameTable()), classProto); + ClassData data = new ClassData(createNameResolver(serializer.getStringTable()), classProto); AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS), true); //noinspection ConstantConditions diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java b/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java index 2b838bd019b..eb16a5e1ca0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JavaSerializerExtension.java @@ -19,8 +19,6 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.util.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.org.objectweb.asm.Type; -import org.jetbrains.org.objectweb.asm.commons.Method; import org.jetbrains.jet.descriptors.serialization.*; import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPropertyDescriptor; import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor; @@ -28,6 +26,8 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.kotlin.SignatureDeserializer; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.org.objectweb.asm.Type; +import org.jetbrains.org.objectweb.asm.commons.Method; import java.util.Arrays; @@ -44,17 +44,17 @@ public class JavaSerializerExtension extends SerializerExtension { public void serializeCallable( @NotNull CallableMemberDescriptor callable, @NotNull ProtoBuf.Callable.Builder proto, - @NotNull NameTable nameTable + @NotNull StringTable stringTable ) { - saveSignature(callable, proto, nameTable); - saveImplClassName(callable, proto, nameTable); + saveSignature(callable, proto, stringTable); + saveImplClassName(callable, proto, stringTable); } @Override public void serializeValueParameter( @NotNull ValueParameterDescriptor descriptor, @NotNull ProtoBuf.Callable.ValueParameter.Builder proto, - @NotNull NameTable nameTable + @NotNull StringTable stringTable ) { Integer index = bindings.get(INDEX_FOR_VALUE_PARAMETER, descriptor); if (index != null) { @@ -65,9 +65,9 @@ public class JavaSerializerExtension extends SerializerExtension { private void saveSignature( @NotNull CallableMemberDescriptor callable, @NotNull ProtoBuf.Callable.Builder proto, - @NotNull NameTable nameTable + @NotNull StringTable stringTable ) { - SignatureSerializer signatureSerializer = new SignatureSerializer(nameTable); + SignatureSerializer signatureSerializer = new SignatureSerializer(stringTable); if (callable instanceof FunctionDescriptor) { JavaProtoBuf.JavaMethodSignature signature; if (callable instanceof DeserializedSimpleFunctionDescriptor) { @@ -128,19 +128,19 @@ public class JavaSerializerExtension extends SerializerExtension { private void saveImplClassName( @NotNull CallableMemberDescriptor callable, @NotNull ProtoBuf.Callable.Builder proto, - @NotNull NameTable nameTable + @NotNull StringTable stringTable ) { String name = bindings.get(IMPL_CLASS_NAME_FOR_CALLABLE, callable); if (name != null) { - proto.setExtension(JavaProtoBuf.implClassName, nameTable.getSimpleNameIndex(Name.identifier(name))); + proto.setExtension(JavaProtoBuf.implClassName, stringTable.getSimpleNameIndex(Name.identifier(name))); } } private static class SignatureSerializer { - private final NameTable nameTable; + private final StringTable stringTable; - public SignatureSerializer(@NotNull NameTable nameTable) { - this.nameTable = nameTable; + public SignatureSerializer(@NotNull StringTable stringTable) { + this.stringTable = stringTable; } @NotNull @@ -156,7 +156,7 @@ public class JavaSerializerExtension extends SerializerExtension { public JavaProtoBuf.JavaMethodSignature methodSignature(@NotNull Method method) { JavaProtoBuf.JavaMethodSignature.Builder signature = JavaProtoBuf.JavaMethodSignature.newBuilder(); - signature.setName(nameTable.getSimpleNameIndex(Name.guess(method.getName()))); + signature.setName(stringTable.getStringIndex(method.getName())); signature.setReturnType(type(method.getReturnType())); @@ -231,7 +231,7 @@ public class JavaSerializerExtension extends SerializerExtension { @NotNull public JavaProtoBuf.JavaFieldSignature fieldSignature(@NotNull Type type, @NotNull String name, boolean isStaticInOuter) { JavaProtoBuf.JavaFieldSignature.Builder signature = JavaProtoBuf.JavaFieldSignature.newBuilder(); - signature.setName(nameTable.getSimpleNameIndex(Name.guess(name))); + signature.setName(stringTable.getStringIndex(name)); signature.setType(type(type)); if (isStaticInOuter) { signature.setIsStaticInOuter(true); @@ -255,7 +255,7 @@ public class JavaSerializerExtension extends SerializerExtension { if (type.getSort() == Type.OBJECT) { FqName fqName = internalNameToFqName(type.getInternalName()); - builder.setClassFqName(nameTable.getFqNameIndex(fqName)); + builder.setClassFqName(stringTable.getFqNameIndex(fqName)); } else { builder.setPrimitiveType(JavaProtoBuf.JavaType.PrimitiveType.valueOf(type.getSort())); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index 8901aab9ac3..a42a660ac31 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -280,7 +280,7 @@ public class PackageCodegen { if (packageProto.getMemberCount() == 0) return; - PackageData data = new PackageData(createNameResolver(serializer.getNameTable()), packageProto); + PackageData data = new PackageData(createNameResolver(serializer.getStringTable()), packageProto); AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_PACKAGE), true); av.visit(JvmAnnotationNames.ABI_VERSION_FIELD_NAME, JvmAbi.VERSION); diff --git a/compiler/builtins-serializer/src/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/BuiltInsSerializer.kt index 7a335d9aa7f..7932f65555c 100644 --- a/compiler/builtins-serializer/src/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/BuiltInsSerializer.kt @@ -135,12 +135,12 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { write(destDir, BuiltInsSerializationUtil.getPackageFilePath(fqName), packageStream) val nameStream = ByteArrayOutputStream() - NameSerializationUtil.serializeNameTable(nameStream, serializer.getNameTable()) - write(destDir, BuiltInsSerializationUtil.getNameTableFilePath(fqName), nameStream) + NameSerializationUtil.serializeStringTable(nameStream, serializer.getStringTable()) + write(destDir, BuiltInsSerializationUtil.getStringTableFilePath(fqName).first(), nameStream) } fun writeClassNames(serializer: DescriptorSerializer, classNames: List, stream: ByteArrayOutputStream) { - val nameTable = serializer.getNameTable() + val nameTable = serializer.getStringTable() DataOutputStream(stream) use { output -> output.writeInt(classNames.size()) for (className in classNames) { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.kt b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.kt index 60ccab47890..8150dc89930 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.kt @@ -22,7 +22,7 @@ import kotlin.platform.platformStatic public object BuiltInsSerializationUtil { private val CLASS_METADATA_FILE_EXTENSION = "kotlin_class" private val PACKAGE_FILE_NAME = ".kotlin_package" - private val NAME_TABLE_FILE_NAME = ".kotlin_name_table" + private val STRING_TABLE_FILE_NAME = ".kotlin_string_table" private val CLASS_NAMES_FILE_NAME = ".kotlin_class_names" private val CLASS_OBJECT_NAME = "object" @@ -45,8 +45,11 @@ public object BuiltInsSerializationUtil { platformStatic public fun getPackageFilePath(fqName: FqName): String = packageFqNameToPath(fqName) + "/" + PACKAGE_FILE_NAME - platformStatic public fun getNameTableFilePath(fqName: FqName): String = - packageFqNameToPath(fqName) + "/" + NAME_TABLE_FILE_NAME + platformStatic public fun getStringTableFilePath(fqName: FqName): List = + listOf( + packageFqNameToPath(fqName) + "/" + STRING_TABLE_FILE_NAME, + packageFqNameToPath(fqName) + "/.kotlin_name_table" // TODO: drop + ) platformStatic public fun getClassNamesFilePath(fqName: FqName): String = packageFqNameToPath(fqName) + "/" + CLASS_NAMES_FILE_NAME 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 71bd75dc7cd..0206bb96f59 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 @@ -37,7 +37,9 @@ public class BuiltinsPackageFragment( private val loadResource: (path: String) -> InputStream? ) : PackageFragmentDescriptorImpl(module, fqName) { - private val nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(fqName))) + private val nameResolver = BuiltInsSerializationUtil.getStringTableFilePath(fqName).let { paths -> + NameSerializationUtil.deserializeNameResolver(loadResource(paths[0]) ?: getStream(paths[1])) + } public val provider: PackageFragmentProvider = PackageFragmentProviderImpl(listOf(this)) 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 afe60462229..b68e4e790d2 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java @@ -33,19 +33,19 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*; public class DescriptorSerializer { - private final NameTable nameTable; + private final StringTable stringTable; private final Interner typeParameters; private final SerializerExtension extension; - private DescriptorSerializer(NameTable nameTable, Interner typeParameters, SerializerExtension extension) { - this.nameTable = nameTable; + private DescriptorSerializer(StringTable stringTable, Interner typeParameters, SerializerExtension extension) { + this.stringTable = stringTable; this.typeParameters = typeParameters; this.extension = extension; } @NotNull public static DescriptorSerializer createTopLevel(@NotNull SerializerExtension extension) { - return new DescriptorSerializer(new NameTable(), new Interner(), extension); + return new DescriptorSerializer(new StringTable(), new Interner(), extension); } @NotNull @@ -67,12 +67,12 @@ public class DescriptorSerializer { } private DescriptorSerializer createChildSerializer() { - return new DescriptorSerializer(nameTable, new Interner(typeParameters), extension); + return new DescriptorSerializer(stringTable, new Interner(typeParameters), extension); } @NotNull - public NameTable getNameTable() { - return nameTable; + public StringTable getStringTable() { + return stringTable; } @NotNull @@ -121,7 +121,7 @@ public class DescriptorSerializer { } for (DeclarationDescriptor descriptor : sort(classDescriptor.getUnsubstitutedInnerClassesScope().getAllDescriptors())) { - int name = nameTable.getSimpleNameIndex(descriptor.getName()); + int name = stringTable.getSimpleNameIndex(descriptor.getName()); if (isEnumEntry(descriptor)) { builder.addEnumEntry(name); } @@ -214,7 +214,7 @@ public class DescriptorSerializer { builder.setReceiverType(local.type(receiverParameter.getType())); } - builder.setName(nameTable.getSimpleNameIndex(descriptor.getName())); + builder.setName(stringTable.getSimpleNameIndex(descriptor.getName())); for (ValueParameterDescriptor valueParameterDescriptor : descriptor.getValueParameters()) { builder.addValueParameter(local.valueParameter(valueParameterDescriptor)); @@ -222,7 +222,7 @@ public class DescriptorSerializer { builder.setReturnType(local.type(getSerializableReturnType(descriptor.getReturnType()))); - extension.serializeCallable(descriptor, builder, nameTable); + extension.serializeCallable(descriptor, builder, stringTable); return builder; } @@ -283,7 +283,7 @@ public class DescriptorSerializer { builder.setFlags(Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue())); - builder.setName(nameTable.getSimpleNameIndex(descriptor.getName())); + builder.setName(stringTable.getSimpleNameIndex(descriptor.getName())); builder.setType(type(descriptor.getType())); @@ -292,7 +292,7 @@ public class DescriptorSerializer { builder.setVarargElementType(type(varargElementType)); } - extension.serializeValueParameter(descriptor, builder, nameTable); + extension.serializeValueParameter(descriptor, builder, stringTable); return builder; } @@ -302,7 +302,7 @@ public class DescriptorSerializer { builder.setId(getTypeParameterId(typeParameter)); - builder.setName(nameTable.getSimpleNameIndex(typeParameter.getName())); + builder.setName(stringTable.getSimpleNameIndex(typeParameter.getName())); // to avoid storing a default if (typeParameter.isReified()) { @@ -361,7 +361,7 @@ public class DescriptorSerializer { ProtoBuf.Type.Builder builder = type(flexibility.getLowerBound()); - builder.setFlexibleTypeCapabilitiesId(nameTable.getStringIndex(flexibility.getExtraCapabilities().getId())); + builder.setFlexibleTypeCapabilitiesId(stringTable.getStringIndex(flexibility.getExtraCapabilities().getId())); builder.setFlexibleUpperBound(type(flexibility.getUpperBound())); @@ -435,7 +435,7 @@ public class DescriptorSerializer { } private int getClassId(@NotNull ClassDescriptor descriptor) { - return nameTable.getFqNameIndex(descriptor); + return stringTable.getFqNameIndex(descriptor); } private int getTypeParameterId(@NotNull TypeParameterDescriptor descriptor) { diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameSerializationUtil.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameSerializationUtil.java index b6935947b6c..48980f6d07c 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameSerializationUtil.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameSerializationUtil.java @@ -40,14 +40,14 @@ public class NameSerializationUtil { } public static void serializeNameResolver(@NotNull OutputStream out, @NotNull NameResolver nameResolver) { - serializeNameTable(out, nameResolver.getStringTable(), nameResolver.getQualifiedNameTable()); + serializeStringTable(out, nameResolver.getStringTable(), nameResolver.getQualifiedNameTable()); } - public static void serializeNameTable(@NotNull OutputStream out, @NotNull NameTable nameTable) { - serializeNameTable(out, toStringTable(nameTable), toQualifiedNameTable(nameTable)); + public static void serializeStringTable(@NotNull OutputStream out, @NotNull StringTable stringTable) { + serializeStringTable(out, toStringTable(stringTable), toQualifiedNameTable(stringTable)); } - private static void serializeNameTable( + private static void serializeStringTable( @NotNull OutputStream out, @NotNull ProtoBuf.StringTable stringTable, @NotNull ProtoBuf.QualifiedNameTable qualifiedNameTable @@ -62,25 +62,25 @@ public class NameSerializationUtil { } @NotNull - public static ProtoBuf.StringTable toStringTable(@NotNull NameTable nameTable) { + public static ProtoBuf.StringTable toStringTable(@NotNull StringTable stringTable) { ProtoBuf.StringTable.Builder simpleNames = ProtoBuf.StringTable.newBuilder(); - for (String simpleName : nameTable.getStrings()) { + for (String simpleName : stringTable.getStrings()) { simpleNames.addString(simpleName); } return simpleNames.build(); } @NotNull - public static ProtoBuf.QualifiedNameTable toQualifiedNameTable(@NotNull NameTable nameTable) { + public static ProtoBuf.QualifiedNameTable toQualifiedNameTable(@NotNull StringTable stringTable) { ProtoBuf.QualifiedNameTable.Builder qualifiedNames = ProtoBuf.QualifiedNameTable.newBuilder(); - for (ProtoBuf.QualifiedNameTable.QualifiedName.Builder qName : nameTable.getFqNames()) { + for (ProtoBuf.QualifiedNameTable.QualifiedName.Builder qName : stringTable.getFqNames()) { qualifiedNames.addQualifiedName(qName); } return qualifiedNames.build(); } @NotNull - public static NameResolver createNameResolver(@NotNull NameTable table) { + public static NameResolver createNameResolver(@NotNull StringTable table) { return new NameResolver(toStringTable(table), toQualifiedNameTable(table)); } } 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 146431f33cc..8b1e58743a4 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/SerializerExtension.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/SerializerExtension.java @@ -26,14 +26,14 @@ public abstract class SerializerExtension { public void serializeCallable( @NotNull CallableMemberDescriptor callable, @NotNull ProtoBuf.Callable.Builder proto, - @NotNull NameTable nameTable + @NotNull StringTable stringTable ) { } public void serializeValueParameter( @NotNull ValueParameterDescriptor descriptor, @NotNull ProtoBuf.Callable.ValueParameter.Builder proto, - @NotNull NameTable nameTable + @NotNull StringTable stringTable ) { } } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/StringTable.java similarity index 98% rename from core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java rename to core/serialization/src/org/jetbrains/jet/descriptors/serialization/StringTable.java index dea2e3f18e5..1694eaf6f99 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/StringTable.java @@ -26,7 +26,7 @@ import java.util.List; import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.QualifiedNameTable.QualifiedName; -public class NameTable { +public class StringTable { public static final TObjectHashingStrategy QUALIFIED_NAME_BUILDER_HASHING = new TObjectHashingStrategy() { @Override @@ -49,9 +49,6 @@ public class NameTable { private final Interner strings = new Interner(); private final Interner qualifiedNames = new Interner(QUALIFIED_NAME_BUILDER_HASHING); - public NameTable() { - } - @NotNull public List getStrings() { return strings.getAllInternedObjects();