com.ikokoon.serenity.instrumentation.dependency
Class DependencyClassAdapter

java.lang.Object
  extended by org.objectweb.asm.ClassAdapter
      extended by com.ikokoon.serenity.instrumentation.dependency.DependencyClassAdapter
All Implemented Interfaces:
org.objectweb.asm.ClassVisitor, org.objectweb.asm.Opcodes

public class DependencyClassAdapter
extends org.objectweb.asm.ClassAdapter
implements org.objectweb.asm.Opcodes

This is the entry point for parsing the byte code and collecting the dependency metrics for the class. This class also collects the Java source for the class if it is available. Dependency metrics consist of the following:
1) Afferent - the number of packages that rely on this package, i.e. how many times it is referenced by other packages, the number of packages that this class affects
2) Efferent - the number of packages this package relies on, i.e. the opposite of afferent, the number of classes that this class is effected by
3) Abstractness - the ratio of abstract to implementations in a package
4) Entropy - package A relies on package B. Then Package C is introduced and relies on A and B increasing the entropy
5) Stability - Ce / (Ca + Ce), efferent coupling divided by the afferent coupling plus the efferent coupling
6) Distance from main - find the stability distance of the package from the main which is (X=0,Y=1) to (X=1,Y=0)

Since:
18.07.09
Version:
01.00
Author:
Michael Couck

Field Summary
 
Fields inherited from class org.objectweb.asm.ClassAdapter
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_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, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, 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, 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, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, 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, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6
 
Constructor Summary
DependencyClassAdapter(org.objectweb.asm.ClassVisitor classVisitor, java.lang.String className, java.io.ByteArrayOutputStream source)
          Constructor initialises a DependencyClassAdapter and takes the parent visitor and the name of the class that will be analysed for dependency.
 
Method Summary
 void visit(int version, int access, java.lang.String className, java.lang.String signature, java.lang.String superName, java.lang.String[] interfaces)
          
 org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String desc, boolean visible)
          
 void visitAttribute(org.objectweb.asm.Attribute attr)
          
 void visitEnd()
          
 org.objectweb.asm.FieldVisitor visitField(int access, java.lang.String fieldName, java.lang.String desc, java.lang.String signature, java.lang.Object value)
          
 void visitInnerClass(java.lang.String innerName, java.lang.String outerName, java.lang.String innerSimpleName, int access)
          
 org.objectweb.asm.MethodVisitor visitMethod(int access, java.lang.String methodName, java.lang.String methodDescription, java.lang.String signature, java.lang.String[] exceptions)
          
 void visitOuterClass(java.lang.String outerName, java.lang.String outerMethodName, java.lang.String outerMethodDescription)
          
 void visitSource(java.lang.String source, java.lang.String debug)
          
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DependencyClassAdapter

public DependencyClassAdapter(org.objectweb.asm.ClassVisitor classVisitor,
                              java.lang.String className,
                              java.io.ByteArrayOutputStream source)
Constructor initialises a DependencyClassAdapter and takes the parent visitor and the name of the class that will be analysed for dependency.

Parameters:
classVisitor - the parent visitor for the class
className - the name of the class to be analysed
source - the Java source
Method Detail

visit

public void visit(int version,
                  int access,
                  java.lang.String className,
                  java.lang.String signature,
                  java.lang.String superName,
                  java.lang.String[] interfaces)

Specified by:
visit in interface org.objectweb.asm.ClassVisitor
Overrides:
visit in class org.objectweb.asm.ClassAdapter

visitAnnotation

public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String desc,
                                                           boolean visible)

Specified by:
visitAnnotation in interface org.objectweb.asm.ClassVisitor
Overrides:
visitAnnotation in class org.objectweb.asm.ClassAdapter

visitAttribute

public void visitAttribute(org.objectweb.asm.Attribute attr)

Specified by:
visitAttribute in interface org.objectweb.asm.ClassVisitor
Overrides:
visitAttribute in class org.objectweb.asm.ClassAdapter

visitField

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

Specified by:
visitField in interface org.objectweb.asm.ClassVisitor
Overrides:
visitField in class org.objectweb.asm.ClassAdapter

visitInnerClass

public void visitInnerClass(java.lang.String innerName,
                            java.lang.String outerName,
                            java.lang.String innerSimpleName,
                            int access)

Specified by:
visitInnerClass in interface org.objectweb.asm.ClassVisitor
Overrides:
visitInnerClass in class org.objectweb.asm.ClassAdapter

visitOuterClass

public void visitOuterClass(java.lang.String outerName,
                            java.lang.String outerMethodName,
                            java.lang.String outerMethodDescription)

Specified by:
visitOuterClass in interface org.objectweb.asm.ClassVisitor
Overrides:
visitOuterClass in class org.objectweb.asm.ClassAdapter

visitMethod

public org.objectweb.asm.MethodVisitor visitMethod(int access,
                                                   java.lang.String methodName,
                                                   java.lang.String methodDescription,
                                                   java.lang.String signature,
                                                   java.lang.String[] exceptions)

Specified by:
visitMethod in interface org.objectweb.asm.ClassVisitor
Overrides:
visitMethod in class org.objectweb.asm.ClassAdapter

visitSource

public void visitSource(java.lang.String source,
                        java.lang.String debug)

Specified by:
visitSource in interface org.objectweb.asm.ClassVisitor
Overrides:
visitSource in class org.objectweb.asm.ClassAdapter

visitEnd

public void visitEnd()

Specified by:
visitEnd in interface org.objectweb.asm.ClassVisitor
Overrides:
visitEnd in class org.objectweb.asm.ClassAdapter


Copyright © 2010. All Rights Reserved.