mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] replace context receivers with context parameters for completion subsystem
KT-78093 GitOrigin-RevId: 2a691e4f53b70cf7eb1c03779f9a0e369ad99380
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4bf74e2414
commit
091db089ea
@@ -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(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<facet type="kotlin-language" name="Kotlin">
|
||||
<configuration version="5" platform="JVM 17" allPlatforms="JVM [17]" useProjectSettings="false">
|
||||
<compilerSettings>
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -Xopt-in=com.intellij.openapi.util.IntellijInternalApi -Xcontext-receivers -opt-in=org.jetbrains.kotlin.analysis.api.permissions.KaAllowProhibitedAnalyzeFromWriteAction -opt-in=org.jetbrains.kotlin.analysis.api.KaIdeApi -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -Xopt-in=com.intellij.openapi.util.IntellijInternalApi -Xcontext-parameters -opt-in=org.jetbrains.kotlin.analysis.api.permissions.KaAllowProhibitedAnalyzeFromWriteAction -opt-in=org.jetbrains.kotlin.analysis.api.KaIdeApi -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
</compilerSettings>
|
||||
<compilerArguments>
|
||||
<stringArguments>
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<facet type="kotlin-language" name="Kotlin">
|
||||
<configuration version="5" platform="JVM 17" allPlatforms="JVM [17]" useProjectSettings="false">
|
||||
<compilerSettings>
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -opt-in=com.intellij.openapi.util.IntellijInternalApi -opt-in=org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction -Xcontext-receivers -opt-in=org.jetbrains.kotlin.idea.base.util.K1ModeProjectStructureApi -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -opt-in=com.intellij.openapi.util.IntellijInternalApi -opt-in=org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction -Xcontext-parameters -opt-in=org.jetbrains.kotlin.idea.base.util.K1ModeProjectStructureApi -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
</compilerSettings>
|
||||
<compilerArguments>
|
||||
<stringArguments>
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<facet type="kotlin-language" name="Kotlin">
|
||||
<configuration version="5" platform="JVM 17" allPlatforms="JVM [17]" useProjectSettings="false">
|
||||
<compilerSettings>
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -Xopt-in=com.intellij.openapi.util.IntellijInternalApi -Xcontext-receivers -opt-in=org.jetbrains.kotlin.analysis.api.permissions.KaAllowProhibitedAnalyzeFromWriteAction -opt-in=org.jetbrains.kotlin.analysis.api.KaIdeApi -opt-in=org.jetbrains.kotlin.analysis.api.KaContextParameterApi -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -Xopt-in=com.intellij.openapi.util.IntellijInternalApi -Xcontext-parameters -opt-in=org.jetbrains.kotlin.analysis.api.permissions.KaAllowProhibitedAnalyzeFromWriteAction -opt-in=org.jetbrains.kotlin.analysis.api.KaIdeApi -opt-in=org.jetbrains.kotlin.analysis.api.KaContextParameterApi -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
</compilerSettings>
|
||||
<compilerArguments>
|
||||
<stringArguments>
|
||||
|
||||
+5
-3
@@ -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
|
||||
|
||||
+4
-2
@@ -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
|
||||
|
||||
|
||||
+6
-5
@@ -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<P : Any, C : Comparable<C>>(
|
||||
fun createLocalInstance(): LocalInstance = LocalInstance()
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(session: KaSession)
|
||||
private fun <P : KotlinRawPositionContext> K2CompletionSection<P>.executeIfAllowed(context: K2CompletionSectionContext<P>) {
|
||||
with(contributor) {
|
||||
if (!this@KaSession.shouldExecute(context)) return
|
||||
if (!session.shouldExecute(context)) return
|
||||
}
|
||||
runnable(this@KaSession, context)
|
||||
runnable(session, context)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+5
-2
@@ -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(
|
||||
|
||||
+2
-1
@@ -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,
|
||||
|
||||
+43
-43
@@ -62,7 +62,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
priority = K2ContributorSectionPriority.HEURISTIC,
|
||||
) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected open fun getImportStrategy(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
signature: KaCallableSignature<*>,
|
||||
@@ -80,13 +80,13 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
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(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
signature: KaCallableSignature<*>,
|
||||
@@ -96,7 +96,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
getInsertionStrategy(signature)
|
||||
)
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected open fun filter(symbol: KaCallableSymbol): Boolean = !symbol.isIgnoredExpectDeclaration()
|
||||
|
||||
// todo replace with a sealed hierarchy; too many arguments
|
||||
@@ -131,7 +131,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
private fun K2CompletionSectionContext<P>.isWithTrailingLambda(): Boolean =
|
||||
positionContext is KotlinExpressionNameReferencePositionContext
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun Sequence<CallableWithMetadataForCompletion>.createFilteredLookupElements(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter
|
||||
@@ -165,7 +165,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun completeFromLocalScope(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter,
|
||||
@@ -181,7 +181,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
private fun createAndFilterMetadataForMemberCallables(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
@@ -197,7 +197,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun completeWithoutReceiverFromIndex(
|
||||
context: K2CompletionSectionContext<P>
|
||||
): Sequence<CallableWithMetadataForCompletion> = sequence {
|
||||
@@ -230,7 +230,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
yieldAll(extensionDescriptors)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun completeFromIndex(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter,
|
||||
@@ -247,7 +247,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected open fun collectDotCompletionFromLocalScope(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
scopeContext: KaScopeContext,
|
||||
@@ -281,7 +281,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected open fun collectDotCompletionFromIndex(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
explicitReceiver: KtElement,
|
||||
@@ -313,7 +313,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
private val KaNamedClassSymbol.canBeUsedAsReceiver: Boolean
|
||||
get() = classKind.isObject || companionObject != null
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectDotCompletionForPackageReceiver(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
packageSymbol: KaPackageSymbol,
|
||||
@@ -334,7 +334,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
protected fun collectDotCompletionForCallableReceiver(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
@@ -374,7 +374,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
})
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun collectDotCompletionForCallableReceiver(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
typesOfPossibleReceiver: List<KaType>,
|
||||
@@ -406,7 +406,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
yieldAll(extensionNonMembers)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun collectDotCompletionForCallableReceiverFromIndex(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
typesOfPossibleReceiver: List<KaType>,
|
||||
@@ -417,7 +417,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
).filter { filter(it.signature.symbol) }.asSequence()
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun collectDotCompletionFromStaticScope(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
symbol: KaNamedClassSymbol,
|
||||
@@ -446,7 +446,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectExtensionsFromIndexAndResolveExtensionScope(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
receiverTypes: List<KaType>,
|
||||
@@ -472,7 +472,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectSuitableExtensions(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
scopeContext: KaScopeContext,
|
||||
@@ -504,7 +504,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectSuitableExtensions(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
scope: KaScope,
|
||||
@@ -515,7 +515,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
.filter { filter(it) }
|
||||
.mapNotNull { callable -> checkApplicabilityAndSubstitute(context, callable) }
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun createApplicableExtension(
|
||||
signature: KaCallableSignature<*>,
|
||||
importingStrategy: ImportStrategy,
|
||||
@@ -529,7 +529,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
* If [candidate] is applicable returns substituted signature and insertion options, otherwise, null.
|
||||
* When the extensionChecker from the [context] is null, no check is carried and applicability result is null.
|
||||
*/
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
protected open fun checkApplicabilityAndSubstitute(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
@@ -571,7 +571,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
*
|
||||
* @see NotPropertiesService
|
||||
*/
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
private fun KaCallableSignature<*>.getJavaGetterSignatureIfNotProperty(): KaCallableSignature<*>? {
|
||||
if (this !is KaVariableSignature<*>) return null
|
||||
@@ -587,7 +587,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
* 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(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
scopeKind: KaScopeKind,
|
||||
@@ -652,7 +652,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun shadowIfNecessary(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter
|
||||
@@ -675,7 +675,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun Sequence<CallableWithMetadataForCompletion>.filterIfInsideAnnotationEntryArgument(
|
||||
position: PsiElement,
|
||||
expectedType: KaType?,
|
||||
@@ -702,15 +702,15 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -719,7 +719,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
}.asCompositeScope()
|
||||
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun completeEnumEntriesFromPsi(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter,
|
||||
@@ -750,7 +750,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun completeLocalVariables(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter,
|
||||
@@ -772,7 +772,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun completeLocalExtensions(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
shadowedCallablesFilter: ShadowedCallablesFilter,
|
||||
@@ -805,7 +805,7 @@ internal abstract class K2AbstractCallableCompletionContributor<P : KotlinNameRe
|
||||
.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun completeEnumEntriesFromIndex(
|
||||
context: K2CompletionSectionContext<P>,
|
||||
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<KotlinExpressionNameReferencePositionContext>,
|
||||
receiverExpression: KtDotQualifiedExpression,
|
||||
@@ -935,7 +935,7 @@ internal class K2CallableReferenceCompletionContributor : K2AbstractCallableComp
|
||||
) {
|
||||
override fun K2CompletionSectionContext<KotlinCallableReferencePositionContext>.getGroupPriority(): Int = 1
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun getImportStrategy(
|
||||
context: K2CompletionSectionContext<KotlinCallableReferencePositionContext>,
|
||||
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<KotlinCallableReferencePositionContext>,
|
||||
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<KDocLinkNamePositionContext>,
|
||||
@@ -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<KDocLinkNamePositionContext>,
|
||||
explicitReceiver: KtElement,
|
||||
showReceiver: Boolean
|
||||
): Sequence<CallableWithMetadataForCompletion> = emptySequence()
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
override fun collectDotCompletionFromLocalScope(
|
||||
context: K2CompletionSectionContext<KDocLinkNamePositionContext>,
|
||||
|
||||
+1
-1
@@ -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<KotlinExpressionNameReferencePositionContext>,
|
||||
receiverExpression: KtDotQualifiedExpression,
|
||||
|
||||
+14
-8
@@ -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<KotlinNameReferencePositionContext>,
|
||||
classifierSymbol: KaClassifierSymbol
|
||||
@@ -68,7 +74,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor<
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun getImportingStrategy(
|
||||
context: K2CompletionContext<KotlinNameReferencePositionContext>,
|
||||
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<KotlinNameReferencePositionContext>,
|
||||
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<KotlinNameReferencePositionContext>
|
||||
) {
|
||||
@@ -174,7 +180,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor<
|
||||
scopeClassifiers.forEach { sectionContext.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun completeWithoutReceiverFromIndex(
|
||||
sectionContext: K2CompletionSectionContext<KotlinNameReferencePositionContext>
|
||||
) {
|
||||
@@ -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<KotlinNameReferencePositionContext>
|
||||
@@ -241,7 +247,7 @@ internal open class K2ClassifierCompletionContributor : K2CompletionContributor<
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun createChainedLookupElements(
|
||||
context: K2CompletionSectionContext<KotlinExpressionNameReferencePositionContext>,
|
||||
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,
|
||||
|
||||
+7
-3
@@ -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<KotlinRawPositionContext>,
|
||||
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
|
||||
}
|
||||
|
||||
+4
-2
@@ -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<KD
|
||||
.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun createLookupElements(
|
||||
context: K2CompletionSectionContext<KDocNameReferencePositionContext>,
|
||||
declarationSymbol: KaDeclarationSymbol,
|
||||
@@ -70,7 +72,7 @@ internal class K2KDocParameterNameContributor : K2SimpleCompletionContributor<KD
|
||||
else -> emptySequence()
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun getParametersForKDoc(
|
||||
ownerDeclarationSymbol: KaDeclarationSymbol
|
||||
): Sequence<KaDeclarationSymbol> = sequence {
|
||||
|
||||
+2
-2
@@ -99,7 +99,7 @@ internal class K2NamedArgumentCompletionContributor : K2SimpleCompletionContribu
|
||||
val indexedTypes: List<IndexedValue<KaType>>
|
||||
)
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectNamedArgumentInfos(
|
||||
callElement: KtCallElement,
|
||||
argumentsBeforeCurrent: List<KtValueArgument>,
|
||||
@@ -117,7 +117,7 @@ internal class K2NamedArgumentCompletionContributor : K2SimpleCompletionContribu
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectNotUsedIndexedParameterCandidates(
|
||||
callElement: KtCallElement,
|
||||
candidate: KaFunctionCall<*>,
|
||||
|
||||
+8
-6
@@ -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<KotlinSuperReceiverNameReferencePositionContext>,
|
||||
superTypes: List<KaType>,
|
||||
@@ -118,7 +120,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo
|
||||
return Pair(allSymbols, nameNeedDisambiguation)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun getNonExtensionsMemberSymbols(
|
||||
context: K2CompletionSectionContext<KotlinSuperReceiverNameReferencePositionContext>,
|
||||
receiverType: KaType,
|
||||
@@ -135,7 +137,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo
|
||||
)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectCallToSuperMember(
|
||||
context: K2CompletionSectionContext<KotlinSuperReceiverNameReferencePositionContext>,
|
||||
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<KotlinSuperReceiverNameReferencePositionContext>,
|
||||
superReceiver: KtSuperExpression,
|
||||
@@ -245,7 +247,7 @@ internal class K2SuperMemberCompletionContributor : K2SimpleCompletionContributo
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun wrapWithDisambiguationIfNeeded(
|
||||
insertionStrategy: CallableInsertionStrategy,
|
||||
superType: KaType,
|
||||
|
||||
+18
-8
@@ -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<P
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun complete(
|
||||
position: KtElement,
|
||||
context: K2CompletionSectionContext<P>,
|
||||
@@ -149,7 +159,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase<P
|
||||
}.forEach { context.addElement(it) }
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun createLookupElements(
|
||||
context: K2CompletionSectionContext<*>,
|
||||
trailingFunctionDescriptor: TrailingFunctionDescriptor,
|
||||
@@ -178,7 +188,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase<P
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun createLookupElements(
|
||||
context: K2CompletionSectionContext<*>,
|
||||
trailingFunctionDescriptor: TrailingFunctionDescriptor,
|
||||
@@ -282,7 +292,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase<P
|
||||
object FqNameListSerializer : KSerializer<List<FqName>> by ListSerializer(KotlinFqNameSerializer)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
private fun KaNamedClassSymbol.getSignatures(
|
||||
context: K2CompletionSectionContext<*>,
|
||||
@@ -315,7 +325,7 @@ internal sealed class K2TrailingFunctionParameterNameCompletionContributorBase<P
|
||||
else emptyList()
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun KaNamedClassSymbol.getComponents(
|
||||
context: K2CompletionSectionContext<*>,
|
||||
receiverTypes: List<KaClassType>,
|
||||
@@ -397,7 +407,7 @@ data class ChainedInsertHandler(
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun createCompoundLookupElement(
|
||||
suggestedNames: Collection<Pair<KaType, String>>,
|
||||
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? {
|
||||
|
||||
+8
-6
@@ -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<KotlinRawPositionContext>,
|
||||
variableOrParameter: KtCallableDeclaration,
|
||||
@@ -141,7 +143,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun completeClassesFromScopeContext(
|
||||
context: K2CompletionSectionContext<KotlinRawPositionContext>,
|
||||
variableOrParameter: KtCallableDeclaration,
|
||||
@@ -169,7 +171,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun completeClassesFromIndices(
|
||||
context: K2CompletionSectionContext<KotlinRawPositionContext>,
|
||||
variableOrParameter: KtCallableDeclaration,
|
||||
@@ -196,7 +198,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun addSuggestions(
|
||||
context: K2CompletionSectionContext<KotlinRawPositionContext>,
|
||||
variableOrParameter: KtCallableDeclaration,
|
||||
@@ -297,7 +299,7 @@ internal class K2VariableOrParameterNameWithTypeCompletionContributor : K2Simple
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun getAvailableTypeParameters(scopes: KaScope): Sequence<KaTypeParameterSymbol> =
|
||||
scopes.classifiers.filterIsInstance<KaTypeParameterSymbol>()
|
||||
|
||||
@@ -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<KotlinRawPositionContext>,
|
||||
type: KaType,
|
||||
|
||||
+15
-10
@@ -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<KotlinWithSubjectEntryPositionContext>,
|
||||
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<KotlinWithSubjectEntryPositionContext>,
|
||||
classSymbol: KaNamedClassSymbol,
|
||||
@@ -246,7 +251,7 @@ internal class K2WhenWithSubjectConditionContributor : K2SimpleCompletionContrib
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun getHandledClassIds(conditions: List<KtWhenCondition>): Set<ClassId> =
|
||||
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<KaNamedClassSymbol> {
|
||||
|
||||
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<KotlinWithSubjectEntryPositionContext>,
|
||||
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,
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ internal class FirActualDeclarationContributor(
|
||||
priority: Int,
|
||||
) : FirCompletionContributorBase<KotlinRawPositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinRawPositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+39
-40
@@ -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<KotlinNameReferencePositionContext>(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<KaCallableSymbol> {
|
||||
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<KaCallableSymbol>,
|
||||
@@ -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<KaType>,
|
||||
@@ -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<KaType>,
|
||||
@@ -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<CallableWithMetadataForCompletion, CallableWithMetadataForCompletion?> {
|
||||
@@ -786,7 +785,7 @@ internal open class FirCallableCompletionContributor(
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun Sequence<CallableWithMetadataForCompletion>.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,
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ internal class FirClassReferenceCompletionContributor(
|
||||
priority: Int = 0,
|
||||
) : FirCompletionContributorBase<KotlinCallableReferencePositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinCallableReferencePositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+15
-9
@@ -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<KotlinNameReferencePositionContext>(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<KaClassifierSymbol> = 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 -> {
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ import org.jetbrains.kotlin.idea.util.positionContext.KotlinRawPositionContext
|
||||
|
||||
internal interface FirCompletionContributor<C : KotlinRawPositionContext> {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun complete(
|
||||
positionContext: C,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+4
-3
@@ -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<C : KotlinRawPositionContex
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun createOperatorLookupElement(
|
||||
context: WeighingContext,
|
||||
signature: KaFunctionSignature<*>,
|
||||
@@ -121,7 +122,7 @@ internal abstract class FirCompletionContributorBase<C : KotlinRawPositionContex
|
||||
)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
protected fun createCallableLookupElements(
|
||||
context: WeighingContext,
|
||||
signature: KaCallableSignature<*>,
|
||||
@@ -253,7 +254,7 @@ internal abstract class FirCompletionContributorBase<C : KotlinRawPositionContex
|
||||
@ApiStatus.Experimental // todo reconsider
|
||||
internal interface ChainCompletionContributor : FirCompletionContributor<KotlinNameReferencePositionContext> {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun createChainedLookupElements(
|
||||
positionContext: KotlinNameReferencePositionContext,
|
||||
receiverExpression: KtDotQualifiedExpression,
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ internal class FirDeclarationFromOverridableMembersContributor(
|
||||
priority: Int = 0,
|
||||
) : FirCompletionContributorBase<KotlinRawPositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinRawPositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+8
-4
@@ -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<KotlinRawPositionContext>(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
|
||||
}
|
||||
|
||||
+2
-1
@@ -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<KotlinImportDirectivePositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
override fun complete(
|
||||
positionContext: KotlinImportDirectivePositionContext,
|
||||
|
||||
+5
-3
@@ -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<KDocNameReferencePositionContext>(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<KaDeclarationSymbol> = sequence {
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ internal class FirKeywordCompletionContributor(
|
||||
)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinRawPositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+3
-3
@@ -33,7 +33,7 @@ internal class FirNamedArgumentCompletionContributor(
|
||||
priority: Int = 0,
|
||||
) : FirCompletionContributorBase<KotlinExpressionNameReferencePositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinExpressionNameReferencePositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
@@ -100,7 +100,7 @@ internal class FirNamedArgumentCompletionContributor(
|
||||
val indexedTypes: List<IndexedValue<KaType>>
|
||||
)
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectNamedArgumentInfos(
|
||||
callElement: KtCallElement,
|
||||
argumentsBeforeCurrent: List<KtValueArgument>,
|
||||
@@ -118,7 +118,7 @@ internal class FirNamedArgumentCompletionContributor(
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun collectNotUsedIndexedParameterCandidates(
|
||||
callElement: KtCallElement,
|
||||
candidate: KaFunctionCall<*>,
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ internal class FirOperatorNameCompletionContributor(
|
||||
sink: LookupElementSink,
|
||||
priority: Int = 0,
|
||||
) : FirCompletionContributorBase<KotlinTypeNameReferencePositionContext>(sink, priority) {
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinTypeNameReferencePositionContext,
|
||||
weighingContext: WeighingContext
|
||||
|
||||
+2
-1
@@ -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<KotlinRawPositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
override fun complete(
|
||||
positionContext: KotlinRawPositionContext,
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ internal class FirSameAsFileClassifierNameCompletionContributor(
|
||||
priority: Int = 0,
|
||||
) : FirCompletionContributorBase<KotlinClassifierNamePositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinClassifierNamePositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ internal class FirSuperEntryContributor(
|
||||
priority: Int = 0,
|
||||
) : FirCompletionContributorBase<KotlinSuperTypeCallNameReferencePositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinSuperTypeCallNameReferencePositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+10
-7
@@ -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<KaType>,
|
||||
@@ -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,
|
||||
|
||||
+20
-10
@@ -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<KotlinExpressionNameReferencePositionContext>(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<KotlinSimpleParameterPositionContext>(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<String>,
|
||||
@@ -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<KaClassType>,
|
||||
): Collection<KaNamedFunctionSymbol> {
|
||||
@@ -329,7 +339,7 @@ private val NoAnnotationsTypeRenderer: KaTypeRenderer = KaTypeRendererForSource.
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun createCompoundLookupElement(
|
||||
suggestedNames: Collection<Pair<KaType, String>>,
|
||||
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? {
|
||||
|
||||
+2
-1
@@ -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<KotlinTypeConstraintNameInWhereClausePositionContext>(sink, priority) {
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun complete(
|
||||
positionContext: KotlinTypeConstraintNameInWhereClausePositionContext,
|
||||
weighingContext: WeighingContext,
|
||||
|
||||
+10
-7
@@ -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<Pair<NameFilter, String>> = 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<KaTypeParameterSymbol> =
|
||||
scopes.classifiers.filterIsInstance<KaTypeParameterSymbol>()
|
||||
|
||||
@@ -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,
|
||||
|
||||
+17
-11
@@ -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<KtWhenCondition>): Set<ClassId> =
|
||||
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<KaNamedClassSymbol> {
|
||||
|
||||
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,
|
||||
|
||||
+31
-16
@@ -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<List<KaType>>,
|
||||
@@ -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<KaType>? {
|
||||
@@ -201,7 +216,7 @@ internal object CallableMetadataProvider {
|
||||
}
|
||||
|
||||
// todo refactor; move to an appropriate place
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun calculateActualReceiverTypes(
|
||||
explicitReceiver: KtElement?,
|
||||
implicitReceivers: () -> List<KaImplicitReceiver>,
|
||||
@@ -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<KaType> = 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<KtCallableReferenceExpression>(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<List<KaType>>,
|
||||
@@ -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
|
||||
|
||||
+4
-4
@@ -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,
|
||||
|
||||
+2
-1
@@ -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<KaNamedClassSymbol> {
|
||||
val containingClass = context.getStrictParentOfType<KtClassOrObject>() ?: return emptyList()
|
||||
val containingClassSymbol = containingClass.classSymbol ?: return emptyList()
|
||||
|
||||
+12
-10
@@ -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<ApplicableExtension>,
|
||||
receiversFromContext: List<KaType>
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -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(
|
||||
|
||||
+16
-9
@@ -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<KaSymbol> =
|
||||
when (this) {
|
||||
is KotlinNameReferencePositionContext -> resolveReceiverToSymbols()
|
||||
else -> sequenceOf(rootPackageSymbol)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
internal fun KotlinNameReferencePositionContext.resolveReceiverToSymbols(): Sequence<KaSymbol> =
|
||||
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<KaCallableSignature<*>>.filterOutJavaGettersAndSetters(
|
||||
positionContext: KotlinNameReferencePositionContext,
|
||||
@@ -179,7 +186,7 @@ private fun Sequence<KaCallableSignature<*>>.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<KaCallableSignature<*>>.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.
|
||||
|
||||
+7
-5
@@ -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<KaSession>(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)
|
||||
|
||||
+11
-6
@@ -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<KaSession>(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)
|
||||
|
||||
|
||||
+7
-3
@@ -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<KaSession>(KtTokens.RETURN_KEYWORD) {
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun createLookups(
|
||||
parameters: CompletionParameters,
|
||||
expression: KtExpression?,
|
||||
@@ -67,7 +71,7 @@ internal object ReturnKeywordHandler : CompletionKeywordHandler<KaSession>(KtTok
|
||||
return result
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun addAllReturnVariants(
|
||||
result: MutableList<LookupElement>,
|
||||
returnType: KaType,
|
||||
@@ -89,7 +93,7 @@ internal object ReturnKeywordHandler : CompletionKeywordHandler<KaSession>(KtTok
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun getExpressionsToReturnByType(returnType: KaType): List<ExpressionTarget> = buildList {
|
||||
if (returnType.isNullable) {
|
||||
add(ExpressionTarget("null", addToLookupElementTail = false))
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
internal object SuperKeywordHandler : CompletionKeywordHandler<KaSession>(KtTokens.SUPER_KEYWORD) {
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
override fun createLookups(
|
||||
parameters: CompletionParameters,
|
||||
expression: KtExpression?,
|
||||
|
||||
+5
-4
@@ -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<KaSession>(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 -> {
|
||||
|
||||
+3
-2
@@ -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<*>,
|
||||
|
||||
+4
-2
@@ -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,
|
||||
|
||||
+1
-1
@@ -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),
|
||||
|
||||
+9
-8
@@ -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<KaVariableSignature<KaValueParameterSymbol>>,
|
||||
): @NonNls String = parameters.joinToString(
|
||||
@@ -46,7 +47,7 @@ internal object CompletionShortNamesRenderer {
|
||||
postfix = ")",
|
||||
) { renderFunctionParameter(it) }
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun renderTrailingFunction(
|
||||
trailingFunctionSignature: KaVariableSignature<KaValueParameterSymbol>,
|
||||
trailingFunctionType: KaFunctionType,
|
||||
@@ -59,7 +60,7 @@ internal object CompletionShortNamesRenderer {
|
||||
append(" }")
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
private fun renderFunctionParameter(
|
||||
parameter: KaVariableSignature<KaValueParameterSymbol>,
|
||||
): @NonNls String = buildString {
|
||||
@@ -78,7 +79,7 @@ internal object CompletionShortNamesRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
private fun <A : Appendable> 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,
|
||||
|
||||
+8
-8
@@ -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) "<root>" else render()
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun insertLambdaBraces(symbol: KaFunctionType): Boolean {
|
||||
val singleParam = symbol.parameterTypes.singleOrNull()
|
||||
return singleParam != null && singleParam is KaFunctionType
|
||||
|
||||
+2
-2
@@ -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<*>,
|
||||
|
||||
+9
-8
@@ -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<KaType>): 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)
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<KaType>): LookupElement {
|
||||
val typeText = types.singleOrNull()?.renderVerbose() ?: "..."
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
+7
-4
@@ -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
|
||||
+1
-1
@@ -21,7 +21,7 @@ internal object ClassifierWeigher {
|
||||
NON_LOCAL
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun addWeight(
|
||||
lookupElement: LookupElement,
|
||||
symbol: KaSymbol,
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+13
-6
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ internal object PreferGetSetMethodsToPropertyWeigher {
|
||||
const val WEIGHER_ID = "kotlin.preferGetSetMethodsToProperty"
|
||||
private var LookupElement.propertyName by UserDataProperty(Key<Name>("KOTLIN_PROPERTY_NAME"))
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun addWeight(lookupElement: LookupElement, symbol: KaSymbol) {
|
||||
lookupElement.propertyName = (symbol as? KaPropertySymbol)?.name
|
||||
}
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ object VariableOrFunctionWeigher {
|
||||
const val WEIGHER_ID = "kotlin.variableOrFunction"
|
||||
private var LookupElement.variableOrFunction by UserDataProperty(Key<Weight>("KOTLIN_VARIABLE_OR_FUNCTION_WEIGHT"))
|
||||
|
||||
context(KaSession)
|
||||
context(_: KaSession)
|
||||
fun addWeight(lookupElement: LookupElement, symbol: KaSymbol) {
|
||||
when (symbol) {
|
||||
is KaVariableSymbol -> {
|
||||
|
||||
+22
-14
@@ -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<Name, List<KaCallableSymbol>>) {
|
||||
private val contextualOverriddenSymbols: MutableMap<Name, Set<KaCallableSymbol>> = 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<ImportPath>.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 : LookupElement> E.applyWeighs(
|
||||
context: WeighingContext,
|
||||
symbolWithOrigin: KtSymbolWithOrigin<*>? = null,
|
||||
|
||||
+3
-2
@@ -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,
|
||||
|
||||
+10
-6
@@ -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<KaValueParameterSymbol>,
|
||||
): 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,
|
||||
|
||||
+1
-1
@@ -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) }
|
||||
|
||||
+5
-3
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<facet type="kotlin-language" name="Kotlin">
|
||||
<configuration version="5" platform="JVM 17" allPlatforms="JVM [17]" useProjectSettings="false">
|
||||
<compilerSettings>
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -opt-in=com.intellij.openapi.util.IntellijInternalApi -opt-in=org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction -Xcontext-receivers -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
<option name="additionalArguments" value="-Xjvm-default=all -opt-in=com.intellij.openapi.util.IntellijInternalApi -opt-in=org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction -Xcontext-parameters -XXLanguage:+AllowEagerSupertypeAccessibilityChecks" />
|
||||
</compilerSettings>
|
||||
<compilerArguments>
|
||||
<stringArguments>
|
||||
|
||||
+7
-4
@@ -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<LookupElement> {
|
||||
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<LookupElement> = createLookups(expression)
|
||||
}
|
||||
|
||||
context(KaSession)
|
||||
@OptIn(KaContextParameterApi::class)
|
||||
context(_: KaSession)
|
||||
fun isInlineFunctionCall(call: KtCallExpression?): Boolean =
|
||||
(call?.calleeExpression as? KtReferenceExpression)?.mainReference
|
||||
?.resolveToSymbol()
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@ abstract class CompletionKeywordHandler<CONTEXT>(
|
||||
) {
|
||||
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 <CONTEXT> completionKeywordHandler(
|
||||
project: Project
|
||||
) -> Collection<LookupElement>
|
||||
) = object : CompletionKeywordHandler<CONTEXT>(keyword) {
|
||||
context(CONTEXT)
|
||||
context(_: CONTEXT)
|
||||
override fun createLookups(
|
||||
parameters: CompletionParameters,
|
||||
expression: KtExpression?,
|
||||
lookup: LookupElement,
|
||||
project: Project
|
||||
): Collection<LookupElement> = create(this@CONTEXT, parameters, expression, lookup, project)
|
||||
): Collection<LookupElement> = create(contextOf<CONTEXT>(), parameters, expression, lookup, project)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user