From 104811c874b4609c85ccd0e8d01967f919a7af74 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 9 Mar 2012 17:07:02 +0100 Subject: [PATCH] Implemented Ctrl+Click -> Go to definition. --- .../AvalonEdit.AddIn/Src/CodeEditorView.cs | 7 +++---- .../ICSharpCode.AvalonEdit/TextViewPosition.cs | 4 ++-- .../Editor/Commands/SymbolUnderCaretMenuCommand.cs | 12 +++++++++--- src/Main/Base/Project/Src/Gui/Dialogs/GotoDialog.cs | 3 +-- .../Project/Src/Gui/Pads/TaskList/TaskListPad.cs | 2 +- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs index 5b7c31ae83..a25bf7b360 100755 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs @@ -481,10 +481,9 @@ namespace ICSharpCode.AvalonEdit.AddIn var position = GetPositionFromPoint(e.GetPosition(this)); if (position == null) return; - throw new NotImplementedException(); - //Core.AnalyticsMonitorService.TrackFeature(typeof(GoToDefinition).FullName, "Ctrl+Click"); - //var goToDefinitionCommand = new GoToDefinition(); - //goToDefinitionCommand.Run(this.Adapter, this.Document.GetOffset(position.Value)); + Core.AnalyticsMonitorService.TrackFeature(typeof(GoToDefinition).FullName, "Ctrl+Click"); + var goToDefinitionCommand = new GoToDefinition(); + goToDefinitionCommand.Run(this.Adapter, this.Document.GetOffset(position.Value.Location)); e.Handled = true; } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs index d2eb599aad..9a64c3ef73 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs @@ -97,9 +97,9 @@ namespace ICSharpCode.AvalonEdit } /// - /// Implicit conversion to . + /// Obsolete. Use the Location property instead. /// - [Obsolete("Avoid")] + [Obsolete("Use the Location property instead.")] public static implicit operator TextLocation(TextViewPosition position) { return new TextLocation(position.Line, position.Column); diff --git a/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs b/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs index de54ec034d..70c8e96730 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs @@ -3,6 +3,7 @@ using System; using ICSharpCode.Core; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop.Gui; @@ -19,12 +20,17 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands { ITextEditorProvider editorProvider = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorProvider; if (editorProvider != null) { - ITextEditor editor = editorProvider.TextEditor; - var resolveResult = ParserService.Resolve(editor.FileName, editor.Caret.Location, editor.Document); - RunImpl(editor, editor.Caret.Offset, resolveResult); + Run(editorProvider.TextEditor, editorProvider.TextEditor.Caret.Offset); } } + public void Run(ITextEditor editor, int caretOffset) + { + var location = editor.Document.GetLocation(caretOffset); + var resolveResult = ParserService.Resolve(editor.FileName, location, editor.Document); + RunImpl(editor, editor.Caret.Offset, resolveResult); + } + protected abstract void RunImpl(ITextEditor editor, int caretOffset, ResolveResult symbol); protected IEntity GetEntity(ResolveResult symbol) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/GotoDialog.cs b/src/Main/Base/Project/Src/Gui/Dialogs/GotoDialog.cs index 35e1a71d31..e8b7d7e3e0 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/GotoDialog.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/GotoDialog.cs @@ -234,8 +234,7 @@ namespace ICSharpCode.SharpDevelop.Gui foreach (IProject project in ProjectService.OpenSolution.Projects) { IProjectContent projectContent = project.ProjectContent; if (projectContent != null) { - #warning also consider nested types - foreach (IUnresolvedTypeDefinition c in projectContent.TopLevelTypeDefinitions) { + foreach (IUnresolvedTypeDefinition c in projectContent.GetAllTypeDefinitions()) { string className = c.Name; if (className.Length >= text.Length) { if (className.IndexOf(text, StringComparison.OrdinalIgnoreCase) >= 0) { diff --git a/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs b/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs index 7fafba8a10..8f3bce8248 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs @@ -202,7 +202,7 @@ namespace ICSharpCode.SharpDevelop.Gui return WorkbenchSingleton.Workbench.ViewContentCollection.OfType().Any(provider => item.FileName == provider.TextEditor.FileName); case 3: // Document - return WorkbenchSingleton.Workbench.ActiveViewContent != null && WorkbenchSingleton.Workbench.ActiveViewContent.PrimaryFileName == FileName.Create(item.FileName); + return WorkbenchSingleton.Workbench.ActiveViewContent != null && WorkbenchSingleton.Workbench.ActiveViewContent.PrimaryFileName == item.FileName; case 4: // Namespace return current != null && itemClass != null && current.Namespace == itemClass.Namespace;