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); } } } }