Browse Source

The new auto-insert-using CodeCompletion now works for Extension methods too.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5757 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Martin Koníček 16 years ago
parent
commit
4dc5cc48e6
  1. 13
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs
  2. 3
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs

13
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs

@ -245,11 +245,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -245,11 +245,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
MarkAsUsed();
string insertedText = this.Text;
bool addUsing = false;
var selectedClass = this.Entity as IClass;
if (selectedClass == null) {
// Is extension method being inserted?
var method = this.Entity as IMethod;
if (method != null && method.IsExtensionMethod)
selectedClass = method.DeclaringType;
}
if (selectedClass != null) {
// Class is being inserted
// Class or Extension method is being inserted - include its namespace in the using section if needed
var editor = context.Editor;
var document = context.Editor.Document;
@ -257,6 +261,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -257,6 +261,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
var nameResult = ParserService.Resolve(new ExpressionResult(selectedClass.Name), position.Line, position.Column, editor.FileName, document.Text);
var fullNameResult = ParserService.Resolve(new ExpressionResult(selectedClass.FullyQualifiedName), position.Line, position.Column, editor.FileName, document.Text);
bool addUsing = false;
var cu = nameResult.CallingClass.CompilationUnit;
if (IsKnown(nameResult)) {
if (IsEqualClass(nameResult, selectedClass)) {
@ -280,7 +285,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -280,7 +285,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
ParserService.BeginParse(context.Editor.FileName, context.Editor.Document);
}
} else {
// Something else than a class is being inserted - just insert
// Something else than a class or Extension method is being inserted - just insert
context.Editor.Document.Replace(context.StartOffset, context.Length, insertedText);
context.EndOffset = context.StartOffset + insertedText.Length;
}

3
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs

@ -251,7 +251,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -251,7 +251,8 @@ namespace ICSharpCode.SharpDevelop.Dom
IMethod dummyMethod = new DefaultMethod("dummy", callingClass.ProjectContent.SystemTypes.Void,
ModifierEnum.Static, DomRegion.Empty, DomRegion.Empty, callingClass);
CtrlSpaceResolveHelper.AddContentsFromCalling(list, callingClass, dummyMethod);
CtrlSpaceResolveHelper.AddImportedNamespaceContents(list, callingClass.CompilationUnit, callingClass);
// search extension methods in all referenced projects, no matter the using section
CtrlSpaceResolveHelper.AddReferencedProjectsContents(list, callingClass.CompilationUnit, callingClass);
bool searchExtensionsInClasses = language.SearchExtensionsInClasses;
foreach (object o in list) {

Loading…
Cancel
Save