[FIR] DeprecationProvider: inline builder, fix named arguments, cosmetic

This commit is contained in:
Arseniy Terekhov
2022-08-17 11:15:40 +03:00
committed by teamcity
parent a80870bc8f
commit 539e5f82e2
7 changed files with 20 additions and 11 deletions
@@ -74,11 +74,11 @@ object FirDeprecationChecker : FirBasicExpressionChecker() {
context: CheckerContext
): DeprecationInfo? {
val deprecationInfos = listOfNotNull(
symbol.getDeprecation(context.languageVersionSettings.apiVersion, callSite),
symbol.getDeprecation(context.session, callSite),
symbol.safeAs<FirConstructorSymbol>()
?.resolvedReturnTypeRef
?.toRegularClassSymbol(context.session)
?.getDeprecation(context.languageVersionSettings.apiVersion, callSite)
?.getDeprecation(context.session, callSite)
)
return deprecationInfos.maxOrNull()
}
@@ -422,7 +422,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
}
this.containerSource = c.containerSource
this.initializer = c.constDeserializer.loadConstant(proto, symbol.callableId, c.nameResolver)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false, c.session.firCachesFactory)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(fromJava = false, c.session.firCachesFactory)
proto.contextReceiverTypes(c.typeTable).mapTo(contextReceivers, ::loadContextReceiver)
}.apply {
@@ -500,7 +500,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
)
annotations +=
c.annotationDeserializer.loadFunctionAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false, c.session.firCachesFactory)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(fromJava = false, c.session.firCachesFactory)
this.containerSource = c.containerSource
proto.contextReceiverTypes(c.typeTable).mapTo(contextReceivers, ::loadContextReceiver)
@@ -579,7 +579,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
annotations +=
c.annotationDeserializer.loadConstructorAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
containerSource = c.containerSource
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false, c.session.firCachesFactory)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(fromJava = false, c.session.firCachesFactory)
contextReceivers.addAll(createContextReceiversForClass(classProto))
}.build().apply {
@@ -62,7 +62,7 @@ class FirJavaField @FirImplementationDetail constructor(
override val annotations: List<FirAnnotation> by lazy { annotationBuilder() }
override val deprecationsProvider: DeprecationsProvider by lazy {
annotations.getDeprecationsProviderFromAnnotations(true, moduleData.session.firCachesFactory)
annotations.getDeprecationsProviderFromAnnotations(fromJava = true, moduleData.session.firCachesFactory)
}
override val contextReceivers: List<FirContextReceiver>
@@ -320,7 +320,7 @@ class FirSignatureEnhancement(
else -> throw AssertionError("Unknown Java method to enhance: ${firMethod.render()}")
}.apply {
annotations += firMethod.annotations
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(true, session.firCachesFactory)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(fromJava = true, session.firCachesFactory)
}.build()
return function.symbol
@@ -9,9 +9,11 @@ import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.FirCachesFactory
import org.jetbrains.kotlin.fir.declarations.utils.isJavaOrEnhancement
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -64,11 +66,15 @@ class DeprecationAnnotationInfoPerUseSiteStorageBuilder {
}
}
fun buildDeprecationAnnotationInfoPerUseSiteStorage(builder: DeprecationAnnotationInfoPerUseSiteStorageBuilder.() -> Unit)
inline fun buildDeprecationAnnotationInfoPerUseSiteStorage(builder: DeprecationAnnotationInfoPerUseSiteStorageBuilder.() -> Unit)
: DeprecationAnnotationInfoPerUseSiteStorage {
return DeprecationAnnotationInfoPerUseSiteStorageBuilder().apply(builder).build()
}
fun FirBasedSymbol<*>.getDeprecation(session: FirSession, callSite: FirElement?): DeprecationInfo? {
return getDeprecation(session.languageVersionSettings.apiVersion, callSite)
}
fun FirBasedSymbol<*>.getDeprecation(apiVersion: ApiVersion, callSite: FirElement?): DeprecationInfo? {
return when (this) {
is FirPropertySymbol ->
@@ -130,7 +136,10 @@ fun getDeprecationsAnnotationInfoByUseSiteFromAccessors(
}
}
fun List<FirAnnotation>.getDeprecationsProviderFromAnnotations(fromJava: Boolean, firCachesFactory: FirCachesFactory): DeprecationsProvider {
fun List<FirAnnotation>.getDeprecationsProviderFromAnnotations(
fromJava: Boolean,
firCachesFactory: FirCachesFactory
): DeprecationsProvider {
val deprecationAnnotationByUseSite = extractDeprecationAnnotationInfoPerUseSite(fromJava)
return deprecationAnnotationByUseSite.toDeprecationsProvider(firCachesFactory)
}
@@ -630,7 +630,7 @@ internal object CheckCallModifiers : CheckerStage() {
internal object CheckDeprecatedSinceKotlin : ResolutionStage() {
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
val symbol = candidate.symbol as? FirCallableSymbol<*> ?: return
val deprecation = symbol.getDeprecation(context.session.languageVersionSettings.apiVersion, callInfo.callSite)
val deprecation = symbol.getDeprecation(context.session, callInfo.callSite)
if (deprecation != null && deprecation.deprecationLevel == DeprecationLevelValue.HIDDEN) {
sink.yieldDiagnostic(HiddenCandidate)
}
@@ -124,7 +124,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() {
diagnostic = ConeVisibilityError(symbol)
}
val deprecation = symbol.getDeprecation(session.languageVersionSettings.apiVersion, useSiteFile)
val deprecation = symbol.getDeprecation(session, useSiteFile)
if (deprecation != null && deprecation.deprecationLevel == DeprecationLevelValue.HIDDEN) {
symbolApplicability = minOf(CandidateApplicability.HIDDEN, symbolApplicability)
diagnostic = null