<div dir="ltr">Putting a method handle for getKey into the constant pool got me<div><br></div><div><font face="monospace">   #9 = NameAndType        #7:#8          // getKey:(Ljava/util/Map$Entry;)Ljava/lang/Object;<br>  #10 = Methodref          #6.#9          // java/util/Map$Entry.getKey:(Ljava/util/Map$Entry;)Ljava/lang/Object;<br>  #11 = MethodHandle       9:#10          // REF_invokeInterface java/util/Map$Entry.getKey:(Ljava/util/Map$Entry;)Ljava/lang/Object;<br></font></div><div><br></div><div>instead of the expected</div><div><br></div><div><font face="monospace">  #33 = NameAndType        #7:#32         // getKey:()Ljava/lang/Object;<br>  #34 = InterfaceMethodref #6.#33         // java/util/Map$Entry.getKey:()Ljava/lang/Object;</font><br></div><div><br></div><div>That is, both tag and lookup type are off target.</div><div><br></div><div>The attached patch allows me to continue for now.  The </div><div>MTD -> String -> MTD conversion is a bit heavy handed.</div><div><br></div><div>-- mva</div><div><br></div><div><br></div><div><br></div><div>diff --git a/src/java.base/share/classes/jdk/classfile/constantpool/ConstantPoolBuilder.java b/src/java.base/share/classes/jdk/classfile/constantpool/ConstantPoolBuilder.java<br>index 1363f1e8c83..7c3395d0c55 100755<br>--- a/src/java.base/share/classes/jdk/classfile/constantpool/ConstantPoolBuilder.java<br>+++ b/src/java.base/share/classes/jdk/classfile/constantpool/ConstantPoolBuilder.java<br>@@ -346,7 +346,11 @@ public sealed interface ConstantPoolBuilder<br>      * @param descriptor the symbolic descriptor of the method handle<br>      */<br>     default MethodHandleEntry methodHandleEntry(DirectMethodHandleDesc descriptor) {<br>-        return methodHandleEntry(descriptor.refKind(), methodRefEntry(descriptor.owner(), descriptor.methodName(), descriptor.invocationType()));<br>+        var lookupType = MethodTypeDesc.ofDescriptor(descriptor.lookupDescriptor());<br>+        return methodHandleEntry(descriptor.refKind(),<br>+                                 descriptor.isOwnerInterface() ?<br>+                                 interfaceMethodRefEntry(descriptor.owner(), descriptor.methodName(), lookupType) :<br>+                                 methodRefEntry(descriptor.owner(), descriptor.methodName(), lookupType));<br>     }<br> <br>     /**<br></div><div><br></div></div>