From c04ecbc1cbca2ebee97063a1c8ea9c03fe6a75e6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 3 Jun 2013 21:04:21 +0400 Subject: [PATCH] Writing all built-in class names into a separate file --- .../frontend/builtins/jet/.kotlin_class_names | Bin 0 -> 1496 bytes .../types/lang/BuiltInsSerializationUtil.java | 7 +++++++ .../generators/builtins/BuiltInsSerializer.java | 14 +++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 compiler/frontend/builtins/jet/.kotlin_class_names diff --git a/compiler/frontend/builtins/jet/.kotlin_class_names b/compiler/frontend/builtins/jet/.kotlin_class_names new file mode 100644 index 0000000000000000000000000000000000000000..045b44f859bb3b0a6f885fc7b79c085e5a944bbe GIT binary patch literal 1496 zcmX}q*XvJV0LSrj_}P11pv)h4GH+bq=R&eWl$n%L{s*O$Qc5XBDP@!Fy~hKR?AhQ|o1QPGQPOpK@M z6kVyN#dN9}(VJ>!%%YkdbExLVJgWJzfNEhZqFNkFsFubus^zhQYGtgVS{-Ys*2X%j z^|67fIyO>mip^AgVhdG+*h;l6wo~nhom9JGH`SilOSLcdQyqwdREOd))sZ+#bu5lk zorsfE6Qds0sW?q_CYn%9h-Or0;~drbxIlF=E>T^MD^yqG8rAiiT6eanGQ>j`}o2n}6P}L3gx>Wt(zb(};8c{V4_P$ipVDC#cj}}xdqZL)_XhYSu zqUgrLQFe|lRMizlU*=JE569{k{iz1TAgY=eOf|Hk=*aWLJ(a^^I7Km}qU^yn3f`-7 fM2w^wT~V-(f5uUiV=D^2U*)8jOf@B@(y4y|w`{kW literal 0 HcmV?d00001 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"); }