com.tc.object.bytecode.rwsync
Class SimpleLockMethodStrategy

java.lang.Object
  extended by com.tc.object.bytecode.rwsync.LockingMethodStrategy
      extended by com.tc.object.bytecode.rwsync.SimpleLockMethodStrategy
All Implemented Interfaces:
Opcodes, MethodStrategy

public class SimpleLockMethodStrategy
extends LockingMethodStrategy

Instrument a method by renaming it and then calling it inside a wrapper method that takes a ReadLock or WriteLock.

MethodStrategy instances are kept in statically initialized tables and reused, so implementations should not contain any mutable state.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.tc.object.bytecode.rwsync.LockingMethodStrategy
LockingMethodStrategy.LockType
 
Field Summary
 
Fields inherited from class com.tc.object.bytecode.rwsync.LockingMethodStrategy
lockField, lockTypeDesc, lockTypeName, THIS$0
 
Fields inherited from interface com.tc.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
SimpleLockMethodStrategy(LockingMethodStrategy.LockType lockType)
           
 
Method Summary
 MethodVisitor visitMethod(ClassVisitor cv, java.lang.String ownerType, java.lang.String outerType, java.lang.String outerDesc, int access, java.lang.String name, java.lang.String desc, java.lang.String signature, java.lang.String[] exceptions)
          Instrument a method, possibly creating other methods in the process.
 
Methods inherited from class com.tc.object.bytecode.rwsync.LockingMethodStrategy
callRenamedMethod, getWrappedAttributes, getWrappedName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SimpleLockMethodStrategy

public SimpleLockMethodStrategy(LockingMethodStrategy.LockType lockType)
Parameters:
lockField - the name of the field that is the lock. If the method owner is an inner class, the read lock field is assumed to belong to the outer class.
Method Detail

visitMethod

public MethodVisitor visitMethod(ClassVisitor cv,
                                 java.lang.String ownerType,
                                 java.lang.String outerType,
                                 java.lang.String outerDesc,
                                 int access,
                                 java.lang.String name,
                                 java.lang.String desc,
                                 java.lang.String signature,
                                 java.lang.String[] exceptions)
Description copied from interface: MethodStrategy
Instrument a method, possibly creating other methods in the process. A do-nothing implementation might look like:
   visitMethod(...) {
     return cv.visitMethod(access, name, desc, signature, exceptions);
   }
 
This would delegate the visitMethod() call to the next class adapter in the chain, returning a method visitor which could then be visited with the method's contents.

Parameters:
cv - a way of calling the next class adapter in the chain. Do not pass in the samed ClassVisitor that is invoking the method strategy, or you'll recurse endlessly! Note that cv.visitMethod may be called more than once during a single call to this method, and must return a distinct MethodVisitor instance for each call.
ownerType - the internal type name of the class that contains the method, e.g., "org/xyz/Foo$Bar"
outerType - null if ownerType is a top-level type, or else the internal type name of its outer class e.g. "org/xyz/Foo"
outerDesc - null if ownerType is a top-level type, or else the type descriptor of its outer class, e.g. "Lorg/xyz/Foo;"
Returns:
a method visitor which can be called with the contents of the original method. Implementations must not return null, but may return a visitor that ignores all calls.


Copyright © 2010 Terracotta, Inc.. All Rights Reserved.