swift
3f1d6419 - LookupVisibleDecls: Fix duplicate completion results when inheritance is used with protocol conformance

Commit
6 years ago
LookupVisibleDecls: Fix duplicate completion results when inheritance is used with protocol conformance Consider this setup: protocol Proto { func foo() {} } class Base : Proto { func foo() {} } class Derived : Base { ... } When completing members of a Derived instance, we find both the protocol's foo() and the base class's foo(). These have the following types: - Proto.foo: <Self : Proto> (Self) -> () -> () - Base.foo: (Base) -> () -> () If we simply substitute the base type (Derived) into the type of the protocol member, we get (Derived) -> () -> (), which is different than the type of Base.foo, so we get both declarations in the completion list. Instead, use the 'Self' type for the specific class of the conformance, which in this case is 'Base' even if we're looking at members of 'Derived'. Fixes <rdar://problem/21161476>, <https://bugs.swift.org/browse/SR-1181>.
Author
Committer
Parents
Loading