GetCorrectResolveLocation() public static method

public static GetCorrectResolveLocation ( IReadonlyTextDocument editor, MonoDevelop location ) : MonoDevelop.Ide.Editor.DocumentLocation
editor IReadonlyTextDocument
location MonoDevelop
return MonoDevelop.Ide.Editor.DocumentLocation
Ejemplo n.º 1
0
        public static HashSet <PossibleNamespace> GetPossibleNamespaces(Document doc, AstNode node, ref ResolveResult resolveResult)
        {
            var location = RefactoringService.GetCorrectResolveLocation(doc, doc.Editor.Caret.Location);

            if (resolveResult == null || resolveResult.Type.FullName == "System.Void")
            {
                resolveResult = GetHeuristicResult(doc, location, ref node) ?? resolveResult;
            }
            var foundNamespaces = GetPossibleNamespaces(doc, node, resolveResult, location);

            if (!(resolveResult is AmbiguousTypeResolveResult))
            {
                var usedNamespaces = RefactoringOptions.GetUsedNamespaces(doc, location);
                foundNamespaces = foundNamespaces.Where(n => !usedNamespaces.Contains(n.Namespace));
            }

            return(new HashSet <PossibleNamespace> (foundNamespaces));
        }
Ejemplo n.º 2
0
        public static bool ResolveAt(Document doc, out ResolveResult resolveResult, out AstNode node, CancellationToken token = default(CancellationToken))
        {
            if (!InternalResolveAt(doc, out resolveResult, out node))
            {
                var location = RefactoringService.GetCorrectResolveLocation(doc, doc.Editor.Caret.Location);
                resolveResult = GetHeuristicResult(doc, location, ref node);
                if (resolveResult == null)
                {
                    return(false);
                }
            }
            var oce = node as ObjectCreateExpression;

            if (oce != null)
            {
                node = oce.Type;
            }
            return(true);
        }
Ejemplo n.º 3
0
        protected override void Update(CommandArrayInfo ainfo)
        {
            var doc = IdeApp.Workbench.ActiveDocument;

            if (doc == null || doc.FileName == FilePath.Null || doc.ParsedDocument == null)
            {
                return;
            }

            ResolveResult resolveResult;
            AstNode       node;

            if (!ResolveAt(doc, out resolveResult, out node))
            {
                var location = RefactoringService.GetCorrectResolveLocation(doc, doc.Editor.Caret.Location);
                resolveResult = GetHeuristicResult(doc, location, ref node);
                if (resolveResult == null)
                {
                    return;
                }
            }
            var resolveMenu = new CommandInfoSet();

            resolveMenu.Text = GettextCatalog.GetString("Resolve");

            var possibleNamespaces = GetPossibleNamespaces(doc, node, ref resolveResult);

            bool addUsing = !(resolveResult is AmbiguousTypeResolveResult);

            if (addUsing)
            {
                foreach (var t in possibleNamespaces.Where(tp => tp.IsAccessibleWithGlobalUsing))
                {
                    string ns        = t.Namespace;
                    var    reference = t.Reference;
                    var    info      = resolveMenu.CommandInfos.Add(
                        t.GetImportText(),
                        new System.Action(new AddImport(doc, resolveResult, ns, reference, true, node).Run)
                        );
                    info.Icon = MonoDevelop.Ide.Gui.Stock.AddNamespace;
                }
            }

            bool resolveDirect = !(resolveResult is UnknownMemberResolveResult);

            if (resolveDirect)
            {
                if (resolveMenu.CommandInfos.Count > 0)
                {
                    resolveMenu.CommandInfos.AddSeparator();
                }
                if (node is ObjectCreateExpression)
                {
                    node = ((ObjectCreateExpression)node).Type;
                }
                foreach (var t in possibleNamespaces)
                {
                    string ns        = t.Namespace;
                    var    reference = t.Reference;
                    resolveMenu.CommandInfos.Add(t.GetInsertNamespaceText(doc.Editor.GetTextBetween(node.StartLocation, node.EndLocation)), new System.Action(new AddImport(doc, resolveResult, ns, reference, false, node).Run));
                }
            }

            if (resolveMenu.CommandInfos.Count > 0)
            {
                ainfo.Insert(0, resolveMenu);
            }
        }