private Task RefreshAvailableActions() { if (_selectedProject == null) { return(Task.FromResult(0)); } _viewModel.IsLoading = true; _viewModel.Actions.Clear(); var selectedProjectName = _selectedProject.Name; return(Task.Run(() => { var classes = _selectedProject.GetClasses(); foreach (CodeClass codeClass in classes) { if (codeClass.IsDerivedFrom["Microsoft.AspNetCore.Mvc.Controller"]) { var className = codeClass.Name; var functions = VisualStudioHelper.GetAllCodeElementsOfType(codeClass.Members, vsCMElement.vsCMElementFunction, false); foreach (CodeFunction function in functions) { var attributes = VisualStudioHelper.GetAllCodeElementsOfType(function.Attributes, vsCMElement.vsCMElementAttribute, false); var parameters = VisualStudioHelper.GetAllCodeElementsOfType(function.Parameters, vsCMElement.vsCMElementParameter, false); var parameterNames = new List <string>(); foreach (CodeParameter parameter in parameters) { parameterNames.Add(parameter.Name); } var functionName = function.Name; if (parameterNames.Any()) { functionName = functionName + "{" + string.Join(",", parameterNames) + "}"; } foreach (CodeAttribute attribute in attributes) { if (_httpAttributeFullNames.Contains(attribute.FullName)) { ExecuteRequestToUi(() => { _viewModel.Actions.Add(new ControllerActionViewModel { Application = selectedProjectName, Controller = className, Action = functionName, IsSelected = true, DisplayName = $"{className}/{functionName}" }); }); } } } } } ExecuteRequestToUi(() => _viewModel.IsLoading = false); })); }
public static List <CodeElement> GetClasses(this Project project) { return(VisualStudioHelper.GetAllCodeElementsOfType(project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false)); }