private void updateMappingForToken(int i) {
      int data = getSegmentData(i);
      IElementType token = getSegments().unpackTokenFromData(data);
      Mapper mapper = getMappingDocument(token);
      MappedRange oldMapping = myRanges[i];
      if (mapper != null) {
        freezeHighlighter(mapper);
        if (oldMapping != null) {
          if (oldMapping.mapper == mapper && oldMapping.outerToken == token) {
            mapper.updateMapping(i, oldMapping);
          }
          else {
            oldMapping.mapper.removeMapping(oldMapping);
            myRanges[i] = mapper.insertMapping(i, token);
          }
        }
        else {
          myRanges[i] = mapper.insertMapping(i, token);
        }
      }
      else {
        if (oldMapping != null) {
          freezeHighlighter(oldMapping.mapper);
          oldMapping.mapper.removeMapping(oldMapping);
          myRanges[i] = null;
        }
      }
    }
private void updateMappingForToken(int i)