Memoize package views in module
This commit is contained in:
@@ -489,9 +489,8 @@ class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageValidator
|
|||||||
position: QualifierPosition
|
position: QualifierPosition
|
||||||
): Pair<PackageViewDescriptor, Int> {
|
): Pair<PackageViewDescriptor, Int> {
|
||||||
val possiblePackagePrefixSize = path.indexOfFirst { it.typeArguments != null }.let { if (it == -1) path.size else it + 1 }
|
val possiblePackagePrefixSize = path.indexOfFirst { it.typeArguments != null }.let { if (it == -1) path.size else it + 1 }
|
||||||
var fqName = path.subList(0, possiblePackagePrefixSize).fold(FqName.ROOT) { fqName, qualifierPart ->
|
var fqName = FqName.fromSegments(path.subList(0, possiblePackagePrefixSize).map { it.name.asString() })
|
||||||
fqName.child(qualifierPart.name)
|
|
||||||
}
|
|
||||||
var prefixSize = possiblePackagePrefixSize
|
var prefixSize = possiblePackagePrefixSize
|
||||||
while (!fqName.isRoot) {
|
while (!fqName.isRoot) {
|
||||||
val packageDescriptor = getPackage(fqName)
|
val packageDescriptor = getPackage(fqName)
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ class ModuleDescriptorImpl @JvmOverloads constructor(
|
|||||||
private var dependencies: ModuleDependencies? = null
|
private var dependencies: ModuleDependencies? = null
|
||||||
private var packageFragmentProviderForModuleContent: PackageFragmentProvider? = null
|
private var packageFragmentProviderForModuleContent: PackageFragmentProvider? = null
|
||||||
|
|
||||||
override fun getPackage(fqName: FqName): PackageViewDescriptor = LazyPackageViewDescriptorImpl(this, fqName, storageManager)
|
private val packages = storageManager.createMemoizedFunction<FqName, PackageViewDescriptor> {
|
||||||
|
fqName: FqName -> LazyPackageViewDescriptorImpl(this, fqName, storageManager)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getPackage(fqName: FqName): PackageViewDescriptor = packages(fqName)
|
||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
||||||
return packageFragmentProvider.getSubPackagesOf(fqName, nameFilter)
|
return packageFragmentProvider.getSubPackagesOf(fqName, nameFilter)
|
||||||
|
|||||||
Reference in New Issue
Block a user