FIR: Replace callableId for intersection overrides
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
+8
-4
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user