From 6e8d67b96f750f88468e958ccd338ac66628a279 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 24 Jan 2020 15:12:30 +0300 Subject: [PATCH] FIR: Simplify contract in FirScopeProvider::getUseSiteMemberScope --- .../kotlin/fir/java/JavaScopeProvider.kt | 14 ++------- .../fir/builder/StubFirScopeProvider.kt | 4 +-- .../kotlin/fir/scopes/KotlinScopeProvider.kt | 29 +++++++------------ .../kotlin/fir/scopes/FirScopeProvider.kt | 2 -- 4 files changed, 15 insertions(+), 34 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt index c013eb7751a..511d41e5580 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaScopeProvider.kt @@ -13,8 +13,6 @@ import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteMemberScope import org.jetbrains.kotlin.fir.java.scopes.JavaOverrideChecker import org.jetbrains.kotlin.fir.resolve.* -import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor -import org.jetbrains.kotlin.fir.scopes.ConeSubstitutionScopeKey import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.impl.* @@ -33,16 +31,10 @@ class JavaScopeProvider( ) : FirScopeProvider() { override fun getUseSiteMemberScope( klass: FirClass<*>, - substitutor: ConeSubstitutor, useSiteSession: FirSession, scopeSession: ScopeSession - ): FirScope { - val baseScope = buildJavaEnhancementScope(useSiteSession, klass.symbol as FirRegularClassSymbol, scopeSession, mutableSetOf()) - if (substitutor == ConeSubstitutor.Empty) return baseScope - return scopeSession.getOrBuild(klass, ConeSubstitutionScopeKey(substitutor)) { - FirClassSubstitutionScope(useSiteSession, baseScope, scopeSession, substitutor) - } - } + ): FirScope = + buildJavaEnhancementScope(useSiteSession, klass.symbol as FirRegularClassSymbol, scopeSession, mutableSetOf()) private fun buildJavaEnhancementScope( useSiteSession: FirSession, @@ -105,7 +97,7 @@ class JavaScopeProvider( useSiteSession: FirSession, scopeSession: ScopeSession ): FirScope? { - return FirStaticScope(getUseSiteMemberScope(klass, ConeSubstitutor.Empty, useSiteSession, scopeSession)) + return FirStaticScope(getUseSiteMemberScope(klass, useSiteSession, scopeSession)) } } diff --git a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt index ad4c5698e08..543767802dc 100644 --- a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt +++ b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/StubFirScopeProvider.kt @@ -8,14 +8,12 @@ package org.jetbrains.kotlin.fir.builder import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScopeProvider object StubFirScopeProvider : FirScopeProvider() { override fun getUseSiteMemberScope( klass: FirClass<*>, - substitutor: ConeSubstitutor, useSiteSession: FirSession, scopeSession: ScopeSession ): FirScope { @@ -29,4 +27,4 @@ object StubFirScopeProvider : FirScopeProvider() { ): FirScope? { return null } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt index e20fdccdd2b..52f9806e7d1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt @@ -32,7 +32,7 @@ class KotlinScopeProvider( return substitutorByMap(originalSubstitution) } - private fun buildRawUseSiteScope( + override fun getUseSiteMemberScope( klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession @@ -60,20 +60,6 @@ class KotlinScopeProvider( } } - override fun getUseSiteMemberScope( - klass: FirClass<*>, - substitutor: ConeSubstitutor, - useSiteSession: FirSession, - scopeSession: ScopeSession - ): FirScope { - if (substitutor == ConeSubstitutor.Empty) return buildRawUseSiteScope(klass, useSiteSession, scopeSession) - return scopeSession.getOrBuild( - klass, ConeSubstitutionScopeKey(substitutor) - ) { - FirClassSubstitutionScope(useSiteSession, buildRawUseSiteScope(klass, useSiteSession, scopeSession), scopeSession, substitutor) - } - } - override fun getStaticMemberScopeForCallables( klass: FirClass<*>, useSiteSession: FirSession, @@ -90,7 +76,14 @@ class KotlinScopeProvider( data class ConeSubstitutionScopeKey(val substitutor: ConeSubstitutor) : ScopeSessionKey, FirClassSubstitutionScope>() fun FirClass<*>.scope(substitutor: ConeSubstitutor, useSiteSession: FirSession, scopeSession: ScopeSession): FirScope { - return scopeProvider.getUseSiteMemberScope( - this, substitutor, useSiteSession, scopeSession + val basicScope = scopeProvider.getUseSiteMemberScope( + this, useSiteSession, scopeSession ) -} \ No newline at end of file + if (substitutor == ConeSubstitutor.Empty) return basicScope + + return scopeSession.getOrBuild( + this, ConeSubstitutionScopeKey(substitutor) + ) { + FirClassSubstitutionScope(useSiteSession, basicScope, scopeSession, substitutor) + } +} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt index 78dd7e7f531..10c0c781fe9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScopeProvider.kt @@ -8,12 +8,10 @@ package org.jetbrains.kotlin.fir.scopes import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor abstract class FirScopeProvider { abstract fun getUseSiteMemberScope( klass: FirClass<*>, - substitutor: ConeSubstitutor, useSiteSession: FirSession, scopeSession: ScopeSession ): FirScope