From 109f1938f6db3add785fb60b5f6c19d07e0890ad Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 1 Mar 2019 13:08:37 +0300 Subject: [PATCH] FIR: make simplification around class substitution scope --- .../transformers/FirAccessResolveTransformer.kt | 12 +++++------- .../fir/scopes/impl/FirClassSubstitutionScope.kt | 15 ++++++--------- .../fir/scopes/impl/FirClassUseSiteScope.kt | 5 ++--- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt index cfa7f99ce10..c29dcf1e6fd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.resolve.toSymbol -import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT import org.jetbrains.kotlin.fir.scopes.impl.* @@ -39,8 +38,7 @@ class FirAccessResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(rev } private fun ConeClassLikeType.buildSubstitutionScope( - useSiteSession: FirSession, - unsubstituted: FirScope, + useSiteScope: FirClassUseSiteScope, regularClass: FirRegularClass ): FirClassSubstitutionScope? { if (this.typeArguments.isEmpty()) return null @@ -50,7 +48,7 @@ class FirAccessResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(rev typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type }.filter { (_, type) -> type != null }.toMap() as Map - return FirClassSubstitutionScope(useSiteSession, unsubstituted, substitution, true) + return FirClassSubstitutionScope(useSiteScope, substitution) } private fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession = session): FirClassUseSiteScope { @@ -61,13 +59,13 @@ class FirAccessResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(rev if (useSiteSuperType is ConeClassErrorType) return@mapNotNullTo null val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession) if (symbol is FirClassSymbol) { - val scope = symbol.fir.buildUseSiteScope(useSiteSession) - useSiteSuperType.buildSubstitutionScope(useSiteSession, scope, symbol.fir) ?: scope + val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession) + useSiteSuperType.buildSubstitutionScope(useSiteScope, symbol.fir) ?: useSiteScope } else { null } } - return FirClassUseSiteScope(useSiteSession, superTypeScope, declaredScope, true) + return FirClassUseSiteScope(useSiteSession, superTypeScope, declaredScope) } override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { 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 f1564cafc9d..790a7a0ba5f 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 @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.fir.scopes.impl -import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirNamedFunction import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl @@ -21,13 +20,11 @@ import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.name.Name class FirClassSubstitutionScope( - session: FirSession, - private val unsubstituted: FirScope, - private val substitution: Map, - lookupInFir: Boolean -) : FirAbstractProviderBasedScope(session, lookupInFir) { + private val useSiteScope: FirClassUseSiteScope, + private val substitution: Map +) : FirScope { - val fakeOverrides = mutableMapOf() + private val fakeOverrides = mutableMapOf() private fun wrapProjection(old: ConeKotlinTypeProjection, newType: ConeKotlinType): ConeKotlinTypeProjection { return when (old) { @@ -83,7 +80,7 @@ class FirClassSubstitutionScope( override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction { - unsubstituted.processFunctionsByName(name) process@{ original -> + useSiteScope.processFunctionsByName(name) process@{ original -> val function = fakeOverrides.getOrPut(original) { createFakeOverride(original, name) } processor(function as ConeFunctionSymbol) @@ -94,7 +91,7 @@ class FirClassSubstitutionScope( } override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { - return unsubstituted.processPropertiesByName(name, processor) + return useSiteScope.processPropertiesByName(name, processor) } private fun createFakeOverride( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt index 484059b3cc8..7eed7c9a948 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt @@ -30,9 +30,8 @@ import org.jetbrains.kotlin.utils.addToStdlib.cast class FirClassUseSiteScope( session: FirSession, private val superTypesScope: FirScope, - private val declaredMemberScope: FirClassDeclaredMemberScope, - lookupInFir: Boolean -) : FirAbstractProviderBasedScope(session, lookupInFir) { + private val declaredMemberScope: FirScope +) : FirAbstractProviderBasedScope(session, lookupInFir = true) { //base symbol as key val overrides = mutableMapOf()