[FIR] FirSerializationPluginClassChecker

This change affects nothing, because @Serializable is checked during
COMPILER_REQUIRED_ANNOTATIONS when typealiases
are not yet resolved, but in case we change something
in the Future and want to support it, we'd have one less problem
This commit is contained in:
Nikolay Lunyak
2023-01-10 12:50:45 +02:00
committed by Space Team
parent 6a1c9e9279
commit 647cdb1c9a
@@ -63,8 +63,9 @@ object FirSerializationPluginClassChecker : FirClassChecker() {
private fun checkMetaSerializableApplicable(classSymbol: FirClassSymbol<out FirClass>, reporter: DiagnosticReporter) { private fun checkMetaSerializableApplicable(classSymbol: FirClassSymbol<out FirClass>, reporter: DiagnosticReporter) {
if (classSymbol.classKind != ClassKind.ANNOTATION_CLASS) return if (classSymbol.classKind != ClassKind.ANNOTATION_CLASS) return
if (!classSymbol.classId.isNestedClass) return if (!classSymbol.classId.isNestedClass) return
val anno = classSymbol.resolvedAnnotationsWithClassIds.find { it.classId == SerializationAnnotations.metaSerializableAnnotationClassId } val anno = classSymbol.resolvedAnnotationsWithClassIds
if (anno == null) return .find { it.toAnnotationClassId(session) == SerializationAnnotations.metaSerializableAnnotationClassId }
?: return
reporter.reportOn(anno.source, FirSerializationErrors.META_SERIALIZABLE_NOT_APPLICABLE) reporter.reportOn(anno.source, FirSerializationErrors.META_SERIALIZABLE_NOT_APPLICABLE)
} }
@@ -92,7 +93,7 @@ object FirSerializationPluginClassChecker : FirClassChecker() {
fun annotationsFilter(annotations: List<FirAnnotation>): List<Pair<ClassId, FirAnnotation>> { fun annotationsFilter(annotations: List<FirAnnotation>): List<Pair<ClassId, FirAnnotation>> {
return annotations return annotations
.filter { it.annotationTypeRef.toRegularClassSymbol(session)?.isInheritableSerialInfoAnnotation(session) == true } .filter { it.annotationTypeRef.toRegularClassSymbol(session)?.isInheritableSerialInfoAnnotation(session) == true }
.mapNotNull { annotation -> annotation.classId?.let { it to annotation } } .mapNotNull { annotation -> annotation.toAnnotationClassId(session)?.let { it to annotation } }
} }
val annotationByClassId = buildMap { val annotationByClassId = buildMap {