// UNSUPPORTED: CPU=i386 && OS=ios
// UNSUPPORTED: CPU=armv7 && OS=ios
// UNSUPPORTED: CPU=armv7s && OS=ios
// UNSUPPORTED: CPU=armv7k && OS=ios
// Exclude iOS-based 32-bit platforms because the Foundation overlays introduce
// an extra dependency on _KeyValueCodingAndObservingPublishing only for 64-bit
// platforms.
// REQUIRES: objc_interop

// RUN: %empty-directory(%t)
// RUN: %{python} %S/../gen-output-file-map.py -o %t %S
// RUN: cd %t && %target-swiftc_driver -typecheck -output-file-map %t/output.json -incremental -module-name main -verify-incremental-dependencies %s

import Foundation

// expected-provides {{LookupFactory}}
// expected-provides {{NSObject}}
// expected-superclass {{ObjectiveC.NSObject}}
// expected-conformance {{ObjectiveC.NSObjectProtocol}}
// expected-conformance {{Foundation._KeyValueCodingAndObserving}}
// expected-conformance {{Foundation._KeyValueCodingAndObservingPublishing}}
// expected-conformance {{Swift.Hashable}}
// expected-conformance {{Swift.Equatable}}
// expected-conformance {{Swift.CustomDebugStringConvertible}}
// expected-conformance {{Swift.CVarArg}}
// expected-conformance {{Swift.CustomStringConvertible}}
// expected-member {{Swift._ExpressibleByBuiltinIntegerLiteral.init}}
@objc private class LookupFactory: NSObject {
  // expected-provides {{AssignmentPrecedence}}
  // expected-provides {{IntegerLiteralType}}
  // expected-provides {{FloatLiteralType}}
  // expected-provides {{Int}}
  // expected-member {{ObjectiveC.NSObject.someMember}}
  // expected-member {{ObjectiveC.NSObject.Int}}
  // expected-member {{ObjectiveC.NSObjectProtocol.someMember}}
  // expected-member {{ObjectiveC.NSObjectProtocol.Int}}
  // expected-member {{main.LookupFactory.Int}}
  @objc var someMember: Int = 0
  // expected-member {{ObjectiveC.NSObject.someMethod}}
  // expected-member {{ObjectiveC.NSObjectProtocol.someMethod}}
  @objc func someMethod() {}

  // expected-member {{ObjectiveC.NSObject.init}}
  // expected-member {{ObjectiveC.NSObjectProtocol.init}}
  // expected-member {{main.LookupFactory.init}}
  // expected-member {{main.LookupFactory.deinit}}
  // expected-member {{main.LookupFactory.someMember}}
  // expected-member {{main.LookupFactory.someMethod}}
}

// expected-member {{Swift.ExpressibleByNilLiteral.callAsFunction}}
// expected-member {{Swift.CustomReflectable.callAsFunction}}
// expected-member {{Swift._ObjectiveCBridgeable.callAsFunction}}
// expected-member {{Swift.Optional<Wrapped>.callAsFunction}}
// expected-member {{Swift.CustomDebugStringConvertible.callAsFunction}}
// expected-member {{Swift.Equatable.callAsFunction}}
// expected-member {{Swift.Hashable.callAsFunction}}
// expected-member {{Swift.Encodable.callAsFunction}}
// expected-member {{Swift.Decodable.callAsFunction}}
// expected-member {{Foundation._OptionalForKVO.callAsFunction}}
// SWIFT_ENABLE_TENSORFLOW
// expected-member {{Swift.Differentiable.callAsFunction}}
// SWIFT_ENABLE_TENSORFLOW END

// expected-provides {{AnyObject}}
func lookupOnAnyObject(object: AnyObject) { // expected-provides {{lookupOnAnyObject}}
  _ = object.someMember // expected-dynamic-member {{someMember}}
  object.someMethod() // expected-dynamic-member {{someMethod}}
}

// expected-member {{Swift.Hashable.someMethod}}
// expected-member {{Foundation._KeyValueCodingAndObserving.someMethod}}
// expected-member {{Foundation._KeyValueCodingAndObservingPublishing.someMethod}}
// expected-member {{Swift.Equatable.someMethod}}
// expected-member {{Swift.CVarArg.someMethod}}
// expected-member {{Swift.CustomStringConvertible.someMethod}}
// expected-member {{Swift.CustomDebugStringConvertible.someMethod}}
// expected-member {{Swift.Equatable.someMember}}
// expected-member{{Swift.CustomDebugStringConvertible.init}}
// expected-member{{Swift.CVarArg.someMember}}
// expected-member{{Foundation._KeyValueCodingAndObservingPublishing.someMember}}
// expected-member{{Swift.Equatable.init}}
// expected-member{{Swift.Hashable.init}}
// expected-member{{Swift.CVarArg.init}}
// expected-member{{Foundation._KeyValueCodingAndObserving.someMember}}
// expected-member{{Foundation._KeyValueCodingAndObservingPublishing.init}}
// expected-member{{Swift.CustomDebugStringConvertible.someMember}}
// expected-member{{Swift.CustomStringConvertible.someMember}}
// expected-member{{Swift.CustomStringConvertible.init}}
// expected-member{{Swift.Hashable.someMember}}
// expected-member{{Foundation._KeyValueCodingAndObserving.init}}
