Common functionality for (de)serializing built-ons moved to a separate class

This commit is contained in:
Andrey Breslav
2013-06-03 12:45:50 +04:00
committed by Alexander Udalov
parent df57ce5a7f
commit 2446d0d003
3 changed files with 63 additions and 27 deletions
@@ -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('.', '/');
}
}
@@ -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);
@@ -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<DeclarationDescriptor> 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));
}
}