This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git


The following commit(s) were added to refs/heads/master by this push:
     new ae10173  add support for invokestatic of an InterfaceMethodref (#39)
ae10173 is described below

commit ae1017364bad6dab70e73efd2fe23f0a9c2cfeef
Author: Mark Roberts <markr...@users.noreply.github.com>
AuthorDate: Mon Jun 1 14:27:08 2020 -0700

    add support for invokestatic of an InterfaceMethodref (#39)
---
 .../org/apache/bcel/generic/InstructionFactory.java     | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/bcel/generic/InstructionFactory.java 
b/src/main/java/org/apache/bcel/generic/InstructionFactory.java
index 32c52cf..8610cd1 100644
--- a/src/main/java/org/apache/bcel/generic/InstructionFactory.java
+++ b/src/main/java/org/apache/bcel/generic/InstructionFactory.java
@@ -83,13 +83,28 @@ public class InstructionFactory implements 
InstructionConstants {
      */
     public InvokeInstruction createInvoke( final String class_name, final 
String name, final Type ret_type,
             final Type[] arg_types, final short kind ) {
+        return createInvoke(class_name, name, ret_type, arg_types, kind, kind 
== Const.INVOKEINTERFACE);
+    }
+
+    /** Create an invoke instruction. (Except for invokedynamic.)
+     *
+     * @param class_name name of the called class
+     * @param name name of the called method
+     * @param ret_type return type of method
+     * @param arg_types argument types of method
+     * @param kind how to invoke: INVOKEINTERFACE, INVOKESTATIC, 
INVOKEVIRTUAL, or INVOKESPECIAL
+     * @param use_interface force use of InterfaceMethodref
+     * @since 6.4.2
+     */
+    public InvokeInstruction createInvoke( final String class_name, final 
String name, final Type ret_type,
+            final Type[] arg_types, final short kind, final boolean 
use_interface ) {
         int index;
         int nargs = 0;
         final String signature = Type.getMethodSignature(ret_type, arg_types);
         for (final Type arg_type : arg_types) {
             nargs += arg_type.getSize();
         }
-        if (kind == Const.INVOKEINTERFACE) {
+        if (use_interface) {
             index = cp.addInterfaceMethodref(class_name, name, signature);
         } else {
             index = cp.addMethodref(class_name, name, signature);

Reply via email to