Remove direct usages of ModuleDescriptor#getPackageFragmentProvider()

This commit is contained in:
Pavel V. Talanov
2015-05-07 14:23:52 +03:00
parent 23dabf595a
commit e4c242e66b
14 changed files with 41 additions and 40 deletions
@@ -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;
@@ -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,
@@ -199,5 +199,6 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
override fun acceptVoid(visitor: DeclarationDescriptorVisitor<Void, Void>?) = throw UnsupportedOperationException()
override fun getAnnotations() = throw UnsupportedOperationException()
override fun getName() = throw UnsupportedOperationException()
override fun getFragments() = throw UnsupportedOperationException()
}
}
@@ -63,8 +63,7 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
PackageFragmentDescriptor deserialized = KotlinBuiltIns.getInstance().getBuiltInsPackageFragment();
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(files, getEnvironment(), false);
List<PackageFragmentDescriptor> fragments =
module.getPackageFragmentProvider().getPackageFragments(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME);
List<PackageFragmentDescriptor> fragments = module.getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME).getFragments();
for (PackageFragmentDescriptor fromLazyResolve : fragments) {
if (fromLazyResolve instanceof LazyPackageDescriptor) {
RecursiveDescriptorComparator.validateAndCompareDescriptors(
@@ -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<FqName>
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
@@ -22,9 +22,6 @@ import org.jetbrains.kotlin.name.Name
public trait PackageFragmentProvider {
public fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor>
/**
* @return declared subpackages of a package with the FQ name given by [fqName]
*/
public fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName>
@@ -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<PackageFragmentDescriptor> getFragments();
}
@@ -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<FqName> {
return packageFragmentProviderForWholeModuleWithDependencies.getSubPackagesOf(fqName, nameFilter)
}
private val friendModules = LinkedHashSet<ModuleDescriptor>()
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.types.TypeSubstitutor
public class PackageViewDescriptorImpl(
private val module: ModuleDescriptor,
private val fqName: FqName,
fragments: List<PackageFragmentDescriptor>
private val fragments: List<PackageFragmentDescriptor>
) : 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
@@ -38,7 +38,7 @@ public class SubpackagesScope(private val containingDeclaration: PackageViewDesc
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
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<DeclarationDescriptor>(subFqNames.size())
for (subFqName in subFqNames) {
val shortName = subFqName.shortName()
@@ -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)
}
@@ -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<PackageFragmentDescriptor> 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<PackageFragmentDescriptor> fragments = packageView.getFragments();
BuiltInsReferenceResolver.this.moduleDescriptor = newModuleContext.getModule();
builtinsPackageFragment = KotlinPackage.single(fragments);
@@ -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<ClassDescriptor>() }
CachedValueProvider.Result(classDescriptors, ProjectRootModificationTracker.getInstance(scope.getProject()))
}, false)
@@ -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)