You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TransformCallToStatic.java 1.1KB

1234567891011121314151617181920212223242526272829
  1. package javassist.convert;
  2. import javassist.CtMethod;
  3. import javassist.bytecode.BadBytecode;
  4. import javassist.bytecode.CodeIterator;
  5. import javassist.bytecode.ConstPool;
  6. import javassist.bytecode.Descriptor;
  7. import javassist.bytecode.Opcode;
  8. public class TransformCallToStatic extends TransformCall {
  9. public TransformCallToStatic(Transformer next, CtMethod origMethod, CtMethod substMethod) {
  10. super(next, origMethod, substMethod);
  11. methodDescriptor = origMethod.getMethodInfo2().getDescriptor();
  12. }
  13. @Override
  14. protected int match(int c, int pos, CodeIterator iterator, int typedesc, ConstPool cp) {
  15. if (newIndex == 0) {
  16. String desc = Descriptor.insertParameter(classname, methodDescriptor);
  17. int nt = cp.addNameAndTypeInfo(newMethodname, desc);
  18. int ci = cp.addClassInfo(newClassname);
  19. newIndex = cp.addMethodrefInfo(ci, nt);
  20. constPool = cp;
  21. }
  22. iterator.writeByte(Opcode.INVOKESTATIC, pos);
  23. iterator.write16bit(newIndex, pos + 1);
  24. return pos;
  25. }
  26. }