[FIR] Rename hidden methods around HiddenEverywhereBesideSuperCalls and add documentation.
This commit is contained in:
committed by
Space Team
parent
e8cbd8a1cd
commit
35e9170af1
+1
-1
@@ -244,7 +244,7 @@ sealed class FirOverrideChecker(mppKind: MppCheckerKind) : FirAbstractOverrideCh
|
|||||||
|
|
||||||
if (callableName in FirDeprecationChecker.DeprecatedOverrideOfHiddenReplacements) {
|
if (callableName in FirDeprecationChecker.DeprecatedOverrideOfHiddenReplacements) {
|
||||||
firTypeScope.processOverriddenFunctions(this) {
|
firTypeScope.processOverriddenFunctions(this) {
|
||||||
if (it.isHidden(isSuperCall = false, isOverridden = true) == VisibleWithDeprecation) {
|
if (it.hiddenStatusOfCall(isSuperCall = false, isCallToOverride = true) == VisibleWithDeprecation) {
|
||||||
val message = FirDeprecationChecker.getDeprecatedOverrideOfHiddenMessage(callableName)
|
val message = FirDeprecationChecker.getDeprecatedOverrideOfHiddenMessage(callableName)
|
||||||
val deprecationInfo =
|
val deprecationInfo =
|
||||||
SimpleDeprecationInfo(DeprecationLevelValue.WARNING, propagatesToOverrides = false, message)
|
SimpleDeprecationInfo(DeprecationLevelValue.WARNING, propagatesToOverrides = false, message)
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ class JvmMappedScope(
|
|||||||
symbol = FirNamedFunctionSymbol(CallableId(firKotlinClass.classId, name))
|
symbol = FirNamedFunctionSymbol(CallableId(firKotlinClass.classId, name))
|
||||||
resolvePhase = FirResolvePhase.BODY_RESOLVE
|
resolvePhase = FirResolvePhase.BODY_RESOLVE
|
||||||
}.apply {
|
}.apply {
|
||||||
isHiddenEverywhereBesideSuperCalls = HiddenEverywhereBesideSuperCallsStatus.HIDDEN_FAKE
|
hiddenEverywhereBesideSuperCallsStatus = HiddenEverywhereBesideSuperCallsStatus.HIDDEN_FAKE
|
||||||
}.symbol
|
}.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,9 +293,9 @@ class JvmMappedScope(
|
|||||||
|
|
||||||
private fun FirCallableDeclaration.setHiddenAttributeIfNecessary(jdkMemberStatus: JDKMemberStatus) {
|
private fun FirCallableDeclaration.setHiddenAttributeIfNecessary(jdkMemberStatus: JDKMemberStatus) {
|
||||||
if (jdkMemberStatus == JDKMemberStatus.HIDDEN) {
|
if (jdkMemberStatus == JDKMemberStatus.HIDDEN) {
|
||||||
isHiddenEverywhereBesideSuperCalls = HiddenEverywhereBesideSuperCallsStatus.HIDDEN
|
hiddenEverywhereBesideSuperCallsStatus = HiddenEverywhereBesideSuperCallsStatus.HIDDEN
|
||||||
} else if (jdkMemberStatus == JDKMemberStatus.HIDDEN_IN_DECLARING_CLASS_ONLY) {
|
} else if (jdkMemberStatus == JDKMemberStatus.HIDDEN_IN_DECLARING_CLASS_ONLY) {
|
||||||
isHiddenEverywhereBesideSuperCalls = HiddenEverywhereBesideSuperCallsStatus.HIDDEN_IN_DECLARING_CLASS_ONLY
|
hiddenEverywhereBesideSuperCallsStatus = HiddenEverywhereBesideSuperCallsStatus.HIDDEN_IN_DECLARING_CLASS_ONLY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+36
-5
@@ -326,7 +326,7 @@ fun FirBasedSymbol<*>.isDeprecationLevelHidden(languageVersionSettings: Language
|
|||||||
|
|
||||||
private object IsHiddenEverywhereBesideSuperCalls : FirDeclarationDataKey()
|
private object IsHiddenEverywhereBesideSuperCalls : FirDeclarationDataKey()
|
||||||
|
|
||||||
var FirCallableDeclaration.isHiddenEverywhereBesideSuperCalls: HiddenEverywhereBesideSuperCallsStatus? by FirDeclarationDataRegistry.data(
|
var FirCallableDeclaration.hiddenEverywhereBesideSuperCallsStatus: HiddenEverywhereBesideSuperCallsStatus? by FirDeclarationDataRegistry.data(
|
||||||
IsHiddenEverywhereBesideSuperCalls
|
IsHiddenEverywhereBesideSuperCalls
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -344,13 +344,44 @@ enum class CallToPotentiallyHiddenSymbolResult {
|
|||||||
Hidden, Visible, VisibleWithDeprecation,
|
Hidden, Visible, VisibleWithDeprecation,
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirCallableSymbol<*>.isHidden(isSuperCall: Boolean, isOverridden: Boolean): CallToPotentiallyHiddenSymbolResult {
|
/**
|
||||||
|
* To check whether a symbol is visible and if it's deprecated, the method needs to be called for the symbol and all its
|
||||||
|
* overridden symbols.
|
||||||
|
* [isSuperCall] must be set to `true` when the receiver is `super`.
|
||||||
|
* [isCallToOverride] must be set to `false` for the original symbol and to `true` for all its overridden symbols.
|
||||||
|
*
|
||||||
|
* Given the following hierarchy
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* public class A {
|
||||||
|
* public String getX() { return ""; } // HIDDEN
|
||||||
|
* public String getY() { return ""; } // HIDDEN_IN_DECLARING_CLASS_ONLY
|
||||||
|
* public String getZ() { return ""; } // HIDDEN_FAKE
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* class B extends A {
|
||||||
|
* @Override public String getX() { return super.getX(); }
|
||||||
|
* @Override public String getY() { return super.getY(); }
|
||||||
|
* @Override public String getZ() { return super.getZ(); }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* the results will be as follows
|
||||||
|
*
|
||||||
|
* | Receiver \ Symbol | getX | getY | getZ |
|
||||||
|
* |-------------------|---------|------------------------|------------------------|
|
||||||
|
* | A | Hidden | Hidden | Hidden |
|
||||||
|
* | super | Visible | VisibleWithDeprecation | Hidden |
|
||||||
|
* | B | Hidden | VisibleWithDeprecation | VisibleWithDeprecation |
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
fun FirCallableSymbol<*>.hiddenStatusOfCall(isSuperCall: Boolean, isCallToOverride: Boolean): CallToPotentiallyHiddenSymbolResult {
|
||||||
val fir = fir
|
val fir = fir
|
||||||
if (fir.isHiddenToOvercomeSignatureClash == true) {
|
if (fir.isHiddenToOvercomeSignatureClash == true) {
|
||||||
return CallToPotentiallyHiddenSymbolResult.Hidden
|
return CallToPotentiallyHiddenSymbolResult.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
val status = fir.isHiddenEverywhereBesideSuperCalls ?: return CallToPotentiallyHiddenSymbolResult.Visible
|
val status = fir.hiddenEverywhereBesideSuperCallsStatus ?: return CallToPotentiallyHiddenSymbolResult.Visible
|
||||||
|
|
||||||
return when (status) {
|
return when (status) {
|
||||||
// If the declaration is HIDDEN, we don't need a deprecation on supercalls because what are we warning the user about?
|
// If the declaration is HIDDEN, we don't need a deprecation on supercalls because what are we warning the user about?
|
||||||
@@ -359,8 +390,8 @@ fun FirCallableSymbol<*>.isHidden(isSuperCall: Boolean, isOverridden: Boolean):
|
|||||||
// However, on HIDDEN_IN_DECLARING_CLASS_ONLY,
|
// However, on HIDDEN_IN_DECLARING_CLASS_ONLY,
|
||||||
// we report a deprecation warning on super calls because we might want to rename the method in the future
|
// we report a deprecation warning on super calls because we might want to rename the method in the future
|
||||||
// (getFirst -> first).
|
// (getFirst -> first).
|
||||||
HiddenEverywhereBesideSuperCallsStatus.HIDDEN_IN_DECLARING_CLASS_ONLY -> if (isSuperCall || isOverridden) CallToPotentiallyHiddenSymbolResult.VisibleWithDeprecation else CallToPotentiallyHiddenSymbolResult.Hidden
|
HiddenEverywhereBesideSuperCallsStatus.HIDDEN_IN_DECLARING_CLASS_ONLY -> if (isSuperCall || isCallToOverride) CallToPotentiallyHiddenSymbolResult.VisibleWithDeprecation else CallToPotentiallyHiddenSymbolResult.Hidden
|
||||||
// HIDDEN_FAKE is always hidden (even for super calls), unless overridden.
|
// HIDDEN_FAKE is always hidden (even for super calls), unless overridden.
|
||||||
HiddenEverywhereBesideSuperCallsStatus.HIDDEN_FAKE -> if (isOverridden) CallToPotentiallyHiddenSymbolResult.VisibleWithDeprecation else CallToPotentiallyHiddenSymbolResult.Hidden
|
HiddenEverywhereBesideSuperCallsStatus.HIDDEN_FAKE -> if (isCallToOverride) CallToPotentiallyHiddenSymbolResult.VisibleWithDeprecation else CallToPotentiallyHiddenSymbolResult.Hidden
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -272,7 +272,7 @@ class FirSyntheticPropertiesScope private constructor(
|
|||||||
|
|
||||||
val visited = mutableSetOf<MemberWithBaseScope<FirNamedFunctionSymbol>>()
|
val visited = mutableSetOf<MemberWithBaseScope<FirNamedFunctionSymbol>>()
|
||||||
fun checkJavaOrigin(symbol: FirNamedFunctionSymbol, scope: FirTypeScope, isOverridden: Boolean) {
|
fun checkJavaOrigin(symbol: FirNamedFunctionSymbol, scope: FirTypeScope, isOverridden: Boolean) {
|
||||||
val hidden = symbol.isHidden(isSuperCall = false, isOverridden = isOverridden)
|
val hidden = symbol.hiddenStatusOfCall(isSuperCall = false, isCallToOverride = isOverridden)
|
||||||
when (hidden) {
|
when (hidden) {
|
||||||
CallToPotentiallyHiddenSymbolResult.Hidden -> isHiddenEverywhereBesideSuperCalls = true
|
CallToPotentiallyHiddenSymbolResult.Hidden -> isHiddenEverywhereBesideSuperCalls = true
|
||||||
CallToPotentiallyHiddenSymbolResult.VisibleWithDeprecation -> isDeprecatedOverrideOfHidden = true
|
CallToPotentiallyHiddenSymbolResult.VisibleWithDeprecation -> isDeprecatedOverrideOfHidden = true
|
||||||
|
|||||||
@@ -775,7 +775,7 @@ internal object CheckHiddenDeclaration : ResolutionStage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val isSuperCall = callInfo.callSite.isSuperCall(session)
|
val isSuperCall = callInfo.callSite.isSuperCall(session)
|
||||||
if (symbol.isHidden(isSuperCall, isOverridden = false) == CallToPotentiallyHiddenSymbolResult.Hidden) return true
|
if (symbol.hiddenStatusOfCall(isSuperCall, isCallToOverride = false) == CallToPotentiallyHiddenSymbolResult.Hidden) return true
|
||||||
if (symbol.fir.dispatchReceiverType == null || symbol !is FirNamedFunctionSymbol) return false
|
if (symbol.fir.dispatchReceiverType == null || symbol !is FirNamedFunctionSymbol) return false
|
||||||
|
|
||||||
val scope = candidate.originScope as? FirTypeScope ?: return false
|
val scope = candidate.originScope as? FirTypeScope ?: return false
|
||||||
@@ -783,7 +783,7 @@ internal object CheckHiddenDeclaration : ResolutionStage() {
|
|||||||
var hidden = false
|
var hidden = false
|
||||||
var deprecated = false
|
var deprecated = false
|
||||||
scope.processOverriddenFunctions(symbol) {
|
scope.processOverriddenFunctions(symbol) {
|
||||||
val result = it.isHidden(isSuperCall, isOverridden = true)
|
val result = it.hiddenStatusOfCall(isSuperCall, isCallToOverride = true)
|
||||||
if (result != CallToPotentiallyHiddenSymbolResult.Visible) {
|
if (result != CallToPotentiallyHiddenSymbolResult.Visible) {
|
||||||
if (result == CallToPotentiallyHiddenSymbolResult.Hidden) {
|
if (result == CallToPotentiallyHiddenSymbolResult.Hidden) {
|
||||||
hidden = true
|
hidden = true
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.isHiddenEverywhereBesideSuperCalls
|
import org.jetbrains.kotlin.fir.declarations.hiddenEverywhereBesideSuperCallsStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.isHiddenToOvercomeSignatureClash
|
import org.jetbrains.kotlin.fir.declarations.isHiddenToOvercomeSignatureClash
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
||||||
@@ -146,7 +146,7 @@ class FirScopeDumpHandler(testServices: TestServices) : FirAnalysisHandler(testS
|
|||||||
private fun SmartPrinter.printInfo(declaration: FirCallableDeclaration, scope: FirTypeScope, counter: SymbolCounter) {
|
private fun SmartPrinter.printInfo(declaration: FirCallableDeclaration, scope: FirTypeScope, counter: SymbolCounter) {
|
||||||
val origin = declaration.origin.takeUnless { it == FirDeclarationOrigin.BuiltIns } ?: FirDeclarationOrigin.Library
|
val origin = declaration.origin.takeUnless { it == FirDeclarationOrigin.BuiltIns } ?: FirDeclarationOrigin.Library
|
||||||
print("[$origin]: ")
|
print("[$origin]: ")
|
||||||
if (declaration.isHiddenEverywhereBesideSuperCalls != null) {
|
if (declaration.hiddenEverywhereBesideSuperCallsStatus != null) {
|
||||||
print("/* hidden beside supers */ ")
|
print("/* hidden beside supers */ ")
|
||||||
} else if (declaration.isHiddenToOvercomeSignatureClash == true) {
|
} else if (declaration.isHiddenToOvercomeSignatureClash == true) {
|
||||||
print("/* hidden due to clash */ ")
|
print("/* hidden due to clash */ ")
|
||||||
|
|||||||
Reference in New Issue
Block a user