Rename NameTable -> StringTable in serialization

Since almost the beginning, it was also used to store arbitrary strings, not
just names
This commit is contained in:
Alexander Udalov
2014-12-01 11:58:20 +03:00
parent 66774c0fd1
commit 9bd815126b
10 changed files with 57 additions and 55 deletions
@@ -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
@@ -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()));
@@ -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);
@@ -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<Name>, stream: ByteArrayOutputStream) {
val nameTable = serializer.getNameTable()
val nameTable = serializer.getStringTable()
DataOutputStream(stream) use { output ->
output.writeInt(classNames.size())
for (className in classNames) {
@@ -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<String> =
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
@@ -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))
@@ -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<TypeParameterDescriptor> typeParameters;
private final SerializerExtension extension;
private DescriptorSerializer(NameTable nameTable, Interner<TypeParameterDescriptor> typeParameters, SerializerExtension extension) {
this.nameTable = nameTable;
private DescriptorSerializer(StringTable stringTable, Interner<TypeParameterDescriptor> 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<TypeParameterDescriptor>(), extension);
return new DescriptorSerializer(new StringTable(), new Interner<TypeParameterDescriptor>(), extension);
}
@NotNull
@@ -67,12 +67,12 @@ public class DescriptorSerializer {
}
private DescriptorSerializer createChildSerializer() {
return new DescriptorSerializer(nameTable, new Interner<TypeParameterDescriptor>(typeParameters), extension);
return new DescriptorSerializer(stringTable, new Interner<TypeParameterDescriptor>(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) {
@@ -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));
}
}
@@ -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
) {
}
}
@@ -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<QualifiedName.Builder> QUALIFIED_NAME_BUILDER_HASHING =
new TObjectHashingStrategy<ProtoBuf.QualifiedNameTable.QualifiedName.Builder>() {
@Override
@@ -49,9 +49,6 @@ public class NameTable {
private final Interner<String> strings = new Interner<String>();
private final Interner<QualifiedName.Builder> qualifiedNames = new Interner<QualifiedName.Builder>(QUALIFIED_NAME_BUILDER_HASHING);
public NameTable() {
}
@NotNull
public List<String> getStrings() {
return strings.getAllInternedObjects();