title: How does ReSharper know this return type is never null?
body: <p>I'm using ReSharper 5.0, and am wondering how its code analysis function knows to higlight the following <code>assemblies == null</code> with the comment "Expression is always false".</p>
  
  <pre><code>var directory = new DirectoryInfo("somedir");
  FileInfo[] assemblies = directory.GetFiles("*.dll");
  
  if (assemblies == null &lt;&lt;--- this is highlighted with "Expression is always false"
      || assemblies.Length == 0)
  {
    _log.Warn("No assemblies found");
  }
  </code></pre>
  
  <p>I'd understand if the return type was a value-type, which it isn't. I'd also understand if there was some sort of code contract or metadata stating <code>.GetFiles()</code> will never return null. but I don't think there is.</p>
  
  <p>So - how does it know this? Am I missing something obvious, or does ReSharper have some privileged knowledge, such as an internal list of metadata about framework methods? Or does it actually "<em>introspect</em>" the internal code and work it out?</p>