Esempio n. 1
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var selection = Vbe.GetActiveSelection();

            if (selection == null)
            {
                return(false);
            }
            var member = _state.AllUserDeclarations.FindTarget(selection.Value, ValidDeclarationTypes);

            if (member == null)
            {
                return(false);
            }
            if (_state.IsNewOrModified(member.QualifiedModuleName))
            {
                return(false);
            }

            var parameters = _state.AllUserDeclarations.Where(item => item.DeclarationType == DeclarationType.Parameter && member.Equals(item.ParentScopeDeclaration)).ToList();
            var canExecute = (member.DeclarationType == DeclarationType.PropertyLet || member.DeclarationType == DeclarationType.PropertySet)
                    ? parameters.Count > 2
                    : parameters.Count > 1;

            return(canExecute);
        }
        protected override void OnExecute(object parameter)
        {
            var selection = Vbe.GetActiveSelection();

            if (selection.HasValue)
            {
                var refactoring = new MoveCloserToUsageRefactoring(Vbe, _state, _msgbox, _rewritingManager);
                refactoring.Refactor(selection.Value);
            }
        }
        protected override void OnExecute(object parameter)
        {
            var selection = Vbe.GetActiveSelection();

            using (var view = new RemoveParametersDialog(new RemoveParametersViewModel(_state)))
            {
                var factory     = new RemoveParametersPresenterFactory(Vbe, view, _state, _msgbox);
                var refactoring = new RemoveParametersRefactoring(Vbe, factory, _rewritingManager);
                refactoring.Refactor(selection.Value);
            }
        }
Esempio n. 4
0
        protected override void OnExecute(object parameter)
        {
            var declarations       = _state.AllDeclarations;
            var qualifiedSelection = Vbe.GetActiveSelection();

            var extractMethodValidation = new ExtractMethodSelectionValidation(declarations);
            var canExecute = extractMethodValidation.withinSingleProcedure(qualifiedSelection.Value);

            if (!canExecute)
            {
                return;
            }

            using (var pane = Vbe.ActiveCodePane)
                using (var module = pane.CodeModule)
                {
                    var extraction = new ExtractMethodExtraction();
                    // bug: access to disposed closure

                    // todo: make ExtractMethodRefactoring request reparse like everyone else.
                    var refactoring = new ExtractMethodRefactoring(module, ParseRequest, CreateMethodModel, extraction);
                    refactoring.InvalidSelection += HandleInvalidSelection;
                    refactoring.Refactor();


                    void ParseRequest(object obj) => _state.OnParseRequested(obj);

                    IExtractMethodModel CreateMethodModel(QualifiedSelection?qs, string code)
                    {
                        if (qs == null)
                        {
                            return(null);
                        }
                        //TODO: Pull these even further back;
                        //      and implement with IProvider<IExtractMethodRule>
                        var rules = new List <IExtractMethodRule>
                        {
                            new ExtractMethodRuleInSelection(),
                            new ExtractMethodRuleIsAssignedInSelection(),
                            new ExtractMethodRuleUsedAfter(),
                            new ExtractMethodRuleUsedBefore()
                        };

                        var paramClassify = new ExtractMethodParameterClassification(rules);

                        var extractedMethod      = new ExtractedMethod();
                        var extractedMethodModel = new ExtractMethodModel(extractedMethod, paramClassify);

                        extractedMethodModel.extract(declarations, qs.Value, code);
                        return(extractedMethodModel);
                    }
                }
        }
        internal RubberduckParseResult Parse(string moduleName, string inputCode)
        {
            IVBE vbe = new Vbe();

            vbe.AddProjectFromCode(moduleName, inputCode);
            ConfiguredParserResult configuredParser = vbe.CreateConfiguredParser();

            configuredParser.ParseCoordinator.Parse(new CancellationTokenSource());
            return(new RubberduckParseResult {
                ParserState = configuredParser.ParseCoordinator.State, ProjectManager = configuredParser.ProjectManager
            });
        }
        protected override void OnExecute(object parameter)
        {
            var selection = Vbe.GetActiveSelection();

            if (!selection.HasValue)
            {
                return;
            }

            var refactoring = new IntroduceParameterRefactoring(Vbe, _state, _messageBox);

            refactoring.Refactor(selection.Value);
        }
Esempio n. 7
0
        protected override void OnExecute(object parameter)
        {
            var selection = Vbe.GetActiveSelection();

            if (selection == null)
            {
                return;
            }

            using (var view = new ReorderParametersDialog(new ReorderParametersViewModel(_state)))
            {
                var factory     = new ReorderParametersPresenterFactory(Vbe, view, _state, _msgbox);
                var refactoring = new ReorderParametersRefactoring(Vbe, factory, _msgbox, _state.ProjectsProvider);
                refactoring.Refactor(selection.Value);
            }
        }
Esempio n. 8
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            var selection = Vbe.GetActiveSelection();

            if (!selection.HasValue)
            {
                return(false);
            }

            var targetInterface = _state.AllUserDeclarations.FindInterface(selection.Value);

            var targetClass = _state.DeclarationFinder.Members(selection.Value.QualifiedName)
                              .SingleOrDefault(declaration => declaration.DeclarationType == DeclarationType.ClassModule);

            return(targetInterface != null && targetClass != null &&
                   !_state.IsNewOrModified(targetInterface.QualifiedModuleName) &&
                   !_state.IsNewOrModified(targetClass.QualifiedModuleName));
        }
        protected void AddComponent(CodeExplorerItemViewModel node, string moduleText)
        {
            var nodeProject = node?.Declaration?.Project;

            if (node != null && nodeProject == null)
            {
                return; //The project is not available.
            }

            string optionCompare;

            using (var hostApp = Vbe.HostApplication())
            {
                optionCompare = hostApp?.ApplicationName == "Access" ? "Option Compare Database" :
                                string.Empty;
            }

            using (var components = node != null
                ? nodeProject.VBComponents
                : ComponentsCollectionFromActiveProject())
            {
                var folderAnnotation = (node is CodeExplorerCustomFolderViewModel folder) ? folder.FolderAttribute : $"'@Folder(\"{GetFolder(node)}\")";
                var fileName         = CreateTempTextFile(moduleText);

                using (var newComponent = components.Import(fileName))
                {
                    using (var codeModule = newComponent.CodeModule)
                    {
                        if (optionCompare.Length > 0)
                        {
                            codeModule.InsertLines(1, optionCompare);
                        }
                        if (folderAnnotation.Length > 0)
                        {
                            codeModule.InsertLines(1, folderAnnotation);
                        }
                        codeModule.CodePane.Show();
                    }
                }
                File.Delete(fileName);
            }
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var selection = Vbe.GetActiveSelection();

            if (!selection.HasValue)
            {
                return(false);
            }

            var target = _state.AllUserDeclarations.FindVariable(selection.Value);

            return(target != null &&
                   !_state.IsNewOrModified(target.QualifiedModuleName) &&
                   target.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Member));
        }
Esempio n. 11
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            var qualifiedSelection = Vbe.GetActiveSelection();

            if (!qualifiedSelection.HasValue)
            {
                return(false);
            }
            if (_state.IsNewOrModified(qualifiedSelection.Value.QualifiedName))
            {
                return(false);
            }

            var allDeclarations         = _state.AllDeclarations;
            var extractMethodValidation = new ExtractMethodSelectionValidation(allDeclarations);

            var canExecute = extractMethodValidation.withinSingleProcedure(qualifiedSelection.Value);

            return(canExecute);
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            var selection = Vbe.GetActiveSelection();

            if (!selection.HasValue)
            {
                return(false);
            }

            var interfaceClass = _state.AllUserDeclarations.SingleOrDefault(item =>
                                                                            item.QualifiedName.QualifiedModuleName.Equals(selection.Value.QualifiedName) &&
                                                                            ModuleTypes.Contains(item.DeclarationType));

            if (interfaceClass == null)
            {
                return(false);
            }

            // interface class must have members to be implementable
            var hasMembers = _state.AllUserDeclarations.Any(item =>
                                                            item.DeclarationType.HasFlag(DeclarationType.Member) &&
                                                            item.ParentDeclaration != null &&
                                                            item.ParentDeclaration.Equals(interfaceClass));

            if (!hasMembers)
            {
                return(false);
            }

            var parseTree = _state.GetParseTree(interfaceClass.QualifiedName.QualifiedModuleName);
            var context   = ((ParserRuleContext)parseTree).GetDescendents <VBAParser.ImplementsStmtContext>();

            // true if active code pane is for a class/document/form module
            return(!context.Any() &&
                   !_state.IsNewOrModified(interfaceClass.QualifiedModuleName) &&
                   !_state.IsNewOrModified(selection.Value.QualifiedName));
        }