Browse Source

Show insight window when pressing comma inside a method call.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4079 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
698d2c5506
  1. 1
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  2. 4
      src/Main/Base/Project/Src/Editor/CodeCompletion/MethodInsightItem.cs
  3. 4
      src/Main/Base/Project/Src/Editor/CodeCompletion/MethodInsightProvider.cs
  4. 49
      src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCodeCompletionBinding.cs
  5. 10
      src/Main/Base/Project/Src/Editor/ITextEditor.cs
  6. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/OverloadResolution.cs

1
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs

@ -35,7 +35,6 @@ namespace CSharpBinding @@ -35,7 +35,6 @@ namespace CSharpBinding
{
CSharpExpressionFinder ef = CreateExpressionFinder(editor.FileName);
int cursor = editor.Caret.Offset;
ExpressionContext context = null;
if (ch == '[') {
var line = editor.Document.GetLineForOffset(cursor);
/* TODO: AVALONEDIT Reimplement this

4
src/Main/Base/Project/Src/Editor/CodeCompletion/MethodInsightItem.cs

@ -24,6 +24,10 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -24,6 +24,10 @@ namespace ICSharpCode.SharpDevelop.Editor
this.entity = entity;
}
public IEntity Entity {
get { return entity; }
}
string headerText;
bool descriptionCreated;
string description;

4
src/Main/Base/Project/Src/Editor/CodeCompletion/MethodInsightProvider.cs

@ -20,6 +20,10 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -20,6 +20,10 @@ namespace ICSharpCode.SharpDevelop.Editor
/// </summary>
public class MethodInsightProvider
{
/// <summary>
/// Gets/Sets the offset where lookup is done.
/// The default value is -1, which instructs the insight provider to use the caret position.
/// </summary>
public int LookupOffset { get; set; }
public MethodInsightProvider()

49
src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCodeCompletionBinding.cs

@ -13,7 +13,6 @@ using System.Linq; @@ -13,7 +13,6 @@ using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Parser;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.TextEditor;
@ -133,15 +132,11 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -133,15 +132,11 @@ namespace ICSharpCode.SharpDevelop.Editor
int offset = LocationToOffset(editor, call.start);
if (offset >= 0 && offset < editor.Document.TextLength) {
char c = editor.Document.GetCharAt(offset);
if (c == '(') {
if (c == '(' || c == '[') {
var insightProvider = new MethodInsightProvider { LookupOffset = offset };
var insightItems = insightProvider.ProvideInsight(editor);
ShowInsight(editor,
new MethodInsightDataProvider(offset, true),
ResolveCallParameters(editor, call),
ch);
return true;
} else if (c == '[') {
ShowInsight(editor,
new IndexerInsightDataProvider(offset, true),
insightItems,
ResolveCallParameters(editor, call),
ch);
return true;
@ -196,17 +191,18 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -196,17 +191,18 @@ namespace ICSharpCode.SharpDevelop.Editor
}
}
protected void ShowInsight(ITextEditor editor, MethodInsightDataProvider dp, ICollection<ResolveResult> parameters, char charTyped)
protected void ShowInsight(ITextEditor editor, IList<IInsightItem> insightItems, ICollection<ResolveResult> parameters, char charTyped)
{
int paramCount = parameters.Count;
dp.SetupDataProvider(editor.FileName, (TextArea)editor.GetService(typeof(TextArea)));
List<IMethodOrProperty> methods = dp.Methods;
if (methods.Count == 0) return;
if (insightItems.Count == 0)
return;
bool overloadIsSure;
if (methods.Count == 1) {
int defaultIndex;
if (insightItems.Count == 1) {
overloadIsSure = true;
dp.DefaultIndex = 0;
defaultIndex = 0;
} else {
var methods = insightItems.Select(item => GetMethodFromInsightItem(item)).ToList();
IReturnType[] argumentTypes = new IReturnType[paramCount + 1];
int i = 0;
foreach (ResolveResult rr in parameters) {
@ -216,19 +212,32 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -216,19 +212,32 @@ namespace ICSharpCode.SharpDevelop.Editor
i++;
}
IMethodOrProperty result = Dom.CSharp.OverloadResolution.FindOverload(
methods, argumentTypes, true, false, out overloadIsSure);
dp.DefaultIndex = methods.IndexOf(result);
methods.Where(m => m != null), argumentTypes, true, false, out overloadIsSure);
defaultIndex = methods.IndexOf(result);
}
IInsightWindow insightWindow = editor.ShowInsightWindow(insightItems);
if (insightWindow != null) {
insightWindow.SelectedItem = insightItems[defaultIndex];
}
editor.ShowInsightWindow(dp);
if (overloadIsSure) {
IMethodOrProperty method = methods[dp.DefaultIndex];
if (paramCount < method.Parameters.Count) {
IMethodOrProperty method = GetMethodFromInsightItem(insightItems[defaultIndex]);
if (method != null && paramCount < method.Parameters.Count) {
IParameter param = method.Parameters[paramCount];
ProvideContextCompletion(editor, param.ReturnType, charTyped);
}
}
}
IMethodOrProperty GetMethodFromInsightItem(IInsightItem item)
{
MethodInsightItem mii = item as MethodInsightItem;
if (mii != null) {
return mii.Entity as IMethodOrProperty;
} else {
return null;
}
}
protected int LocationToOffset(ITextEditor editor, Location loc)
{
if (loc.IsEmpty || loc.Line > editor.Document.TotalNumberOfLines)

10
src/Main/Base/Project/Src/Editor/ITextEditor.cs

@ -61,11 +61,6 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -61,11 +61,6 @@ namespace ICSharpCode.SharpDevelop.Editor
string FileName { get; }
[Obsolete]
void ShowInsightWindow(ICSharpCode.TextEditor.Gui.InsightWindow.IInsightDataProvider provider);
[Obsolete]
void ShowCompletionWindow(ICSharpCode.TextEditor.Gui.CompletionWindow.ICompletionDataProvider provider, char ch);
void ShowCompletionWindow(ICompletionItemList data);
/// <summary>
@ -80,6 +75,11 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -80,6 +75,11 @@ namespace ICSharpCode.SharpDevelop.Editor
/// Gets the insight window that is currently open.
/// </summary>
IInsightWindow ActiveInsightWindow { get; }
[Obsolete("Use the overload taking IEnumerable<IInsightItem>")]
void ShowInsightWindow(ICSharpCode.TextEditor.Gui.InsightWindow.IInsightDataProvider provider);
[Obsolete("Use the overload taking ICompletionItemList")]
void ShowCompletionWindow(ICSharpCode.TextEditor.Gui.CompletionWindow.ICompletionDataProvider provider, char ch);
}
public interface ITextEditorOptions

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/OverloadResolution.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp @@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
{
private OverloadResolution() {}
public static IMethodOrProperty FindOverload(IList<IMethodOrProperty> list,
public static IMethodOrProperty FindOverload(IEnumerable<IMethodOrProperty> list,
IReturnType[] arguments,
bool allowAdditionalArguments,
bool substituteInferredTypes,
@ -80,6 +80,8 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp @@ -80,6 +80,8 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
public Candidate(IMethodOrProperty method)
{
if (method == null)
throw new ArgumentNullException("method");
this.Method = method;
this.OriginalMethod = method;
}

Loading…
Cancel
Save