FIR IDE: add index helper to FirBasicCompletionContext
This commit is contained in:
committed by
TeamCityServer
parent
6c9831f7d4
commit
e03916e7fb
+4
-8
@@ -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 -> {
|
||||
|
||||
+19
-1
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -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
|
||||
|
||||
+1
-2
@@ -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
|
||||
|
||||
+2
@@ -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)
|
||||
|
||||
+1
-2
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user