[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,
moduleDataProvider: ModuleDataProvider,
kotlinScopeProvider: FirKotlinScopeProvider,
packagePartProvider: PackagePartProvider,
val packagePartProvider: PackagePartProvider,
defaultDeserializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library
) : 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 optionalAnnotationPackages = mutableSetOf<FqName>()
@@ -41,8 +39,7 @@ class OptionalAnnotationClassesProvider(
optionalAnnotationPackages.add(classId.packageFqName)
}
this.optionalAnnotationClasses = optionalAnnotationClasses
this.optionalAnnotationPackages = optionalAnnotationPackages
return@lazy Pair(optionalAnnotationClasses, optionalAnnotationPackages)
}
override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> {
@@ -53,7 +50,7 @@ class OptionalAnnotationClassesProvider(
classId: ClassId,
parentContext: FirDeserializationContext?
): ClassMetadataFindResult? {
val optionalAnnotationClass = optionalAnnotationClasses[classId] ?: return null
val optionalAnnotationClass = optionalAnnotationClassesAndPackages.first[classId] ?: return null
return ClassMetadataFindResult.Metadata(
optionalAnnotationClass.nameResolver,
@@ -69,5 +66,5 @@ class OptionalAnnotationClassesProvider(
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
}