]> source.dussan.org Git - javassist.git/commitdiff
modifies addInvokestatic() in Bytecode to support a static method declared in an... 96/head
authorchibash <chiba@javassist.org>
Sun, 31 Jul 2016 03:20:22 +0000 (12:20 +0900)
committerchibash <chiba@javassist.org>
Sun, 31 Jul 2016 03:20:22 +0000 (12:20 +0900)
src/main/javassist/bytecode/Bytecode.java

index 4de69dab30f3dec02178ffd444d908b625a5184c..34068f8d750341766197c0758e3e0ffd496ee107 100644 (file)
@@ -1025,13 +1025,20 @@ public class Bytecode extends ByteVector implements Cloneable, Opcode {
      * @see Descriptor#ofMethod(CtClass,CtClass[])
      */
     public void addInvokestatic(CtClass clazz, String name, String desc) {
-        addInvokestatic(constPool.addClassInfo(clazz), name, desc);
+        boolean isInterface;
+        if (clazz == THIS)
+            isInterface = false;
+        else
+            isInterface = clazz.isInterface();
+
+        addInvokestatic(constPool.addClassInfo(clazz), name, desc, isInterface);
     }
 
     /**
      * Appends INVOKESTATIC.
      *
      * @param classname the fully-qualified class name.
+     *                  It must not be an interface-type name.
      * @param name      the method name
      * @param desc      the descriptor of the method signature.
      *
@@ -1045,15 +1052,26 @@ public class Bytecode extends ByteVector implements Cloneable, Opcode {
      * Appends INVOKESTATIC.
      *
      * @param clazz     the index of <code>CONSTANT_Class_info</code>
-     *                  structure.
+     *                  structure.  It must not be an interface type.
      * @param name      the method name
      * @param desc      the descriptor of the method signature.
      *
      * @see Descriptor#ofMethod(CtClass,CtClass[])
      */
     public void addInvokestatic(int clazz, String name, String desc) {
+        addInvokestatic(clazz, name, desc, false);
+    }
+
+    private void addInvokestatic(int clazz, String name, String desc,
+                                 boolean isInterface) {
         add(INVOKESTATIC);
-        addIndex(constPool.addMethodrefInfo(clazz, name, desc));
+        int index;
+        if (isInterface)
+            index = constPool.addInterfaceMethodrefInfo(clazz, name, desc);
+        else
+            index = constPool.addMethodrefInfo(clazz, name, desc);
+
+        addIndex(index);
         growStack(Descriptor.dataSize(desc));
     }