Files
swift-mirror/test/IDE/conforming-methods-basic.swift
Rintaro Ishizaki 1d845d6e3f [IDE/SourceKit] New SourceKit request for filtered method list
`source.request.conformingmethods` is a new SourceKit request which
receives a source position and a list of protocol namses, returns a list
of methods whose return type conforms to the requested protocols.

rdar://problem/44699573
2019-02-08 12:56:58 -08:00

50 lines
2.3 KiB
Swift

// RUN: %target-swift-ide-test -conforming-methods -source-filename %s -code-completion-token=TEST_1 -module-name MyModule -conforming-methods-expected-types '$s8MyModule7Target1PD' -conforming-methods-expected-types '$s8MyModule7Target2PD' | %FileCheck %s -check-prefix=CHECK_1
// RUN: %target-swift-ide-test -conforming-methods -source-filename %s -code-completion-token=TEST_2 -module-name MyModule -conforming-methods-expected-types '$s8MyModule7Target1PD' -conforming-methods-expected-types '$s8MyModule7Target2PD' | %FileCheck %s -check-prefix=CHECK_1
// RUN: %target-swift-ide-test -conforming-methods -source-filename %s -code-completion-token=TEST_3 -module-name MyModule -conforming-methods-expected-types '$s8MyModule7Target1PD' -conforming-methods-expected-types '$s8MyModule7Target2PD' | %FileCheck %s -check-prefix=CHECK_1
// RUN: %target-swift-ide-test -conforming-methods -source-filename %s -code-completion-token=TEST_4 -module-name MyModule -conforming-methods-expected-types '$s8MyModule7Target1PD' -conforming-methods-expected-types '$s8MyModule7Target2PD' | %FileCheck %s -check-prefix=CHECK_1
protocol Target1 {
associatedType Assoc
}
protocol Target2 {}
protocol Target3 {}
struct ConcreteTarget1 : Target1 {}
struct ConcreteTarget2 : Target2 {}
struct ConcreteTarget3 : Target3 {}
struct C {
func returnsConcreteTarget1() -> ConcreteTarget1 { fatalError() }
func returnsExistentialTarget1() -> Target1 { fatalError() }
}
protocol P {
func returnsConcreteTarget2() -> ConcreteTarget2
func returnsConcreteTarget3() -> ConcreteTarget3
}
extension P {
func returnSelf() -> Self { return self }
func returnsConcreteTarget2() -> ConcreteTarget2 { fatalError() }
func returnsConcreteTarget3() -> ConcreteTarget3 { fatalError() }
}
extension C : P {}
func testing(obj: C) {
let _ = obj #^TEST_1^#
let _ = obj .#^TEST_2^#
let _ = obj.returnSelf()#^TEST_3^#
let _ = obj.returnSelf().#^TEST_4^#
}
// CHECK_1: -----BEGIN CONFORMING METHOD LIST-----
// CHECK_1_NEXT: - TypeName: C
// CHECK_1_NEXT: - Members:
// CHECK_1_NEXT: - Name: returnsConcreteTarget1()
// CHECK_1_NEXT: TypeName: ConcreteTarget1
// CHECK_1_NEXT: - Name: returnsConcreteTarget1()
// CHECK_1_NEXT: TypeName: ConcreteTarget1
// CHECK_1_NEXT: -----END CONFORMING METHOD LIST-----