diff --git a/compiler/frontend/builtins/jet/.kotlin_class_names b/compiler/frontend/builtins/jet/.kotlin_class_names new file mode 100644 index 00000000000..045b44f859b Binary files /dev/null and b/compiler/frontend/builtins/jet/.kotlin_class_names differ diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.java index 81cbffe72ca..465d0aa263b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.java @@ -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('.', '/'); } diff --git a/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java b/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java index f50a40ed769..abee53776a0 100644 --- a/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java +++ b/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java @@ -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"); }