From 091db089ea1aa9fe50ebb7119a3531b239bfaf8a Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 29 Aug 2025 15:18:48 +0200 Subject: [PATCH] [kotlin] replace context receivers with context parameters for completion subsystem KT-78093 GitOrigin-RevId: 2a691e4f53b70cf7eb1c03779f9a0e369ad99380 --- plugins/kotlin/completion/api/BUILD.bazel | 2 +- .../completion/api/kotlin.completion.api.iml | 2 +- plugins/kotlin/completion/impl-k1/BUILD.bazel | 2 +- .../impl-k1/kotlin.completion.impl.k1.iml | 2 +- plugins/kotlin/completion/impl-k2/BUILD.bazel | 2 +- .../impl-k2/kotlin.completion.impl.k2.iml | 2 +- .../idea/completion/impl/k2/Completions.kt | 8 +- .../impl/k2/ImportStrategyDetector.kt | 6 +- .../completion/impl/k2/K2CompletionRunner.kt | 11 +-- .../checkers/CompletionVisibilityChecker.kt | 7 +- .../KtCompletionExtensionCandidateChecker.kt | 3 +- .../K2CallableCompletionContributor.kt | 86 +++++++++---------- .../K2ChainCompletionContributor.kt | 2 +- .../K2ClassifierCompletionContributor.kt | 22 +++-- ...eclarationFromUnresolvedNameContributor.kt | 10 ++- .../K2KDocParameterNameContributor.kt | 6 +- .../K2NamedArgumentCompletionContributor.kt | 4 +- .../K2SuperMemberCompletionContributor.kt | 14 +-- ...nParameterNameCompletionContributorBase.kt | 26 ++++-- ...ameterNameWithTypeCompletionContributor.kt | 14 +-- .../K2WhenWithSubjectConditionContributor.kt | 25 +++--- .../fir/FirActualDeclarationContributor.kt | 2 +- .../fir/FirCallableCompletionContributor.kt | 79 +++++++++-------- .../FirClassReferenceCompletionContributor.kt | 2 +- .../fir/FirClassifierCompletionContributor.kt | 24 ++++-- .../fir/FirCompletionContributor.kt | 2 +- .../fir/FirCompletionContributorBase.kt | 7 +- ...rationFromOverridableMembersContributor.kt | 2 +- ...eclarationFromUnresolvedNameContributor.kt | 12 ++- ...tivePackageMembersCompletionContributor.kt | 3 +- .../fir/FirKDocParameterNameContributor.kt | 8 +- .../fir/FirKeywordCompletionContributor.kt | 2 +- .../FirNamedArgumentCompletionContributor.kt | 6 +- .../FirOperatorNameCompletionContributor.kt | 2 +- .../fir/FirPackageCompletionContributor.kt | 3 +- ...FileClassifierNameCompletionContributor.kt | 2 +- .../fir/FirSuperEntryContributor.kt | 2 +- .../FirSuperMemberCompletionContributor.kt | 17 ++-- ...nParameterNameCompletionContributorBase.kt | 30 ++++--- ...tNameInWhereClauseCompletionContributor.kt | 3 +- ...ameterNameWithTypeCompletionContributor.kt | 17 ++-- .../FirWhenWithSubjectConditionContributor.kt | 28 +++--- .../helpers/CallableMetadataProvider.kt | 47 ++++++---- .../helpers/FirClassifierProvider.kt | 8 +- .../helpers/FirSuperEntriesProvider.kt | 3 +- .../helpers/ShadowedCallablesFilter.kt | 22 ++--- .../k2/contributors/helpers/symbolUtils.kt | 5 +- .../impl/k2/contributors/helpers/utils.kt | 25 ++++-- .../keywords/ActualKeywordHandler.kt | 12 +-- .../keywords/OverrideKeywordHandler.kt | 17 ++-- .../keywords/ReturnKeywordHandler.kt | 10 ++- .../keywords/SuperKeywordHandler.kt | 2 +- .../keywords/ThisKeywordHandler.kt | 9 +- .../completion/impl/k2/contributors/utils.kt | 5 +- .../TrailingLambdaInsertionHandler.kt | 6 +- .../k2/lookups/CallableInsertionOptions.kt | 2 +- .../lookups/CompletionShortNamesRenderer.kt | 17 ++-- .../impl/k2/lookups/TailTextProvider.kt | 16 ++-- .../impl/k2/lookups/TypeTextProvider.kt | 4 +- .../KotlinFirLookupElementFactory.kt | 17 ++-- .../NamedArgumentLookupElementFactory.kt | 2 +- .../factories/TypeLookupElementFactory.kt | 5 +- .../idea/completion/impl/k2/lookups/utils.kt | 11 ++- .../impl/k2/weighers/ClassifierWeigher.kt | 2 +- .../impl/k2/weighers/DeprecatedWeigher.kt | 3 +- .../impl/k2/weighers/ExpectedTypeWeigher.kt | 19 ++-- .../k2/weighers/K2SoftDeprecationWeigher.kt | 4 +- .../impl/k2/weighers/KindWeigher.kt | 2 +- .../impl/k2/weighers/NotImportedWeigher.kt | 2 +- .../PreferAbstractForOverrideWeigher.kt | 2 +- .../PreferContextualCallablesWeigher.kt | 2 +- .../weighers/PreferFewerParametersWeigher.kt | 2 +- .../PreferGetSetMethodsToPropertyWeigher.kt | 2 +- .../k2/weighers/PreferredSubtypeWeigher.kt | 6 +- .../k2/weighers/VariableOrFunctionWeigher.kt | 2 +- .../completion/impl/k2/weighers/Weighers.kt | 36 +++++--- .../factories/ClassLookupElementFactory.kt | 5 +- .../factories/FunctionLookupElementFactory.kt | 16 ++-- .../TypeParameterLookupElementFactory.kt | 2 +- .../factories/VariableLookupElementFactory.kt | 8 +- .../kotlin/completion/impl-shared/BUILD.bazel | 2 +- .../kotlin.completion.impl.shared.iml | 2 +- .../keywords/BreakContinueKeywordHanlder.kt | 11 ++- .../keywords/CompletionKeywordHandler.kt | 6 +- 84 files changed, 523 insertions(+), 367 deletions(-) diff --git a/plugins/kotlin/completion/api/BUILD.bazel b/plugins/kotlin/completion/api/BUILD.bazel index 7f658eae5e79..b46936190648 100644 --- a/plugins/kotlin/completion/api/BUILD.bazel +++ b/plugins/kotlin/completion/api/BUILD.bazel @@ -9,7 +9,7 @@ create_kotlinc_options( "org.jetbrains.kotlin.analysis.api.permissions.KaAllowProhibitedAnalyzeFromWriteAction", "org.jetbrains.kotlin.analysis.api.KaIdeApi", ], - x_context_receivers = True + x_context_parameters = True ) jvm_library( diff --git a/plugins/kotlin/completion/api/kotlin.completion.api.iml b/plugins/kotlin/completion/api/kotlin.completion.api.iml index 5818be696f76..607e23bd4caf 100644 --- a/plugins/kotlin/completion/api/kotlin.completion.api.iml +++ b/plugins/kotlin/completion/api/kotlin.completion.api.iml @@ -4,7 +4,7 @@ - diff --git a/plugins/kotlin/completion/impl-k1/BUILD.bazel b/plugins/kotlin/completion/impl-k1/BUILD.bazel index 451c78629f15..8edab2c6916e 100644 --- a/plugins/kotlin/completion/impl-k1/BUILD.bazel +++ b/plugins/kotlin/completion/impl-k1/BUILD.bazel @@ -9,7 +9,7 @@ create_kotlinc_options( "org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction", "org.jetbrains.kotlin.idea.base.util.K1ModeProjectStructureApi", ], - x_context_receivers = True + x_context_parameters = True ) jvm_library( diff --git a/plugins/kotlin/completion/impl-k1/kotlin.completion.impl.k1.iml b/plugins/kotlin/completion/impl-k1/kotlin.completion.impl.k1.iml index 8d9c8a79c4dc..f9cdcd46a9e2 100644 --- a/plugins/kotlin/completion/impl-k1/kotlin.completion.impl.k1.iml +++ b/plugins/kotlin/completion/impl-k1/kotlin.completion.impl.k1.iml @@ -4,7 +4,7 @@ - diff --git a/plugins/kotlin/completion/impl-k2/BUILD.bazel b/plugins/kotlin/completion/impl-k2/BUILD.bazel index 20dd856295b9..87016f0c755a 100644 --- a/plugins/kotlin/completion/impl-k2/BUILD.bazel +++ b/plugins/kotlin/completion/impl-k2/BUILD.bazel @@ -10,7 +10,7 @@ create_kotlinc_options( "org.jetbrains.kotlin.analysis.api.KaIdeApi", "org.jetbrains.kotlin.analysis.api.KaContextParameterApi", ], - x_context_receivers = True + x_context_parameters = True ) jvm_resources( diff --git a/plugins/kotlin/completion/impl-k2/kotlin.completion.impl.k2.iml b/plugins/kotlin/completion/impl-k2/kotlin.completion.impl.k2.iml index 08b8afbb76f8..4774cd767bfb 100644 --- a/plugins/kotlin/completion/impl-k2/kotlin.completion.impl.k2.iml +++ b/plugins/kotlin/completion/impl-k2/kotlin.completion.impl.k2.iml @@ -4,7 +4,7 @@ - diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/Completions.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/Completions.kt index c637e6ea47d8..2ae57bc70229 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/Completions.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/Completions.kt @@ -9,6 +9,8 @@ import com.intellij.psi.PsiErrorElement import org.jetbrains.kotlin.analysis.api.KaImplementationDetail import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze +import org.jetbrains.kotlin.analysis.api.components.resolveToCall +import org.jetbrains.kotlin.analysis.api.components.resolveToCallCandidates import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic import org.jetbrains.kotlin.analysis.api.resolution.KaApplicableCallCandidateInfo import org.jetbrains.kotlin.analysis.api.resolution.KaFunctionCall @@ -170,7 +172,7 @@ internal object Completions { sink.addedElementCount > 0 } - context(KaSession) + context(_: KaSession) private fun completeSequentially( positionContext: KotlinRawPositionContext, sink: LookupElementSink, @@ -428,7 +430,7 @@ internal fun KotlinUnknownPositionContext.isAfterRangeToken(): Boolean { * @return `true` if the context is after a double dot (`..`) not associated with a `rangeTo` operation, * otherwise `false`. */ -context(KaSession) +context(_: KaSession) internal fun KotlinRawPositionContext.isAfterRangeOperator(): Boolean { if (this !is KotlinExpressionNameReferencePositionContext) return false val binaryExpression = nameExpression.parent as? KtBinaryExpression @@ -446,7 +448,7 @@ internal fun KotlinRawPositionContext.isAfterRangeOperator(): Boolean { } } -context(KaSession) +context(_: KaSession) internal fun KotlinRawPositionContext.allowsOnlyNamedArguments(): Boolean { if (this !is KotlinExpressionNameReferencePositionContext) return false if (explicitReceiver != null) return false diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/ImportStrategyDetector.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/ImportStrategyDetector.kt index 9033d484eeb6..e5184b5016cc 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/ImportStrategyDetector.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/ImportStrategyDetector.kt @@ -4,6 +4,8 @@ package org.jetbrains.kotlin.idea.completion.impl.k2 import com.intellij.openapi.project.Project import org.jetbrains.annotations.ApiStatus import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.containingSymbol +import org.jetbrains.kotlin.analysis.api.components.fakeOverrideOriginal import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.idea.base.analysis.api.utils.getDefaultImports import org.jetbrains.kotlin.idea.base.util.isImported @@ -25,7 +27,7 @@ class ImportStrategyDetector(originalKtFile: KtFile, project: Project) { } - context(KaSession) + context(_: KaSession) fun detectImportStrategyForCallableSymbol(symbol: KaCallableSymbol, isFunctionalVariableCall: Boolean = false): ImportStrategy { val hasStablePath = when ((symbol.fakeOverrideOriginal.containingSymbol as? KaClassSymbol)?.classKind) { KaClassKind.ENUM_CLASS, @@ -45,7 +47,7 @@ class ImportStrategyDetector(originalKtFile: KtFile, project: Project) { } } - context (KaSession) + context (_: KaSession) fun detectImportStrategyForClassifierSymbol(symbol: KaClassifierSymbol): ImportStrategy { if (symbol !is KaClassLikeSymbol) return ImportStrategy.DoNothing diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/K2CompletionRunner.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/K2CompletionRunner.kt index cf9a680f7715..d31f07f072d0 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/K2CompletionRunner.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/K2CompletionRunner.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.KaImplementationDetail import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.components.KaCompletionExtensionCandidateChecker +import org.jetbrains.kotlin.analysis.api.components.expectedType import org.jetbrains.kotlin.analysis.api.impl.base.components.KaBaseIllegalPsiException import org.jetbrains.kotlin.idea.base.analysis.api.utils.KtSymbolFromIndexProvider import org.jetbrains.kotlin.idea.completion.KotlinFirCompletionParameters @@ -143,7 +144,7 @@ internal interface K2CompletionRunner { } } -context(KaSession) +context(_: KaSession) private fun createWeighingContext( positionContext: KotlinRawPositionContext, parameters: KotlinFirCompletionParameters @@ -174,7 +175,7 @@ private fun createWeighingContext( } } -context(KaSession) +context(_: KaSession) private fun createExtensionChecker( positionContext: KotlinRawPositionContext, originalFile: KtFile, @@ -273,12 +274,12 @@ private class SharedPriorityQueue

>( fun createLocalInstance(): LocalInstance = LocalInstance() } -context(KaSession) +context(session: KaSession) private fun

K2CompletionSection

.executeIfAllowed(context: K2CompletionSectionContext

) { with(contributor) { - if (!this@KaSession.shouldExecute(context)) return + if (!session.shouldExecute(context)) return } - runnable(this@KaSession, context) + runnable(session, context) } /** diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/CompletionVisibilityChecker.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/CompletionVisibilityChecker.kt index 4b7b7faeb730..d44599cd5ef3 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/CompletionVisibilityChecker.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/CompletionVisibilityChecker.kt @@ -5,9 +5,12 @@ package org.jetbrains.kotlin.idea.completion.checkers import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaUseSiteVisibilityChecker +import org.jetbrains.kotlin.analysis.api.components.createUseSiteVisibilityChecker +import org.jetbrains.kotlin.analysis.api.components.deprecationStatus import org.jetbrains.kotlin.analysis.api.permissions.forbidAnalysis import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaDeclarationSymbol +import org.jetbrains.kotlin.analysis.api.symbols.symbol import org.jetbrains.kotlin.idea.base.projectStructure.getKaModule import org.jetbrains.kotlin.idea.base.util.isJavaClassNotToBeUsedInKotlin import org.jetbrains.kotlin.idea.completion.KotlinFirCompletionParameters @@ -68,7 +71,7 @@ internal class CompletionVisibilityChecker( declarationModule in useSiteModule.directFriendDependencies } - context(KaSession) + context(_: KaSession) fun isVisible( symbol: KaDeclarationSymbol, positionContext: KotlinRawPositionContext, @@ -92,7 +95,7 @@ internal class CompletionVisibilityChecker( return getCachedVisibilityChecker(positionContext).isVisible(symbol) } - context(KaSession) + context(_: KaSession) private fun getCachedVisibilityChecker(positionContext: KotlinRawPositionContext): KaUseSiteVisibilityChecker { return visibilityCheckerPerPositionContextCache.getOrPut(positionContext) { createUseSiteVisibilityChecker( diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/KtCompletionExtensionCandidateChecker.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/KtCompletionExtensionCandidateChecker.kt index 65f30e9307b7..5edf72794ec0 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/KtCompletionExtensionCandidateChecker.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/checkers/KtCompletionExtensionCandidateChecker.kt @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.analysis.api.KaImplementationDetail import org.jetbrains.kotlin.analysis.api.components.KaCompletionCandidateChecker import org.jetbrains.kotlin.analysis.api.components.KaCompletionExtensionCandidateChecker import org.jetbrains.kotlin.analysis.api.components.KaExtensionApplicabilityResult +import org.jetbrains.kotlin.analysis.api.components.createExtensionCandidateChecker import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeToken import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol import org.jetbrains.kotlin.psi.KtExpression @@ -41,7 +42,7 @@ internal class KtCompletionExtensionCandidateChecker private constructor( companion object { - context(KaCompletionCandidateChecker) + context(_: KaCompletionCandidateChecker) fun create( originalFile: KtFile, nameExpression: KtSimpleNameExpression, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2CallableCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2CallableCompletionContributor.kt index 51f4675dcacf..058ad1a8a032 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2CallableCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2CallableCompletionContributor.kt @@ -62,7 +62,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, signature: KaCallableSignature<*>, @@ -80,13 +80,13 @@ internal abstract class K2AbstractCallableCompletionContributor

CallableInsertionStrategy.AsIdentifier } - context(KaSession) + context(_: KaSession) @KaExperimentalApi protected open fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy? = CallableInsertionStrategy.AsCall - context(KaSession) + context(_: KaSession) private fun getOptions( context: K2CompletionSectionContext

, signature: KaCallableSignature<*>, @@ -96,7 +96,7 @@ internal abstract class K2AbstractCallableCompletionContributor

.isWithTrailingLambda(): Boolean = positionContext is KotlinExpressionNameReferencePositionContext - context(KaSession) + context(_: KaSession) private fun Sequence.createFilteredLookupElements( context: K2CompletionSectionContext

, shadowedCallablesFilter: ShadowedCallablesFilter @@ -165,7 +165,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter, @@ -181,7 +181,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, @@ -197,7 +197,7 @@ internal abstract class K2AbstractCallableCompletionContributor

): Sequence = sequence { @@ -230,7 +230,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter, @@ -247,7 +247,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, scopeContext: KaScopeContext, @@ -281,7 +281,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, explicitReceiver: KtElement, @@ -313,7 +313,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, packageSymbol: KaPackageSymbol, @@ -334,7 +334,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, @@ -374,7 +374,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, typesOfPossibleReceiver: List, @@ -406,7 +406,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, typesOfPossibleReceiver: List, @@ -417,7 +417,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, symbol: KaNamedClassSymbol, @@ -446,7 +446,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, receiverTypes: List, @@ -472,7 +472,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, scopeContext: KaScopeContext, @@ -504,7 +504,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, scope: KaScope, @@ -515,7 +515,7 @@ internal abstract class K2AbstractCallableCompletionContributor

checkApplicabilityAndSubstitute(context, callable) } - context(KaSession) + context(_: KaSession) protected fun createApplicableExtension( signature: KaCallableSignature<*>, importingStrategy: ImportStrategy, @@ -529,7 +529,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, @@ -571,7 +571,7 @@ internal abstract class K2AbstractCallableCompletionContributor

.getJavaGetterSignatureIfNotProperty(): KaCallableSignature<*>? { if (this !is KaVariableSignature<*>) return null @@ -587,7 +587,7 @@ internal abstract class K2AbstractCallableCompletionContributor

.createCallableWithMetadata( context: K2CompletionSectionContext

, scopeKind: KaScopeKind, @@ -652,7 +652,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter @@ -675,7 +675,7 @@ internal abstract class K2AbstractCallableCompletionContributor

.filterIfInsideAnnotationEntryArgument( position: PsiElement, expectedType: KaType?, @@ -702,15 +702,15 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter, @@ -750,7 +750,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter, @@ -772,7 +772,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter, @@ -805,7 +805,7 @@ internal abstract class K2AbstractCallableCompletionContributor

, shadowedCallablesFilter: ShadowedCallablesFilter, @@ -903,7 +903,7 @@ internal class K2CallableCompletionContributor : K2AbstractCallableCompletionCon return !context.positionContext.isAfterRangeOperator() && !context.positionContext.allowsOnlyNamedArguments() } - context(KaSession) + context(_: KaSession) override fun createChainedLookupElements( context: K2CompletionSectionContext, receiverExpression: KtDotQualifiedExpression, @@ -935,7 +935,7 @@ internal class K2CallableReferenceCompletionContributor : K2AbstractCallableComp ) { override fun K2CompletionSectionContext.getGroupPriority(): Int = 1 - context(KaSession) + context(_: KaSession) override fun getImportStrategy( context: K2CompletionSectionContext, signature: KaCallableSignature<*>, @@ -949,13 +949,13 @@ internal class K2CallableReferenceCompletionContributor : K2AbstractCallableComp override fun getInsertionStrategy(signature: KaCallableSignature<*>): CallableInsertionStrategy = CallableInsertionStrategy.AsIdentifier - context(KaSession) + context(_: KaSession) @KaExperimentalApi override fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy? = null - context(KaSession) + context(_: KaSession) override fun filter(symbol: KaCallableSymbol): Boolean = when { // References to elements which are members and extensions at the same time are not allowed symbol.isExtension && symbol.location == KaSymbolLocation.CLASS -> false @@ -970,7 +970,7 @@ internal class K2CallableReferenceCompletionContributor : K2AbstractCallableComp } - context(KaSession) + context(_: KaSession) override fun collectDotCompletionFromLocalScope( context: K2CompletionSectionContext, scopeContext: KaScopeContext, @@ -1010,13 +1010,13 @@ internal class K2InfixCallableCompletionContributor : K2AbstractCallableCompleti override fun getInsertionStrategy(signature: KaCallableSignature<*>): CallableInsertionStrategy = CallableInsertionStrategy.InfixCallableInsertionStrategy - context(KaSession) + context(_: KaSession) @KaExperimentalApi override fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy? = null - context(KaSession) + context(_: KaSession) override fun filter(symbol: KaCallableSymbol): Boolean = symbol is KaNamedFunctionSymbol && symbol.isInfix @@ -1033,13 +1033,13 @@ internal class K2KDocCallableCompletionContributor : K2AbstractCallableCompletio /** * Is not used directly, @see [checkApplicabilityAndSubstitute]. */ - context(KaSession) + context(_: KaSession) @KaExperimentalApi override fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy = throw RuntimeException("Should not be used directly") - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) override fun checkApplicabilityAndSubstitute( context: K2CompletionSectionContext, @@ -1051,14 +1051,14 @@ internal class K2KDocCallableCompletionContributor : K2AbstractCallableCompletio } // No dot completion from index necessary for KDocs - context(KaSession) + context(_: KaSession) override fun collectDotCompletionFromIndex( context: K2CompletionSectionContext, explicitReceiver: KtElement, showReceiver: Boolean ): Sequence = emptySequence() - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) override fun collectDotCompletionFromLocalScope( context: K2CompletionSectionContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ChainCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ChainCompletionContributor.kt index 85cf832bf2e0..0a67a5af577a 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ChainCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ChainCompletionContributor.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.idea.util.positionContext.KotlinExpressionNameRefere import org.jetbrains.kotlin.psi.KtDotQualifiedExpression internal interface K2ChainCompletionContributor { - context(KaSession) + context(_: KaSession) fun createChainedLookupElements( context: K2CompletionSectionContext, receiverExpression: KtDotQualifiedExpression, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ClassifierCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ClassifierCompletionContributor.kt index a8c25066f588..3aa5f5d1f93b 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ClassifierCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2ClassifierCompletionContributor.kt @@ -14,6 +14,12 @@ import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.components.KaScopeWithKind import org.jetbrains.kotlin.analysis.api.components.ShortenCommand +import org.jetbrains.kotlin.analysis.api.components.containingSymbol +import org.jetbrains.kotlin.analysis.api.components.defaultType +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf +import org.jetbrains.kotlin.analysis.api.components.memberScope +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbols +import org.jetbrains.kotlin.analysis.api.components.staticDeclaredMemberScope import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.analysis.api.types.KaType @@ -43,7 +49,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< KotlinNameReferencePositionContext::class ), K2ChainCompletionContributor { - context(KaSession) + context(_: KaSession) private fun filterClassifiers( context: K2CompletionSectionContext, classifierSymbol: KaClassifierSymbol @@ -68,7 +74,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< } } - context(KaSession) + context(_: KaSession) private fun getImportingStrategy( context: K2CompletionContext, importStrategyDetector: ImportStrategyDetector, @@ -107,7 +113,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< return !context.positionContext.isAfterRangeOperator() && !context.positionContext.allowsOnlyNamedArguments() } - context(KaSession) + context(_: KaSession) private fun KaScopeWithKind.completeClassifiers( context: K2CompletionSectionContext, visibilityChecker: CompletionVisibilityChecker, @@ -116,7 +122,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< .filter { filterClassifiers(context, it) } .filter { visibilityChecker.isVisible(it, context.positionContext) } - context(KaSession) + context(_: KaSession) private fun completeWithoutReceiverFromScopes( sectionContext: K2CompletionSectionContext ) { @@ -174,7 +180,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< scopeClassifiers.forEach { sectionContext.addElement(it) } } - context(KaSession) + context(_: KaSession) private fun completeWithoutReceiverFromIndex( sectionContext: K2CompletionSectionContext ) { @@ -213,7 +219,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< indexClassifiers.forEach { sectionContext.addElement(it) } } - context(KaSession) + context(_: KaSession) private fun completeWithReceiver( explicitReceiver: KtElement, sectionContext: K2CompletionSectionContext @@ -241,7 +247,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< } } - context(KaSession) + context(_: KaSession) override fun createChainedLookupElements( context: K2CompletionSectionContext, receiverExpression: KtDotQualifiedExpression, @@ -266,7 +272,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor< }.map { it.withPresentableText(selectorExpression.text + "." + it.lookupString) } } - context(KaSession) + context(_: KaSession) private fun createClassifierLookupElement( classifierSymbol: KaClassifierSymbol, positionContext: KotlinNameReferencePositionContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2DeclarationFromUnresolvedNameContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2DeclarationFromUnresolvedNameContributor.kt index 12e160c31146..d45ded40486f 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2DeclarationFromUnresolvedNameContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2DeclarationFromUnresolvedNameContributor.kt @@ -5,6 +5,10 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.openapi.progress.ProgressManager import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.collectImplicitReceiverTypes +import org.jetbrains.kotlin.analysis.api.components.dispatchReceiverType +import org.jetbrains.kotlin.analysis.api.components.expressionType +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.idea.completion.ItemPriority @@ -43,7 +47,7 @@ internal class K2DeclarationFromUnresolvedNameContributor : K2SimpleCompletionCo } } - context(KaSession) + context(_: KaSession) private fun processReference( context: K2CompletionSectionContext, referenceScope: KtElement, @@ -68,7 +72,7 @@ internal class K2DeclarationFromUnresolvedNameContributor : K2SimpleCompletionCo } } - context(KaSession) + context(_: KaSession) private fun shouldOfferCompletion(unresolvedRef: KtNameReferenceExpression, currentDeclaration: KtNamedDeclaration): Boolean { val refExprParent = unresolvedRef.parent val receiver = if (refExprParent is KtCallExpression) { @@ -116,7 +120,7 @@ internal class K2DeclarationFromUnresolvedNameContributor : K2SimpleCompletionCo return qualifiedExpression.receiverExpression } - context(KaSession) + context(_: KaSession) private fun getReceiverType(symbol: KaCallableSymbol): KaType? { return symbol.receiverType ?: (symbol as? KaCallableSymbol)?.dispatchReceiverType } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2KDocParameterNameContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2KDocParameterNameContributor.kt index 72d2c2743dfa..6d486170d4c9 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2KDocParameterNameContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2KDocParameterNameContributor.kt @@ -4,6 +4,8 @@ package org.jetbrains.kotlin.idea.completion.impl.k2.contributors import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.asSignature +import org.jetbrains.kotlin.analysis.api.components.declaredMemberScope import org.jetbrains.kotlin.analysis.api.symbols.KaDeclarationSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol @@ -44,7 +46,7 @@ internal class K2KDocParameterNameContributor : K2SimpleCompletionContributor, declarationSymbol: KaDeclarationSymbol, @@ -70,7 +72,7 @@ internal class K2KDocParameterNameContributor : K2SimpleCompletionContributor emptySequence() } - context(KaSession) + context(_: KaSession) private fun getParametersForKDoc( ownerDeclarationSymbol: KaDeclarationSymbol ): Sequence = sequence { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2NamedArgumentCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2NamedArgumentCompletionContributor.kt index c68908ae0dd6..32e5fe1d2fc1 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2NamedArgumentCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2NamedArgumentCompletionContributor.kt @@ -99,7 +99,7 @@ internal class K2NamedArgumentCompletionContributor : K2SimpleCompletionContribu val indexedTypes: List> ) - context(KaSession) + context(_: KaSession) private fun collectNamedArgumentInfos( callElement: KtCallElement, argumentsBeforeCurrent: List, @@ -117,7 +117,7 @@ internal class K2NamedArgumentCompletionContributor : K2SimpleCompletionContribu } } - context(KaSession) + context(_: KaSession) private fun collectNotUsedIndexedParameterCandidates( callElement: KtCallElement, candidate: KaFunctionCall<*>, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2SuperMemberCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2SuperMemberCompletionContributor.kt index 9afd00c4e1f2..efa1f74306e3 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2SuperMemberCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2SuperMemberCompletionContributor.kt @@ -5,6 +5,7 @@ import com.intellij.codeInsight.lookup.LookupElement import com.intellij.psi.util.parentsOfType import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.allOverriddenSymbols import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeOwner import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion @@ -12,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolModality +import org.jetbrains.kotlin.analysis.api.symbols.symbol import org.jetbrains.kotlin.analysis.api.types.KaIntersectionType import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.analysis.api.types.KaUsualClassType @@ -82,7 +84,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo ).forEach { context.addElement(it) } } - context(KaSession) + context(_: KaSession) private fun getSymbolsAndNamesNeedDisambiguation( context: K2CompletionSectionContext, superTypes: List, @@ -118,7 +120,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo return Pair(allSymbols, nameNeedDisambiguation) } - context(KaSession) + context(_: KaSession) private fun getNonExtensionsMemberSymbols( context: K2CompletionSectionContext, receiverType: KaType, @@ -135,7 +137,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo ) } - context(KaSession) + context(_: KaSession) private fun collectCallToSuperMember( context: K2CompletionSectionContext, callableInfo: CallableInfo, @@ -161,13 +163,13 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo ) } - context(KaSession) + context(_: KaSession) private fun getInsertionStrategy(signature: KaCallableSignature<*>): CallableInsertionStrategy = when (signature) { is KaFunctionSignature<*> -> CallableInsertionStrategy.AsCall else -> CallableInsertionStrategy.AsIdentifier } - context(KaSession) + context(_: KaSession) private fun collectDelegateCallToSuperMember( context: K2CompletionSectionContext, superReceiver: KtSuperExpression, @@ -245,7 +247,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo } } - context(KaSession) + context(_: KaSession) private fun wrapWithDisambiguationIfNeeded( insertionStrategy: CallableInsertionStrategy, superType: KaType, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2TrailingFunctionParameterNameCompletionContributorBase.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2TrailingFunctionParameterNameCompletionContributorBase.kt index db502552c608..0e1ec3212e18 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2TrailingFunctionParameterNameCompletionContributorBase.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2TrailingFunctionParameterNameCompletionContributorBase.kt @@ -17,6 +17,15 @@ import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaCompletionCandidateChecker import org.jetbrains.kotlin.analysis.api.components.KaCompletionExtensionCandidateChecker import org.jetbrains.kotlin.analysis.api.components.KaExtensionApplicabilityResult +import org.jetbrains.kotlin.analysis.api.components.canBeAnalysed +import org.jetbrains.kotlin.analysis.api.components.createSubstitutor +import org.jetbrains.kotlin.analysis.api.components.expandedSymbol +import org.jetbrains.kotlin.analysis.api.components.isSubClassOf +import org.jetbrains.kotlin.analysis.api.components.lowerBoundIfFlexible +import org.jetbrains.kotlin.analysis.api.components.memberScope +import org.jetbrains.kotlin.analysis.api.components.render +import org.jetbrains.kotlin.analysis.api.components.resolveToCallCandidates +import org.jetbrains.kotlin.analysis.api.components.substitute import org.jetbrains.kotlin.analysis.api.impl.base.components.KaBaseIllegalPsiException import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnnotationsFilter import org.jetbrains.kotlin.analysis.api.renderer.types.KaTypeRenderer @@ -26,6 +35,7 @@ import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaNamedFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolVisibility +import org.jetbrains.kotlin.analysis.api.symbols.findClass import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.builtins.StandardNames @@ -111,7 +121,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase

, @@ -149,7 +159,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase

, trailingFunctionDescriptor: TrailingFunctionDescriptor, @@ -178,7 +188,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase

, trailingFunctionDescriptor: TrailingFunctionDescriptor, @@ -282,7 +292,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase

> by ListSerializer(KotlinFqNameSerializer) } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun KaNamedClassSymbol.getSignatures( context: K2CompletionSectionContext<*>, @@ -315,7 +325,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase

, receiverTypes: List, @@ -397,7 +407,7 @@ data class ChainedInsertHandler( } } -context(KaSession) +context(_: KaSession) private fun createCompoundLookupElement( suggestedNames: Collection>, isDestructuring: Boolean = false, @@ -436,7 +446,7 @@ internal data class CompoundInsertionHandler( } } -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) private val KaType.text: String get() = render( @@ -444,7 +454,7 @@ private val KaType.text: String position = Variance.INVARIANT, ) -context(KaCompletionCandidateChecker) +context(_: KaCompletionCandidateChecker) private fun createExtensionCandidateChecker( bodyExpression: KtBlockExpression, ): KtCompletionExtensionCandidateChecker? { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2VariableOrParameterNameWithTypeCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2VariableOrParameterNameWithTypeCompletionContributor.kt index cf399c1cb872..3f0d3eac082b 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2VariableOrParameterNameWithTypeCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2VariableOrParameterNameWithTypeCompletionContributor.kt @@ -10,6 +10,8 @@ import com.intellij.psi.codeStyle.NameUtil import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeContext import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.compositeScope +import org.jetbrains.kotlin.analysis.api.components.returnType import org.jetbrains.kotlin.analysis.api.scopes.KaScope import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol @@ -82,7 +84,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple } } - context(KaSession) + context(_: KaSession) private fun completeFromParametersInFile( context: K2CompletionSectionContext, variableOrParameter: KtCallableDeclaration, @@ -141,7 +143,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple } } - context(KaSession) + context(_: KaSession) private fun completeClassesFromScopeContext( context: K2CompletionSectionContext, variableOrParameter: KtCallableDeclaration, @@ -169,7 +171,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple } } - context(KaSession) + context(_: KaSession) private fun completeClassesFromIndices( context: K2CompletionSectionContext, variableOrParameter: KtCallableDeclaration, @@ -196,7 +198,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple } } - context(KaSession) + context(_: KaSession) private fun addSuggestions( context: K2CompletionSectionContext, variableOrParameter: KtCallableDeclaration, @@ -297,7 +299,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple } } - context(KaSession) + context(_: KaSession) private fun getAvailableTypeParameters(scopes: KaScope): Sequence = scopes.classifiers.filterIsInstance() @@ -305,7 +307,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple return (typeReference.parent as? KtCallableDeclaration)?.takeIf { it.receiverTypeReference == typeReference } } - context(KaSession) + context(_: KaSession) private fun typeIsVisible( context: K2CompletionSectionContext, type: KaType, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2WhenWithSubjectConditionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2WhenWithSubjectConditionContributor.kt index 600ff536c7f6..741838e39c49 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2WhenWithSubjectConditionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/K2WhenWithSubjectConditionContributor.kt @@ -15,6 +15,11 @@ import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.isNullable +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbol +import org.jetbrains.kotlin.analysis.api.components.scopeContext +import org.jetbrains.kotlin.analysis.api.components.sealedClassInheritors +import org.jetbrains.kotlin.analysis.api.components.staticDeclaredMemberScope import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol import org.jetbrains.kotlin.analysis.api.types.KaClassType @@ -124,13 +129,13 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib } } - context(KaSession) + context(_: KaSession) private fun getClassSymbol(subjectType: KaType): KaNamedClassSymbol? { val classType = subjectType as? KaClassType return classType?.symbol as? KaNamedClassSymbol } - context(KaSession) + context(_: KaSession) private fun createNullBranchLookupElement( context: WeighingContext, type: KaType?, @@ -141,7 +146,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib .applyWeighs(context) } - context(KaSession) + context(_: KaSession) private fun completeAllTypes( context: K2CompletionSectionContext, whenCondition: KtWhenCondition, @@ -194,7 +199,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib } } - context(KaSession) + context(_: KaSession) private fun isPrefixNeeded(context: K2CompletionSectionContext<*>, symbol: KaNamedSymbol): Boolean { return when (symbol) { is KaAnonymousObjectSymbol -> return false @@ -208,7 +213,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib } } - context(KaSession) + context(_: KaSession) private fun completeSubClassesOfSealedClass( context: K2CompletionSectionContext, classSymbol: KaNamedClassSymbol, @@ -246,7 +251,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib } } - context(KaSession) + context(_: KaSession) private fun getHandledClassIds(conditions: List): Set = conditions.mapNotNullTo(hashSetOf()) { condition -> val reference = when (condition) { @@ -258,7 +263,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib resolvesTo?.classId } - context(KaSession) + context(_: KaSession) private fun getAllSealedInheritors(classSymbol: KaNamedClassSymbol): Collection { fun getAllSealedInheritorsTo( @@ -277,7 +282,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib .apply { getAllSealedInheritorsTo(classSymbol, this) } } - context(KaSession) + context(_: KaSession) private fun createElseBranchLookupElement( context: WeighingContext, whenCondition: KtWhenCondition, @@ -293,7 +298,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib } - context(KaSession) + context(_: KaSession) private fun completeEnumEntries( context: K2CompletionSectionContext, classSymbol: KaNamedClassSymbol, @@ -327,7 +332,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib return entry.conditions.size == 1 } - context(KaSession) + context(_: KaSession) private fun createLookupElement( context: K2CompletionSectionContext<*>, lookupString: String, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirActualDeclarationContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirActualDeclarationContributor.kt index 1cb780758caa..b32054ce8f79 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirActualDeclarationContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirActualDeclarationContributor.kt @@ -33,7 +33,7 @@ internal class FirActualDeclarationContributor( priority: Int, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinRawPositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCallableCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCallableCompletionContributor.kt index 82b05c0d045a..65e3fc183b7f 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCallableCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCallableCompletionContributor.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.analysis.api.signatures.KaVariableSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KaErrorType import org.jetbrains.kotlin.analysis.api.types.KaType -import org.jetbrains.kotlin.analysis.api.types.KaTypeNullability import org.jetbrains.kotlin.analysis.api.types.symbol import org.jetbrains.kotlin.idea.base.analysis.api.utils.* import org.jetbrains.kotlin.idea.base.psi.isInsideAnnotationEntryArgumentList @@ -64,7 +63,7 @@ internal open class FirCallableCompletionContributor( ) : FirCompletionContributorBase(sink, priority), ChainCompletionContributor { - context(KaSession) + context(_: KaSession) protected open fun getImportStrategy(signature: KaCallableSignature<*>, isImportDefinitelyNotRequired: Boolean): ImportStrategy = if (isImportDefinitelyNotRequired) { ImportStrategy.DoNothing @@ -78,13 +77,13 @@ internal open class FirCallableCompletionContributor( else -> CallableInsertionStrategy.AsIdentifier } - context(KaSession) + context(_: KaSession) @KaExperimentalApi protected open fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy? = CallableInsertionStrategy.AsCall - context(KaSession) + context(_: KaSession) private fun getOptions( signature: KaCallableSignature<*>, isImportDefinitelyNotRequired: Boolean = false @@ -93,7 +92,7 @@ internal open class FirCallableCompletionContributor( getInsertionStrategy(signature) ) - context(KaSession) + context(_: KaSession) protected open fun filter(symbol: KaCallableSymbol): Boolean = !symbol.isIgnoredExpectDeclaration() // todo replace with a sealed hierarchy; too many arguments @@ -125,7 +124,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinNameReferencePositionContext, weighingContext: WeighingContext, @@ -179,13 +178,13 @@ internal open class FirCallableCompletionContributor( }.forEach(sink::addElement) } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun completeExpectedEnumEntries( expectedType: KaType?, ): Sequence { val expectedEnumType = expectedType?.takeUnless { it is KaErrorType } - ?.withNullability(KaTypeNullability.NON_NULLABLE) + ?.withNullability(false) ?.takeIf { it.isEnum() } val enumClass = expectedEnumType?.symbol?.psi @@ -202,7 +201,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun createAndFilterMetadataForMemberCallables( callables: Sequence, @@ -218,7 +217,7 @@ internal open class FirCallableCompletionContributor( ) } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun completeWithoutReceiver( positionContext: KotlinNameReferencePositionContext, @@ -289,7 +288,7 @@ internal open class FirCallableCompletionContributor( val invocationCount = parameters.invocationCount val expectedType = expectedType?.takeUnless { it is KaErrorType } - ?.withNullability(KaTypeNullability.NON_NULLABLE) + ?.withNullability(false) ?.takeIf { it.isEnum() } yieldAll(sequence { @@ -298,7 +297,7 @@ internal open class FirCallableCompletionContributor( else if (expectedType != null) { enumEntry -> visibilityChecker.canBeVisible(enumEntry) && enumEntry.returnType - .withNullability(KaTypeNullability.NON_NULLABLE) + .withNullability(false) .semanticallyEquals(expectedType) } else return@sequence @@ -323,7 +322,7 @@ internal open class FirCallableCompletionContributor( .filter { enumEntrySymbol -> expectedType == null || enumEntrySymbol.returnType - .withNullability(KaTypeNullability.NON_NULLABLE) + .withNullability(false) .semanticallyEquals(expectedType) } yieldAll(enumConstants) @@ -357,7 +356,7 @@ internal open class FirCallableCompletionContributor( yieldAll(extensionDescriptors) } - context(KaSession) + context(_: KaSession) override fun createChainedLookupElements( positionContext: KotlinNameReferencePositionContext, receiverExpression: KtDotQualifiedExpression, @@ -385,7 +384,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) protected open fun collectDotCompletion( positionContext: KotlinNameReferencePositionContext, scopeContext: KaScopeContext, @@ -428,7 +427,7 @@ internal open class FirCallableCompletionContributor( private val KaNamedClassSymbol.canBeUsedAsReceiver: Boolean get() = classKind.isObject || companionObject != null - context(KaSession) + context(_: KaSession) private fun collectDotCompletionForPackageReceiver( positionContext: KotlinNameReferencePositionContext, packageSymbol: KaPackageSymbol, @@ -449,7 +448,7 @@ internal open class FirCallableCompletionContributor( ) } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) protected fun collectDotCompletionForCallableReceiver( positionContext: KotlinNameReferencePositionContext, @@ -489,7 +488,7 @@ internal open class FirCallableCompletionContributor( yieldAll(callablesWithMetadataFromUnstableSmartCast) } - context(KaSession) + context(_: KaSession) protected fun collectDotCompletionForCallableReceiver( positionContext: KotlinNameReferencePositionContext, typesOfPossibleReceiver: List, @@ -529,7 +528,7 @@ internal open class FirCallableCompletionContributor( yieldAll(extensionDescriptors) } - context(KaSession) + context(_: KaSession) protected fun collectDotCompletionFromStaticScope( positionContext: KotlinNameReferencePositionContext, symbol: KaNamedClassSymbol, @@ -558,7 +557,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun collectExtensionsFromIndexAndResolveExtensionScope( positionContext: KotlinNameReferencePositionContext, receiverTypes: List, @@ -585,7 +584,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun collectSuitableExtensions( positionContext: KotlinNameReferencePositionContext, scopeContext: KaScopeContext, @@ -619,7 +618,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun collectSuitableExtensions( positionContext: KotlinNameReferencePositionContext, scope: KaScope, @@ -631,7 +630,7 @@ internal open class FirCallableCompletionContributor( .filter { filter(it) } .mapNotNull { callable -> checkApplicabilityAndSubstitute(callable, hasSuitableExtensionReceiver) } - context(KaSession) + context(_: KaSession) protected fun createApplicableExtension( signature: KaCallableSignature<*>, importingStrategy: ImportStrategy = importStrategyDetector.detectImportStrategyForCallableSymbol(symbol = signature.symbol), @@ -645,7 +644,7 @@ internal open class FirCallableCompletionContributor( * If [candidate] is applicable returns substituted signature and insertion options, otherwise, null. * When [extensionChecker] is null, no check is carried and applicability result is null. */ - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) protected open fun checkApplicabilityAndSubstitute( candidate: KaCallableSymbol, @@ -682,7 +681,7 @@ internal open class FirCallableCompletionContributor( * * @see NotPropertiesService */ - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun KaCallableSignature<*>.getJavaGetterSignatureIfNotProperty(): KaCallableSignature<*>? { if (this !is KaVariableSignature<*>) return null @@ -698,7 +697,7 @@ internal open class FirCallableCompletionContributor( * Note, that [isImportDefinitelyNotRequired] should be set to true only if the callable is available without import, and it doesn't * require import or fully-qualified name to be resolved unambiguously. */ - context(KaSession) + context(_: KaSession) protected fun KaCallableSignature<*>.createCallableWithMetadata( scopeKind: KaScopeKind, isImportDefinitelyNotRequired: Boolean = false, @@ -762,7 +761,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun shadowIfNecessary( expectedType: KaType?, ) = object : Function1 { @@ -786,7 +785,7 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun Sequence.filterIfInsideAnnotationEntryArgument( position: PsiElement, expectedType: KaType?, @@ -813,15 +812,15 @@ internal open class FirCallableCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun KaJavaFieldSymbol.hasPrimitiveOrStringReturnType(): Boolean = (psi as? PsiField)?.type is PsiPrimitiveType || returnType.isStringType - context(KaSession) + context(_: KaSession) private fun KaCallableSymbol.hasConstEvaluationAnnotation(): Boolean = annotations.any { it.classId == StandardClassIds.Annotations.IntrinsicConstEvaluation } - context(KaSession) + context(_: KaSession) protected fun KaNamedClassSymbol.staticScope(withCompanionScope: Boolean = true): KaScope = buildList { if (withCompanionScope) { addIfNotNull(companionObject?.memberScope) @@ -835,7 +834,7 @@ internal class FirCallableReferenceCompletionContributor( priority: Int, ) : FirCallableCompletionContributor(sink, priority) { - context(KaSession) + context(_: KaSession) override fun getImportStrategy(signature: KaCallableSignature<*>, isImportDefinitelyNotRequired: Boolean): ImportStrategy { if (isImportDefinitelyNotRequired) return ImportStrategy.DoNothing @@ -845,13 +844,13 @@ internal class FirCallableReferenceCompletionContributor( override fun getInsertionStrategy(signature: KaCallableSignature<*>): CallableInsertionStrategy = CallableInsertionStrategy.AsIdentifier - context(KaSession) + context(_: KaSession) @KaExperimentalApi override fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy? = null - context(KaSession) + context(_: KaSession) override fun filter(symbol: KaCallableSymbol): Boolean = when { // References to elements which are members and extensions at the same time are not allowed symbol.isExtension && symbol.location == KaSymbolLocation.CLASS -> false @@ -866,7 +865,7 @@ internal class FirCallableReferenceCompletionContributor( } - context(KaSession) + context(_: KaSession) override fun collectDotCompletion( positionContext: KotlinNameReferencePositionContext, scopeContext: KaScopeContext, @@ -910,13 +909,13 @@ internal class FirInfixCallableCompletionContributor( override fun getInsertionStrategy(signature: KaCallableSignature<*>): CallableInsertionStrategy = CallableInsertionStrategy.InfixCallableInsertionStrategy - context(KaSession) + context(_: KaSession) @KaExperimentalApi override fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy? = null - context(KaSession) + context(_: KaSession) override fun filter(symbol: KaCallableSymbol): Boolean = symbol is KaNamedFunctionSymbol && symbol.isInfix @@ -934,20 +933,20 @@ internal class FirKDocCallableCompletionContributor( /** * Is not used directly, @see [checkApplicabilityAndSubstitute]. */ - context(KaSession) + context(_: KaSession) @KaExperimentalApi override fun getInsertionStrategyForFunctionalVariables( applicabilityResult: KaExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall, ): CallableInsertionStrategy = throw RuntimeException("Should not be used directly") - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) override fun checkApplicabilityAndSubstitute( candidate: KaCallableSymbol, extensionChecker: KaCompletionExtensionCandidateChecker?, ): ApplicableExtension = createApplicableExtension(signature = candidate.asSignature()) - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) override fun collectDotCompletion( positionContext: KotlinNameReferencePositionContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassReferenceCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassReferenceCompletionContributor.kt index f07fba1f08c1..1ea05018f1c7 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassReferenceCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassReferenceCompletionContributor.kt @@ -14,7 +14,7 @@ internal class FirClassReferenceCompletionContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinCallableReferencePositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassifierCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassifierCompletionContributor.kt index 732863c703a2..486e3d264ddc 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassifierCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirClassifierCompletionContributor.kt @@ -14,6 +14,12 @@ import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.components.KaScopeWithKind import org.jetbrains.kotlin.analysis.api.components.ShortenCommand +import org.jetbrains.kotlin.analysis.api.components.containingSymbol +import org.jetbrains.kotlin.analysis.api.components.defaultType +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf +import org.jetbrains.kotlin.analysis.api.components.memberScope +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbols +import org.jetbrains.kotlin.analysis.api.components.staticDeclaredMemberScope import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.analysis.api.types.KaType @@ -47,14 +53,14 @@ internal open class FirClassifierCompletionContributor( ) : FirCompletionContributorBase(sink, priority), ChainCompletionContributor { - context(KaSession) + context(_: KaSession) protected open fun filterClassifiers(classifierSymbol: KaClassifierSymbol): Boolean = true - context(KaSession) + context(_: KaSession) protected open fun getImportingStrategy(classifierSymbol: KaClassifierSymbol): ImportStrategy = importStrategyDetector.detectImportStrategyForClassifierSymbol(classifierSymbol) - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinNameReferencePositionContext, weighingContext: WeighingContext, @@ -88,7 +94,7 @@ internal open class FirClassifierCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun KaScopeWithKind.completeClassifiers( positionContext: KotlinNameReferencePositionContext, ): Sequence = scope @@ -96,7 +102,7 @@ internal open class FirClassifierCompletionContributor( .filter { filterClassifiers(it) } .filter { visibilityChecker.isVisible(it, positionContext) } - context(KaSession) + context(_: KaSession) private fun completeWithoutReceiver( weighingContext: WeighingContext, positionContext: KotlinNameReferencePositionContext, @@ -170,7 +176,7 @@ internal open class FirClassifierCompletionContributor( indexClassifiers } - context(KaSession) + context(_: KaSession) override fun createChainedLookupElements( positionContext: KotlinNameReferencePositionContext, receiverExpression: KtDotQualifiedExpression, @@ -196,7 +202,7 @@ internal open class FirClassifierCompletionContributor( } - context(KaSession) + context(_: KaSession) private fun createClassifierLookupElement( classifierSymbol: KaClassifierSymbol, positionContext: KotlinRawPositionContext, @@ -245,7 +251,7 @@ internal class FirAnnotationCompletionContributor( priority: Int = 0, ) : FirClassifierCompletionContributor(sink, priority) { - context(KaSession) + context(_: KaSession) override fun filterClassifiers(classifierSymbol: KaClassifierSymbol): Boolean = when (classifierSymbol) { is KaAnonymousObjectSymbol -> false is KaTypeParameterSymbol -> false @@ -270,7 +276,7 @@ internal class FirClassifierReferenceCompletionContributor( priority: Int ) : FirClassifierCompletionContributor(sink, priority) { - context(KaSession) + context(_: KaSession) override fun getImportingStrategy(classifierSymbol: KaClassifierSymbol): ImportStrategy = when (classifierSymbol) { is KaTypeParameterSymbol -> ImportStrategy.DoNothing is KaClassLikeSymbol -> { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributor.kt index 0a5369d4f28a..5d4158d89ade 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributor.kt @@ -7,7 +7,7 @@ import org.jetbrains.kotlin.idea.util.positionContext.KotlinRawPositionContext internal interface FirCompletionContributor { - context(KaSession) + context(_: KaSession) fun complete( positionContext: C, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributorBase.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributorBase.kt index 2be45b3b2f7d..3fd1ea83bf7b 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributorBase.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirCompletionContributorBase.kt @@ -13,6 +13,7 @@ import kotlinx.serialization.Serializable import org.jetbrains.annotations.ApiStatus import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.containingDeclaration import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.symbols.KaConstructorSymbol @@ -99,7 +100,7 @@ internal abstract class FirCompletionContributorBase, @@ -121,7 +122,7 @@ internal abstract class FirCompletionContributorBase, @@ -253,7 +254,7 @@ internal abstract class FirCompletionContributorBase { - context(KaSession) + context(_: KaSession) fun createChainedLookupElements( positionContext: KotlinNameReferencePositionContext, receiverExpression: KtDotQualifiedExpression, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromOverridableMembersContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromOverridableMembersContributor.kt index b3f8075a7d61..a89bd638d233 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromOverridableMembersContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromOverridableMembersContributor.kt @@ -36,7 +36,7 @@ internal class FirDeclarationFromOverridableMembersContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinRawPositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromUnresolvedNameContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromUnresolvedNameContributor.kt index 3c6ce7a8a1c7..8dd90c6f8768 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromUnresolvedNameContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirDeclarationFromUnresolvedNameContributor.kt @@ -5,6 +5,10 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.openapi.progress.ProgressManager import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.collectImplicitReceiverTypes +import org.jetbrains.kotlin.analysis.api.components.dispatchReceiverType +import org.jetbrains.kotlin.analysis.api.components.expressionType +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.idea.completion.ItemPriority @@ -33,7 +37,7 @@ internal class FirDeclarationFromUnresolvedNameContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinRawPositionContext, weighingContext: WeighingContext, @@ -49,7 +53,7 @@ internal class FirDeclarationFromUnresolvedNameContributor( } } - context(KaSession) + context(_: KaSession) private fun processReference( referenceScope: KtElement, currentDeclarationInFakeFile: KtNamedDeclaration, @@ -73,7 +77,7 @@ internal class FirDeclarationFromUnresolvedNameContributor( } } - context(KaSession) + context(_: KaSession) private fun shouldOfferCompletion(unresolvedRef: KtNameReferenceExpression, currentDeclaration: KtNamedDeclaration): Boolean { val refExprParent = unresolvedRef.parent val receiver = if (refExprParent is KtCallExpression) { @@ -118,7 +122,7 @@ internal class FirDeclarationFromUnresolvedNameContributor( return qualifiedExpression.receiverExpression } - context(KaSession) + context(_: KaSession) private fun getReceiverType(symbol: KaCallableSymbol): KaType? { return symbol.receiverType ?: (symbol as? KaCallableSymbol)?.dispatchReceiverType } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirImportDirectivePackageMembersCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirImportDirectivePackageMembersCompletionContributor.kt index f68e8ebe7ccc..1e0096bb00f5 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirImportDirectivePackageMembersCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirImportDirectivePackageMembersCompletionContributor.kt @@ -3,6 +3,7 @@ package org.jetbrains.kotlin.idea.completion.impl.k2.contributors.fir import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.asSignature import org.jetbrains.kotlin.idea.completion.contributors.helpers.KtSymbolWithOrigin import org.jetbrains.kotlin.idea.completion.contributors.helpers.resolveReceiverToSymbols import org.jetbrains.kotlin.idea.completion.contributors.helpers.staticScope @@ -21,7 +22,7 @@ internal class FirImportDirectivePackageMembersCompletionContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) override fun complete( positionContext: KotlinImportDirectivePositionContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKDocParameterNameContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKDocParameterNameContributor.kt index b7b68eb05913..53eb462ec1a9 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKDocParameterNameContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKDocParameterNameContributor.kt @@ -4,6 +4,8 @@ package org.jetbrains.kotlin.idea.completion.impl.k2.contributors.fir import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.asSignature +import org.jetbrains.kotlin.analysis.api.components.declaredMemberScope import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol import org.jetbrains.kotlin.idea.completion.contributors.helpers.KtOutsideTowerScopeKinds @@ -23,7 +25,7 @@ internal open class FirKDocParameterNameContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KDocNameReferencePositionContext, weighingContext: WeighingContext, @@ -41,7 +43,7 @@ internal open class FirKDocParameterNameContributor( .forEach(sink::addElement) } - context(KaSession) + context(_: KaSession) private fun createLookupElements( declarationSymbol: KaDeclarationSymbol, weighingContext: WeighingContext, @@ -65,7 +67,7 @@ internal open class FirKDocParameterNameContributor( else -> emptySequence() } - context(KaSession) + context(_: KaSession) private fun getParametersForKDoc( ownerDeclarationSymbol: KaDeclarationSymbol ): Sequence = sequence { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKeywordCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKeywordCompletionContributor.kt index ac7338c7f669..d168a99c56dd 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKeywordCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirKeywordCompletionContributor.kt @@ -46,7 +46,7 @@ internal class FirKeywordCompletionContributor( ) } - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinRawPositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirNamedArgumentCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirNamedArgumentCompletionContributor.kt index 82f8f58e8d06..eda071759411 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirNamedArgumentCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirNamedArgumentCompletionContributor.kt @@ -33,7 +33,7 @@ internal class FirNamedArgumentCompletionContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinExpressionNameReferencePositionContext, weighingContext: WeighingContext, @@ -100,7 +100,7 @@ internal class FirNamedArgumentCompletionContributor( val indexedTypes: List> ) - context(KaSession) + context(_: KaSession) private fun collectNamedArgumentInfos( callElement: KtCallElement, argumentsBeforeCurrent: List, @@ -118,7 +118,7 @@ internal class FirNamedArgumentCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun collectNotUsedIndexedParameterCandidates( callElement: KtCallElement, candidate: KaFunctionCall<*>, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirOperatorNameCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirOperatorNameCompletionContributor.kt index 034c92beb429..fdf96f524b22 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirOperatorNameCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirOperatorNameCompletionContributor.kt @@ -14,7 +14,7 @@ internal class FirOperatorNameCompletionContributor( sink: LookupElementSink, priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinTypeNameReferencePositionContext, weighingContext: WeighingContext diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirPackageCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirPackageCompletionContributor.kt index ffea248e3017..2115e8b38c67 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirPackageCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirPackageCompletionContributor.kt @@ -3,6 +3,7 @@ package org.jetbrains.kotlin.idea.completion.impl.k2.contributors.fir import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.packageScope import org.jetbrains.kotlin.analysis.api.symbols.KaPackageSymbol import org.jetbrains.kotlin.base.analysis.isExcludedFromAutoImport import org.jetbrains.kotlin.idea.completion.contributors.helpers.KtOutsideTowerScopeKinds @@ -20,7 +21,7 @@ internal class FirPackageCompletionContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) override fun complete( positionContext: KotlinRawPositionContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSameAsFileClassifierNameCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSameAsFileClassifierNameCompletionContributor.kt index 0888bfe01eb9..fce24a8c6abb 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSameAsFileClassifierNameCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSameAsFileClassifierNameCompletionContributor.kt @@ -16,7 +16,7 @@ internal class FirSameAsFileClassifierNameCompletionContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinClassifierNamePositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperEntryContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperEntryContributor.kt index 48554dcd857a..3aebe818fd0d 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperEntryContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperEntryContributor.kt @@ -16,7 +16,7 @@ internal class FirSuperEntryContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinSuperTypeCallNameReferencePositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperMemberCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperMemberCompletionContributor.kt index 718aaab175ec..4c984095f7a3 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperMemberCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirSuperMemberCompletionContributor.kt @@ -5,6 +5,8 @@ import com.intellij.codeInsight.lookup.LookupElement import com.intellij.psi.util.parentsOfType import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.allOverriddenSymbols +import org.jetbrains.kotlin.analysis.api.components.expressionType import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeOwner import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion @@ -12,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolModality +import org.jetbrains.kotlin.analysis.api.symbols.symbol import org.jetbrains.kotlin.analysis.api.types.KaIntersectionType import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.analysis.api.types.KaUsualClassType @@ -55,7 +58,7 @@ internal class FirSuperMemberCompletionContributor( get() = withValidityAssertion { _signature } } - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinSuperReceiverNameReferencePositionContext, weighingContext: WeighingContext, @@ -86,7 +89,7 @@ internal class FirSuperMemberCompletionContributor( ).forEach(sink::addElement) } - context(KaSession) + context(_: KaSession) private fun getSymbolsAndNamesNeedDisambiguation( positionContext: KotlinNameReferencePositionContext, superTypes: List, @@ -122,7 +125,7 @@ internal class FirSuperMemberCompletionContributor( return Pair(allSymbols, nameNeedDisambiguation) } - context(KaSession) + context(_: KaSession) private fun getNonExtensionsMemberSymbols( positionContext: KotlinNameReferencePositionContext, receiverType: KaType, @@ -139,7 +142,7 @@ internal class FirSuperMemberCompletionContributor( ) } - context(KaSession) + context(_: KaSession) private fun collectCallToSuperMember( callableInfo: CallableInfo, context: WeighingContext, @@ -163,13 +166,13 @@ internal class FirSuperMemberCompletionContributor( ) } - context(KaSession) + context(_: KaSession) private fun getInsertionStrategy(signature: KaCallableSignature<*>): CallableInsertionStrategy = when (signature) { is KaFunctionSignature<*> -> CallableInsertionStrategy.AsCall else -> CallableInsertionStrategy.AsIdentifier } - context(KaSession) + context(_: KaSession) private fun collectDelegateCallToSuperMember( context: WeighingContext, superReceiver: KtSuperExpression, @@ -246,7 +249,7 @@ internal class FirSuperMemberCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun wrapWithDisambiguationIfNeeded( insertionStrategy: CallableInsertionStrategy, superType: KaType, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTrailingFunctionParameterNameCompletionContributorBase.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTrailingFunctionParameterNameCompletionContributorBase.kt index 62719f7eb508..e58507ac4128 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTrailingFunctionParameterNameCompletionContributorBase.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTrailingFunctionParameterNameCompletionContributorBase.kt @@ -11,6 +11,15 @@ import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaCompletionCandidateChecker import org.jetbrains.kotlin.analysis.api.components.KaCompletionExtensionCandidateChecker import org.jetbrains.kotlin.analysis.api.components.KaExtensionApplicabilityResult +import org.jetbrains.kotlin.analysis.api.components.canBeAnalysed +import org.jetbrains.kotlin.analysis.api.components.createSubstitutor +import org.jetbrains.kotlin.analysis.api.components.expandedSymbol +import org.jetbrains.kotlin.analysis.api.components.isSubClassOf +import org.jetbrains.kotlin.analysis.api.components.lowerBoundIfFlexible +import org.jetbrains.kotlin.analysis.api.components.memberScope +import org.jetbrains.kotlin.analysis.api.components.render +import org.jetbrains.kotlin.analysis.api.components.resolveToCallCandidates +import org.jetbrains.kotlin.analysis.api.components.substitute import org.jetbrains.kotlin.analysis.api.impl.base.components.KaBaseIllegalPsiException import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnnotationsFilter import org.jetbrains.kotlin.analysis.api.renderer.types.KaTypeRenderer @@ -20,6 +29,7 @@ import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaNamedFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolVisibility +import org.jetbrains.kotlin.analysis.api.symbols.findClass import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.builtins.StandardNames @@ -54,7 +64,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< priority: Int = 0, ) : FirTrailingFunctionParameterNameCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinExpressionNameReferencePositionContext, weighingContext: WeighingContext, @@ -80,7 +90,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< priority: Int = 0, ) : FirTrailingFunctionParameterNameCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinSimpleParameterPositionContext, weighingContext: WeighingContext, @@ -104,7 +114,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< } } - context(KaSession) + context(_: KaSession) protected fun complete( position: KtElement, existingParameterNames: Set, @@ -142,7 +152,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< }.forEach(sink::addElement) } - context(KaSession) + context(_: KaSession) private fun createLookupElements( trailingFunctionDescriptor: TrailingFunctionDescriptor, candidateChecker: KaCompletionExtensionCandidateChecker, @@ -169,7 +179,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< } } - context(KaSession) + context(_: KaSession) private fun createLookupElements( trailingFunctionDescriptor: TrailingFunctionDescriptor, candidateChecker: KaCompletionExtensionCandidateChecker, @@ -251,7 +261,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun KaNamedClassSymbol.getSignatures( candidateChecker: KaCompletionExtensionCandidateChecker, @@ -283,7 +293,7 @@ internal sealed class FirTrailingFunctionParameterNameCompletionContributorBase< else emptyList() } - context(KaSession) + context(_: KaSession) private fun KaNamedClassSymbol.getComponents( receiverTypes: List, ): Collection { @@ -329,7 +339,7 @@ private val NoAnnotationsTypeRenderer: KaTypeRenderer = KaTypeRendererForSource. } } -context(KaSession) +context(_: KaSession) private fun createCompoundLookupElement( suggestedNames: Collection>, isDestructuring: Boolean = false, @@ -357,7 +367,7 @@ private fun createCompoundLookupElement( .withTailTextInsertHandler() .withChainedInsertHandler(CompoundInsertionHandler(presentableText)) } -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) private val KaType.text: String get() = render( @@ -365,7 +375,7 @@ private val KaType.text: String position = Variance.INVARIANT, ) -context(KaCompletionCandidateChecker) +context(_: KaCompletionCandidateChecker) private fun createExtensionCandidateChecker( bodyExpression: KtBlockExpression, ): KtCompletionExtensionCandidateChecker? { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTypeParameterConstraintNameInWhereClauseCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTypeParameterConstraintNameInWhereClauseCompletionContributor.kt index f4ba8fa775f7..fe96c6e5f244 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTypeParameterConstraintNameInWhereClauseCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirTypeParameterConstraintNameInWhereClauseCompletionContributor.kt @@ -4,6 +4,7 @@ package org.jetbrains.kotlin.idea.completion.impl.k2.contributors.fir import com.intellij.codeInsight.lookup.LookupElementBuilder import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.symbols.symbol import org.jetbrains.kotlin.analysis.api.symbols.typeParameters import org.jetbrains.kotlin.idea.base.codeInsight.KotlinIconProvider.getIconFor import org.jetbrains.kotlin.idea.completion.impl.k2.LookupElementSink @@ -18,7 +19,7 @@ internal class FirTypeParameterConstraintNameInWhereClauseCompletionContributor( priority: Int = 0, ) : FirCompletionContributorBase(sink, priority) { - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinTypeConstraintNameInWhereClausePositionContext, weighingContext: WeighingContext, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirVariableOrParameterNameWithTypeCompletionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirVariableOrParameterNameWithTypeCompletionContributor.kt index afaecc586d5f..f4c09cb5fcbc 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirVariableOrParameterNameWithTypeCompletionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirVariableOrParameterNameWithTypeCompletionContributor.kt @@ -10,6 +10,9 @@ import com.intellij.psi.codeStyle.NameUtil import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeContext import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.compositeScope +import org.jetbrains.kotlin.analysis.api.components.returnType +import org.jetbrains.kotlin.analysis.api.components.scopeContext import org.jetbrains.kotlin.analysis.api.scopes.KaScope import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol @@ -42,7 +45,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( private val nameFiltersWithUserPrefixes: List> = getNameFiltersWithUserPrefixes() - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinRawPositionContext, weighingContext: WeighingContext, @@ -81,7 +84,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( ) } - context(KaSession) + context(_: KaSession) private fun completeFromParametersInFile( positionContext: KotlinRawPositionContext, variableOrParameter: KtCallableDeclaration, @@ -138,7 +141,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun completeClassesFromScopeContext( positionContext: KotlinRawPositionContext, variableOrParameter: KtCallableDeclaration, @@ -165,7 +168,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun completeClassesFromIndices( positionContext: KotlinRawPositionContext, variableOrParameter: KtCallableDeclaration, @@ -191,7 +194,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun addSuggestions( variableOrParameter: KtCallableDeclaration, symbol: KaClassifierSymbol, @@ -291,7 +294,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( } } - context(KaSession) + context(_: KaSession) private fun getAvailableTypeParameters(scopes: KaScope): Sequence = scopes.classifiers.filterIsInstance() @@ -299,7 +302,7 @@ internal class FirVariableOrParameterNameWithTypeCompletionContributor( return (typeReference.parent as? KtCallableDeclaration)?.takeIf { it.receiverTypeReference == typeReference } } - context(KaSession) + context(_: KaSession) private fun typeIsVisible( positionContext: KotlinRawPositionContext, type: KaType, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirWhenWithSubjectConditionContributor.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirWhenWithSubjectConditionContributor.kt index abf14c97d15f..0fb6d0ddac4f 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirWhenWithSubjectConditionContributor.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/fir/FirWhenWithSubjectConditionContributor.kt @@ -10,6 +10,12 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.expressionType +import org.jetbrains.kotlin.analysis.api.components.isNullable +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbol +import org.jetbrains.kotlin.analysis.api.components.scopeContext +import org.jetbrains.kotlin.analysis.api.components.sealedClassInheritors +import org.jetbrains.kotlin.analysis.api.components.staticDeclaredMemberScope import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol import org.jetbrains.kotlin.analysis.api.types.KaClassType @@ -51,7 +57,7 @@ internal class FirWhenWithSubjectConditionContributor( super.prefixMatcher .applyIf(onTypingIsKeyword) { cloneWithPrefix("") } - context(KaSession) + context(_: KaSession) override fun complete( positionContext: KotlinWithSubjectEntryPositionContext, weighingContext: WeighingContext, @@ -98,13 +104,13 @@ internal class FirWhenWithSubjectConditionContributor( ?.let(sink::addElement) } - context(KaSession) + context(_: KaSession) private fun getClassSymbol(subjectType: KaType): KaNamedClassSymbol? { val classType = subjectType as? KaClassType return classType?.symbol as? KaNamedClassSymbol } - context(KaSession) + context(_: KaSession) private fun createNullBranchLookupElement( context: WeighingContext, type: KaType?, @@ -115,7 +121,7 @@ internal class FirWhenWithSubjectConditionContributor( .applyWeighs(context) } - context(KaSession) + context(_: KaSession) private fun completeAllTypes( positionContext: KotlinWithSubjectEntryPositionContext, context: WeighingContext, @@ -162,7 +168,7 @@ internal class FirWhenWithSubjectConditionContributor( } } - context(KaSession) + context(_: KaSession) private fun isPrefixNeeded(symbol: KaNamedSymbol): Boolean { return when (symbol) { is KaAnonymousObjectSymbol -> return false @@ -176,7 +182,7 @@ internal class FirWhenWithSubjectConditionContributor( } } - context(KaSession) + context(_: KaSession) private fun completeSubClassesOfSealedClass( positionContext: KotlinWithSubjectEntryPositionContext, context: WeighingContext, @@ -215,7 +221,7 @@ internal class FirWhenWithSubjectConditionContributor( } } - context(KaSession) + context(_: KaSession) private fun getHandledClassIds(conditions: List): Set = conditions.mapNotNullTo(hashSetOf()) { condition -> val reference = when (condition) { @@ -227,7 +233,7 @@ internal class FirWhenWithSubjectConditionContributor( resolvesTo?.classId } - context(KaSession) + context(_: KaSession) private fun getAllSealedInheritors(classSymbol: KaNamedClassSymbol): Collection { fun getAllSealedInheritorsTo( @@ -246,7 +252,7 @@ internal class FirWhenWithSubjectConditionContributor( .apply { getAllSealedInheritorsTo(classSymbol, this) } } - context(KaSession) + context(_: KaSession) private fun createElseBranchLookupElement( context: WeighingContext, whenCondition: KtWhenCondition, @@ -262,7 +268,7 @@ internal class FirWhenWithSubjectConditionContributor( } - context(KaSession) + context(_: KaSession) private fun completeEnumEntries( positionContext: KotlinWithSubjectEntryPositionContext, context: WeighingContext, @@ -297,7 +303,7 @@ internal class FirWhenWithSubjectConditionContributor( return entry.conditions.size == 1 } - context(KaSession) + context(_: KaSession) private fun createLookupElement( context: WeighingContext, lookupString: String, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/CallableMetadataProvider.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/CallableMetadataProvider.kt index 60872acb899c..b97eb67643cf 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/CallableMetadataProvider.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/CallableMetadataProvider.kt @@ -8,6 +8,21 @@ import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaImplicitReceiver import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.allOverriddenSymbols +import org.jetbrains.kotlin.analysis.api.components.approximateToSuperPublicDenotableOrSelf +import org.jetbrains.kotlin.analysis.api.components.asSignature +import org.jetbrains.kotlin.analysis.api.components.containingDeclaration +import org.jetbrains.kotlin.analysis.api.components.containingSymbol +import org.jetbrains.kotlin.analysis.api.components.defaultType +import org.jetbrains.kotlin.analysis.api.components.directlyOverriddenSymbols +import org.jetbrains.kotlin.analysis.api.components.expandedSymbol +import org.jetbrains.kotlin.analysis.api.components.expressionType +import org.jetbrains.kotlin.analysis.api.components.fakeOverrideOriginal +import org.jetbrains.kotlin.analysis.api.components.isMarkedNullable +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf +import org.jetbrains.kotlin.analysis.api.components.isUnitType +import org.jetbrains.kotlin.analysis.api.components.semanticallyEquals +import org.jetbrains.kotlin.analysis.api.components.withNullability import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.* @@ -76,7 +91,7 @@ internal object CallableMetadataProvider { else -> this } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun getCallableMetadata( signature: KaCallableSignature<*>, @@ -109,7 +124,7 @@ internal object CallableMetadataProvider { } } - context(KaSession) + context(_: KaSession) private fun nonExtensionWeight( signature: KaCallableSignature<*>, flattenedActualReceiverTypes: List>, @@ -140,7 +155,7 @@ internal object CallableMetadataProvider { .applyIf(hasOverriddenSymbols) { CallableMetadata(kind.correspondingBaseForThisOrSelf, scopeIndex) } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun extensionWeight( signature: KaCallableSignature<*>, @@ -165,7 +180,7 @@ internal object CallableMetadataProvider { ) } - context(KaSession) + context(_: KaSession) private fun getExpectedNonExtensionReceiver(symbol: KaCallableSymbol): KaClassSymbol? { val containingClass = symbol.fakeOverrideOriginal.containingSymbol as? KaClassSymbol return if (symbol is KaConstructorSymbol && (containingClass as? KaNamedClassSymbol)?.isInner == true) { @@ -175,7 +190,7 @@ internal object CallableMetadataProvider { } } - context(KaSession) + context(_: KaSession) private fun receiverTypes( receiver: KtElement, ): List? { @@ -201,7 +216,7 @@ internal object CallableMetadataProvider { } // todo refactor; move to an appropriate place - context(KaSession) + context(_: KaSession) fun calculateActualReceiverTypes( explicitReceiver: KtElement?, implicitReceivers: () -> List, @@ -218,13 +233,13 @@ internal object CallableMetadataProvider { private inline val KaClassLikeSymbol.companionObject: KaNamedClassSymbol? get() = (this as? KaNamedClassSymbol)?.companionObject - context(KaSession) + context(_: KaSession) private fun KaType.flatten(): List = when (this) { is KaIntersectionType -> conjuncts.flatMap { it.flatten() } else -> listOf(this) } - context(KaSession) + context(_: KaSession) private fun KtExpression.getTypeWithCorrectedNullability( referenceClass: KaSymbol? = null, ): KaType? { @@ -237,11 +252,11 @@ internal object CallableMetadataProvider { } return expressionType?.applyIf(parent is KtSafeQualifiedExpression) { - withNullability(KaTypeNullability.NON_NULLABLE) + withNullability(false) } } - context(KaSession) + context(_: KaSession) private val KaCallableSymbol.isOverride: Boolean get() = when (this) { is KaNamedFunctionSymbol -> isOverride @@ -256,16 +271,16 @@ internal object CallableMetadataProvider { * val l = String::length * ``` */ - context(KaSession) + context(_: KaSession) private fun isInCallableReferenceExpression(explicitReceiver: KtElement): Boolean = explicitReceiver.getParentOfType(strict = true) ?.lhs == explicitReceiver - context(KaSession) + context(_: KaSession) private fun KaType.replaceTypeArgumentsWithStarProjections(): KaType? = - expandedSymbol?.let { buildClassTypeWithStarProjections(it) }?.withNullability(nullability) + expandedSymbol?.let { buildClassTypeWithStarProjections(it) }?.withNullability(isMarkedNullable) - context(KaSession) + context(_: KaSession) private fun callableWeightByReceiver( symbol: KaCallableSymbol, actualReceiverTypes: List>, @@ -303,7 +318,7 @@ internal object CallableMetadataProvider { return CallableMetadata(bestMatchWeightKind, bestMatchIndex) } - context(KaSession) + context(_: KaSession) private fun callableWeightKindByReceiverType( symbol: KaCallableSymbol, actualReceiverType: KaType, @@ -323,7 +338,7 @@ internal object CallableMetadataProvider { else -> null } - context(KaSession) + context(_: KaSession) private fun isExtensionCallOnTypeParameterReceiver(symbol: KaCallableSymbol): Boolean { val originalSymbol = symbol.fakeOverrideOriginal val receiverParameterType = originalSymbol.receiverType as? KaTypeParameterType ?: return false diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirClassifierProvider.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirClassifierProvider.kt index ab7617a591b0..4a1b1aca5dd2 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirClassifierProvider.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirClassifierProvider.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.psi.KtEnumEntry internal object FirClassifierProvider { - context(KaSession) + context(_: KaSession) fun KaScopeWithKind.getAvailableClassifiers( positionContext: KotlinRawPositionContext, scopeNameFilter: (Name) -> Boolean, @@ -29,7 +29,7 @@ internal object FirClassifierProvider { .filter { visibilityChecker.isVisible(it, positionContext) } .map { KtSymbolWithOrigin(it, kind) } - context(KaSession) + context(_: KaSession) fun getAvailableClassifiersFromIndex( positionContext: KotlinRawPositionContext, parameters: KotlinFirCompletionParameters, @@ -44,7 +44,7 @@ internal object FirClassifierProvider { } } -context(KaSession) +context(_: KaSession) private fun completeKotlinClasses( symbolProvider: KtSymbolFromIndexProvider, scopeNameFilter: (Name) -> Boolean, @@ -58,7 +58,7 @@ private fun completeKotlinClasses( } ) -context(KaSession) +context(_: KaSession) private fun completeJavaClasses( parameters: KotlinFirCompletionParameters, symbolProvider: KtSymbolFromIndexProvider, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirSuperEntriesProvider.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirSuperEntriesProvider.kt index bfa3257e5af9..e32962b11f2f 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirSuperEntriesProvider.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/FirSuperEntriesProvider.kt @@ -11,6 +11,7 @@ import com.intellij.psi.util.nextLeafs import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol +import org.jetbrains.kotlin.analysis.api.symbols.classSymbol import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.idea.completion.api.serialization.SerializableInsertHandler import org.jetbrains.kotlin.idea.completion.lookups.factories.insertAndShortenReferencesInStringUsingTemporarySuffix @@ -21,7 +22,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType internal object FirSuperEntriesProvider { - context(KaSession) + context(_: KaSession) fun getSuperClassesAvailableForSuperCall(context: PsiElement): List { val containingClass = context.getStrictParentOfType() ?: return emptyList() val containingClassSymbol = containingClass.classSymbol ?: return emptyList() diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/ShadowedCallablesFilter.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/ShadowedCallablesFilter.kt index d4d16e7021b4..2ff9479cdf6e 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/ShadowedCallablesFilter.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/ShadowedCallablesFilter.kt @@ -5,6 +5,8 @@ import com.intellij.openapi.util.Ref import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind import org.jetbrains.kotlin.analysis.api.components.KaTypeRelationChecker +import org.jetbrains.kotlin.analysis.api.components.allSupertypes +import org.jetbrains.kotlin.analysis.api.components.expandedSymbol import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.signatures.KaVariableSignature @@ -41,7 +43,7 @@ internal class ShadowedCallablesFilter { * invoked. For example, `kotlin.text.String()` is not shortened by reference shortener, because shortened version `String()` * is resolved to `kotlin.String()`. That's why we can't rely on reference shortener and need to use [ImportStrategy.DoNothing]. */ - context(KaSession) + context(_: KaSession) fun excludeFromCompletion( callableSignature: KaCallableSignature<*>, options: CallableInsertionOptions, @@ -89,7 +91,7 @@ internal class ShadowedCallablesFilter { return FilterResult(excludeFromCompletion) } - context(KaSession) + context(_: KaSession) private fun processSignatureConsideringOptions( fullSimplifiedSignature: SimplifiedSignature, simplifiedSignature: SimplifiedSignature, @@ -149,7 +151,7 @@ internal class ShadowedCallablesFilter { * * Also, extensions are sorted by their kind: a function variable can be shadowed by an extension function. */ - context(KaSession) + context(_: KaSession) fun sortExtensions( extensions: Collection, receiversFromContext: List @@ -196,7 +198,7 @@ internal class ShadowedCallablesFilter { private data class NameForLocal(val name: Name) : ReceiverId() companion object { - context(KaSession) + context(_: KaSession) fun create(type: KaType): ReceiverId? { val expandedClassSymbol = type.expandedSymbol ?: return null val name = expandedClassSymbol.name ?: return null @@ -230,7 +232,7 @@ private sealed class SimplifiedSignature { companion object { - context(KaSymbolProvider) + context(_: KaSymbolProvider) fun KaCallableSymbol.getContainerFqName(): FqName? { val callableId = callableId ?: return null return when (location) { @@ -256,7 +258,7 @@ private data class VariableLikeSimplifiedSignature( companion object { - context(KaSymbolProvider) + context(_: KaSymbolProvider) fun create( signature: KaVariableSignature<*>, ) = VariableLikeSimplifiedSignature( @@ -277,7 +279,7 @@ private class FunctionLikeSimplifiedSignature( companion object { - context(KaSession) + context(session: KaSession) fun create( signature: KaVariableSignature<*>, ) = FunctionLikeSimplifiedSignature( @@ -290,10 +292,10 @@ private class FunctionLikeSimplifiedSignature( functionalType.parameterTypes }, varargValueParameterIndices = emptyList(), - typeRelationChecker = this@KaSession, + typeRelationChecker = session, ) - context(KaSession) + context(session: KaSession) fun create( signature: KaFunctionSignature<*>, requiresTypeArguments: (KaFunctionSymbol) -> Boolean, @@ -311,7 +313,7 @@ private class FunctionLikeSimplifiedSignature( valueParameters.map { it.returnType } }, varargValueParameterIndices = valueParameters.mapIndexedNotNull { index, parameter -> index.takeIf { parameter.symbol.isVararg } }, - typeRelationChecker = this@KaSession, + typeRelationChecker = session, ) } } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/symbolUtils.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/symbolUtils.kt index b04b8274949a..9a6abfec8c02 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/symbolUtils.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/symbolUtils.kt @@ -5,6 +5,9 @@ import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind import org.jetbrains.kotlin.analysis.api.components.KaScopeWithKind import org.jetbrains.kotlin.analysis.api.components.KaScopeWithKindImpl +import org.jetbrains.kotlin.analysis.api.components.memberScope +import org.jetbrains.kotlin.analysis.api.components.packageScope +import org.jetbrains.kotlin.analysis.api.components.staticMemberScope import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeOwner import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion @@ -18,7 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KaDeclarationContainerS * Note that if the symbol is [org.jetbrains.kotlin.analysis.api.symbols.KaTypeAliasSymbol], `null` is returned. * See KT-34281 for more details. */ -context(KaSession) +context(_: KaSession) internal val KaSymbol.staticScope: KaScopeWithKind? get() = when (this) { is KaDeclarationContainerSymbol -> KaScopeWithKindImpl( diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/utils.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/utils.kt index 2b03b88fac3c..35b4556fb746 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/utils.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/helpers/utils.kt @@ -8,6 +8,13 @@ import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeContext import org.jetbrains.kotlin.analysis.api.components.KaScopeKind import org.jetbrains.kotlin.analysis.api.components.KaScopeKinds +import org.jetbrains.kotlin.analysis.api.components.asSignature +import org.jetbrains.kotlin.analysis.api.components.containingDeclaration +import org.jetbrains.kotlin.analysis.api.components.declaredMemberScope +import org.jetbrains.kotlin.analysis.api.components.isUnitType +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbols +import org.jetbrains.kotlin.analysis.api.components.scope +import org.jetbrains.kotlin.analysis.api.components.syntheticJavaPropertiesScope import org.jetbrains.kotlin.analysis.api.scopes.KaScope import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.symbols.* @@ -40,14 +47,14 @@ object KtOutsideTowerScopeKinds { val StaticMemberScope: KaScopeKinds.StaticMemberScope = KaScopeKinds.StaticMemberScope(INDEX_IN_TOWER) } -context(KaSession) +context(_: KaSession) internal fun KotlinRawPositionContext.resolveReceiverToSymbols(): Sequence = when (this) { is KotlinNameReferencePositionContext -> resolveReceiverToSymbols() else -> sequenceOf(rootPackageSymbol) } -context(KaSession) +context(_: KaSession) internal fun KotlinNameReferencePositionContext.resolveReceiverToSymbols(): Sequence = when (val explicitReceiver = explicitReceiver) { null -> sequenceOf(rootPackageSymbol) @@ -64,7 +71,7 @@ internal fun createStarTypeArgumentsList(typeArgumentsCount: Int): String = "" } -context(KaSession) +context(_: KaSession) internal fun collectLocalAndMemberNonExtensionsFromScopeContext( parameters: KotlinFirCompletionParameters, positionContext: KotlinNameReferencePositionContext, @@ -111,7 +118,7 @@ internal fun collectLocalAndMemberNonExtensionsFromScopeContext( } } -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) internal fun collectNonExtensionsForType( parameters: KotlinFirCompletionParameters, @@ -151,7 +158,7 @@ internal fun collectNonExtensionsForType( } } -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun Sequence>.filterOutJavaGettersAndSetters( positionContext: KotlinNameReferencePositionContext, @@ -179,7 +186,7 @@ private fun Sequence>.filterOutJavaGettersAndSetters( * Returns non-extensions from [KtScope]. Resulting callables do not include synthetic Java properties and constructors of inner classes. * To get them use [collectNonExtensionsForType]. */ -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) internal fun collectNonExtensionsFromScope( parameters: KotlinFirCompletionParameters, @@ -195,7 +202,7 @@ internal fun collectNonExtensionsFromScope( filterNot { isEnumEntriesProperty(it.symbol) } } -context(KaSession) +context(_: KaSession) private fun Sequence>.filterNonExtensions( positionContext: KotlinNameReferencePositionContext, visibilityChecker: CompletionVisibilityChecker, @@ -218,7 +225,7 @@ private fun ((Name) -> Boolean).getAndSetAware(): (Name) -> Boolean = { property ).any(this) } -context(KaSession) +context(_: KaSession) private fun isEnumEntriesProperty(symbol: KaCallableSymbol): Boolean { return symbol is KaPropertySymbol && symbol.isStatic && @@ -237,7 +244,7 @@ private fun LanguageVersionSettings.excludeSyntheticJavaProperties( /** * Checks if the scope contains an alias for the [symbol] and returns the name of the alias. */ -context(KaSession) +context(_: KaSession) internal fun KtFile.getAliasNameIfExists(symbol: KaSymbol): Name? { val fqName = symbol.getFqNameIfPackageOrNonLocal() ?: return null // TODO: It's possible to optimize this by using a map for the aliases if it turns out to be a bottleneck. diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ActualKeywordHandler.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ActualKeywordHandler.kt index 0711e097ea4c..33dcae77f6cd 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ActualKeywordHandler.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ActualKeywordHandler.kt @@ -11,6 +11,7 @@ import com.intellij.ui.RowIcon import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze +import org.jetbrains.kotlin.analysis.api.components.render import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KotlinProjectStructureProvider import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnnotationsFilter import org.jetbrains.kotlin.analysis.api.renderer.declarations.impl.KaDeclarationRendererForSource @@ -20,6 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KaDeclarationSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaNamedFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KaSymbolPointer +import org.jetbrains.kotlin.analysis.api.symbols.symbol import org.jetbrains.kotlin.idea.KotlinIconProvider import org.jetbrains.kotlin.idea.base.analysis.api.utils.shortenReferencesInRange import org.jetbrains.kotlin.idea.base.util.module @@ -46,7 +48,7 @@ internal class ActualKeywordHandler( private val declaration: KtNamedDeclaration? = null, ) : CompletionKeywordHandler(KtTokens.ACTUAL_KEYWORD) { - context(KaSession) + context(_: KaSession) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, @@ -60,7 +62,7 @@ internal class ActualKeywordHandler( lookup } - context(KaSession) + context(_: KaSession) fun createActualLookups( parameters: KotlinFirCompletionParameters, project: Project @@ -102,7 +104,7 @@ internal class ActualKeywordHandler( return actualsForExpected.isEmpty() } - context(KaSession) + context(_: KaSession) private fun createLookupElement( project: Project, file: KtFile, @@ -134,7 +136,7 @@ internal class ActualKeywordHandler( ) } - context(KaSession) + context(_: KaSession) private fun KaDeclarationSymbol.textPresentation(): String { val symbol = this return buildString { @@ -148,7 +150,7 @@ internal class ActualKeywordHandler( } } - context(KaSession) + context(_: KaSession) private fun KaDeclarationSymbol.iconPresentation(): RowIcon { val symbol = this val baseIcon = KotlinIconProvider.getBaseIcon(symbol) diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/OverrideKeywordHandler.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/OverrideKeywordHandler.kt index 0edc20157e51..46724c056199 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/OverrideKeywordHandler.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/OverrideKeywordHandler.kt @@ -12,6 +12,9 @@ import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.base.KaContextReceiversOwner +import org.jetbrains.kotlin.analysis.api.components.containingSymbol +import org.jetbrains.kotlin.analysis.api.components.fakeOverrideOriginal +import org.jetbrains.kotlin.analysis.api.components.render import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnnotationsFilter import org.jetbrains.kotlin.analysis.api.renderer.base.contextReceivers.KaContextReceiversRenderer import org.jetbrains.kotlin.analysis.api.renderer.base.contextReceivers.renderers.KaContextReceiverListRenderer @@ -42,7 +45,7 @@ internal class OverrideKeywordHandler( private val importStrategyDetector: ImportStrategyDetector, ) : CompletionKeywordHandler(KtTokens.OVERRIDE_KEYWORD) { - context(KaSession) + context(_: KaSession) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, @@ -59,7 +62,7 @@ internal class OverrideKeywordHandler( ) + lookup } - context(KaSession) + context(session: KaSession) fun createOverrideMemberLookups( parameters: KotlinFirCompletionParameters, declaration: KtCallableDeclaration?, @@ -74,7 +77,9 @@ internal class OverrideKeywordHandler( for (member in members) { val symbolPointer = member.memberInfo.symbolPointer - val memberSymbol = symbolPointer.restoreSymbol() + val memberSymbol = with(session) { + symbolPointer.restoreSymbol() + } requireNotNull(memberSymbol) { "${symbolPointer::class} can't be restored" } if (declaration != null && !canCompleteDeclarationWithMember(declaration, memberSymbol)) continue @@ -97,7 +102,7 @@ internal class OverrideKeywordHandler( } else allMembers.toList() } - context(KaSession) + context(_: KaSession) private fun canCompleteDeclarationWithMember( declaration: KtCallableDeclaration, symbolToOverride: KaCallableSymbol @@ -115,7 +120,7 @@ internal class OverrideKeywordHandler( else -> false } - context(KaSession) + context(session: KaSession) @OptIn(KaExperimentalApi::class) private fun createLookupElementToGenerateSingleOverrideMember( member: KtClassMember, @@ -125,7 +130,7 @@ internal class OverrideKeywordHandler( project: Project, ): OverridesCompletionLookupElementDecorator { val symbolPointer = member.memberInfo.symbolPointer - val memberSymbol = symbolPointer.restoreSymbol() + val memberSymbol = with(session) { symbolPointer.restoreSymbol() } requireNotNull(memberSymbol) { "${symbolPointer::class} can't be restored" } check(memberSymbol is KaNamedSymbol) diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ReturnKeywordHandler.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ReturnKeywordHandler.kt index a1d63f826ec7..da5b37f0ca33 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ReturnKeywordHandler.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ReturnKeywordHandler.kt @@ -7,6 +7,10 @@ import com.intellij.codeInsight.lookup.LookupElement import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.isClassType +import org.jetbrains.kotlin.analysis.api.components.isNullable +import org.jetbrains.kotlin.analysis.api.components.isUnitType +import org.jetbrains.kotlin.analysis.api.components.returnType import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.idea.completion.createKeywordElement import org.jetbrains.kotlin.idea.completion.createKeywordElementWithSpace @@ -29,7 +33,7 @@ import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf * Implementation in K1: [org.jetbrains.kotlin.idea.completion.returnExpressionItems] */ internal object ReturnKeywordHandler : CompletionKeywordHandler(KtTokens.RETURN_KEYWORD) { - context(KaSession) + context(_: KaSession) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, @@ -67,7 +71,7 @@ internal object ReturnKeywordHandler : CompletionKeywordHandler(KtTok return result } - context(KaSession) + context(_: KaSession) private fun addAllReturnVariants( result: MutableList, returnType: KaType, @@ -89,7 +93,7 @@ internal object ReturnKeywordHandler : CompletionKeywordHandler(KtTok } } - context(KaSession) + context(_: KaSession) private fun getExpressionsToReturnByType(returnType: KaType): List = buildList { if (returnType.isNullable) { add(ExpressionTarget("null", addToLookupElementTail = false)) diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/SuperKeywordHandler.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/SuperKeywordHandler.kt index 761cc5d8a7ce..9d99764358c0 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/SuperKeywordHandler.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/SuperKeywordHandler.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtExpression internal object SuperKeywordHandler : CompletionKeywordHandler(KtTokens.SUPER_KEYWORD) { - context(KaSession) + context(_: KaSession) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ThisKeywordHandler.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ThisKeywordHandler.kt index 78957c74058f..e6ee9d995b33 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ThisKeywordHandler.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/keywords/ThisKeywordHandler.kt @@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaImplicitReceiver +import org.jetbrains.kotlin.analysis.api.components.scopeContext import org.jetbrains.kotlin.analysis.api.symbols.KaAnonymousFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaClassKind import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol @@ -31,7 +32,7 @@ internal class ThisKeywordHandler( private val prefixMatcher: PrefixMatcher, ) : CompletionKeywordHandler(KtTokens.THIS_KEYWORD) { - context(KaSession) + context(_: KaSession) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, @@ -65,7 +66,7 @@ internal class ThisKeywordHandler( return result } - context(KaSession) + context(_: KaSession) private fun canReferenceSymbolByThis(parameters: CompletionParameters, symbol: KaSymbol): Boolean { if (symbol !is KaClassSymbol) return true if (symbol.classKind != KaClassKind.COMPANION_OBJECT) return true @@ -73,14 +74,14 @@ internal class ThisKeywordHandler( return parameters.offset in companionPsi.textRange } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun createThisLookupElement(receiver: KaImplicitReceiver, labelName: Name?): LookupElement { return createKeywordElement(KtTokens.THIS_KEYWORD.value, labelName.labelNameToTail(), lookupObject = KeywordLookupObject()) .withTypeText(receiver.type.renderVerbose()) } - context(KaSession) + context(_: KaSession) private fun getThisLabelBySymbol(symbol: KaSymbol): Name? = when { symbol is KaNamedSymbol && !symbol.name.isSpecial -> symbol.name symbol is KaAnonymousFunctionSymbol -> { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/utils.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/utils.kt index 66e352d76c00..8642224ba2f1 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/utils.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/utils.kt @@ -8,6 +8,7 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation import com.intellij.openapi.util.NlsSafe import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaScopeKind +import org.jetbrains.kotlin.analysis.api.components.containingDeclaration import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.symbols.KaConstructorSymbol @@ -35,7 +36,7 @@ import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.util.OperatorNameConventions -context(KaSession) +context(_: KaSession) internal fun createCallableLookupElements( context: WeighingContext, parameters: KotlinFirCompletionParameters, @@ -119,7 +120,7 @@ private fun LookupElementBuilder.applyKindToPresentation(): LookupElementBuilder else -> this } -context(KaSession) +context(_: KaSession) internal fun createOperatorLookupElement( context: WeighingContext, signature: KaFunctionSignature<*>, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/handlers/TrailingLambdaInsertionHandler.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/handlers/TrailingLambdaInsertionHandler.kt index d0ad8ce97fe5..6d4e79048f42 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/handlers/TrailingLambdaInsertionHandler.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/handlers/TrailingLambdaInsertionHandler.kt @@ -11,11 +11,13 @@ import com.intellij.codeInsight.template.TextResult import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.render import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnnotationsFilter import org.jetbrains.kotlin.analysis.api.renderer.types.KaTypeRenderer import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource import org.jetbrains.kotlin.analysis.api.types.KaFunctionType import org.jetbrains.kotlin.analysis.api.types.KaType +import org.jetbrains.kotlin.analysis.api.useSiteModule import org.jetbrains.kotlin.idea.base.codeInsight.KotlinNameSuggester import org.jetbrains.kotlin.idea.completion.api.serialization.SerializableInsertHandler import org.jetbrains.kotlin.name.Name @@ -82,7 +84,7 @@ internal class TrailingLambdaInsertionHandler private constructor( * Returns the [TrailingLambdaInsertionHandler] if the project supports using templates, null otherwise. */ @OptIn(KaExperimentalApi::class) - context(KaSession) + context(_: KaSession) fun create(functionType: KaFunctionType): TrailingLambdaInsertionHandler? { if (TemplateManager.getInstance(useSiteModule.project) == null) return null val parameterNames = functionType.parameters.map { it.name } @@ -99,7 +101,7 @@ private data class TrailingLambdaParameterData( val typeText: String, ) -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun buildTrailingLambdaParameterData( trailingFunctionType: KaFunctionType, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CallableInsertionOptions.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CallableInsertionOptions.kt index 03852c86d6cc..c6913d834170 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CallableInsertionOptions.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CallableInsertionOptions.kt @@ -16,7 +16,7 @@ data class CallableInsertionOptions( val insertionStrategy: CallableInsertionStrategy, ) -context(KaSession) +context(_: KaSession) internal fun detectCallableOptions(symbol: KaCallableSymbol, importStrategyDetector: ImportStrategyDetector): CallableInsertionOptions { return CallableInsertionOptions( importingStrategy = importStrategyDetector.detectImportStrategyForCallableSymbol(symbol), diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CompletionShortNamesRenderer.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CompletionShortNamesRenderer.kt index 40a261b53d06..9d0205963bdb 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CompletionShortNamesRenderer.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/CompletionShortNamesRenderer.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.completion.lookups import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.render import org.jetbrains.kotlin.analysis.api.renderer.types.KaExpandedTypeRenderingMode import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource import org.jetbrains.kotlin.analysis.api.renderer.types.renderers.KaFunctionalTypeRenderer @@ -19,26 +20,26 @@ import org.jetbrains.kotlin.types.Variance internal object CompletionShortNamesRenderer { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun renderFunctionalTypeParameters(functionalType: KaFunctionType): String = functionalType.parameterTypes.joinToString( prefix = "(", postfix = ")", ) { it.renderVerbose() } - context(KaSession) + context(_: KaSession) fun renderVariable(variable: KaVariableSignature<*>): String { return renderReceiver(variable) } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun renderReceiver(variable: KaVariableSignature<*>): String { val receiverType = variable.receiverType ?: return "" return receiverType.renderVerbose() + "." } - context(KaSession) + context(_: KaSession) fun renderFunctionParameters( parameters: List>, ): @NonNls String = parameters.joinToString( @@ -46,7 +47,7 @@ internal object CompletionShortNamesRenderer { postfix = ")", ) { renderFunctionParameter(it) } - context(KaSession) + context(_: KaSession) fun renderTrailingFunction( trailingFunctionSignature: KaVariableSignature, trailingFunctionType: KaFunctionType, @@ -59,7 +60,7 @@ internal object CompletionShortNamesRenderer { append(" }") } - context(KaSession) + context(_: KaSession) private fun renderFunctionParameter( parameter: KaVariableSignature, ): @NonNls String = buildString { @@ -78,7 +79,7 @@ internal object CompletionShortNamesRenderer { } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun A.appendParameter( parameterName: Name, @@ -98,7 +99,7 @@ internal object CompletionShortNamesRenderer { } } -context(KaSession) +context(_: KaSession) @KaExperimentalApi internal fun KaType.renderVerbose(): @NonNls String = render( renderer = CompletionShortNamesRenderer.rendererVerbose, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TailTextProvider.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TailTextProvider.kt index df286e05cb19..2e70326ef596 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TailTextProvider.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TailTextProvider.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.renderer.render @ApiStatus.Internal object TailTextProvider { - context(KaSession) + context(_: KaSession) fun getTailText( signature: KaCallableSignature<*>, useFqName: Boolean = false, @@ -32,7 +32,7 @@ object TailTextProvider { return getTailText(symbol, useFqName = useFqName) } - context(KaSession) + context(_: KaSession) fun getTailText( symbol: KaCallableSymbol, useFqName: Boolean = false, @@ -42,7 +42,7 @@ object TailTextProvider { symbol.getContainerOrAliasPresentation(useFqName = useFqName)?.let { append(it) } } - context(KaSession) + context(_: KaSession) private fun KaCallableSymbol.getContainerOrAliasPresentation(isFunctionalVariableCall: Boolean = false, useFqName: Boolean = false): String? { return if (useFqName) { val callableId = callableId ?: return null @@ -53,7 +53,7 @@ object TailTextProvider { } } - context(KaSession) + context(_: KaSession) fun getTailTextForVariableCall( functionalType: KaFunctionType, signature: KaVariableSignature<*>, @@ -70,7 +70,7 @@ object TailTextProvider { signature.symbol.getContainerOrAliasPresentation(useFqName = useFqName, isFunctionalVariableCall = true)?.let { append(it) } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun getTailText( symbol: KaClassLikeSymbol, @@ -98,14 +98,14 @@ object TailTextProvider { } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun StringBuilder.renderReceiverType(receiverType: KaType) { val renderedType = receiverType.renderVerbose() append(KotlinCompletionImplK2Bundle.message("presentation.tail.for.0", renderedType)) } - context(KaSession) + context(_: KaSession) private fun KaCallableSymbol.getContainerPresentation(isFunctionalVariableCall: Boolean): String? { val callableId = callableId ?: return null val className = callableId.className @@ -126,7 +126,7 @@ object TailTextProvider { private fun FqName.asStringForTailText(): String = if (isRoot) "" else render() - context(KaSession) + context(_: KaSession) fun insertLambdaBraces(symbol: KaFunctionType): Boolean { val singleParam = symbol.parameterTypes.singleOrNull() return singleParam != null && singleParam is KaFunctionType diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TypeTextProvider.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TypeTextProvider.kt index 40705f3b3844..ad0468a564e5 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TypeTextProvider.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/TypeTextProvider.kt @@ -16,7 +16,7 @@ internal object TypeTextProvider { /** * Creates lookup element's type text, based on provided classifier symbol. */ - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun getTypeTextForClassifier(symbol: KaClassifierSymbol): String? = when (symbol) { is KaTypeAliasSymbol -> symbol.expandedType.renderVerbose() @@ -34,7 +34,7 @@ internal object TypeTextProvider { * ``` * a lookup element `foo()` is suggested and its type text should be `Unit`. */ - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun getTypeTextForCallable( signature: KaCallableSignature<*>, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/KotlinFirLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/KotlinFirLookupElementFactory.kt index c6cae1af06d9..e1ee88d5feed 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/KotlinFirLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/KotlinFirLookupElementFactory.kt @@ -7,6 +7,7 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder import org.jetbrains.annotations.ApiStatus import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.asSignature import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.signatures.KaVariableSignature @@ -27,7 +28,7 @@ import org.jetbrains.kotlin.name.Name @ApiStatus.Internal object KotlinFirLookupElementFactory { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun createConstructorCallLookupElement( containingSymbol: KaNamedClassSymbol, @@ -39,7 +40,7 @@ object KotlinFirLookupElementFactory { return ClassLookupElementFactory.createConstructorLookup(containingSymbol, visibleConstructorSymbols, importingStrategy, aliasName) } - context(KaSession) + context(_: KaSession) fun createClassifierLookupElement( symbol: KaClassifierSymbol, importingStrategy: ImportStrategy = ImportStrategy.DoNothing, @@ -52,7 +53,7 @@ object KotlinFirLookupElementFactory { is KaTypeParameterSymbol -> TypeParameterLookupElementFactory.createLookup(symbol) } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun createLookupElement( symbol: KaNamedSymbol, @@ -71,7 +72,7 @@ object KotlinFirLookupElementFactory { else -> throw IllegalArgumentException("Cannot create a lookup element for $symbol") } - context(KaSession) + context(_: KaSession) fun createCallableLookupElement( name: Name, signature: KaCallableSignature<*>, @@ -83,7 +84,7 @@ object KotlinFirLookupElementFactory { is KaVariableSignature<*> -> VariableLookupElementFactory.createLookup(signature, options, aliasName) } - context(KaSession) + context(_: KaSession) fun createBracketOperatorLookupElement( operatorName: Name, signature: KaCallableSignature<*>, @@ -100,18 +101,18 @@ object KotlinFirLookupElementFactory { fun createPackagePartLookupElement(packagePartFqName: FqName): LookupElement = PackagePartLookupElementFactory.createLookup(packagePartFqName) - context(KaSession) + context(_: KaSession) fun createNamedArgumentLookupElement(name: Name, types: List): LookupElement = NamedArgumentLookupElementFactory.createLookup(name, types) fun createNamedArgumentWithValueLookupElement(name: Name, value: String): LookupElement = NamedArgumentLookupElementFactory.createLookup(name, value) - context(KaSession) + context(_: KaSession) fun createTypeLookupElement(type: KaType): LookupElement? = TypeLookupElementFactory.createLookup(type) - context(KaSession) + context(_: KaSession) fun createTypeLookupElement(classSymbol: KaClassifierSymbol): LookupElement? = TypeLookupElementFactory.createLookup(classSymbol) } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/NamedArgumentLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/NamedArgumentLookupElementFactory.kt index a7a19b3fe11a..13d00457db79 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/NamedArgumentLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/NamedArgumentLookupElementFactory.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.renderer.render internal object NamedArgumentLookupElementFactory { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun createLookup(name: Name, types: List): LookupElement { val typeText = types.singleOrNull()?.renderVerbose() ?: "..." diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/TypeLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/TypeLookupElementFactory.kt index a5ae9664424d..11007b39a2c9 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/TypeLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/factories/TypeLookupElementFactory.kt @@ -10,6 +10,7 @@ import kotlinx.serialization.Serializable import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.render import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnnotationsFilter import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol @@ -30,7 +31,7 @@ import org.jetbrains.kotlin.types.Variance internal object TypeLookupElementFactory { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun createLookup(type: KaType): LookupElement? { val renderedType = type.render(TYPE_RENDERING_OPTIONS_SHORT_NAMES, position = Variance.INVARIANT) @@ -56,7 +57,7 @@ internal object TypeLookupElementFactory { } } - context(KaSession) + context(_: KaSession) fun createLookup(symbol: KaClassifierSymbol): LookupElement? { val relativeName = symbol.name ?: return null diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/utils.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/utils.kt index 8bc716d12bd1..eb5ef06c3f34 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/utils.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/lookups/utils.kt @@ -11,6 +11,9 @@ import com.intellij.psi.util.* import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.deprecationStatus +import org.jetbrains.kotlin.analysis.api.components.getterDeprecationStatus +import org.jetbrains.kotlin.analysis.api.components.setterDeprecationStatus import org.jetbrains.kotlin.analysis.api.permissions.KaAllowAnalysisFromWriteAction import org.jetbrains.kotlin.analysis.api.permissions.KaAllowAnalysisOnEdt import org.jetbrains.kotlin.analysis.api.permissions.allowAnalysisFromWriteAction @@ -37,7 +40,7 @@ import org.jetbrains.kotlin.psi.KtSuperExpression import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression -context(KaSession) +context(_: KaSession) internal fun withClassifierSymbolInfo( symbol: KaClassifierSymbol, elementBuilder: LookupElementBuilder @@ -47,7 +50,7 @@ internal fun withClassifierSymbolInfo( .withTypeText(getTypeTextForClassifier(symbol)) .withStrikeoutness(symbol.requireStrikeoutness()) -context(KaSession) +context(_: KaSession) internal fun withCallableSignatureInfo( signature: KaCallableSignature<*>, elementBuilder: LookupElementBuilder @@ -57,7 +60,7 @@ internal fun withCallableSignatureInfo( .withTypeText(getTypeTextForCallable(signature, treatAsFunctionCall = elementBuilder.`object` is FunctionCallLookupObject)) .withStrikeoutness(signature.symbol.requireStrikeoutness()) -context(KaSession) +context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun KaDeclarationSymbol.requireStrikeoutness(): Boolean = when { deprecationStatus != null -> true @@ -134,6 +137,6 @@ private fun getSuperTypeQualifierRange(typeReference: KtTypeReference): TextRang (typeReference.nextLeaf { it.elementType == KtTokens.GT } ?: typeReference).endOffset ) -context(KaSession) +context(_: KaSession) internal fun KaCallableSymbol.isExtensionCall(isFunctionalVariableCall: Boolean): Boolean = isExtension || isFunctionalVariableCall && (returnType as? KaFunctionType)?.hasReceiver == true \ No newline at end of file diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ClassifierWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ClassifierWeigher.kt index 92cd1fadc660..f4ff943ea075 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ClassifierWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ClassifierWeigher.kt @@ -21,7 +21,7 @@ internal object ClassifierWeigher { NON_LOCAL } - context(KaSession) + context(_: KaSession) fun addWeight( lookupElement: LookupElement, symbol: KaSymbol, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/DeprecatedWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/DeprecatedWeigher.kt index 777e7c94b59e..0a2e6ebb20f5 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/DeprecatedWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/DeprecatedWeigher.kt @@ -6,6 +6,7 @@ import com.intellij.codeInsight.lookup.LookupElementWeigher import com.intellij.openapi.util.Key import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.deprecationStatus import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol import org.jetbrains.kotlin.psi.NotNullableUserDataProperty @@ -13,7 +14,7 @@ internal object DeprecatedWeigher { const val WEIGHER_ID = "kotlin.deprecated" private var LookupElement.isDeprecated: Boolean by NotNullableUserDataProperty(Key("KOTLIN_DEPRECATED"), false) - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun addWeight(lookupElement: LookupElement, symbol: KaSymbol) { lookupElement.isDeprecated = symbol.deprecationStatus != null diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ExpectedTypeWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ExpectedTypeWeigher.kt index 489f28b28ae0..0cf8ec51c2c9 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ExpectedTypeWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/ExpectedTypeWeigher.kt @@ -8,12 +8,19 @@ import com.intellij.openapi.util.Key import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.DefaultTypeClassIds +import org.jetbrains.kotlin.analysis.api.components.buildClassType +import org.jetbrains.kotlin.analysis.api.components.expandedSymbol +import org.jetbrains.kotlin.analysis.api.components.isMarkedNullable +import org.jetbrains.kotlin.analysis.api.components.isNothingType +import org.jetbrains.kotlin.analysis.api.components.isSubClassOf +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf +import org.jetbrains.kotlin.analysis.api.components.isUnitType +import org.jetbrains.kotlin.analysis.api.components.withNullability import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol import org.jetbrains.kotlin.analysis.api.types.KaType -import org.jetbrains.kotlin.analysis.api.types.KaTypeNullability import org.jetbrains.kotlin.idea.codeinsight.utils.isEnum import org.jetbrains.kotlin.idea.completion.KeywordLookupObject import org.jetbrains.kotlin.idea.completion.impl.k2.lookups.factories.NamedArgumentLookupObject @@ -27,7 +34,7 @@ internal object ExpectedTypeWeigher { element.matchesExpectedType ?: MatchesExpectedType.NON_TYPABLE } - context(KaSession) + context(_: KaSession) fun addWeight(context: WeighingContext, lookupElement: LookupElement, symbol: KaSymbol?) { val expectedType = context.expectedType @@ -36,7 +43,7 @@ internal object ExpectedTypeWeigher { lookupElement.`object` is NamedArgumentLookupObject -> MatchesExpectedType.MATCHES lookupElement.`object` is KeywordLookupObject && expectedType != null -> { val actualType = when (lookupElement.lookupString) { - KtTokens.NULL_KEYWORD.value -> buildClassType(DefaultTypeClassIds.NOTHING).withNullability(KaTypeNullability.NULLABLE) + KtTokens.NULL_KEYWORD.value -> buildClassType(DefaultTypeClassIds.NOTHING).withNullability(true) KtTokens.TRUE_KEYWORD.value, KtTokens.FALSE_KEYWORD.value -> buildClassType(DefaultTypeClassIds.BOOLEAN) @@ -51,7 +58,7 @@ internal object ExpectedTypeWeigher { } } - context(KaSession) + context(_: KaSession) private fun matchesExpectedType( symbol: KaSymbol, expectedType: KaType, @@ -84,13 +91,13 @@ internal object ExpectedTypeWeigher { ; companion object { - context(KaSession) + context(_: KaSession) fun matches(actualType: KaType, expectedType: KaType): MatchesExpectedType = when { // We exclude the Nothing type because it would match everything, but we should not give it priority. // The only exception where we should prefer is for the `null` constant, which will be of type `Nothing?` actualType.isNothingType && !actualType.isMarkedNullable -> NOT_MATCHES actualType.isSubtypeOf(expectedType) -> MATCHES - actualType.withNullability(KaTypeNullability.NON_NULLABLE).isSubtypeOf(expectedType) -> MATCHES_WITHOUT_NULLABILITY + actualType.withNullability(false).isSubtypeOf(expectedType) -> MATCHES_WITHOUT_NULLABILITY else -> NOT_MATCHES } } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/K2SoftDeprecationWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/K2SoftDeprecationWeigher.kt index dab69c4c28ea..ba6e8d763980 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/K2SoftDeprecationWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/K2SoftDeprecationWeigher.kt @@ -18,7 +18,7 @@ internal object K2SoftDeprecationWeigher { private var LookupElement.isSoftDeprecated: Boolean by NotNullableUserDataProperty(Key("KOTLIN_SOFT_DEPRECATED"), false) - context(KaSession) + context(_: KaSession) fun addWeight( lookupElement: LookupElement, symbol: KaCallableSymbol, @@ -40,7 +40,7 @@ internal object K2SoftDeprecationWeigher { * Lower soft-deprecated `Enum.values()` method in completion. * See [KT-22298](https://youtrack.jetbrains.com/issue/KTIJ-22298/Soft-deprecate-Enumvalues-for-Kotlin-callers). */ - context(KaSession) + context(_: KaSession) private fun isEnumValuesSoftDeprecatedMethod( symbol: KaCallableSymbol, languageVersionSettings: LanguageVersionSettings, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/KindWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/KindWeigher.kt index 89d2659220db..b9034bb24623 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/KindWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/KindWeigher.kt @@ -45,7 +45,7 @@ internal object KindWeigher { private var LookupElement.isSymbolToSkip: Boolean by NotNullableUserDataProperty(Key("KOTLIN_KIND_WEIGHER_IS_SYMBOL_TO_SKIP"), false) - context(KaSession) + context(_: KaSession) fun addWeight(lookupElement: LookupElement, symbol: KaSymbol?, context: WeighingContext) { lookupElement.isSymbolToSkip = symbol in context.symbolsToSkip lookupElement.isEnumEntry = symbol is KaEnumEntrySymbol diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/NotImportedWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/NotImportedWeigher.kt index d903ced83038..84a507d6ae22 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/NotImportedWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/NotImportedWeigher.kt @@ -25,7 +25,7 @@ internal object NotImportedWeigher { NOT_TO_BE_USED_IN_KOTLIN } - context(KaSession) + context(_: KaSession) fun addWeight(context: WeighingContext, element: LookupElement, symbol: KaSymbol, availableWithoutImport: Boolean) { if (availableWithoutImport) return val fqName = when (symbol) { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferAbstractForOverrideWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferAbstractForOverrideWeigher.kt index fff7c0290886..1f24caf0060e 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferAbstractForOverrideWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferAbstractForOverrideWeigher.kt @@ -16,7 +16,7 @@ internal object PreferAbstractForOverrideWeigher { IMPLEMENTED, } - context(KaSession) + context(_: KaSession) fun addWeight(element: OverridesCompletionLookupElementDecorator) { element.overrideType = if (element.isImplement) Weight.NOT_IMPLEMENTED else Weight.IMPLEMENTED } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferContextualCallablesWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferContextualCallablesWeigher.kt index 865482b42f24..39bda135d242 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferContextualCallablesWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferContextualCallablesWeigher.kt @@ -36,7 +36,7 @@ internal object PreferContextualCallablesWeigher { * Marks [symbol] as contextual if [symbol] or one of its overridden symbols is equal to or overridden by * one of the callables containing current position. */ - context(KaSession) + context(_: KaSession) fun addWeight(lookupElement: LookupElement, symbol: KaCallableSymbol, contextualSymbolsCache: WeighingContext.ContextualSymbolsCache) { if (symbol !is KaNamedSymbol || symbol.name !in contextualSymbolsCache) return diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferFewerParametersWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferFewerParametersWeigher.kt index beef8817d2e6..2cf3de0a1b7a 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferFewerParametersWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferFewerParametersWeigher.kt @@ -15,7 +15,7 @@ internal object PreferFewerParametersWeigher { private var LookupElement.parametersCount: Int by NotNullableUserDataProperty(Key("KOTLIN_PREFER_FEWER_PARAMETERS_WEIGHER"), 0) - context(KaSession) + context(_: KaSession) fun addWeight(lookupElement: LookupElement, symbol: KaCallableSymbol) { lookupElement.parametersCount = (symbol as? KaFunctionSymbol)?.valueParameters?.size ?: 0 } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferGetSetMethodsToPropertyWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferGetSetMethodsToPropertyWeigher.kt index 426f7377c321..81ebaa3031a7 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferGetSetMethodsToPropertyWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferGetSetMethodsToPropertyWeigher.kt @@ -15,7 +15,7 @@ internal object PreferGetSetMethodsToPropertyWeigher { const val WEIGHER_ID = "kotlin.preferGetSetMethodsToProperty" private var LookupElement.propertyName by UserDataProperty(Key("KOTLIN_PROPERTY_NAME")) - context(KaSession) + context(_: KaSession) fun addWeight(lookupElement: LookupElement, symbol: KaSymbol) { lookupElement.propertyName = (symbol as? KaPropertySymbol)?.name } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferredSubtypeWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferredSubtypeWeigher.kt index 6c4a154d8002..e499da18fe2d 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferredSubtypeWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/PreferredSubtypeWeigher.kt @@ -5,6 +5,10 @@ import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElementWeigher import com.intellij.openapi.util.Key import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.defaultType +import org.jetbrains.kotlin.analysis.api.components.isNothingType +import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf +import org.jetbrains.kotlin.analysis.api.components.semanticallyEquals import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext @@ -19,7 +23,7 @@ internal object PreferredSubtypeWeigher { UNRELATED } - context(KaSession) + context(_: KaSession) fun addWeight(context: WeighingContext, lookupElement: LookupElement, symbol: KaSymbol) { val preferredSubtype = context.preferredSubtype ?: return val actualClassType = (symbol as? KaClassLikeSymbol)?.defaultType ?: return diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/VariableOrFunctionWeigher.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/VariableOrFunctionWeigher.kt index fabeed49f5c4..078bdff61adb 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/VariableOrFunctionWeigher.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/VariableOrFunctionWeigher.kt @@ -22,7 +22,7 @@ object VariableOrFunctionWeigher { const val WEIGHER_ID = "kotlin.variableOrFunction" private var LookupElement.variableOrFunction by UserDataProperty(Key("KOTLIN_VARIABLE_OR_FUNCTION_WEIGHT")) - context(KaSession) + context(_: KaSession) fun addWeight(lookupElement: LookupElement, symbol: KaSymbol) { when (symbol) { is KaVariableSymbol -> { diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/Weighers.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/Weighers.kt index 9821c7aa2f55..2638bc39e816 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/Weighers.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/weighers/Weighers.kt @@ -9,6 +9,14 @@ import com.intellij.psi.util.parentsOfType import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.components.KaImplicitReceiver import org.jetbrains.kotlin.analysis.api.components.KaScopeContext +import org.jetbrains.kotlin.analysis.api.components.allOverriddenSymbols +import org.jetbrains.kotlin.analysis.api.components.expressionType +import org.jetbrains.kotlin.analysis.api.components.fakeOverrideOriginal +import org.jetbrains.kotlin.analysis.api.components.importingScopeContext +import org.jetbrains.kotlin.analysis.api.components.resolveToCall +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbol +import org.jetbrains.kotlin.analysis.api.components.scopeContext +import org.jetbrains.kotlin.analysis.api.components.withNullability import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeOwner import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion @@ -18,10 +26,10 @@ import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolModality import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol +import org.jetbrains.kotlin.analysis.api.symbols.symbol import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.analysis.api.types.KaErrorType import org.jetbrains.kotlin.analysis.api.types.KaType -import org.jetbrains.kotlin.analysis.api.types.KaTypeNullability import org.jetbrains.kotlin.analysis.utils.printer.parentOfType import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.idea.base.analysis.api.utils.getDefaultImportPaths @@ -63,8 +71,8 @@ internal class WeighingContext private constructor( class ContextualSymbolsCache(private val symbolsContainingPosition: Map>) { private val contextualOverriddenSymbols: MutableMap> = mutableMapOf() - context(KaSession) - fun symbolIsPresentInContext(symbol: KaCallableSymbol): Boolean = withValidityAssertion { + context(session: KaSession) + fun symbolIsPresentInContext(symbol: KaCallableSymbol): Boolean = session.withValidityAssertion { if (symbol !is KaNamedSymbol) return false val symbols = symbolsContainingPosition[symbol.name].orEmpty() @@ -77,8 +85,8 @@ internal class WeighingContext private constructor( return symbol.fakeOverrideOriginal in overriddenSymbols } - context(KaSession) - operator fun contains(name: Name): Boolean = withValidityAssertion { name in symbolsContainingPosition } + context(session: KaSession) + operator fun contains(name: Name): Boolean = session.withValidityAssertion { name in symbolsContainingPosition } } val scopeContext: KaScopeContext @@ -111,7 +119,7 @@ internal class WeighingContext private constructor( companion object { - context(KaSession) + context(session: KaSession) fun create( parameters: KotlinFirCompletionParameters, elementInCompletionFile: PsiElement, @@ -124,7 +132,7 @@ internal class WeighingContext private constructor( val completionFile = parameters.completionFile val defaultImportPaths = completionFile.getDefaultImportPaths(useSiteModule = parameters.useSiteModule).toSet() return WeighingContext( - token = token, + token = session.token, languageVersionSettings = parameters.languageVersionSettings, positionInFakeCompletionFile = elementInCompletionFile, myScopeContext = scopeContext ?: completionFile.importingScopeContext, @@ -143,14 +151,14 @@ internal class WeighingContext private constructor( } // For `is` and `as` operations we want to prefer sealed inheritors - context(KaSession) + context(_: KaSession) fun KtExpression.getPreferredSealedType(): KaClassType? { val comparisonType = expressionType as? KaClassType ?: return null if (comparisonType.symbol.modality != KaSymbolModality.SEALED) return null return comparisonType } - context(KaSession) + context(_: KaSession) fun create( parameters: KotlinFirCompletionParameters, positionContext: KotlinNameReferencePositionContext, @@ -212,7 +220,7 @@ internal class WeighingContext private constructor( * * TODO: It seems like a bug in the analysis API that this is required: KT-76480 */ - context(KaSession) + context(_: KaSession) internal fun getAnnotationLiteralExpectedType( nameExpression: KtElement, ): KaType? { @@ -224,7 +232,7 @@ internal class WeighingContext private constructor( return callArgument.symbol.returnType } - context(KaSession) + context(_: KaSession) internal fun getEqualityExpectedType( nameExpression: KtElement, ): KaType? { @@ -252,14 +260,14 @@ internal class WeighingContext private constructor( return expression?.expressionType ?.takeUnless { it is KaErrorType } - ?.withNullability(newNullability = KaTypeNullability.NULLABLE) + ?.withNullability(true) } private fun Set.hasImport(name: FqName): Boolean { return ImportPath(name, false) in this || ImportPath(name.parent(), true) in this } - context(KaSession) + context(_: KaSession) private fun getContextualSymbolsCache( elementInCompletionFile: PsiElement, originalFile: KtFile, @@ -281,7 +289,7 @@ internal class WeighingContext private constructor( internal object Weighers { - context(KaSession) + context(_: KaSession) fun E.applyWeighs( context: WeighingContext, symbolWithOrigin: KtSymbolWithOrigin<*>? = null, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/ClassLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/ClassLookupElementFactory.kt index 430a2be3760d..dbaa8470a88a 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/ClassLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/ClassLookupElementFactory.kt @@ -8,6 +8,7 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.asSignature import org.jetbrains.kotlin.analysis.api.symbols.KaClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol @@ -21,7 +22,7 @@ import org.jetbrains.kotlin.renderer.render internal object ClassLookupElementFactory { - context(KaSession) + context(_: KaSession) fun createLookup( symbol: KaClassLikeSymbol, importingStrategy: ImportStrategy, @@ -34,7 +35,7 @@ internal object ClassLookupElementFactory { .let { withClassifierSymbolInfo(symbol, it) } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun createConstructorLookup( containingSymbol: KaNamedClassSymbol, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/FunctionLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/FunctionLookupElementFactory.kt index 5b73094a0eb7..96015dbc7400 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/FunctionLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/FunctionLookupElementFactory.kt @@ -18,6 +18,10 @@ import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.annotations.KaAnnotationValue import org.jetbrains.kotlin.analysis.api.base.KaConstantValue +import org.jetbrains.kotlin.analysis.api.components.createSubstitutor +import org.jetbrains.kotlin.analysis.api.components.lowerBoundIfFlexible +import org.jetbrains.kotlin.analysis.api.components.samConstructor +import org.jetbrains.kotlin.analysis.api.components.upperBoundIfFlexible import org.jetbrains.kotlin.analysis.api.signatures.KaCallableSignature import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature import org.jetbrains.kotlin.analysis.api.signatures.KaVariableSignature @@ -45,7 +49,7 @@ import org.jetbrains.kotlin.renderer.render internal object FunctionLookupElementFactory { - context(KaSession) + context(_: KaSession) fun createLookup( shortName: Name, signature: KaFunctionSignature<*>, @@ -68,7 +72,7 @@ internal object FunctionLookupElementFactory { return createLookupElement(signature, lookupObject, useFqNameInTailText = aliasName != null) } - context(KaSession) + context(_: KaSession) internal fun getTrailingFunctionSignature( signature: KaFunctionSignature<*>, checkDefaultValues: Boolean = true, @@ -82,7 +86,7 @@ internal object FunctionLookupElementFactory { ?.takeUnless { it.symbol.isVararg } } - context(KaSession) + context(_: KaSession) internal fun createTrailingFunctionDescriptor( trailingFunctionSignature: KaVariableSignature, ): TrailingFunctionDescriptor? { @@ -120,7 +124,7 @@ internal object FunctionLookupElementFactory { } @OptIn(KaExperimentalApi::class) - context(KaSession) + context(_: KaSession) @ApiStatus.Experimental fun createLookupWithTrailingLambda( shortName: Name, @@ -153,7 +157,7 @@ internal object FunctionLookupElementFactory { } } - context(KaSession) + context(_: KaSession) private fun createLookupElement( signature: KaFunctionSignature<*>, lookupObject: FunctionCallLookupObject, @@ -218,7 +222,7 @@ internal data class WithCallArgsInsertionHandler( } object FunctionInsertionHelper { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun functionCanBeCalledWithoutExplicitTypeArguments( symbol: KaFunctionSymbol, diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/TypeParameterLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/TypeParameterLookupElementFactory.kt index 8cc575930d04..b654097bf82f 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/TypeParameterLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/TypeParameterLookupElementFactory.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.idea.completion.lookups.withClassifierSymbolInfo internal object TypeParameterLookupElementFactory { - context(KaSession) + context(_: KaSession) fun createLookup(symbol: KaTypeParameterSymbol): LookupElementBuilder { return LookupElementBuilder.create(UniqueLookupObject(), symbol.name.asString()) .let { withClassifierSymbolInfo(symbol, it) } diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/VariableLookupElementFactory.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/VariableLookupElementFactory.kt index 8e918e6bf519..9decf5b524b6 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/VariableLookupElementFactory.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/lookups/factories/VariableLookupElementFactory.kt @@ -10,6 +10,8 @@ import kotlinx.serialization.Polymorphic import kotlinx.serialization.Serializable import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.javaGetterName +import org.jetbrains.kotlin.analysis.api.components.javaSetterName import org.jetbrains.kotlin.analysis.api.signatures.KaVariableSignature import org.jetbrains.kotlin.analysis.api.symbols.KaPropertySymbol import org.jetbrains.kotlin.analysis.api.symbols.KaSyntheticJavaPropertySymbol @@ -28,7 +30,7 @@ import org.jetbrains.kotlin.renderer.render internal object VariableLookupElementFactory { - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) fun createLookup( signature: KaVariableSignature<*>, @@ -47,7 +49,7 @@ internal object VariableLookupElementFactory { return withCallableSignatureInfo(signature, builder) } - context(KaSession) + context(_: KaSession) private fun createLookupElementBuilder( options: CallableInsertionOptions, signature: KaVariableSignature<*>, @@ -92,7 +94,7 @@ internal object VariableLookupElementFactory { } } - context(KaSession) + context(_: KaSession) @OptIn(KaExperimentalApi::class) private fun markIfSyntheticJavaProperty( lookupElementBuilder: LookupElementBuilder, diff --git a/plugins/kotlin/completion/impl-shared/BUILD.bazel b/plugins/kotlin/completion/impl-shared/BUILD.bazel index 61872d3e9561..09a973c21e98 100644 --- a/plugins/kotlin/completion/impl-shared/BUILD.bazel +++ b/plugins/kotlin/completion/impl-shared/BUILD.bazel @@ -8,7 +8,7 @@ create_kotlinc_options( "com.intellij.openapi.util.IntellijInternalApi", "org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction", ], - x_context_receivers = True + x_context_parameters = True ) jvm_library( diff --git a/plugins/kotlin/completion/impl-shared/kotlin.completion.impl.shared.iml b/plugins/kotlin/completion/impl-shared/kotlin.completion.impl.shared.iml index 8caf8e5db09f..b719a3a5ba8c 100644 --- a/plugins/kotlin/completion/impl-shared/kotlin.completion.impl.shared.iml +++ b/plugins/kotlin/completion/impl-shared/kotlin.completion.impl.shared.iml @@ -4,7 +4,7 @@ - diff --git a/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/BreakContinueKeywordHanlder.kt b/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/BreakContinueKeywordHanlder.kt index 4e055b16a211..07e7cde741c8 100644 --- a/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/BreakContinueKeywordHanlder.kt +++ b/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/BreakContinueKeywordHanlder.kt @@ -4,7 +4,9 @@ package org.jetbrains.kotlin.idea.completion.implCommon.keywords import com.intellij.codeInsight.completion.CompletionParameters import com.intellij.codeInsight.lookup.LookupElement import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analysis.api.KaContextParameterApi import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.components.resolveToSymbol import org.jetbrains.kotlin.analysis.api.symbols.KaNamedFunctionSymbol import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings @@ -37,7 +39,7 @@ class BreakContinueKeywordHandler(keyword: KtKeywordToken) : CompletionKeywordHa } } - context(KaSession) + context(_: KaSession) fun createLookups(expression: KtExpression?): Collection { if (expression == null) return emptyList() val supportsNonLocalBreakContinue = @@ -55,7 +57,7 @@ class BreakContinueKeywordHandler(keyword: KtKeywordToken) : CompletionKeywordHa } .toList() } - context(KaSession) + context(_: KaSession) private fun canDoNonLocalJump( body: KtDeclarationWithBody, supportsNonLocalBreakContinue: Boolean, @@ -63,7 +65,7 @@ class BreakContinueKeywordHandler(keyword: KtKeywordToken) : CompletionKeywordHa body is KtFunctionLiteral && isInlineFunctionCall(body.findLabelAndCall().second) - context(KaSession) + context(_: KaSession) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, @@ -72,7 +74,8 @@ class BreakContinueKeywordHandler(keyword: KtKeywordToken) : CompletionKeywordHa ): Collection = createLookups(expression) } -context(KaSession) +@OptIn(KaContextParameterApi::class) +context(_: KaSession) fun isInlineFunctionCall(call: KtCallExpression?): Boolean = (call?.calleeExpression as? KtReferenceExpression)?.mainReference ?.resolveToSymbol() diff --git a/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/CompletionKeywordHandler.kt b/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/CompletionKeywordHandler.kt index 88fa678856b3..fc9771aad54c 100644 --- a/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/CompletionKeywordHandler.kt +++ b/plugins/kotlin/completion/impl-shared/src/org/jetbrains/kotlin/idea/completion/implCommon/keywords/CompletionKeywordHandler.kt @@ -13,7 +13,7 @@ abstract class CompletionKeywordHandler( ) { object NO_CONTEXT - context(CONTEXT) + context(_: CONTEXT) abstract fun createLookups( parameters: CompletionParameters, // todo replace with KotlinFirCompletionParameters eventually expression: KtExpression?, @@ -31,13 +31,13 @@ inline fun completionKeywordHandler( project: Project ) -> Collection ) = object : CompletionKeywordHandler(keyword) { - context(CONTEXT) + context(_: CONTEXT) override fun createLookups( parameters: CompletionParameters, expression: KtExpression?, lookup: LookupElement, project: Project - ): Collection = create(this@CONTEXT, parameters, expression, lookup, project) + ): Collection = create(contextOf(), parameters, expression, lookup, project) } /**