FIR: Provide BodyResolveComponents instead of InferenceComponents to resolution
It seems to be more reasonable to store SamResolver, ScopeSession and other per-transformer/per-thread components there
This commit is contained in:
@@ -12,13 +12,14 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedQualifierImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedQualifierImpl
|
||||||
import org.jetbrains.kotlin.fir.references.*
|
import org.jetbrains.kotlin.fir.references.FirBackingFieldReferenceImpl
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack
|
import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.*
|
import org.jetbrains.kotlin.fir.resolve.calls.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.*
|
import org.jetbrains.kotlin.fir.resolve.transformers.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.resultType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.typeForQualifier
|
import org.jetbrains.kotlin.fir.resolve.typeForQualifier
|
||||||
import org.jetbrains.kotlin.fir.resolve.typeFromCallee
|
import org.jetbrains.kotlin.fir.resolve.typeFromCallee
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
@@ -60,12 +61,12 @@ class FirCallResolver(
|
|||||||
transformer.container
|
transformer.container
|
||||||
) { it.resultType }
|
) { it.resultType }
|
||||||
val resolver = CallResolver(
|
val resolver = CallResolver(
|
||||||
returnTypeCalculator, inferenceComponents, resolutionStageRunner,
|
returnTypeCalculator, this, resolutionStageRunner,
|
||||||
topLevelScopes = topLevelScopes.asReversed(),
|
topLevelScopes = topLevelScopes.asReversed(),
|
||||||
localScopes = localScopes.asReversed()
|
localScopes = localScopes.asReversed()
|
||||||
)
|
)
|
||||||
|
|
||||||
val consumer = createFunctionConsumer(session, name, info, inferenceComponents, resolver.collector, resolver)
|
val consumer = createFunctionConsumer(session, name, info, this, resolver.collector, resolver)
|
||||||
val result = resolver.runTowerResolver(consumer, implicitReceiverStack.receiversAsReversed())
|
val result = resolver.runTowerResolver(consumer, implicitReceiverStack.receiversAsReversed())
|
||||||
val bestCandidates = result.bestCandidates()
|
val bestCandidates = result.bestCandidates()
|
||||||
val reducedCandidates = if (result.currentApplicability < CandidateApplicability.SYNTHETIC_RESOLVED) {
|
val reducedCandidates = if (result.currentApplicability < CandidateApplicability.SYNTHETIC_RESOLVED) {
|
||||||
@@ -154,7 +155,7 @@ class FirCallResolver(
|
|||||||
transformer.container
|
transformer.container
|
||||||
) { it.resultType }
|
) { it.resultType }
|
||||||
val resolver = CallResolver(
|
val resolver = CallResolver(
|
||||||
returnTypeCalculator, inferenceComponents, resolutionStageRunner,
|
returnTypeCalculator, this, resolutionStageRunner,
|
||||||
topLevelScopes = topLevelScopes.asReversed(),
|
topLevelScopes = topLevelScopes.asReversed(),
|
||||||
localScopes = localScopes.asReversed()
|
localScopes = localScopes.asReversed()
|
||||||
)
|
)
|
||||||
@@ -162,7 +163,7 @@ class FirCallResolver(
|
|||||||
val consumer = createVariableAndObjectConsumer(
|
val consumer = createVariableAndObjectConsumer(
|
||||||
session,
|
session,
|
||||||
callee.name,
|
callee.name,
|
||||||
info, inferenceComponents,
|
info, this,
|
||||||
resolver.collector
|
resolver.collector
|
||||||
)
|
)
|
||||||
val result = resolver.runTowerResolver(consumer, implicitReceiverStack.receiversAsReversed())
|
val result = resolver.runTowerResolver(consumer, implicitReceiverStack.receiversAsReversed())
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ interface BodyResolveComponents : SessionHolder {
|
|||||||
val container: FirDeclaration
|
val container: FirDeclaration
|
||||||
val inferenceComponents: InferenceComponents
|
val inferenceComponents: InferenceComponents
|
||||||
val resolutionStageRunner: ResolutionStageRunner
|
val resolutionStageRunner: ResolutionStageRunner
|
||||||
|
val scopeSession: ScopeSession
|
||||||
|
|
||||||
val <D> AbstractFirBasedSymbol<D>.phasedFir: D where D : FirDeclaration, D : FirSymbolOwner<D>
|
val <D> AbstractFirBasedSymbol<D>.phasedFir: D where D : FirDeclaration, D : FirSymbolOwner<D>
|
||||||
get() = phasedFir(session, FirResolvePhase.DECLARATIONS)
|
get() = phasedFir(session, FirResolvePhase.DECLARATIONS)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
|
||||||
@@ -17,8 +18,8 @@ enum class TowerDataKind {
|
|||||||
|
|
||||||
class CallResolver(
|
class CallResolver(
|
||||||
val typeCalculator: ReturnTypeCalculator,
|
val typeCalculator: ReturnTypeCalculator,
|
||||||
val components: InferenceComponents,
|
val components: BodyResolveComponents,
|
||||||
val resolutionStageRunner: ResolutionStageRunner,
|
private val resolutionStageRunner: ResolutionStageRunner,
|
||||||
val topLevelScopes: List<FirScope>,
|
val topLevelScopes: List<FirScope>,
|
||||||
val localScopes: List<FirLocalScope>
|
val localScopes: List<FirLocalScope>
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
@@ -49,17 +50,17 @@ class Candidate(
|
|||||||
val dispatchReceiverValue: ClassDispatchReceiverValue?,
|
val dispatchReceiverValue: ClassDispatchReceiverValue?,
|
||||||
val implicitExtensionReceiverValue: ImplicitReceiverValue<*>?,
|
val implicitExtensionReceiverValue: ImplicitReceiverValue<*>?,
|
||||||
val explicitReceiverKind: ExplicitReceiverKind,
|
val explicitReceiverKind: ExplicitReceiverKind,
|
||||||
private val inferenceComponents: InferenceComponents,
|
private val bodyResolveComponents: BodyResolveComponents,
|
||||||
private val baseSystem: ConstraintStorage,
|
private val baseSystem: ConstraintStorage,
|
||||||
val callInfo: CallInfo
|
val callInfo: CallInfo
|
||||||
) {
|
) {
|
||||||
val system by lazy {
|
val system by lazy {
|
||||||
val system = inferenceComponents.createConstraintSystem()
|
val system = bodyResolveComponents.inferenceComponents.createConstraintSystem()
|
||||||
system.addOtherSystem(baseSystem)
|
system.addOtherSystem(baseSystem)
|
||||||
system
|
system
|
||||||
}
|
}
|
||||||
|
|
||||||
val samResolver get() = inferenceComponents.samResolver
|
val samResolver get() = bodyResolveComponents.inferenceComponents.samResolver
|
||||||
|
|
||||||
lateinit var substitutor: ConeSubstitutor
|
lateinit var substitutor: ConeSubstitutor
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -6,12 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
open class CandidateCollector(
|
open class CandidateCollector(
|
||||||
val components: InferenceComponents,
|
val components: BodyResolveComponents,
|
||||||
val resolutionStageRunner: ResolutionStageRunner
|
val resolutionStageRunner: ResolutionStageRunner
|
||||||
) {
|
) {
|
||||||
val groupNumbers = mutableListOf<Int>()
|
val groupNumbers = mutableListOf<Int>()
|
||||||
@@ -70,7 +71,7 @@ open class CandidateCollector(
|
|||||||
class InvokeReceiverCandidateCollector(
|
class InvokeReceiverCandidateCollector(
|
||||||
val callResolver: CallResolver,
|
val callResolver: CallResolver,
|
||||||
val invokeCallInfo: CallInfo,
|
val invokeCallInfo: CallInfo,
|
||||||
components: InferenceComponents,
|
components: BodyResolveComponents,
|
||||||
val invokeConsumer: AccumulatingTowerDataConsumer,
|
val invokeConsumer: AccumulatingTowerDataConsumer,
|
||||||
resolutionStageRunner: ResolutionStageRunner
|
resolutionStageRunner: ResolutionStageRunner
|
||||||
) : CandidateCollector(components, resolutionStageRunner) {
|
) : CandidateCollector(components, resolutionStageRunner) {
|
||||||
@@ -104,7 +105,7 @@ class InvokeReceiverCandidateCollector(
|
|||||||
invokeConsumer.addConsumer(
|
invokeConsumer.addConsumer(
|
||||||
createSimpleFunctionConsumer(
|
createSimpleFunctionConsumer(
|
||||||
session, OperatorNameConventions.INVOKE,
|
session, OperatorNameConventions.INVOKE,
|
||||||
boundInvokeCallInfo, components, callResolver.collector
|
boundInvokeCallInfo, callResolver.components, callResolver.collector
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.returnExpressions
|
import org.jetbrains.kotlin.fir.returnExpressions
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
import org.jetbrains.kotlin.resolve.calls.components.PostponedArgumentsAnalyzer
|
import org.jetbrains.kotlin.resolve.calls.components.PostponedArgumentsAnalyzer
|
||||||
@@ -13,14 +14,14 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
|
|||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
|
|
||||||
class CandidateFactory(
|
class CandidateFactory(
|
||||||
val inferenceComponents: InferenceComponents,
|
val bodyResolveComponents: BodyResolveComponents,
|
||||||
val callInfo: CallInfo
|
private val callInfo: CallInfo
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val baseSystem: ConstraintStorage
|
private val baseSystem: ConstraintStorage
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val system = inferenceComponents.createConstraintSystem()
|
val system = bodyResolveComponents.inferenceComponents.createConstraintSystem()
|
||||||
callInfo.explicitReceiver?.let { system.addSubsystemFromExpression(it) }
|
callInfo.explicitReceiver?.let { system.addSubsystemFromExpression(it) }
|
||||||
callInfo.arguments.forEach {
|
callInfo.arguments.forEach {
|
||||||
system.addSubsystemFromExpression(it)
|
system.addSubsystemFromExpression(it)
|
||||||
@@ -36,7 +37,7 @@ class CandidateFactory(
|
|||||||
): Candidate {
|
): Candidate {
|
||||||
return Candidate(
|
return Candidate(
|
||||||
symbol, dispatchReceiverValue, implicitExtensionReceiverValue,
|
symbol, dispatchReceiverValue, implicitExtensionReceiverValue,
|
||||||
explicitReceiverKind, inferenceComponents, baseSystem, callInfo
|
explicitReceiverKind, bodyResolveComponents, baseSystem, callInfo
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-12
@@ -7,13 +7,14 @@ package org.jetbrains.kotlin.fir.resolve.calls
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
fun createVariableAndObjectConsumer(
|
fun createVariableAndObjectConsumer(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
name: Name,
|
name: Name,
|
||||||
callInfo: CallInfo,
|
callInfo: CallInfo,
|
||||||
inferenceComponents: InferenceComponents,
|
bodyResolveComponents: BodyResolveComponents,
|
||||||
resultCollector: CandidateCollector
|
resultCollector: CandidateCollector
|
||||||
): TowerDataConsumer {
|
): TowerDataConsumer {
|
||||||
return PrioritizedTowerDataConsumer(
|
return PrioritizedTowerDataConsumer(
|
||||||
@@ -23,7 +24,7 @@ fun createVariableAndObjectConsumer(
|
|||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Properties,
|
TowerScopeLevel.Token.Properties,
|
||||||
callInfo,
|
callInfo,
|
||||||
inferenceComponents,
|
bodyResolveComponents,
|
||||||
resultCollector
|
resultCollector
|
||||||
),
|
),
|
||||||
createSimpleConsumer(
|
createSimpleConsumer(
|
||||||
@@ -31,7 +32,7 @@ fun createVariableAndObjectConsumer(
|
|||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Objects,
|
TowerScopeLevel.Token.Objects,
|
||||||
callInfo,
|
callInfo,
|
||||||
inferenceComponents,
|
bodyResolveComponents,
|
||||||
resultCollector
|
resultCollector
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -41,7 +42,7 @@ fun createSimpleFunctionConsumer(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
name: Name,
|
name: Name,
|
||||||
callInfo: CallInfo,
|
callInfo: CallInfo,
|
||||||
inferenceComponents: InferenceComponents,
|
bodyResolveComponents: BodyResolveComponents,
|
||||||
resultCollector: CandidateCollector
|
resultCollector: CandidateCollector
|
||||||
): TowerDataConsumer {
|
): TowerDataConsumer {
|
||||||
return createSimpleConsumer(
|
return createSimpleConsumer(
|
||||||
@@ -49,7 +50,7 @@ fun createSimpleFunctionConsumer(
|
|||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Functions,
|
TowerScopeLevel.Token.Functions,
|
||||||
callInfo,
|
callInfo,
|
||||||
inferenceComponents,
|
bodyResolveComponents,
|
||||||
resultCollector
|
resultCollector
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -58,7 +59,7 @@ fun createFunctionConsumer(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
name: Name,
|
name: Name,
|
||||||
callInfo: CallInfo,
|
callInfo: CallInfo,
|
||||||
inferenceComponents: InferenceComponents,
|
bodyResolveComponents: BodyResolveComponents,
|
||||||
resultCollector: CandidateCollector,
|
resultCollector: CandidateCollector,
|
||||||
callResolver: CallResolver
|
callResolver: CallResolver
|
||||||
): TowerDataConsumer {
|
): TowerDataConsumer {
|
||||||
@@ -68,7 +69,7 @@ fun createFunctionConsumer(
|
|||||||
emptyList(),
|
emptyList(),
|
||||||
callInfo.isSafeCall,
|
callInfo.isSafeCall,
|
||||||
callInfo.typeArguments,
|
callInfo.typeArguments,
|
||||||
inferenceComponents.session,
|
bodyResolveComponents.session,
|
||||||
callInfo.containingFile,
|
callInfo.containingFile,
|
||||||
callInfo.container,
|
callInfo.container,
|
||||||
callInfo.typeProvider
|
callInfo.typeProvider
|
||||||
@@ -80,7 +81,7 @@ fun createFunctionConsumer(
|
|||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Functions,
|
TowerScopeLevel.Token.Functions,
|
||||||
callInfo,
|
callInfo,
|
||||||
inferenceComponents,
|
bodyResolveComponents,
|
||||||
resultCollector
|
resultCollector
|
||||||
),
|
),
|
||||||
AccumulatingTowerDataConsumer(resultCollector).apply {
|
AccumulatingTowerDataConsumer(resultCollector).apply {
|
||||||
@@ -89,11 +90,11 @@ fun createFunctionConsumer(
|
|||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Properties,
|
TowerScopeLevel.Token.Properties,
|
||||||
varCallInfo,
|
varCallInfo,
|
||||||
inferenceComponents,
|
bodyResolveComponents,
|
||||||
InvokeReceiverCandidateCollector(
|
InvokeReceiverCandidateCollector(
|
||||||
callResolver,
|
callResolver,
|
||||||
invokeCallInfo = callInfo,
|
invokeCallInfo = callInfo,
|
||||||
components = inferenceComponents,
|
components = bodyResolveComponents,
|
||||||
invokeConsumer = this,
|
invokeConsumer = this,
|
||||||
resolutionStageRunner = resultCollector.resolutionStageRunner
|
resolutionStageRunner = resultCollector.resolutionStageRunner
|
||||||
)
|
)
|
||||||
@@ -107,10 +108,10 @@ fun createSimpleConsumer(
|
|||||||
name: Name,
|
name: Name,
|
||||||
token: TowerScopeLevel.Token<*>,
|
token: TowerScopeLevel.Token<*>,
|
||||||
callInfo: CallInfo,
|
callInfo: CallInfo,
|
||||||
inferenceComponents: InferenceComponents,
|
bodyResolveComponents: BodyResolveComponents,
|
||||||
resultCollector: CandidateCollector
|
resultCollector: CandidateCollector
|
||||||
): TowerDataConsumer {
|
): TowerDataConsumer {
|
||||||
val factory = CandidateFactory(inferenceComponents, callInfo)
|
val factory = CandidateFactory(bodyResolveComponents, callInfo)
|
||||||
val explicitReceiver = callInfo.explicitReceiver
|
val explicitReceiver = callInfo.explicitReceiver
|
||||||
return if (explicitReceiver != null) {
|
return if (explicitReceiver != null) {
|
||||||
val receiverValue = ExpressionReceiverValue(explicitReceiver, callInfo.typeProvider)
|
val receiverValue = ExpressionReceiverValue(explicitReceiver, callInfo.typeProvider)
|
||||||
|
|||||||
+2
-2
@@ -167,7 +167,7 @@ class ExplicitReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
|||||||
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
||||||
return when (kind) {
|
return when (kind) {
|
||||||
TowerDataKind.EMPTY ->
|
TowerDataKind.EMPTY ->
|
||||||
MemberScopeTowerLevel(session, explicitReceiver, scopeSession = candidateFactory.inferenceComponents.scopeSession)
|
MemberScopeTowerLevel(session, explicitReceiver, scopeSession = candidateFactory.bodyResolveComponents.scopeSession)
|
||||||
.processElementsByName(
|
.processElementsByName(
|
||||||
token,
|
token,
|
||||||
name,
|
name,
|
||||||
@@ -220,7 +220,7 @@ class ExplicitReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
|||||||
val declarationReceiverType = declarationReceiverTypeRef?.type
|
val declarationReceiverType = declarationReceiverTypeRef?.type
|
||||||
if (declarationReceiverType is ConeClassType) {
|
if (declarationReceiverType is ConeClassType) {
|
||||||
if (!AbstractTypeChecker.isSubtypeOf(
|
if (!AbstractTypeChecker.isSubtypeOf(
|
||||||
candidateFactory.inferenceComponents.ctx,
|
candidateFactory.bodyResolveComponents.inferenceComponents.ctx,
|
||||||
explicitReceiverType,
|
explicitReceiverType,
|
||||||
declarationReceiverType.lookupTag.constructClassType(
|
declarationReceiverType.lookupTag.constructClassType(
|
||||||
declarationReceiverType.typeArguments.map { ConeStarProjection }.toTypedArray(),
|
declarationReceiverType.typeArguments.map { ConeStarProjection }.toTypedArray(),
|
||||||
|
|||||||
+1
-1
@@ -46,7 +46,7 @@ open class FirBodyResolveTransformer(
|
|||||||
final override val session: FirSession,
|
final override val session: FirSession,
|
||||||
phase: FirResolvePhase,
|
phase: FirResolvePhase,
|
||||||
implicitTypeOnly: Boolean,
|
implicitTypeOnly: Boolean,
|
||||||
val scopeSession: ScopeSession = ScopeSession()
|
final override val scopeSession: ScopeSession = ScopeSession()
|
||||||
) : FirAbstractPhaseTransformer<Any?>(phase), BodyResolveComponents {
|
) : FirAbstractPhaseTransformer<Any?>(phase), BodyResolveComponents {
|
||||||
var implicitTypeOnly: Boolean = implicitTypeOnly
|
var implicitTypeOnly: Boolean = implicitTypeOnly
|
||||||
private set
|
private set
|
||||||
|
|||||||
+1
-1
@@ -87,7 +87,7 @@ class FirSyntheticCallGenerator(private val transformer: FirBodyResolveTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun generateCandidate(callInfo: CallInfo, function: FirMemberFunctionImpl): Candidate =
|
private fun generateCandidate(callInfo: CallInfo, function: FirMemberFunctionImpl): Candidate =
|
||||||
CandidateFactory(inferenceComponents, callInfo).createCandidate(
|
CandidateFactory(transformer, callInfo).createCandidate(
|
||||||
symbol = function.symbol,
|
symbol = function.symbol,
|
||||||
dispatchReceiverValue = null,
|
dispatchReceiverValue = null,
|
||||||
implicitExtensionReceiverValue = null,
|
implicitExtensionReceiverValue = null,
|
||||||
|
|||||||
Reference in New Issue
Block a user