net.sf.jlayercheck.util
Class DependencyVisitor

java.lang.Object
  extended by net.sf.jlayercheck.util.DependencyVisitor
All Implemented Interfaces:
AnnotationVisitor, ClassVisitor, FieldVisitor, MethodVisitor, SignatureVisitor

public class DependencyVisitor
extends Object
implements AnnotationVisitor, SignatureVisitor, ClassVisitor, FieldVisitor, MethodVisitor

This class is a simple visitor object that collects all dependency information for the given classes. The collected information can be retrieved by calling getDependencies() and {getPackages().


Field Summary
protected  Map<String,Map<String,Set<Integer>>> classDependencies
           
protected  Map<String,Set<MethodCall>> constructorCalls
           
protected  String currentClass
           
protected  Map<String,Set<Integer>> currentClassDependencies
          Contains the dependencies for the current class.
protected  int currentLineNumber
           
protected  Map<String,Set<String>> packages
           
 
Fields inherited from interface org.objectweb.asm.signature.SignatureVisitor
EXTENDS, INSTANCEOF, SUPER
 
Constructor Summary
DependencyVisitor()
           
 
Method Summary
protected  void addClassToPackage(String classname)
           
protected  void addClassToPackage(String classname, String packagename)
           
protected  void addConstuctorCall(String desc)
          Called when a "new" command is found.
protected  void addDesc(String desc)
           
protected  void addMethodDesc(String desc)
           
protected  void addName(String name)
           
protected  void addNames(String[] names)
           
protected  void addSignature(String signature)
           
protected  void addType(Type t)
           
protected  void addTypeSignature(String signature)
           
 Map<String,Set<MethodCall>> getConstructorCalls()
          Returns a Map of class -> constructor calls.
 Map<String,Map<String,Set<Integer>>> getDependencies()
          Returns a Map containing class names as keys and another Map as values.
 Map<String,Set<String>> getPackages()
          Returns a Map containing package names as keys and another Set as values.
 void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
          Called when a new class file is loaded.
 void visit(String name, Object value)
           
 AnnotationVisitor visitAnnotation(String desc, boolean visible)
           
 AnnotationVisitor visitAnnotation(String name, String desc)
           
 AnnotationVisitor visitAnnotationDefault()
           
 AnnotationVisitor visitArray(String name)
           
 SignatureVisitor visitArrayType()
           
 void visitAttribute(Attribute attr)
           
 void visitBaseType(char descriptor)
           
 SignatureVisitor visitClassBound()
           
 void visitClassType(String name)
           
 void visitCode()
           
 void visitEnd()
           
 void visitEnum(String name, String desc, String value)
           
 SignatureVisitor visitExceptionType()
           
 FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
           
 void visitFieldInsn(int opcode, String owner, String name, String desc)
           
 void visitFormalTypeParameter(String name)
           
 void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack)
           
 void visitIincInsn(int var, int increment)
           
 void visitInnerClass(String name, String outerName, String innerName, int access)
           
 void visitInnerClassType(String name)
           
 void visitInsn(int opcode)
           
 SignatureVisitor visitInterface()
           
 SignatureVisitor visitInterfaceBound()
           
 void visitIntInsn(int opcode, int operand)
           
 void visitJumpInsn(int opcode, Label label)
           
 void visitLabel(Label label)
           
 void visitLdcInsn(Object cst)
           
 void visitLineNumber(int line, Label start)
           
 void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index)
           
 void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
           
 void visitMaxs(int maxStack, int maxLocals)
           
 MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
           
 void visitMethodInsn(int opcode, String owner, String name, String desc)
           
 void visitMultiANewArrayInsn(String desc, int dims)
           
 void visitOuterClass(String owner, String name, String desc)
           
 AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible)
           
 SignatureVisitor visitParameterType()
           
 SignatureVisitor visitReturnType()
           
 void visitSource(String source, String debug)
           
 SignatureVisitor visitSuperclass()
           
 void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels)
           
 void visitTryCatchBlock(Label start, Label end, Label handler, String type)
           
 void visitTypeArgument()
           
 SignatureVisitor visitTypeArgument(char wildcard)
           
 void visitTypeInsn(int opcode, String desc)
           
 void visitTypeVariable(String name)
           
 void visitVarInsn(int opcode, int var)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

packages

protected Map<String,Set<String>> packages

classDependencies

protected Map<String,Map<String,Set<Integer>>> classDependencies

currentClass

protected String currentClass

constructorCalls

protected Map<String,Set<MethodCall>> constructorCalls

currentClassDependencies

protected Map<String,Set<Integer>> currentClassDependencies
Contains the dependencies for the current class.


currentLineNumber

protected int currentLineNumber
Constructor Detail

DependencyVisitor

public DependencyVisitor()
Method Detail

getDependencies

public Map<String,Map<String,Set<Integer>>> getDependencies()
Returns a Map containing class names as keys and another Map as values. This second Map contains the dependend class and a count, how often it was referenced.

Returns:
Map containing class dependencies

getPackages

public Map<String,Set<String>> getPackages()
Returns a Map containing package names as keys and another Set as values. This second Set contains class names that belong to the given package.

Returns:

visit

public void visit(int version,
                  int access,
                  String name,
                  String signature,
                  String superName,
                  String[] interfaces)
Called when a new class file is loaded.

Specified by:
visit in interface ClassVisitor

visitAnnotation

public AnnotationVisitor visitAnnotation(String desc,
                                         boolean visible)
Specified by:
visitAnnotation in interface ClassVisitor
Specified by:
visitAnnotation in interface FieldVisitor
Specified by:
visitAnnotation in interface MethodVisitor

visitAttribute

public void visitAttribute(Attribute attr)
Specified by:
visitAttribute in interface ClassVisitor
Specified by:
visitAttribute in interface FieldVisitor
Specified by:
visitAttribute in interface MethodVisitor

visitField

public FieldVisitor visitField(int access,
                               String name,
                               String desc,
                               String signature,
                               Object value)
Specified by:
visitField in interface ClassVisitor

visitMethod

public MethodVisitor visitMethod(int access,
                                 String name,
                                 String desc,
                                 String signature,
                                 String[] exceptions)
Specified by:
visitMethod in interface ClassVisitor

visitSource

public void visitSource(String source,
                        String debug)
Specified by:
visitSource in interface ClassVisitor

visitInnerClass

public void visitInnerClass(String name,
                            String outerName,
                            String innerName,
                            int access)
Specified by:
visitInnerClass in interface ClassVisitor

visitOuterClass

public void visitOuterClass(String owner,
                            String name,
                            String desc)
Specified by:
visitOuterClass in interface ClassVisitor

visitParameterAnnotation

public AnnotationVisitor visitParameterAnnotation(int parameter,
                                                  String desc,
                                                  boolean visible)
Specified by:
visitParameterAnnotation in interface MethodVisitor

visitTypeInsn

public void visitTypeInsn(int opcode,
                          String desc)
Specified by:
visitTypeInsn in interface MethodVisitor

addConstuctorCall

protected void addConstuctorCall(String desc)
Called when a "new" command is found. Useful to see where implementations are needed and where interfaces can replace a reference.

Parameters:
desc -

visitFieldInsn

public void visitFieldInsn(int opcode,
                           String owner,
                           String name,
                           String desc)
Specified by:
visitFieldInsn in interface MethodVisitor

visitMethodInsn

public void visitMethodInsn(int opcode,
                            String owner,
                            String name,
                            String desc)
Specified by:
visitMethodInsn in interface MethodVisitor

visitLdcInsn

public void visitLdcInsn(Object cst)
Specified by:
visitLdcInsn in interface MethodVisitor

visitMultiANewArrayInsn

public void visitMultiANewArrayInsn(String desc,
                                    int dims)
Specified by:
visitMultiANewArrayInsn in interface MethodVisitor

visitLocalVariable

public void visitLocalVariable(String name,
                               String desc,
                               String signature,
                               Label start,
                               Label end,
                               int index)
Specified by:
visitLocalVariable in interface MethodVisitor

visitAnnotationDefault

public AnnotationVisitor visitAnnotationDefault()
Specified by:
visitAnnotationDefault in interface MethodVisitor

visitCode

public void visitCode()
Specified by:
visitCode in interface MethodVisitor

visitFrame

public void visitFrame(int type,
                       int nLocal,
                       Object[] local,
                       int nStack,
                       Object[] stack)
Specified by:
visitFrame in interface MethodVisitor

visitInsn

public void visitInsn(int opcode)
Specified by:
visitInsn in interface MethodVisitor

visitIntInsn

public void visitIntInsn(int opcode,
                         int operand)
Specified by:
visitIntInsn in interface MethodVisitor

visitVarInsn

public void visitVarInsn(int opcode,
                         int var)
Specified by:
visitVarInsn in interface MethodVisitor

visitJumpInsn

public void visitJumpInsn(int opcode,
                          Label label)
Specified by:
visitJumpInsn in interface MethodVisitor

visitLabel

public void visitLabel(Label label)
Specified by:
visitLabel in interface MethodVisitor

visitIincInsn

public void visitIincInsn(int var,
                          int increment)
Specified by:
visitIincInsn in interface MethodVisitor

visitTableSwitchInsn

public void visitTableSwitchInsn(int min,
                                 int max,
                                 Label dflt,
                                 Label[] labels)
Specified by:
visitTableSwitchInsn in interface MethodVisitor

visitLookupSwitchInsn

public void visitLookupSwitchInsn(Label dflt,
                                  int[] keys,
                                  Label[] labels)
Specified by:
visitLookupSwitchInsn in interface MethodVisitor

visitTryCatchBlock

public void visitTryCatchBlock(Label start,
                               Label end,
                               Label handler,
                               String type)
Specified by:
visitTryCatchBlock in interface MethodVisitor

visitLineNumber

public void visitLineNumber(int line,
                            Label start)
Specified by:
visitLineNumber in interface MethodVisitor

visitMaxs

public void visitMaxs(int maxStack,
                      int maxLocals)
Specified by:
visitMaxs in interface MethodVisitor

visit

public void visit(String name,
                  Object value)
Specified by:
visit in interface AnnotationVisitor

visitEnum

public void visitEnum(String name,
                      String desc,
                      String value)
Specified by:
visitEnum in interface AnnotationVisitor

visitAnnotation

public AnnotationVisitor visitAnnotation(String name,
                                         String desc)
Specified by:
visitAnnotation in interface AnnotationVisitor

visitArray

public AnnotationVisitor visitArray(String name)
Specified by:
visitArray in interface AnnotationVisitor

visitFormalTypeParameter

public void visitFormalTypeParameter(String name)
Specified by:
visitFormalTypeParameter in interface SignatureVisitor

visitClassBound

public SignatureVisitor visitClassBound()
Specified by:
visitClassBound in interface SignatureVisitor

visitInterfaceBound

public SignatureVisitor visitInterfaceBound()
Specified by:
visitInterfaceBound in interface SignatureVisitor

visitSuperclass

public SignatureVisitor visitSuperclass()
Specified by:
visitSuperclass in interface SignatureVisitor

visitInterface

public SignatureVisitor visitInterface()
Specified by:
visitInterface in interface SignatureVisitor

visitParameterType

public SignatureVisitor visitParameterType()
Specified by:
visitParameterType in interface SignatureVisitor

visitReturnType

public SignatureVisitor visitReturnType()
Specified by:
visitReturnType in interface SignatureVisitor

visitExceptionType

public SignatureVisitor visitExceptionType()
Specified by:
visitExceptionType in interface SignatureVisitor

visitBaseType

public void visitBaseType(char descriptor)
Specified by:
visitBaseType in interface SignatureVisitor

visitTypeVariable

public void visitTypeVariable(String name)
Specified by:
visitTypeVariable in interface SignatureVisitor

visitArrayType

public SignatureVisitor visitArrayType()
Specified by:
visitArrayType in interface SignatureVisitor

visitClassType

public void visitClassType(String name)
Specified by:
visitClassType in interface SignatureVisitor

visitInnerClassType

public void visitInnerClassType(String name)
Specified by:
visitInnerClassType in interface SignatureVisitor

visitTypeArgument

public void visitTypeArgument()
Specified by:
visitTypeArgument in interface SignatureVisitor

visitTypeArgument

public SignatureVisitor visitTypeArgument(char wildcard)
Specified by:
visitTypeArgument in interface SignatureVisitor

visitEnd

public void visitEnd()
Specified by:
visitEnd in interface AnnotationVisitor
Specified by:
visitEnd in interface ClassVisitor
Specified by:
visitEnd in interface FieldVisitor
Specified by:
visitEnd in interface MethodVisitor
Specified by:
visitEnd in interface SignatureVisitor

addClassToPackage

protected void addClassToPackage(String classname)

addClassToPackage

protected void addClassToPackage(String classname,
                                 String packagename)

addName

protected void addName(String name)

addNames

protected void addNames(String[] names)

addDesc

protected void addDesc(String desc)

addMethodDesc

protected void addMethodDesc(String desc)

addType

protected void addType(Type t)

addSignature

protected void addSignature(String signature)

addTypeSignature

protected void addTypeSignature(String signature)

getConstructorCalls

public Map<String,Set<MethodCall>> getConstructorCalls()
Returns a Map of class -> constructor calls. Can be used to determine where implementations are needed and where an interface would be sufficient.

Returns:
Map class -> constructor calls


Copyright © 2007. All Rights Reserved.