From e4c242e66b6e6f4fec6202c8d2de2e98709c29d4 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 7 May 2015 14:23:52 +0300 Subject: [PATCH] Remove direct usages of ModuleDescriptor#getPackageFragmentProvider() --- .../kotlin/codegen/PackageCodegen.java | 2 +- .../builtins/BuiltInsSerializer.kt | 2 +- .../AbstractJvmRuntimeDescriptorLoaderTest.kt | 1 + .../builtins/LoadBuiltinsTest.java | 3 +-- .../kotlin/descriptors/ModuleDescriptor.kt | 12 ++++------- .../descriptors/PackageFragmentProvider.kt | 3 --- .../descriptors/PackageViewDescriptor.java | 5 +++++ .../descriptors/impl/ModuleDescriptorImpl.kt | 11 +++++++++- .../impl/PackageViewDescriptorImpl.kt | 4 +++- .../descriptors/impl/SubpackagesScope.kt | 2 +- .../textBuilder/DecompiledTextFactory.kt | 21 +++++++------------ .../references/BuiltInsReferenceResolver.java | 7 +++---- .../idea/completion/AllClassesCompletion.kt | 6 ++---- .../js/KotlinJavascriptSerializationUtil.kt | 2 +- 14 files changed, 41 insertions(+), 40 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java index 460411b90f4..24ec6a75566 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java @@ -135,7 +135,7 @@ public class PackageCodegen { } // TODO rewrite it to something more robust when module system is implemented - for (PackageFragmentDescriptor fragment : state.getModule().getPackageFragmentProvider().getPackageFragments(fqName)) { + for (PackageFragmentDescriptor fragment : state.getModule().getPackage(fqName).getFragments()) { if (fragment instanceof IncrementalPackageFragmentProvider.IncrementalPackageFragment && ((IncrementalPackageFragmentProvider.IncrementalPackageFragment) fragment).getModuleId().equals(state.getModuleId())) { return fragment; diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt index 0f1c8440180..2b4d16469c2 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt @@ -125,7 +125,7 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { } val packageStream = ByteArrayOutputStream() - val fragments = module.getPackageFragmentProvider().getPackageFragments(fqName) + val fragments = packageView.getFragments() val packageProto = serializer.packageProto(fragments).build() ?: error("Package fragments not serialized: $fragments") packageProto.writeTo(packageStream) write(destDir, BuiltInsSerializedResourcePaths.getPackageFilePath(fqName), packageStream, diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt index cce5d63a04e..67f3cee5644 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt @@ -199,5 +199,6 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi override fun acceptVoid(visitor: DeclarationDescriptorVisitor?) = throw UnsupportedOperationException() override fun getAnnotations() = throw UnsupportedOperationException() override fun getName() = throw UnsupportedOperationException() + override fun getFragments() = throw UnsupportedOperationException() } } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java index fd6c3349d67..aabb13adee4 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java @@ -63,8 +63,7 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment { PackageFragmentDescriptor deserialized = KotlinBuiltIns.getInstance().getBuiltInsPackageFragment(); ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(files, getEnvironment(), false); - List fragments = - module.getPackageFragmentProvider().getPackageFragments(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME); + List fragments = module.getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME).getFragments(); for (PackageFragmentDescriptor fromLazyResolve : fragments) { if (fromLazyResolve instanceof LazyPackageDescriptor) { RecursiveDescriptorComparator.validateAndCompareDescriptors( diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt index 0fde09f5947..e6a0aecd468 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt @@ -17,22 +17,18 @@ package org.jetbrains.kotlin.descriptors import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.descriptors.impl.PackageViewDescriptorImpl import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.types.TypeSubstitutor public trait ModuleDescriptor : DeclarationDescriptor, ModuleParameters { + public fun getPackage(fqName: FqName): PackageViewDescriptor? + public fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection + override fun getContainingDeclaration(): DeclarationDescriptor? = null - public fun getPackageFragmentProvider(): PackageFragmentProvider - - public fun getPackage(fqName: FqName): PackageViewDescriptor? { - val fragments = getPackageFragmentProvider().getPackageFragments(fqName) - return if (!fragments.isEmpty()) PackageViewDescriptorImpl(this, fqName, fragments) else null - } - public val builtIns: KotlinBuiltIns public fun isFriend(other: ModuleDescriptor): Boolean diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageFragmentProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageFragmentProvider.kt index 5de742cffce..d0a8fe007b3 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageFragmentProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageFragmentProvider.kt @@ -22,9 +22,6 @@ import org.jetbrains.kotlin.name.Name public trait PackageFragmentProvider { public fun getPackageFragments(fqName: FqName): List - /** - * @return declared subpackages of a package with the FQ name given by [fqName] - */ public fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.java index 08565f9995a..a7707fdde8c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.java @@ -21,6 +21,8 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.resolve.scopes.JetScope; +import java.util.List; + public interface PackageViewDescriptor extends DeclarationDescriptor { @Override @Nullable @@ -34,4 +36,7 @@ public interface PackageViewDescriptor extends DeclarationDescriptor { @NotNull ModuleDescriptor getModule(); + + @NotNull + List getFragments(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 867b3f5fc03..7597e4e27f8 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -20,7 +20,9 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleParameters import org.jetbrains.kotlin.descriptors.PackageFragmentProvider +import org.jetbrains.kotlin.descriptors.PackageViewDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.storage.StorageManager import java.util.ArrayList @@ -89,7 +91,14 @@ public class ModuleDescriptorImpl( packageFragmentProviderForModuleContent = providerForModuleContent } - override fun getPackageFragmentProvider() = packageFragmentProviderForWholeModuleWithDependencies + override fun getPackage(fqName: FqName): PackageViewDescriptor? { + val fragments = packageFragmentProviderForWholeModuleWithDependencies.getPackageFragments(fqName) + return if (!fragments.isEmpty()) PackageViewDescriptorImpl(this, fqName, fragments) else null + } + + override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection { + return packageFragmentProviderForWholeModuleWithDependencies.getSubPackagesOf(fqName, nameFilter) + } private val friendModules = LinkedHashSet() diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt index 925eb1d0308..8d30a14eac3 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.types.TypeSubstitutor public class PackageViewDescriptorImpl( private val module: ModuleDescriptor, private val fqName: FqName, - fragments: List + private val fragments: List ) : DeclarationDescriptorImpl(Annotations.EMPTY, fqName.shortNameOrSpecial()), PackageViewDescriptor { private val memberScope: JetScope = run { assert(fragments.isNotEmpty()) { "$fqName in module" } @@ -47,6 +47,8 @@ public class PackageViewDescriptorImpl( override fun getModule(): ModuleDescriptor = module + override fun getFragments() = fragments + override fun equals(other: Any?): Boolean { if (javaClass != other?.javaClass) return false diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt index f9fde55b346..cb210fbd313 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt @@ -38,7 +38,7 @@ public class SubpackagesScope(private val containingDeclaration: PackageViewDesc nameFilter: (Name) -> Boolean): Collection { if (!kindFilter.acceptsKinds(DescriptorKindFilter.PACKAGES_MASK)) return listOf() - val subFqNames = containingDeclaration.getModule().getPackageFragmentProvider().getSubPackagesOf(containingDeclaration.getFqName(), nameFilter) + val subFqNames = containingDeclaration.getModule().getSubPackagesOf(containingDeclaration.getFqName(), nameFilter) val result = ArrayList(subFqNames.size()) for (subFqName in subFqNames) { val shortName = subFqName.shortName() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt index efe4ee2d6f4..881bf2262a5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt @@ -18,26 +18,23 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder import com.intellij.openapi.util.TextRange import com.intellij.openapi.vfs.VirtualFile -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.idea.decompiler.navigation.JsMetaFileVirtualFileHolder -import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS +import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache +import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind +import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder -import java.util.* import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry -import org.jetbrains.kotlin.types.error.MissingDependencyErrorClass import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike -import org.jetbrains.kotlin.types.isFlexible -import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind -import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind import org.jetbrains.kotlin.resolve.descriptorUtil.secondaryConstructors +import org.jetbrains.kotlin.types.error.MissingDependencyErrorClass import org.jetbrains.kotlin.types.flexibility +import org.jetbrains.kotlin.types.isFlexible +import java.util.ArrayList +import java.util.HashMap private val FILE_ABI_VERSION_MARKER: String = "FILE_ABI" private val CURRENT_ABI_VERSION_MARKER: String = "CURRENT_ABI" @@ -85,9 +82,7 @@ public fun buildDecompiledTextFromJsMetadata( val packageFqName = classFile.getUserData(JsMetaFileVirtualFileHolder.PACKAGE_FQNAME_KEY) assert (packageFqName != null) - val fragments = module.getPackageFragmentProvider().getPackageFragments(packageFqName) - val descriptors = fragments.flatMap { it.getMemberScope().getAllDescriptors() } - + val descriptors = module.getPackage(packageFqName)?.getMemberScope()?.getAllDescriptors()?.toList().orEmpty() return buildDecompiledText(packageFqName, descriptors) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java index 23f051ae092..224333c8869 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java @@ -39,9 +39,7 @@ import org.jetbrains.kotlin.asJava.LightClassUtil; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.context.ContextPackage; import org.jetbrains.kotlin.context.MutableModuleContext; -import org.jetbrains.kotlin.context.ProjectContext; import org.jetbrains.kotlin.descriptors.*; -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; import org.jetbrains.kotlin.di.InjectorForLazyResolve; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetFile; @@ -123,8 +121,9 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent { injectorForLazyResolve.getResolveSession().forceResolveAll(); } - List fragments = - newModuleContext.getModule().getPackageFragmentProvider().getPackageFragments(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME); + PackageViewDescriptor packageView = newModuleContext.getModule().getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME); + assert packageView != null : "Should contain " + KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME + " package"; + List fragments = packageView.getFragments(); BuiltInsReferenceResolver.this.moduleDescriptor = newModuleContext.getModule(); builtinsPackageFragment = KotlinPackage.single(fragments); diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt index 862421634f5..e2c71ee6a40 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper import org.jetbrains.kotlin.idea.project.ProjectStructureUtil @@ -71,9 +70,8 @@ class AllClassesCompletion(val parameters: CompletionParameters, } private val allClassDescriptors = CachedValuesManager.getManager(scope.getProject()).createCachedValue( { - val provider = (moduleDescriptor as ModuleDescriptorImpl).getPackageFragmentProvider() - val fragments = DescriptorUtils.getPackagesFqNames(moduleDescriptor).flatMap { provider.getPackageFragments(it) } - val classDescriptors = fragments.flatMap { it.getMemberScope().getAllDescriptors().filter { it is ClassDescriptor} }.map { it as ClassDescriptor } + val packages = DescriptorUtils.getPackagesFqNames(moduleDescriptor).map { moduleDescriptor.getPackage(it) }.filterNotNull() + val classDescriptors = packages.flatMap { it.getMemberScope().getAllDescriptors().filterIsInstance() } CachedValueProvider.Result(classDescriptors, ProjectRootModificationTracker.getInstance(scope.getProject())) }, false) diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt index d5247920989..e182f10c380 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt @@ -120,7 +120,7 @@ public object KotlinJavascriptSerializationUtil { }, skip) val packageStream = ByteArrayOutputStream() - val fragments = module.getPackageFragmentProvider().getPackageFragments(fqName) + val fragments = packageView.getFragments() val packageProto = serializer.packageProto(fragments, skip).build() ?: error("Package fragments not serialized: $fragments") if (packageProto.getMemberCount() > 0) { packageProto.writeTo(packageStream)