|
||||||||||
| 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 visitor
public 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 type
public static void createParametersToArrayByteCode(MethodVisitor c,
Type[] parameters)
c - Method visitorparameters - Paramater to convert
public static void createParametersToArrayByteCode(MethodVisitor c,
Type[] parameters,
int offset)
c - Method visitorparameters - Paramater types to convertoffset - Offset into local variables for values
public static void addTypeSpecificParameterLoad(MethodVisitor c,
Type type,
int offset)
c - Method visitortype - The type of the variableoffset - The local variable offset
public static void pushMethodArguments(int callingMethodModifier,
java.lang.String desc,
MethodVisitor c)
callingMethodModifier - Calling method modifierdesc - Method descriptorc - Current method visitor
public 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 stream
public 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 | |||||||||