示例#1
0
        //TODO: Redesign how refactoring commands are wired up to make this a responsibility of the command again.
        public bool CanExecute(RubberduckParserState state, QualifiedModuleName qualifiedName)
        {
            var interfaceClass = state.AllUserDeclarations.SingleOrDefault(item =>
                                                                           item.QualifiedName.QualifiedModuleName.Equals(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   = ((Antlr4.Runtime.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(qualifiedName));
        }
        private void ValidateInitialFolderModel(MoveMultipleFoldersModel model)
        {
            var firstStaleAffectedModules = model.ModulesBySourceFolder.Values
                                            .SelectMany(modules => modules)
                                            .FirstOrDefault(module => _state.IsNewOrModified(module.QualifiedModuleName));

            if (firstStaleAffectedModules != null)
            {
                throw new AffectedModuleIsStaleException(firstStaleAffectedModules.QualifiedModuleName);
            }
        }
示例#3
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var activeSelection = SelectionService.ActiveSelection();

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

            var member = _state.DeclarationFinder.AllUserDeclarations.FindTarget(activeSelection.Value, ValidDeclarationTypes);

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

            var parameters = _state.DeclarationFinder.UserDeclarations(DeclarationType.Parameter)
                             .Where(item => member.Equals(item.ParentScopeDeclaration))
                             .ToList();

            return(member.DeclarationType == DeclarationType.PropertyLet ||
                   member.DeclarationType == DeclarationType.PropertySet
                        ? parameters.Count > 1
                        : parameters.Any());
        }
示例#4
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);
        }
        private bool SpecializedEvaluateCanExecute(object parameter)
        {
            var activeSelection = SelectionProvider.ActiveSelection();

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

            var member = GetTarget();

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

            var parameters = _state.DeclarationFinder
                             .UserDeclarations(DeclarationType.Parameter)
                             .Where(item => member.Equals(item.ParentScopeDeclaration))
                             .ToList();

            return(member.DeclarationType == DeclarationType.PropertyLet ||
                   member.DeclarationType == DeclarationType.PropertySet
                ? parameters.Count > 1
                : parameters.Any());
        }
        private bool SpecializedEvaluateCanExecute(object parameter)
        {
            var target = GetTarget();

            return(target is ModuleDeclaration &&
                   !_state.IsNewOrModified(target.QualifiedModuleName));
        }
        private bool SpecializedEvaluateCanExecute(object parameter)
        {
            var target = GetTarget();

            return(target != null &&
                   target.IsUserDefined &&
                   !_state.IsNewOrModified(target.QualifiedModuleName));
        }
        private bool SpecializedEvaluateCanExecute(object parameter)
        {
            var target = GetTarget();

            return(target != null &&
                   !_state.IsNewOrModified(target.QualifiedModuleName) &&
                   target.References.Any());
        }
示例#9
0
        private bool SpecializedEvaluateCanExecute(object parameter)
        {
            var activeSelection = SelectionProvider.ActiveSelection();

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

            var targetInterface = _state.DeclarationFinder.FindInterface(activeSelection.Value);

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

            return(targetInterface != null && targetClass != null &&
                   !_state.IsNewOrModified(targetInterface.QualifiedModuleName) &&
                   !_state.IsNewOrModified(targetClass.QualifiedModuleName));
        }
示例#10
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 override void ValidateInitialModel(RenameFolderModel model)
        {
            var firstStaleAffectedModules = model.ModulesToMove
                                            .FirstOrDefault(module => _state.IsNewOrModified(module.QualifiedModuleName));

            if (firstStaleAffectedModules != null)
            {
                throw new AffectedModuleIsStaleException(firstStaleAffectedModules.QualifiedModuleName);
            }
        }
示例#12
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var activeSelection = SelectionService.ActiveSelection();

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

            var interfaceClass = _state.AllUserDeclarations.SingleOrDefault(item =>
                                                                            item.QualifiedName.QualifiedModuleName.Equals(activeSelection.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(activeSelection.Value.QualifiedName));
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var target = GetTarget();

            return(target != null && !_state.IsNewOrModified(target.QualifiedModuleName));
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var activeSelection = SelectionService.ActiveSelection();

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

            var targetInterface = _state.DeclarationFinder.FindInterface(activeSelection.Value);

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

            return(targetInterface != null && targetClass != null &&
                   !_state.IsNewOrModified(targetInterface.QualifiedModuleName) &&
                   !_state.IsNewOrModified(targetClass.QualifiedModuleName));
        }
示例#15
0
        private void ValidateModel(MoveMultipleToFolderModel model)
        {
            if (string.IsNullOrEmpty(model.TargetFolder))
            {
                throw new NoTargetFolderException();
            }

            var firstStaleAffectedModules = model.Targets
                                            .FirstOrDefault(module => _state.IsNewOrModified(module.QualifiedModuleName));

            if (firstStaleAffectedModules != null)
            {
                throw new AffectedModuleIsStaleException(firstStaleAffectedModules.QualifiedModuleName);
            }
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            using (var activePane = Vbe.ActiveCodePane)
            {
                if (activePane == null || activePane.IsWrappingNullReference || _state.Status != ParserState.Ready)
                {
                    return(false);
                }

                var target = _state.FindSelectedDeclaration(activePane);
                return(target != null &&
                       !_state.IsNewOrModified(target.QualifiedModuleName) &&
                       (target.DeclarationType == DeclarationType.Variable ||
                        target.DeclarationType == DeclarationType.Constant) &&
                       target.References.Any());
            }
        }
示例#17
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            Declaration target;

            using (var pane = Vbe.ActiveCodePane)
            {
                if (pane == null || _state.Status != ParserState.Ready)
                {
                    return(false);
                }

                target = _state.FindSelectedDeclaration(pane);
            }
            return(target != null &&
                   target.DeclarationType == DeclarationType.Variable &&
                   !target.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Member) &&
                   !_state.IsNewOrModified(target.QualifiedModuleName));
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            Declaration target;

            using (var activePane = Vbe.ActiveCodePane)
            {
                if (activePane == null || activePane.IsWrappingNullReference)
                {
                    return(false);
                }

                target = _state.FindSelectedDeclaration(activePane);
            }

            return(_state.Status == ParserState.Ready &&
                   target != null &&
                   target.IsUserDefined &&
                   !_state.IsNewOrModified(target.QualifiedModuleName));
        }
        private bool SpecialEvaluateCanExecute(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)
        {
            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));
        }
示例#21
0
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var activeSelection = SelectionService.ActiveSelection();

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

            var target = _state.DeclarationFinder.FindSelectedDeclaration(activeSelection.Value);

            return(target != null &&
                   target.IsUserDefined &&
                   !_state.IsNewOrModified(target.QualifiedModuleName));
        }
        private bool SpecializedEvaluateCanExecute(object parameter)
        {
            var target = GetTarget();

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

            var targetType = target.DeclarationType;

            if (!targetType.HasFlag(DeclarationType.Member) &&
                !targetType.HasFlag(DeclarationType.Module) &&
                !targetType.HasFlag(DeclarationType.Variable) &&
                !targetType.HasFlag(DeclarationType.Constant))
            {
                return(false);
            }

            return(!_state.IsNewOrModified(target.QualifiedModuleName));
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var activeSelection = SelectionService.ActiveSelection();

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

            var target = _state.DeclarationFinder.FindSelectedDeclaration(activeSelection.Value);

            return(target != null &&
                   !_state.IsNewOrModified(target.QualifiedModuleName) &&
                   (target.DeclarationType == DeclarationType.Variable ||
                    target.DeclarationType == DeclarationType.Constant) &&
                   target.References.Any());
        }
        protected override bool EvaluateCanExecute(object parameter)
        {
            //This should come first because it does not require COM access.
            if (_state.Status != ParserState.Ready)
            {
                return(false);
            }

            var activeSelection = SelectionService.ActiveSelection();

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

            var target = _state.DeclarationFinder.FindSelectedDeclaration(activeSelection.Value);

            return(target != null &&
                   target.DeclarationType == DeclarationType.Variable &&
                   !target.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Member) &&
                   !_state.IsNewOrModified(target.QualifiedModuleName));
        }
示例#25
0
        public bool CanExecuteForNode(ICodeExplorerNode node)
        {
            if (!ApplicableNodes.Contains(node.GetType()) ||
                !(node is CodeExplorerItemViewModel) ||
                node.Declaration == null)
            {
                return(false);
            }

            var target     = node.Declaration;
            var targetType = target.DeclarationType;

            if (!targetType.HasFlag(DeclarationType.Module) &&
                !targetType.HasFlag(DeclarationType.Variable) &&
                !targetType.HasFlag(DeclarationType.Constant) &&
                !targetType.HasFlag(DeclarationType.Member) ||
                targetType == DeclarationType.LibraryFunction ||
                targetType == DeclarationType.LibraryProcedure)
            {
                return(false);
            }

            return(!_state.IsNewOrModified(target.QualifiedModuleName));
        }