Test built-ins serializer, untie built-ins from class loader resources
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user