void InsertEventHandlerInternal(string methodName, IEvent evt) { CSharpCodeGenerator generator = new CSharpCodeGenerator(); var primary = loader.GetPrimaryTypeDefinition(); var evtHandler = primary.GetMethods(m => m.Name == methodName, GetMemberOptions.IgnoreInheritedMembers).FirstOrDefault(); if (evtHandler == null) { generator.InsertEventHandler(primary, methodName, evt, true); } else { CSharpBinding.Parser.CSharpFullParseInformation parseInfo; var node = evtHandler.GetDeclaration(out parseInfo) as MethodDeclaration; if (node != null && !node.Body.IsNull) { var location = node.Body.FirstChild.StartLocation; var firstStatement = node.Body.Children.OfType<Statement>().FirstOrDefault(); if (firstStatement != null) location = firstStatement.StartLocation; // TODO : does not jump correctly... SD.FileService.JumpToFilePosition(new FileName(evtHandler.Region.FileName), location.Line, location.Column); } } }
void InsertEventHandlerInternal(string methodName, IEvent evt) { CSharpCodeGenerator generator = new CSharpCodeGenerator(); var primary = loader.GetPrimaryTypeDefinition(); var evtHandler = primary.GetMethods(m => m.Name == methodName, GetMemberOptions.IgnoreInheritedMembers).FirstOrDefault(); if (evtHandler == null) { generator.InsertEventHandler(primary, methodName, evt, true); } else { CSharpBinding.Parser.CSharpFullParseInformation parseInfo; var node = evtHandler.GetDeclaration(out parseInfo) as MethodDeclaration; var fileName = new FileName(evtHandler.Region.FileName); var fileContentFinder = new ParseableFileContentFinder(); if (node != null && !node.Body.IsNull) { var location = node.Body.FirstChild.StartLocation; var firstStatement = node.Body.Children.OfType<Statement>().FirstOrDefault(); if (firstStatement == null) { var fileContent = fileContentFinder.Create(fileName); var document = new ReadOnlyDocument(fileContent); var offset = document.GetOffset(new TextLocation(location.Line + 1, 1)); var length = DocumentUtilities.GetWhitespaceAfter(fileContent, offset).Length; location = new TextLocation(location.Line + 1, length + 1); } else { location = firstStatement.StartLocation; } SD.FileService.JumpToFilePosition(fileName, location.Line, location.Column); } } }