}
boolean quiet = isSuspendVoteInProgress();
if (quiet) {
// evaluations are quiet when a suspend vote is in progress
// (conditional breakpoints, etc.).
fireEvent(new DebugEvent(this, DebugEvent.MODEL_SPECIFIC,
RESUME_QUIET));
} else {
fireResumeEvent(evaluationDetail);
}
// save and restore current breakpoint information - bug 30837
IBreakpoint[] breakpoints = getBreakpoints();
ISchedulingRule rule = null;
if (evaluationDetail == DebugEvent.EVALUATION_IMPLICIT) {
rule = getThreadRule();
}
try {
if (rule != null) {
Job.getJobManager().beginRule(rule, monitor);
}
if (monitor == null || !monitor.isCanceled()) {
evaluation.run(this, monitor);
}
} catch (DebugException e) {
throw e;
} finally {
if (rule != null) {
Job.getJobManager().endRule(rule);
}
synchronized (fEvaluationLock) {
fEvaluationRunnable = null;
fHonorBreakpoints = true;
fEvaluationLock.notifyAll();
}
if (getBreakpoints().length == 0 && breakpoints.length > 0) {
for (IBreakpoint breakpoint : breakpoints) {
addCurrentBreakpoint(breakpoint);
}
}
if (quiet) {
fireEvent(new DebugEvent(this, DebugEvent.MODEL_SPECIFIC,
SUSPEND_QUIET));
} else {
fireSuspendEvent(evaluationDetail);
}
if (fEvaluationInterrupted