FIR IDE: extract completion groups to object

This commit is contained in:
Ilya Kirillov
2021-06-10 13:55:19 +02:00
committed by teamcityserver
parent 20f2e4f313
commit 0ebb9cc4a6
2 changed files with 85 additions and 64 deletions
@@ -0,0 +1,83 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.completion
import org.jetbrains.kotlin.idea.completion.context.*
import org.jetbrains.kotlin.idea.completion.contributors.FirCompletionContributorFactory
import org.jetbrains.kotlin.idea.completion.contributors.complete
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
internal object Completions {
fun KtAnalysisSession.complete(
factory: FirCompletionContributorFactory,
positionContext: FirRawPositionCompletionContext,
) {
when (positionContext) {
is FirExpressionNameReferencePositionContext -> {
complete(factory.keywordContributor(0), positionContext)
complete(factory.callableContributor(0), positionContext)
complete(factory.classifierContributor(0), positionContext)
complete(factory.packageCompletionContributor(1), positionContext)
}
is FirTypeNameReferencePositionContext -> {
complete(factory.classifierContributor(0), positionContext)
complete(factory.keywordContributor(1), positionContext)
complete(factory.packageCompletionContributor(2), positionContext)
}
is FirAnnotationTypeNameReferencePositionContext -> {
complete(factory.annotationsContributor(0), positionContext)
complete(factory.keywordContributor(1), positionContext)
complete(factory.packageCompletionContributor(2), positionContext)
}
is FirSuperTypeCallNameReferencePositionContext -> {
complete(factory.superEntryContributor(0), positionContext)
}
is FirImportDirectivePositionContext -> {
complete(factory.packageCompletionContributor(0), positionContext)
complete(factory.importDirectivePackageMembersContributor(0), positionContext)
}
is FirPackageDirectivePositionContext -> {
complete(factory.packageCompletionContributor(0), positionContext)
}
is FirTypeConstraintNameInWhereClausePositionContext -> {
complete(factory.typeParameterConstraintNameInWhereClauseContributor(0), positionContext)
}
is FirUnknownPositionContext -> {
complete(factory.keywordContributor(0), positionContext)
}
is FirClassifierNamePositionContext -> {
complete(factory.classifierNameContributor(0), positionContext)
}
is FirWithSubjectEntryPositionContext -> {
complete(factory.whenWithSubjectConditionContributor(0), positionContext)
}
is FirCallableReferencePositionContext -> {
complete(factory.classReferenceContributor(0), positionContext)
complete(factory.callableReferenceContributor(1), positionContext)
complete(factory.classifierReferenceContributor(1), positionContext)
}
is FirInfixCallPositionContext -> {
complete(factory.keywordContributor(0), positionContext)
complete(factory.infixCallableContributor(0), positionContext)
}
is FirIncorrectPositionContext -> {
// do nothing, completion is not supposed to be called here
}
}
}
}
@@ -77,70 +77,8 @@ private object KotlinFirCompletionProvider : CompletionProvider<CompletionParame
positionContext: FirRawPositionCompletionContext,
) {
val factory = FirCompletionContributorFactory(basicContext)
when (positionContext) {
is FirExpressionNameReferencePositionContext -> {
complete(factory.keywordContributor(1), positionContext)
complete(factory.callableContributor(1), positionContext)
complete(factory.classifierContributor(1), positionContext)
complete(factory.packageCompletionContributor(2), positionContext)
}
is FirTypeNameReferencePositionContext -> {
complete(factory.classifierContributor(0), positionContext)
complete(factory.keywordContributor(1), positionContext)
complete(factory.packageCompletionContributor(2), positionContext)
}
is FirAnnotationTypeNameReferencePositionContext -> {
complete(factory.annotationsContributor(0), positionContext)
complete(factory.keywordContributor(1), positionContext)
complete(factory.packageCompletionContributor(2), positionContext)
}
is FirSuperTypeCallNameReferencePositionContext -> {
complete(factory.superEntryContributor(0), positionContext)
}
is FirImportDirectivePositionContext -> {
complete(factory.packageCompletionContributor(0), positionContext)
complete(factory.importDirectivePackageMembersContributor(0), positionContext)
}
is FirPackageDirectivePositionContext -> {
complete(factory.packageCompletionContributor(0), positionContext)
}
is FirTypeConstraintNameInWhereClausePositionContext -> {
complete(factory.typeParameterConstraintNameInWhereClauseContributor(0), positionContext)
}
is FirUnknownPositionContext -> {
complete(factory.keywordContributor(0), positionContext)
}
is FirClassifierNamePositionContext -> {
complete(factory.classifierNameContributor(0), positionContext)
}
is FirWithSubjectEntryPositionContext -> {
complete(factory.whenWithSubjectConditionContributor(0), positionContext)
}
is FirCallableReferencePositionContext -> {
complete(factory.classReferenceContributor(0), positionContext)
complete(factory.callableReferenceContributor(1), positionContext)
complete(factory.classifierReferenceContributor(1), positionContext)
}
is FirInfixCallPositionContext -> {
complete(factory.keywordContributor(0), positionContext)
complete(factory.infixCallableContributor(0), positionContext)
}
is FirIncorrectPositionContext -> {
// do nothing, completion is not supposed to be called here
}
with(Completions) {
complete(factory, positionContext)
}
}