diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java index 416d63e8f8ae..fe18a899ee48 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java @@ -29,6 +29,7 @@ import com.intellij.openapi.progress.util.ProgressWindowWithNotification; import com.intellij.util.Alarm; import com.sun.jdi.VMDisconnectedException; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; /** * @author lex @@ -43,6 +44,7 @@ public class DebuggerManagerThreadImpl extends InvokeAndWaitThread { myLock.lock(); try { + assertOpen(); getEventsList(priority).addFirst(event); myEventsAvailable.signalAll(); } @@ -65,6 +67,7 @@ public class EventQueue { myLock.lock(); try { + assertOpen(); getEventsList(priority).offer(event); myEventsAvailable.signalAll(); } @@ -80,6 +83,7 @@ public class EventQueue { public void close(){ myLock.lock(); try { + assertOpen(); myIsClosed = true; myEventsAvailable.signalAll(); } @@ -88,6 +92,10 @@ public class EventQueue { } } + private void assertOpen() { + if (myIsClosed) throw new AssertionError("Already closed"); + } + private E getEvent() throws EventQueueClosedException { myLock.lock(); try { @@ -120,4 +128,12 @@ public class EventQueue { public E getCurrentEvent() { return myCurrentEvent; } + + @TestOnly + public void clearQueue() { + myCurrentEvent = null; + for (LinkedList event : myEvents) { + event.clear(); + } + } }