private void maybeAnchorExecutionLine() {
   PathUtil callFramePath = debuggerState.getActiveCallFramePath();
   if (callFramePath != null && callFramePath.equals(path)) {
     int lineNumber = debuggerState.getActiveCallFrameExecutionLineNumber();
     if (lineNumber >= 0) {
       debuggingModelRenderer.renderExecutionLine(lineNumber);
     }
   }
 }
  private void handleOnCallFrameSelect(int callFrameDepth) {
    debuggerState.setActiveCallFrameIndex(callFrameDepth);
    debuggingModelRenderer.renderDebuggerCallFrame();

    PathUtil callFramePath = debuggerState.getActiveCallFramePath();
    if (callFramePath == null) {
      // Not paused, remove the execution line (if any).
      debuggingModelRenderer.removeExecutionLine();
      return;
    }

    maybeAnchorExecutionLine();

    int lineNumber = debuggerState.getActiveCallFrameExecutionLineNumber();
    maybeNavigateToDocument(callFramePath, lineNumber);
  }
  private DebuggingModelController(
      Place currentPlace,
      AppContext appContext,
      DebuggingModel debuggingModel,
      Editor editor,
      EditorPopupController editorPopupController,
      DocumentManager documentManager) {
    this.appContext = appContext;
    this.editor = editor;
    this.currentPlace = currentPlace;
    this.debuggingModel = debuggingModel;
    this.leftGutterClickListenerRemover =
        editor.getLeftGutter().getClickListenerRegistrar().add(leftGutterClickListener);

    // Every time we enter workspace, we get a new debugging session id.
    String sessionId =
        BootstrapSession.getBootstrapSession().getActiveClientId()
            + ":"
            + System.currentTimeMillis();
    this.debuggerState = DebuggerState.create(sessionId);

    this.debuggingSidebar = DebuggingSidebar.create(appContext.getResources(), debuggerState);
    this.debuggingModelRenderer =
        DebuggingModelRenderer.create(appContext, editor, debuggingSidebar, debuggerState);
    this.cssLiveEditController = new CssLiveEditController(debuggerState, documentManager);
    this.evaluationPopupController =
        EvaluationPopupController.create(
            appContext.getResources(), editor, editorPopupController, debuggerState);

    this.debuggingModel.addModelChangeListener(debuggingModelChangeListener);
    this.debuggerState.getDebuggerStateListenerRegistrar().add(debuggerStateListener);
    this.debuggingSidebar.getDebuggerCommandListenerRegistrar().add(userCommandListener);
  }
  private boolean runApplication(SourceMapping sourceMapping, String absoluteResourceUri) {
    if (debuggerState.isDebuggerAvailable()) {
      debuggerState.runDebugger(sourceMapping, absoluteResourceUri);

      JsonArray<Breakpoint> allBreakpoints = debuggingModel.getBreakpoints();
      for (int i = 0; i < allBreakpoints.size(); ++i) {
        debuggerState.setBreakpoint(allBreakpoints.get(i));
      }

      debuggerState.setBreakpointsEnabled(debuggingModel.isBreakpointsEnabled());
      return true;
    } else {
      Window popup = createOrOpenPopup(appContext);
      if (popup != null) {
        popup.getLocation().assign(absoluteResourceUri);
        // Show the sidebar once to promote the Debugger Extension.
        maybeShowSidebar();
      }
      return false;
    }
  }
 public void cleanup() {
   debuggerState.shutdown();
   leftGutterClickListenerRemover.remove();
 }