| protocol Target1 {} |
| protocol Target2 {} |
| protocol Target3 {} |
| |
| struct ConcreteTarget1 : Target1 {} |
| struct ConcreteTarget2 : Target2 {} |
| struct ConcreteTarget3 : Target3 {} |
| |
| protocol P { |
| associatedtype Assoc |
| func protocolMethod(asc: Assoc) -> Self |
| } |
| extension P { |
| func protocolMethod(asc: Assoc) -> Self { return self } |
| } |
| |
| class C : P { |
| typealias Assoc = String |
| static func staticMethod() -> Self {} |
| func instanceMethod(x: Int) -> C {} |
| func methodForTarget1() -> ConcreteTarget1 {} |
| func methodForTarget2() -> ConcreteTarget2 {} |
| } |
| |
| func testing(obj: C) { |
| let _ = obj. |
| } |
| |
| // RUN: %sourcekitd-test -req=conformingmethods -pos=26:14 %s -req-opts=expectedtypes='$s8MyModule7Target2PD;$s8MyModule7Target1PD' -- -module-name MyModule %s > %t.response |
| // RUN: diff -u %s.response %t.response |