PsiBasedClassResolver: get default imports without resolution facade
Using DefaultImportProvider is expensive in this scenario
This commit is contained in:
@@ -20,18 +20,20 @@ import com.intellij.psi.PsiClass
|
|||||||
import com.intellij.psi.PsiModifier
|
import com.intellij.psi.PsiModifier
|
||||||
import com.intellij.psi.search.PsiShortNamesCache
|
import com.intellij.psi.search.PsiShortNamesCache
|
||||||
import org.jetbrains.annotations.TestOnly
|
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.getNullableModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||||
import org.jetbrains.kotlin.idea.resolve.frontendService
|
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTypeAliasShortNameIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTypeAliasShortNameIndex
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||||
import org.jetbrains.kotlin.psi.KtUserType
|
import org.jetbrains.kotlin.psi.KtUserType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
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
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -157,12 +159,9 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName:
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file.getNullableModuleInfo() != null) { // it can be null in tests
|
for (importPath in file.getDefaultImports()) {
|
||||||
val defaultImportProvider = file.getResolutionFacade().frontendService<DefaultImportProvider>()
|
result = analyzeSingleImport(result, importPath.fqName, importPath.isAllUnder, importPath.alias?.asString())
|
||||||
for (importPath in defaultImportProvider.defaultImports) {
|
if (result == Result.Ambiguity) return null
|
||||||
result = analyzeSingleImport(result, importPath.fqName, importPath.isAllUnder, importPath.alias?.asString())
|
|
||||||
if (result == Result.Ambiguity) return null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (importDirective in file.importDirectives) {
|
for (importDirective in file.importDirectives) {
|
||||||
@@ -240,3 +239,11 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName:
|
|||||||
return Result.Ambiguity
|
return Result.Ambiguity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun KtFile.getDefaultImports(): List<ImportPath> {
|
||||||
|
val moduleInfo = getNullableModuleInfo() ?: return emptyList()
|
||||||
|
val versionSettings = LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo, project)
|
||||||
|
return TargetPlatformDetector.getPlatform(this).getDefaultImports(
|
||||||
|
versionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons)
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user