--- old/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java 2014-03-24 22:06:03.000000000 +0400 +++ new/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java 2014-03-24 22:06:03.000000000 +0400 @@ -35,6 +35,7 @@ import static java.lang.invoke.LambdaForm.BasicType.*; import static java.lang.invoke.MethodHandleStatics.*; import static java.lang.invoke.MethodHandleNatives.Constants.*; +import java.lang.invoke.MethodHandleImpl.ArrayAccessor; import sun.invoke.util.ValueConversions; import sun.invoke.util.VerifyType; import sun.invoke.util.VerifyAccess; @@ -786,7 +787,13 @@ } // invocation - if (member.isMethod()) { + if (defc == ArrayAccessor.class && + match(member, ArrayAccessor.OBJECT_ARRAY_GETTER)) { + mv.visitInsn(Opcodes.AALOAD); + } else if (defc == ArrayAccessor.class && + match(member, ArrayAccessor.OBJECT_ARRAY_SETTER)) { + mv.visitInsn(Opcodes.AASTORE); + } else if (member.isMethod()) { mtype = member.getMethodType().toMethodDescriptorString(); mv.visitMethodInsn(refKindOpcode(refKind), cname, mname, mtype, member.getDeclaringClass().isInterface());