From becbca22841ca7a42a6e3e6ad6bff53447201e58 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Thu, 20 Jul 2023 15:37:08 +0300 Subject: [PATCH] [K/N] Fix DeclarationDescriptor.findObjCExportMetaAnnotations `require` is failing in the presence of error types, so use nullability instead. --- .../diagnostics/NativeObjCRefinementAnnotationChecker.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/native/frontend/src/org/jetbrains/kotlin/resolve/konan/diagnostics/NativeObjCRefinementAnnotationChecker.kt b/native/frontend/src/org/jetbrains/kotlin/resolve/konan/diagnostics/NativeObjCRefinementAnnotationChecker.kt index 308368e57a0..6a6e1279755 100644 --- a/native/frontend/src/org/jetbrains/kotlin/resolve/konan/diagnostics/NativeObjCRefinementAnnotationChecker.kt +++ b/native/frontend/src/org/jetbrains/kotlin/resolve/konan/diagnostics/NativeObjCRefinementAnnotationChecker.kt @@ -23,8 +23,10 @@ internal data class ObjCExportMetaAnnotations( val refinesInSwiftAnnotation: AnnotationDescriptor?, ) -internal fun DeclarationDescriptor.findObjCExportMetaAnnotations(): ObjCExportMetaAnnotations { - require(this is ClassDescriptor && this.kind == ClassKind.ANNOTATION_CLASS) +internal fun DeclarationDescriptor.findObjCExportMetaAnnotations(): ObjCExportMetaAnnotations? { + if (this !is ClassDescriptor || this.kind != ClassKind.ANNOTATION_CLASS) { + return null + } var objCAnnotation: AnnotationDescriptor? = null var swiftAnnotation: AnnotationDescriptor? = null for (annotation in annotations) { @@ -44,7 +46,7 @@ object NativeObjCRefinementAnnotationChecker : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { if (descriptor !is ClassDescriptor || descriptor.kind != ClassKind.ANNOTATION_CLASS) return - val (objCAnnotation, swiftAnnotation) = descriptor.findObjCExportMetaAnnotations() + val (objCAnnotation, swiftAnnotation) = descriptor.findObjCExportMetaAnnotations() ?: return if (objCAnnotation == null && swiftAnnotation == null) return if (objCAnnotation != null && swiftAnnotation != null) { val reportLocation = DescriptorToSourceUtils.getSourceFromAnnotation(swiftAnnotation) ?: declaration