From 123523d1dcdbadef85d512d1916ab79366667383 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 19 Jun 2014 15:43:09 +0400 Subject: [PATCH] Drop ClassDataFinder#getClassNames() --- .../IncrementalPackageFragmentProvider.kt | 2 +- .../DeserializedDescriptorResolver.java | 14 +++- .../resolve/kotlin/JavaClassDataFinder.kt | 4 -- .../types/lang/BuiltinsPackageFragment.java | 67 ++++++++----------- .../serialization/ClassDataFinder.java | 11 --- .../DeserializedPackageMemberScope.java | 14 ++-- .../libraries/DeserializerForDecompiler.kt | 6 +- 7 files changed, 53 insertions(+), 65 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt index 0835c390c0f..6299a9ce67a 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -115,7 +115,7 @@ public class IncrementalPackageFragmentProvider( } private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope( - this@IncrementalPackageFragment, packageData, deserializationContext + this@IncrementalPackageFragment, packageData, deserializationContext, { listOf() } ) { override fun filteredMemberProtos(allMemberProtos: Collection): Collection { return allMemberProtos diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java index 12e8f71bad5..fdf9a388699 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.lang.resolve.kotlin; +import kotlin.Function0; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.ClassData; @@ -27,10 +28,14 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; +import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import javax.inject.Inject; +import java.util.Collection; +import java.util.Collections; + import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kind.CLASS; import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kind.PACKAGE_FACADE; @@ -65,7 +70,14 @@ public final class DeserializedDescriptorResolver { public JetScope createKotlinPackageScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) { String[] data = readData(kotlinClass, PACKAGE_FACADE); if (data != null) { - return new DeserializedPackageMemberScope(descriptor, JavaProtoBufUtil.readPackageDataFrom(data), context); + //all classes are included in java scope + return new DeserializedPackageMemberScope(descriptor, JavaProtoBufUtil.readPackageDataFrom(data), context, + new Function0>() { + @Override + public Collection invoke() { + return Collections.emptyList(); + } + }); } return null; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/JavaClassDataFinder.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/JavaClassDataFinder.kt index d3c2dc6276c..c261c8a8ac8 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/JavaClassDataFinder.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/JavaClassDataFinder.kt @@ -45,8 +45,4 @@ public class JavaClassDataFinder( val data = deserializedDescriptorResolver.readData(kotlinJvmBinaryClass, KotlinClassHeader.Kind.CLASS) ?: return null return JavaProtoBufUtil.readClassDataFrom(data) } - - override fun getClassNames(packageName: FqName): Collection { - return Collections.emptyList() - } } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java index 0c00262f642..d9c98927354 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java @@ -48,14 +48,40 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl { packageFragmentProvider = new BuiltinsPackageFragmentProvider(); - BuiltInsClassDataFinder builtInsClassDataFinder = new BuiltInsClassDataFinder(storageManager); + Function0> classNames = new Function0>() { + @Override + @NotNull + public Collection invoke() { + InputStream in = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(getFqName())); + + try { + DataInputStream data = new DataInputStream(in); + try { + int size = data.readInt(); + List result = new ArrayList(size); + for (int i = 0; i < size; i++) { + result.add(nameResolver.getName(data.readInt())); + } + return result; + } + finally { + data.close(); + } + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + }; + + BuiltInsClassDataFinder builtInsClassDataFinder = new BuiltInsClassDataFinder(); DeserializationContext deserializationContext = new DeserializationContext( storageManager, module, builtInsClassDataFinder, // TODO: support annotations AnnotationLoader.UNSUPPORTED, ConstantLoader.UNSUPPORTED, packageFragmentProvider, new ClassDeserializer(storageManager, builtInsClassDataFinder), nameResolver ); - members = new DeserializedPackageMemberScope(this, loadPackage(), deserializationContext); + members = new DeserializedPackageMemberScope(this, loadPackage(), deserializationContext, classNames); } @NotNull @@ -116,37 +142,6 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl { } private class BuiltInsClassDataFinder implements ClassDataFinder { - private final NotNullLazyValue> classNames; - - public BuiltInsClassDataFinder(@NotNull StorageManager storageManager) { - // TODO: support annotations - classNames = storageManager.createLazyValue(new Function0>() { - @Override - @NotNull - public Collection invoke() { - InputStream in = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(getFqName())); - - try { - DataInputStream data = new DataInputStream(in); - try { - int size = data.readInt(); - List result = new ArrayList(size); - for (int i = 0; i < size; i++) { - result.add(nameResolver.getName(data.readInt())); - } - return result; - } - finally { - data.close(); - } - } - catch (IOException e) { - throw new IllegalStateException(e); - } - } - }); - } - @Nullable @Override public ClassData findClassData(@NotNull ClassId classId) { @@ -172,11 +167,5 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl { throw new IllegalStateException(e); } } - - @NotNull - @Override - public Collection getClassNames(@NotNull FqName packageName) { - return packageName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? classNames.invoke() : Collections.emptyList(); - } } } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassDataFinder.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassDataFinder.java index bc9c79dc938..f1466cbaf2f 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassDataFinder.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassDataFinder.java @@ -18,19 +18,8 @@ package org.jetbrains.jet.descriptors.serialization; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.ReadOnly; -import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.name.Name; - -import java.util.Collection; -import java.util.Collections; public interface ClassDataFinder { @Nullable ClassData findClassData(@NotNull ClassId classId); - - @ReadOnly - @NotNull - Collection getClassNames(@NotNull FqName packageName); } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java index 8f676871c44..37fbfd55726 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.descriptors.serialization.descriptors; +import kotlin.Function0; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.ClassId; @@ -31,6 +32,7 @@ import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.storage.NotNullLazyValue; import java.util.Collection; @@ -38,23 +40,27 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope { private final FqName packageFqName; private final DeserializationContext context; + private final NotNullLazyValue> classNames; public DeserializedPackageMemberScope( @NotNull PackageFragmentDescriptor packageDescriptor, @NotNull ProtoBuf.Package proto, - @NotNull DeserializationContext context + @NotNull DeserializationContext context, + @NotNull Function0> classNames ) { super(context.withTypes(packageDescriptor), proto.getMemberList()); this.context = context; this.packageFqName = packageDescriptor.getFqName(); + this.classNames = context.getStorageManager().createLazyValue(classNames); } public DeserializedPackageMemberScope( @NotNull PackageFragmentDescriptor packageDescriptor, @NotNull PackageData packageData, - @NotNull DeserializationGlobalContext context + @NotNull DeserializationGlobalContext context, + @NotNull Function0> classNames ) { - this(packageDescriptor, packageData.getPackageProto(), context.withNameResolver(packageData.getNameResolver())); + this(packageDescriptor, packageData.getPackageProto(), context.withNameResolver(packageData.getNameResolver()), classNames); } @Nullable @Override @@ -64,7 +70,7 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope { @Override protected void addAllClassDescriptors(@NotNull Collection result) { - for (Name className : context.getClassDataFinder().getClassNames(packageFqName)) { + for (Name className : classNames.invoke()) { ClassDescriptor classDescriptor = getClassDescriptor(className); if (classDescriptor != null) { diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt b/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt index 6f9aa1cdd30..09415627dad 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt @@ -72,7 +72,7 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di createDummyPackageFragment(packageFqName), JavaProtoBufUtil.readPackageDataFrom(annotationData), deserializationContext - ) + ) { listOf() } return membersScope.getAllDescriptors() } @@ -126,10 +126,6 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di } return JavaProtoBufUtil.readClassDataFrom(data) } - - override fun getClassNames(packageName: FqName): Collection { - return Collections.emptyList() - } } private val packageFragmentProvider = object : PackageFragmentProvider {