[FIR] Use lazy initialization for OptionalAnnotationClassesProvider

This commit is contained in:
Ivan Kochurkin
2022-04-27 16:12:59 +03:00
parent 1b0af2cb0e
commit 5fdf365ac4
@@ -25,13 +25,11 @@ class OptionalAnnotationClassesProvider(
session: FirSession, session: FirSession,
moduleDataProvider: ModuleDataProvider, moduleDataProvider: ModuleDataProvider,
kotlinScopeProvider: FirKotlinScopeProvider, kotlinScopeProvider: FirKotlinScopeProvider,
packagePartProvider: PackagePartProvider, val packagePartProvider: PackagePartProvider,
defaultDeserializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library defaultDeserializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library
) : AbstractFirDeserializedSymbolProvider(session, moduleDataProvider, kotlinScopeProvider, defaultDeserializationOrigin) { ) : AbstractFirDeserializedSymbolProvider(session, moduleDataProvider, kotlinScopeProvider, defaultDeserializationOrigin) {
private val optionalAnnotationClasses: Map<ClassId, ClassData>
private val optionalAnnotationPackages: Set<FqName>
init { private val optionalAnnotationClassesAndPackages by lazy(LazyThreadSafetyMode.PUBLICATION) {
val optionalAnnotationClasses = mutableMapOf<ClassId, ClassData>() val optionalAnnotationClasses = mutableMapOf<ClassId, ClassData>()
val optionalAnnotationPackages = mutableSetOf<FqName>() val optionalAnnotationPackages = mutableSetOf<FqName>()
@@ -41,8 +39,7 @@ class OptionalAnnotationClassesProvider(
optionalAnnotationPackages.add(classId.packageFqName) optionalAnnotationPackages.add(classId.packageFqName)
} }
this.optionalAnnotationClasses = optionalAnnotationClasses return@lazy Pair(optionalAnnotationClasses, optionalAnnotationPackages)
this.optionalAnnotationPackages = optionalAnnotationPackages
} }
override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> { override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> {
@@ -53,7 +50,7 @@ class OptionalAnnotationClassesProvider(
classId: ClassId, classId: ClassId,
parentContext: FirDeserializationContext? parentContext: FirDeserializationContext?
): ClassMetadataFindResult? { ): ClassMetadataFindResult? {
val optionalAnnotationClass = optionalAnnotationClasses[classId] ?: return null val optionalAnnotationClass = optionalAnnotationClassesAndPackages.first[classId] ?: return null
return ClassMetadataFindResult.Metadata( return ClassMetadataFindResult.Metadata(
optionalAnnotationClass.nameResolver, optionalAnnotationClass.nameResolver,
@@ -69,5 +66,5 @@ class OptionalAnnotationClassesProvider(
return JvmFlags.IS_COMPILED_IN_JVM_DEFAULT_MODE.get(classProto.getExtension(JvmProtoBuf.jvmClassFlags)) return JvmFlags.IS_COMPILED_IN_JVM_DEFAULT_MODE.get(classProto.getExtension(JvmProtoBuf.jvmClassFlags))
} }
override fun getPackage(fqName: FqName): FqName? = if (optionalAnnotationPackages.contains(fqName)) fqName else null override fun getPackage(fqName: FqName): FqName? = if (optionalAnnotationClassesAndPackages.second.contains(fqName)) fqName else null
} }