Memoize package views in module

This commit is contained in:
Denis Zharkov
2016-02-23 16:30:53 +03:00
parent 4583283515
commit 5690d58fd0
2 changed files with 7 additions and 4 deletions
@@ -489,9 +489,8 @@ class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageValidator
position: QualifierPosition
): Pair<PackageViewDescriptor, Int> {
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 ->
fqName.child(qualifierPart.name)
}
var fqName = FqName.fromSegments(path.subList(0, possiblePackagePrefixSize).map { it.name.asString() })
var prefixSize = possiblePackagePrefixSize
while (!fqName.isRoot) {
val packageDescriptor = getPackage(fqName)
@@ -44,7 +44,11 @@ class ModuleDescriptorImpl @JvmOverloads constructor(
private var dependencies: ModuleDependencies? = 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> {
return packageFragmentProvider.getSubPackagesOf(fqName, nameFilter)