RFR: 8267421: j.l.constant.DirectMethodHandleDesc.Kind.valueOf(int) implementation doesn't conform to the spec regarding REF_invokeInterface handling

Mandy Chung mchung at openjdk.java.net
Wed Jun 9 17:25:15 UTC 2021


On Tue, 8 Jun 2021 16:46:36 GMT, Vicente Romero <vromero at openjdk.org> wrote:

> Please review this PR which is just syncing the implementation of DirectMethodHandleDesc.Kind.valueOf(int) with its spec. My reading of the method's spec is that if the value of the `refKind` parameter is: MethodHandleInfo.REF_invokeInterface, then DirectMethodHandleDesc.Kind.valueOf(int, boolean) should be called with a value of `true` for its second argument, currently it is invoked with `false` regardless of the value of the `refKind` parameter
> 
> TIA

test/jdk/java/lang/constant/MethodHandleDescTest.java line 362:

> 360:     public void testKind() {
> 361:         for (Kind k : Kind.values()) {
> 362:             assertEquals(Kind.valueOf(k.refKind), Kind.valueOf(k.refKind, k.refKind == MethodHandleInfo.REF_invokeInterface));

Looks like the test does not verify the cases specified by `valueOf(int refKind, boolean isInterface)`.  
i.e. For most values of refKind, there is an exact match regardless of the value of isInterface except `REF_invokeStatic` and `REF_invokeSpecial`.

Do you mind adding those cases?

-------------

PR: https://git.openjdk.java.net/jdk/pull/4416


More information about the core-libs-dev mailing list