[FIR] DeprecationsProvider: caching results

This commit is contained in:
Arseniy Terekhov
2022-08-17 10:58:54 +03:00
committed by teamcity
parent 25fc948d95
commit a80870bc8f
13 changed files with 43 additions and 27 deletions
@@ -9,6 +9,7 @@ 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.caches.FirCachesFactory
import org.jetbrains.kotlin.fir.declarations.utils.isJavaOrEnhancement
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.FirNamedReference
@@ -26,13 +27,14 @@ import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
class DeprecationAnnotationInfoPerUseSiteStorage(val storage: Map<AnnotationUseSiteTarget?, List<DeprecationAnnotationInfo>>) {
fun toDeprecationsProvider(): DeprecationsProvider {
fun toDeprecationsProvider(firCachesFactory: FirCachesFactory): DeprecationsProvider {
if (storage.isEmpty()) {
return EmptyDeprecationsProvider
}
@Suppress("UNCHECKED_CAST")
val specificCallSite = storage.filterKeys { it != null } as Map<AnnotationUseSiteTarget, List<DeprecationAnnotationInfo>>
return DeprecationsProviderImpl(
firCachesFactory,
storage[null],
specificCallSite.takeIf { it.isNotEmpty() }
)
@@ -83,8 +85,8 @@ fun FirBasedSymbol<*>.getDeprecation(apiVersion: ApiVersion, callSite: FirElemen
}
}
fun FirAnnotationContainer.getDeprecationsProvider(): DeprecationsProvider {
return extractDeprecationInfoPerUseSite().toDeprecationsProvider()
fun FirAnnotationContainer.getDeprecationsProvider(firCachesFactory: FirCachesFactory): DeprecationsProvider {
return extractDeprecationInfoPerUseSite().toDeprecationsProvider(firCachesFactory)
}
fun FirAnnotationContainer.extractDeprecationInfoPerUseSite(): DeprecationAnnotationInfoPerUseSiteStorage {
@@ -99,9 +101,10 @@ fun FirAnnotationContainer.extractDeprecationInfoPerUseSite(): DeprecationAnnota
}
fun getDeprecationsProviderFromAccessors(
getter: FirFunction?,
setter: FirFunction?
setter: FirFunction?,
firCachesFactory: FirCachesFactory
): DeprecationsProvider {
return getDeprecationsAnnotationInfoByUseSiteFromAccessors(getter, setter).toDeprecationsProvider()
return getDeprecationsAnnotationInfoByUseSiteFromAccessors(getter, setter).toDeprecationsProvider(firCachesFactory)
}
fun getDeprecationsAnnotationInfoByUseSiteFromAccessors(
getter: FirFunction?,
@@ -127,9 +130,9 @@ fun getDeprecationsAnnotationInfoByUseSiteFromAccessors(
}
}
fun List<FirAnnotation>.getDeprecationsProviderFromAnnotations(fromJava: Boolean): DeprecationsProvider {
fun List<FirAnnotation>.getDeprecationsProviderFromAnnotations(fromJava: Boolean, firCachesFactory: FirCachesFactory): DeprecationsProvider {
val deprecationAnnotationByUseSite = extractDeprecationAnnotationInfoPerUseSite(fromJava)
return deprecationAnnotationByUseSite.toDeprecationsProvider()
return deprecationAnnotationByUseSite.toDeprecationsProvider(firCachesFactory)
}
fun FirBasedSymbol<*>.getDeprecationForCallSite(
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
@@ -135,7 +136,7 @@ class FirSyntheticPropertiesScope private constructor(
)
delegateGetter = getter
delegateSetter = matchingSetter
deprecationsProvider = getDeprecationsProviderFromAccessors(getter, matchingSetter)
deprecationsProvider = getDeprecationsProviderFromAccessors(getter, matchingSetter, session.firCachesFactory)
}
val syntheticSymbol = property.symbol
(baseScope as? FirUnstableSmartcastTypeScope)?.apply {
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
@@ -526,7 +527,7 @@ object FirFakeOverrideGenerator {
delegateGetter = getter
delegateSetter = setter
status = baseProperty.status
deprecationsProvider = getDeprecationsProviderFromAccessors(getter, setter)
deprecationsProvider = getDeprecationsProviderFromAccessors(getter, setter, session.firCachesFactory)
}.symbol
}