From 5810bb51e036e13bccc17e78576a99834baee3b5 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 10 Aug 2014 18:22:43 +0200 Subject: [PATCH] Fix #529: CC item creating an event handler has confusing name 'HandleHandleClick' Because EventCreationCompletionData uses a new SDRefactoringContext with a different compilation, import the delegateType into the new compilation so that CreateShortType() works as expected. --- .../Completion/EventCreationCompletionData.cs | 44 ++++++------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EventCreationCompletionData.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EventCreationCompletionData.cs index 01ab271a64..6c9af001b8 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EventCreationCompletionData.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EventCreationCompletionData.cs @@ -19,6 +19,7 @@ using System; using System.Linq; using System.Threading; +using System.Windows.Controls; using ICSharpCode.SharpDevelop; using CSharpBinding.Parser; using CSharpBinding.Refactoring; @@ -35,46 +36,27 @@ namespace CSharpBinding.Completion /// class EventCreationCompletionData : CompletionData { - IEvent eventDefinition; - string varName; - IType delegateType; - string parameterList; - IUnresolvedMember callingMember; - IUnresolvedTypeDefinition declaringType; - CSharpResolver contextAtCaret; + readonly string handlerName; + readonly ITypeReference delegateTypeReference; + readonly bool isStatic; - public EventCreationCompletionData(string varName, IType delegateType, IEvent evt, string parameterList, IUnresolvedMember callingMember, IUnresolvedTypeDefinition declaringType, CSharpResolver contextAtCaret) + public EventCreationCompletionData(string handlerName, IType delegateType, IEvent evt, string parameterList, IUnresolvedMember callingMember, IUnresolvedTypeDefinition declaringType, CSharpResolver contextAtCaret) { - if (string.IsNullOrEmpty(varName)) { - this.DisplayText = ""; + if (string.IsNullOrEmpty(handlerName)) { + handlerName = (evt != null ? evt.Name : "Handle"); } - else { - this.DisplayText = "Handle" + char.ToUpper(varName[0]) + varName.Substring(1) + (evt != null ? evt.Name : ""); - } - - this.varName = varName; - this.eventDefinition = evt; - this.delegateType = delegateType; - this.parameterList = parameterList; - this.callingMember = callingMember; - this.declaringType = declaringType; - this.contextAtCaret = contextAtCaret; + this.handlerName = handlerName; + this.DisplayText = ""; + this.delegateTypeReference = delegateType.ToTypeReference(); + this.isStatic = callingMember != null && callingMember.IsStatic; } public override void Complete(CompletionContext context) { - var invokeSignature = delegateType.GetMethods(m => m.Name == "Invoke").Single(); var refactoringContext = SDRefactoringContext.Create(context.Editor, CancellationToken.None); + var delegateType = delegateTypeReference.Resolve(refactoringContext.Compilation); + var invokeSignature = delegateType.GetMethods(m => m.Name == "Invoke").Single(); var builder = refactoringContext.CreateTypeSystemAstBuilder(); - string handlerName; - bool isStatic; - if (eventDefinition != null) { - handlerName = eventDefinition.Name; - isStatic = eventDefinition.IsStatic; - } else { - handlerName = varName; - isStatic = callingMember.IsStatic; - } var throwStatement = new ThrowStatement(); var decl = new MethodDeclaration {