in core/src/main/java/com/jetbrains/sa/jdi/ThreadReferenceImpl.java [295:325]
public ObjectReferenceImpl currentContendedMonitor()
throws IncompatibleThreadStateException {
if (!vm().canGetCurrentContendedMonitor()) {
throw new UnsupportedOperationException();
}
if (myJavaThread == null) {
throw new IncompatibleThreadStateException();
}
ObjectMonitor mon = myJavaThread.getCurrentWaitingMonitor();
if (mon == null) {
// thread is not doing an Object.wait() call
mon = myJavaThread.getCurrentPendingMonitor();
if (mon != null) {
OopHandle handle = mon.object();
// If obj == NULL, then ObjectMonitor is raw which doesn't count
// as contended for this API
return vm().objectMirror(handle);
} else {
// no contended ObjectMonitor
return null;
}
} else {
// thread is doing an Object.wait() call
OopHandle handle = mon.object();
if (Assert.ASSERTS_ENABLED) {
Assert.that(handle != null, "Object.wait() should have an object");
}
return vm().objectMirror(handle);
}
}