FIR: Introduce and use FirClass<*>::unsubstitutedScope

This commit is contained in:
Denis Zharkov
2020-01-27 15:33:12 +03:00
parent 6e8d67b96f
commit f2abb57021
7 changed files with 17 additions and 18 deletions
@@ -13,11 +13,10 @@ import org.jetbrains.kotlin.fir.declarations.classId
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.wrapSubstitutionScopeIfNeed
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.jvm.JvmMappedScope
import org.jetbrains.kotlin.fir.scopes.scope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
@@ -36,7 +35,7 @@ fun wrapScopeWithJvmMapped(
?: return declaredMemberScope
val preparedSignatures = JvmMappedScope.prepareSignatures(javaClass)
return if (preparedSignatures.isNotEmpty()) {
javaClass.scope(ConeSubstitutor.Empty, useSiteSession, scopeSession).let { javaClassUseSiteScope ->
javaClass.unsubstitutedScope(useSiteSession, scopeSession).let { javaClassUseSiteScope ->
val jvmMappedScope = JvmMappedScope(declaredMemberScope, javaClassUseSiteScope, preparedSignatures)
if (klass !is FirRegularClass) {
jvmMappedScope
@@ -52,4 +51,4 @@ fun wrapScopeWithJvmMapped(
} else {
declaredMemberScope
}
}
}
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
import org.jetbrains.kotlin.fir.resolve.transformers.phasedFir
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
import org.jetbrains.kotlin.fir.scopes.scope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
@@ -289,7 +289,7 @@ class FirCallResolver(
symbol: FirClassSymbol<*>,
typeArguments: List<FirTypeProjection>
): FirDelegatedConstructorCall? {
val scope = symbol.fir.scope(ConeSubstitutor.Empty, session, scopeSession) ?: return null
val scope = symbol.fir.unsubstitutedScope(session, scopeSession) ?: return null
val className = symbol.classId.shortClassName
val callInfo = CallInfo(
CallKind.Function,
@@ -16,9 +16,8 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.inferenceContext
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.scopes.scope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
@@ -249,7 +248,7 @@ private fun FirRegularClass.findSingleAbstractMethodByNames(
var resultMethod: FirSimpleFunction? = null
var metIncorrectMember = false
val classUseSiteMemberScope = this.scope(ConeSubstitutor.Empty, session, scopeSession)
val classUseSiteMemberScope = this.unsubstitutedScope(session, scopeSession)
for (candidateName in samCandidateNames) {
if (metIncorrectMember) break
@@ -12,10 +12,8 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.inferenceContext
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.inferenceContext
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.scopes.scope
import org.jetbrains.kotlin.fir.types.*
abstract class SupertypeSupplier {
@@ -53,7 +51,7 @@ fun FirClassSymbol<*>.buildUseSiteMemberScope(useSiteSession: FirSession, builde
}
fun FirClass<*>.buildUseSiteMemberScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
return this.scope(ConeSubstitutor.Empty, useSiteSession, builder)
return this.unsubstitutedScope(useSiteSession, builder)
}
/* TODO REMOVE */
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
import org.jetbrains.kotlin.fir.scopes.scope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -147,7 +147,7 @@ private fun processConstructors(
) ?: return
} else basicScope
}
is FirClassSymbol -> (matchedSymbol.fir as FirClass<*>).scope(ConeSubstitutor.Empty, session, scopeSession)
is FirClassSymbol -> (matchedSymbol.fir as FirClass<*>).unsubstitutedScope(session, scopeSession)
}
val constructorName = when (matchedSymbol) {
@@ -75,6 +75,10 @@ class KotlinScopeProvider(
data class ConeSubstitutionScopeKey(val substitutor: ConeSubstitutor) : ScopeSessionKey<FirClass<*>, FirClassSubstitutionScope>()
fun FirClass<*>.unsubstitutedScope(useSiteSession: FirSession, scopeSession: ScopeSession): FirScope {
return scope(ConeSubstitutor.Empty, useSiteSession, scopeSession)
}
fun FirClass<*>.scope(substitutor: ConeSubstitutor, useSiteSession: FirSession, scopeSession: ScopeSession): FirScope {
val basicScope = scopeProvider.getUseSiteMemberScope(
this, useSiteSession, scopeSession
@@ -10,10 +10,9 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.declarations.expandedConeType
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.scope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.name.ClassId
@@ -35,7 +34,7 @@ abstract class FirAbstractImportingScope(
return getStaticsScope(expansionSymbol.classId)
}
} else {
return (symbol as FirClassSymbol<*>).fir.scope(ConeSubstitutor.Empty, session, scopeSession)
return (symbol as FirClassSymbol<*>).fir.unsubstitutedScope(session, scopeSession)
}
return null