org.codehaus.aspectwerkz.transform.inlining.weaver
Class SerialVersionUidVisitor

java.lang.Object
  extended by org.objectweb.asm.ClassAdapter
      extended by org.codehaus.aspectwerkz.transform.inlining.weaver.SerialVersionUidVisitor
All Implemented Interfaces:
org.objectweb.asm.ClassVisitor, org.objectweb.asm.Constants

public class SerialVersionUidVisitor
extends org.objectweb.asm.ClassAdapter
implements org.objectweb.asm.Constants

See http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/class.html#60

The SerialVersionUidVisitor lookups for the serial ver uid and compute it when not found. See Add and Compute subclasses. Initial implementation courtesy of Vishal Vishnoi

Author:
Alexandre Vasseur

Nested Class Summary
static class SerialVersionUidVisitor.Add
          Add the serial version uid to the class if not already present
 
Field Summary
static String CLINIT
           
static String INIT
           
protected  int m_access
          Classes access flag
protected  String m_className
          Internal name of the class
protected  boolean m_computeSVUID
          flag that indicates if we need to compute SVUID (no need for interfaces)
protected  boolean m_hadSVUID
          Set to true if the class already has SVUID
protected  boolean m_hasStaticInitializer
          Set to true if the class has static initializer
protected  String[] m_interfaces
          Interfaces implemented by the class
protected  long m_SVUID
          The SVUID value (valid at the end of the visit only ie the one that was present or the computed one)
protected  Collection m_svuidConstructors
          Collection of non private constructors.
protected  Collection m_svuidFields
          Collection of fields.
protected  Collection m_svuidMethods
          Collection of non private method
static String SVUID_NAME
           
 
Fields inherited from class org.objectweb.asm.ClassAdapter
cv
 
Fields inherited from interface org.objectweb.asm.Constants
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
 
Method Summary
static long calculateSerialVersionUID(Class klass)
          helper method (test purpose)
protected  long computeSVUID()
          Returns the value of SVUID if the class doesn't have one already.
protected  boolean mayNeedSerialVersionUid(int access)
           
 void visit(int version, int access, String name, String superName, String[] interfaces, String sourceFile)
          Visit class header and get class name, access , and interfaces information (step 1,2, and 3) for SVUID computation.
 void visitEnd()
          Add the SVUID if class doesn't have one
 void visitField(int access, String name, String desc, Object value, org.objectweb.asm.Attribute attrs)
          Gets class field information for step 4 of the alogrithm.
 org.objectweb.asm.CodeVisitor visitMethod(int access, String name, String desc, String[] exceptions, org.objectweb.asm.Attribute attrs)
          Visit the methods and get constructor and method information (step 5 and 7).
protected  void writeItems(Collection itemCollection, DataOutputStream dos, boolean dotted)
          Sorts the items in the collection and writes it to the data output stream
 
Methods inherited from class org.objectweb.asm.ClassAdapter
visitAttribute, visitInnerClass
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CLINIT

public static final String CLINIT
See Also:
Constant Field Values

INIT

public static final String INIT
See Also:
Constant Field Values

SVUID_NAME

public static final String SVUID_NAME
See Also:
Constant Field Values

m_computeSVUID

protected boolean m_computeSVUID
flag that indicates if we need to compute SVUID (no need for interfaces)


m_hadSVUID

protected boolean m_hadSVUID
Set to true if the class already has SVUID


m_SVUID

protected long m_SVUID
The SVUID value (valid at the end of the visit only ie the one that was present or the computed one)


m_className

protected String m_className
Internal name of the class


m_access

protected int m_access
Classes access flag


m_interfaces

protected String[] m_interfaces
Interfaces implemented by the class


m_svuidFields

protected Collection m_svuidFields
Collection of fields. (except private static and private transient fields)


m_hasStaticInitializer

protected boolean m_hasStaticInitializer
Set to true if the class has static initializer


m_svuidConstructors

protected Collection m_svuidConstructors
Collection of non private constructors.


m_svuidMethods

protected Collection m_svuidMethods
Collection of non private method

Method Detail

calculateSerialVersionUID

public static long calculateSerialVersionUID(Class klass)
helper method (test purpose)

Parameters:
klass -
Returns:

visit

public void visit(int version,
                  int access,
                  String name,
                  String superName,
                  String[] interfaces,
                  String sourceFile)
Visit class header and get class name, access , and interfaces information (step 1,2, and 3) for SVUID computation.

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

visitMethod

public org.objectweb.asm.CodeVisitor visitMethod(int access,
                                                 String name,
                                                 String desc,
                                                 String[] exceptions,
                                                 org.objectweb.asm.Attribute attrs)
Visit the methods and get constructor and method information (step 5 and 7). Also determince if there is a class initializer (step 6).

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

visitField

public void visitField(int access,
                       String name,
                       String desc,
                       Object value,
                       org.objectweb.asm.Attribute attrs)
Gets class field information for step 4 of the alogrithm. Also determines if the class already has a SVUID.

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

visitEnd

public void visitEnd()
Add the SVUID if class doesn't have one

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

mayNeedSerialVersionUid

protected boolean mayNeedSerialVersionUid(int access)

computeSVUID

protected long computeSVUID()
                     throws IOException,
                            NoSuchAlgorithmException
Returns the value of SVUID if the class doesn't have one already. Please note that 0 is returned if the class already has SVUID, thus use isHasSVUID to determine if the class already had an SVUID.

Returns:
Returns the serila version UID
Throws:
IOException
NoSuchAlgorithmException

writeItems

protected void writeItems(Collection itemCollection,
                          DataOutputStream dos,
                          boolean dotted)
                   throws IOException
Sorts the items in the collection and writes it to the data output stream

Parameters:
itemCollection - collection of items
dos - a DataOutputStream value
dotted - a boolean value
Throws:
IOException - if an error occurs


Copyright © 2002-2005 Jonas Bonér, Alexandre Vasseur. All Rights Reserved.