FIR: Fix supertype scopes for local classes
Do not use ClassId as it can't be a key for local classes
This commit is contained in:
@@ -13,12 +13,12 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
class KotlinScopeProvider(
|
||||
val declaredMemberScopeDecorator: (
|
||||
@@ -72,7 +72,7 @@ class KotlinScopeProvider(
|
||||
|
||||
|
||||
data class ConeSubstitutionScopeKey(
|
||||
val classId: ClassId?, val isFromExpectClass: Boolean, val substitutor: ConeSubstitutor
|
||||
val lookupTag: ConeClassLikeLookupTag, val isFromExpectClass: Boolean, val substitutor: ConeSubstitutor
|
||||
) : ScopeSessionKey<FirClass<*>, FirClassSubstitutionScope>()
|
||||
|
||||
data class DelegatedMemberScopeKey(val callableId: CallableId) : ScopeSessionKey<FirField, FirDelegatedMemberScope>()
|
||||
@@ -166,7 +166,7 @@ private fun FirClass<*>.scopeForClassImpl(
|
||||
if (substitutor == ConeSubstitutor.Empty) return basicScope
|
||||
|
||||
return scopeSession.getOrBuild(
|
||||
this, ConeSubstitutionScopeKey(classFirDispatchReceiver.classId, isFromExpectClass, substitutor)
|
||||
this, ConeSubstitutionScopeKey(classFirDispatchReceiver.symbol.toLookupTag(), isFromExpectClass, substitutor)
|
||||
) {
|
||||
FirClassSubstitutionScope(
|
||||
useSiteSession, basicScope, substitutor, classFirDispatchReceiver.defaultType(),
|
||||
|
||||
+17
-2
@@ -8,7 +8,22 @@ package org.jetbrains.kotlin.fir.symbols.impl
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
data class ConeClassLookupTagWithFixedSymbol(
|
||||
class ConeClassLookupTagWithFixedSymbol(
|
||||
override val classId: ClassId,
|
||||
val symbol: FirClassSymbol<*>
|
||||
) : ConeClassLikeLookupTag()
|
||||
) : ConeClassLikeLookupTag() {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as ConeClassLookupTagWithFixedSymbol
|
||||
|
||||
if (symbol != other.symbol) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return symbol.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user