title: invokestatic on static method in interface
body: <p>Disassembling some Java 8 code I found out that some <code>invokestatic</code> calls on static methods in interface (particularly this was <code>java.util.function.Function.identity()</code>) uses InterfaceMethodRef in const pool; this is what <code>javap -s -c -v p</code> show me:</p>
  
  <pre><code>    15: invokestatic  #66  // InterfaceMethod java/util/function/Function.identity:()Ljava/util/function/Function;
  </code></pre>
  
  <p>According to <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10.1.9.invokestatic" rel="noreferrer">JVM 8 spec</a> this is not possible, and when I've used this instruction in classfile with version Java 7 (<code>major version=51</code>), it has thrown VerifyError on this instruction.</p>
  
  <p>However, when I've changed the major version to <code>52</code>, it started working like a charm. Note that I am running on Oracle JDK 1.8.0_60. I wonder why this change was needed (the invoked method is linked statically, isn't it?) and whether this is documented anywhere.</p>