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.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
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.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
|
|
||||||
class KotlinScopeProvider(
|
class KotlinScopeProvider(
|
||||||
val declaredMemberScopeDecorator: (
|
val declaredMemberScopeDecorator: (
|
||||||
@@ -72,7 +72,7 @@ class KotlinScopeProvider(
|
|||||||
|
|
||||||
|
|
||||||
data class ConeSubstitutionScopeKey(
|
data class ConeSubstitutionScopeKey(
|
||||||
val classId: ClassId?, val isFromExpectClass: Boolean, val substitutor: ConeSubstitutor
|
val lookupTag: ConeClassLikeLookupTag, val isFromExpectClass: Boolean, val substitutor: ConeSubstitutor
|
||||||
) : ScopeSessionKey<FirClass<*>, FirClassSubstitutionScope>()
|
) : ScopeSessionKey<FirClass<*>, FirClassSubstitutionScope>()
|
||||||
|
|
||||||
data class DelegatedMemberScopeKey(val callableId: CallableId) : ScopeSessionKey<FirField, FirDelegatedMemberScope>()
|
data class DelegatedMemberScopeKey(val callableId: CallableId) : ScopeSessionKey<FirField, FirDelegatedMemberScope>()
|
||||||
@@ -166,7 +166,7 @@ private fun FirClass<*>.scopeForClassImpl(
|
|||||||
if (substitutor == ConeSubstitutor.Empty) return basicScope
|
if (substitutor == ConeSubstitutor.Empty) return basicScope
|
||||||
|
|
||||||
return scopeSession.getOrBuild(
|
return scopeSession.getOrBuild(
|
||||||
this, ConeSubstitutionScopeKey(classFirDispatchReceiver.classId, isFromExpectClass, substitutor)
|
this, ConeSubstitutionScopeKey(classFirDispatchReceiver.symbol.toLookupTag(), isFromExpectClass, substitutor)
|
||||||
) {
|
) {
|
||||||
FirClassSubstitutionScope(
|
FirClassSubstitutionScope(
|
||||||
useSiteSession, basicScope, substitutor, classFirDispatchReceiver.defaultType(),
|
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.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
data class ConeClassLookupTagWithFixedSymbol(
|
class ConeClassLookupTagWithFixedSymbol(
|
||||||
override val classId: ClassId,
|
override val classId: ClassId,
|
||||||
val symbol: FirClassSymbol<*>
|
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