Пример #1
0
        public static DocumentRange ToDocumentRange([CanBeNull] this ReparsedCodeCompletionContext context, [NotNull] ITreeNode treeNode)
        {
            var documentRange = treeNode.GetDocumentRange();

            if (context == null)
            {
                return(documentRange);
            }

            var reparsedTreeRange = treeNode.GetTreeTextRange();

            var document = documentRange.Document;

            if (document != null)
            {
                var originalDocRange = context.ToDocumentRange(reparsedTreeRange);
                return(new DocumentRange(document, originalDocRange));
            }
            else
            {
                var originalGeneratedTreeRange = context.ToOriginalTreeRange(reparsedTreeRange);
                var sandBox = treeNode.GetContainingNode <ISandBox>().NotNull("sandBox != null");

                var contextNode    = sandBox.ContextNode.NotNull("sandBox.ContextNode != null");
                var containingFile = contextNode.GetContainingFile().NotNull("containingFile != null");

                // todo: check for IFileImpl

                var translator        = containingFile.GetRangeTranslator();
                var originalTreeRange = translator.GeneratedToOriginal(originalGeneratedTreeRange);
                var originalDocRange  = translator.OriginalFile.GetDocumentRange(originalTreeRange);

                return(originalDocRange);
            }
        }