@objc public protocol ObjCProto {
  func doSomething()
}

@objc public class ObjCClass {
  public dynamic class func classMethod() {}
  public dynamic func implicitlyObjC() {}

  @IBOutlet public var outlet : ObjCClass! = ObjCClass()
  @IBAction public func performAction(_: AnyObject?) {}
}

public class NonObjCClass : ObjCProto {
  public dynamic func doSomething() {}

  dynamic public func objcMethod() {}
  dynamic public var objcProp : ObjCClass = ObjCClass()

  dynamic public subscript (i : Int) -> Int {
    return 5
  }

  @IBOutlet public var outlet : ObjCClass! = ObjCClass()
  @IBAction public func performAction(_: AnyObject?) {}
}
