FirClassSubstitutionScope: eliminate second constructor to simplify code

This commit is contained in:
Mikhail Glukhikh
2020-10-20 09:49:10 +03:00
parent 80f8b5b234
commit 3663bc6be3
2 changed files with 8 additions and 17 deletions
@@ -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
)
}
}
@@ -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) }