[FIR] Use lazy initialization for OptionalAnnotationClassesProvider
This commit is contained in:
+5
-8
@@ -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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user