[FIR] Extract withScopesCleanup from FirAbstractBodyResolveTransformer

This commit is contained in:
Dmitriy Novozhilov
2020-04-28 12:59:35 +03:00
parent bb645a7962
commit ab2177f8a4
3 changed files with 15 additions and 14 deletions
@@ -97,4 +97,17 @@ internal fun FirValueParameter.transformVarargTypeToArrayType() {
returnTypeRef.withReplacedConeType(ConeKotlinTypeProjectionOut(returnType).createArrayOf(session))
)
}
}
}
inline fun <T> withScopeCleanup(scopes: MutableList<*>, crossinline l: () -> T): T {
val sizeBefore = scopes.size
return try {
l()
} finally {
val size = scopes.size
assert(size >= sizeBefore)
repeat(size - sizeBefore) {
scopes.let { it.removeAt(it.size - 1) }
}
}
}
@@ -41,19 +41,6 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb
return phasedFir(requiredPhase)
}
protected inline fun <T> withScopeCleanup(scopes: MutableList<*>, crossinline l: () -> T): T {
val sizeBefore = scopes.size
return try {
l()
} finally {
val size = scopes.size
assert(size >= sizeBefore)
repeat(size - sizeBefore) {
scopes.let { it.removeAt(it.size - 1) }
}
}
}
protected inline fun <T> withLocalScopeCleanup(crossinline l: () -> T): T {
return context.withLocalScopesCleanup(l)
}
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.dfa.DataFlowAnalyzerContext
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
import org.jetbrains.kotlin.fir.resolve.transformers.withScopeCleanup
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef