[FIR] fix resolution ambiguities between weakly compatible expect and actual
There is a corresponding example inside the stdlib, see `kotlin.text.startsWith`. JVM and common counterpart are weakly-compatible as the actual declaration has default arguments, which results in `ExpectActualCompatibility.Incompatible.ActualFunctionWithDefaultParameters` This commit allows such cases. ^KT-61732 fixed
This commit is contained in:
committed by
Space Team
parent
209d59440b
commit
030250d387
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.isCompatibleOrWeaklyIncompatible
|
||||
|
||||
private object ExpectForActualAttributeKey : FirDeclarationDataKey()
|
||||
|
||||
@@ -26,6 +27,13 @@ fun FirBasedSymbol<*>.getSingleExpectForActualOrNull(): FirBasedSymbol<*>? {
|
||||
return expectForActual?.values?.singleOrNull()?.singleOrNull()
|
||||
}
|
||||
|
||||
fun FirBasedSymbol<*>.getSingleCompatibleOrWeaklyIncompatibleExpectForActualOrNull(): FirBasedSymbol<*>? {
|
||||
val expectForActual = expectForActual ?: return null
|
||||
val compatibleOrWeakCompatible: List<FirBasedSymbol<*>> =
|
||||
expectForActual.entries.singleOrNull { it.key.isCompatibleOrWeaklyIncompatible }?.value ?: return null
|
||||
return compatibleOrWeakCompatible.singleOrNull()
|
||||
}
|
||||
|
||||
val FirBasedSymbol<*>.expectForActual: ExpectForActualData?
|
||||
get() {
|
||||
lazyResolveToPhase(FirResolvePhase.EXPECT_ACTUAL_MATCHING)
|
||||
|
||||
Reference in New Issue
Block a user