diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt index 78cf39cbbd7..9a6163a3b56 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.backend.common.actualizer import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.PsiIrFileEntry @@ -230,9 +229,9 @@ private class ExpectActualLinkCollector : IrElementVisitor } - fun checkSingleExpectTopLevelDeclarationAgainstPotentialActuals( + fun checkSingleExpectTopLevelDeclarationAgainstMatchedActual( expectDeclaration: DeclarationSymbolMarker, - actualDeclarations: List, + actualDeclaration: DeclarationSymbolMarker, context: ExpectActualMatchingContext, ) { with(context) { - checkSingleExpectAgainstPotentialActuals( + checkSingleExpectAgainstMatchedActual( expectDeclaration, - actualDeclarations, + actualDeclaration, substitutor = null, expectClassSymbol = null, actualClassSymbol = null, @@ -235,9 +234,9 @@ object AbstractExpectActualChecker { ) if (matched != null) { - checkSingleExpectAgainstPotentialActuals( + checkSingleExpectAgainstMatchedActual( expectMember, - listOf(matched), // todo convert vector to scalar + matched, substitutor, expectClassSymbol, actualClassSymbol, @@ -262,42 +261,38 @@ object AbstractExpectActualChecker { } context(ExpectActualMatchingContext<*>) - private fun checkSingleExpectAgainstPotentialActuals( + private fun checkSingleExpectAgainstMatchedActual( expectMember: DeclarationSymbolMarker, - actualMembers: List, + actualMember: DeclarationSymbolMarker, substitutor: TypeSubstitutorMarker?, expectClassSymbol: RegularClassSymbolMarker?, actualClassSymbol: RegularClassSymbolMarker?, incompatibleMembers: MutableList, List>>>?, ) { - val mapping = actualMembers.keysToMap { actualMember -> - when (expectMember) { - is CallableSymbolMarker -> getCallablesCompatibility( - expectMember, - actualMember as CallableSymbolMarker, - substitutor, - expectClassSymbol, - actualClassSymbol - ) + val compatibility = when (expectMember) { + is CallableSymbolMarker -> getCallablesCompatibility( + expectMember, + actualMember as CallableSymbolMarker, + substitutor, + expectClassSymbol, + actualClassSymbol + ) - is RegularClassSymbolMarker -> { - val parentSubstitutor = substitutor?.takeIf { !innerClassesCapturesOuterTypeParameters } - getClassifiersCompatibility( - expectMember, - actualMember as ClassLikeSymbolMarker, - parentSubstitutor, - ) - } - else -> error("Unsupported declaration: $expectMember ($actualMembers)") + is RegularClassSymbolMarker -> { + val parentSubstitutor = substitutor?.takeIf { !innerClassesCapturesOuterTypeParameters } + getClassifiersCompatibility( + expectMember, + actualMember as ClassLikeSymbolMarker, + parentSubstitutor, + ) } + else -> error("Unsupported declaration: $expectMember ($actualMember)") } val incompatibilityMap = mutableMapOf, MutableList>() - for ((actualMember, compatibility) in mapping) { - when (compatibility) { - ExpectActualCheckingCompatibility.Compatible -> return - is ExpectActualCheckingCompatibility.Incompatible<*> -> incompatibilityMap.getOrPut(compatibility) { SmartList() }.add(actualMember) - } + when (compatibility) { + ExpectActualCheckingCompatibility.Compatible -> return + is ExpectActualCheckingCompatibility.Incompatible<*> -> incompatibilityMap.getOrPut(compatibility) { SmartList() }.add(actualMember) } incompatibleMembers?.add(expectMember to incompatibilityMap)