diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10MultiplatformInfoProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10MultiplatformInfoProvider.kt index e914317b739..a3a49f068bc 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10MultiplatformInfoProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10MultiplatformInfoProvider.kt @@ -27,7 +27,7 @@ internal class KtFe10MultiplatformInfoProvider( val memberDescriptor = (getSymbolDescriptor(actual) as? MemberDescriptor)?.takeIf { it.isActual } ?: return null val expectedCompatibilityMap = - ExpectedActualResolver.findExpectedForActual(memberDescriptor) ?: return null + ExpectedActualResolver.findExpectedForActual_incrementalCompilationWorkaround(memberDescriptor) ?: return null val expectsForActual = (expectedCompatibilityMap[ExpectActualCompatibility.Compatible] ?: expectedCompatibilityMap.values.flatten()) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt index 2290d658d4e..d4a8cfef57c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt @@ -270,7 +270,7 @@ class ExpectedActualDeclarationChecker( compatibility: Map, List> ): Boolean { return compatibility.values.flatMapTo(hashSetOf()) { it }.all { actual -> - val expectedOnes = ExpectedActualResolver.findExpectedForActual(actual, onlyFromThisModule(module)) + val expectedOnes = ExpectedActualResolver.findExpectedForActual_incrementalCompilationWorkaround(actual, onlyFromThisModule(module)) expectedOnes != null && Compatible in expectedOnes.keys } } @@ -298,7 +298,7 @@ class ExpectedActualDeclarationChecker( moduleVisibilityFilter: ModuleFilter ) { val compatibility = ExpectedActualResolver - .findExpectedForActual(descriptor, moduleVisibilityFilter, shouldCheckAbsenceOfDefaultParamsInActual = true) + .findExpectedForActual_incrementalCompilationWorkaround(descriptor, moduleVisibilityFilter, shouldCheckAbsenceOfDefaultParamsInActual = true) ?: return checkAmbiguousExpects(compatibility, trace, reportOn, descriptor) @@ -337,7 +337,7 @@ class ExpectedActualDeclarationChecker( return actualMember != null && actualMember.isExplicitActualDeclaration() && !incompatibility.allStrongIncompatibilities() && - ExpectedActualResolver.findExpectedForActual( + ExpectedActualResolver.findExpectedForActual_incrementalCompilationWorkaround( actualMember, onlyFromThisModule(expectedMember.module) )?.values?.singleOrNull()?.singleOrNull() == expectedMember } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt index d72f1c5d716..e1c1def321f 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt @@ -54,7 +54,8 @@ object ExpectedActualResolver { } } - fun findExpectedForActual( + // incremental compilation workaround for KT-60759 + fun findExpectedForActual_incrementalCompilationWorkaround( actual: MemberDescriptor, moduleFilter: (ModuleDescriptor) -> Boolean = allModulesProvidingExpectsFor(actual.module), shouldCheckAbsenceOfDefaultParamsInActual: Boolean = false, @@ -67,7 +68,7 @@ object ExpectedActualResolver { is ClassifierDescriptorWithTypeParameters -> { // TODO: replace with 'singleOrNull' as soon as multi-module diagnostic tests are refactored val expectedClass = - findExpectedForActual(container, moduleFilter, shouldCheckAbsenceOfDefaultParamsInActual)?.values + findExpectedForActual_incrementalCompilationWorkaround(container, moduleFilter, shouldCheckAbsenceOfDefaultParamsInActual)?.values ?.firstOrNull()?.firstOrNull() as? ClassDescriptor with(context) { expectedClass?.getMembersForExpectClass(actual.name)?.filterIsInstance().orEmpty() @@ -183,7 +184,7 @@ fun MemberDescriptor.findAnyActualsForExpected( fun MemberDescriptor.findCompatibleExpectsForActual( moduleFilter: ModuleFilter = allModulesProvidingExpectsFor(module) ): List = - ExpectedActualResolver.findExpectedForActual(this, moduleFilter)?.get(Compatible).orEmpty() + ExpectedActualResolver.findExpectedForActual_incrementalCompilationWorkaround(this, moduleFilter)?.get(Compatible).orEmpty() fun DeclarationDescriptor.findExpects(): List { if (this !is MemberDescriptor) return emptyList()