private int getLogicalColumn(int startLogicalColumn, int offset) {
   assert offset >= startOffset;
   assert offset <= endOffset;
   int currentStartOffset = startOffset;
   for (LineFragment fragment : fragments) {
     int currentEndOffset = currentStartOffset + fragment.getLength();
     startLogicalColumn =
         fragment.offsetToLogicalColumn(
             startLogicalColumn, Math.min(offset, currentEndOffset) - currentStartOffset);
     currentStartOffset = currentEndOffset;
     if (offset <= currentStartOffset) break;
   }
   return startLogicalColumn;
 }