@NotNull
  ShredImpl withRange(@NotNull TextRange rangeInDecodedPSI,
                      @NotNull TextRange rangeInHostElementPSI,
                      @NotNull PsiLanguageInjectionHost newHost) {
    SmartPsiFileRange rangeMarker = relevantRangeInHost;
    Segment oldRangeInHostElementPSI = calcRangeInsideHostElement(false);
    SmartPointerManagerImpl pointerManager = (SmartPointerManagerImpl)SmartPointerManager.getInstance(rangeMarker.getProject());
    SmartPsiElementPointer<PsiLanguageInjectionHost> newHostPointer = pointerManager.createSmartPsiElementPointer(newHost, newHost.getContainingFile(), true);

    if (!rangeInHostElementPSI.equals(TextRange.create(oldRangeInHostElementPSI))) {
      Segment hostElementRange = newHostPointer.getRange();
      rangeMarker = pointerManager
        .createSmartPsiFileRangePointer(rangeMarker.getContainingFile(), rangeInHostElementPSI.shiftRight(hostElementRange.getStartOffset()), true);
    }
    return new ShredImpl(rangeMarker, newHostPointer, prefix, suffix, rangeInDecodedPSI, usePsiRange, isOneLine);
  }
@NotNull
  ShredImpl withRange(@NotNull TextRange rangeInDecodedPSI,
                      @NotNull TextRange rangeInHostElementPSI,
                      @NotNull PsiLanguageInjectionHost newHost)