Writing all built-in class names into a separate file

This commit is contained in:
Andrey Breslav
2013-06-03 21:04:21 +04:00
committed by Alexander Udalov
parent de1f114b27
commit c04ecbc1cb
3 changed files with 20 additions and 1 deletions
Binary file not shown.
@@ -17,6 +17,7 @@ public class BuiltInsSerializationUtil {
public static final String CLASS_METADATA_FILE_EXTENSION = "kotlin_class";
public static final String PACKAGE_FILE_NAME = ".kotlin_package";
public static final String NAME_TABLE_FILE_NAME = ".kotlin_name_table";
public static final String CLASS_NAMES_FILE_NAME = ".kotlin_class_names";
public static final Name CLASS_OBJECT_NAME = Name.identifier("object");
public static final NameTable.Namer BUILTINS_NAMER = new NameTable.Namer() {
@@ -57,6 +58,12 @@ public class BuiltInsSerializationUtil {
return packageFqNameToPath(fqName) + "/" + NAME_TABLE_FILE_NAME;
}
@NotNull
public static String getClassNamesFilePath(@NotNull NamespaceDescriptor packageDescriptor) {
FqNameUnsafe fqName = DescriptorUtils.getFQName(packageDescriptor);
return packageFqNameToPath(fqName) + "/" + CLASS_NAMES_FILE_NAME;
}
private static String packageFqNameToPath(FqNameUnsafe fqName) {
return fqName.asString().replace('.', '/');
}
@@ -10,6 +10,7 @@ import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -17,6 +18,7 @@ import org.jetbrains.jet.lang.types.lang.BuiltInsSerializationUtil;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.List;
@@ -51,7 +53,9 @@ public class BuiltInsSerializer {
System.err.println("Could not make directories: " + destDir);
}
DescriptorSerializer serializer = new DescriptorSerializer(NameTable.Namer.DEFAULT);
final DescriptorSerializer serializer = new DescriptorSerializer(NameTable.Namer.DEFAULT);
ByteArrayOutputStream classNames = new ByteArrayOutputStream();
final DataOutputStream data = new DataOutputStream(classNames);
ClassSerializationUtil.serializeClasses(allDescriptors, ClassSerializationUtil.constantSerializer(serializer), new ClassSerializationUtil.Sink() {
@Override
public void writeClass(
@@ -62,12 +66,18 @@ public class BuiltInsSerializer {
classProto.writeTo(stream);
write(destDir, getFileName(classDescriptor), stream);
if (DescriptorUtils.isTopLevelDeclaration(classDescriptor)) {
int index = serializer.getNameTable().getSimpleNameIndex(classDescriptor.getName());
data.writeInt(index);
}
}
catch (IOException e) {
throw new AssertionError(e);
}
}
});
data.close();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
for (DeclarationDescriptor descriptor : allDescriptors) {
@@ -84,6 +94,8 @@ public class BuiltInsSerializer {
NameSerializationUtil.serializeNameTable(nameStream, serializer.getNameTable());
write(destDir, BuiltInsSerializationUtil.getNameTableFilePath(namespace), nameStream);
write(destDir, BuiltInsSerializationUtil.getClassNamesFilePath(namespace), classNames);
System.out.println("Total bytes written: " + totalSize + " to " + totalFiles + " files");
}