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.fir.FirSession
|
||||
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.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
@@ -97,22 +98,20 @@ fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||
val typeParameters = (declaration as? FirTypeParameterRefsOwner)?.typeParameters.orEmpty()
|
||||
val originalSubstitution = createSubstitution(typeParameters, this, session)
|
||||
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)
|
||||
// is called on an external type, like MyMap<String, String>,
|
||||
// to determine parameter types properly (e.g. String, String instead of K, V)
|
||||
val platformTypeParameters = platformClass.typeParameters
|
||||
val platformSubstitution = createSubstitution(platformTypeParameters, this, session)
|
||||
FirClassSubstitutionScope(
|
||||
session, useSiteMemberScope, originalSubstitution + platformSubstitution, skipPrivateMembers = true,
|
||||
derivedClassId = derivedClassId
|
||||
)
|
||||
substitutorByMap(originalSubstitution + platformSubstitution)
|
||||
} else {
|
||||
FirClassSubstitutionScope(
|
||||
session, useSiteMemberScope, originalSubstitution, skipPrivateMembers = true,
|
||||
derivedClassId = derivedClassId
|
||||
)
|
||||
substitutorByMap(originalSubstitution)
|
||||
}
|
||||
FirClassSubstitutionScope(
|
||||
session, useSiteMemberScope, substitutor,
|
||||
skipPrivateMembers = true, derivedClassId = derivedClassId
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-8
@@ -35,14 +35,6 @@ class FirClassSubstitutionScope(
|
||||
private val fakeOverrideConstructors = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
|
||||
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) {
|
||||
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
|
||||
val function = fakeOverrideFunctions.getOrPut(original) { createFakeOverrideFunction(original) }
|
||||
|
||||
Reference in New Issue
Block a user