private Declaration PromptIfTargetImplementsInterface() { var declaration = TargetDeclaration; var interfaceImplementation = Declarations.FindInterfaceImplementationMembers().SingleOrDefault(m => m.Equals(declaration)); if (declaration == null || interfaceImplementation == null) { return(declaration); } var interfaceMember = Declarations.FindInterfaceMember(interfaceImplementation); var message = string.Format(RubberduckUI.Refactoring_TargetIsInterfaceMemberImplementation, declaration.IdentifierName, interfaceMember.ComponentName, interfaceMember.IdentifierName); var confirm = MessageBox.Show(message, RubberduckUI.ReorderParamsDialog_TitleText, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); return(confirm == DialogResult.No ? null : interfaceMember); }
public void PromptIfTargetImplementsInterface(ref Declaration target) { var declaration = target; var interfaceImplementation = _declarations.FindInterfaceImplementationMembers().SingleOrDefault(m => m.Equals(declaration)); if (target == null || interfaceImplementation == null) { return; } var interfaceMember = _declarations.FindInterfaceMember(interfaceImplementation); var message = string.Format(RubberduckUI.RenamePresenter_TargetIsInterfaceMemberImplementation, target.IdentifierName, interfaceMember.ComponentName, interfaceMember.IdentifierName); var confirm = MessageBox.Show(message, RubberduckUI.RenameDialog_TitleText, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (confirm == DialogResult.No) { target = null; return; } target = interfaceMember; }
private void RenameUsages() { // todo: refactor // rename interface member if (_declarations.FindInterfaceMembers().Contains(_view.Target)) { var implementations = _declarations.FindInterfaceImplementationMembers() .Where(m => m.IdentifierName == _view.Target.ComponentName + '_' + _view.Target.IdentifierName); foreach (var member in implementations) { try { var newMemberName = _view.Target.ComponentName + '_' + _view.NewName; var module = member.Project.VBComponents.Item(member.ComponentName).CodeModule; var content = module.get_Lines(member.Selection.StartLine, 1); var newContent = GetReplacementLine(content, member.IdentifierName, newMemberName); module.ReplaceLine(member.Selection.StartLine, newContent); } catch (COMException) { // gulp } } return; } var modules = _view.Target.References.GroupBy(r => r.QualifiedModuleName); foreach (var grouping in modules) { var module = grouping.Key.Component.CodeModule; foreach (var line in grouping.GroupBy(reference => reference.Selection.StartLine)) { var content = module.get_Lines(line.Key, 1); var newContent = GetReplacementLine(content, _view.Target.IdentifierName, _view.NewName); module.ReplaceLine(line.Key, newContent); } // renaming interface if (grouping.Any(reference => reference.Context.Parent is VBAParser.ImplementsStmtContext)) { var members = _declarations.FindMembers(_view.Target); foreach (var member in members) { var oldMemberName = _view.Target.IdentifierName + '_' + member.IdentifierName; var newMemberName = _view.NewName + '_' + member.IdentifierName; var method = _declarations[oldMemberName].SingleOrDefault(m => m.QualifiedName.QualifiedModuleName == grouping.Key); if (method == null) { continue; } var content = module.get_Lines(method.Selection.StartLine, 1); var newContent = GetReplacementLine(content, oldMemberName, newMemberName); module.ReplaceLine(method.Selection.StartLine, newContent); } } } }