FirClassSubstitutionScope: eliminate second constructor to simplify code
This commit is contained in:
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.createSubstitutionForSupertype
|
import org.jetbrains.kotlin.fir.resolve.transformers.createSubstitutionForSupertype
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
@@ -97,22 +98,20 @@ fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
|||||||
val typeParameters = (declaration as? FirTypeParameterRefsOwner)?.typeParameters.orEmpty()
|
val typeParameters = (declaration as? FirTypeParameterRefsOwner)?.typeParameters.orEmpty()
|
||||||
val originalSubstitution = createSubstitution(typeParameters, this, session)
|
val originalSubstitution = createSubstitution(typeParameters, this, session)
|
||||||
val platformClass = session.platformClassMapper.getCorrespondingPlatformClass(declaration)
|
val platformClass = session.platformClassMapper.getCorrespondingPlatformClass(declaration)
|
||||||
if (platformClass != null) {
|
val substitutor = if (platformClass != null) {
|
||||||
// This kind of substitution is necessary when method which is mapped from Java (e.g. Java Map.forEach)
|
// This kind of substitution is necessary when method which is mapped from Java (e.g. Java Map.forEach)
|
||||||
// is called on an external type, like MyMap<String, String>,
|
// is called on an external type, like MyMap<String, String>,
|
||||||
// to determine parameter types properly (e.g. String, String instead of K, V)
|
// to determine parameter types properly (e.g. String, String instead of K, V)
|
||||||
val platformTypeParameters = platformClass.typeParameters
|
val platformTypeParameters = platformClass.typeParameters
|
||||||
val platformSubstitution = createSubstitution(platformTypeParameters, this, session)
|
val platformSubstitution = createSubstitution(platformTypeParameters, this, session)
|
||||||
FirClassSubstitutionScope(
|
substitutorByMap(originalSubstitution + platformSubstitution)
|
||||||
session, useSiteMemberScope, originalSubstitution + platformSubstitution, skipPrivateMembers = true,
|
|
||||||
derivedClassId = derivedClassId
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
FirClassSubstitutionScope(
|
substitutorByMap(originalSubstitution)
|
||||||
session, useSiteMemberScope, originalSubstitution, skipPrivateMembers = true,
|
|
||||||
derivedClassId = derivedClassId
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
FirClassSubstitutionScope(
|
||||||
|
session, useSiteMemberScope, substitutor,
|
||||||
|
skipPrivateMembers = true, derivedClassId = derivedClassId
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-8
@@ -35,14 +35,6 @@ class FirClassSubstitutionScope(
|
|||||||
private val fakeOverrideConstructors = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
|
private val fakeOverrideConstructors = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
|
||||||
private val fakeOverrideVariables = mutableMapOf<FirVariableSymbol<*>, FirVariableSymbol<*>>()
|
private val fakeOverrideVariables = mutableMapOf<FirVariableSymbol<*>, FirVariableSymbol<*>>()
|
||||||
|
|
||||||
constructor(
|
|
||||||
session: FirSession,
|
|
||||||
useSiteMemberScope: FirTypeScope,
|
|
||||||
substitution: Map<FirTypeParameterSymbol, ConeKotlinType>,
|
|
||||||
skipPrivateMembers: Boolean,
|
|
||||||
derivedClassId: ClassId?
|
|
||||||
) : this(session, useSiteMemberScope, substitutorByMap(substitution), skipPrivateMembers, derivedClassId)
|
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||||
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
|
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
|
||||||
val function = fakeOverrideFunctions.getOrPut(original) { createFakeOverrideFunction(original) }
|
val function = fakeOverrideFunctions.getOrPut(original) { createFakeOverrideFunction(original) }
|
||||||
|
|||||||
Reference in New Issue
Block a user