iterateReplacements method

void iterateReplacements({
  1. dynamic onUnmodified(
    1. String string
    )?,
  2. dynamic onRemoval(
    1. String string
    )?,
  3. dynamic onAddition(
    1. String string
    )?,
})

Implementation

void iterateReplacements(
    {onUnmodified(String string)?,
    onRemoval(String string)?,
    onAddition(String string)?}) {
  _replacements.sort((r1, r2) => r1.span.compareTo(r2.span));

  var lastEdge = 0;
  for (_Replacement replacement in _replacements) {
    if (replacement.span.start.offset < lastEdge) {
      throw 'Overlapping replacement $replacement in replacements $_replacements.';
    }

    var unmodifiedText =
        sourceFile.getText(lastEdge, replacement.span.start.offset);
    var removalText = replacement.span.text;
    var additionText = replacement.newText;

    if (onUnmodified != null && unmodifiedText.isNotEmpty) {
      onUnmodified(unmodifiedText);
    }
    if (onRemoval != null && removalText.isNotEmpty) {
      onRemoval(removalText);
    }
    if (onAddition != null && additionText.isNotEmpty) {
      onAddition(additionText);
    }

    lastEdge = replacement.span.end.offset;
  }

  var unmodifiedText = sourceFile.getText(lastEdge);
  if (onUnmodified != null) {
    onUnmodified(unmodifiedText);
  }
}