From a6161c6f221470259bdf27d04fa6472d424a35b4 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 4 Jun 2020 18:50:54 +0300 Subject: [PATCH] Fix expect/actual gutters for declarations in the same module. Fixed #KT-33510. --- .../kotlin/idea/util/expectActualUtil.kt | 8 ++++++-- .../markers/KotlinLineMarkerProvider.kt | 18 +++--------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt index d5ae533614f..6d30341897f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt @@ -28,7 +28,9 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver -internal fun MemberDescriptor.expectedDescriptors() = module.implementedDescriptors.mapNotNull { it.declarationOf(this) } +internal fun MemberDescriptor.expectedDescriptors() = + (module.implementedDescriptors + module) + .mapNotNull { it.declarationOf(this) } // TODO: Sort out the cases with multiple expected descriptors fun MemberDescriptor.expectedDescriptor() = expectedDescriptors().firstOrNull() @@ -101,7 +103,7 @@ fun DeclarationDescriptor.actualsForExpected(): Collection = resolveToDescriptorIfAny(BodyResolveMode.FULL) diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt index 8b70d28bfa9..89ee73e3a18 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt @@ -26,18 +26,13 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.lightClasses.KtFakeLightClass import org.jetbrains.kotlin.idea.caches.lightClasses.KtFakeLightMethod -import org.jetbrains.kotlin.idea.caches.project.implementedDescriptors -import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors -import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.core.isInheritable import org.jetbrains.kotlin.idea.core.isOverridable -import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.editor.fixers.startLine -import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.presentation.DeclarationByModuleRenderer import org.jetbrains.kotlin.idea.search.declarationsSearch.toPossiblyFakeLightMethods import org.jetbrains.kotlin.idea.util.* @@ -464,11 +459,7 @@ private fun collectActualMarkers( ) { if (!KotlinLineMarkerOptions.actualOption.isEnabled) return if (declaration.requiresNoMarkers()) return - - val descriptor = declaration.toDescriptor() as? MemberDescriptor ?: return - val commonModuleDescriptor = declaration.containingKtFile.findModuleDescriptor() - - if (commonModuleDescriptor.implementingDescriptors.none { it.hasActualsFor(descriptor) }) return + if (!declaration.hasAtLeastOneActual()) return val anchor = declaration.expectOrActualAnchor @@ -496,10 +487,7 @@ private fun collectExpectedMarkers( if (!KotlinLineMarkerOptions.expectOption.isEnabled) return if (declaration.requiresNoMarkers()) return - - val descriptor = declaration.toDescriptor() as? MemberDescriptor ?: return - val platformModuleDescriptor = declaration.containingKtFile.findModuleDescriptor() - if (!platformModuleDescriptor.implementedDescriptors.any { it.hasDeclarationOf(descriptor) }) return + if (!declaration.hasMatchingExpected()) return val anchor = declaration.expectOrActualAnchor