     @updateScrollbarsState() if @shouldUpdateScrollbarsState
     @updateHiddenInputState() if @shouldUpdateHiddenInputState
     @updateContentState() if @shouldUpdateContentState
-    @updateDecorations() if @shouldUpdateDecorations
+    @updateHighlightDecorations() if @shouldUpdateDecorations
     @updateTilesState() if @shouldUpdateTilesState
     @updateCursorsState() if @shouldUpdateCursorsState
     @updateOverlaysState() if @shouldUpdateOverlaysState

    @updateCommonGutterState()
    @updateReflowState()

    if @shouldUpdateLinesState or @shouldUpdateLineNumbersState
      @updateTilesState()
      @shouldUpdateTilesState = true

    @updating = false


    @emitDidUpdateState()

  fetchDecorations: ->
    @decorations = []

    return unless 0 <= @startRow <= @endRow <= Infinity

    for markerId, decorations of @model.decorationsForScreenRowRange(@startRow, @endRow - 1)
      range = @model.getMarker(markerId).getScreenRange()
      for decoration in decorations
        @decorations.push({decoration, range})

  updateLineDecorations: ->
    @rangesByDecorationId = {}
    @lineDecorationsByScreenRow = {}
    @lineNumberDecorationsByScreenRow = {}
    @customGutterDecorationsByGutterNameAndScreenRow = {}

    for {decoration, range} in @decorations
      if decoration.isType('line') or decoration.isType('gutter')
        @addToLineDecorationCaches(decoration, range)

    return

  updateHighlightDecorations: ->
    @visibleHighlights = {}

    for {decoration, range} in @decorations
      if decoration.isType('highlight')
        @updateHighlightState(decoration, range)

    for tileId, tileState of @state.content.tiles
      for id, highlight of tileState.highlights
