org.apache.felix.ipojo.manipulation

## Class ClassManipulator

- java.lang.Object
- - org.objectweb.asm.ClassVisitor
  - - org.apache.felix.ipojo.manipulation.ClassManipulator

All Implemented Interfaces:
  org.objectweb.asm.Opcodes

    public class ClassManipulator
    extends org.objectweb.asm.ClassVisitor
    implements org.objectweb.asm.Opcodes

iPOJO Class Adapter. This class adapt the visited class to link the class with the container.

Author:
  Felix Project Team

### Field Summary

Fields
`static String` `ENTRY` onEntry method name.
`static String` `ERROR` on Error method name.
`static String` `EXIT` onExit method name.
`static String` `FIELD_FLAG_PREFIX` Filed flag prefix.
`static String` `IM_FIELD` Instance Manager Field.
`static String` `METHOD_FLAG_PREFIX` Method flag prefix.
`static String` `PREFIX` All POJO method will be renamed by using this prefix.

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

`api, cv`

### 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
`ClassManipulator(org.objectweb.asm.ClassVisitor visitor, Manipulator manipulator)` Constructor.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `visit(int version, int access, String name, String signature, String superName, String[] interfaces)` Visit method.
`void` `visitEnd()` Visit end.
`org.objectweb.asm.FieldVisitor` `visitField(int access, String name, String desc, String signature, Object value)` Visit a Field.
`org.objectweb.asm.MethodVisitor` `visitMethod(int access, String name, String desc, String signature, String[] exceptions)` A method is visited.

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

`getDelegate, visitAnnotation, visitAttribute, visitInnerClass, visitModule, visitNestHost, visitNestMember, visitOuterClass, visitPermittedSubclass, visitRecordComponent, visitSource, visitTypeAnnotation`

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

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

### Field Detail

#### IM_FIELD

    public static final String IM_FIELD

Instance Manager Field.

See Also:
  Constant Field Values

#### PREFIX

    public static final String PREFIX

All POJO method will be renamed by using this prefix.

See Also:
  Constant Field Values

#### FIELD_FLAG_PREFIX

    public static final String FIELD_FLAG_PREFIX

Filed flag prefix.

See Also:
  Constant Field Values

#### METHOD_FLAG_PREFIX

    public static final String METHOD_FLAG_PREFIX

Method flag prefix.

See Also:
  Constant Field Values

#### ENTRY

    public static final String ENTRY

onEntry method name.

See Also:
  Constant Field Values

#### EXIT

    public static final String EXIT

onExit method name.

See Also:
  Constant Field Values

#### ERROR

    public static final String ERROR

on Error method name.

See Also:
  Constant Field Values

### Constructor Detail

#### ClassManipulator

    public ClassManipulator(org.objectweb.asm.ClassVisitor visitor,
                            Manipulator manipulator)

Constructor.

Parameters:
  `visitor` - : class visitor.
  `manipulator` - : the manipulator having analyzed the class.

### Method Detail

#### visit

    public void visit(int version,
                      int access,
                      String name,
                      String signature,
                      String superName,
                      String[] interfaces)

Visit method. This method store the current class name. Moreover the POJO interface is added to the list of implemented interface. Then the Instance manager field is added.

Overrides:
  `visit` in class `org.objectweb.asm.ClassVisitor`
Parameters:
  `version` - : version
  `access` - : access flag
  `name` - : class name
  `signature` - : signature
  `superName` - : parent class
  `interfaces` - : implemented interface
See Also:
  `ClassVisitor.visit(int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])`

#### visitMethod

    public org.objectweb.asm.MethodVisitor visitMethod(int access,
                                                       String name,
                                                       String desc,
                                                       String signature,
                                                       String[] exceptions)

A method is visited. This method does not manipulate clinit and class$ methods. In the case of a constructor, this method will generate a constructor with the instance manager and will adapt the current constructor to call this constructor. For standard method, this method will create method header, rename the current method and adapt it.

Overrides:
  `visitMethod` in class `org.objectweb.asm.ClassVisitor`
Parameters:
  `access` - : access flag.
  `name` - : name of the method
  `desc` - : method descriptor
  `signature` - : signature
  `exceptions` - : declared exceptions.
Returns:
  the MethodVisitor wich will visit the method code.
See Also:
  `ClassVisitor.visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])`

#### visitField

    public org.objectweb.asm.FieldVisitor visitField(int access,
                                                     String name,
                                                     String desc,
                                                     String signature,
                                                     Object value)

Visit a Field. This field access is replaced by an invocation to the getter method or to the setter method. (except for static field). Inject the getter and the setter method for this field.

Overrides:
  `visitField` in class `org.objectweb.asm.ClassVisitor`
Parameters:
  `access` - : access modifier
  `name` - : name of the field
  `desc` - : description of the field
  `signature` - : signature of the field
  `value` - : value of the field
Returns:
  FieldVisitor : null
See Also:
  `ClassVisitor.visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)`

#### visitEnd

    public void visitEnd()

Visit end. Create helper methods.

Overrides:
  `visitEnd` in class `org.objectweb.asm.ClassVisitor`
See Also:
  `ClassVisitor.visitEnd()`