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