FIR: Simplify contract in FirScopeProvider::getUseSiteMemberScope

This commit is contained in:
Denis Zharkov
2020-01-24 15:12:30 +03:00
parent de4bfb3973
commit 6e8d67b96f
4 changed files with 15 additions and 34 deletions
@@ -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))
}
}
@@ -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
}
}
}
@@ -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<FirClass<*>, 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
)
}
if (substitutor == ConeSubstitutor.Empty) return basicScope
return scopeSession.getOrBuild(
this, ConeSubstitutionScopeKey(substitutor)
) {
FirClassSubstitutionScope(useSiteSession, basicScope, scopeSession, substitutor)
}
}
@@ -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