From 4e56fda43944e86a8c0324fedcf82ba77fca8929 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 9 Oct 2017 12:07:52 +0300 Subject: [PATCH] Introduce isExpect/ActualDeclaration in KotlinLineMarkerProvider Treat every member of expect declaration as expect declaration itself So #KT-18455 Fixed --- .../highlighter/markers/KotlinLineMarkerProvider.kt | 11 +++++++++-- .../fromCommonToJvmHeader/common/common.kt | 2 +- .../fromExpectedSecondaryConstructor/common/common.kt | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) 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 0fb3bd85e5b..636af7d0934 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.idea.facet.implementingDescriptors import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier import java.awt.event.MouseEvent @@ -61,6 +62,12 @@ class KotlinLineMarkerProvider : LineMarkerProvider { return null } + private fun KtNamedDeclaration.isExpectDeclaration(): Boolean = + hasExpectModifier() || containingClassOrObject?.isExpectDeclaration() == true + + private fun KtNamedDeclaration.isActualDeclaration(): Boolean = + hasActualModifier() + override fun collectSlowLineMarkers(elements: List, result: MutableCollection>) { if (elements.isEmpty()) return @@ -100,10 +107,10 @@ class KotlinLineMarkerProvider : LineMarkerProvider { for (element in elements) { if (element !is KtNamedDeclaration) continue - if (element.hasExpectModifier()) { + if (element.isExpectDeclaration()) { collectActualMarkers(element, result) } - else if (element.hasActualModifier()) { + else if (element.isActualDeclaration()) { collectExpectedMarkers(element, result) } } diff --git a/idea/testData/multiModuleLineMarker/fromCommonToJvmHeader/common/common.kt b/idea/testData/multiModuleLineMarker/fromCommonToJvmHeader/common/common.kt index d8061bff97c..eae24c519fd 100644 --- a/idea/testData/multiModuleLineMarker/fromCommonToJvmHeader/common/common.kt +++ b/idea/testData/multiModuleLineMarker/fromCommonToJvmHeader/common/common.kt @@ -1,5 +1,5 @@ expect class Header { - fun foo(): Int + fun foo(): Int } expect fun foo(arg: Int): String diff --git a/idea/testData/multiModuleLineMarker/fromExpectedSecondaryConstructor/common/common.kt b/idea/testData/multiModuleLineMarker/fromExpectedSecondaryConstructor/common/common.kt index ed4ab6a7248..f20aba4ec3c 100644 --- a/idea/testData/multiModuleLineMarker/fromExpectedSecondaryConstructor/common/common.kt +++ b/idea/testData/multiModuleLineMarker/fromExpectedSecondaryConstructor/common/common.kt @@ -1,3 +1,3 @@ expect class SecondaryConstructor{ - constructor(name: String, surname: String) + constructor(name: String, surname: String) }