You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Mark Roberts (Jira)" <ji...@apache.org> on 2020/02/15 20:59:00 UTC

[jira] [Created] (BCEL-333) InovokeStatic may refer to either a MethodRef or an InterfaceMethodRef

Mark Roberts created BCEL-333:
---------------------------------

             Summary: InovokeStatic may refer to either a MethodRef or an InterfaceMethodRef
                 Key: BCEL-333
                 URL: https://issues.apache.org/jira/browse/BCEL-333
             Project: Commons BCEL
          Issue Type: Bug
            Reporter: Mark Roberts


Java 8 added support for static interfaces.  This means that an invokestatic instruction may refer to either a CONSTANT_Methodref_info or a CONSTANT_InterfaceMethodref_info.  See [https://stackoverflow.com/questions/34360718/invokestatic-on-static-method-in-interface] for a detailed explanation.  Currently, if InstructionFactory.createInvoke sees an Const.INVOKEINTERFACE it generates an InterfaceMethodref and a Methodref otherwise.  This is incorrect.  I could not figure out any way to make the correct decision programmatically as the original instruction is not available.  So I added an additional createInvoke method with a boolean argument that says whether or not to use an InterfaceMethodref.  The semantics of the original createInvoke method are unchanged.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)