public static GetCorrectResolveLocation ( IReadonlyTextDocument editor, MonoDevelop location ) : MonoDevelop.Ide.Editor.DocumentLocation | ||
editor | IReadonlyTextDocument | |
location | MonoDevelop | |
return | MonoDevelop.Ide.Editor.DocumentLocation |
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)); }
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); }
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); } }