[FIR] Move ReturnTypeCalculator to :fir:providers module

Also make it an abstract class and turn ReturnTypeCalculatorForFullBodyResolve
  into object (because it has no state and there is no need to create
  different instances of it)
This commit is contained in:
Dmitriy Novozhilov
2022-03-15 11:06:08 +03:00
committed by teamcity
parent ff1e2c05bf
commit effa3f197a
6 changed files with 9 additions and 10 deletions
@@ -21,7 +21,7 @@ class SimpleDiagnosticsCollector(
return CheckerRunningDiagnosticCollectorVisitor( return CheckerRunningDiagnosticCollectorVisitor(
MutableCheckerContext( MutableCheckerContext(
this, this,
ReturnTypeCalculatorForFullBodyResolve() ReturnTypeCalculatorForFullBodyResolve
), ),
components components
) )
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
interface ReturnTypeCalculator { abstract class ReturnTypeCalculator {
fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef abstract fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef
fun tryCalculateReturnType(symbol: FirCallableSymbol<*>): FirResolvedTypeRef { fun tryCalculateReturnType(symbol: FirCallableSymbol<*>): FirResolvedTypeRef {
return tryCalculateReturnType(symbol.fir) return tryCalculateReturnType(symbol.fir)
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
class ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator { object ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator() {
override fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef { override fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef {
val returnTypeRef = declaration.returnTypeRef val returnTypeRef = declaration.returnTypeRef
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
import org.jetbrains.kotlin.fir.resolve.transformers.ScopeClassDeclaration import org.jetbrains.kotlin.fir.resolve.transformers.ScopeClassDeclaration
import org.jetbrains.kotlin.fir.scopes.FirCompositeScope
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -29,7 +28,7 @@ open class FirBodyResolveTransformer(
phase: FirResolvePhase, phase: FirResolvePhase,
override var implicitTypeOnly: Boolean, override var implicitTypeOnly: Boolean,
scopeSession: ScopeSession, scopeSession: ScopeSession,
val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve(), val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
outerBodyResolveContext: BodyResolveContext? = null, outerBodyResolveContext: BodyResolveContext? = null,
val firTowerDataContextCollector: FirTowerDataContextCollector? = null, val firTowerDataContextCollector: FirTowerDataContextCollector? = null,
val firProviderInterceptor: FirProviderInterceptor? = null, val firProviderInterceptor: FirProviderInterceptor? = null,
@@ -204,7 +204,7 @@ private class ReturnTypeCalculatorWithJump(
returnTypeCalculator: ReturnTypeCalculator, returnTypeCalculator: ReturnTypeCalculator,
outerBodyResolveContext: BodyResolveContext? outerBodyResolveContext: BodyResolveContext?
) -> FirDesignatedBodyResolveTransformerForReturnTypeCalculator = ::FirDesignatedBodyResolveTransformerForReturnTypeCalculator, ) -> FirDesignatedBodyResolveTransformerForReturnTypeCalculator = ::FirDesignatedBodyResolveTransformerForReturnTypeCalculator,
) : ReturnTypeCalculator { ) : ReturnTypeCalculator() {
@OptIn(PrivateForInline::class) @OptIn(PrivateForInline::class)
var outerBodyResolveContext: BodyResolveContext? = null var outerBodyResolveContext: BodyResolveContext? = null
@@ -42,7 +42,7 @@ fun <F : FirClassLikeDeclaration> F.runContractResolveForLocalClass(
targetedClasses: Set<FirClassLikeDeclaration> targetedClasses: Set<FirClassLikeDeclaration>
): F { ): F {
val newContext = outerBodyResolveContext.createSnapshotForLocalClasses( val newContext = outerBodyResolveContext.createSnapshotForLocalClasses(
ReturnTypeCalculatorForFullBodyResolve(), ReturnTypeCalculatorForFullBodyResolve,
targetedClasses targetedClasses
) )
val transformer = FirContractResolveTransformer(session, scopeSession, newContext) val transformer = FirContractResolveTransformer(session, scopeSession, newContext)