anchor.diff:    }
   
     void createActions() {
  +    actionManager = new ActionManager();
       actionManager.registerAction(new FileNewAction(this));
       actionManager.registerAction(new FileOpenAction(this));
       actionManager.registerAction(new FileSaveAction(this));
  
positive.code:     actionManager.registerAction(new ProjectOpenAction(this));
      actionManager.registerAction(new RunTestsAction(this));
      actionManager.registerAction(new AboutSparkAction(this));
    }
  
    void buildMenu() {
  
negative.code:     localPrefs = preferences.localStore;
      syncPrefs = preferences.syncStore;
  
      initAnalytics();
  
      addParticipant(new _SparkSetupParticipant(this));
  
      // TODO: this event is not being fired. A bug with chrome apps / Dartium?
      chrome.app.window.onClosed.listen((_) {
        close();
      });
  
      initWorkspace();
      initEditor();
      initEditorManager();
      initEditorArea();
      initEditorThemes();
      initFilesController();
  
      // Init the bootjack library (a wrapper around bootstrap).
      bootjack.Bootjack.useDefault();
  
      createActions();
      initToolbar();
      initSplitView();
    }
  
    String get appName => i18n('app_name');
  
    String get appVersion => chrome.runtime.getManifest()['version'];
  
    PlatformInfo get platformInfo => _platformInfo;
  
    void initAnalytics() {
      analytics.getService('Spark').then((service) {
        // Init the analytics tracker and send a page view for the main page.
        tracker = service.getTracker(_ANALYTICS_ID);
        tracker.sendAppView('main');
        _startTrackingExceptions();
      });
    }
  
    void initSplitView() {
      _splitView = new SplitView(querySelector('#splitview'));
      _splitView.onResized.listen((_) {
        editor.resize();
        syncPrefs.setValue('splitViewPosition', _splitView.position.toString());
      });
      syncPrefs.getValue('splitViewPosition').then((String position) {
        if (position != null) {
          int value = int.parse(position, onError: (_) => 0);
          if (value != 0) {
            _splitView.position = value;
          }
        }
      });
    }
  
    void initWorkspace() {
      workspace = new ws.Workspace(localPrefs);
    }
  
    void initEditorThemes() {
      syncPrefs.getValue('aceTheme').then((String theme) {
        if (theme != null && AceEditor.THEMES.contains(theme)) {
          editor.theme = theme;
        }
      });
    }
  
    void initEditor() {
      editor = new AceEditor(new DivElement());
    }
  
    void initEditorManager() {
      editorManager = new EditorManager(workspace, editor, localPrefs);
      editorManager.loaded.then((_) {
        List<ws.Resource> files = editorManager.files.toList();
  