From 18af4155b888b351acba6e3f050a9f1d2657ba1d Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 2 Jun 2021 10:46:06 +0300 Subject: [PATCH] [FIR] Properly infer open modality for functions of expect interfaces --- .../fir/resolve/transformers/FirStatusResolveTransformer.kt | 3 ++- .../kotlin/fir/resolve/transformers/FirStatusResolver.kt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index a9825b2e6a5..77bbd4e08ce 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -484,7 +484,8 @@ abstract class AbstractFirStatusResolveTransformer( if (needReplacePhase(simpleFunction)) { simpleFunction.replaceResolvePhase(transformerPhase) } - simpleFunction.transformStatus(this, statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false)) + val resolvedStatus = statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false) + simpleFunction.transformStatus(this, resolvedStatus) calculateDeprecations(simpleFunction) return transformDeclaration(simpleFunction, data) as FirStatement } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt index 3ab3df932ea..98902f0b289 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt @@ -158,7 +158,7 @@ class FirStatusResolver( } val modality = status.modality?.let { - if (it == Modality.OPEN && containingClass?.classKind == ClassKind.INTERFACE && !declaration.hasOwnBodyOrAccessorBody()) { + if (it == Modality.OPEN && containingClass?.classKind == ClassKind.INTERFACE && !(declaration.hasOwnBodyOrAccessorBody() || status.isExpect)) { Modality.ABSTRACT } else { it