| protocol Proto {} |
| struct ConcreteProto : Proto {} |
| struct ConcreteProtoGen<T> : Proto {} |
| |
| struct S<T> : Proto { |
| func methodForProto1(x: T) -> ConcreteProto {} |
| func methodForProto2<U>(x: U) -> ConcreteProtoGen<U> {} |
| func methodForProto3(x: Self) -> ConcreteProtoGen<T> {} |
| func methodForProto4() -> Self {} |
| func methodForInt() -> Int { return 1 } |
| mutating func test() { |
| self. |
| } |
| } |
| |
| func test<X>(value: S<X>) { |
| value. |
| } |
| |
| // RUN: %sourcekitd-test -req=conformingmethods -pos=12:10 %s -req-opts=expectedtypes='$s8MyModule5ProtoPD' -- -module-name MyModule %s > %t.response.1 |
| // RUN: diff -u %s.response.1 %t.response.1 |
| // RUN: %sourcekitd-test -req=conformingmethods -pos=17:8 %s -req-opts=expectedtypes='$s8MyModule5ProtoPD' -- -module-name MyModule %s > %t.response.2 |
| // RUN: diff -u %s.response.2 %t.response.2 |