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.scopes.*
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.FirScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
@@ -112,7 +111,8 @@ class JavaScopeProvider(
if (regularClass is FirJavaClass) regularClass.javaTypeParameterStack
else JavaTypeParameterStack.EMPTY
),
superTypeEnhancementScopes
superTypeEnhancementScopes,
regularClass.classId,
), wrappedDeclaredScope
)
}
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
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.substitutorByMap
import org.jetbrains.kotlin.fir.scopes.impl.*
@@ -61,7 +60,8 @@ class KotlinScopeProvider(
FirClassUseSiteMemberScope(
useSiteSession,
FirTypeIntersectionScope.prepareIntersectionScope(
useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes
useSiteSession, FirStandardOverrideChecker(useSiteSession), scopes,
klass.classId,
),
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.FirTypeScope
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.types.ConeFlexibleType
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
@@ -31,6 +33,7 @@ class FirTypeIntersectionScope private constructor(
session: FirSession,
overrideChecker: FirOverrideChecker,
private val scopes: List<FirTypeScope>,
private val derivedClassId: ClassId?,
) : AbstractFirOverrideScope(session, overrideChecker) {
private val absentFunctions: MutableSet<Name> = mutableSetOf()
private val absentProperties: MutableSet<Name> = mutableSetOf()
@@ -136,7 +139,7 @@ class FirTypeIntersectionScope private constructor(
): FirNamedFunctionSymbol {
val newSymbol =
FirNamedFunctionSymbol(
mostSpecific.callableId,
CallableId(derivedClassId ?: mostSpecific.callableId.classId!!, mostSpecific.fir.name),
mostSpecific.isFakeOverride,
mostSpecific,
isIntersectionOverride = true
@@ -155,7 +158,7 @@ class FirTypeIntersectionScope private constructor(
mostSpecificParameter
} else {
val overriddenWithDefaultParameter = overriddenWithDefault.valueParameters[index]
createValueParameterCopy(mostSpecificParameter, overriddenWithDefaultParameter.defaultValue).apply {
createValueParameterCopy(mostSpecificParameter, null).apply {
annotations += mostSpecificParameter.annotations
}.build()
}
@@ -366,10 +369,11 @@ class FirTypeIntersectionScope private constructor(
fun prepareIntersectionScope(
session: FirSession,
overrideChecker: FirOverrideChecker,
scopes: List<FirTypeScope>
scopes: List<FirTypeScope>,
derivedClassId: ClassId? = null,
): FirTypeScope {
scopes.singleOrNull()?.let { return it }
return FirTypeIntersectionScope(session, overrideChecker, scopes)
return FirTypeIntersectionScope(session, overrideChecker, scopes, derivedClassId)
}
}
}