RFR: Lambda 8026213: Reflection support for private methods in	interfaces
    Paul Sandoz 
    paul.sandoz at oracle.com
       
    Thu Oct 10 02:13:54 PDT 2013
    
    
  
On Oct 10, 2013, at 12:13 AM, Karen Kinnear <karen.kinnear at 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
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
Url : http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20131010/721e2b7f/signature-0001.asc 
    
    
More information about the hotspot-runtime-dev
mailing list