org.apache.felix.ipojo.manipulation
Class ClassChecker

java.lang.Object
  extended by org.objectweb.asm.commons.EmptyVisitor
      extended by org.apache.felix.ipojo.manipulation.ClassChecker
All Implemented Interfaces:
org.objectweb.asm.AnnotationVisitor, org.objectweb.asm.ClassVisitor, org.objectweb.asm.FieldVisitor, org.objectweb.asm.MethodVisitor, org.objectweb.asm.Opcodes

public class ClassChecker
extends org.objectweb.asm.commons.EmptyVisitor
implements org.objectweb.asm.ClassVisitor, org.objectweb.asm.Opcodes

Checks that a POJO is already manipulated or not. Moreover it allows to get manipulation data about this class.

Author:
Felix Project Team

Nested Class Summary
 class ClassChecker.AnnotationDescriptor
          Describes a method or constructor annotation.
 class ClassChecker.ArrayAttribute
          Describes an array attribute.
static class ClassChecker.EnumAttribute
          Describes an attribute.
static class ClassChecker.SimpleAttribute
          Describes a simple attribute.
 
Field Summary
 
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_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, 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, 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, INVOKEDYNAMIC_OWNER, 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, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
 
Constructor Summary
ClassChecker()
           
 
Method Summary
 Map getFields()
          Get collected fields.
 List getInnerClasses()
           
 List getInterfaces()
          Get collected interfaces.
 List getMethods()
          Get collected methods.
 String getSuperClass()
           
 boolean isalreadyManipulated()
          Check if the class was already manipulated.
 void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
          Visit the class.
 org.objectweb.asm.FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
          Check if the _cm field already exists.
 void visitInnerClass(String name, String outerName, String innerName, int access)
          Add the inner class to the list of inner class to manipulate.
 org.objectweb.asm.MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
          Visit a method.
 
Methods inherited from class org.objectweb.asm.commons.EmptyVisitor
visit, visitAnnotation, visitAnnotation, visitAnnotationDefault, visitArray, visitAttribute, visitCode, visitEnd, visitEnum, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitIntInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitOuterClass, visitParameterAnnotation, visitSource, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn, visitVarInsn
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.objectweb.asm.ClassVisitor
visitAnnotation, visitAttribute, visitEnd, visitOuterClass, visitSource
 

Constructor Detail

ClassChecker

public ClassChecker()
Method Detail

visitField

public org.objectweb.asm.FieldVisitor visitField(int access,
                                                 String name,
                                                 String desc,
                                                 String signature,
                                                 Object value)
Check if the _cm field already exists. Update the field list.

Specified by:
visitField in interface org.objectweb.asm.ClassVisitor
Overrides:
visitField in class org.objectweb.asm.commons.EmptyVisitor
Parameters:
access - : access of the field
name - : name of the field
desc - : description of the field
signature - : signature of the field
value - : value of the field (for static field only)
Returns:
the field visitor
See Also:
ClassVisitor.visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)

visitInnerClass

public void visitInnerClass(String name,
                            String outerName,
                            String innerName,
                            int access)
Add the inner class to the list of inner class to manipulate. The method checks that the inner class is really owned by the implementation class.

Specified by:
visitInnerClass in interface org.objectweb.asm.ClassVisitor
Overrides:
visitInnerClass in class org.objectweb.asm.commons.EmptyVisitor
Parameters:
name - inner class qualified name
outerName - outer class name (may be null for anonymous class)
innerName - inner class simple (i.e. short) name
access - inner class visibility
See Also:
EmptyVisitor.visitInnerClass(java.lang.String, java.lang.String, java.lang.String, int)

isalreadyManipulated

public boolean isalreadyManipulated()
Check if the class was already manipulated.

Returns:
true if the class is already manipulated.

visit

public void visit(int version,
                  int access,
                  String name,
                  String signature,
                  String superName,
                  String[] interfaces)
Visit the class. Update the implemented interface list.

Specified by:
visit in interface org.objectweb.asm.ClassVisitor
Overrides:
visit in class org.objectweb.asm.commons.EmptyVisitor
Parameters:
version - : version of the class
access - : access of the class
name - : name of the class
signature - : signature of the class
superName - : super class of the class
interfaces - : implemented interfaces.
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)
Visit a method. Update the method list (except if it init or clinit.

Specified by:
visitMethod in interface org.objectweb.asm.ClassVisitor
Overrides:
visitMethod in class org.objectweb.asm.commons.EmptyVisitor
Parameters:
access - - the method's access flags (see Opcodes). This parameter also indicates if the method is synthetic and/or deprecated.
name - - the method's name.
desc - - the method's descriptor (see Type).
signature - - the method's signature. May be null if the method parameters, return type and exceptions do not use generic types.
exceptions - - the internal names of the method's exception classes (see getInternalName). May be null.
Returns:
nothing.
See Also:
ClassVisitor.visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])

getInterfaces

public List getInterfaces()
Get collected interfaces.

Returns:
the interfaces implemented by the component class.

getFields

public Map getFields()
Get collected fields.

Returns:
the field map [field_name, type].

getMethods

public List getMethods()
Get collected methods.

Returns:
the method list of [method, signature].

getSuperClass

public String getSuperClass()

getInnerClasses

public List getInnerClasses()


Copyright © 2013 The Apache Software Foundation. All Rights Reserved.