FIR: Replace callableId for intersection overrides

This commit is contained in:
Denis Zharkov
2020-09-09 14:27:04 +03:00
parent 11bc0e3225
commit 0297be1fa8
3 changed files with 12 additions and 8 deletions
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.scopes.* import org.jetbrains.kotlin.fir.java.scopes.*
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
@@ -112,7 +111,8 @@ class JavaScopeProvider(
if (regularClass is FirJavaClass) regularClass.javaTypeParameterStack if (regularClass is FirJavaClass) regularClass.javaTypeParameterStack
else JavaTypeParameterStack.EMPTY else JavaTypeParameterStack.EMPTY
), ),
superTypeEnhancementScopes superTypeEnhancementScopes,
regularClass.classId,
), wrappedDeclaredScope ), wrappedDeclaredScope
) )
} }
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor 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.*
@@ -61,7 +60,8 @@ class KotlinScopeProvider(
FirClassUseSiteMemberScope( FirClassUseSiteMemberScope(
useSiteSession, useSiteSession,
FirTypeIntersectionScope.prepareIntersectionScope( FirTypeIntersectionScope.prepareIntersectionScope(
useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes,
klass.classId,
), ),
decoratedDeclaredMemberScope decoratedDeclaredMemberScope
) )
@@ -16,11 +16,13 @@ import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeFlexibleType import org.jetbrains.kotlin.fir.types.ConeFlexibleType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
@@ -31,6 +33,7 @@ class FirTypeIntersectionScope private constructor(
session: FirSession, session: FirSession,
overrideChecker: FirOverrideChecker, overrideChecker: FirOverrideChecker,
private val scopes: List<FirTypeScope>, private val scopes: List<FirTypeScope>,
private val derivedClassId: ClassId?,
) : AbstractFirOverrideScope(session, overrideChecker) { ) : AbstractFirOverrideScope(session, overrideChecker) {
private val absentFunctions: MutableSet<Name> = mutableSetOf() private val absentFunctions: MutableSet<Name> = mutableSetOf()
private val absentProperties: MutableSet<Name> = mutableSetOf() private val absentProperties: MutableSet<Name> = mutableSetOf()
@@ -136,7 +139,7 @@ class FirTypeIntersectionScope private constructor(
): FirNamedFunctionSymbol { ): FirNamedFunctionSymbol {
val newSymbol = val newSymbol =
FirNamedFunctionSymbol( FirNamedFunctionSymbol(
mostSpecific.callableId, CallableId(derivedClassId ?: mostSpecific.callableId.classId!!, mostSpecific.fir.name),
mostSpecific.isFakeOverride, mostSpecific.isFakeOverride,
mostSpecific, mostSpecific,
isIntersectionOverride = true isIntersectionOverride = true
@@ -155,7 +158,7 @@ class FirTypeIntersectionScope private constructor(
mostSpecificParameter mostSpecificParameter
} else { } else {
val overriddenWithDefaultParameter = overriddenWithDefault.valueParameters[index] val overriddenWithDefaultParameter = overriddenWithDefault.valueParameters[index]
createValueParameterCopy(mostSpecificParameter, overriddenWithDefaultParameter.defaultValue).apply { createValueParameterCopy(mostSpecificParameter, null).apply {
annotations += mostSpecificParameter.annotations annotations += mostSpecificParameter.annotations
}.build() }.build()
} }
@@ -366,10 +369,11 @@ class FirTypeIntersectionScope private constructor(
fun prepareIntersectionScope( fun prepareIntersectionScope(
session: FirSession, session: FirSession,
overrideChecker: FirOverrideChecker, overrideChecker: FirOverrideChecker,
scopes: List<FirTypeScope> scopes: List<FirTypeScope>,
derivedClassId: ClassId? = null,
): FirTypeScope { ): FirTypeScope {
scopes.singleOrNull()?.let { return it } scopes.singleOrNull()?.let { return it }
return FirTypeIntersectionScope(session, overrideChecker, scopes) return FirTypeIntersectionScope(session, overrideChecker, scopes, derivedClassId)
} }
} }
} }