From 10aa9c5910fc5cb8ba3ce05fa3ed2b3e9f6a397e Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 13 Apr 2017 16:26:00 +0300 Subject: [PATCH] PsiBasedClassResolver: get default imports without resolution facade Using DefaultImportProvider is expensive in this scenario --- .../idea/search/PsiBasedClassResolver.kt | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt index 3b7e49d46a3..be6849d69e9 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt @@ -20,18 +20,20 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiModifier import com.intellij.psi.search.PsiShortNamesCache import org.jetbrains.annotations.TestOnly +import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.caches.resolve.getNullableModuleInfo -import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.stubindex.KotlinTypeAliasShortNameIndex import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtAnnotationEntry +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtUserType import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.lazy.DefaultImportProvider +import org.jetbrains.kotlin.resolve.ImportPath import java.util.concurrent.atomic.AtomicInteger /** @@ -157,12 +159,9 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName: return null } - if (file.getNullableModuleInfo() != null) { // it can be null in tests - val defaultImportProvider = file.getResolutionFacade().frontendService() - for (importPath in defaultImportProvider.defaultImports) { - result = analyzeSingleImport(result, importPath.fqName, importPath.isAllUnder, importPath.alias?.asString()) - if (result == Result.Ambiguity) return null - } + for (importPath in file.getDefaultImports()) { + result = analyzeSingleImport(result, importPath.fqName, importPath.isAllUnder, importPath.alias?.asString()) + if (result == Result.Ambiguity) return null } for (importDirective in file.importDirectives) { @@ -240,3 +239,11 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName: return Result.Ambiguity } } + +private fun KtFile.getDefaultImports(): List { + val moduleInfo = getNullableModuleInfo() ?: return emptyList() + val versionSettings = LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo, project) + return TargetPlatformDetector.getPlatform(this).getDefaultImports( + versionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons) + ) +} \ No newline at end of file