package jetbrains.mps.debugger.java.runtime.engine.events;
/*Generated by MPS */
import com.sun.jdi.event.EventSet;
import com.sun.jdi.ThreadReference;
import org.jetbrains.annotations.NotNull;
import com.sun.jdi.event.LocatableEvent;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ISequenceClosure;
import com.sun.jdi.event.Event;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.debugger.java.runtime.engine.RequestManager;
public class EventContext implements Context {
private final EventSet myEventSet;
private int myVotesToVote;
private final EventsProcessor myEventProcessor;
private final ThreadReference myThreadReference;
public EventContext(@NotNull EventsProcessor eventProcessor, @NotNull EventSet eventSet) {
myEventSet = eventSet;
myEventProcessor = eventProcessor;
myVotesToVote = eventSet.size();
LocatableEvent event = (LocatableEvent) Sequence.fromIterable(Sequence.fromClosure(new ISequenceClosure<Event>() {
public Iterable<Event> iterable() {
return myEventSet;
}
})).findFirst(new IWhereFilter<Event>() {
public boolean accept(Event it) {
return it instanceof LocatableEvent;
}
});
myThreadReference = check_gqjtnu_a0f0e(event);
}
@Override
public int getSuspendPolicy() {
return myEventSet.suspendPolicy();
}
@Override
public ThreadReference getThread() {
return myThreadReference;
}
public RequestManager getRequestManager() {
return myEventProcessor.getRequestManager();
}
/*package*/ void vote() {
// only called from ContextManager
myVotesToVote--;
}
/*package*/ boolean isProcessed() {
// only called from ContextManager
return myVotesToVote == 0;
}
/*package*/ void resume() {
// only called from ContextManager
myEventSet.resume();
}
@NotNull
public EventSet getEventSet() {
return myEventSet;
}
private static ThreadReference check_gqjtnu_a0f0e(LocatableEvent checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.thread();
}
return null;
}
}