From 0ebb9cc4a6d62cd9f1162596ecb0e275f0c5125c Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 10 Jun 2021 13:55:19 +0200 Subject: [PATCH] FIR IDE: extract completion groups to object --- .../kotlin/idea/completion/Completions.kt | 83 +++++++++++++++++++ .../KotlinFirCompletionContributor.kt | 66 +-------------- 2 files changed, 85 insertions(+), 64 deletions(-) create mode 100644 idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/Completions.kt diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/Completions.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/Completions.kt new file mode 100644 index 00000000000..d94bd722b1a --- /dev/null +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/Completions.kt @@ -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 + } + } + } +} \ No newline at end of file diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt index f888e521f2b..de238002634 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt @@ -77,70 +77,8 @@ private object KotlinFirCompletionProvider : CompletionProvider { - 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) } }