diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index 2614c950169..13c7335b386 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -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, // 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 + ) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index a42e1b0c727..d77013263d6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -35,14 +35,6 @@ class FirClassSubstitutionScope( private val fakeOverrideConstructors = mutableMapOf() private val fakeOverrideVariables = mutableMapOf, FirVariableSymbol<*>>() - constructor( - session: FirSession, - useSiteMemberScope: FirTypeScope, - substitution: Map, - 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) }