Exemplo n.º 1
0
 protected void evaluate(final AbstractEvaluationModel model) {
   if (!(myDebugSession.getEvaluationProvider().canEvaluate())) {
     setErrorText("Program should be paused on breakpoint to evaluate");
     return;
   }
   try {
     final Class clazz = model.generateAndLoadEvaluatorClass();
     setEvaluating(model);
     final DebugVMEventsProcessor eventsProcessor = myDebugSession.getEventsProcessor();
     eventsProcessor.invokeInManagerThreadAndFork(
         new _FunctionTypes._void_P0_E0() {
           public void invoke() {
             SuspendContext suspendContext =
                 eventsProcessor.getSuspendManager().getPausedContext();
             assert suspendContext != null;
             try {
               Evaluator evaluator = model.createEvaluatorInstance(clazz);
               suspendContext.setIsEvaluating(true);
               IValueProxy evaluatedValue = evaluator.evaluate();
               if (evaluatedValue != null) {
                 setSuccess(evaluatedValue, model);
               } else {
                 setFailure(null, "Evaluation returned null.", model);
               }
             } catch (EvaluationException e) {
               setFailure(e, null, model);
             } catch (Throwable t) {
               setFailure(t, null, model);
               LOG.error(t);
             } finally {
               suspendContext.setIsEvaluating(false);
             }
           }
         });
   } catch (InvalidEvaluatedExpressionException e) {
     setFailure(e.getCause(), null, model);
   } catch (InvocationTargetEvaluationException e) {
     setFailure(e.getCause(), null, model);
     LOG.error(e.getCause());
   } catch (EvaluationException e) {
     setFailure(e, null, model);
   } catch (Throwable t) {
     setFailure(t, null, model);
     LOG.error(t);
   }
 }