FIR: Fix initialization pieces for callable references after rebase
^KT-32725 In Progress
This commit is contained in:
@@ -37,12 +37,18 @@ import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder
|
|||||||
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
|
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
|
||||||
|
|
||||||
class FirCallResolver(
|
class FirCallResolver(
|
||||||
private val transformer: FirExpressionsResolveTransformer,
|
components: BodyResolveComponents,
|
||||||
topLevelScopes: List<FirScope>,
|
topLevelScopes: List<FirScope>,
|
||||||
localScopes: List<FirLocalScope>,
|
localScopes: List<FirLocalScope>,
|
||||||
override val implicitReceiverStack: ImplicitReceiverStack,
|
override val implicitReceiverStack: ImplicitReceiverStack,
|
||||||
private val qualifiedResolver: FirQualifiedNameResolver
|
private val qualifiedResolver: FirQualifiedNameResolver
|
||||||
) : BodyResolveComponents by transformer.components {
|
) : BodyResolveComponents by components {
|
||||||
|
|
||||||
|
private lateinit var transformer: FirExpressionsResolveTransformer
|
||||||
|
|
||||||
|
fun initTransformer(transformer: FirExpressionsResolveTransformer) {
|
||||||
|
this.transformer = transformer
|
||||||
|
}
|
||||||
|
|
||||||
private val towerResolver = FirTowerResolver(
|
private val towerResolver = FirTowerResolver(
|
||||||
returnTypeCalculator, this, resolutionStageRunner,
|
returnTypeCalculator, this, resolutionStageRunner,
|
||||||
|
|||||||
+3
-2
@@ -18,8 +18,8 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirCallCompletionResultsWri
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.MapArguments
|
import org.jetbrains.kotlin.fir.resolve.transformers.MapArguments
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.StoreType
|
import org.jetbrains.kotlin.fir.resolve.transformers.StoreType
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
||||||
import org.jetbrains.kotlin.fir.resolve.typeFromCallee
|
import org.jetbrains.kotlin.fir.resolve.typeFromCallee
|
||||||
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
|
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
|
||||||
@@ -72,7 +72,8 @@ class FirCallCompleter(
|
|||||||
|
|
||||||
val analyzer =
|
val analyzer =
|
||||||
PostponedArgumentsAnalyzer(
|
PostponedArgumentsAnalyzer(
|
||||||
LambdaAnalyzerImpl(replacements), { it.resultType }, inferenceComponents, candidate, replacements, transformer.callResolver
|
LambdaAnalyzerImpl(replacements), { it.resultType }, inferenceComponents, candidate, replacements,
|
||||||
|
transformer.components.callResolver
|
||||||
)
|
)
|
||||||
|
|
||||||
completer.complete(candidate.system.asConstraintSystemCompleterContext(), completionMode, listOf(call), initialType) {
|
completer.complete(candidate.system.asConstraintSystemCompleterContext(), completionMode, listOf(call), initialType) {
|
||||||
|
|||||||
+11
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirCallResolver
|
||||||
|
import org.jetbrains.kotlin.fir.FirQualifiedNameResolver
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
@@ -96,6 +98,15 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb
|
|||||||
override val inferenceComponents: InferenceComponents = inferenceComponents(session, returnTypeCalculator, scopeSession)
|
override val inferenceComponents: InferenceComponents = inferenceComponents(session, returnTypeCalculator, scopeSession)
|
||||||
override val resolutionStageRunner: ResolutionStageRunner = ResolutionStageRunner(inferenceComponents)
|
override val resolutionStageRunner: ResolutionStageRunner = ResolutionStageRunner(inferenceComponents)
|
||||||
override val samResolver: FirSamResolver = FirSamResolverImpl(session, scopeSession)
|
override val samResolver: FirSamResolver = FirSamResolverImpl(session, scopeSession)
|
||||||
|
override val doubleColonExpressionResolver: FirDoubleColonExpressionResolver = FirDoubleColonExpressionResolver(session)
|
||||||
|
private val qualifiedResolver: FirQualifiedNameResolver = FirQualifiedNameResolver(this)
|
||||||
|
override val callResolver: FirCallResolver = FirCallResolver(
|
||||||
|
this,
|
||||||
|
topLevelScopes,
|
||||||
|
localScopes,
|
||||||
|
implicitReceiverStack,
|
||||||
|
qualifiedResolver
|
||||||
|
)
|
||||||
val callCompleter: FirCallCompleter = FirCallCompleter(transformer, this)
|
val callCompleter: FirCallCompleter = FirCallCompleter(transformer, this)
|
||||||
val dataFlowAnalyzer: FirDataFlowAnalyzer = FirDataFlowAnalyzer(this)
|
val dataFlowAnalyzer: FirDataFlowAnalyzer = FirDataFlowAnalyzer(this)
|
||||||
override val syntheticCallGenerator: FirSyntheticCallGenerator = FirSyntheticCallGenerator(this, callCompleter)
|
override val syntheticCallGenerator: FirSyntheticCallGenerator = FirSyntheticCallGenerator(this, callCompleter)
|
||||||
|
|||||||
+13
-12
@@ -6,7 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.contracts.description.InvocationKind
|
import org.jetbrains.kotlin.contracts.description.InvocationKind
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.BuiltinTypes
|
||||||
|
import org.jetbrains.kotlin.fir.FirCallResolver
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastImpl
|
||||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||||
@@ -14,11 +15,16 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
|||||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
|
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeInferenceContext
|
import org.jetbrains.kotlin.fir.resolve.calls.ConeInferenceContext
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.candidate
|
import org.jetbrains.kotlin.fir.resolve.calls.candidate
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.constructType
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.InvocationKindTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.InvocationKindTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.StoreReceiver
|
import org.jetbrains.kotlin.fir.resolve.transformers.StoreReceiver
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.typeFromCallee
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.withNullability
|
||||||
|
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
||||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.symbols.invoke
|
import org.jetbrains.kotlin.fir.symbols.invoke
|
||||||
@@ -34,18 +40,13 @@ import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : FirPartialBodyResolveTransformer(transformer) {
|
class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : FirPartialBodyResolveTransformer(transformer) {
|
||||||
private val qualifiedResolver: FirQualifiedNameResolver = FirQualifiedNameResolver(components)
|
private val callResolver: FirCallResolver get() = components.callResolver
|
||||||
private val callResolver: FirCallResolver = FirCallResolver(
|
|
||||||
this,
|
|
||||||
topLevelScopes,
|
|
||||||
localScopes,
|
|
||||||
implicitReceiverStack,
|
|
||||||
qualifiedResolver
|
|
||||||
)
|
|
||||||
private val doubleColonExpressionResolver: FirDoubleColonExpressionResolver = FirDoubleColonExpressionResolver(session)
|
|
||||||
|
|
||||||
private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes
|
private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes
|
||||||
|
|
||||||
|
init {
|
||||||
|
components.callResolver.initTransformer(this)
|
||||||
|
}
|
||||||
|
|
||||||
override fun transformExpression(expression: FirExpression, data: Any?): CompositeTransformResult<FirStatement> {
|
override fun transformExpression(expression: FirExpression, data: Any?): CompositeTransformResult<FirStatement> {
|
||||||
if (expression.resultType is FirImplicitTypeRef && expression !is FirWrappedExpression) {
|
if (expression.resultType is FirImplicitTypeRef && expression !is FirWrappedExpression) {
|
||||||
val type = FirErrorTypeRefImpl(expression.psi, "Type calculating for ${expression::class} is not supported")
|
val type = FirErrorTypeRefImpl(expression.psi, "Type calculating for ${expression::class} is not supported")
|
||||||
|
|||||||
Reference in New Issue
Block a user