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