public TreeTextRange Translate()

in Backend/Core/ForTea.Core/Parsing/Ranges/T4DocumentToTreeTranslator.cs [16:46]


    public TreeTextRange Translate(DocumentRange documentRange)
    {
      if (!documentRange.IsValid()) return TreeTextRange.InvalidRange;
      if (!SourceFile.IsValid()) return TreeTextRange.InvalidRange;
      if (!FileLikeNode.IsValid()) return TreeTextRange.InvalidRange;

      if (documentRange.Document != SourceFile.Document)
      {
        // That document might appear among the includes
        var rangeFromIncludes = Includes
          .Select(include => include.DocumentRangeTranslator.Translate(documentRange))
          .Where(textRange => textRange.IsValid())
          // Allow FirstOrDefault to return null
          .Select<TreeTextRange, TreeTextRange?>(it => it)
          .FirstOrDefault();
        return rangeFromIncludes ?? TreeTextRange.InvalidRange;
      }

      // The range is in the same document as the source file we are responsible for,
      // so we have no choice but to handle the request ourselves
      (int documentStartOffset, int documentEndOffset) = documentRange.TextRange;
      var rootStartOffset = FileLikeNode.GetTreeStartOffset();

      // No includes, tree and document are matching
      if (!Includes.Any())
        return new TreeTextRange(rootStartOffset + documentStartOffset, rootStartOffset + documentEndOffset);

      var treeStartOffset = Translate(rootStartOffset + documentStartOffset);
      if (!treeStartOffset.IsValid()) return TreeTextRange.InvalidRange;
      return TreeTextRange.FromLength(treeStartOffset, documentRange.Length);
    }