Writing all built-in class names into a separate file
This commit is contained in:
committed by
Alexander Udalov
parent
de1f114b27
commit
c04ecbc1cb
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");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user