Rename: Fir...UseSiteScope -> Fir...UseSiteMemberScope
This commit is contained in:
@@ -195,11 +195,11 @@ class Fir2IrVisitor(
|
|||||||
private fun IrClass.addFakeOverrides(klass: FirClass, processedCallableNames: MutableList<Name>) {
|
private fun IrClass.addFakeOverrides(klass: FirClass, processedCallableNames: MutableList<Name>) {
|
||||||
if (fakeOverrideMode == FakeOverrideMode.NONE) return
|
if (fakeOverrideMode == FakeOverrideMode.NONE) return
|
||||||
val superTypesCallableNames = klass.collectCallableNamesFromSupertypes()
|
val superTypesCallableNames = klass.collectCallableNamesFromSupertypes()
|
||||||
val useSiteScope = (klass as? FirRegularClass)?.buildUseSiteScope(session, ScopeSession()) ?: return
|
val useSiteMemberScope = (klass as? FirRegularClass)?.buildUseSiteMemberScope(session, ScopeSession()) ?: return
|
||||||
for (name in superTypesCallableNames) {
|
for (name in superTypesCallableNames) {
|
||||||
if (name in processedCallableNames) continue
|
if (name in processedCallableNames) continue
|
||||||
processedCallableNames += name
|
processedCallableNames += name
|
||||||
useSiteScope.processFunctionsByName(name) { functionSymbol ->
|
useSiteMemberScope.processFunctionsByName(name) { functionSymbol ->
|
||||||
// TODO: think about overloaded functions. May be we should process all names.
|
// TODO: think about overloaded functions. May be we should process all names.
|
||||||
if (functionSymbol is FirNamedFunctionSymbol) {
|
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||||
val originalFunction = functionSymbol.fir
|
val originalFunction = functionSymbol.fir
|
||||||
@@ -228,7 +228,7 @@ class Fir2IrVisitor(
|
|||||||
}
|
}
|
||||||
ProcessorAction.STOP
|
ProcessorAction.STOP
|
||||||
}
|
}
|
||||||
useSiteScope.processPropertiesByName(name) { propertySymbol ->
|
useSiteMemberScope.processPropertiesByName(name) { propertySymbol ->
|
||||||
if (propertySymbol is FirPropertySymbol) {
|
if (propertySymbol is FirPropertySymbol) {
|
||||||
val originalProperty = propertySymbol.fir
|
val originalProperty = propertySymbol.fir
|
||||||
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
|
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
|
|||||||
@@ -9,13 +9,11 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary
|
import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.visibility
|
import org.jetbrains.kotlin.fir.declarations.visibility
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||||
@@ -23,7 +21,7 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaConstructor
|
|||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteScope
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
||||||
@@ -82,16 +80,16 @@ class JavaSymbolProvider(
|
|||||||
visitedSymbols: MutableSet<FirClassLikeSymbol<*>>
|
visitedSymbols: MutableSet<FirClassLikeSymbol<*>>
|
||||||
): JavaClassEnhancementScope {
|
): JavaClassEnhancementScope {
|
||||||
return scopeSession.getOrBuild(symbol, JAVA_ENHANCEMENT) {
|
return scopeSession.getOrBuild(symbol, JAVA_ENHANCEMENT) {
|
||||||
JavaClassEnhancementScope(useSiteSession, buildJavaUseSiteScope(symbol.fir, useSiteSession, scopeSession, visitedSymbols))
|
JavaClassEnhancementScope(useSiteSession, buildJavaUseSiteMemberScope(symbol.fir, useSiteSession, scopeSession, visitedSymbols))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildJavaUseSiteScope(
|
private fun buildJavaUseSiteMemberScope(
|
||||||
regularClass: FirRegularClass,
|
regularClass: FirRegularClass,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
visitedSymbols: MutableSet<FirClassLikeSymbol<*>>
|
visitedSymbols: MutableSet<FirClassLikeSymbol<*>>
|
||||||
): JavaClassUseSiteScope {
|
): JavaClassUseSiteMemberScope {
|
||||||
return scopeSession.getOrBuild(regularClass.symbol, JAVA_USE_SITE) {
|
return scopeSession.getOrBuild(regularClass.symbol, JAVA_USE_SITE) {
|
||||||
val declaredScope = declaredMemberScope(regularClass)
|
val declaredScope = declaredMemberScope(regularClass)
|
||||||
val superTypeEnhancementScopes =
|
val superTypeEnhancementScopes =
|
||||||
@@ -108,7 +106,7 @@ class JavaSymbolProvider(
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JavaClassUseSiteScope(
|
JavaClassUseSiteMemberScope(
|
||||||
regularClass, useSiteSession,
|
regularClass, useSiteSession,
|
||||||
FirSuperTypeScope(useSiteSession, superTypeEnhancementScopes), declaredScope
|
FirSuperTypeScope(useSiteSession, superTypeEnhancementScopes), declaredScope
|
||||||
)
|
)
|
||||||
@@ -312,4 +310,4 @@ fun FqName.topLevelName() =
|
|||||||
|
|
||||||
|
|
||||||
private val JAVA_ENHANCEMENT = scopeSessionKey<JavaClassEnhancementScope>()
|
private val JAVA_ENHANCEMENT = scopeSessionKey<JavaClassEnhancementScope>()
|
||||||
private val JAVA_USE_SITE = scopeSessionKey<JavaClassUseSiteScope>()
|
private val JAVA_USE_SITE = scopeSessionKey<JavaClassUseSiteMemberScope>()
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ internal fun FirTypeRef.toNotNullConeKotlinType(
|
|||||||
val javaType = type
|
val javaType = type
|
||||||
javaType.toNotNullConeKotlinType(session, javaTypeParameterStack)
|
javaType.toNotNullConeKotlinType(session, javaTypeParameterStack)
|
||||||
}
|
}
|
||||||
else -> ConeKotlinErrorType("Unexpected type reference in JavaClassUseSiteScope: ${this::class.java}")
|
else -> ConeKotlinErrorType("Unexpected type reference in JavaClassUseSiteMemberScope: ${this::class.java}")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun JavaType?.toNotNullConeKotlinType(
|
internal fun JavaType?.toNotNullConeKotlinType(
|
||||||
|
|||||||
+1
-2
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
|||||||
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.java.createConstant
|
import org.jetbrains.kotlin.fir.java.createConstant
|
||||||
import org.jetbrains.kotlin.fir.java.topLevelName
|
import org.jetbrains.kotlin.fir.java.topLevelName
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
|
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl
|
import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
@@ -143,7 +142,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
|||||||
): FirScope? {
|
): FirScope? {
|
||||||
val symbol = this.getClassLikeSymbolByFqName(classId) as? FirClassSymbol ?: return null
|
val symbol = this.getClassLikeSymbolByFqName(classId) as? FirClassSymbol ?: return null
|
||||||
|
|
||||||
return symbol.fir.buildDefaultUseSiteScope(session, scopeSession)
|
return symbol.fir.buildDefaultUseSiteMemberScope(session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
|
|||||||
+6
-6
@@ -36,9 +36,9 @@ import org.jetbrains.kotlin.utils.Jsr305State
|
|||||||
|
|
||||||
class JavaClassEnhancementScope(
|
class JavaClassEnhancementScope(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val useSiteScope: JavaClassUseSiteScope
|
private val useSiteMemberScope: JavaClassUseSiteMemberScope
|
||||||
) : FirScope() {
|
) : FirScope() {
|
||||||
private val owner: FirRegularClass = useSiteScope.symbol.fir
|
private val owner: FirRegularClass = useSiteMemberScope.symbol.fir
|
||||||
|
|
||||||
private val javaTypeParameterStack: JavaTypeParameterStack =
|
private val javaTypeParameterStack: JavaTypeParameterStack =
|
||||||
if (owner is FirJavaClass) owner.javaTypeParameterStack else JavaTypeParameterStack.EMPTY
|
if (owner is FirJavaClass) owner.javaTypeParameterStack else JavaTypeParameterStack.EMPTY
|
||||||
@@ -53,7 +53,7 @@ class JavaClassEnhancementScope(
|
|||||||
private val enhancements = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>>()
|
private val enhancements = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>>()
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processPropertiesByName(name) process@{ original ->
|
useSiteMemberScope.processPropertiesByName(name) process@{ original ->
|
||||||
|
|
||||||
val field = enhancements.getOrPut(original) { enhance(original, name) }
|
val field = enhancements.getOrPut(original) { enhance(original, name) }
|
||||||
processor(field)
|
processor(field)
|
||||||
@@ -63,7 +63,7 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processFunctionsByName(name) process@{ original ->
|
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
|
||||||
|
|
||||||
val function = enhancements.getOrPut(original) { enhance(original, name) }
|
val function = enhancements.getOrPut(original) { enhance(original, name) }
|
||||||
processor(function as FirFunctionSymbol<*>)
|
processor(function as FirFunctionSymbol<*>)
|
||||||
@@ -348,8 +348,8 @@ class JavaClassEnhancementScope(
|
|||||||
|
|
||||||
private fun FirCallableMemberDeclaration<*>.overriddenMembers(): List<FirCallableMemberDeclaration<*>> {
|
private fun FirCallableMemberDeclaration<*>.overriddenMembers(): List<FirCallableMemberDeclaration<*>> {
|
||||||
val backMap = overrideBindCache.getOrPut(this.name) {
|
val backMap = overrideBindCache.getOrPut(this.name) {
|
||||||
useSiteScope.bindOverrides(this.name)
|
useSiteMemberScope.bindOverrides(this.name)
|
||||||
useSiteScope
|
useSiteMemberScope
|
||||||
.overrideByBase
|
.overrideByBase
|
||||||
.toList()
|
.toList()
|
||||||
.groupBy({ (_, key) -> key }, { (value) -> value })
|
.groupBy({ (_, key) -> key }, { (value) -> value })
|
||||||
|
|||||||
+3
-3
@@ -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.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.*
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteScope
|
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
@@ -24,12 +24,12 @@ import org.jetbrains.kotlin.fir.types.*
|
|||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class JavaClassUseSiteScope(
|
class JavaClassUseSiteMemberScope(
|
||||||
klass: FirRegularClass,
|
klass: FirRegularClass,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
superTypesScope: FirSuperTypeScope,
|
superTypesScope: FirSuperTypeScope,
|
||||||
declaredMemberScope: FirScope
|
declaredMemberScope: FirScope
|
||||||
) : AbstractFirUseSiteScope(session, superTypesScope, declaredMemberScope) {
|
) : AbstractFirUseSiteMemberScope(session, superTypesScope, declaredMemberScope) {
|
||||||
internal val symbol = klass.symbol
|
internal val symbol = klass.symbol
|
||||||
|
|
||||||
private val javaTypeParameterStack: JavaTypeParameterStack =
|
private val javaTypeParameterStack: JavaTypeParameterStack =
|
||||||
@@ -20,7 +20,7 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
|||||||
is ConeClassLikeType -> {
|
is ConeClassLikeType -> {
|
||||||
// TODO: for ConeClassLikeType they might be a type alias instead of a regular class
|
// TODO: for ConeClassLikeType they might be a type alias instead of a regular class
|
||||||
val fir = this.lookupTag.toSymbol(useSiteSession)?.fir as? FirRegularClass ?: return null
|
val fir = this.lookupTag.toSymbol(useSiteSession)?.fir as? FirRegularClass ?: return null
|
||||||
wrapSubstitutionScopeIfNeed(useSiteSession, fir.buildUseSiteScope(useSiteSession, scopeSession)!!, fir, scopeSession)
|
wrapSubstitutionScopeIfNeed(useSiteSession, fir.buildUseSiteMemberScope(useSiteSession, scopeSession)!!, fir, scopeSession)
|
||||||
}
|
}
|
||||||
is ConeTypeParameterType -> {
|
is ConeTypeParameterType -> {
|
||||||
// TODO: support LibraryTypeParameterSymbol or get rid of it
|
// TODO: support LibraryTypeParameterSymbol or get rid of it
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
@@ -51,19 +51,19 @@ val USE_SITE = scopeSessionKey<FirScope>()
|
|||||||
|
|
||||||
data class SubstitutionScopeKey(val type: ConeClassLikeType) : ScopeSessionKey<FirClassSubstitutionScope>() {}
|
data class SubstitutionScopeKey(val type: ConeClassLikeType) : ScopeSessionKey<FirClassSubstitutionScope>() {}
|
||||||
|
|
||||||
fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
fun FirRegularClass.buildUseSiteMemberScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
||||||
val symbolProvider = useSiteSession.firSymbolProvider
|
val symbolProvider = useSiteSession.firSymbolProvider
|
||||||
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)
|
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirTypeAlias.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
fun FirTypeAlias.buildUseSiteMemberScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
||||||
val type = expandedTypeRef.coneTypeUnsafe<ConeClassLikeType>()
|
val type = expandedTypeRef.coneTypeUnsafe<ConeClassLikeType>()
|
||||||
return type.scope(useSiteSession, builder)?.let {
|
return type.scope(useSiteSession, builder)?.let {
|
||||||
type.wrapSubstitutionScopeIfNeed(useSiteSession, it, this, builder)
|
type.wrapSubstitutionScopeIfNeed(useSiteSession, it, this, builder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope {
|
fun FirRegularClass.buildDefaultUseSiteMemberScope(useSiteSession: FirSession, builder: ScopeSession): FirScope {
|
||||||
return builder.getOrBuild(symbol, USE_SITE) {
|
return builder.getOrBuild(symbol, USE_SITE) {
|
||||||
|
|
||||||
val declaredScope = declaredMemberScope(this)
|
val declaredScope = declaredMemberScope(this)
|
||||||
@@ -72,30 +72,30 @@ fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession, builder
|
|||||||
if (useSiteSuperType is ConeClassErrorType) return@mapNotNull null
|
if (useSiteSuperType is ConeClassErrorType) return@mapNotNull null
|
||||||
val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession)
|
val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession)
|
||||||
if (symbol is FirClassSymbol) {
|
if (symbol is FirClassSymbol) {
|
||||||
val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession, builder)!!
|
val useSiteMemberScope = symbol.fir.buildUseSiteMemberScope(useSiteSession, builder)!!
|
||||||
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, useSiteScope, symbol.fir, builder)
|
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, useSiteMemberScope, symbol.fir, builder)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FirClassUseSiteScope(useSiteSession, FirSuperTypeScope(useSiteSession, scopes), declaredScope)
|
FirClassUseSiteMemberScope(useSiteSession, FirSuperTypeScope(useSiteSession, scopes), declaredScope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
useSiteScope: FirScope,
|
useSiteMemberScope: FirScope,
|
||||||
declaration: FirClassLikeDeclaration<*>,
|
declaration: FirClassLikeDeclaration<*>,
|
||||||
builder: ScopeSession
|
builder: ScopeSession
|
||||||
): FirScope {
|
): FirScope {
|
||||||
if (this.typeArguments.isEmpty()) return useSiteScope
|
if (this.typeArguments.isEmpty()) return useSiteMemberScope
|
||||||
return builder.getOrBuild(declaration.symbol, SubstitutionScopeKey(this)) {
|
return builder.getOrBuild(declaration.symbol, SubstitutionScopeKey(this)) {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
val substitution = declaration.typeParameters.zip(this.typeArguments) { typeParameter, typeArgument ->
|
val substitution = declaration.typeParameters.zip(this.typeArguments) { typeParameter, typeArgument ->
|
||||||
typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type
|
typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type
|
||||||
}.filter { (_, type) -> type != null }.toMap() as Map<FirTypeParameterSymbol, ConeKotlinType>
|
}.filter { (_, type) -> type != null }.toMap() as Map<FirTypeParameterSymbol, ConeKotlinType>
|
||||||
|
|
||||||
FirClassSubstitutionScope(session, useSiteScope, builder, substitution)
|
FirClassSubstitutionScope(session, useSiteMemberScope, builder, substitution)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -350,8 +350,8 @@ private fun processConstructors(
|
|||||||
try {
|
try {
|
||||||
if (matchedSymbol != null) {
|
if (matchedSymbol != null) {
|
||||||
val scope = when (matchedSymbol) {
|
val scope = when (matchedSymbol) {
|
||||||
is FirTypeAliasSymbol -> matchedSymbol.fir.buildUseSiteScope(session, scopeSession)
|
is FirTypeAliasSymbol -> matchedSymbol.fir.buildUseSiteMemberScope(session, scopeSession)
|
||||||
is FirClassSymbol -> matchedSymbol.fir.buildUseSiteScope(session, scopeSession)
|
is FirClassSymbol -> matchedSymbol.fir.buildUseSiteMemberScope(session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
|
|||||||
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
|
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteScope
|
import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.resolve.getOrPut
|
import org.jetbrains.kotlin.fir.resolve.getOrPut
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
@@ -130,7 +130,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope? {
|
): FirScope? {
|
||||||
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
|
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
|
||||||
return symbol.fir.buildDefaultUseSiteScope(useSiteSession, scopeSession)
|
return symbol.fir.buildDefaultUseSiteMemberScope(useSiteSession, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPackage(fqName: FqName): FqName? {
|
override fun getPackage(fqName: FqName): FqName? {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteScope
|
import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
@@ -216,7 +216,7 @@ class FirProviderImpl(val session: FirSession) : FirProvider() {
|
|||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope? {
|
): FirScope? {
|
||||||
return when (val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null) {
|
return when (val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null) {
|
||||||
is FirClassSymbol -> symbol.fir.buildDefaultUseSiteScope(useSiteSession, scopeSession)
|
is FirClassSymbol -> symbol.fir.buildDefaultUseSiteMemberScope(useSiteSession, scopeSession)
|
||||||
is FirTypeAliasSymbol -> {
|
is FirTypeAliasSymbol -> {
|
||||||
val expandedTypeRef = symbol.fir.expandedTypeRef as FirResolvedTypeRef
|
val expandedTypeRef = symbol.fir.expandedTypeRef as FirResolvedTypeRef
|
||||||
val expandedType = expandedTypeRef.type as? ConeLookupTagBasedType ?: return null
|
val expandedType = expandedTypeRef.type as? ConeLookupTagBasedType ?: return null
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class AbstractFirUseSiteScope(
|
abstract class AbstractFirUseSiteMemberScope(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
protected val superTypesScope: FirSuperTypeScope,
|
protected val superTypesScope: FirSuperTypeScope,
|
||||||
protected val declaredMemberScope: FirScope
|
protected val declaredMemberScope: FirScope
|
||||||
+3
-3
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirClassSubstitutionScope(
|
class FirClassSubstitutionScope(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val useSiteScope: FirScope,
|
private val useSiteMemberScope: FirScope,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
substitution: Map<FirTypeParameterSymbol, ConeKotlinType>
|
substitution: Map<FirTypeParameterSymbol, ConeKotlinType>
|
||||||
) : FirScope() {
|
) : FirScope() {
|
||||||
@@ -35,7 +35,7 @@ class FirClassSubstitutionScope(
|
|||||||
private val substitutor = substitutorByMap(substitution)
|
private val substitutor = substitutorByMap(substitution)
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processFunctionsByName(name) process@{ original ->
|
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
|
||||||
|
|
||||||
val function = fakeOverrideFunctions.getOrPut(original) { createFakeOverrideFunction(original) }
|
val function = fakeOverrideFunctions.getOrPut(original) { createFakeOverrideFunction(original) }
|
||||||
processor(function)
|
processor(function)
|
||||||
@@ -46,7 +46,7 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
return useSiteScope.processPropertiesByName(name) process@{ original ->
|
return useSiteMemberScope.processPropertiesByName(name) process@{ original ->
|
||||||
if (original is FirPropertySymbol) {
|
if (original is FirPropertySymbol) {
|
||||||
val property = fakeOverrideProperties.getOrPut(original) { createFakeOverrideProperty(original) }
|
val property = fakeOverrideProperties.getOrPut(original) { createFakeOverrideProperty(original) }
|
||||||
processor(property)
|
processor(property)
|
||||||
|
|||||||
+2
-2
@@ -13,11 +13,11 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassUseSiteScope(
|
class FirClassUseSiteMemberScope(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
superTypesScope: FirSuperTypeScope,
|
superTypesScope: FirSuperTypeScope,
|
||||||
declaredMemberScope: FirScope
|
declaredMemberScope: FirScope
|
||||||
) : AbstractFirUseSiteScope(session, superTypesScope, declaredMemberScope) {
|
) : AbstractFirUseSiteMemberScope(session, superTypesScope, declaredMemberScope) {
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val seen = mutableSetOf<FirCallableSymbol<*>>()
|
val seen = mutableSetOf<FirCallableSymbol<*>>()
|
||||||
Reference in New Issue
Block a user