|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.tc.object.bytecode.ManagerUtil
public class ManagerUtil
A bunch of static methods that make calling Manager method much easier from instrumented classes
Field Summary | |
---|---|
static java.lang.String |
CLASS
This class name |
static java.lang.String |
TYPE
This class type |
Method Summary | |
---|---|
static void |
arraycopy(java.lang.Object src,
int srcPos,
java.lang.Object dest,
int destPos,
int length)
Handle System.arraycopy() semantics with managed arrays |
static void |
beginLock(java.lang.String lockID,
int type)
Begin lock |
static void |
beginLock(java.lang.String lockID,
int type,
java.lang.String contextInfo)
Deprecated. |
static void |
beginLockWithoutTxn(java.lang.String lockID,
int type)
Deprecated. |
static void |
beginVolatile(java.lang.Object pojo,
long fieldOffset,
int type)
Begin volatile lock by field offset in the class |
static void |
beginVolatile(TCObjectExternal TCObjectExternal,
java.lang.String fieldName,
int type)
Begin volatile lock |
static void |
byteOrBooleanArrayChanged(java.lang.Object array,
int index,
byte value)
Indicate that byte or boolean in array changed |
static int |
calculateDsoHashCode(java.lang.Object obj)
|
static void |
charArrayChanged(char[] array,
int index,
char value)
Indicate that char in array changed |
static void |
charArrayCopy(char[] src,
int srcPos,
char[] dest,
int destPos,
int length,
TCObjectExternal tco)
Copy char[] |
static void |
checkWriteAccess(java.lang.Object context)
Check whether current context has write access |
static void |
clearSingleton()
|
static void |
commitLock(java.lang.String lockID,
int type)
Commit lock |
static void |
commitVolatile(java.lang.Object pojo,
long fieldOffset,
int type)
Commit volatile lock by field offset in the class |
static void |
commitVolatile(TCObjectExternal TCObjectExternal,
java.lang.String fieldName,
int type)
Commit volatile lock |
static java.lang.Object |
createOrReplaceRoot(java.lang.String rootName,
java.lang.Object object)
Create or replace root, typically used for replaceable roots. |
static boolean |
distributedMethodCall(java.lang.Object receiver,
java.lang.String method,
java.lang.Object[] params)
Perform distributed method call on all nodes |
static void |
distributedMethodCallCommit()
Commit DMI call |
static void |
doubleArrayChanged(double[] array,
int index,
double value)
Indicate that double in array changed |
static void |
enable()
Called when initialization has proceeded enough that the Manager can be used. |
static void |
enableSingleton(Manager singleton)
|
static void |
floatArrayChanged(float[] array,
int index,
float value)
Indicate that float in array changed |
static java.lang.Object |
get(java.lang.Object array,
int index)
For java.lang.reflect.Array.get() |
static java.lang.String |
getClientID()
Get JVM Client identifier |
static TCLogger |
getLogger(java.lang.String loggerName)
Get the named logger |
static Manager |
getManager()
|
static TCObjectExternal |
getObject(java.lang.Object array)
Get the TCO for an array |
static SessionConfiguration |
getSessionConfiguration(java.lang.String appName)
Get the configuration for the given application name (ie. |
static TCProperties |
getTCProperties()
|
static java.lang.String |
getUUID()
Get Unique Client identifier |
static void |
instrumentationMonitorEnter(java.lang.Object obj,
int type)
Deprecated. |
static void |
instrumentationMonitorExit(java.lang.Object obj,
int type)
Deprecated. |
static void |
intArrayChanged(int[] array,
int index,
int value)
Indicate that int in array changed |
static boolean |
isDsoMonitored(java.lang.Object obj)
Check whether an object is shared |
static boolean |
isDsoMonitorEntered(java.lang.Object obj)
Check whether dso MonitorExist is required |
static boolean |
isFieldPortableByOffset(java.lang.Object pojo,
long fieldOffset)
Returns true if the field represented by the offset is a portable field, i.e., not static and not dso transient |
static boolean |
isHeldByCurrentThread(java.lang.Object obj,
int lockLevel)
Check whether this lock is held by the current thread |
static boolean |
isLiteralInstance(java.lang.Object obj)
|
static boolean |
isLocked(java.lang.Object obj,
int lockLevel)
Check whether an object is locked at this lockLevel |
static boolean |
isLockHeldByCurrentThread(java.lang.String lockId,
int lockLevel)
Check whether this lock is held by the current thread |
static boolean |
isLogical(java.lang.Object obj)
Check whether object is logically instrumented |
static boolean |
isManaged(java.lang.Object obj)
Check whether an object is managed |
static boolean |
isManagerEnabled()
|
static boolean |
isPhysicallyInstrumented(java.lang.Class clazz)
Determine whether this class is physically instrumented |
static boolean |
isRoot(java.lang.reflect.Field field)
Check whether field is a root |
static int |
localHeldCount(java.lang.Object obj,
int lockLevel)
Get number of locks held locally on this object |
static void |
logicalInvoke(java.lang.Object object,
java.lang.String methodName,
java.lang.Object[] params)
Perform invoke on logical managed object |
static void |
logicalInvokeWithTransaction(java.lang.Object object,
java.lang.Object lockObject,
java.lang.String methodName,
java.lang.Object[] params)
Perform invoke on logical managed object in lock |
static void |
longArrayChanged(long[] array,
int index,
long value)
Indicate that long in array changed |
static TCObjectExternal |
lookupExistingOrNull(java.lang.Object pojo)
Find managed object, which may be null |
static java.lang.Object |
lookupObject(ObjectID id)
Look up object by ID, faulting into the JVM if necessary |
static java.lang.Object |
lookupObjectWithParentContext(ObjectID id,
ObjectID parentContext)
Look up object by ID, faulting into the JVM if necessary, This method also passes the parent Object context so that more intelligent prefetching is possible at the L2. |
static TCObjectExternal |
lookupOrCreate(java.lang.Object obj)
Find or create new TCObjectExternal |
static java.lang.Object |
lookupOrCreateRoot(java.lang.String name,
java.lang.Object object)
Look up or create a new root object |
static java.lang.Object |
lookupOrCreateRootNoDepth(java.lang.String name,
java.lang.Object obj)
Look up or create a new root object. |
static java.lang.Object |
lookupRoot(java.lang.String name)
Lookup root by name |
static void |
monitorEnter(java.lang.Object obj,
int type)
Enter synchronized monitor |
static void |
monitorEnter(java.lang.Object obj,
int type,
java.lang.String contextInfo)
Deprecated. |
static void |
monitorEnterInterruptibly(java.lang.Object obj,
int type)
Enter synchronized monitor (interruptibly). |
static void |
monitorExit(java.lang.Object obj,
int type)
Exit synchronized monitor |
static void |
objectArrayChanged(java.lang.Object[] array,
int index,
java.lang.Object value)
Indicate that object in array changed |
static void |
objectNotify(java.lang.Object obj)
Perform notify on obj |
static void |
objectNotifyAll(java.lang.Object obj)
Perform notifyAll on obj |
static void |
objectWait(java.lang.Object obj)
Perform untimed wait on obj |
static void |
objectWait(java.lang.Object obj,
long millis)
Perform timed wait on obj |
static void |
objectWait(java.lang.Object obj,
long millis,
int nanos)
Perform timed wait on obj |
static boolean |
overridesHashCode(java.lang.Object obj)
|
static void |
pinLock(java.lang.String lockID)
|
static void |
preFetchObject(ObjectID id)
Prefetch object by ID, faulting into the JVM if necessary, Async lookup and will not cause ObjectNotFoundException like lookupObject. |
static boolean |
prunedDistributedMethodCall(java.lang.Object receiver,
java.lang.String method,
java.lang.Object[] params)
Perform distributed method call on just this node |
static int |
queueLength(java.lang.Object obj)
Number in queue waiting on this lock |
static void |
register(java.lang.Object array,
TCObjectExternal obj)
Register an array with its TCO. |
static void |
registerNamedLoader(NamedClassLoader loader,
java.lang.String webAppName)
|
static void |
registerStatisticRetrievalAction(StatisticRetrievalAction sra)
|
static void |
set(java.lang.Object array,
int index,
java.lang.Object value)
This method is part of java.lang.reflect.Array and does the same as the set() method in the Sun JDK, the IBM version of the set method just adds a series of argument checks and then delegates to the native setImpl version. |
static void |
setBoolean(java.lang.Object array,
int index,
boolean z)
Set boolean value in array |
static void |
setByte(java.lang.Object array,
int index,
byte b)
Set byte value in array |
static void |
setChar(java.lang.Object array,
int index,
char c)
Set int value in array |
static void |
setDouble(java.lang.Object array,
int index,
double d)
Set double value in array |
static void |
setFloat(java.lang.Object array,
int index,
float f)
Set float value in array |
static void |
setImpl(java.lang.Object array,
int index,
java.lang.Object value)
This method is part of java.lang.reflect.Array and does the same as the set() method in the Sun JDK, the IBM version of the set method just adds a series of argument checks and then delegates to the native setImpl version. |
static void |
setInt(java.lang.Object array,
int index,
int i)
Set int value in array |
static void |
setLong(java.lang.Object array,
int index,
long l)
Set long value in array |
static void |
setShort(java.lang.Object array,
int index,
short s)
Set short value in array |
static void |
shortArrayChanged(short[] array,
int index,
short value)
Indicate that short in array changed |
static boolean |
tryBeginLock(java.lang.String lockID,
int type)
Try to begin lock |
static boolean |
tryBeginLock(java.lang.String lockID,
int type,
long timeoutInNanos)
Try to begin lock within a specific timespan |
static boolean |
tryMonitorEnter(java.lang.Object obj,
int type)
|
static boolean |
tryMonitorEnter(java.lang.Object obj,
int type,
long timeoutInNanos)
Try to enter monitor for specified object |
static void |
unpinLock(java.lang.String lockID)
|
static void |
waitForAllCurrentTransactionsToComplete()
|
static int |
waitLength(java.lang.Object obj)
Number in queue waiting on this wait() |
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 CLASS
public static final java.lang.String TYPE
Method Detail |
---|
public static void enable()
public static void enableSingleton(Manager singleton)
public static void clearSingleton()
public static boolean isManagerEnabled()
public static Manager getManager()
public static TCLogger getLogger(java.lang.String loggerName)
loggerName
- Logger name
public static boolean isPhysicallyInstrumented(java.lang.Class clazz)
clazz
- Class
public static java.lang.String getClientID()
public static java.lang.String getUUID()
public static void registerStatisticRetrievalAction(StatisticRetrievalAction sra)
public static java.lang.Object lookupOrCreateRoot(java.lang.String name, java.lang.Object object)
name
- Root nameobject
- Root object to use if none exists yet
public static java.lang.Object lookupOrCreateRootNoDepth(java.lang.String name, java.lang.Object obj)
name
- Root nameobj
- Root object to use if none exists yet
public static java.lang.Object createOrReplaceRoot(java.lang.String rootName, java.lang.Object object)
rootName
- Root nameobject
- Root object
public static void beginVolatile(java.lang.Object pojo, long fieldOffset, int type)
pojo
- Instance containing fieldfieldOffset
- Field offset in pojotype
- Lock levelpublic static void commitVolatile(java.lang.Object pojo, long fieldOffset, int type)
pojo
- Instance containing fieldfieldOffset
- Field offset in pojopublic static void beginVolatile(TCObjectExternal TCObjectExternal, java.lang.String fieldName, int type)
TCObjectExternal
- TCObjectExternal to lockfieldName
- Field name holding volatile objecttype
- Lock typepublic static void beginLock(java.lang.String lockID, int type)
lockID
- Lock identifiertype
- Lock type@Deprecated public static void beginLockWithoutTxn(java.lang.String lockID, int type)
@Deprecated public static void beginLock(java.lang.String lockID, int type, java.lang.String contextInfo)
lockID
- Lock identifiertype
- Lock typecontextInfo
- public static boolean tryBeginLock(java.lang.String lockID, int type)
lockID
- Lock identifiertype
- Lock type
public static boolean tryBeginLock(java.lang.String lockID, int type, long timeoutInNanos) throws java.lang.InterruptedException
lockID
- Lock identifiertype
- Lock typetimeoutInNanos
- Timeout in nanoseconds
java.lang.InterruptedException
public static void commitVolatile(TCObjectExternal TCObjectExternal, java.lang.String fieldName, int type)
TCObjectExternal
- Volatile object TCObjectExternalfieldName
- Field holding the volatile objectpublic static void commitLock(java.lang.String lockID, int type)
lockID
- Lock namepublic static void pinLock(java.lang.String lockID)
public static void unpinLock(java.lang.String lockID)
public static TCObjectExternal lookupExistingOrNull(java.lang.Object pojo)
pojo
- The object instance
public static void logicalInvoke(java.lang.Object object, java.lang.String methodName, java.lang.Object[] params)
object
- The objectmethodName
- The method to callparams
- The parameters to the methodpublic static void logicalInvokeWithTransaction(java.lang.Object object, java.lang.Object lockObject, java.lang.String methodName, java.lang.Object[] params)
object
- The objectlockObject
- The lock objectmethodName
- The method to callparams
- The parameters to the methodpublic static void distributedMethodCallCommit()
public static boolean prunedDistributedMethodCall(java.lang.Object receiver, java.lang.String method, java.lang.Object[] params)
receiver
- The receiver objectmethod
- The method to callparams
- The parameter valuespublic static boolean distributedMethodCall(java.lang.Object receiver, java.lang.String method, java.lang.Object[] params)
receiver
- The receiver objectmethod
- The method to callparams
- The parameter valuespublic static java.lang.Object lookupRoot(java.lang.String name)
name
- Name of root
public static java.lang.Object lookupObject(ObjectID id)
id
- Object identifier
TCClassNotFoundException
- If a class is not found during faultingpublic static void preFetchObject(ObjectID id)
id
- Object identifierpublic static java.lang.Object lookupObjectWithParentContext(ObjectID id, ObjectID parentContext)
id
- Object identifier of the object we are looking upparentContext
- Object identifier of the parent object
TCClassNotFoundException
- If a class is not found during faultingpublic static TCObjectExternal lookupOrCreate(java.lang.Object obj)
obj
- The object instance
public static void checkWriteAccess(java.lang.Object context)
context
- Context object
com.tc.object.util.ReadOnlyException
- If in read-only transactionpublic static boolean isManaged(java.lang.Object obj)
obj
- Instance
public static boolean isDsoMonitored(java.lang.Object obj)
obj
- Instance
public static boolean isDsoMonitorEntered(java.lang.Object obj)
public static boolean isLogical(java.lang.Object obj)
obj
- Instance
public static boolean isRoot(java.lang.reflect.Field field)
field
- Field
public static void objectNotify(java.lang.Object obj)
obj
- Instancepublic static void objectNotifyAll(java.lang.Object obj)
obj
- Instancepublic static void objectWait(java.lang.Object obj) throws java.lang.InterruptedException
obj
- Instance
java.lang.InterruptedException
public static void objectWait(java.lang.Object obj, long millis) throws java.lang.InterruptedException
obj
- Instancemillis
- Wait time
java.lang.InterruptedException
public static void objectWait(java.lang.Object obj, long millis, int nanos) throws java.lang.InterruptedException
obj
- Instancemillis
- Wait timenanos
- More wait time
java.lang.InterruptedException
public static void monitorEnter(java.lang.Object obj, int type)
obj
- Objecttype
- Lock type@Deprecated public static void monitorEnter(java.lang.Object obj, int type, java.lang.String contextInfo)
obj
- Objecttype
- Lock typecontextInfo
- Configuration text of the lockpublic static void monitorExit(java.lang.Object obj, int type)
obj
- Object@Deprecated public static void instrumentationMonitorEnter(java.lang.Object obj, int type)
@Deprecated public static void instrumentationMonitorExit(java.lang.Object obj, int type)
public static boolean isLiteralInstance(java.lang.Object obj)
literal type
, e.g., Class, Integer,
etc.public static int calculateDsoHashCode(java.lang.Object obj)
public static boolean isLocked(java.lang.Object obj, int lockLevel)
obj
- LocklockLevel
- Lock level
java.lang.NullPointerException
- If obj is nullpublic static boolean tryMonitorEnter(java.lang.Object obj, int type)
public static boolean tryMonitorEnter(java.lang.Object obj, int type, long timeoutInNanos) throws java.lang.InterruptedException
obj
- The object monitortimeoutInNanos
- Timeout in nanosecondstype
- The lock level
java.lang.NullPointerException
- If obj is null
java.lang.InterruptedException
public static void monitorEnterInterruptibly(java.lang.Object obj, int type) throws java.lang.InterruptedException
obj
- The object monitortype
- The lock level
java.lang.NullPointerException
- If obj is null
java.lang.InterruptedException
- If interrupted while entering or waitingpublic static int localHeldCount(java.lang.Object obj, int lockLevel)
obj
- The lock objectlockLevel
- The lock level
java.lang.NullPointerException
- If obj is nullpublic static boolean isHeldByCurrentThread(java.lang.Object obj, int lockLevel)
obj
- The locklockLevel
- The lock level
java.lang.NullPointerException
- If obj is nullpublic static boolean isLockHeldByCurrentThread(java.lang.String lockId, int lockLevel)
lockId
- The lock IDlockLevel
- The lock level
public static int queueLength(java.lang.Object obj)
obj
- The object
java.lang.NullPointerException
- If obj is nullpublic static int waitLength(java.lang.Object obj)
obj
- The object
java.lang.NullPointerException
- If obj is nullpublic static java.lang.Object get(java.lang.Object array, int index) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- The arrayindex
- Index into the array
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is not an array type
java.lang.ArrayIndexOutOfBoundsException
public static void setImpl(java.lang.Object array, int index, java.lang.Object value) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayvalue
- New value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void set(java.lang.Object array, int index, java.lang.Object value) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayvalue
- New value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setBoolean(java.lang.Object array, int index, boolean z) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayz
- New boolean value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setByte(java.lang.Object array, int index, byte b) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayb
- New byte value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setChar(java.lang.Object array, int index, char c) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayc
- New int value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setShort(java.lang.Object array, int index, short s) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrays
- New short value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setInt(java.lang.Object array, int index, int i) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayi
- New int value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setLong(java.lang.Object array, int index, long l) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayl
- New long value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setFloat(java.lang.Object array, int index, float f) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayf
- New float value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void setDouble(java.lang.Object array, int index, double d) throws java.lang.IllegalArgumentException, java.lang.ArrayIndexOutOfBoundsException
array
- Arrayindex
- Index in arrayd
- New double value
java.lang.NullPointerException
- If array is null
java.lang.IllegalArgumentException
- If array is an unexpected array type
java.lang.ArrayIndexOutOfBoundsException
- If index is not in valid range for arraypublic static void objectArrayChanged(java.lang.Object[] array, int index, java.lang.Object value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void shortArrayChanged(short[] array, int index, short value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void longArrayChanged(long[] array, int index, long value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void intArrayChanged(int[] array, int index, int value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void floatArrayChanged(float[] array, int index, float value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void doubleArrayChanged(double[] array, int index, double value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void charArrayChanged(char[] array, int index, char value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void byteOrBooleanArrayChanged(java.lang.Object array, int index, byte value)
array
- The arrayindex
- The index into arrayvalue
- The new valuepublic static void arraycopy(java.lang.Object src, int srcPos, java.lang.Object dest, int destPos, int length)
src
- Source arraysrcPos
- Start index in sourcedest
- Destination arraydestPos
- Destination start indexlength
- Number of items to copy
java.lang.NullPointerException
- If src or dest is nullpublic static TCObjectExternal getObject(java.lang.Object array)
array
- The array instance
public static void charArrayCopy(char[] src, int srcPos, char[] dest, int destPos, int length, TCObjectExternal tco)
src
- Source arraysrcPos
- Start in srcdest
- Destination arraydestPos
- Start in destlength
- Number of items to copytco
- TCObjectExternal for dest arraypublic static void register(java.lang.Object array, TCObjectExternal obj)
array
- Arrayobj
- TCObjectExternal
java.lang.NullPointerException
- if array or tco are nullpublic static TCProperties getTCProperties()
public static SessionConfiguration getSessionConfiguration(java.lang.String appName)
public static boolean isFieldPortableByOffset(java.lang.Object pojo, long fieldOffset)
pojo
- ObjectfieldOffset
- The index
public static boolean overridesHashCode(java.lang.Object obj)
public static void registerNamedLoader(NamedClassLoader loader, java.lang.String webAppName)
webAppName
- if this is a web application loader, the name of the associated web app as it would be declared
in a web-application element in the Terracotta config; or null, if this is not a web application loader.public static void waitForAllCurrentTransactionsToComplete()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |