Move caching of deserialized classes to new component ClassDeserializer

Drop AbstractDescriptorFinder
This commit is contained in:
Pavel V. Talanov
2014-06-16 15:00:57 +04:00
parent 6683173f67
commit 53337f793b
8 changed files with 72 additions and 91 deletions
@@ -98,9 +98,7 @@ public class LazyJavaPackageFragmentProvider(
override fun getSubPackagesOf(fqName: FqName) = getPackageFragment(fqName)?.getMemberScope()?.getSubPackages().orEmpty()
internal val resolveKotlinBinaryClass = c.storageManager.createMemoizedFunctionWithNullableValues {
(kotlinClass: KotlinJvmBinaryClass) -> c.deserializedDescriptorResolver.resolveClass(kotlinClass)
}
fun resolveKotlinBinaryClass(kotlinClass: KotlinJvmBinaryClass) = c.deserializedDescriptorResolver.resolveClassCached(kotlinClass)
fun getClass(javaClass: JavaClass): ClassDescriptor? = c.javaClassResolver.resolveClass(javaClass)
@@ -19,7 +19,9 @@ package org.jetbrains.jet.lang.resolve.kotlin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassData;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
import org.jetbrains.jet.descriptors.serialization.NameResolver;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
@@ -57,6 +59,17 @@ public final class DeserializedDescriptorResolver {
}
return null;
}
@Nullable
public ClassDescriptor resolveClassCached(@NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass, CLASS);
if (data != null) {
ClassData classData = JavaProtoBufUtil.readClassDataFrom(data);
NameResolver nameResolver = classData.getNameResolver();
ClassId classId = nameResolver.getClassId(classData.getClassProto().getFqName());
return context.getClassDeserializer().deserializeClass(classId);
}
return null;
}
@Nullable
public JetScope createKotlinPackageScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) {
@@ -36,7 +36,7 @@ public class JavaDescriptorFinder(
val lazyJavaPackageFragmentProvider = javaDescriptorResolver.getPackageFragmentProvider() as LazyJavaPackageFragmentProvider
val c = lazyJavaPackageFragmentProvider.c
val kotlinJvmBinaryClass = c.kotlinClassFinder.findKotlinClass(kotlinFqNameToJavaFqName(classId.asSingleFqName())) ?: return null
return lazyJavaPackageFragmentProvider.resolveKotlinBinaryClass(kotlinJvmBinaryClass)
return c.deserializedDescriptorResolver.resolveClass(kotlinJvmBinaryClass)
}
override fun getClassNames(packageName: FqName): Collection<Name> {