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 CLASS_METADATA_FILE_EXTENSION = "kotlin_class";
|
||||||
public static final String PACKAGE_FILE_NAME = ".kotlin_package";
|
public static final String PACKAGE_FILE_NAME = ".kotlin_package";
|
||||||
public static final String NAME_TABLE_FILE_NAME = ".kotlin_name_table";
|
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 Name CLASS_OBJECT_NAME = Name.identifier("object");
|
||||||
|
|
||||||
public static final NameTable.Namer BUILTINS_NAMER = new NameTable.Namer() {
|
public static final NameTable.Namer BUILTINS_NAMER = new NameTable.Namer() {
|
||||||
@@ -57,6 +58,12 @@ public class BuiltInsSerializationUtil {
|
|||||||
return packageFqNameToPath(fqName) + "/" + NAME_TABLE_FILE_NAME;
|
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) {
|
private static String packageFqNameToPath(FqNameUnsafe fqName) {
|
||||||
return fqName.asString().replace('.', '/');
|
return fqName.asString().replace('.', '/');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.jetbrains.jet.config.CompilerConfiguration;
|
|||||||
import org.jetbrains.jet.descriptors.serialization.*;
|
import org.jetbrains.jet.descriptors.serialization.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
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.lazy.LazyResolveTestUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
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 org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -51,7 +53,9 @@ public class BuiltInsSerializer {
|
|||||||
System.err.println("Could not make directories: " + destDir);
|
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() {
|
ClassSerializationUtil.serializeClasses(allDescriptors, ClassSerializationUtil.constantSerializer(serializer), new ClassSerializationUtil.Sink() {
|
||||||
@Override
|
@Override
|
||||||
public void writeClass(
|
public void writeClass(
|
||||||
@@ -62,12 +66,18 @@ public class BuiltInsSerializer {
|
|||||||
classProto.writeTo(stream);
|
classProto.writeTo(stream);
|
||||||
|
|
||||||
write(destDir, getFileName(classDescriptor), stream);
|
write(destDir, getFileName(classDescriptor), stream);
|
||||||
|
|
||||||
|
if (DescriptorUtils.isTopLevelDeclaration(classDescriptor)) {
|
||||||
|
int index = serializer.getNameTable().getSimpleNameIndex(classDescriptor.getName());
|
||||||
|
data.writeInt(index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
throw new AssertionError(e);
|
throw new AssertionError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
data.close();
|
||||||
|
|
||||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||||
for (DeclarationDescriptor descriptor : allDescriptors) {
|
for (DeclarationDescriptor descriptor : allDescriptors) {
|
||||||
@@ -84,6 +94,8 @@ public class BuiltInsSerializer {
|
|||||||
NameSerializationUtil.serializeNameTable(nameStream, serializer.getNameTable());
|
NameSerializationUtil.serializeNameTable(nameStream, serializer.getNameTable());
|
||||||
write(destDir, BuiltInsSerializationUtil.getNameTableFilePath(namespace), nameStream);
|
write(destDir, BuiltInsSerializationUtil.getNameTableFilePath(namespace), nameStream);
|
||||||
|
|
||||||
|
write(destDir, BuiltInsSerializationUtil.getClassNamesFilePath(namespace), classNames);
|
||||||
|
|
||||||
System.out.println("Total bytes written: " + totalSize + " to " + totalFiles + " files");
|
System.out.println("Total bytes written: " + totalSize + " to " + totalFiles + " files");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user