diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-13 19:29:01 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-13 19:29:01 +0000 |
commit | 8fd51678ba9389c59b5d2eab72514586e00204a2 (patch) | |
tree | b372367a38b2d7997de0aba533d8765b5a6998ef /plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt | |
parent | a313a2cd38efda34402faaa45b2dc210f9953844 (diff) | |
parent | 94136e97c59789b2242f8eee1cd8abde4fe323d4 (diff) | |
download | intellij-kotlin-8fd51678ba9389c59b5d2eab72514586e00204a2.tar.gz |
Snap for 8709740 from 94136e97c59789b2242f8eee1cd8abde4fe323d4 to studio-dolphin-releasestudio-2021.3.1-betastudio-beta
Change-Id: I60acba3629ba543acf77426e415cd999c5252307
Diffstat (limited to 'plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt')
-rw-r--r-- | plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt | 71 |
1 files changed, 52 insertions, 19 deletions
diff --git a/plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 29b63f6ca695..6ff9dc4befc2 100644 --- a/plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/plugins/kotlin/completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.completion @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.core.util.CodeFragmentUtils import org.jetbrains.kotlin.idea.imports.importableFqName -import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.platform.isMultiPlatform @@ -79,7 +78,8 @@ abstract class CompletionSession( protected val resolutionFacade = file.getResolutionFacade() protected val moduleDescriptor = resolutionFacade.moduleDescriptor protected val project = position.project - protected val isJvmModule = TargetPlatformDetector.getPlatform(originalParameters.originalFile as KtFile).isJvm() + protected val isJvmModule = moduleDescriptor.platform.isJvm() + protected val allowExpectedDeclarations = moduleDescriptor.platform.isMultiPlatform() protected val isDebuggerContext = file is KtCodeFragment protected val nameExpression: KtSimpleNameExpression? @@ -112,7 +112,7 @@ abstract class CompletionSession( originalParameters.offset, kotlinIdentifierPartPattern or singleCharPattern('@'), kotlinIdentifierStartPattern - )!! + ) protected val prefixMatcher = CamelHumpMatcher(prefix) @@ -131,6 +131,29 @@ abstract class CompletionSession( NotPropertiesService.getNotProperties(position) ) + protected val shadowedFilter: ((Collection<DeclarationDescriptor>) -> Collection<DeclarationDescriptor>)? by lazy { + ShadowedDeclarationsFilter.create( + bindingContext = bindingContext, + resolutionFacade = resolutionFacade, + context = nameExpression!!, + callTypeAndReceiver = callTypeAndReceiver, + )?.createNonImportedDeclarationsFilter( + importedDeclarations = referenceVariantsCollector!!.allCollected.imported, + allowExpectedDeclarations = allowExpectedDeclarations, + ) + } + + protected inline fun <reified T : DeclarationDescriptor> processWithShadowedFilter(descriptor: T, processor: (T) -> Unit) { + val shadowedFilter = shadowedFilter + val element = if (shadowedFilter != null) { + shadowedFilter(listOf(descriptor)).singleOrNull()?.let { it as T } + } else { + descriptor + } + + element?.let(processor) + } + protected val callTypeAndReceiver = if (nameExpression == null) CallTypeAndReceiver.UNKNOWN else CallTypeAndReceiver.detect(nameExpression) protected val receiverTypes = nameExpression?.let { detectReceiverTypes(bindingContext, nameExpression, callTypeAndReceiver) } @@ -145,7 +168,7 @@ abstract class CompletionSession( { CompletionBenchmarkSink.instance.onFlush(this) }, prefixMatcher, originalParameters, resultSet, createSorter(), (file as? KtCodeFragment)?.extraCompletionFilter, - moduleDescriptor.platform.isMultiPlatform() + allowExpectedDeclarations, ) } @@ -314,9 +337,16 @@ abstract class CompletionSession( protected val referenceVariantsCollector = if (nameExpression != null) { ReferenceVariantsCollector( - referenceVariantsHelper, indicesHelper(true), prefixMatcher, - nameExpression, callTypeAndReceiver, resolutionFacade, bindingContext, - importableFqNameClassifier, configuration + referenceVariantsHelper = referenceVariantsHelper, + indicesHelper = indicesHelper(true), + prefixMatcher = prefixMatcher, + nameExpression = nameExpression, + callTypeAndReceiver = callTypeAndReceiver, + resolutionFacade = resolutionFacade, + bindingContext = bindingContext, + importableFqNameClassifier = importableFqNameClassifier, + configuration = configuration, + allowExpectedDeclarations = allowExpectedDeclarations, ) } else { null @@ -347,10 +377,19 @@ abstract class CompletionSession( val expressionReceiver = ExpressionReceiver.create(explicitReceiver, runtimeType, bindingContext) val (variants, notImportedExtensions) = ReferenceVariantsCollector( - referenceVariantsHelper, indicesHelper(true), prefixMatcher, - nameExpression!!, callTypeAndReceiver, resolutionFacade, bindingContext, - importableFqNameClassifier, configuration, runtimeReceiver = expressionReceiver + referenceVariantsHelper = referenceVariantsHelper, + indicesHelper = indicesHelper(true), + prefixMatcher = prefixMatcher, + nameExpression = nameExpression!!, + callTypeAndReceiver = callTypeAndReceiver, + resolutionFacade = resolutionFacade, + bindingContext = bindingContext, + importableFqNameClassifier = importableFqNameClassifier, + configuration = configuration, + allowExpectedDeclarations = allowExpectedDeclarations, + runtimeReceiver = expressionReceiver, ).collectReferenceVariants(descriptorKindFilter!!) + val filteredVariants = filterVariantsForRuntimeReceiverType(variants, referenceVariants.imported) val filteredNotImportedExtensions = filterVariantsForRuntimeReceiverType(notImportedExtensions, referenceVariants.notImportedExtensions) @@ -381,15 +420,9 @@ abstract class CompletionSession( return callTypeAndReceiver.receiver == null } - protected fun processTopLevelCallables(processor: (CallableDescriptor) -> Unit) { - val shadowedFilter = ShadowedDeclarationsFilter.create(bindingContext, resolutionFacade, nameExpression!!, callTypeAndReceiver) - ?.createNonImportedDeclarationsFilter<CallableDescriptor>(referenceVariantsCollector!!.allCollected.imported) + protected fun processTopLevelCallables(processor: (DeclarationDescriptor) -> Unit) { indicesHelper(true).processTopLevelCallables({ prefixMatcher.prefixMatches(it) }) { - if (shadowedFilter != null) { - shadowedFilter(listOf(it)).singleOrNull()?.let(processor) - } else { - processor(it) - } + processWithShadowedFilter(it, processor) } } |