summaryrefslogtreecommitdiff
path: root/plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt')
-rw-r--r--plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt22
1 files changed, 17 insertions, 5 deletions
diff --git a/plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt b/plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt
index 05cb9e0a8430..0ac6b9010fdd 100644
--- a/plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt
+++ b/plugins/kotlin/common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.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.util
@@ -20,13 +20,13 @@ import org.jetbrains.kotlin.resolve.calls.CallResolver
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency
+import org.jetbrains.kotlin.resolve.multiplatform.findExpects
import org.jetbrains.kotlin.resolve.scopes.ExplicitImportsScope
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.resolve.scopes.utils.addImportingScope
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.util.descriptorsEqualWithSubstitution
-import java.util.*
class ShadowedDeclarationsFilter(
private val bindingContext: BindingContext,
@@ -66,14 +66,26 @@ class ShadowedDeclarationsFilter(
declarations.groupBy { signature(it) }.values.flatMap { group -> filterEqualSignatureGroup(group) }
fun <TDescriptor : DeclarationDescriptor> createNonImportedDeclarationsFilter(
- importedDeclarations: Collection<DeclarationDescriptor>
+ importedDeclarations: Collection<DeclarationDescriptor>,
+ allowExpectedDeclarations: Boolean,
): (Collection<TDescriptor>) -> Collection<TDescriptor> {
- val importedDeclarationsSet = importedDeclarations.toSet()
+ val importedDeclarationsSet = if (allowExpectedDeclarations) {
+ importedDeclarations.asSequence().flatMap {
+ if (it is MemberDescriptor && it.isActual) {
+ sequenceOf(it) + it.findExpects().asSequence()
+ } else {
+ sequenceOf(it)
+ }
+ }.toSet()
+ } else {
+ importedDeclarations.toSet()
+ }
+
val importedDeclarationsBySignature = importedDeclarationsSet.groupBy { signature(it) }
return filter@{ declarations ->
// optimization
- if (declarations.size == 1 && importedDeclarationsBySignature[signature(declarations.single())] == null) return@filter declarations
+ if (declarations.isEmpty() || declarations.size == 1 && importedDeclarationsBySignature[signature(declarations.single())] == null) return@filter declarations
val nonImportedDeclarations = declarations.filter { it !in importedDeclarationsSet }