From 58eb329fb951a96d65bfa4ecc7ec9a39134318ec Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Thu, 23 Sep 2021 18:16:38 +0000 Subject: [PATCH] FIR: Make CheckDeprecatedSinceKotlin the first resolution stage. All subsequent stages don't need to run if the candidate is @Deprecated(HIDDEN). --- .../jetbrains/kotlin/fir/resolve/calls/CallKind.kt | 8 ++++---- .../tests/resolve/HiddenDeclarations.fir.kt | 13 +++++++++++++ .../diagnostics/tests/resolve/HiddenDeclarations.kt | 13 +++++++++++++ .../tests/resolve/HiddenDeclarations.txt | 3 +++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt index 6af9af74a9a..e0167acda33 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls sealed class CallKind(vararg resolutionSequence: ResolutionStage) { object VariableAccess : CallKind( + CheckDeprecatedSinceKotlin, CheckVisibility, DiscriminateSynthetics, CheckExplicitReceiverConsistency, @@ -17,7 +18,6 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) { CheckExtensionReceiver, CheckLowPriorityInOverloadResolution, PostponedVariablesInitializerResolutionStage, - CheckDeprecatedSinceKotlin, ) object SyntheticSelect : CallKind( @@ -30,6 +30,7 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) { ) object Function : CallKind( + CheckDeprecatedSinceKotlin, CheckVisibility, DiscriminateSynthetics, MapArguments, @@ -44,10 +45,10 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) { EagerResolveOfCallableReferences, CheckLowPriorityInOverloadResolution, PostponedVariablesInitializerResolutionStage, - CheckDeprecatedSinceKotlin ) object DelegatingConstructorCall : CallKind( + CheckDeprecatedSinceKotlin, CheckVisibility, MapArguments, CheckExplicitReceiverConsistency, @@ -58,10 +59,10 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) { CheckExtensionReceiver, CheckArguments, EagerResolveOfCallableReferences, - CheckDeprecatedSinceKotlin, ) object CallableReference : CallKind( + CheckDeprecatedSinceKotlin, CheckVisibility, DiscriminateSynthetics, NoTypeArguments, @@ -71,7 +72,6 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) { CheckExtensionReceiver, CheckCallableReferenceExpectedType, CheckLowPriorityInOverloadResolution, - CheckDeprecatedSinceKotlin, ) object SyntheticIdForCallableReferencesResolution : CallKind( diff --git a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt index 2e2f696be67..7c817c5e8fb 100644 --- a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt +++ b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt @@ -25,6 +25,9 @@ open class A { @Deprecated("hidden", level = DeprecationLevel.HIDDEN) open fun memberFun(){} + @Deprecated("hidden", level = DeprecationLevel.HIDDEN) + private fun privateFun(){} + @Deprecated("hidden", level = DeprecationLevel.HIDDEN) val memberProperty = 1 @@ -36,14 +39,22 @@ open class A { fun foo() { topLevelFun() + topLevelFun(1) topLevelProperty++ "".topLevelExtensionFun() + 1.topLevelExtensionFun() "".topLevelExtensionProperty + 1.topLevelExtensionProperty memberFun() + memberFun(1) + privateFun() + privateFun(1) memberProperty "".memberExtensionFun() + 1.memberExtensionFun() "".memberExtensionProperty + 1.memberExtensionProperty A("") } @@ -66,6 +77,8 @@ class B : A("") { // still can override it override fun memberFun() { super.memberFun() // but cannot call super :) + privateFun() + privateFun(1) } } diff --git a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt index 85693f73abf..13e31466c9a 100644 --- a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt +++ b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt @@ -25,6 +25,9 @@ open class A { @Deprecated("hidden", level = DeprecationLevel.HIDDEN) open fun memberFun(){} + @Deprecated("hidden", level = DeprecationLevel.HIDDEN) + private fun privateFun(){} + @Deprecated("hidden", level = DeprecationLevel.HIDDEN) val memberProperty = 1 @@ -36,14 +39,22 @@ open class A { fun foo() { topLevelFun() + topLevelFun(1) topLevelProperty++ "".topLevelExtensionFun() + 1.topLevelExtensionFun() "".topLevelExtensionProperty + 1.topLevelExtensionProperty memberFun() + memberFun(1) + privateFun() + privateFun(1) memberProperty "".memberExtensionFun() + 1.memberExtensionFun() "".memberExtensionProperty + 1.memberExtensionProperty A("") } @@ -66,6 +77,8 @@ class B : A("") { // still can override it override fun memberFun() { super.memberFun() // but cannot call super :) + privateFun() + privateFun(1) } } diff --git a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.txt b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.txt index de9bc5ff054..a9530aa51ce 100644 --- a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.txt +++ b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.txt @@ -15,6 +15,7 @@ package test { public final fun foo(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") public open fun memberFun(): kotlin.Unit + @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") private final fun privateFun(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") public final fun kotlin.String.memberExtensionFun(): kotlin.Unit } @@ -27,6 +28,7 @@ package test { public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ fun memberFun(): kotlin.Unit + @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") invisible_fake final override /*1*/ /*fake_override*/ fun privateFun(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") public final override /*1*/ /*fake_override*/ fun kotlin.String.memberExtensionFun(): kotlin.Unit } @@ -39,6 +41,7 @@ package test { public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") public open override /*1*/ /*fake_override*/ fun memberFun(): kotlin.Unit + @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") invisible_fake final override /*1*/ /*fake_override*/ fun privateFun(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") public final override /*1*/ /*fake_override*/ fun kotlin.String.memberExtensionFun(): kotlin.Unit }