diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt index a72278e21d9..603959e8d42 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt @@ -489,9 +489,8 @@ class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageValidator position: QualifierPosition ): Pair { 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) 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 8576a466534..0e2a0360b02 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -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: FqName -> LazyPackageViewDescriptorImpl(this, fqName, storageManager) + } + + override fun getPackage(fqName: FqName): PackageViewDescriptor = packages(fqName) override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection { return packageFragmentProvider.getSubPackagesOf(fqName, nameFilter)