Kaynağa Gözat

modifies addInvokestatic() in Bytecode to support a static method declared in an interface type.

tags/rel_3_21_0-java9-ea
chibash 7 yıl önce
ebeveyn
işleme
c0b62eeaba
1 değiştirilmiş dosya ile 21 ekleme ve 3 silme
  1. 21
    3
      src/main/javassist/bytecode/Bytecode.java

+ 21
- 3
src/main/javassist/bytecode/Bytecode.java Dosyayı Görüntüle

* @see Descriptor#ofMethod(CtClass,CtClass[]) * @see Descriptor#ofMethod(CtClass,CtClass[])
*/ */
public void addInvokestatic(CtClass clazz, String name, String desc) { 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. * Appends INVOKESTATIC.
* *
* @param classname the fully-qualified class name. * @param classname the fully-qualified class name.
* It must not be an interface-type name.
* @param name the method name * @param name the method name
* @param desc the descriptor of the method signature. * @param desc the descriptor of the method signature.
* *
* Appends INVOKESTATIC. * Appends INVOKESTATIC.
* *
* @param clazz the index of <code>CONSTANT_Class_info</code> * @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 name the method name
* @param desc the descriptor of the method signature. * @param desc the descriptor of the method signature.
* *
* @see Descriptor#ofMethod(CtClass,CtClass[]) * @see Descriptor#ofMethod(CtClass,CtClass[])
*/ */
public void addInvokestatic(int clazz, String name, String desc) { 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); 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)); growStack(Descriptor.dataSize(desc));
} }



Loading…
İptal
Kaydet