title: Eclipse/javac disagree on compiling signature with default method collision; who is right?
body: <p>Here's a simple class that demonstrates the issue:</p>
  
  <pre><code>package com.mimvista.debug;
  
  public class DefaultCollisionTest {
      public static interface Interface1 {
          public String getName();
      }
  
      public static interface Interface2 {
          public default String getName() { return "Mr. 2"; };
      }
  
      public static &lt;X extends Interface1&amp;Interface2&gt; String extractName(X target) {
          return target.getName();
      }
  }
  </code></pre>
  
  <p>Eclipse (Neon 2) happily compiles this class while javac (JDK 1.8.0_121) spits out the following compile error:</p>
  
  <pre><code>$ javac src/com/mimvista/debug/DefaultCollisionTest.java
  src\com\mimvista\debug\DefaultCollisionTest.java:13: error: class INT#1 inherits abstract and default for getName() from types Interface2 and Interface1
          public static &lt;X extends Interface1&amp;Interface2&gt; String extractName(X target) {
                         ^
    where INT#1 is an intersection type:
      INT#1 extends Object,Interface1,Interface2
  1 error
  </code></pre>
  
  <p>I believe that Eclipse is correct in this case but I'm not totally sure. Based on my understanding of the "inherits abstract and default" error, I think it should only be generated when compiling an actual declared class that implements those two interfaces. It seems like javac may be generating an intermediate class under-the-hood to deal with that generic signature and erroneously subjecting it to the default method collision test?</p>