示例#1
0
        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);
        }
示例#2
0
        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;
        }
示例#3
0
        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);
                    }
                }
            }
        }