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
MarkAsUsed(); MarkAsUsed();
string insertedText = this.Text; string insertedText = this.Text;
bool addUsing = false;
var selectedClass = this.Entity as IClass; 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) { 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 editor = context.Editor;
var document = context.Editor.Document; var document = context.Editor.Document;
@ -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 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); var fullNameResult = ParserService.Resolve(new ExpressionResult(selectedClass.FullyQualifiedName), position.Line, position.Column, editor.FileName, document.Text);
bool addUsing = false;
var cu = nameResult.CallingClass.CompilationUnit; var cu = nameResult.CallingClass.CompilationUnit;
if (IsKnown(nameResult)) { if (IsKnown(nameResult)) {
if (IsEqualClass(nameResult, selectedClass)) { if (IsEqualClass(nameResult, selectedClass)) {
@ -280,7 +285,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
ParserService.BeginParse(context.Editor.FileName, context.Editor.Document); ParserService.BeginParse(context.Editor.FileName, context.Editor.Document);
} }
} else { } 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.Editor.Document.Replace(context.StartOffset, context.Length, insertedText);
context.EndOffset = context.StartOffset + insertedText.Length; context.EndOffset = context.StartOffset + insertedText.Length;
} }

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

@ -251,7 +251,8 @@ namespace ICSharpCode.SharpDevelop.Dom
IMethod dummyMethod = new DefaultMethod("dummy", callingClass.ProjectContent.SystemTypes.Void, IMethod dummyMethod = new DefaultMethod("dummy", callingClass.ProjectContent.SystemTypes.Void,
ModifierEnum.Static, DomRegion.Empty, DomRegion.Empty, callingClass); ModifierEnum.Static, DomRegion.Empty, DomRegion.Empty, callingClass);
CtrlSpaceResolveHelper.AddContentsFromCalling(list, callingClass, dummyMethod); 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; bool searchExtensionsInClasses = language.SearchExtensionsInClasses;
foreach (object o in list) { foreach (object o in list) {

Loading…
Cancel
Save