diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirDeprecationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirDeprecationChecker.kt index 35f9d96f16d..df4abdfdb93 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirDeprecationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirDeprecationChecker.kt @@ -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() ?.resolvedReturnTypeRef ?.toRegularClassSymbol(context.session) - ?.getDeprecation(context.languageVersionSettings.apiVersion, callSite) + ?.getDeprecation(context.session, callSite) ) return deprecationInfos.maxOrNull() } diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 69035c6f0a9..6c55e5ccc75 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -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 { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt index 200b21e0faa..eef8d8b83fa 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt @@ -62,7 +62,7 @@ class FirJavaField @FirImplementationDetail constructor( override val annotations: List 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 diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index ab9ef05603b..29da016c0e1 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -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 diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt index 104617dcc6a..9bf3479636f 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt @@ -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.getDeprecationsProviderFromAnnotations(fromJava: Boolean, firCachesFactory: FirCachesFactory): DeprecationsProvider { +fun List.getDeprecationsProviderFromAnnotations( + fromJava: Boolean, + firCachesFactory: FirCachesFactory +): DeprecationsProvider { val deprecationAnnotationByUseSite = extractDeprecationAnnotationInfoPerUseSite(fromJava) return deprecationAnnotationByUseSite.toDeprecationsProvider(firCachesFactory) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt index a9d15badf3f..00d50426111 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt @@ -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) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt index 4c12be7d0c8..812f4205e4a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt @@ -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