FIR: Make CheckDeprecatedSinceKotlin the first resolution stage.

All subsequent stages don't need to run if the candidate is
@Deprecated(HIDDEN).
This commit is contained in:
Mark Punzalan
2021-09-23 18:16:38 +00:00
committed by TeamCityServer
parent 63cc18b095
commit 58eb329fb9
4 changed files with 33 additions and 4 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls
sealed class CallKind(vararg resolutionSequence: ResolutionStage) { sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
object VariableAccess : CallKind( object VariableAccess : CallKind(
CheckDeprecatedSinceKotlin,
CheckVisibility, CheckVisibility,
DiscriminateSynthetics, DiscriminateSynthetics,
CheckExplicitReceiverConsistency, CheckExplicitReceiverConsistency,
@@ -17,7 +18,6 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
CheckExtensionReceiver, CheckExtensionReceiver,
CheckLowPriorityInOverloadResolution, CheckLowPriorityInOverloadResolution,
PostponedVariablesInitializerResolutionStage, PostponedVariablesInitializerResolutionStage,
CheckDeprecatedSinceKotlin,
) )
object SyntheticSelect : CallKind( object SyntheticSelect : CallKind(
@@ -30,6 +30,7 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
) )
object Function : CallKind( object Function : CallKind(
CheckDeprecatedSinceKotlin,
CheckVisibility, CheckVisibility,
DiscriminateSynthetics, DiscriminateSynthetics,
MapArguments, MapArguments,
@@ -44,10 +45,10 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
EagerResolveOfCallableReferences, EagerResolveOfCallableReferences,
CheckLowPriorityInOverloadResolution, CheckLowPriorityInOverloadResolution,
PostponedVariablesInitializerResolutionStage, PostponedVariablesInitializerResolutionStage,
CheckDeprecatedSinceKotlin
) )
object DelegatingConstructorCall : CallKind( object DelegatingConstructorCall : CallKind(
CheckDeprecatedSinceKotlin,
CheckVisibility, CheckVisibility,
MapArguments, MapArguments,
CheckExplicitReceiverConsistency, CheckExplicitReceiverConsistency,
@@ -58,10 +59,10 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
CheckExtensionReceiver, CheckExtensionReceiver,
CheckArguments, CheckArguments,
EagerResolveOfCallableReferences, EagerResolveOfCallableReferences,
CheckDeprecatedSinceKotlin,
) )
object CallableReference : CallKind( object CallableReference : CallKind(
CheckDeprecatedSinceKotlin,
CheckVisibility, CheckVisibility,
DiscriminateSynthetics, DiscriminateSynthetics,
NoTypeArguments, NoTypeArguments,
@@ -71,7 +72,6 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
CheckExtensionReceiver, CheckExtensionReceiver,
CheckCallableReferenceExpectedType, CheckCallableReferenceExpectedType,
CheckLowPriorityInOverloadResolution, CheckLowPriorityInOverloadResolution,
CheckDeprecatedSinceKotlin,
) )
object SyntheticIdForCallableReferencesResolution : CallKind( object SyntheticIdForCallableReferencesResolution : CallKind(
@@ -25,6 +25,9 @@ open class A {
@Deprecated("hidden", level = DeprecationLevel.HIDDEN) @Deprecated("hidden", level = DeprecationLevel.HIDDEN)
open fun memberFun(){} open fun memberFun(){}
@Deprecated("hidden", level = DeprecationLevel.HIDDEN)
private fun privateFun(){}
@Deprecated("hidden", level = DeprecationLevel.HIDDEN) @Deprecated("hidden", level = DeprecationLevel.HIDDEN)
val memberProperty = 1 val memberProperty = 1
@@ -36,14 +39,22 @@ open class A {
fun foo() { fun foo() {
<!INVISIBLE_REFERENCE!>topLevelFun<!>() <!INVISIBLE_REFERENCE!>topLevelFun<!>()
<!INVISIBLE_REFERENCE!>topLevelFun<!>(1)
<!INVISIBLE_REFERENCE, INVISIBLE_REFERENCE!>topLevelProperty<!>++ <!INVISIBLE_REFERENCE, INVISIBLE_REFERENCE!>topLevelProperty<!>++
"".<!INVISIBLE_REFERENCE!>topLevelExtensionFun<!>() "".<!INVISIBLE_REFERENCE!>topLevelExtensionFun<!>()
1.<!INVISIBLE_REFERENCE!>topLevelExtensionFun<!>()
"".<!INVISIBLE_REFERENCE!>topLevelExtensionProperty<!> "".<!INVISIBLE_REFERENCE!>topLevelExtensionProperty<!>
1.<!INVISIBLE_REFERENCE!>topLevelExtensionProperty<!>
<!INVISIBLE_REFERENCE!>memberFun<!>() <!INVISIBLE_REFERENCE!>memberFun<!>()
<!INVISIBLE_REFERENCE!>memberFun<!>(1)
<!INVISIBLE_REFERENCE!>privateFun<!>()
<!INVISIBLE_REFERENCE!>privateFun<!>(1)
<!INVISIBLE_REFERENCE!>memberProperty<!> <!INVISIBLE_REFERENCE!>memberProperty<!>
"".<!INVISIBLE_REFERENCE!>memberExtensionFun<!>() "".<!INVISIBLE_REFERENCE!>memberExtensionFun<!>()
1.<!INVISIBLE_REFERENCE!>memberExtensionFun<!>()
"".<!INVISIBLE_REFERENCE!>memberExtensionProperty<!> "".<!INVISIBLE_REFERENCE!>memberExtensionProperty<!>
1.<!INVISIBLE_REFERENCE!>memberExtensionProperty<!>
A(<!ARGUMENT_TYPE_MISMATCH!>""<!>) A(<!ARGUMENT_TYPE_MISMATCH!>""<!>)
} }
@@ -66,6 +77,8 @@ class B : A(<!ARGUMENT_TYPE_MISMATCH!>""<!>) {
// still can override it // still can override it
override fun <!OVERRIDE_DEPRECATION!>memberFun<!>() { override fun <!OVERRIDE_DEPRECATION!>memberFun<!>() {
super.<!INVISIBLE_REFERENCE!>memberFun<!>() // but cannot call super :) super.<!INVISIBLE_REFERENCE!>memberFun<!>() // but cannot call super :)
<!INVISIBLE_REFERENCE!>privateFun<!>()
<!INVISIBLE_REFERENCE!>privateFun<!>(1)
} }
} }
@@ -25,6 +25,9 @@ open class A {
@Deprecated("hidden", level = DeprecationLevel.HIDDEN) @Deprecated("hidden", level = DeprecationLevel.HIDDEN)
open fun memberFun(){} open fun memberFun(){}
@Deprecated("hidden", level = DeprecationLevel.HIDDEN)
private fun privateFun(){}
@Deprecated("hidden", level = DeprecationLevel.HIDDEN) @Deprecated("hidden", level = DeprecationLevel.HIDDEN)
val memberProperty = 1 val memberProperty = 1
@@ -36,14 +39,22 @@ open class A {
fun foo() { fun foo() {
<!UNRESOLVED_REFERENCE!>topLevelFun<!>() <!UNRESOLVED_REFERENCE!>topLevelFun<!>()
<!UNRESOLVED_REFERENCE!>topLevelFun<!>(1)
<!UNRESOLVED_REFERENCE, VARIABLE_EXPECTED!>topLevelProperty<!><!DEBUG_INFO_MISSING_UNRESOLVED!>++<!> <!UNRESOLVED_REFERENCE, VARIABLE_EXPECTED!>topLevelProperty<!><!DEBUG_INFO_MISSING_UNRESOLVED!>++<!>
"".<!UNRESOLVED_REFERENCE!>topLevelExtensionFun<!>() "".<!UNRESOLVED_REFERENCE!>topLevelExtensionFun<!>()
1.<!UNRESOLVED_REFERENCE!>topLevelExtensionFun<!>()
"".<!UNRESOLVED_REFERENCE!>topLevelExtensionProperty<!> "".<!UNRESOLVED_REFERENCE!>topLevelExtensionProperty<!>
1.<!UNRESOLVED_REFERENCE!>topLevelExtensionProperty<!>
<!UNRESOLVED_REFERENCE!>memberFun<!>() <!UNRESOLVED_REFERENCE!>memberFun<!>()
<!UNRESOLVED_REFERENCE!>memberFun<!>(1)
<!UNRESOLVED_REFERENCE!>privateFun<!>()
<!UNRESOLVED_REFERENCE!>privateFun<!>(1)
<!UNRESOLVED_REFERENCE!>memberProperty<!> <!UNRESOLVED_REFERENCE!>memberProperty<!>
"".<!UNRESOLVED_REFERENCE!>memberExtensionFun<!>() "".<!UNRESOLVED_REFERENCE!>memberExtensionFun<!>()
1.<!UNRESOLVED_REFERENCE!>memberExtensionFun<!>()
"".<!UNRESOLVED_REFERENCE!>memberExtensionProperty<!> "".<!UNRESOLVED_REFERENCE!>memberExtensionProperty<!>
1.<!UNRESOLVED_REFERENCE!>memberExtensionProperty<!>
A(<!TYPE_MISMATCH!>""<!>) A(<!TYPE_MISMATCH!>""<!>)
} }
@@ -66,6 +77,8 @@ class B : A(<!TYPE_MISMATCH!>""<!>) {
// still can override it // still can override it
override fun <!OVERRIDE_DEPRECATION!>memberFun<!>() { override fun <!OVERRIDE_DEPRECATION!>memberFun<!>() {
super.<!UNRESOLVED_REFERENCE!>memberFun<!>() // but cannot call super :) super.<!UNRESOLVED_REFERENCE!>memberFun<!>() // but cannot call super :)
<!UNRESOLVED_REFERENCE!>privateFun<!>()
<!UNRESOLVED_REFERENCE!>privateFun<!>(1)
} }
} }
@@ -15,6 +15,7 @@ package test {
public final fun foo(): kotlin.Unit public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int 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") 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 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 @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 final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun memberFun(): kotlin.Unit 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 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 @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 final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int 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") 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 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 @kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "hidden") public final override /*1*/ /*fake_override*/ fun kotlin.String.memberExtensionFun(): kotlin.Unit
} }