[FIR] DeprecationsProvider: caching results
This commit is contained in:
committed by
teamcity
parent
25fc948d95
commit
a80870bc8f
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.deserialization
|
||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
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.comparators.FirMemberDeclarationComparator
|
||||
@@ -226,7 +227,7 @@ fun deserializeClassToSymbol(
|
||||
|
||||
it.sourceElement = containerSource
|
||||
|
||||
it.replaceDeprecationsProvider(it.getDeprecationsProvider())
|
||||
it.replaceDeprecationsProvider(it.getDeprecationsProvider(session.firCachesFactory))
|
||||
|
||||
classProto.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let { idx ->
|
||||
it.moduleName = nameResolver.getString(idx)
|
||||
|
||||
+4
-3
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
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.impl.FirDefaultPropertyGetter
|
||||
@@ -421,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)
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false, c.session.firCachesFactory)
|
||||
|
||||
proto.contextReceiverTypes(c.typeTable).mapTo(contextReceivers, ::loadContextReceiver)
|
||||
}.apply {
|
||||
@@ -499,7 +500,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
)
|
||||
annotations +=
|
||||
c.annotationDeserializer.loadFunctionAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false)
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false, c.session.firCachesFactory)
|
||||
this.containerSource = c.containerSource
|
||||
|
||||
proto.contextReceiverTypes(c.typeTable).mapTo(contextReceivers, ::loadContextReceiver)
|
||||
@@ -578,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)
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(false, c.session.firCachesFactory)
|
||||
|
||||
contextReceivers.addAll(createContextReceiversForClass(classProto))
|
||||
}.build().apply {
|
||||
|
||||
@@ -185,7 +185,7 @@ abstract class FirJavaFacade(
|
||||
}
|
||||
}
|
||||
firJavaClass.replaceSuperTypeRefs(enhancedSuperTypes)
|
||||
firJavaClass.replaceDeprecationsProvider(firJavaClass.getDeprecationsProvider())
|
||||
firJavaClass.replaceDeprecationsProvider(firJavaClass.getDeprecationsProvider(session.firCachesFactory))
|
||||
return firJavaClass
|
||||
}
|
||||
|
||||
|
||||
@@ -11,11 +11,11 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirFieldBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
|
||||
@@ -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)
|
||||
annotations.getDeprecationsProviderFromAnnotations(true, moduleData.session.firCachesFactory)
|
||||
}
|
||||
|
||||
override val contextReceivers: List<FirContextReceiver>
|
||||
|
||||
+2
-2
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.fir.java.deserialization
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.ThreadSafeMutableState
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.getDeprecationsProvider
|
||||
import org.jetbrains.kotlin.fir.deserialization.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.java.FirJavaFacade
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.load.kotlin.*
|
||||
@@ -151,7 +151,7 @@ class JvmClassFileBasedSymbolProvider(
|
||||
},
|
||||
kotlinClass.byteContent,
|
||||
)
|
||||
symbol.fir.replaceDeprecationsProvider(symbol.fir.getDeprecationsProvider())
|
||||
symbol.fir.replaceDeprecationsProvider(symbol.fir.getDeprecationsProvider(session.firCachesFactory))
|
||||
}
|
||||
|
||||
private fun String?.toPath(): Path? {
|
||||
|
||||
+2
-2
@@ -168,7 +168,7 @@ class FirSignatureEnhancement(
|
||||
delegateGetter = enhancedGetterSymbol.fir as FirSimpleFunction
|
||||
delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction?
|
||||
status = firElement.status
|
||||
deprecationsProvider = getDeprecationsProviderFromAccessors(delegateGetter, delegateSetter)
|
||||
deprecationsProvider = getDeprecationsProviderFromAccessors(delegateGetter, delegateSetter, session.firCachesFactory)
|
||||
}.symbol
|
||||
}
|
||||
else -> {
|
||||
@@ -320,7 +320,7 @@ class FirSignatureEnhancement(
|
||||
else -> throw AssertionError("Unknown Java method to enhance: ${firMethod.render()}")
|
||||
}.apply {
|
||||
annotations += firMethod.annotations
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(true)
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(true, session.firCachesFactory)
|
||||
}.build()
|
||||
|
||||
return function.symbol
|
||||
|
||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.java.scopes
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
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.buildSimpleFunctionCopy
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||
@@ -88,7 +89,7 @@ class JavaClassUseSiteMemberScope(
|
||||
chooseModalityForAccessor(property, delegateGetter)
|
||||
}
|
||||
)
|
||||
deprecationsProvider = getDeprecationsProviderFromAccessors(delegateGetter, delegateSetter)
|
||||
deprecationsProvider = getDeprecationsProviderFromAccessors(delegateGetter, delegateSetter, session.firCachesFactory)
|
||||
}.symbol
|
||||
}
|
||||
}
|
||||
|
||||
+10
-7
@@ -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 {
|
||||
|
||||
+2
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.fir.resolve.transformers
|
||||
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||
@@ -555,7 +555,7 @@ abstract class AbstractFirStatusResolveTransformer(
|
||||
|
||||
protected fun calculateDeprecations(simpleFunction: FirCallableDeclaration) {
|
||||
if (simpleFunction.deprecationsProvider is UnresolvedDeprecationProvider) {
|
||||
simpleFunction.replaceDeprecationsProvider(simpleFunction.getDeprecationsProvider())
|
||||
simpleFunction.replaceDeprecationsProvider(simpleFunction.getDeprecationsProvider(session.firCachesFactory))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -12,13 +12,13 @@ import kotlinx.collections.immutable.persistentListOf
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
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.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.extensions.*
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.fqName
|
||||
@@ -254,7 +254,7 @@ private class FirAnnotationResolveTransformer(
|
||||
|
||||
private fun calculateDeprecations(classLikeDeclaration: FirClassLikeDeclaration) {
|
||||
if (classLikeDeclaration.deprecationsProvider == UnresolvedDeprecationProvider) {
|
||||
classLikeDeclaration.replaceDeprecationsProvider(classLikeDeclaration.getDeprecationsProvider())
|
||||
classLikeDeclaration.replaceDeprecationsProvider(classLikeDeclaration.getDeprecationsProvider(session.firCachesFactory))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-2
@@ -7,6 +7,9 @@ package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.config.ApiVersion
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.caches.FirCache
|
||||
import org.jetbrains.kotlin.fir.caches.FirCachesFactory
|
||||
import org.jetbrains.kotlin.fir.caches.createCache
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||
import org.jetbrains.kotlin.resolve.deprecation.SimpleDeprecationInfo
|
||||
@@ -17,18 +20,23 @@ abstract class DeprecationsProvider {
|
||||
}
|
||||
|
||||
class DeprecationsProviderImpl(
|
||||
firCachesFactory: FirCachesFactory,
|
||||
private val all: List<DeprecationAnnotationInfo>?,
|
||||
private val bySpecificSite: Map<AnnotationUseSiteTarget, List<DeprecationAnnotationInfo>>?
|
||||
) : DeprecationsProvider() {
|
||||
override fun getDeprecationsInfo(version: ApiVersion): DeprecationsPerUseSite {
|
||||
private val cache: FirCache<ApiVersion, DeprecationsPerUseSite, Nothing?> = firCachesFactory.createCache { version ->
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return DeprecationsPerUseSite(
|
||||
DeprecationsPerUseSite(
|
||||
all?.computeDeprecationInfoOrNull(version),
|
||||
bySpecificSite?.mapValues { (_, info) -> info.computeDeprecationInfoOrNull(version) }?.filterValues { it != null }
|
||||
as Map<AnnotationUseSiteTarget, DeprecationInfo>?
|
||||
)
|
||||
}
|
||||
|
||||
override fun getDeprecationsInfo(version: ApiVersion): DeprecationsPerUseSite {
|
||||
return cache.getValue(version, null)
|
||||
}
|
||||
|
||||
private fun List<DeprecationAnnotationInfo>.computeDeprecationInfoOrNull(version: ApiVersion): DeprecationInfo? {
|
||||
return firstNotNullOfOrNull { it.computeDeprecationInfo(version) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user