From 6941cd6d2878f2c4001c6a20c9aa62f9fe8aeb4d Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 18 Feb 2020 16:06:11 +0300 Subject: [PATCH] [FIR] Add `@PrivateForInline` to prevent setting to var's from inconvenient places --- .../org/jetbrains/kotlin/fir/PrivateForInline.kt | 9 +++++++++ .../kotlin/fir/resolve/calls/CheckerSink.kt | 13 ++++++------- .../resolve/FirAbstractBodyResolveTransformer.kt | 14 ++++++++------ .../body/resolve/FirBodyResolveTransformer.kt | 8 +++----- .../resolve/FirPartialBodyResolveTransformer.kt | 2 ++ 5 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 compiler/fir/resolve/src/org/jetbrains/kotlin/fir/PrivateForInline.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/PrivateForInline.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/PrivateForInline.kt new file mode 100644 index 00000000000..aa2ddb21af4 --- /dev/null +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/PrivateForInline.kt @@ -0,0 +1,9 @@ +/* + * Copyright 2010-2020 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. + */ + +package org.jetbrains.kotlin.fir + +@Experimental(level = Experimental.Level.ERROR) +annotation class PrivateForInline \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CheckerSink.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CheckerSink.kt index 13e3b80cff7..c62e315260d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CheckerSink.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CheckerSink.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.calls +import org.jetbrains.kotlin.fir.PrivateForInline import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import kotlin.coroutines.Continuation @@ -15,17 +16,13 @@ abstract class CheckerSink { abstract val needYielding: Boolean - @Deprecated( - "This function yields unconditionally, exposed only for yieldIfNeed", - level = DeprecationLevel.WARNING, - replaceWith = ReplaceWith("yieldIfNeed") - ) + @PrivateForInline abstract suspend fun yield() } +@UseExperimental(PrivateForInline::class) suspend inline fun CheckerSink.yieldIfNeed() { if (needYielding) { - @Suppress("DEPRECATION") yield() } } @@ -37,11 +34,13 @@ suspend inline fun CheckerSink.yieldApplicability(new: CandidateApplicability) { class CheckerSinkImpl(override val components: InferenceComponents, var continuation: Continuation? = null) : CheckerSink() { var current = CandidateApplicability.RESOLVED + private set + override fun reportApplicability(new: CandidateApplicability) { if (new < current) current = new } - @Suppress("OverridingDeprecatedMember") + @PrivateForInline override suspend fun yield() = kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn { continuation = it kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt index 1298441b192..7369903e53d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt @@ -5,10 +5,7 @@ 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.FirSymbolOwner +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase @@ -28,6 +25,7 @@ import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAbstractPhaseTransformer(phase) { abstract val components: BodyResolveTransformerComponents + @set:PrivateForInline abstract var implicitTypeOnly: Boolean internal set @@ -52,6 +50,7 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb } } + @UseExperimental(PrivateForInline::class) internal inline fun withFullBodyResolve(crossinline l: () -> T): T { if (!implicitTypeOnly) return l() implicitTypeOnly = false @@ -99,6 +98,7 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb override val noExpectedType: FirTypeRef = buildImplicitTypeRef() + @set:PrivateForInline override lateinit var file: FirFile internal set @@ -128,15 +128,17 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb IntegerLiteralTypeApproximationTransformer(symbolProvider, inferenceComponents.ctx) override val integerOperatorsTypeUpdater: IntegerOperatorsTypeUpdater = IntegerOperatorsTypeUpdater(integerLiteralTypeApproximator) - @PublishedApi - internal var containerIfAny: FirDeclaration? = null + @set:PrivateForInline + var containerIfAny: FirDeclaration? = null override var container: FirDeclaration get() = containerIfAny!! private set(value) { + @UseExperimental(PrivateForInline::class) containerIfAny = value } + @UseExperimental(PrivateForInline::class) inline fun withContainer(declaration: FirDeclaration, crossinline f: () -> T): T { val prevContainer = containerIfAny containerIfAny = declaration diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt index 70532ba2f81..ef4ea97e8cd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt @@ -5,12 +5,9 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirTargetElement +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator @@ -40,8 +37,9 @@ open class FirBodyResolveTransformer( private val controlFlowStatementsTransformer = FirControlFlowStatementsResolveTransformer(this) override fun transformFile(file: FirFile, data: ResolutionMode): CompositeTransformResult { - packageFqName = file.packageFqName + @UseExperimental(PrivateForInline::class) components.file = file + packageFqName = file.packageFqName return withScopeCleanup(components.topLevelScopes) { components.topLevelScopes.addImportingScopes(file, session, components.scopeSession) super.transformFile(file, data) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirPartialBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirPartialBodyResolveTransformer.kt index 5396b4a0926..395a354f5eb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirPartialBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirPartialBodyResolveTransformer.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.PrivateForInline import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -15,6 +16,7 @@ abstract class FirPartialBodyResolveTransformer( @Suppress("OVERRIDE_BY_INLINE") final override inline val components: BodyResolveTransformerComponents get() = transformer.components + @set:PrivateForInline override var implicitTypeOnly: Boolean get() = transformer.implicitTypeOnly set(value) {