diff --git a/jcl/src/java.base/share/classes/java/lang/invoke/VarHandle.java b/jcl/src/java.base/share/classes/java/lang/invoke/VarHandle.java index 0e625782601..2189f1694bc 100644 --- a/jcl/src/java.base/share/classes/java/lang/invoke/VarHandle.java +++ b/jcl/src/java.base/share/classes/java/lang/invoke/VarHandle.java @@ -413,12 +413,19 @@ MethodType accessModeType(Class receiver, Class type, Class... args) { } this.fieldType = setter.parameterType(setter.parameterCount() - 1); - this.coordinateTypes = getter.parameterArray(); + + /* The first VarHandle parameter type should be removed from the getter in order to derive + * the coordinate types. + */ + Class[] getterParams = getter.parameterArray(); + this.coordinateTypes = Arrays.copyOfRange(getterParams, 1, getterParams.length); + if (operationMTsExact != null) { this.handleTable = populateMHsJEP370(operationsClass, operationMTs, operationMTsExact); } else { this.handleTable = populateMHsJEP370(operationsClass, operationMTs, operationMTs); } + this.modifiers = 0; this.varFormUsed = true; }