[FIR] Refactoring: store name in CallInfo
This commit is contained in:
@@ -120,6 +120,7 @@ class FirCallResolver(
|
||||
|
||||
val info = CallInfo(
|
||||
CallKind.Function,
|
||||
functionCall.calleeReference.name,
|
||||
explicitReceiver,
|
||||
arguments,
|
||||
functionCall.safe,
|
||||
@@ -131,7 +132,6 @@ class FirCallResolver(
|
||||
towerResolver.reset()
|
||||
val result = towerResolver.runResolver(
|
||||
implicitReceiverStack.receiversAsReversed(),
|
||||
functionCall.calleeReference.name,
|
||||
info
|
||||
)
|
||||
val bestCandidates = result.bestCandidates()
|
||||
@@ -154,6 +154,7 @@ class FirCallResolver(
|
||||
|
||||
val info = CallInfo(
|
||||
CallKind.VariableAccess,
|
||||
callee.name,
|
||||
qualifiedAccess.explicitReceiver,
|
||||
emptyList(),
|
||||
qualifiedAccess.safe,
|
||||
@@ -165,7 +166,6 @@ class FirCallResolver(
|
||||
towerResolver.reset()
|
||||
val result = towerResolver.runResolver(
|
||||
implicitReceiverStack.receiversAsReversed(),
|
||||
callee.name,
|
||||
info
|
||||
)
|
||||
|
||||
@@ -246,7 +246,6 @@ class FirCallResolver(
|
||||
// No reset here!
|
||||
val result = towerResolver.runResolver(
|
||||
implicitReceiverStack.receiversAsReversed(),
|
||||
callableReferenceAccess.calleeReference.name,
|
||||
info,
|
||||
collector = CandidateCollector(this, resolutionStageRunner)
|
||||
)
|
||||
@@ -287,8 +286,10 @@ class FirCallResolver(
|
||||
typeArguments: List<FirTypeProjection>
|
||||
): FirDelegatedConstructorCall? {
|
||||
val scope = symbol.fir.scope(ConeSubstitutor.Empty, session, scopeSession) ?: return null
|
||||
val className = symbol.classId.shortClassName
|
||||
val callInfo = CallInfo(
|
||||
CallKind.Function,
|
||||
className,
|
||||
explicitReceiver = null,
|
||||
delegatedConstructorCall.arguments,
|
||||
isSafeCall = false,
|
||||
@@ -300,7 +301,6 @@ class FirCallResolver(
|
||||
val candidateFactory = CandidateFactory(this, callInfo)
|
||||
val candidates = mutableListOf<Candidate>()
|
||||
|
||||
val className = symbol.classId.shortClassName
|
||||
scope.processFunctionsByName(className) {
|
||||
if (it is FirConstructorSymbol) {
|
||||
candidates += candidateFactory.createCandidate(it, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER)
|
||||
@@ -338,6 +338,7 @@ class FirCallResolver(
|
||||
): CallInfo {
|
||||
return CallInfo(
|
||||
CallKind.CallableReference,
|
||||
callableReferenceAccess.calleeReference.name,
|
||||
callableReferenceAccess.explicitReceiver,
|
||||
emptyList(),
|
||||
false,
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeVariable
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
|
||||
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||
|
||||
class CallInfo(
|
||||
val callKind: CallKind,
|
||||
val name: Name,
|
||||
|
||||
val explicitReceiver: FirExpression?,
|
||||
val arguments: List<FirExpression>,
|
||||
@@ -46,20 +48,19 @@ class CallInfo(
|
||||
|
||||
fun replaceWithVariableAccess(): CallInfo =
|
||||
CallInfo(
|
||||
CallKind.VariableAccess, explicitReceiver, emptyList(),
|
||||
CallKind.VariableAccess, name, explicitReceiver, emptyList(),
|
||||
isSafeCall, typeArguments, session, containingFile, implicitReceiverStack, expectedType, outerCSBuilder, lhs
|
||||
)
|
||||
|
||||
fun replaceExplicitReceiver(explicitReceiver: FirExpression): CallInfo =
|
||||
CallInfo(
|
||||
callKind, explicitReceiver, arguments,
|
||||
callKind, name, explicitReceiver, arguments,
|
||||
isSafeCall, typeArguments, session, containingFile, implicitReceiverStack, expectedType, outerCSBuilder, lhs
|
||||
)
|
||||
|
||||
fun withReceiverAsArgument(receiverExpression: FirExpression): CallInfo =
|
||||
CallInfo(
|
||||
callKind, explicitReceiver,
|
||||
listOf(receiverExpression) + arguments,
|
||||
callKind, name, explicitReceiver, listOf(receiverExpression) + arguments,
|
||||
isSafeCall, typeArguments, session, containingFile, implicitReceiverStack, expectedType, outerCSBuilder, lhs
|
||||
)
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NONE
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
|
||||
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.HIDES_MEMBERS_NAME_LIST
|
||||
|
||||
enum class TowerDataKind {
|
||||
@@ -203,28 +202,28 @@ class FirTowerResolver(
|
||||
private lateinit var implicitReceiverValues: List<ImplicitReceiverValue<*>>
|
||||
|
||||
fun runResolver(
|
||||
implicitReceiverValues: List<ImplicitReceiverValue<*>>, name: Name, info: CallInfo,
|
||||
implicitReceiverValues: List<ImplicitReceiverValue<*>>, info: CallInfo,
|
||||
collector: CandidateCollector = this.collector
|
||||
): CandidateCollector {
|
||||
this.implicitReceiverValues = implicitReceiverValues
|
||||
towerDataConsumer = when (info.callKind) {
|
||||
CallKind.VariableAccess -> {
|
||||
createVariableAndObjectConsumer(session, name, info, components, collector)
|
||||
createVariableAndObjectConsumer(session, info.name, info, components, collector)
|
||||
}
|
||||
CallKind.Function -> {
|
||||
createFunctionConsumer(session, name, info, components, collector, this)
|
||||
createFunctionConsumer(session, info.name, info, components, collector, this)
|
||||
}
|
||||
CallKind.CallableReference -> {
|
||||
if (info.stubReceiver == null) {
|
||||
createCallableReferencesConsumer(session, name, info, components, collector)
|
||||
createCallableReferencesConsumer(session, info.name, info, components, collector)
|
||||
} else {
|
||||
PrioritizedTowerDataConsumer(
|
||||
collector,
|
||||
createCallableReferencesConsumer(
|
||||
session, name, info.replaceExplicitReceiver(info.stubReceiver), components, collector
|
||||
session, info.name, info.replaceExplicitReceiver(info.stubReceiver), components, collector
|
||||
),
|
||||
createCallableReferencesConsumer(
|
||||
session, name, info, components, collector
|
||||
session, info.name, info, components, collector
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -232,7 +231,7 @@ class FirTowerResolver(
|
||||
else -> throw AssertionError("Unsupported call kind in tower resolver: ${info.callKind}")
|
||||
}
|
||||
val shouldProcessExtensionsBeforeMembers =
|
||||
info.callKind == CallKind.Function && name in HIDES_MEMBERS_NAME_LIST
|
||||
info.callKind == CallKind.Function && info.name in HIDES_MEMBERS_NAME_LIST
|
||||
val shouldProcessExplicitReceiverScopeOnly =
|
||||
info.callKind == CallKind.Function && info.explicitReceiver?.typeRef?.coneTypeSafe<ConeIntegerLiteralType>() != null
|
||||
|
||||
|
||||
+3
-2
@@ -120,7 +120,7 @@ class FirSyntheticCallGenerator(
|
||||
name: Name,
|
||||
callKind: CallKind = CallKind.SyntheticSelect
|
||||
): FirNamedReferenceWithCandidate? {
|
||||
val callInfo = generateCallInfo(arguments, callKind)
|
||||
val callInfo = generateCallInfo(name, arguments, callKind)
|
||||
val candidate = generateCandidate(callInfo, function)
|
||||
val applicability = resolutionStageRunner.processCandidate(candidate)
|
||||
if (applicability <= CandidateApplicability.INAPPLICABLE) {
|
||||
@@ -136,8 +136,9 @@ class FirSyntheticCallGenerator(
|
||||
explicitReceiverKind = ExplicitReceiverKind.NO_EXPLICIT_RECEIVER
|
||||
)
|
||||
|
||||
private fun generateCallInfo(arguments: List<FirExpression>, callKind: CallKind) = CallInfo(
|
||||
private fun generateCallInfo(name: Name, arguments: List<FirExpression>, callKind: CallKind) = CallInfo(
|
||||
callKind = callKind,
|
||||
name = name,
|
||||
explicitReceiver = null,
|
||||
arguments = arguments,
|
||||
isSafeCall = false,
|
||||
|
||||
Reference in New Issue
Block a user