mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
[kotlin] k2: introduce KotlinSimpleNameReferencePositionContext
KTIJ-27228 GitOrigin-RevId: 33eeffe6d9239e759b4368173a61c87a1fabfeb6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7f730f5884
commit
addcd994a4
@@ -10,9 +10,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||
import org.jetbrains.kotlin.idea.base.utils.fqname.isJavaClassNotToBeUsedInKotlin
|
||||
import org.jetbrains.kotlin.idea.completion.context.FirBasicCompletionContext
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.KDocNameReferencePositionContext
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.KotlinNameReferencePositionContext
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.KotlinRawPositionContext
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.KotlinSimpleNameReferencePositionContext
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||
|
||||
internal fun interface CompletionVisibilityChecker {
|
||||
@@ -51,7 +50,7 @@ internal fun interface CompletionVisibilityChecker {
|
||||
return isVisible(
|
||||
symbol,
|
||||
basicContext.originalKtFile.getFileSymbol(),
|
||||
(positionContext as? KotlinNameReferencePositionContext)?.explicitReceiver as? KtExpression,
|
||||
(positionContext as? KotlinSimpleNameReferencePositionContext)?.explicitReceiver,
|
||||
positionContext.position
|
||||
)
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.completion.lookups.factories.FunctionInsertionH
|
||||
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.KotlinNameReferencePositionContext
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.KotlinSimpleNameReferencePositionContext
|
||||
import org.jetbrains.kotlin.kdoc.psi.impl.KDocName
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -122,10 +123,7 @@ internal open class FirCallableCompletionContributor(
|
||||
val visibilityChecker = CompletionVisibilityChecker.create(basicContext, positionContext)
|
||||
val scopesContext = originalKtFile.getScopeContextForPosition(nameExpression)
|
||||
|
||||
val expression = nameExpression
|
||||
val receiver = explicitReceiver
|
||||
|
||||
val extensionChecker = if (expression is KtSimpleNameExpression && receiver is KtExpression?) {
|
||||
val extensionChecker = if (positionContext is KotlinSimpleNameReferencePositionContext) {
|
||||
object : ExtensionApplicabilityChecker {
|
||||
/**
|
||||
* Cached applicability results for callable extension symbols.
|
||||
@@ -142,11 +140,13 @@ internal open class FirCallableCompletionContributor(
|
||||
private val cache: MutableMap<KtCallableSymbol, KtExtensionApplicabilityResult> = mutableMapOf()
|
||||
|
||||
context(KtAnalysisSession)
|
||||
override fun checkApplicability(symbol: KtCallableSymbol): KtExtensionApplicabilityResult =
|
||||
cache.getOrPut(symbol) { symbol.checkExtensionIsSuitable(originalKtFile, expression, receiver) }
|
||||
override fun checkApplicability(symbol: KtCallableSymbol): KtExtensionApplicabilityResult = cache.getOrPut(symbol) {
|
||||
symbol.checkExtensionIsSuitable(originalKtFile, positionContext.nameExpression, positionContext.explicitReceiver)
|
||||
}
|
||||
}
|
||||
} else null
|
||||
|
||||
val receiver = explicitReceiver
|
||||
val weighingContextWithoutExpectedType = weighingContext.withoutExpectedType()
|
||||
|
||||
val callablesWithMetadata: Sequence<CallableWithMetadataForCompletion> = when {
|
||||
|
||||
@@ -8,7 +8,6 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings
|
||||
import org.jetbrains.kotlin.idea.completion.FirCompletionSessionParameters
|
||||
import org.jetbrains.kotlin.util.match
|
||||
import org.jetbrains.kotlin.idea.completion.KeywordCompletion
|
||||
import org.jetbrains.kotlin.idea.completion.context.*
|
||||
import org.jetbrains.kotlin.idea.completion.contributors.keywords.OverrideKeywordHandler
|
||||
@@ -22,7 +21,6 @@ import org.jetbrains.kotlin.idea.completion.keywords.DefaultCompletionKeywordHan
|
||||
import org.jetbrains.kotlin.idea.completion.keywords.createLookups
|
||||
import org.jetbrains.kotlin.idea.completion.weighers.Weighers
|
||||
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext
|
||||
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
|
||||
import org.jetbrains.kotlin.idea.util.positionContext.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
@@ -31,6 +29,7 @@ import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtExpressionWithLabel
|
||||
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||
import org.jetbrains.kotlin.util.match
|
||||
|
||||
internal class FirKeywordCompletionContributor(basicContext: FirBasicCompletionContext, priority: Int) :
|
||||
FirCompletionContributorBase<KotlinRawPositionContext>(basicContext, priority) {
|
||||
@@ -48,7 +47,7 @@ internal class FirKeywordCompletionContributor(basicContext: FirBasicCompletionC
|
||||
sessionParameters: FirCompletionSessionParameters,
|
||||
) {
|
||||
val expression = when (positionContext) {
|
||||
is KotlinNameReferencePositionContext -> (positionContext.reference as? KtSimpleNameReference)?.expression?.let {
|
||||
is KotlinSimpleNameReferencePositionContext -> positionContext.reference.expression.let {
|
||||
it.parentsWithSelf.match(KtLabelReferenceExpression::class, KtContainerNode::class, last = KtExpressionWithLabel::class)
|
||||
?: it
|
||||
}
|
||||
@@ -58,6 +57,7 @@ internal class FirKeywordCompletionContributor(basicContext: FirBasicCompletionC
|
||||
|
||||
is KotlinValueParameterPositionContext,
|
||||
is KotlinMemberDeclarationExpectedPositionContext,
|
||||
is KDocNameReferencePositionContext,
|
||||
is KotlinUnknownPositionContext -> null
|
||||
}
|
||||
completeWithResolve(expression ?: positionContext.position, expression, weighingContext)
|
||||
|
||||
@@ -58,19 +58,25 @@ sealed class KotlinNameReferencePositionContext : KotlinRawPositionContext() {
|
||||
abstract val explicitReceiver: KtElement?
|
||||
}
|
||||
|
||||
sealed class KotlinSimpleNameReferencePositionContext : KotlinNameReferencePositionContext() {
|
||||
abstract override val reference: KtSimpleNameReference
|
||||
abstract override val nameExpression: KtSimpleNameExpression
|
||||
abstract override val explicitReceiver: KtExpression?
|
||||
}
|
||||
|
||||
class KotlinImportDirectivePositionContext(
|
||||
override val position: PsiElement,
|
||||
override val reference: KtSimpleNameReference,
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
class KotlinPackageDirectivePositionContext(
|
||||
override val position: PsiElement,
|
||||
override val reference: KtSimpleNameReference,
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
|
||||
class KotlinTypeNameReferencePositionContext(
|
||||
@@ -79,7 +85,7 @@ class KotlinTypeNameReferencePositionContext(
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?,
|
||||
val typeReference: KtTypeReference?,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
class KotlinAnnotationTypeNameReferencePositionContext(
|
||||
override val position: PsiElement,
|
||||
@@ -87,7 +93,7 @@ class KotlinAnnotationTypeNameReferencePositionContext(
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?,
|
||||
val annotationEntry: KtAnnotationEntry,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
/**
|
||||
* Example
|
||||
@@ -105,7 +111,7 @@ class KotlinSuperTypeCallNameReferencePositionContext(
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?,
|
||||
val superExpression: KtSuperExpression,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
/**
|
||||
* Example
|
||||
@@ -123,21 +129,21 @@ class KotlinSuperReceiverNameReferencePositionContext(
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?,
|
||||
val superExpression: KtSuperExpression,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
class KotlinExpressionNameReferencePositionContext(
|
||||
override val position: PsiElement,
|
||||
override val reference: KtSimpleNameReference,
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
class KotlinInfixCallPositionContext(
|
||||
override val position: PsiElement,
|
||||
override val reference: KtSimpleNameReference,
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
|
||||
class KotlinWithSubjectEntryPositionContext(
|
||||
@@ -147,14 +153,14 @@ class KotlinWithSubjectEntryPositionContext(
|
||||
override val explicitReceiver: KtExpression?,
|
||||
val subjectExpression: KtExpression,
|
||||
val whenCondition: KtWhenCondition,
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
class KotlinCallableReferencePositionContext(
|
||||
override val position: PsiElement,
|
||||
override val reference: KtSimpleNameReference,
|
||||
override val nameExpression: KtSimpleNameExpression,
|
||||
override val explicitReceiver: KtExpression?
|
||||
) : KotlinNameReferencePositionContext()
|
||||
) : KotlinSimpleNameReferencePositionContext()
|
||||
|
||||
/**
|
||||
* Position in class body, on which member declaration or class initializer is expected
|
||||
@@ -175,7 +181,11 @@ class KotlinMemberDeclarationExpectedPositionContext(
|
||||
val classBody: KtClassBody
|
||||
) : KotlinRawPositionContext()
|
||||
|
||||
sealed class KDocNameReferencePositionContext : KotlinNameReferencePositionContext()
|
||||
sealed class KDocNameReferencePositionContext : KotlinNameReferencePositionContext() {
|
||||
abstract override val reference: KDocReference
|
||||
abstract override val nameExpression: KDocName
|
||||
abstract override val explicitReceiver: KDocName?
|
||||
}
|
||||
|
||||
class KDocParameterNamePositionContext(
|
||||
override val position: PsiElement,
|
||||
|
||||
Reference in New Issue
Block a user