public abstract class ElementInfo extends Object implements Cloneable
FieldInfo
Modifier and Type | Field and Description |
---|---|
static int |
ATTR_ATTRIBUTE_CHANGED |
static int |
ATTR_CONSTRUCTED |
static int |
ATTR_FREEZE_SHARED |
static int |
ATTR_IMMUTABLE |
static int |
ATTR_IS_FROZEN |
static int |
ATTR_IS_MARKED |
static int |
ATTR_LIVE_BIT |
static int |
ATTR_MARKED_OR_LIVE_BIT |
static int |
ATTR_PINDOWN_MASK |
static int |
ATTR_SHARED |
static int |
ATTR_TREF_CHANGED |
protected int |
attributes |
protected Memento<ElementInfo> |
cachedMemento |
protected ClassInfo |
ci |
protected Fields |
fields |
protected FieldLockInfo[] |
fLockInfo |
protected Monitor |
monitor |
protected int |
objRef |
protected ThreadInfoSet |
referencingThreads |
protected int |
sid |
Modifier | Constructor and Description |
---|---|
protected |
ElementInfo() |
protected |
ElementInfo(int id,
ClassInfo c,
Fields f,
Monitor m,
ThreadInfo ti) |
Modifier and Type | Method and Description |
---|---|
void |
addElementAttr(int idx,
Object a) |
void |
addElementAttrNoClone(int idx,
Object a)
<2do> those will be obsolete
|
void |
addFieldAttr(FieldInfo fi,
Object a) |
void |
addObjectAttr(Object a) |
int |
arrayLength() |
boolean[] |
asBooleanArray() |
Object |
asBoxObject() |
byte[] |
asByteArray() |
char[] |
asCharArray() |
double[] |
asDoubleArray() |
float[] |
asFloatArray() |
int[] |
asIntArray() |
long[] |
asLongArray() |
int[] |
asReferenceArray() |
short[] |
asShortArray() |
String |
asString() |
void |
block(ThreadInfo ti)
from a MONITOR_ENTER or sync INVOKExx if we cannot acquire the lock
note: this is not called from a NOTIFIED_UNBLOCKED state, so we don't have to restore NOTIFIED
|
boolean |
canLock(ThreadInfo th) |
protected void |
checkArray(int index) |
void |
checkArrayBounds(int index) |
protected void |
checkAssertion(boolean cond,
String failMsg) |
void |
checkConsistency() |
protected void |
checkIsModifiable() |
ElementInfo |
clone() |
void |
copyElements(ThreadInfo ti,
ElementInfo eiSrc,
int srcIdx,
int dstIdx,
int length)
this is the backend for System.arraycopy implementations, but since it only
throws general exceptions it can also be used in other contexts that require
type and objRef checking
note that we have to do some additional type checking here because we store
reference arrays as int[], i.e.
|
protected abstract ThreadInfoSet |
createThreadInfoSet(ThreadInfo ti) |
ElementInfo |
deepClone() |
void |
defreeze() |
ObjectList.Iterator |
elementAttrIterator(int idx) |
<T> ObjectList.TypedIterator<T> |
elementAttrIterator(int idx,
Class<T> type) |
boolean |
equals(Object o)
default implementation is just an identity check
|
boolean |
equalsString(String s)
just a helper to avoid creating objects just for the sake of comparing
|
ObjectList.Iterator |
fieldAttrIterator(FieldInfo fi) |
<T> ObjectList.TypedIterator<T> |
fieldAttrIterator(FieldInfo fi,
Class<T> type) |
void |
freeze() |
void |
freezeSharedness(boolean freeze) |
int |
get1SlotField(FieldInfo fi) |
long |
get2SlotField(FieldInfo fi) |
ArrayFields |
getArrayFields() |
String |
getArrayType() |
Object |
getBacktrackData() |
ThreadInfo[] |
getBlockedOrWaitingThreads() |
ThreadInfo[] |
getBlockedThreads() |
boolean |
getBooleanElement(int idx) |
boolean |
getBooleanField(FieldInfo fi) |
boolean |
getBooleanField(String fname) |
byte |
getByteElement(int idx) |
byte |
getByteField(FieldInfo fi) |
byte |
getByteField(String fname) |
Memento<ElementInfo> |
getCachedMemento() |
char |
getCharElement(int idx) |
char |
getCharField(FieldInfo fi) |
char |
getCharField(String fname) |
ClassInfo |
getClassInfo() |
boolean |
getDeclaredBooleanField(String fname,
String refType) |
byte |
getDeclaredByteField(String fname,
String refType) |
char |
getDeclaredCharField(String fname,
String refType) |
double |
getDeclaredDoubleField(String fname,
String refType) |
protected abstract FieldInfo |
getDeclaredFieldInfo(String clsBase,
String fname) |
float |
getDeclaredFloatField(String fname,
String refType) |
int |
getDeclaredIntField(String fname,
String clsBase) |
long |
getDeclaredLongField(String fname,
String clsBase) |
ElementInfo |
getDeclaredObjectField(String fname,
String referenceType) |
int |
getDeclaredReferenceField(String fname,
String clsBase) |
short |
getDeclaredShortField(String fname,
String refType) |
double |
getDoubleElement(int idx) |
double |
getDoubleField(FieldInfo fi) |
double |
getDoubleField(String fname) |
Object |
getElementAttr(int idx)
this returns all of them - use either if you know there will be only
one attribute at a time, or check/process result with ObjectList
|
<T> T |
getElementAttr(int idx,
Class<T> attrType)
this only returns the first attr of this type, there can be more
if you don't use client private types or the provided type is too general
|
ElementInfo |
getEnclosingElementInfo() |
Object |
getFieldAttr(FieldInfo fi)
this returns all of them - use either if you know there will be only
one attribute at a time, or check/process result with ObjectList
|
<T> T |
getFieldAttr(FieldInfo fi,
Class<T> attrType)
this only returns the first attr of this type, there can be more
if you don't use client private types or the provided type is too general
|
abstract FieldInfo |
getFieldInfo(int fieldIndex) |
protected abstract FieldInfo |
getFieldInfo(String fname) |
FieldLockInfo |
getFieldLockInfo(FieldInfo fi) |
Fields |
getFields()
BEWARE - never change the returned object without knowing about the
ElementInfo change status, this field is state managed!
|
Object |
getFieldValueObject(String fname) |
float |
getFloatElement(int idx) |
float |
getFloatField(FieldInfo fi) |
float |
getFloatField(String fname) |
int |
getHeapSize()
answer an estimate of the heap size in bytes (this is of course VM
dependent, but we can give an upper bound for the fields/elements, and that
should be good in terms of application specific properties)
|
int |
getIndex()
Deprecated.
|
ElementInfo |
getInstanceWithUpdatedSharedness(ThreadInfo ti)
update referencingThreads and set shared flag accordingly (if not frozen)
NOTE - this might return a new (cloned) ElementInfo in case the state stored/restored
flag has been changed.
|
int |
getIntElement(int idx) |
int |
getIntField(FieldInfo fi) |
int |
getIntField(String fname) |
int |
getLockCount() |
ThreadInfo |
getLockingThread() |
long |
getLongElement(int idx) |
long |
getLongField(FieldInfo fi) |
long |
getLongField(String fname) |
abstract ElementInfo |
getModifiableInstance() |
Monitor |
getMonitor()
BEWARE - never change the returned object without knowing about the
ElementInfo change status, this field is state managed!
|
<T> T |
getNextElementAttr(int idx,
Class<T> attrType,
Object prev) |
<T> T |
getNextFieldAttr(FieldInfo fi,
Class<T> attrType,
Object prev) |
<T> T |
getNextObjectAttr(Class<T> attrType,
Object prev) |
abstract int |
getNumberOfFields() |
protected abstract int |
getNumberOfFieldsOrElements() |
Object |
getObjectAttr()
this returns all of them - use either if you know there will be only
one attribute at a time, or check/process result with ObjectList
|
<T> T |
getObjectAttr(Class<T> attrType)
this only returns the first attr of this type, there can be more
if you don't use client private types or the provided type is too general
|
ElementInfo |
getObjectField(String fname) |
int |
getObjectRef() |
int |
getPinDownCount() |
int |
getReferenceElement(int idx) |
int |
getReferenceField(FieldInfo fi) |
int |
getReferenceField(String fname) |
short |
getShortElement(int idx) |
short |
getShortField(FieldInfo fi) |
short |
getShortField(String fname) |
int |
getSid() |
char[] |
getStringChars() |
String |
getStringField(String fname) |
String |
getType() |
ThreadInfo[] |
getWaitingThreads()
get a cloned list of the waiters for this object
|
boolean |
hasChanged() |
boolean |
hasElementAttr() |
boolean |
hasElementAttr(Class<?> attrType) |
boolean |
hasFieldAttr() |
boolean |
hasFieldAttr(Class<?> attrType) |
void |
hash(HashData hd) |
int |
hashCode() |
boolean |
hasObjectAttr() |
boolean |
hasObjectAttr(Class<?> attrType) |
boolean |
hasRefField(int objRef)
do we have a reference field with value objRef?
|
boolean |
hasWaitingThreads() |
boolean |
instanceOf(String type) |
boolean |
isAlive(boolean liveBitValue) |
boolean |
isArray() |
boolean |
isBoxObject()
is this a Number, a Boolean or a Character object
Note these classes are all final, so we don't have to check for subtypes
<2do> we should probably use a regular expression here
|
boolean |
isCharArray() |
boolean |
isConstructed() |
boolean |
isFrozen() |
boolean |
isImmutable() |
boolean |
isLocked() |
boolean |
isLockedBy(ThreadInfo ti) |
boolean |
isLocking(ThreadInfo ti) |
boolean |
isMarked() |
boolean |
isMarkedOrAlive(boolean liveBitValue) |
boolean |
isNull() |
abstract boolean |
isObject() |
boolean |
isPinnedDown() |
boolean |
isReferenceArray() |
boolean |
isReferencedBySameThreads(ElementInfo eiOther) |
boolean |
isReferencedByThread(ThreadInfo ti) |
boolean |
isShared() |
boolean |
isSharednessFrozen() |
boolean |
isStringObject() |
void |
lock(ThreadInfo ti)
from a MONITOR_ENTER or sync INVOKExx if we can acquire the lock
|
void |
lockNotified(ThreadInfo ti)
re-acquire lock after being notified.
|
void |
markUnchanged() |
void |
notifies(SystemState ss,
ThreadInfo ti)
notifies one of the waiters.
|
void |
notifies(SystemState ss,
ThreadInfo ti,
boolean hasToHoldLock) |
void |
notifiesAll()
notify all waiters.
|
int |
numberOfUserThreads() |
ObjectList.Iterator |
objectAttrIterator() |
<T> ObjectList.TypedIterator<T> |
objectAttrIterator(Class<T> type) |
void |
processReleaseActions()
object is recycled (after potential finalization)
|
protected boolean |
recycle()
this is called before the system attempts to reclaim the object.
|
void |
registerLockContender(ThreadInfo ti)
threads that will grab our lock on their next execution have to be
registered, so that they can be blocked in case somebody else gets
scheduled
|
void |
removeElementAttr(int idx,
Object a) |
void |
removeElementAttrNoClone(int idx,
Object a) |
void |
removeFieldAttr(FieldInfo fi,
Object a) |
void |
removeObjectAttr(Object a) |
void |
replaceElementAttr(int idx,
Object oldAttr,
Object newAttr) |
void |
replaceElementAttrNoClone(int idx,
Object oldAttr,
Object newAttr) |
void |
replaceFieldAttr(FieldInfo fi,
Object oldAttr,
Object newAttr) |
void |
replaceObjectAttr(Object oldAttr,
Object newAttr) |
void |
restore(int index,
int attributes,
Fields fields,
Monitor monitor) |
void |
restoreAttributes(int a) |
void |
restoreFields(Fields f) |
void |
restoreMonitor(Monitor m) |
void |
resumeNonlockedWaiter(ThreadInfo ti)
this is for waiters that did not own the lock
|
void |
set1SlotField(FieldInfo fi,
int newValue) |
void |
set2SlotField(FieldInfo fi,
long newValue) |
void |
setAlive(boolean liveBitValue) |
void |
setBooleanElement(int idx,
boolean value) |
void |
setBooleanField(FieldInfo fi,
boolean newValue) |
void |
setBooleanField(String fname,
boolean value) |
void |
setByteElement(int idx,
byte value) |
void |
setByteField(FieldInfo fi,
byte newValue) |
void |
setByteField(String fname,
byte value) |
void |
setCachedMemento(Memento<ElementInfo> memento) |
void |
setCharElement(int idx,
char value) |
void |
setCharField(FieldInfo fi,
char newValue) |
void |
setCharField(String fname,
char value) |
void |
setConstructed() |
void |
setDeclaredIntField(String fname,
String clsBase,
int value) |
void |
setDeclaredLongField(String fname,
String clsBase,
long value) |
void |
setDeclaredReferenceField(String fname,
String clsBase,
int value) |
void |
setDoubleElement(int idx,
double value) |
void |
setDoubleField(FieldInfo fi,
double newValue) |
void |
setDoubleField(String fname,
double value) |
void |
setElementAttr(int idx,
Object attr)
this replaces all of them - use only if you know
- there will be only one attribute at a time
- you obtained the value you set by a previous getXAttr()
- you constructed a multi value list with ObjectList.createList()
|
void |
setElementAttrNoClone(int idx,
Object attr)
this replaces all of them - use only if you know
- there will be only one attribute at a time
- you obtained the value you set by a previous getXAttr()
- you constructed a multi value list with ObjectList.createList()
|
void |
setFieldAttr(FieldInfo fi,
Object attr)
this replaces all of them - use only if you know
- there will be only one attribute at a time
- you obtained the value you set by a previous getXAttr()
- you constructed a multi value list with ObjectList.createList()
|
void |
setFieldLockInfo(FieldInfo fi,
FieldLockInfo flInfo) |
void |
setFloatElement(int idx,
float value) |
void |
setFloatField(FieldInfo fi,
float newValue) |
void |
setFloatField(String fname,
float value) |
void |
setIntElement(int idx,
int value) |
void |
setIntField(FieldInfo fi,
int newValue) |
void |
setIntField(String fname,
int value) |
void |
setLongElement(int idx,
long value) |
void |
setLongField(FieldInfo fi,
long newValue) |
void |
setLongField(String fname,
long value) |
void |
setMarked() |
void |
setObjectAttr(Object a)
this replaces all of them - use only if you know
- there will be only one attribute at a time
- you obtained the value you set by a previous getXAttr()
- you constructed a multi value list with ObjectList.createList()
|
void |
setObjectAttrNoClone(Object a)
this replaces all of them - use only if you know
- there will be only one attribute at a time
- you obtained the value you set by a previous getXAttr()
- you constructed a multi value list with ObjectList.createList()
|
void |
setObjectRef(int newObjRef) |
void |
setReferenceElement(int idx,
int value) |
void |
setReferenceField(FieldInfo fi,
int newValue) |
void |
setReferenceField(String fname,
int value) |
void |
setShared(boolean isShared) |
void |
setShortElement(int idx,
short value) |
void |
setShortField(FieldInfo fi,
short newValue) |
void |
setShortField(String fname,
short value) |
void |
setSid(int id) |
void |
setUnmarked() |
String |
toString() |
void |
unlock(ThreadInfo ti)
from a MONITOR_EXIT or sync method RETURN
release a possibly recursive lock if lockCount goes to zero
|
void |
unregisterLockContender(ThreadInfo ti)
somebody made up his mind and decided not to enter a synchronized section
of code it had registered before (e.g.
|
void |
wait(ThreadInfo ti,
long timeout)
wait to be notified.
|
void |
wait(ThreadInfo ti,
long timeout,
boolean hasToHoldLock) |
public static final int ATTR_PINDOWN_MASK
public static final int ATTR_IS_FROZEN
public static final int ATTR_IMMUTABLE
public static final int ATTR_CONSTRUCTED
public static final int ATTR_SHARED
public static final int ATTR_FREEZE_SHARED
public static final int ATTR_TREF_CHANGED
public static final int ATTR_ATTRIBUTE_CHANGED
public static final int ATTR_IS_MARKED
public static final int ATTR_LIVE_BIT
public static final int ATTR_MARKED_OR_LIVE_BIT
protected ClassInfo ci
protected Fields fields
protected Monitor monitor
protected ThreadInfoSet referencingThreads
protected int objRef
protected int attributes
protected FieldLockInfo[] fLockInfo
protected Memento<ElementInfo> cachedMemento
protected int sid
protected ElementInfo(int id, ClassInfo c, Fields f, Monitor m, ThreadInfo ti)
protected ElementInfo()
public abstract ElementInfo getModifiableInstance()
protected abstract ThreadInfoSet createThreadInfoSet(ThreadInfo ti)
public abstract boolean isObject()
public boolean hasChanged()
public FieldLockInfo getFieldLockInfo(FieldInfo fi)
public void setFieldLockInfo(FieldInfo fi, FieldLockInfo flInfo)
public void processReleaseActions()
public void setSid(int id)
public int getSid()
public Memento<ElementInfo> getCachedMemento()
public void setCachedMemento(Memento<ElementInfo> memento)
public boolean hasRefField(int objRef)
public int numberOfUserThreads()
public boolean isImmutable()
public void freeze()
public void defreeze()
public boolean isFrozen()
public void freezeSharedness(boolean freeze)
public boolean isSharednessFrozen()
public boolean isShared()
public void setShared(boolean isShared)
public boolean isReferencedBySameThreads(ElementInfo eiOther)
public boolean isReferencedByThread(ThreadInfo ti)
public ElementInfo getInstanceWithUpdatedSharedness(ThreadInfo ti)
protected boolean recycle()
public void hash(HashData hd)
public boolean equals(Object o)
Object
public ClassInfo getClassInfo()
protected abstract FieldInfo getDeclaredFieldInfo(String clsBase, String fname)
protected abstract int getNumberOfFieldsOrElements()
public boolean hasObjectAttr()
public boolean hasObjectAttr(Class<?> attrType)
public Object getObjectAttr()
public void setObjectAttr(Object a)
public void setObjectAttrNoClone(Object a)
public void addObjectAttr(Object a)
public void removeObjectAttr(Object a)
public <T> T getObjectAttr(Class<T> attrType)
public ObjectList.Iterator objectAttrIterator()
public <T> ObjectList.TypedIterator<T> objectAttrIterator(Class<T> type)
public boolean hasFieldAttr()
public boolean hasFieldAttr(Class<?> attrType)
public Object getFieldAttr(FieldInfo fi)
public void setFieldAttr(FieldInfo fi, Object attr)
public <T> T getFieldAttr(FieldInfo fi, Class<T> attrType)
public ObjectList.Iterator fieldAttrIterator(FieldInfo fi)
public <T> ObjectList.TypedIterator<T> fieldAttrIterator(FieldInfo fi, Class<T> type)
public boolean hasElementAttr()
public boolean hasElementAttr(Class<?> attrType)
public Object getElementAttr(int idx)
public void setElementAttr(int idx, Object attr)
public void setElementAttrNoClone(int idx, Object attr)
public void addElementAttr(int idx, Object a)
public void removeElementAttr(int idx, Object a)
public void addElementAttrNoClone(int idx, Object a)
public void removeElementAttrNoClone(int idx, Object a)
public void replaceElementAttrNoClone(int idx, Object oldAttr, Object newAttr)
public <T> T getElementAttr(int idx, Class<T> attrType)
public ObjectList.Iterator elementAttrIterator(int idx)
public <T> ObjectList.TypedIterator<T> elementAttrIterator(int idx, Class<T> type)
public void setBooleanField(String fname, boolean value)
public void setByteField(String fname, byte value)
public void setCharField(String fname, char value)
public void setShortField(String fname, short value)
public void setIntField(String fname, int value)
public void setLongField(String fname, long value)
public void setFloatField(String fname, float value)
public void setDoubleField(String fname, double value)
public void setReferenceField(String fname, int value)
public ElementInfo getEnclosingElementInfo()
public void setBooleanField(FieldInfo fi, boolean newValue)
public void setByteField(FieldInfo fi, byte newValue)
public void setCharField(FieldInfo fi, char newValue)
public void setShortField(FieldInfo fi, short newValue)
public void setIntField(FieldInfo fi, int newValue)
public void setLongField(FieldInfo fi, long newValue)
public void setFloatField(FieldInfo fi, float newValue)
public void setDoubleField(FieldInfo fi, double newValue)
public void setReferenceField(FieldInfo fi, int newValue)
public void set1SlotField(FieldInfo fi, int newValue)
public void set2SlotField(FieldInfo fi, long newValue)
public void setDeclaredReferenceField(String fname, String clsBase, int value)
public int getReferenceField(String fname)
public int getIntField(String fname)
public long getLongField(String fname)
public boolean getBooleanField(String fname)
public byte getByteField(String fname)
public char getCharField(String fname)
public double getDoubleField(String fname)
public float getFloatField(String fname)
public short getShortField(String fname)
public boolean getBooleanField(FieldInfo fi)
public byte getByteField(FieldInfo fi)
public char getCharField(FieldInfo fi)
public short getShortField(FieldInfo fi)
public int getIntField(FieldInfo fi)
public long getLongField(FieldInfo fi)
public float getFloatField(FieldInfo fi)
public double getDoubleField(FieldInfo fi)
public int getReferenceField(FieldInfo fi)
public int get1SlotField(FieldInfo fi)
public long get2SlotField(FieldInfo fi)
protected void checkArray(int index)
public boolean isReferenceArray()
public void copyElements(ThreadInfo ti, ElementInfo eiSrc, int srcIdx, int dstIdx, int length)
public void setBooleanElement(int idx, boolean value)
public void setByteElement(int idx, byte value)
public void setCharElement(int idx, char value)
public void setShortElement(int idx, short value)
public void setIntElement(int idx, int value)
public void setLongElement(int idx, long value)
public void setFloatElement(int idx, float value)
public void setDoubleElement(int idx, double value)
public void setReferenceElement(int idx, int value)
public boolean getBooleanElement(int idx)
public byte getByteElement(int idx)
public char getCharElement(int idx)
public short getShortElement(int idx)
public int getIntElement(int idx)
public long getLongElement(int idx)
public float getFloatElement(int idx)
public double getDoubleElement(int idx)
public int getReferenceElement(int idx)
public void setObjectRef(int newObjRef)
public int getObjectRef()
@Deprecated public int getIndex()
public int getLockCount()
public ThreadInfo getLockingThread()
public boolean isLocked()
public boolean isArray()
public boolean isCharArray()
public String getArrayType()
public Object getBacktrackData()
public boolean[] asBooleanArray()
public byte[] asByteArray()
public short[] asShortArray()
public char[] asCharArray()
public int[] asIntArray()
public long[] asLongArray()
public float[] asFloatArray()
public double[] asDoubleArray()
public int[] asReferenceArray()
public boolean isNull()
public ElementInfo getDeclaredObjectField(String fname, String referenceType)
public ElementInfo getObjectField(String fname)
public int getHeapSize()
public String getType()
public ThreadInfo[] getWaitingThreads()
public boolean hasWaitingThreads()
public ThreadInfo[] getBlockedThreads()
public ThreadInfo[] getBlockedOrWaitingThreads()
public int arrayLength()
public boolean isStringObject()
public String asString()
public char[] getStringChars()
public boolean equalsString(String s)
public boolean isBoxObject()
public Object asBoxObject()
public boolean canLock(ThreadInfo th)
public void checkArrayBounds(int index) throws ArrayIndexOutOfBoundsExecutiveException
public ElementInfo clone()
public ElementInfo deepClone()
public boolean instanceOf(String type)
public abstract int getNumberOfFields()
public abstract FieldInfo getFieldInfo(int fieldIndex)
public void registerLockContender(ThreadInfo ti)
public void unregisterLockContender(ThreadInfo ti)
public void block(ThreadInfo ti)
public void lock(ThreadInfo ti)
public void unlock(ThreadInfo ti)
public void notifies(SystemState ss, ThreadInfo ti)
public void notifies(SystemState ss, ThreadInfo ti, boolean hasToHoldLock)
public void notifiesAll()
public void wait(ThreadInfo ti, long timeout)
public void wait(ThreadInfo ti, long timeout, boolean hasToHoldLock)
public void lockNotified(ThreadInfo ti)
public void resumeNonlockedWaiter(ThreadInfo ti)
public int getPinDownCount()
public boolean isPinnedDown()
public boolean isConstructed()
public void setConstructed()
public void restoreFields(Fields f)
public Fields getFields()
public ArrayFields getArrayFields()
public void restoreMonitor(Monitor m)
public Monitor getMonitor()
public void restoreAttributes(int a)
public boolean isAlive(boolean liveBitValue)
public void setAlive(boolean liveBitValue)
public boolean isMarked()
public void setMarked()
public boolean isMarkedOrAlive(boolean liveBitValue)
public void markUnchanged()
public void setUnmarked()
protected void checkIsModifiable()
public boolean isLockedBy(ThreadInfo ti)
public boolean isLocking(ThreadInfo ti)
public void checkConsistency()
protected void checkAssertion(boolean cond, String failMsg)