Browse Source

fix SD-1834 - Code completion selection should consider "List" an exact match for "List(Of T)" - http://bugtracker.sharpdevelop.net/issue/ViewIssue.aspx?id=1834&PROJID=4

4.1
Siegfried Pammer 14 years ago
parent
commit
9c874706bc
  1. 9
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs
  2. 60
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs
  3. 9
      src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItem.cs

9
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs

@ -129,15 +129,6 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -129,15 +129,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
/// <summary>
/// Completion item that supports complex content and description.
/// </summary>
public interface IFancyCompletionItem : ICompletionItem
{
object Content { get; }
new object Description { get; }
}
sealed class CodeCompletionDataAdapter : ICompletionData, INotifyPropertyChanged
{
readonly SharpDevelopCompletionWindow window;

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

@ -210,7 +210,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -210,7 +210,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
}
}
public class CodeCompletionItem : ICompletionItem
public class CodeCompletionItem : ICompletionItem, IFancyCompletionItem
{
public double Priority { get; set; }
@ -224,7 +224,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -224,7 +224,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
IAmbience ambience = AmbienceService.GetCurrentAmbience();
ambience.ConversionFlags = entity is IClass ? ConversionFlags.ShowTypeParameterList : ConversionFlags.None;
this.Text = ambience.Convert(entity);
this.Text = entity.Name;
this.Content = ambience.Convert(entity);
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags;
if (entity is IClass) {
// Show fully qualified Type name (called UseFullyQualifiedMemberNames though)
@ -233,7 +234,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -233,7 +234,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
description = ambience.Convert(entity);
this.Image = ClassBrowserIconService.GetIcon(entity);
this.Overloads = 1;
this.InsertGenericArguments = false;
this.Priority = CodeCompletionDataUsageCache.GetPriority(entity.DotNetName, true);
}
@ -248,12 +248,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -248,12 +248,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public IImage Image { get; set; }
/// <summary>
/// If true, will insert Text including generic arguments (e.g. List&lt;T&gt; or List&lt;string&gt;).
/// Otherwise will insert Text without generic arguments (e.g. List).
/// </summary>
public bool InsertGenericArguments { get; set; }
protected void MarkAsUsed()
{
CodeCompletionDataUsageCache.IncrementUsage(entity.DotNetName);
@ -290,7 +284,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -290,7 +284,8 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
addUsing = !IsKnownName(nameResult);
}
InsertTextStripGenericArguments(context, insertedText, this.InsertGenericArguments);
context.Editor.Document.Replace(context.StartOffset, context.Length, insertedText);
context.EndOffset = context.StartOffset + insertedText.Length;
if (addUsing && nameResult != null && nameResult.CallingClass != null) {
var cu = nameResult.CallingClass.CompilationUnit;
@ -299,40 +294,9 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -299,40 +294,9 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
}
} else {
// Something else than a class or Extension method is being inserted - just insert text
InsertTextStripGenericArguments(context, insertedText, this.InsertGenericArguments);
}
}
/// <summary>
/// Inserts the given text. Strips generic arguments from it if specified.
/// </summary>
static void InsertTextStripGenericArguments(CompletionContext context, string insertedText, bool stringGenericArguments)
{
if (!stringGenericArguments) {
// FIXME CodeCompletionItem should contain IReturnType and decide whether to INCLUDE generic arguments
// or not, not strip them.
insertedText = StripGenericArguments(insertedText, context);
}
context.Editor.Document.Replace(context.StartOffset, context.Length, insertedText);
context.EndOffset = context.StartOffset + insertedText.Length;
}
/// <summary>
/// Turns e.g. "List&lt;T&gt;" into "List&lt;"
/// </summary>
static string StripGenericArguments(string itemText, CompletionContext context)
{
if (context == null || context.Editor == null || context.Editor.Language == null ||
context.Editor.Language.Properties != LanguageProperties.CSharp)
return itemText;
if (itemText != null && itemText.EndsWith(">")) {
int pos = itemText.LastIndexOf('<');
if (pos == -1)
return itemText;
int insertLen = pos;
itemText = itemText.Substring(0, insertLen);
context.Editor.Document.Replace(context.StartOffset, context.Length, insertedText);
context.EndOffset = context.StartOffset + insertedText.Length;
}
return itemText;
}
IClass GetClassOrExtensionMethodClass(IEntity selectedEntity)
@ -506,6 +470,14 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -506,6 +470,14 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
return cref;
}
#endregion
public object Content { get; set; }
object IFancyCompletionItem.Description {
get {
return Description;
}
}
}
/// <summary>
@ -518,7 +490,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -518,7 +490,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
: base(entity)
{
this.Text = nameWithSpecifiedGenericArguments;
this.InsertGenericArguments = true;
this.Content = nameWithSpecifiedGenericArguments;
}
}
}

9
src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItem.cs

@ -26,6 +26,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -26,6 +26,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
}
}
/// <summary>
/// Completion item that supports complex content and description.
/// </summary>
public interface IFancyCompletionItem : ICompletionItem
{
object Content { get; }
new object Description { get; }
}
public interface ISnippetCompletionItem : ICompletionItem
{
string Keyword { get; }

Loading…
Cancel
Save