---
Name: ObjectiveC
Classes:
- Name: NSArray
  SwiftBridge: 'Swift.Array'
- Name: NSDictionary
  SwiftBridge: 'Swift.Dictionary'
- Name: NSSet
  SwiftBridge: 'Swift.Set'
- Name: NSString
  SwiftBridge: 'Swift.String'
- Name: List
  Methods:
  - Selector: init
    MethodKind: Instance
    NullabilityOfRet: N
  - Selector: 'isEqual:'
    MethodKind: Instance
    Nullability:
    - O
    NullabilityOfRet: S
- Name: NSObject
  SwiftName: NSObject
  Methods:
  - Selector: alloc
    MethodKind: Class
    NullabilityOfRet: N
  - Selector: 'allocWithZone:'
    MethodKind: Class
    Nullability:
    - S
    NullabilityOfRet: N
  - Selector: class
    MethodKind: Class
    Availability: nonswift
    AvailabilityMsg: use 'self' instead
  - Selector: 'conformsToProtocol:'
    MethodKind: Class
    Nullability:
    - N
    NullabilityOfRet: S
  - Selector: copy
    MethodKind: Instance
    NullabilityOfRet: N
  - Selector: dealloc
    MethodKind: Instance
    Availability: nonswift
    AvailabilityMsg: use 'deinit' to define a de-initializer
  - Selector: debugDescription
    MethodKind: Class
    NullabilityOfRet: N
  - Selector: description
    MethodKind: Class
    NullabilityOfRet: N
  - Selector: 'forwardingTargetForSelector:'
    MethodKind: Instance
    Nullability:
    - S
    NullabilityOfRet: O
  - Selector: 'forwardInvocation:'
    MethodKind: Instance
    Availability: nonswift
  - Selector: init
    MethodKind: Instance
    NullabilityOfRet: N
    DesignatedInit: true
  - Selector: 'instanceMethodSignatureForSelector:'
    MethodKind: Class
    Availability: nonswift
  - Selector: 'isSubclassOfClass:'
    MethodKind: Class
    Nullability:
    - N
    NullabilityOfRet: S
  - Selector: 'methodSignatureForSelector:'
    MethodKind: Instance
    Availability: nonswift
  - Selector: mutableCopy
    MethodKind: Instance
    NullabilityOfRet: N
  - Selector: new
    MethodKind: Class
    NullabilityOfRet: N
  - Selector: superclass
    MethodKind: Class
    NullabilityOfRet: O
- Name: Object
  Methods:
  - Selector: init
    MethodKind: Instance
    NullabilityOfRet: N
  - Selector: 'isEqual:'
    MethodKind: Instance
    Nullability:
    - O
    NullabilityOfRet: S
Protocols:
- Name: NSObject
  SwiftName: NSObjectProtocol
  Methods:
  - Selector: class
    MethodKind: Instance
    Availability: nonswift
    AvailabilityMsg: use 'type(of:)' instead
  - Selector: 'conformsToProtocol:'
    MethodKind: Instance
    Nullability:
    - N
    NullabilityOfRet: S
  - Selector: 'isEqual:'
    MethodKind: Instance
    Nullability:
    - O
    NullabilityOfRet: S
  - Selector: 'isKindOfClass:'
    MethodKind: Instance
    Nullability:
    - N
    NullabilityOfRet: S
  - Selector: 'isMemberOfClass:'
    MethodKind: Instance
    Nullability:
    - N
    NullabilityOfRet: S
  - Selector: self
    MethodKind: Instance
    NullabilityOfRet: N
  Properties:
  - Name: debugDescription
    Nullability: N
  - Name: description
    Nullability: N
  - Name: superclass
    Nullability: O
Tags:
- Name: _NSZone
  SwiftName: _NSZone


# Runtime functions did not yet have nullability in Swift 3.

SwiftVersions:
- Version: 3
  Functions:
  # objc.h swift3
  - Name: object_getClassName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: sel_isMapped
    Nullability: [U]
  - Name: sel_getUid
    NullabilityOfRet: U
    Nullability: [U]

  # objc-exception.h swift3
  - Name: objc_exception_throw
    Nullability: [U]
  - Name: objc_begin_catch
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_setExceptionPreprocessor
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_setExceptionMatcher
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_setUncaughtExceptionHandler
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_addExceptionHandler
    Nullability: [U, U]

  # objc-sync.h swift3
  - Name: objc_sync_enter
    Nullability: [U]
  - Name: objc_sync_exit
    Nullability: [U]

  # runtime.h swift3
  - Name: object_getClass
    NullabilityOfRet: U
    Nullability: [U]
  - Name: object_setClass
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: object_isClass
    Nullability: [U]
  - Name: object_getIvar
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: object_setIvar
    Nullability: [U, U, U]
  - Name: object_setIvarWithStrongDefault
    Nullability: [U, U, U]
  - Name: objc_getClass
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_getMetaClass
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_lookUpClass
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_getRequiredClass
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_getClassList
    Parameters:
    - Position: 0
      Type: "Class _Nullable * _Null_unspecified"
  - Name: objc_copyClassList
    ResultType: "Class _Nullable * _Null_unspecified"
    Nullability: [U]
  - Name: class_getName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: class_isMetaClass
    Nullability: [U]
  - Name: class_getSuperclass
    NullabilityOfRet: U
    Nullability: [U]
  - Name: class_getVersion
    Nullability: [U]
  - Name: class_setVersion
    Nullability: [U]
  - Name: class_getInstanceSize
    Nullability: [U]
  - Name: class_getInstanceVariable
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_getClassVariable
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_copyIvarList
    ResultType: "Ivar _Nullable * _Null_unspecified"
    Nullability: [U, U]
  - Name: class_getInstanceMethod
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_getClassMethod
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_getMethodImplementation
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_getMethodImplementation_stret
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_respondsToSelector
    Nullability: [U, U]
  - Name: class_copyMethodList
    Nullability: [U, U]
    ResultType: "Method _Nullable * _Null_unspecified"
  - Name: class_conformsToProtocol
    Nullability: [U, U]
  - Name: class_copyProtocolList
# fixme ResultType:
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_getProperty
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: class_copyPropertyList
    ResultType: "objc_property_t _Nullable * _Null_unspecified"
    Nullability: [U, U]
  - Name: class_getIvarLayout
    NullabilityOfRet: U
    Nullability: [U]
  - Name: class_getWeakIvarLayout
    NullabilityOfRet: U
    Nullability: [U]
  - Name: class_addMethod
    Nullability: [U, U, U, U]
  - Name: class_replaceMethod
    NullabilityOfRet: U
    Nullability: [U, U, U, U]
  - Name: class_addIvar
    Nullability: [U, U, U, U, U]
  - Name: class_addProtocol
    Nullability: [U, U]
  - Name: class_addProperty
    Nullability: [U, U, U, U]
  - Name: class_replaceProperty
    Nullability: [U, U, U, U]
  - Name: class_setIvarLayout
    Nullability: [U, U]
  - Name: class_setWeakIvarLayout
    Nullability: [U, U]
  - Name: class_createInstance
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: objc_allocateClassPair
    NullabilityOfRet: U
    Nullability: [U, U, U]
  - Name: objc_registerClassPair
    Nullability: [U]
  - Name: objc_duplicateClass
    NullabilityOfRet: U
    Nullability: [U, U, U]
  - Name: objc_disposeClassPair
    Nullability: [U]
  - Name: method_getName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: method_getImplementation
    NullabilityOfRet: U
    Nullability: [U]
  - Name: method_getTypeEncoding
    NullabilityOfRet: U
    Nullability: [U]
  - Name: method_getNumberOfArguments
    Nullability: [U]
  - Name: method_copyReturnType
    NullabilityOfRet: U
    Nullability: [U]
  - Name: method_copyArgumentType
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: method_getReturnType
    Nullability: [U, U, U]
  - Name: method_getArgumentType
    Nullability: [U, U, U, U]
  - Name: method_getDescription
    NullabilityOfRet: U
    Nullability: [U]
  - Name: method_setImplementation
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: method_exchangeImplementations
    Nullability: [U, U]
  - Name: ivar_getName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: ivar_getTypeEncoding
    NullabilityOfRet: U
    Nullability: [U]
  - Name: ivar_getOffset
    Nullability: [U]
  - Name: property_getName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: property_getAttributes
    NullabilityOfRet: U
    Nullability: [U]
  - Name: property_copyAttributeList
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: property_copyAttributeValue
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: objc_getProtocol
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_copyProtocolList
# fixme ResultType:
    NullabilityOfRet: U
    Nullability: [U]
  - Name: protocol_conformsToProtocol
    Nullability: [U, U]
  - Name: protocol_isEqual
    Nullability: [U, U]
  - Name: protocol_getName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: protocol_getMethodDescription
    Nullability: [U, U, U, U]
  - Name: protocol_copyMethodDescriptionList
    NullabilityOfRet: U
    Nullability: [U, U, U, U]
  - Name: protocol_getProperty
    NullabilityOfRet: U
    Nullability: [U, U, U, U]
  - Name: protocol_copyPropertyList
    ResultType: "objc_property_t _Nullable * _Null_unspecified"
    Nullability: [U, U]
  - Name: protocol_copyPropertyList2
    ResultType: "objc_property_t _Nullable * _Null_unspecified"
    Nullability: [U, U, U, U]
  - Name: protocol_copyProtocolList
# fixme ResultType:
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: objc_allocateProtocol
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_registerProtocol
    Nullability: [U]
  - Name: protocol_addMethodDescription
    Nullability: [U, U, U, U, U]
  - Name: protocol_addProtocol
    Nullability: [U, U]
  - Name: protocol_addProperty
    Nullability: [U, U, U, U, U, U]
  - Name: objc_copyImageNames
    ResultType: "const char * _Nullable * _Null_unspecified"
    Nullability: [U]
  - Name: class_getImageName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_copyClassNamesForImage
    ResultType: "const char * _Nullable * _Null_unspecified"
    Nullability: [U, U]
  - Name: sel_getName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: sel_registerName
    NullabilityOfRet: U
    Nullability: [U]
  - Name: sel_isEqual
    Nullability: [U, U]
  - Name: objc_enumerationMutation
    Nullability: [U]
  - Name: objc_setEnumerationMutationHandler
    Nullability: [U]
  - Name: objc_setForwardHandler
    Nullability: [U, U]
  - Name: imp_implementationWithBlock
    NullabilityOfRet: U
    Nullability: [U]
  - Name: imp_getBlock
    NullabilityOfRet: U
    Nullability: [U]
  - Name: imp_removeBlock
    Nullability: [U]
  - Name: objc_loadWeak
    NullabilityOfRet: U
    Nullability: [U]
  - Name: objc_storeWeak
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: objc_setAssociatedObject
    Nullability: [U, U, U, U]
  - Name: objc_getAssociatedObject
    NullabilityOfRet: U
    Nullability: [U, U]
  - Name: objc_removeAssociatedObjects
    Nullability: [U]
