FIR: Simplify contract in FirScopeProvider::getUseSiteMemberScope
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user