Test built-ins serializer, untie built-ins from class loader resources

This commit is contained in:
Alexander Udalov
2014-11-27 22:55:52 +03:00
parent 44b8f3045f
commit d1425c14ba
7 changed files with 116 additions and 25 deletions
@@ -23,16 +23,19 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor
import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider
import org.jetbrains.jet.lang.descriptors.PackageFragmentProviderImpl
import org.jetbrains.jet.lang.descriptors.impl.PackageFragmentDescriptorImpl
import org.jetbrains.jet.lang.resolve.name.ClassId
import org.jetbrains.jet.lang.resolve.name.Name
import org.jetbrains.jet.lang.resolve.name.*
import org.jetbrains.jet.storage.StorageManager
import java.io.DataInputStream
import java.io.InputStream
import java.util.ArrayList
import org.jetbrains.jet.descriptors.serialization.context.DeserializationComponents
class BuiltinsPackageFragment(storageManager: StorageManager, module: ModuleDescriptor)
: PackageFragmentDescriptorImpl(module, KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) {
public class BuiltinsPackageFragment(
fqName: FqName,
storageManager: StorageManager,
module: ModuleDescriptor,
private val loadResource: (path: String) -> InputStream?
) : PackageFragmentDescriptorImpl(module, fqName) {
private val nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(fqName)))
@@ -69,14 +72,13 @@ class BuiltinsPackageFragment(storageManager: StorageManager, module: ModuleDesc
override fun getMemberScope() = members
private fun getStream(path: String) = getStreamNullable(path) ?: throw IllegalStateException("Resource not found in classpath: $path")
private fun getStreamNullable(path: String): InputStream? = javaClass<KotlinBuiltIns>().getClassLoader().getResourceAsStream(path)
private fun getStream(path: String): InputStream =
loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path")
private inner class BuiltInsClassDataFinder : ClassDataFinder {
override fun findClassData(classId: ClassId): ClassData? {
val metadataPath = BuiltInsSerializationUtil.getClassMetadataPath(classId) ?: return null
val stream = getStreamNullable(metadataPath) ?: return null
val stream = loadResource(metadataPath) ?: return null
val classProto = ProtoBuf.Class.parseFrom(stream)
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.types.lang;
import kotlin.Function1;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -34,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import java.io.InputStream;
import java.util.*;
import static org.jetbrains.jet.lang.types.lang.PrimitiveType.*;
@@ -104,10 +106,18 @@ public class KotlinBuiltIns {
private final FqNames fqNames = new FqNames();
private KotlinBuiltIns() {
builtInsModule = new ModuleDescriptorImpl(Name.special("<built-ins lazy module>"),
Collections.<ImportPath>emptyList(),
PlatformToKotlinClassMap.EMPTY);
builtinsPackageFragment = new BuiltinsPackageFragment(new LockBasedStorageManager(), builtInsModule);
builtInsModule = new ModuleDescriptorImpl(
Name.special("<built-ins lazy module>"), Collections.<ImportPath>emptyList(), PlatformToKotlinClassMap.EMPTY
);
builtinsPackageFragment = new BuiltinsPackageFragment(
BUILT_INS_PACKAGE_FQ_NAME, new LockBasedStorageManager(), builtInsModule,
new Function1<String, InputStream>() {
@Override
public InputStream invoke(String path) {
return KotlinBuiltIns.class.getClassLoader().getResourceAsStream(path);
}
}
);
builtInsModule.initialize(builtinsPackageFragment.getProvider());
builtInsModule.addDependencyOnModule(builtInsModule);
builtInsModule.seal();