// RUN: %empty-directory(%t) // RUN: cp %s %t/main.swift // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -primary-file %t/main.swift -emit-reference-dependencies-path - > %t.swiftdeps // RUN: %FileCheck %s < %t.swiftdeps // RUN: %FileCheck -check-prefix=NEGATIVE %s < %t.swiftdeps // Check that the output is deterministic. // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -primary-file %t/main.swift -emit-reference-dependencies-path - > %t-2.swiftdeps // RUN: diff %t.swiftdeps %t-2.swiftdeps // REQUIRES: objc_interop import Foundation // CHECK-LABEL: provides-dynamic-lookup: @objc class Base : NSObject { // CHECK-DAG: - "foo" func foo() {} // CHECK-DAG: - "bar" func bar(_ x: Int, y: Int) {} // FIXME: We don't really need this twice, but de-duplicating is effort. // CHECK-DAG: - "bar" func bar(_ str: String) {} // CHECK-DAG: - "prop" var prop: String? // CHECK-DAG: - "unusedProp" var unusedProp: Int = 0 // CHECK-DAG: - "classFunc" class func classFunc() {} } func getAnyObject() -> AnyObject? { return nil } // CHECK-LABEL: depends-dynamic-lookup: func testDynamicLookup(_ obj: AnyObject) { // CHECK-DAG: - !private "foo" obj.foo() // CHECK-DAG: - !private "bar" obj.bar(1, y: 2) obj.bar("abc") // CHECK-DAG: - !private "classFunc" type(of: obj).classFunc() // CHECK-DAG: - !private "prop" _ = obj.prop // CHECK-DAG: - !private "description" _ = obj.description // CHECK-DAG: - !private "method" _ = obj.method(5, with: 5.0 as Double) // TODO: unable to resolve ambiguity // C/HECK-DAG: - !private "subscript" // _ = obj[2] as Any // _ = obj[2] as Any! } // CHECK-DAG: - "counter" let globalUse = getAnyObject()?.counter // NEGATIVE-LABEL: depends-dynamic-lookup: // NEGATIVE-NOT: "cat1Method" // NEGATIVE-NOT: "unusedProp"