title: Emitting a warning for a deprecated Swift protocol method in implementing types
body: <p>Suppose I have a protocol with a <code>bar()</code> method that has a default implementation — essentially the Swift way of making a protocol requirement optional for implementing types:</p>
  
  <pre><code>protocol Foo {
      func bar()
  }
  
  extension Foo {
      func bar() {
          print("default bar() implementaion")
      }
  }
  </code></pre>
  
  <p>Now suppose that I decide to rename that method <code>barrrr()</code>, because more <code>r</code>s are better:</p>
  
  <pre><code>protocol Foo {
      func barrrr()
  }
  
  extension Foo {
      func barrrr() {
          print("default barrrr() implementaion")
      }
  }
  </code></pre>
  
  <p>Existing code may still implement the method with the old name:</p>
  
  <pre><code>class Thinger: Foo {
      func bar() {
          print("custom bar() implementaion")
      }
  }
  </code></pre>
  
  <p>This code thinks it’s customizing a <code>Foo</code> method, but it isn’t. Callers will look for <code>barrrr()</code>, and get the default implementation. Nobody calls <code>bar()</code>.</p>
  
  <p>I would therefore like to generate a warning for types that implement <code>Foo</code> and have a <code>bar()</code> method. This does not work:</p>
  
  <pre><code>protocol Foo {
      func barrrr()
  
      @available(*, deprecated: 0.99, renamed: "barrrr()")
      func bar()
  }
  
  extension Foo {
      func barrrr() {
          print("default barrrr() implementaion")
      }
  
      func bar() {
          fatalError("renamed barrrr()")
      }
  }
  
  class Thinger: Foo {
      func bar() {   // No warning here!
          print("custom bar() implementaion")
      }
  }
  </code></pre>
  
  <p>Making the extension method <code>final</code> has no effect. Is there a way to do it? It needn’t be a friendly warning; any compiler error would suffice.</p>