Added optimized PackageFragmentProvider#isEmpty(FqName)
This commit is contained in:
committed by
Space
parent
37055c5a09
commit
e511eec90e
+2
@@ -60,6 +60,8 @@ class IncrementalPackageFragmentProvider(
|
|||||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
||||||
packageFragments.addIfNotNull(fqNameToPackageFragment[fqName])
|
packageFragments.addIfNotNull(fqNameToPackageFragment[fqName])
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean = !fqNameToPackageFragment.containsKey(fqName)
|
||||||
|
|
||||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
||||||
return listOfNotNull(fqNameToPackageFragment[fqName])
|
return listOfNotNull(fqNameToPackageFragment[fqName])
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -83,6 +83,9 @@ class OptionalAnnotationPackageFragmentProvider(
|
|||||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
||||||
packageFragments.addIfNotNull(packages[fqName])
|
packageFragments.addIfNotNull(packages[fqName])
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean =
|
||||||
|
!packages.containsKey(fqName)
|
||||||
|
|
||||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
|
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
|
||||||
packages[fqName]?.let(::listOf).orEmpty()
|
packages[fqName]?.let(::listOf).orEmpty()
|
||||||
|
|
||||||
|
|||||||
@@ -252,6 +252,12 @@ private class DelegatingPackageFragmentProvider<M : ModuleInfo>(
|
|||||||
resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.collectPackageFragmentsOptimizedIfPossible(fqName, packageFragments)
|
resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.collectPackageFragmentsOptimizedIfPossible(fqName, packageFragments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean {
|
||||||
|
if (certainlyDoesNotExist(fqName)) return true
|
||||||
|
|
||||||
|
return resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.isEmpty(fqName)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
||||||
if (certainlyDoesNotExist(fqName)) return emptyList()
|
if (certainlyDoesNotExist(fqName)) return emptyList()
|
||||||
|
|
||||||
|
|||||||
@@ -204,6 +204,12 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty(@NotNull FqName fqName) {
|
||||||
|
PackageMemberDeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(fqName);
|
||||||
|
return provider == null;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public List<PackageFragmentDescriptor> getPackageFragments(@NotNull FqName fqName) {
|
public List<PackageFragmentDescriptor> getPackageFragments(@NotNull FqName fqName) {
|
||||||
|
|||||||
+4
@@ -46,6 +46,10 @@ class LazyJavaPackageFragmentProvider(
|
|||||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
||||||
packageFragments.addIfNotNull(getPackageFragment(fqName))
|
packageFragments.addIfNotNull(getPackageFragment(fqName))
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean {
|
||||||
|
return c.components.finder.findPackage(fqName) == null
|
||||||
|
}
|
||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) =
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) =
|
||||||
getPackageFragment(fqName)?.getSubPackageFqNames().orEmpty()
|
getPackageFragment(fqName)?.getSubPackageFqNames().orEmpty()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ interface PackageFragmentProvider {
|
|||||||
|
|
||||||
interface PackageFragmentProviderOptimized : PackageFragmentProvider {
|
interface PackageFragmentProviderOptimized : PackageFragmentProvider {
|
||||||
fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>)
|
fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>)
|
||||||
|
fun isEmpty(fqName: FqName): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PackageFragmentProvider.packageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
fun PackageFragmentProvider.packageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
||||||
@@ -42,6 +43,13 @@ fun PackageFragmentProvider.packageFragments(fqName: FqName): List<PackageFragme
|
|||||||
return packageFragments
|
return packageFragments
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun PackageFragmentProvider.isEmpty(fqName: FqName): Boolean {
|
||||||
|
return when (this) {
|
||||||
|
is PackageFragmentProviderOptimized -> isEmpty(fqName)
|
||||||
|
else -> packageFragments(fqName).isEmpty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun PackageFragmentProvider.collectPackageFragmentsOptimizedIfPossible(
|
fun PackageFragmentProvider.collectPackageFragmentsOptimizedIfPossible(
|
||||||
fqName: FqName,
|
fqName: FqName,
|
||||||
packageFragments: MutableCollection<PackageFragmentDescriptor>
|
packageFragments: MutableCollection<PackageFragmentDescriptor>
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ class PackageFragmentProviderImpl(
|
|||||||
this.packageFragments.filterTo(packageFragments) { it.fqName == fqName }
|
this.packageFragments.filterTo(packageFragments) { it.fqName == fqName }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean =
|
||||||
|
this.packageFragments.none { it.fqName == fqName }
|
||||||
|
|
||||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
|
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
|
||||||
packageFragments.filter { it.fqName == fqName }
|
packageFragments.filter { it.fqName == fqName }
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.impl
|
package org.jetbrains.kotlin.descriptors.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProviderOptimized
|
|
||||||
import org.jetbrains.kotlin.descriptors.collectPackageFragmentsOptimizedIfPossible
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -48,6 +45,9 @@ class CompositePackageFragmentProvider(// can be modified from outside
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean =
|
||||||
|
providers.all { it.isEmpty(fqName) }
|
||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
||||||
val result = HashSet<FqName>()
|
val result = HashSet<FqName>()
|
||||||
for (provider in providers) {
|
for (provider in providers) {
|
||||||
|
|||||||
+8
-5
@@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.impl
|
package org.jetbrains.kotlin.descriptors.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorVisitor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.packageFragments
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
|
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter
|
import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter
|
||||||
@@ -38,8 +35,14 @@ open class LazyPackageViewDescriptorImpl(
|
|||||||
module.packageFragmentProvider.packageFragments(fqName)
|
module.packageFragmentProvider.packageFragments(fqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected val empty: Boolean by storageManager.createLazyValue {
|
||||||
|
module.packageFragmentProvider.isEmpty(fqName)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(): Boolean = empty
|
||||||
|
|
||||||
override val memberScope: MemberScope = LazyScopeAdapter(storageManager) {
|
override val memberScope: MemberScope = LazyScopeAdapter(storageManager) {
|
||||||
if (fragments.isEmpty()) {
|
if (isEmpty()) {
|
||||||
MemberScope.Empty
|
MemberScope.Empty
|
||||||
} else {
|
} else {
|
||||||
// Packages from SubpackagesScope are got via getContributedDescriptors(DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER)
|
// Packages from SubpackagesScope are got via getContributedDescriptors(DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER)
|
||||||
|
|||||||
+9
@@ -43,6 +43,15 @@ abstract class AbstractDeserializedPackageFragmentProvider(
|
|||||||
packageFragments.addIfNotNull(fragments(fqName))
|
packageFragments.addIfNotNull(fragments(fqName))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean {
|
||||||
|
val descriptor = if (fragments.isComputed(fqName)) {
|
||||||
|
fragments.invoke(fqName)
|
||||||
|
} else {
|
||||||
|
findPackage(fqName)
|
||||||
|
}
|
||||||
|
return descriptor == null
|
||||||
|
}
|
||||||
|
|
||||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> = listOfNotNull(fragments(fqName))
|
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> = listOfNotNull(fragments(fqName))
|
||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> = emptySet()
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> = emptySet()
|
||||||
|
|||||||
+2
@@ -34,6 +34,8 @@ abstract class DeserializerForDecompilerBase(val directoryPackageFqName: FqName)
|
|||||||
packageFragments.add(createDummyPackageFragment(fqName))
|
packageFragments.add(createDummyPackageFragment(fqName))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean = false
|
||||||
|
|
||||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
||||||
return listOf(createDummyPackageFragment(fqName))
|
return listOf(createDummyPackageFragment(fqName))
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -137,6 +137,8 @@ class AndroidSyntheticPackageFragmentProvider(
|
|||||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
||||||
packageFragments.addIfNotNull(packages[fqName]?.invoke())
|
packageFragments.addIfNotNull(packages[fqName]?.invoke())
|
||||||
|
|
||||||
|
override fun isEmpty(fqName: FqName): Boolean = !packages.containsKey(fqName)
|
||||||
|
|
||||||
override fun getPackageFragments(fqName: FqName) = listOfNotNull(packages[fqName]?.invoke())
|
override fun getPackageFragments(fqName: FqName) = listOfNotNull(packages[fqName]?.invoke())
|
||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): List<FqName> {
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): List<FqName> {
|
||||||
|
|||||||
Reference in New Issue
Block a user