Improve package caching in KotlinJavaPsiFacade
^KT-33394 Fixed
This commit is contained in:
@@ -241,10 +241,10 @@ private class DelegatingPackageFragmentProvider<M : ModuleInfo>(
|
||||
) : PackageFragmentProvider {
|
||||
private val syntheticFilePackages = moduleContent.syntheticFiles.map { it.packageFqName }.toSet()
|
||||
|
||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
||||
if (certainlyDoesNotExist(fqName)) return emptyList()
|
||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
|
||||
if (certainlyDoesNotExist(fqName)) return
|
||||
|
||||
return resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.getPackageFragments(fqName)
|
||||
resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.collectPackageFragments(fqName, packageFragments)
|
||||
}
|
||||
|
||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
|
||||
|
||||
@@ -129,23 +129,28 @@ class LazyModuleDependencies<M : ModuleInfo>(
|
||||
firstDependency: M? = null,
|
||||
private val resolverForProject: AbstractResolverForProject<M>
|
||||
) : ModuleDependencies {
|
||||
|
||||
private val dependencies = storageManager.createLazyValue {
|
||||
|
||||
val moduleDescriptors = mutableSetOf<ModuleDescriptorImpl>()
|
||||
firstDependency?.let {
|
||||
moduleDescriptors.add(resolverForProject.descriptorForModule(it))
|
||||
}
|
||||
val moduleDescriptor = resolverForProject.descriptorForModule(module)
|
||||
sequence {
|
||||
if (firstDependency != null) {
|
||||
yield(resolverForProject.descriptorForModule(firstDependency))
|
||||
}
|
||||
if (module.dependencyOnBuiltIns() == ModuleInfo.DependencyOnBuiltIns.AFTER_SDK) {
|
||||
yield(moduleDescriptor.builtIns.builtInsModule)
|
||||
}
|
||||
for (dependency in module.dependencies()) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
yield(resolverForProject.descriptorForModule(dependency as M))
|
||||
}
|
||||
if (module.dependencyOnBuiltIns() == ModuleInfo.DependencyOnBuiltIns.LAST) {
|
||||
yield(moduleDescriptor.builtIns.builtInsModule)
|
||||
}
|
||||
}.toList()
|
||||
val dependencyOnBuiltIns = module.dependencyOnBuiltIns()
|
||||
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.AFTER_SDK) {
|
||||
moduleDescriptors.add(moduleDescriptor.builtIns.builtInsModule)
|
||||
}
|
||||
for (dependency in module.dependencies()) {
|
||||
if (dependency == firstDependency) continue
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
moduleDescriptors.add(resolverForProject.descriptorForModule(dependency as M))
|
||||
}
|
||||
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.LAST) {
|
||||
moduleDescriptors.add(moduleDescriptor.builtIns.builtInsModule)
|
||||
}
|
||||
moduleDescriptors.toList()
|
||||
}
|
||||
|
||||
override val allDependencies: List<ModuleDescriptorImpl> get() = dependencies()
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.resolve
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionUtilCore
|
||||
import com.intellij.psi.impl.source.DummyHolder
|
||||
import com.intellij.util.SmartList
|
||||
import org.jetbrains.kotlin.config.AnalysisFlags
|
||||
@@ -573,6 +574,9 @@ class QualifiedExpressionResolver(val languageVersionSettings: LanguageVersionSe
|
||||
context: ExpressionTypingContext
|
||||
): Qualifier? {
|
||||
val name = expression.getReferencedNameAsName()
|
||||
if (!expression.isPhysical && !name.isSpecial && name.asString().endsWith(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val location = KotlinLookupLocation(expression)
|
||||
val qualifierDescriptor = when (receiver) {
|
||||
|
||||
@@ -180,6 +180,16 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
||||
this.declarationProviderFactory = declarationProviderFactory;
|
||||
|
||||
this.packageFragmentProvider = new PackageFragmentProvider() {
|
||||
@Override
|
||||
public void collectPackageFragments(
|
||||
@NotNull FqName fqName, @NotNull Collection<PackageFragmentDescriptor> packageFragments
|
||||
) {
|
||||
LazyPackageDescriptor fragment = getPackageFragment(fqName);
|
||||
if (fragment != null) {
|
||||
packageFragments.add(fragment);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<PackageFragmentDescriptor> getPackageFragments(@NotNull FqName fqName) {
|
||||
|
||||
Reference in New Issue
Block a user