FIR IDE: add index helper to FirBasicCompletionContext

This commit is contained in:
Ilya Kirillov
2021-05-15 19:06:47 +02:00
committed by TeamCityServer
parent 6c9831f7d4
commit e03916e7fb
6 changed files with 28 additions and 15 deletions
@@ -38,10 +38,6 @@ private object KotlinFirCompletionProvider : CompletionProvider<CompletionParame
if (shouldSuppressCompletion(parameters, result.prefixMatcher)) return
val resultSet = createResultSet(parameters, result)
val indexHelper = IndexHelper(
parameters.position.project,
parameters.position.getModuleInfo().contentScope()
)
val basicContext = FirBasicCompletionContext.createFromParameters(parameters, resultSet) ?: return
recordOriginalFile(basicContext)
@@ -49,18 +45,18 @@ private object KotlinFirCompletionProvider : CompletionProvider<CompletionParame
val positionContext = FirPositionCompletionContextDetector.detect(basicContext)
FirPositionCompletionContextDetector.analyseInContext(basicContext, positionContext) {
complete(basicContext, positionContext, indexHelper)
complete(basicContext, positionContext)
}
}
private fun KtAnalysisSession.complete(
basicContext: FirBasicCompletionContext,
positionContext: FirRawPositionCompletionContext,
indexHelper: IndexHelper,
) {
val keywordContributor = FirKeywordCompletionContributor(basicContext)
val callableContributor = FirCallableCompletionContributor(basicContext, indexHelper)
val classifierContributor = FirClassifierCompletionContributor(basicContext, indexHelper)
val callableContributor = FirCallableCompletionContributor(basicContext)
val classifierContributor = FirClassifierCompletionContributor(basicContext)
when (positionContext) {
is FirExpressionNameReferencePositionContext -> {
@@ -9,7 +9,9 @@ import com.intellij.codeInsight.completion.CompletionParameters
import com.intellij.codeInsight.completion.CompletionResultSet
import com.intellij.codeInsight.completion.PrefixMatcher
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.idea.completion.KotlinFirLookupElementFactory
import org.jetbrains.kotlin.idea.fir.low.level.api.IndexHelper
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.KtFile
@@ -22,6 +24,7 @@ internal class FirBasicCompletionContext(
val fakeKtFile: KtFile,
val project: Project,
val targetPlatform: TargetPlatform,
val indexHelper: IndexHelper,
val lookupElementFactory: KotlinFirLookupElementFactory = KotlinFirLookupElementFactory(),
) {
companion object {
@@ -31,7 +34,22 @@ internal class FirBasicCompletionContext(
val fakeKtFile = parameters.position.containingFile as? KtFile ?: return null
val targetPlatform = TargetPlatformDetector.getPlatform(originalKtFile)
val project = originalKtFile.project
return FirBasicCompletionContext(parameters, result, prefixMatcher, originalKtFile, fakeKtFile, project, targetPlatform)
val indexHelper = createIndexHelper(parameters)
return FirBasicCompletionContext(
parameters,
result,
prefixMatcher,
originalKtFile,
fakeKtFile,
project,
targetPlatform,
indexHelper
)
}
private fun createIndexHelper(parameters: CompletionParameters) = IndexHelper(
parameters.position.project,
parameters.position.getModuleInfo().contentScope()
)
}
}
@@ -22,8 +22,7 @@ import org.jetbrains.kotlin.psi.KtExpression
internal class FirCallableCompletionContributor(
basicContext: FirBasicCompletionContext,
indexHelper: IndexHelper
) : FirContextCompletionContributorBase<FirNameReferencePositionContext>(basicContext, indexHelper) {
) : FirContextCompletionContributorBase<FirNameReferencePositionContext>(basicContext) {
private val typeNamesProvider = TypeNamesProvider(indexHelper)
private val shouldCompleteTopLevelCallablesFromIndex: Boolean
@@ -17,8 +17,7 @@ import org.jetbrains.kotlin.psi.KtEnumEntry
internal class FirClassifierCompletionContributor(
basicContext: FirBasicCompletionContext,
indexHelper: IndexHelper
) : FirContextCompletionContributorBase<FirNameReferenceRawPositionContext>(basicContext, indexHelper) {
) : FirContextCompletionContributorBase<FirNameReferenceRawPositionContext>(basicContext) {
override fun KtAnalysisSession.complete(positionContext: FirNameReferenceRawPositionContext) {
val implicitScopes = originalKtFile.getScopeContextForPosition(positionContext.nameExpression).scopes
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.idea.completion.KotlinFirLookupElementFactory
import org.jetbrains.kotlin.idea.completion.context.FirBasicCompletionContext
import org.jetbrains.kotlin.idea.completion.context.FirRawPositionCompletionContext
import org.jetbrains.kotlin.idea.completion.weighers.Weighers
import org.jetbrains.kotlin.idea.fir.low.level.api.IndexHelper
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol
@@ -29,6 +30,7 @@ internal abstract class FirCompletionContributorBase<C : FirRawPositionCompletio
protected val fakeKtFile: KtFile get() = basicContext.fakeKtFile
protected val project: Project get() = basicContext.project
protected val targetPlatform: TargetPlatform get() = basicContext.targetPlatform
protected val indexHelper: IndexHelper get() = basicContext.indexHelper
protected val lookupElementFactory: KotlinFirLookupElementFactory get() = basicContext.lookupElementFactory
abstract fun KtAnalysisSession.complete(positionContext: C)
@@ -13,8 +13,7 @@ import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
internal abstract class FirContextCompletionContributorBase<C : FirNameReferenceRawPositionContext>(
basicContext: FirBasicCompletionContext,
protected val indexHelper: IndexHelper
basicContext: FirBasicCompletionContext
) : FirCompletionContributorBase<C>(basicContext) {
protected val scopeNameFilter: KtScopeNameFilter =