Paul, Thank you so much for the review and suggestion. I will rewrite this this way and resend.
thanks! Karen On Oct 10, 2013, at 5:13 AM, Paul Sandoz wrote: > > On Oct 10, 2013, at 12:13 AM, Karen Kinnear <karen.kinn...@oracle.com> wrote: > >> >> Please review: >> >> webrev: http://cr.openjdk.java.net/~acorn/8026213/webrev/ >> bug: https://bugs.openjdk.java.net/browse/JDK-8026213 >> >> Summary: >> Reflection generates code dynamically to speed up reflection processing >> after startup. The first >> 15 runs of a reflection call use the vm code path, after that we use the >> generated code path, which >> needs to use invokespecial on private methods in interfaces. >> > > You don't need to pass modifiers as a parameter to emitInvoke since it is set > as a field on AccessorGenerator and used, e.g. see isStatic(). > > So perhaps add the following method to AccessorGenerator: > > protected boolean isPrivate() { > return Modifier.isPrivate(modifiers); > } > > and do: > > 642 if (isInterface()) { > > 643 if (isPrivate()) { > 644 cb.opc_invokespecial(targetMethodRef, count, 0); > 645 } else { > > 646 cb.opc_invokeinterface(targetMethodRef, > 647 count, > 648 count, > 649 > typeSizeInStackSlots(returnType)); > > 650 } > > 651 } else { > 652 cb.opc_invokevirtual(targetMethodRef, > 653 count, > 654 > typeSizeInStackSlots(returnType)); > 655 } > 656 } > 657 } > > ? > > Paul. > >> Tested: >> Test attached to the bug >> >> Also - all the 8011311 private method testing was run with this in the build: >> Robert Field's TypeTest >> 8025475 test >> defmeth privatemethodstest with reflection >> John Rose's intfbug >> jtreg: java.util, java.lang >> jck vm, lang >> >> thanks, >> Karen >> >> >