title: Why do raw types in one place cause generic callsites somewhere else to be treated as raw?
body: <p>Consider this example:</p>
  
  <pre><code>import java.util.*;
  
  class Foo&lt;T&gt; {
    public int baz(List&lt;String&gt; stringlist) { return 1; }
    public int baz(ArrayList&lt;Object&gt; objectlist) { return 2; }
  
    public static void main(String[] args) {
      Foo&lt;String&gt; foo = new Foo&lt;String&gt;(); // (A)
      //Foo foo = new Foo();               // (B)
  
      System.out.println(foo.baz(new ArrayList&lt;String&gt;()));
    }
  }
  </code></pre>
  
  <p>Why does it print <code>1</code> in <code>(A)</code>, but <code>2</code> with <code>(B)</code>?</p>
  
  <p>I know how method resolution works, so no need to explain that to me.</p>
  
  <p>I want to know the deeper motivation behind this "feature".
  Why is there no erasure warning about it? (There is just one about <code>Foo foo = new Foo()</code>.)</p>
  
  <p>Why does method resolution use erased semantics although the generic type is given?</p>