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 new file mode 100644 index 00000000000..ea754225984 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltInsSerializationUtil.java @@ -0,0 +1,56 @@ +package org.jetbrains.jet.lang.types.lang; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.descriptors.serialization.ClassId; +import org.jetbrains.jet.descriptors.serialization.ClassSerializationUtil; +import org.jetbrains.jet.descriptors.serialization.NameTable; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.ClassKind; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; +import org.jetbrains.jet.lang.resolve.name.Name; + +public class BuiltInsSerializationUtil { + + public static final String BUILT_INS_DIR = "builtins"; + public static final String CLASS_METADATA_FILE_EXTENSION = "kotlin_class"; + public static final String PACKAGE_FILE_NAME = ".kotlin_package"; + public static final Name CLASS_OBJECT_NAME = Name.identifier("object"); + + public static final NameTable.Namer BUILTINS_NAMER = new NameTable.Namer() { + @NotNull + @Override + public Name getClassName(@NotNull ClassDescriptor classDescriptor) { + return classDescriptor.getKind() == ClassKind.CLASS_OBJECT ? CLASS_OBJECT_NAME : classDescriptor.getName(); + } + + @NotNull + @Override + public Name getPackageName(@NotNull NamespaceDescriptor namespaceDescriptor) { + return namespaceDescriptor.getName(); + } + }; + + @NotNull + public static String getClassMetadataPath(@NotNull ClassId classId) { + return packageFqNameToPath(classId.getPackageFqName().toUnsafe()) + + "/" + classId.getRelativeClassName().asString() + + "." + CLASS_METADATA_FILE_EXTENSION; + } + + @NotNull + public static ClassId getClassId(@NotNull ClassDescriptor classDescriptor) { + return ClassSerializationUtil.getClassId(classDescriptor, BUILTINS_NAMER); + } + + @NotNull + public static String getPackageFilePath(@NotNull NamespaceDescriptor packageDescriptor) { + FqNameUnsafe fqName = DescriptorUtils.getFQName(packageDescriptor); + return packageFqNameToPath(fqName) + "/" + PACKAGE_FILE_NAME; + } + + private static String packageFqNameToPath(FqNameUnsafe fqName) { + return fqName.asString().replace('.', '/'); + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index 9b1d1f7abe3..a89e040c6eb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -68,7 +68,7 @@ public class KotlinBuiltIns { public static final JetScope STUB = JetScope.EMPTY; public static final String BUILT_INS_DIR = "jet"; - private static final String BUILT_INS_PACKAGE_NAME_STRING = "jet"; + public static final String BUILT_INS_PACKAGE_NAME_STRING = "jet"; private static final Name BUILT_INS_PACKAGE_NAME = Name.identifier(BUILT_INS_PACKAGE_NAME_STRING); public static final FqName BUILT_INS_PACKAGE_FQ_NAME = FqName.topLevel(BUILT_INS_PACKAGE_NAME); diff --git a/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java b/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java index f0cdca123da..c18694e973b 100644 --- a/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java +++ b/generators/org/jetbrains/jet/generators/builtins/BuiltInsSerializer.java @@ -13,6 +13,8 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.types.lang.BuiltInsSerializationUtil; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.io.ByteArrayOutputStream; import java.io.File; @@ -22,13 +24,8 @@ import java.util.List; import java.util.regex.Pattern; public class BuiltInsSerializer { - public static final String CLASS_METADATA_FILE_EXTENSION = "kotlin_class"; - public static final String PACKAGE_FILE_NAME = ".kotlin_package"; - public static final Name CLASS_OBJECT_NAME = Name.identifier("object"); - private static final String BUILT_INS_SRC_DIR = "compiler/frontend/src"; private static final String DEST_DIR = "compiler/frontend/builtins"; - private static final String BUILT_INS_PACKAGE_NAME = "jet"; private static int totalSize = 0; private static int totalFiles = 0; @@ -42,12 +39,12 @@ public class BuiltInsSerializer { ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(files, environment); - FqName fqName = FqName.topLevel(Name.identifier(BUILT_INS_PACKAGE_NAME)); + FqName fqName = FqName.topLevel(Name.identifier(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME_STRING)); NamespaceDescriptor namespace = module.getNamespace(fqName); assert namespace != null : "No built-ins namespace: " + fqName; Collection allDescriptors = namespace.getMemberScope().getAllDescriptors(); - final File destDir = new File(new File(DEST_DIR), BUILT_INS_PACKAGE_NAME); + final File destDir = new File(DEST_DIR); if (!FileUtil.delete(destDir)) { System.err.println("Could not delete: " + destDir); } @@ -82,7 +79,7 @@ public class BuiltInsSerializer { } } - write(destDir, getPackageFileName(namespace), stream); + write(destDir, BuiltInsSerializationUtil.getPackageFilePath(namespace), stream); System.out.println("Total bytes written: " + totalSize + " to " + totalFiles + " files"); } @@ -94,24 +91,7 @@ public class BuiltInsSerializer { System.out.println(stream.size() + " bytes written to " + fileName); } - private static String getPackageFileName(NamespaceDescriptor packageDescriptor) { - return PACKAGE_FILE_NAME; - } - private static String getFileName(ClassDescriptor classDescriptor) { - ClassId classId = ClassSerializationUtil.getClassId(classDescriptor, new NameTable.Namer() { - @NotNull - @Override - public Name getClassName(@NotNull ClassDescriptor classDescriptor) { - return classDescriptor.getKind() == ClassKind.CLASS_OBJECT ? CLASS_OBJECT_NAME : classDescriptor.getName(); - } - - @NotNull - @Override - public Name getPackageName(@NotNull NamespaceDescriptor namespaceDescriptor) { - return namespaceDescriptor.getName(); - } - }); - return classId.getRelativeClassName().asString() + "." + CLASS_METADATA_FILE_EXTENSION; + return BuiltInsSerializationUtil.getClassMetadataPath(BuiltInsSerializationUtil.getClassId(classDescriptor)); } }