org.apache.felix.ipojo.manipulation

## Class MethodCodeAdapter

- java.lang.Object
- - org.objectweb.asm.MethodVisitor
  - - org.objectweb.asm.commons.LocalVariablesSorter
    - - org.objectweb.asm.commons.GeneratorAdapter
      - - org.apache.felix.ipojo.manipulation.MethodCodeAdapter

All Implemented Interfaces:
  org.objectweb.asm.Opcodes

    public class MethodCodeAdapter
    extends org.objectweb.asm.commons.GeneratorAdapter
    implements org.objectweb.asm.Opcodes

Insert code calling callbacks at the entry and before the exit of a method. Moreover it replaces all GETFIELD and SETFIELD by getter and setter invocation.

Author:
  Felix Project Team

### Field Summary

### Fields inherited from class org.objectweb.asm.commons.GeneratorAdapter

`ADD, AND, DIV, EQ, GE, GT, LE, LT, MUL, NE, NEG, OR, REM, SHL, SHR, SUB, USHR, XOR`

### Fields inherited from class org.objectweb.asm.commons.LocalVariablesSorter

`firstLocal, nextLocal`

### Fields inherited from class org.objectweb.asm.MethodVisitor

`api, mv`

### Fields inherited from interface org.objectweb.asm.Opcodes

`AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V9`

### Constructor Summary

Constructors
Constructor and Description
`MethodCodeAdapter(org.objectweb.asm.MethodVisitor mv, String owner, int access, String name, String desc, Set<String> fields)` MethodCodeAdapter constructor.

### Method Summary

All Methods Instance Methods Concrete Methods
`org.objectweb.asm.AnnotationVisitor` `visitAnnotation(String name, boolean visible)` Visits an annotation.
`void` `visitFieldInsn(int opcode, String owner, String name, String desc)` Visit an instruction modifying a method (GETFIELD/PUTFIELD).
`org.objectweb.asm.AnnotationVisitor` `visitParameterAnnotation(int id, String name, boolean visible)` Visits a parameter annotation.

### Methods inherited from class org.objectweb.asm.commons.GeneratorAdapter

`arrayLength, arrayLoad, arrayStore, box, cast, catchException, checkCast, dup, dup2, dup2X1, dup2X2, dupX1, dupX2, endMethod, getAccess, getArgumentTypes, getField, getLocalType, getName, getReturnType, getStatic, goTo, ifCmp, ifICmp, ifNonNull, ifNull, ifZCmp, iinc, instanceOf, invokeConstructor, invokeDynamic, invokeInterface, invokeStatic, invokeVirtual, loadArg, loadArgArray, loadArgs, loadArgs, loadLocal, loadLocal, loadThis, mark, mark, math, monitorEnter, monitorExit, newArray, newInstance, newLabel, not, pop, pop2, push, push, push, push, push, push, push, push, push, putField, putStatic, ret, returnValue, setLocalType, storeArg, storeLocal, storeLocal, swap, swap, tableSwitch, tableSwitch, throwException, throwException, unbox, valueOf`

### Methods inherited from class org.objectweb.asm.commons.LocalVariablesSorter

`newLocal, newLocalMapping, updateNewLocals, visitFrame, visitIincInsn, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs, visitVarInsn`

### Methods inherited from class org.objectweb.asm.MethodVisitor

`getDelegate, visitAnnotableParameterCount, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitInsn, visitInsnAnnotation, visitIntInsn, visitInvokeDynamicInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLookupSwitchInsn, visitMethodInsn, visitMethodInsn, visitMultiANewArrayInsn, visitParameter, visitTableSwitchInsn, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsn`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### MethodCodeAdapter

    public MethodCodeAdapter(org.objectweb.asm.MethodVisitor mv,
                             String owner,
                             int access,
                             String name,
                             String desc,
                             Set<String> fields)

MethodCodeAdapter constructor.

Parameters:
  `mv` - : MethodVisitor
  `owner` - : Name of the class
  `access` - : Method access
  `name` - : Method name
  `desc` - : Method descriptor
  `fields` - : Contained fields

### Method Detail

#### visitFieldInsn

    public void visitFieldInsn(int opcode,
                               String owner,
                               String name,
                               String desc)

Visit an instruction modifying a method (GETFIELD/PUTFIELD).

Overrides:
  `visitFieldInsn` in class `org.objectweb.asm.MethodVisitor`
Parameters:
  `opcode` - : visited operation code
  `owner` - : owner of the field
  `name` - : name of the field
  `desc` - : descriptor of the field
See Also:
  `MethodVisitor.visitFieldInsn(int, String, String, String)`

#### visitAnnotation

    public org.objectweb.asm.AnnotationVisitor visitAnnotation(String name,
                                                               boolean visible)

Visits an annotation. If the annotation is visible, the annotation is removed. In fact the annotation was already moved to the method replacing this one. If the annotation is not visible, this annotation is kept on this method.

Overrides:
  `visitAnnotation` in class `org.objectweb.asm.MethodVisitor`
Parameters:
  `name` - the name of the annotation
  `visible` - the annotation visibility
Returns:
  the `null` if the annotation is visible, otherwise returns `MethodVisitor.visitAnnotation(String, boolean)`
See Also:
  `MethodVisitor.visitAnnotation(java.lang.String, boolean)`

#### visitParameterAnnotation

    public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int id,
                                                                        String name,
                                                                        boolean visible)

Visits a parameter annotation.

Overrides:
  `visitParameterAnnotation` in class `org.objectweb.asm.MethodVisitor`
Parameters:
  `id` - the parameter number.
  `name` - the annotation name
  `visible` - if te annotation visibility
Returns:
  the `null` if the annotation is visible, otherwise returns `MethodVisitor.visitAnnotation(String, boolean)`
See Also:
  `MethodVisitor.visitParameterAnnotation(int, java.lang.String, boolean)`