Browse Source

Removed CtrlSpace method from IResolver interface.

What previously was implemented in the resolver can now be done directly in the CodeCompletionBinding.
The existing code still takes the long route (CodeCompletionBinding->CtrlSpaceCompletionItemProvider->Resolver), but now using derived classes that call directly into the language-specific resolver instead going through the ParserService and IResolver interface.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4744 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
a6fb1caa46
  1. 19
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs
  2. 16
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/CompletionBinding.cs
  3. 8
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  4. 26
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs
  5. 13
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  6. 5
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs
  7. 14
      src/Main/Base/Project/Src/Editor/CodeCompletion/AttributesItemProvider.cs
  8. 5
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionBinding.cs
  9. 40
      src/Main/Base/Project/Src/Editor/CodeCompletion/CtrlSpaceCompletionItemProvider.cs
  10. 10
      src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCodeCompletionBinding.cs
  11. 10
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  12. 27
      src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs
  13. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/IResolver.cs

19
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs

@ -5,13 +5,14 @@ @@ -5,13 +5,14 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Editor;
using System;
using System.Collections;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using AST = Boo.Lang.Compiler.Ast;
namespace Grunwald.BooBinding.CodeCompletion
@ -400,4 +401,20 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -400,4 +401,20 @@ namespace Grunwald.BooBinding.CodeCompletion
}
#endregion
}
sealed class BooCtrlSpaceCompletionItemProvider : CtrlSpaceCompletionItemProvider
{
public BooCtrlSpaceCompletionItemProvider() {}
public BooCtrlSpaceCompletionItemProvider(ExpressionContext overrideContext) : base(overrideContext) {}
protected override ArrayList CtrlSpace(ITextEditor editor, ExpressionContext context)
{
return new BooResolver().CtrlSpace(
editor.Caret.Line,
editor.Caret.Column,
ParserService.GetParseInformation(editor.FileName),
editor.Document.Text,
context);
}
}
}

16
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/CompletionBinding.cs

@ -27,7 +27,9 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -27,7 +27,9 @@ namespace Grunwald.BooBinding.CodeCompletion
char c = editor.Document.GetCharAt(i);
if (c == '\n' || c == '(' || c == ',') {
// -> Attribute completion
new AttributesItemProvider(ExpressionFinder.BooAttributeContext.Instance).ShowCompletion(editor);
new AttributesItemProvider(
new BooCtrlSpaceCompletionItemProvider(ExpressionFinder.BooAttributeContext.Instance)
).ShowCompletion(editor);
return CodeCompletionKeyPressResult.Completed;
}
if (!char.IsWhiteSpace(c))
@ -37,6 +39,14 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -37,6 +39,14 @@ namespace Grunwald.BooBinding.CodeCompletion
return base.HandleKeyPress(editor, ch);
}
public override bool CtrlSpace(ITextEditor editor)
{
BooCtrlSpaceCompletionItemProvider provider = new BooCtrlSpaceCompletionItemProvider();
provider.AllowCompleteExistingExpression = true;
provider.ShowCompletion(editor);
return true;
}
bool IsInComment(ITextEditor editor)
{
ExpressionFinder ef = new ExpressionFinder(editor.FileName);
@ -48,12 +58,12 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -48,12 +58,12 @@ namespace Grunwald.BooBinding.CodeCompletion
{
switch (word.ToLowerInvariant()) {
case "import":
new CtrlSpaceCompletionItemProvider(ExpressionContext.Importable).ShowCompletion(editor);
new BooCtrlSpaceCompletionItemProvider(ExpressionContext.Importable).ShowCompletion(editor);
return true;
case "as":
case "isa":
if (!IsInComment(editor)) {
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
new BooCtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
}
break;

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

@ -112,7 +112,7 @@ namespace CSharpBinding @@ -112,7 +112,7 @@ namespace CSharpBinding
ExpressionResult result = ef.FindExpression(editor.Document.Text, cursor);
LoggingService.Debug("CC: Beginning to type a word, result=" + result);
if (result.Context != ExpressionContext.IdentifierExpected) {
var ctrlSpaceProvider = new CtrlSpaceCompletionItemProvider(result.Context);
var ctrlSpaceProvider = new NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties.CSharp, result.Context);
ctrlSpaceProvider.ShowTemplates = true;
ctrlSpaceProvider.AllowCompleteExistingExpression = afterUnderscore;
ctrlSpaceProvider.ShowCompletion(editor);
@ -173,7 +173,7 @@ namespace CSharpBinding @@ -173,7 +173,7 @@ namespace CSharpBinding
if (parseInfo != null) {
IClass innerMostClass = parseInfo.CompilationUnit.GetInnermostClass(editor.Caret.Line, editor.Caret.Column);
if (innerMostClass == null) {
new CtrlSpaceCompletionItemProvider(ExpressionContext.Namespace).ShowCompletion(editor);
new NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties.CSharp, ExpressionContext.Namespace).ShowCompletion(editor);
return true;
}
}
@ -181,7 +181,7 @@ namespace CSharpBinding @@ -181,7 +181,7 @@ namespace CSharpBinding
case "as":
case "is":
if (IsInComment(editor)) return false;
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
new NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties.CSharp, ExpressionContext.Type).ShowCompletion(editor);
return true;
case "override":
if (IsInComment(editor)) return false;
@ -223,7 +223,7 @@ namespace CSharpBinding @@ -223,7 +223,7 @@ namespace CSharpBinding
if (context != null)
expressionResult.Context = context;
}
new CtrlSpaceCompletionItemProvider(expressionResult.Context).ShowCompletion(editor);
new NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties.CSharp, expressionResult.Context).ShowCompletion(editor);
return true;
}
return false;

26
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs

@ -41,12 +41,18 @@ namespace ICSharpCode.PythonBinding @@ -41,12 +41,18 @@ namespace ICSharpCode.PythonBinding
return false;
}
public override bool CtrlSpace(ICSharpCode.SharpDevelop.Editor.ITextEditor editor)
{
CreateCtrlSpaceCompletionDataProvider(null).ShowCompletion(editor);
return true;
}
/// <summary>
/// Creates a CtrlSpaceCompletionItemProvider.
/// </summary>
protected virtual CtrlSpaceCompletionItemProvider CreateCtrlSpaceCompletionDataProvider(ExpressionContext expressionContext)
{
return new CtrlSpaceCompletionItemProvider(expressionContext);
return new PythonCtrlSpaceCompletionItemProvider(expressionContext);
}
/// <summary>
@ -56,5 +62,23 @@ namespace ICSharpCode.PythonBinding @@ -56,5 +62,23 @@ namespace ICSharpCode.PythonBinding
{
completionItemProvider.ShowCompletion(editor);
}
class PythonCtrlSpaceCompletionItemProvider : CtrlSpaceCompletionItemProvider
{
public PythonCtrlSpaceCompletionItemProvider(ExpressionContext context)
: base(context)
{
}
protected override System.Collections.ArrayList CtrlSpace(ICSharpCode.SharpDevelop.Editor.ITextEditor editor, ExpressionContext context)
{
return new PythonResolver().CtrlSpace(
editor.Caret.Line,
editor.Caret.Column,
ParserService.GetParseInformation(editor.FileName),
editor.Document.Text,
context);
}
}
}
}

13
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs

@ -62,19 +62,19 @@ namespace VBNetBinding @@ -62,19 +62,19 @@ namespace VBNetBinding
return true;
case "as":
if (IsInComment(editor)) return false;
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
case "new":
if (IsInComment(editor)) return false;
new CtrlSpaceCompletionItemProvider(ExpressionContext.ObjectCreation).ShowCompletion(editor);
CtrlSpaceCompletionItemProvider(ExpressionContext.ObjectCreation).ShowCompletion(editor);
return true;
case "inherits":
if (IsInComment(editor)) return false;
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
case "implements":
if (IsInComment(editor)) return false;
new CtrlSpaceCompletionItemProvider(ExpressionContext.Interface).ShowCompletion(editor);
CtrlSpaceCompletionItemProvider(ExpressionContext.Interface).ShowCompletion(editor);
return true;
case "overrides":
if (IsInComment(editor)) return false;
@ -106,6 +106,11 @@ namespace VBNetBinding @@ -106,6 +106,11 @@ namespace VBNetBinding
}
}
CtrlSpaceCompletionItemProvider CtrlSpaceCompletionItemProvider(ExpressionContext context)
{
return new NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties.VBNet, context);
}
bool TryDeclarationTypeInference(ITextEditor editor, IDocumentLine curLine)
{
string lineText = editor.Document.GetText(curLine.Offset, curLine.Length);

5
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs

@ -275,10 +275,5 @@ namespace ICSharpCode.XamlBinding @@ -275,10 +275,5 @@ namespace ICSharpCode.XamlBinding
return resolver.ResolveNamedAttribute(expression);
}
public ArrayList CtrlSpace(int caretLine, int caretColumn, ParseInformation parseInfo, string fileContent, ExpressionContext context)
{
return new ArrayList();
}
}
}

14
src/Main/Base/Project/Src/Editor/CodeCompletion/AttributesItemProvider.cs

@ -14,15 +14,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -14,15 +14,15 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
/// <summary>
/// Provides code completion for attribute names.
/// </summary>
public class AttributesItemProvider : CtrlSpaceCompletionItemProvider
public class AttributesItemProvider : AbstractCompletionItemProvider
{
public AttributesItemProvider(IProjectContent pc)
: this(ExpressionContext.Attribute)
{
}
AbstractCompletionItemProvider baseProvider;
public AttributesItemProvider(ExpressionContext context) : base(context)
public AttributesItemProvider(AbstractCompletionItemProvider baseProvider)
{
if (baseProvider == null)
throw new ArgumentNullException("baseProvider");
this.baseProvider = baseProvider;
this.RemoveAttributeSuffix = true;
}
@ -30,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -30,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public override ICompletionItemList GenerateCompletionList(ITextEditor editor)
{
ICompletionItemList list = base.GenerateCompletionList(editor);
ICompletionItemList list = baseProvider.GenerateCompletionList(editor);
if (this.RemoveAttributeSuffix && list != null) {
foreach (CodeCompletionItem d in list.Items.OfType<CodeCompletionItem>()) {
if (d.Text.EndsWith("Attribute")) {

5
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionBinding.cs

@ -217,10 +217,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -217,10 +217,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public virtual bool CtrlSpace(ITextEditor editor)
{
CtrlSpaceCompletionItemProvider provider = new CtrlSpaceCompletionItemProvider();
provider.AllowCompleteExistingExpression = true;
provider.ShowCompletion(editor);
return true;
return false;
}
}
}

40
src/Main/Base/Project/Src/Editor/CodeCompletion/CtrlSpaceCompletionItemProvider.cs

@ -12,7 +12,7 @@ using ICSharpCode.SharpDevelop.Dom; @@ -12,7 +12,7 @@ using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
{
public class CtrlSpaceCompletionItemProvider : CodeCompletionItemProvider
public abstract class CtrlSpaceCompletionItemProvider : CodeCompletionItemProvider
{
public CtrlSpaceCompletionItemProvider()
{
@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
preselectionLength = 0;
if (!allowCompleteExistingExpression) {
ExpressionContext context = overrideContext ?? ExpressionContext.Default;
var ctrlSpace = ParserService.CtrlSpace(editor.Caret.Line, editor.Caret.Column, editor.FileName, editor.Document.Text, context);
var ctrlSpace = CtrlSpace(editor, context);
return GenerateCompletionListForCompletionData(ctrlSpace, context);
}
@ -91,7 +91,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -91,7 +91,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
LoggingService.Debug("Ctrl-Space got expression " + expressionResult.ToString());
string expression = expressionResult.Expression;
if (expression == null || expression.Length == 0) {
var ctrlSpace = ParserService.CtrlSpace(editor.Caret.Line, editor.Caret.Column, editor.FileName, editor.Document.Text, expressionResult.Context);
var ctrlSpace = CtrlSpace(editor, expressionResult.Context);
return GenerateCompletionListForCompletionData(ctrlSpace, expressionResult.Context);
}
@ -102,15 +102,47 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -102,15 +102,47 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
return GenerateCompletionListForExpression(editor, expressionResult);
} else {
preselectionLength = expression.Length;
ArrayList results = ParserService.CtrlSpace(editor.Caret.Line, editor.Caret.Column, editor.FileName, editor.Document.Text, expressionResult.Context);
ArrayList results = CtrlSpace(editor, expressionResult.Context);
return GenerateCompletionListForCompletionData(results, expressionResult.Context);
}
}
protected abstract ArrayList CtrlSpace(ITextEditor editor, ExpressionContext context);
protected override void InitializeCompletionItemList(DefaultCompletionItemList list)
{
base.InitializeCompletionItemList(list);
list.PreselectionLength = preselectionLength;
}
}
public class NRefactoryCtrlSpaceCompletionItemProvider : CtrlSpaceCompletionItemProvider
{
LanguageProperties language;
public NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties language)
{
if (language == null)
throw new ArgumentNullException("language");
this.language = language;
}
public NRefactoryCtrlSpaceCompletionItemProvider(LanguageProperties language, ExpressionContext overrideContext)
: base(overrideContext)
{
if (language == null)
throw new ArgumentNullException("language");
this.language = language;
}
protected override ArrayList CtrlSpace(ITextEditor editor, ExpressionContext context)
{
var resolver = new Dom.NRefactoryResolver.NRefactoryResolver(language);
return resolver.CtrlSpace(
editor.Caret.Line, editor.Caret.Column,
ParserService.GetParseInformation(editor.FileName),
editor.Document.Text,
context);
}
}
}

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

@ -58,6 +58,14 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -58,6 +58,14 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
}
}
public override bool CtrlSpace(ITextEditor editor)
{
NRefactoryCtrlSpaceCompletionItemProvider provider = new NRefactoryCtrlSpaceCompletionItemProvider(languageProperties);
provider.AllowCompleteExistingExpression = true;
provider.ShowCompletion(editor);
return true;
}
#region Comma Insight refresh
protected class InspectedCall
{
@ -156,7 +164,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -156,7 +164,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
IClass c = expected.GetUnderlyingClass();
if (c == null) return false;
if (c.ClassType == ClassType.Enum) {
CtrlSpaceCompletionItemProvider cdp = new CtrlSpaceCompletionItemProvider();
CtrlSpaceCompletionItemProvider cdp = new NRefactoryCtrlSpaceCompletionItemProvider(languageProperties);
var ctrlSpaceList = cdp.GenerateCompletionList(editor);
if (ctrlSpaceList == null) return false;
ContextCompletionItemList contextList = new ContextCompletionItemList();

10
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -226,16 +226,6 @@ namespace ICSharpCode.SharpDevelop @@ -226,16 +226,6 @@ namespace ICSharpCode.SharpDevelop
return null;
}
public static ArrayList CtrlSpace(int caretLine, int caretColumn,
string fileName, string fileContent, ExpressionContext context)
{
IResolver resolver = CreateResolver(fileName);
if (resolver != null) {
return resolver.CtrlSpace(caretLine, caretColumn, GetParseInformation(fileName), fileContent, context);
}
return null;
}
public static IResolver CreateResolver(string fileName)
{
IParser parser = CreateParser(fileName);

27
src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs

@ -106,23 +106,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -106,23 +106,6 @@ namespace ICSharpCode.SharpDevelop.Gui
listBox.ScrollIntoView(listBox.Items[index]);
}
IList<ICompletionItem> ctrlSpaceCompletionData;
IList<ICompletionItem> GetCompletionData()
{
if (ctrlSpaceCompletionData != null)
return ctrlSpaceCompletionData;
ITextEditor editor = GetEditor();
if (editor != null) {
CtrlSpaceCompletionItemProvider cdp = new CtrlSpaceCompletionItemProvider(ExpressionContext.Default);
var completionList = cdp.GenerateCompletionList(editor);
ctrlSpaceCompletionData = completionList != null ? completionList.Items.ToList() : null;
}
if (ctrlSpaceCompletionData == null)
ctrlSpaceCompletionData = emptyList;
return ctrlSpaceCompletionData;
}
static readonly IList<ICompletionItem> emptyList = new ICompletionItem[0];
IList<ICompletionItem> Resolve(string expression)
@ -205,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -205,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Gui
}
} else {
AddSourceFiles(text, 0);
ShowCtrlSpaceCompletion(text);
//ShowCtrlSpaceCompletion(text);
}
newItems.Sort();
foreach (MyListBoxItem item in newItems)
@ -271,14 +254,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -271,14 +254,6 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
void ShowCtrlSpaceCompletion(string text)
{
ShowCompletionData(GetCompletionData(), text);
foreach (IClass c in SearchClasses(text)) {
AddItem(c, GetMatchType(text, c.Name));
}
}
ArrayList SearchClasses(string text)
{
string lowerText = text.ToLowerInvariant();

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/IResolver.cs

@ -22,7 +22,5 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -22,7 +22,5 @@ namespace ICSharpCode.SharpDevelop.Dom
ResolveResult Resolve(ExpressionResult expressionResult,
ParseInformation parseInfo,
string fileContent);
ArrayList CtrlSpace(int caretLine, int caretColumn, ParseInformation parseInfo, string fileContent, ExpressionContext context);
}
}

Loading…
Cancel
Save