@Override
 public TextRange getHostRange(int hostOffset) {
   synchronized (myLock) {
     for (PsiLanguageInjectionHost.Shred shred : myShreds) {
       Segment currentRange = shred.getHostRangeMarker();
       if (currentRange == null) continue;
       TextRange textRange = ProperTextRange.create(currentRange);
       if (textRange.grown(1).contains(hostOffset)) return textRange;
     }
   }
   return null;
 }
 private static int appendRange(List<TextRange> result, int start, int length) {
   if (length > 0) {
     int lastIndex = result.size() - 1;
     TextRange lastRange = lastIndex >= 0 ? result.get(lastIndex) : null;
     if (lastRange != null && lastRange.getEndOffset() == start) {
       result.set(lastIndex, lastRange.grown(length));
     } else {
       result.add(TextRange.from(start, length));
     }
   }
   return start + length;
 }