protected void NavigateToVirtualTreePoint(Solution solution, VirtualTreePoint navigationPoint)
        {
            var documentToNavigate = solution.GetDocument(navigationPoint.Tree);
            var workspace = solution.Workspace;
            var navigationService = workspace.Services.GetService<IDocumentNavigationService>();

            if (navigationService.CanNavigateToPosition(workspace, documentToNavigate.Id, navigationPoint.Position, navigationPoint.VirtualSpaces))
            {
                navigationService.TryNavigateToPosition(workspace, documentToNavigate.Id, navigationPoint.Position, navigationPoint.VirtualSpaces);
            }
            else
            {
                var notificationService = workspace.Services.GetService<INotificationService>();
                notificationService.SendNotification(EditorFeaturesResources.TheDefinitionOfTheObjectIsHidden, severity: NotificationSeverity.Error);
            }
        }
        public EnvDTE.TextPoint CreateTextPoint(FileCodeModel fileCodeModel, VirtualTreePoint point)
        {
            var workspace = fileCodeModel.Workspace as VisualStudioWorkspaceImpl;
            var hostDocument = workspace.GetHostDocument(fileCodeModel.GetDocumentId());
            if (hostDocument == null)
            {
                return null;
            }

            using (var invisibleEditor = new InvisibleEditor(fileCodeModel.ServiceProvider, hostDocument.FilePath, needsSave: false, needsUndoDisabled: false))
            {
                var vsTextLines = invisibleEditor.VsTextLines;

                var line = point.GetContainingLine();
                var column = point.Position - line.Start + point.VirtualSpaces;
                Marshal.ThrowExceptionForHR(vsTextLines.CreateTextPoint(line.LineNumber, column, out var textPoint));
                return (EnvDTE.TextPoint)textPoint;
            }
        }
        public void TestCodeElementFromPointBetweenMembers()
        {
            var text = CurrentDocument.GetTextAsync().Result;
            var tree = CurrentDocument.GetSyntaxTreeAsync().Result;
            var position = text.ToString().IndexOf("protected virtual string MethodB", StringComparison.Ordinal) - 1;
            var virtualTreePoint = new VirtualTreePoint(tree, text, position);
            var textPoint = new MockTextPoint(virtualTreePoint, 4);

            Assert.Throws<COMException>(() =>
                CodeModel.CodeElementFromPoint(textPoint, vsCMElement.vsCMElementFunction));

            var element = CodeModel.CodeElementFromPoint(textPoint, vsCMElement.vsCMElementClass);
            Assert.Equal("A", element.Name);
        }
 public void TestCodeElementFromPoint()
 {
     var text = CurrentDocument.GetTextAsync().Result;
     var tree = CurrentDocument.GetSyntaxTreeAsync().Result;
     var position = text.ToString().IndexOf("DynamicMethod", StringComparison.Ordinal);
     var virtualTreePoint = new VirtualTreePoint(tree, text, position);
     var textPoint = new MockTextPoint(virtualTreePoint, 4);
     var scope = vsCMElement.vsCMElementFunction;
     var element = CodeModel.CodeElementFromPoint(textPoint, scope);
     Assert.Equal("DynamicMethod", element.Name);
 }
 public TextPoint(VirtualTreePoint point)
 {
     _point = point;
 }
 public EnvDTE.TextPoint CreateTextPoint(FileCodeModel fileCodeModel, VirtualTreePoint point)
 {
     return new TextPoint(point);
 }
 public EnvDTE.TextPoint CreateTextPoint(FileCodeModel fileCodeModel, VirtualTreePoint point)
 {
     return(new TextPoint(point));
 }
 public TextPoint(VirtualTreePoint point)
 {
     _point = point;
 }