Browse Source

added very basic event handler code completition (appears after typing '+='); still many things to do here

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@372 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Markus Palme 20 years ago
parent
commit
5a23a45292
  1. 1
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
  2. 33
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  3. 125
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/EventHandlerCompletitionDataProvider.cs
  4. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs

1
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj

@ -51,6 +51,7 @@ @@ -51,6 +51,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Compile Include="Src\CSharpCompletionBinding.cs" />
<Compile Include="Src\EventHandlerCompletitionDataProvider.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">

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

@ -95,6 +95,39 @@ namespace CSharpBinding @@ -95,6 +95,39 @@ namespace CSharpBinding
}
}
}
else if(ch == '=')
{
LineSegment curLine = editor.Document.GetLineSegmentForOffset(cursor);
string curLineText = editor.ActiveTextAreaControl.Document.GetText(curLine);
if(curLineText != null && curLineText.EndsWith("+"))
{
string documentText = editor.Text;
int position = editor.ActiveTextAreaControl.Caret.Offset - 2;
int oldCursor = position;
string textWithoutComments = ef.FilterComments(documentText, ref position);
int commentLength = oldCursor - position;
if (textWithoutComments != null)
{
ExpressionResult result = ef.FindFullExpression(textWithoutComments, position);
if(result.Expression != "")
{
IResolver resolver = ParserService.CreateResolver(editor.FileName);
ResolveResult resolveResult = resolver.Resolve(result, editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Column, editor.FileName, documentText);
if(resolveResult.ResolvedType.GetUnderlyingClass().IsTypeInInheritanceTree(ProjectContentRegistry.Mscorlib.GetClass("System.MulticastDelegate")))
{
EventHandlerCompletitionDataProvider eventHandlerProvider = new EventHandlerCompletitionDataProvider(result.Expression, resolveResult);
eventHandlerProvider.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, ch);
editor.ShowCompletionWindow(eventHandlerProvider, ch);
}
}
}
}
}
return base.HandleKeyPress(editor, ch);
}

125
src/AddIns/BackendBindings/CSharpBinding/Project/Src/EventHandlerCompletitionDataProvider.cs

@ -0,0 +1,125 @@ @@ -0,0 +1,125 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Markus Palme" email="MarkusPalme@gmx.de"/>
// <version>$Revision: 321 $</version>
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using ICSharpCode.TextEditor;
using ICSharpCode.Core;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
namespace CSharpBinding
{
public class EventHandlerCompletitionDataProvider : ICompletionDataProvider
{
string expression;
ResolveResult resolveResult;
public EventHandlerCompletitionDataProvider(string expression, ResolveResult resolveResult)
{
this.expression = expression;
this.resolveResult = resolveResult;
}
public ImageList ImageList
{
get
{
return ClassBrowserIconService.ImageList;
}
}
public int DefaultIndex
{
get
{
return -1;
}
}
public string PreSelection
{
get
{
return null;
}
}
public ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
{
ArrayList completionData = new ArrayList();
completionData.Add(new EventHandlerCompletionData("new " + resolveResult.ResolvedType.FullyQualifiedName + "()", "Event handler"));
return (ICompletionData[])completionData.ToArray(typeof(ICompletionData));
}
class EventHandlerCompletionData : ICompletionData
{
string text;
string description;
public int ImageIndex
{
get
{
return ClassBrowserIconService.MethodIndex;
}
}
public string Text
{
get {
return text;
}
set {
text = value;
}
}
public string Description
{
get {
return description;
}
}
public double Priority
{
get {
return 0;
}
}
public bool InsertAction(TextArea textArea, char ch)
{
textArea.InsertString(text);
return false;
}
public EventHandlerCompletionData(string text, string description)
{
this.text = text;
this.description = description;
}
#region System.IComparable interface implementation
public int CompareTo(object obj)
{
if (obj == null || !(obj is EventHandlerCompletionData)) {
return -1;
}
return text.CompareTo(((EventHandlerCompletionData)obj).Text);
}
#endregion
}
}
}

3
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs

@ -591,15 +591,12 @@ namespace CSharpBinding.Parser @@ -591,15 +591,12 @@ namespace CSharpBinding.Parser
void ReadNextToken()
{
curTokenType = Err;
char ch = GetNextNonWhiteSpace();
if (ch == '\0') {
return;
}
switch (ch) {
case '}':
if (ReadBracket('{', '}')) {

Loading…
Cancel
Save