From d5e69b141c800bc6055c5cb567164ba9efe3dc90 Mon Sep 17 00:00:00 2001 From: Pavel Gromov Date: Tue, 23 Jul 2024 13:38:12 +0200 Subject: [PATCH] [kotlin] Find expect declarations in depends on module dependencies * #FL-26673 GitOrigin-RevId: f4f3656ffcfbc8252ad844c1eda11bacf8f525ac --- .../kotlin/idea/search/ExpectActualUtils.kt | 2 +- .../completion/ActualDeclarationCompletion.kt | 17 +++-------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ExpectActualUtils.kt b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ExpectActualUtils.kt index 6f766217bdd9..2fe5c0ceadab 100644 --- a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ExpectActualUtils.kt +++ b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ExpectActualUtils.kt @@ -49,7 +49,7 @@ object ExpectActualUtils { null } ?: unwrappedElement - fun collectTopLevelExpectDeclarations(project: Project, modules: Set): List { + fun collectTopLevelExpectDeclarations(project: Project, modules: List): List { val searchScope = GlobalSearchScope.union(modules.map { module -> module.contentScope }) val indexes = listOf( diff --git a/plugins/kotlin/completion/impl-k1/src/org/jetbrains/kotlin/idea/completion/ActualDeclarationCompletion.kt b/plugins/kotlin/completion/impl-k1/src/org/jetbrains/kotlin/idea/completion/ActualDeclarationCompletion.kt index 0870b5c9dca6..9d2acab50b53 100644 --- a/plugins/kotlin/completion/impl-k1/src/org/jetbrains/kotlin/idea/completion/ActualDeclarationCompletion.kt +++ b/plugins/kotlin/completion/impl-k1/src/org/jetbrains/kotlin/idea/completion/ActualDeclarationCompletion.kt @@ -7,7 +7,6 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.ui.RowIcon -import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule import org.jetbrains.kotlin.backend.common.descriptors.isSuspend import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -25,7 +24,6 @@ import org.jetbrains.kotlin.idea.search.ExpectActualUtils import org.jetbrains.kotlin.idea.search.ExpectActualUtils.actualsForExpected import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtPackageDirective @@ -63,18 +61,15 @@ internal class ActualDeclarationCompletion( fun complete(position: PsiElement) { val module = position.module ?: return val kaModule = position.moduleInfo.toKaModule() - if (kaModule.targetPlatform.isCommon()) { - return - } + val dependsOnModules = kaModule.transitiveDependsOnDependencies + if (dependsOnModules.isEmpty()) return val packageQualifiedName = position.packageDirective?.qualifiedName ?: return - val commonModules = kaModule.findCommonDependencyModules() - // TODO: Allow completion not only for top level actual declarations // `expect`/`actual` interfaces, objects, annotations, enums and typealiases are in Beta // https://youtrack.jetbrains.com/issue/KT-61573 - val notImplementedExpectDeclarations = ExpectActualUtils.collectTopLevelExpectDeclarations(project, commonModules) + val notImplementedExpectDeclarations = ExpectActualUtils.collectTopLevelExpectDeclarations(project, dependsOnModules) .filter { expectDeclaration -> canImplementActualForExpect(expectDeclaration, module, packageQualifiedName) } val actualDeclarationLookupElements = notImplementedExpectDeclarations .mapNotNull { expectDeclaration -> expectDeclaration.createLookupElement(position, module) } @@ -82,12 +77,6 @@ internal class ActualDeclarationCompletion( actualDeclarationLookupElements.forEach { lookupElement -> collector.addElement(lookupElement) } } - private fun KaModule.findCommonDependencyModules(): Set { - return directRegularDependencies - .filter { dependencyModule -> dependencyModule.targetPlatform.isCommon() } - .toSet() - } - private fun canImplementActualForExpect( expectDeclaration: KtNamedDeclaration, targetModule: Module,