From 529a1dd720d572150fa8fdea5a8a244927d3a9cd Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Thu, 27 Jul 2023 12:54:08 +0200 Subject: [PATCH] Force recompile all call-sites of ExpectedActualResolver.{findActualForExpected, findExpectedForActual} This is needed to workaround broken incremental compilation in JPS in Kotlin plugin. The incremental compilation bug is reported KT-60759 In Kotlin plugin I created the same commit which changes the name of the function on the call-site. Review: https://jetbrains.team/p/kt/reviews/11039/timeline After a few days in master branch, I will revert this commit --- .../components/KtFe10MultiplatformInfoProvider.kt | 2 +- .../resolve/checkers/ExpectedActualDeclarationChecker.kt | 6 +++--- .../kotlin/resolve/multiplatform/ExpectedActualResolver.kt | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) 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()