[FIR] Refactoring: "Move in" parentSubstitutor creation to getCallablesCompatibility
Motivation: Make getCallablesCompatibility API slightly nicer. The function is going to be called from more places after KT-62590 is fixed. This commit makes fixing KT-62590 easier Review: https://jetbrains.team/p/kt/reviews/12750/timeline
This commit is contained in:
-10
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.dependenciesSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.dependenciesSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
@@ -19,7 +18,6 @@ import org.jetbrains.kotlin.fir.types.*
|
|||||||
import org.jetbrains.kotlin.mpp.CallableSymbolMarker
|
import org.jetbrains.kotlin.mpp.CallableSymbolMarker
|
||||||
import org.jetbrains.kotlin.resolve.calls.mpp.AbstractExpectActualCompatibilityChecker
|
import org.jetbrains.kotlin.resolve.calls.mpp.AbstractExpectActualCompatibilityChecker
|
||||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
|
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
|
||||||
import org.jetbrains.kotlin.utils.zipIfSizesAreEqual
|
|
||||||
|
|
||||||
object FirExpectActualResolver {
|
object FirExpectActualResolver {
|
||||||
fun findExpectForActual(
|
fun findExpectForActual(
|
||||||
@@ -33,7 +31,6 @@ object FirExpectActualResolver {
|
|||||||
is FirCallableSymbol<*> -> {
|
is FirCallableSymbol<*> -> {
|
||||||
val callableId = actualSymbol.callableId
|
val callableId = actualSymbol.callableId
|
||||||
val classId = callableId.classId
|
val classId = callableId.classId
|
||||||
var parentSubstitutor: ConeSubstitutor? = null
|
|
||||||
var expectContainingClass: FirRegularClassSymbol? = null
|
var expectContainingClass: FirRegularClassSymbol? = null
|
||||||
var actualContainingClass: FirRegularClassSymbol? = null
|
var actualContainingClass: FirRegularClassSymbol? = null
|
||||||
val candidates = when {
|
val candidates = when {
|
||||||
@@ -44,12 +41,6 @@ object FirExpectActualResolver {
|
|||||||
actualContainingClass = useSiteSession.symbolProvider.getClassLikeSymbolByClassId(classId)
|
actualContainingClass = useSiteSession.symbolProvider.getClassLikeSymbolByClassId(classId)
|
||||||
?.fullyExpandedClass(useSiteSession)
|
?.fullyExpandedClass(useSiteSession)
|
||||||
|
|
||||||
val expectTypeParameters = expectContainingClass?.typeParameterSymbols.orEmpty()
|
|
||||||
val actualTypeParameters = actualContainingClass?.typeParameterSymbols.orEmpty()
|
|
||||||
|
|
||||||
parentSubstitutor = (expectTypeParameters zipIfSizesAreEqual actualTypeParameters)
|
|
||||||
?.let { createExpectActualTypeParameterSubstitutor(it, useSiteSession) }
|
|
||||||
|
|
||||||
when (actualSymbol) {
|
when (actualSymbol) {
|
||||||
is FirConstructorSymbol -> expectContainingClass?.getConstructors(scopeSession)
|
is FirConstructorSymbol -> expectContainingClass?.getConstructors(scopeSession)
|
||||||
else -> expectContainingClass?.getMembersForExpectClass(actualSymbol.name)
|
else -> expectContainingClass?.getMembersForExpectClass(actualSymbol.name)
|
||||||
@@ -70,7 +61,6 @@ object FirExpectActualResolver {
|
|||||||
AbstractExpectActualCompatibilityChecker.getCallablesCompatibility(
|
AbstractExpectActualCompatibilityChecker.getCallablesCompatibility(
|
||||||
expectDeclaration,
|
expectDeclaration,
|
||||||
actualSymbol as CallableSymbolMarker,
|
actualSymbol as CallableSymbolMarker,
|
||||||
parentSubstitutor,
|
|
||||||
expectContainingClass,
|
expectContainingClass,
|
||||||
actualContainingClass,
|
actualContainingClass,
|
||||||
context
|
context
|
||||||
|
|||||||
+13
-6
@@ -46,16 +46,23 @@ object AbstractExpectActualCompatibilityChecker {
|
|||||||
fun <T : DeclarationSymbolMarker> getCallablesCompatibility(
|
fun <T : DeclarationSymbolMarker> getCallablesCompatibility(
|
||||||
expectDeclaration: CallableSymbolMarker,
|
expectDeclaration: CallableSymbolMarker,
|
||||||
actualDeclaration: CallableSymbolMarker,
|
actualDeclaration: CallableSymbolMarker,
|
||||||
parentSubstitutor: TypeSubstitutorMarker?,
|
|
||||||
expectContainingClass: RegularClassSymbolMarker?,
|
expectContainingClass: RegularClassSymbolMarker?,
|
||||||
actualContainingClass: RegularClassSymbolMarker?,
|
actualContainingClass: RegularClassSymbolMarker?,
|
||||||
context: ExpectActualMatchingContext<T>,
|
context: ExpectActualMatchingContext<T>,
|
||||||
): ExpectActualCompatibility<T> {
|
): ExpectActualCompatibility<T> = with (context) {
|
||||||
val result = with(context) {
|
val expectTypeParameters = expectContainingClass?.typeParameters.orEmpty()
|
||||||
getCallablesCompatibility(expectDeclaration, actualDeclaration, parentSubstitutor, expectContainingClass, actualContainingClass)
|
val actualTypeParameters = actualContainingClass?.typeParameters.orEmpty()
|
||||||
}
|
val parentSubstitutor = (expectTypeParameters zipIfSizesAreEqual actualTypeParameters)
|
||||||
|
?.let { createExpectActualTypeParameterSubstitutor(it, parentSubstitutor = null) }
|
||||||
|
val result = getCallablesCompatibility(
|
||||||
|
expectDeclaration,
|
||||||
|
actualDeclaration,
|
||||||
|
parentSubstitutor,
|
||||||
|
expectContainingClass,
|
||||||
|
actualContainingClass
|
||||||
|
)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
return result as ExpectActualCompatibility<T>
|
result as ExpectActualCompatibility<T>
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : DeclarationSymbolMarker> matchSingleExpectTopLevelDeclarationAgainstPotentialActuals(
|
fun <T : DeclarationSymbolMarker> matchSingleExpectTopLevelDeclarationAgainstPotentialActuals(
|
||||||
|
|||||||
Reference in New Issue
Block a user