// Please keep this file in alphabetical order!

// REQUIRES: objc_interop

// RUN: %empty-directory(%t)

// FIXME: BEGIN -enable-source-import hackaround
// RUN:  %target-swift-frontend(mock-sdk: -sdk %S/../Inputs/clang-importer-sdk -I %t) -emit-module -o %t %S/../Inputs/clang-importer-sdk/swift-modules/ObjectiveC.swift
// RUN:  %target-swift-frontend(mock-sdk: -sdk %S/../Inputs/clang-importer-sdk -I %t) -emit-module -o %t  %S/../Inputs/clang-importer-sdk/swift-modules/CoreGraphics.swift
// RUN:  %target-swift-frontend(mock-sdk: -sdk %S/../Inputs/clang-importer-sdk -I %t) -emit-module -o %t  %S/../Inputs/clang-importer-sdk/swift-modules/Foundation.swift
// FIXME: END -enable-source-import hackaround

// RUN: %target-swift-frontend(mock-sdk: -sdk %S/../Inputs/clang-importer-sdk -I %t) -import-objc-header %S/Inputs/circularity.h -emit-module -o %t %s
// RUN: %target-swift-frontend(mock-sdk: -sdk %S/../Inputs/clang-importer-sdk -I %t) -import-objc-header %S/Inputs/circularity.h -parse-as-library %t/circularity.swiftmodule -typecheck -emit-objc-header-path %t/circularity.h

// RUN: %FileCheck %s < %t/circularity.h

// RUN: %check-in-clang %t/circularity.h
// RUN: %check-in-clang -fno-modules -Qunused-arguments %t/circularity.h

import Foundation

// CHECK-LABEL: @interface A1 : ProtoImpl
class A1: ProtoImpl {
  // CHECK: // 'test(_:)' below
  func test(_: NeedsProto<A2>) {}
} // CHECK: @end
// CHECK-LABEL: @interface A2 : ProtoImpl
class A2: ProtoImpl {
  // CHECK: - (void)test:
  func test(_: NeedsProto<A1>) {}
} // CHECK: @end

// CHECK-LABEL: @interface B1 : ProtoImpl
class B1: ProtoImpl {
  // CHECK: // 'test(_:)' below
  func test(_: NeedsProto<B2>) {}
} // CHECK: @end
// CHECK-LABEL: @interface B2 : ProtoImpl
class B2: ProtoImpl {
} // CHECK: @end

// CHECK-LABEL: @interface C1 : ProtoImpl
class C1: ProtoImpl {
  // CHECK: // 'test(_:)' below
  func test(_: NeedsProto<C2>) {}
} // CHECK: @end
// CHECK-LABEL: @protocol C2 <Proto>
@objc protocol C2: Proto {
} // CHECK: @end

// CHECK-LABEL: @interface D1 : ProtoImpl
class D1: ProtoImpl {
  // CHECK: // 'test(_:)' below
  func test(_: NeedsProto<D2>) {}
} // CHECK: @end
// CHECK-LABEL: @protocol D2 <Proto>
@objc protocol D2: Proto {
  // CHECK: - (void)test:
  func test(_: NeedsProto<D1>)
} // CHECK: @end

// CHECK-LABEL: @interface D4 : ProtoImpl
// CHECK: // 'test(_:)' below
// CHECK: @end
// CHECK-LABEL: @protocol D3 <Proto>
@objc protocol D3: Proto {
  // CHECK: - (void)test:
  func test(_: NeedsProto<D4>)
} // CHECK: @end
// Moved ahead.
class D4: ProtoImpl {
  func test(_: NeedsProto<D3>) {}
}

// CHECK-LABEL: @interface E2 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol E1 <Proto>
@objc protocol E1: Proto {
  // CHECK: - (void)test:
  func test(_: NeedsProto<E2>)
} // CHECK: @end
// Moved ahead.
class E2: ProtoImpl {}

// CHECK-LABEL: @interface F1 : ProtoImpl
class F1: ProtoImpl {
} // CHECK: @end
// CHECK-LABEL @interface F2 : ProtoImpl
// CHECK: @end
// CHECK-LABEL @interface F1 (SWIFT_EXTENSION(circularity))
extension F1 {
  // CHECK: - (void)test:
  func test(_: NeedsProto<F2>) {}
} // CHECK: @end
// Moved ahead.
class F2: ProtoImpl {}

// CHECK-LABEL: @interface G1 : ProtoImpl
class G1: ProtoImpl {
} // CHECK: @end
// CHECK-LABEL @protocol G2 <Proto>
// CHECK: @end
// CHECK-LABEL @interface G1 (SWIFT_EXTENSION(circularity))
extension G1 {
  // CHECK: - (void)test:
  func test(_: NeedsProto<G2>) {}
} // CHECK: @end
// Moved ahead.
@objc protocol G2: Proto {}

// CHECK-LABEL: @interface H1 : ProtoImpl
class H1: ProtoImpl {
  // CHECK: 'test(_:)' below
  func test(_: NeedsProto<H2>) {}
  // CHECK: 'anotherTest(_:)' below
  func anotherTest(_: NeedsProto<H3>) {}
} // CHECK: @end
// CHECK-LABEL: @interface H2 : ProtoImpl
class H2: ProtoImpl {
  // CHECK: // 'test(_:)' below
  func test(_: NeedsProto<H3>) {}
  // CHECK: - (void)anotherTest:
  func anotherTest(_: NeedsProto<H1>) {}
} // CHECK: @end
// CHECK-LABEL: @interface H3 : ProtoImpl
class H3: ProtoImpl {
  // CHECK: - (void)test:
  func test(_: NeedsProto<H1>) {}
  // CHECK: - (void)anotherTest:
  func anotherTest(_: NeedsProto<H2>) {}
} // CHECK: @end

// CHECK-LABEL: @interface I1 : Parent
class I1 : Parent {
  // CHECK: // 'test(_:)' below
  func test(_: NeedsParent<I2>) {}
} // CHECK: @end
// CHECK-LABEL: @interface I2 : Parent
class I2 : Parent {
  // CHECK: - (void)test:
  func test(_: NeedsParent<I1>) {}
} // CHECK: @end

// CHECK-LABEL: @interface J1 : Parent
class J1 : Parent {
  // CHECK: - (void)test:
  func test(_: Unconstrained<J2>) {}
} // CHECK: @end
// CHECK-LABEL: @interface J2 : Parent
class J2 : Parent {
  // CHECK: - (void)test:
  func test(_: Unconstrained<J1>) {}
} // CHECK: @end

// CHECK-LABEL: @protocol K1 <Proto>
@objc protocol K1 : Proto {
  // CHECK: - (void)test:
  func test(_: Unconstrained<K2>)
} // CHECK: @end
// CHECK-LABEL: @protocol K2 <Proto>
@objc protocol K2 : Proto {
  // CHECK: - (void)test:
  func test(_: Unconstrained<K1>)
} // CHECK: @end


// CHECK-LABEL: @interface NA2 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol NA1
// CHECK: - (void)test:
// CHECK: @end
// CHECK-LABEL: @interface NA3 : NSObject <NA1>
// CHECK: @end
@objc protocol NA1 {
  @objc optional func test(_: NeedsProto<NA2>)
}
class NA2: ProtoImpl {}
class NA3: NSObject, NA1 {}

// CHECK-LABEL: @interface NB1 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol NB2
// CHECK: - (void)test:
// CHECK: @end
// CHECK-LABEL: @interface NB3 : NSObject <NB2>
// CHECK: @end
class NB1: ProtoImpl {}
@objc protocol NB2 {
  @objc optional func test(_: NeedsProto<NB1>)
}
class NB3: NSObject, NB2 {}

// CHECK-LABEL: @interface NC2 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol NC3
// CHECK: - (void)test:
// CHECK: @end
// CHECK-LABEL: @interface NC1 : NSObject <NC3>
// CHECK: @end
class NC1: NSObject, NC3 {}
class NC2: ProtoImpl {}
@objc protocol NC3 {
  @objc optional func test(_: NeedsProto<NC2>)
}

// CHECK-LABEL: @interface ND3 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol ND2
// CHECK: - (void)test:
// CHECK: @end
// CHECK-LABEL: @interface ND1 : NSObject <ND2>
// CHECK: @end
class ND1: NSObject, ND2 {}
@objc protocol ND2 {
  @objc optional func test(_: NeedsProto<ND3>)
}
class ND3: ProtoImpl {}

// CHECK-LABEL: @interface NE3 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol NE1
// CHECK: - (void)test:
// CHECK: @end
// CHECK-LABEL: @interface NE2 : NSObject <NE1>
// CHECK: @end
@objc protocol NE1 {
  @objc optional func test(_: NeedsProto<NE3>)
}
class NE2: NSObject, NE1 {}
class NE3: ProtoImpl {}

// CHECK-LABEL: @interface NF2 : ProtoImpl
// CHECK: @end
// CHECK-LABEL: @protocol NF1
// CHECK: - (void)test:
// CHECK: @end
// CHECK-LABEL: @interface NF3 : NSObject <NF1>
// CHECK: @end
@objc protocol NF1 {
  @objc optional func test(_: NeedsProto<NF2>)
}
class NF2: ProtoImpl {}
class NF3: NSObject, NF1 {}

// CHECK-LABEL: @interface ZZZ_EOF : NSObject
class ZZZ_EOF : NSObject {
} // CHECK: @end

// CHECK-LABEL: @interface A1 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

// CHECK-LABEL: @interface B1 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

// CHECK-LABEL: @interface C1 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

// CHECK-LABEL: @interface D1 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

// CHECK-LABEL: @interface D4 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

// CHECK-LABEL: @interface H1 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK-NOT: @end
// CHECK: - (void)anotherTest:
// CHECK: @end

// CHECK-LABEL: @interface H2 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

// CHECK-LABEL: @interface I1 (SWIFT_EXTENSION(circularity))
// CHECK: - (void)test:
// CHECK: @end

