title: Circular warnings about Swift static override being final
body: <p>I have an <code>NSDocumentController</code> subclass that needs to know if it has restored any windows via the <code>NSWindowRestoration</code> protocol.</p>
  
  <p>The particular function I'm overriding, <a href="https://developer.apple.com/documentation/appkit/nswindowrestoration/1526251-restorewindow" rel="nofollow noreferrer">documented here</a>, to do this is:</p>
  
  <pre><code>override open static func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -&gt; Void)
  </code></pre>
  
  <p>As written, this function is called exactly when I'd like and works perfectly. However, I get the following warning:</p>
  
  <pre><code>Static declarations are implicitly 'final'; use 'public' instead of 'open'
  </code></pre>
  
  <p>This warning includes a seemingly helpful fixit, to transform that <code>open</code> into <code>public</code>. But, when I accept, I then get this error:</p>
  
  <pre><code>Overriding static method must be as accessible as the declaration it overrides
  </code></pre>
  
  <p>This error suggests I replace <code>public</code> with <code>open</code>.</p>
  
  <p>I've opened a radar with Apple about this circular behavior. But, I'd really like to find a way to quiet this warning. Alternatively, perhaps there's another way for an NSDocumentController subclass to be informed that it has restored windows.</p>
  
  <p>To reproduce this error, create a new App project with Xcode 10, and include the following code. I just threw it in after the <code>AppDelegate</code> declaration. By default, the project is configured with Swift 4.2 and builds for macOS 10.14.</p>
  
  <pre><code>class MyDocumentController: NSDocumentController {
      override open static func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -&gt; Void) {
          super.restoreWindow(withIdentifier: identifier, state: state, completionHandler: completionHandler)
      }
  }
  </code></pre>