|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.tc.object.bytecode.ByteCodeUtil
public class ByteCodeUtil
Utility methods for working with byte code.
Field Summary | |
---|---|
static java.lang.String |
DMI_METHOD_RENAME_PREFIX
|
static java.lang.String |
MANAGEABLE_CLASS
|
static java.lang.String |
MANAGEABLE_TYPE
|
static java.lang.String |
MANAGED_VALUES_GETTER
|
static java.lang.String |
MANAGED_VALUES_GETTER_DESCRIPTION
|
static java.lang.String |
MANAGED_VALUES_SETTER
|
static java.lang.String |
METHOD_RENAME_PREFIX
|
static java.lang.String |
NAMEDCLASSLOADER_CLASS
|
static java.lang.String |
NAMEDCLASSLOADER_TYPE
|
static java.lang.String |
SYNC_METHOD_RENAME_PREFIX
|
static java.lang.String |
TC_FIELD_PREFIX
|
static java.lang.String |
TC_METHOD_PREFIX
|
static java.lang.String |
TRANSPARENT_ACCESS_CLASS
|
static java.lang.String |
TRANSPARENT_ACCESS_TYPE
|
static java.lang.String |
VALUES_GETTER
|
static java.lang.String |
VALUES_GETTER_DESCRIPTION
|
static java.lang.String |
VALUES_SETTER
|
static java.lang.String |
VALUES_SETTER_DESCRIPTION
|
Constructor Summary | |
---|---|
ByteCodeUtil()
|
Method Summary | |
---|---|
static java.lang.String[] |
addInterface(java.lang.String[] existing,
java.lang.String toAdd)
|
static java.lang.String[] |
addInterfaces(java.lang.String[] existing,
java.lang.String[] toAdd)
Given a set of existing interfaces, add some more (without duplicates) |
static void |
addTypeSpecificParameterLoad(MethodVisitor c,
Type type,
int offset)
Add instructions to load type-specific value from local variable onto stack. |
static java.lang.String |
classNameToFileName(java.lang.String className)
Translate class name to file name |
static java.lang.String |
classNameToInternalName(java.lang.String className)
Translate class name to an internal name as used by ASM |
static java.lang.String |
codeToName(java.lang.String typeCode)
Translate type code to type name |
static void |
createParametersToArrayByteCode(MethodVisitor c,
Type[] parameters)
Add instructions to convert the local variables typed with parameters into an array assuming values start at local variable offset of 1 |
static void |
createParametersToArrayByteCode(MethodVisitor c,
Type[] parameters,
int offset)
Add instructions to convert the parameters into an array |
static java.lang.String |
fieldGetterMethod(java.lang.String fieldName)
Get name of synthetic field getter method added by Terracotta |
static java.lang.String |
fieldSetterMethod(java.lang.String fieldName)
Get name of synthetic field setter method added by Terracotta |
static java.lang.String |
generateAutolockName(ObjectID id)
Get auto lock name for object identifier |
static java.lang.String |
generateLiteralLockName(java.lang.String literalValueTypeStr,
java.lang.Object obj)
The first argument should be "LiteralValues.valueFor(obj).name()", but I didn't want to slurp in a whole mess of classes into the boot jar by including LiteralValues. |
static java.lang.String |
generateNamedLockName(java.lang.Object obj)
Get named lock name for the lock object |
static java.lang.String |
generateVolatileLockName(ObjectID id,
java.lang.String fieldName)
Get volatile lock name |
static byte[] |
getBytesForClass(java.lang.String className,
java.lang.ClassLoader loader)
Read the bytes defining the class |
static byte[] |
getBytesForInputstream(java.io.InputStream is)
Read input stream into a byte array using a 4k buffer. |
static int |
getFirstLocalVariableOffset(int callingMethodModifier,
java.lang.String desc)
Get offset of first local variable after method args |
static int |
getLocalVariableOffset(int methodModifier)
Returns 0 if the method is static. |
static boolean |
isAutolockName(java.lang.String lockName)
Determine whether a lock is an autolock based on its name |
static boolean |
isParent(java.lang.String fieldName)
Check whether the field name indicates that this is an inner classes synthetic field referring to the parent "this" reference. |
static boolean |
isPrimitive(Type t)
Check whether the type is a primitve |
static boolean |
isSynthetic(int access)
Determine whether an access modifier code indicates synthetic |
static boolean |
isSynthetic(java.lang.String fieldName)
Determine whether a field is synthetic |
static boolean |
isTCSynthetic(java.lang.String fieldName)
Determine whether a field is synthetic and was added by Terracotta |
static java.lang.String |
methodDescriptionToMethodArgument(java.lang.String desc)
Turn method description with byte code types into a readable signature |
static java.lang.String |
methodDescriptionToReturnType(java.lang.String desc)
Get return type (class name) from method descriptor |
static long |
objectIdFromLockName(java.lang.String lockName)
Get lock ID from autolock name |
static void |
prepareStackForMethodCall(int callingMethodModifier,
java.lang.String desc,
MethodVisitor c)
Push this (if not static) and all method args onto stack |
static java.lang.reflect.Method[] |
purgeTCMethods(java.lang.reflect.Method[] methods)
|
static void |
pushDefaultValue(int variable,
MethodVisitor c,
Type type)
Assign the default value to the variable |
static void |
pushInstanceVariable(MethodVisitor c,
java.lang.String className,
java.lang.String fieldName,
java.lang.String description)
Add instruction to retrieve specified field in the object on the stack and replace with the field value. |
static void |
pushMethodArguments(int callingMethodModifier,
java.lang.String desc,
MethodVisitor c)
Add instructions to load method args into the stack |
static void |
pushThis(MethodVisitor c)
Add instruction to retrieve "this" from the local vars and load onto the stack |
static java.lang.String |
sortToPrimitiveMethodName(int sort)
Convert from Type.getSort() to a primitive method name like "booleanValue". |
static java.lang.String |
sortToWrapperName(int sort)
Map from primite type to wrapper class type |
static java.lang.String |
stripGeneratedLockHeader(java.lang.String lockName)
Strip generated lock header from lock name |
static void |
systemOutPrintln(MethodVisitor mv,
java.lang.String msg)
Add instructions to print msg to System.out |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String TC_FIELD_PREFIX
public static final java.lang.String TC_METHOD_PREFIX
public static final java.lang.String METHOD_RENAME_PREFIX
public static final java.lang.String SYNC_METHOD_RENAME_PREFIX
public static final java.lang.String DMI_METHOD_RENAME_PREFIX
public static final java.lang.String VALUES_GETTER
public static final java.lang.String VALUES_GETTER_DESCRIPTION
public static final java.lang.String VALUES_SETTER
public static final java.lang.String VALUES_SETTER_DESCRIPTION
public static final java.lang.String MANAGED_VALUES_GETTER
public static final java.lang.String MANAGED_VALUES_GETTER_DESCRIPTION
public static final java.lang.String MANAGED_VALUES_SETTER
public static final java.lang.String MANAGEABLE_CLASS
public static final java.lang.String MANAGEABLE_TYPE
public static final java.lang.String TRANSPARENT_ACCESS_CLASS
public static final java.lang.String TRANSPARENT_ACCESS_TYPE
public static final java.lang.String NAMEDCLASSLOADER_CLASS
public static final java.lang.String NAMEDCLASSLOADER_TYPE
Constructor Detail |
---|
public ByteCodeUtil()
Method Detail |
---|
public static java.lang.reflect.Method[] purgeTCMethods(java.lang.reflect.Method[] methods)
public static java.lang.String[] addInterface(java.lang.String[] existing, java.lang.String toAdd)
public static java.lang.String[] addInterfaces(java.lang.String[] existing, java.lang.String[] toAdd)
existing
- The existing interfacestoAdd
- The interfaces to add
public static boolean isPrimitive(Type t)
t
- The ASM type
public static java.lang.String sortToWrapperName(int sort)
sort
- Kind of primitve type as in Type.getSort()
public static java.lang.String codeToName(java.lang.String typeCode)
typeCode
- Code from bytecode like B, C, etc
public static boolean isAutolockName(java.lang.String lockName)
lockName
- The lock name
public static long objectIdFromLockName(java.lang.String lockName)
lockName
- The lock name
java.lang.IllegalArgumentException
- If not an autolockpublic static boolean isSynthetic(java.lang.String fieldName)
fieldName
- The field name
public static boolean isTCSynthetic(java.lang.String fieldName)
fieldName
- The field name
public static boolean isSynthetic(int access)
access
- Access modifier code
public static boolean isParent(java.lang.String fieldName)
fieldName
- The field name
public static void pushThis(MethodVisitor c)
c
- The current method visitorpublic static void pushInstanceVariable(MethodVisitor c, java.lang.String className, java.lang.String fieldName, java.lang.String description)
c
- Current method visitorclassName
- The field classfieldName
- The field namedescription
- The field typepublic static void createParametersToArrayByteCode(MethodVisitor c, Type[] parameters)
c
- Method visitorparameters
- Paramater to convertpublic static void createParametersToArrayByteCode(MethodVisitor c, Type[] parameters, int offset)
c
- Method visitorparameters
- Paramater types to convertoffset
- Offset into local variables for valuespublic static void addTypeSpecificParameterLoad(MethodVisitor c, Type type, int offset)
c
- Method visitortype
- The type of the variableoffset
- The local variable offsetpublic static void pushMethodArguments(int callingMethodModifier, java.lang.String desc, MethodVisitor c)
callingMethodModifier
- Calling method modifierdesc
- Method descriptorc
- Current method visitorpublic static int getFirstLocalVariableOffset(int callingMethodModifier, java.lang.String desc)
callingMethodModifier
- Calling method modifierdesc
- Method descriptor
public static void prepareStackForMethodCall(int callingMethodModifier, java.lang.String desc, MethodVisitor c)
callingMethodModifier
- Calling method modifierdesc
- Method descriptorc
- Calling method visitorpublic static int getLocalVariableOffset(int methodModifier)
methodModifier
-
public static java.lang.String generateVolatileLockName(ObjectID id, java.lang.String fieldName)
id
- Object identifierfield
- Volatile field
public static java.lang.String generateAutolockName(ObjectID id)
id
- Identifier
public static java.lang.String generateNamedLockName(java.lang.Object obj)
obj
- Lock object
public static java.lang.String generateLiteralLockName(java.lang.String literalValueTypeStr, java.lang.Object obj)
literalValueTypeStr
- Literal value codeobj
- The lock objectpublic static java.lang.String stripGeneratedLockHeader(java.lang.String lockName)
lockName
- Lock name
public static java.lang.String sortToPrimitiveMethodName(int sort)
Type.getSort()
to a primitive method name like "booleanValue".
Type
- kind
public static java.lang.String methodDescriptionToReturnType(java.lang.String desc)
desc
- Method descriptor
public static java.lang.String methodDescriptionToMethodArgument(java.lang.String desc)
desc
- The bytecode description
public static java.lang.String fieldGetterMethod(java.lang.String fieldName)
fieldName
- The field name
public static java.lang.String fieldSetterMethod(java.lang.String fieldName)
fieldName
- The field name
public static void systemOutPrintln(MethodVisitor mv, java.lang.String msg)
mv
- Method visitormsg
- Message to printpublic static final java.lang.String classNameToFileName(java.lang.String className)
className
- The class name "java.lang.String"
public static final java.lang.String classNameToInternalName(java.lang.String className)
className
- The class name "java.lang.String"
public static final byte[] getBytesForClass(java.lang.String className, java.lang.ClassLoader loader) throws java.lang.ClassNotFoundException
className
- The classloader
- The classloader
java.lang.ClassNotFoundException
public static final byte[] getBytesForInputstream(java.io.InputStream is) throws java.io.IOException
is
- Input stream
java.io.IOException
- If there is an error reading the streampublic static void pushDefaultValue(int variable, MethodVisitor c, Type type)
variable
- The local variable to which the default value will be assignedc
- MethodVisitortype
- Type of the variable
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |