Browse Source

fix #273 - NullReferenceException when typing a call to `FirstOrDefault()`

newNR
Siegfried Pammer 12 years ago
parent
commit
8d804d7b12
  1. 31
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EventCreationCompletionData.cs

31
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EventCreationCompletionData.cs

@ -16,23 +16,32 @@ namespace CSharpBinding.Completion
/// <summary> /// <summary>
/// Completion item that creates an event handler for an event. /// Completion item that creates an event handler for an event.
/// </summary> /// </summary>
class EventCreationCompletionData : EntityCompletionData class EventCreationCompletionData : CompletionData
{ {
IEvent eventDefinition; IEvent eventDefinition;
string varName;
IType delegateType; IType delegateType;
string parameterList;
IUnresolvedMember callingMember;
IUnresolvedTypeDefinition declaringType;
CSharpResolver contextAtCaret;
public EventCreationCompletionData(string varName, IType delegateType, IEvent evt, string parameterList, IUnresolvedMember callingMember, IUnresolvedTypeDefinition declaringType, CSharpResolver contextAtCaret) : base(evt) public EventCreationCompletionData(string varName, IType delegateType, IEvent evt, string parameterList, IUnresolvedMember callingMember, IUnresolvedTypeDefinition declaringType, CSharpResolver contextAtCaret)
{ {
if (string.IsNullOrEmpty(varName)) { if (string.IsNullOrEmpty(varName)) {
this.DisplayText = "Create handler for " + (evt != null ? evt.Name : ""); this.DisplayText = "<Create handler for " + (evt != null ? evt.Name : "") + ">";
} }
else { else {
this.DisplayText = "Create handler for " + char.ToUpper(varName[0]) + varName.Substring(1) + (evt != null ? evt.Name : ""); this.DisplayText = "Handle" + char.ToUpper(varName[0]) + varName.Substring(1) + (evt != null ? evt.Name : "");
} }
this.DisplayText = "<" + this.DisplayText + ">"; this.varName = varName;
this.eventDefinition = evt; this.eventDefinition = evt;
this.delegateType = delegateType; this.delegateType = delegateType;
this.parameterList = parameterList;
this.callingMember = callingMember;
this.declaringType = declaringType;
this.contextAtCaret = contextAtCaret;
} }
public override void Complete(CompletionContext context) public override void Complete(CompletionContext context)
@ -40,7 +49,15 @@ namespace CSharpBinding.Completion
var invokeSignature = delegateType.GetMethods(m => m.Name == "Invoke").Single(); var invokeSignature = delegateType.GetMethods(m => m.Name == "Invoke").Single();
var refactoringContext = SDRefactoringContext.Create(context.Editor, CancellationToken.None); var refactoringContext = SDRefactoringContext.Create(context.Editor, CancellationToken.None);
var builder = refactoringContext.CreateTypeSystemAstBuilder(); var builder = refactoringContext.CreateTypeSystemAstBuilder();
var handlerName = eventDefinition.Name; string handlerName;
bool isStatic;
if (eventDefinition != null) {
handlerName = eventDefinition.Name;
isStatic = eventDefinition.IsStatic;
} else {
handlerName = varName;
isStatic = callingMember.IsStatic;
}
var throwStatement = new ThrowStatement(); var throwStatement = new ThrowStatement();
var decl = new MethodDeclaration { var decl = new MethodDeclaration {
@ -53,7 +70,7 @@ namespace CSharpBinding.Completion
decl.Parameters.AddRange(invokeSignature.Parameters.Select(builder.ConvertParameter)); decl.Parameters.AddRange(invokeSignature.Parameters.Select(builder.ConvertParameter));
if (eventDefinition.IsStatic) if (isStatic)
decl.Modifiers |= Modifiers.Static; decl.Modifiers |= Modifiers.Static;
throwStatement.Expression = new ObjectCreateExpression(refactoringContext.CreateShortType("System", "NotImplementedException")); throwStatement.Expression = new ObjectCreateExpression(refactoringContext.CreateShortType("System", "NotImplementedException"));

Loading…
Cancel
Save