public CSharpControllerModel AnalyzeController(INamedTypeSymbol classSymbol, bool isDotNetCore) { var controllerModel = new CSharpControllerModel(); controllerModel.Name = ControllerHelper.ExtractControllerName(classSymbol.Name); var classAttributes = classSymbol.GetAttributes(); if (!classAttributes.IsDefaultOrEmpty) { // .net core projects use Route attribute on controllers instead of RoutePrefix var routePrefix = isDotNetCore ? AttributeHelper.GetRoute(classAttributes) : AttributeHelper.GetRoutePrefix(classAttributes); if (!string.IsNullOrEmpty(routePrefix)) { controllerModel.RoutePrefix = routePrefix; } } var methodSymbols = ControllerHelper.GetPublicMethods(classSymbol); foreach (var methodSymbol in methodSymbols) { var methodModel = new CSharpControllerMethodModel(); methodModel.Name = methodSymbol.Name; var methodAttributes = methodSymbol.GetAttributes(); if (!methodAttributes.IsDefaultOrEmpty) { var httpMethod = AttributeHelper.DetermineHttpMehod(methodAttributes); if (httpMethod.HasValue) { methodModel.HttpMethod = httpMethod.Value; } var route = AttributeHelper.GetRoute(methodAttributes); if (!string.IsNullOrEmpty(route)) { methodModel.Route = route; } } methodModel.ReturnType = _typeAnalyzer.AnalyzeType(methodSymbol.ReturnType); var parameters = methodSymbol.Parameters.ToList(); foreach (var parameter in parameters) { methodModel.Parameters.Add(new Tuple <CSharpTypeModel, string>(_typeAnalyzer.AnalyzeType(parameter.Type), parameter.Name)); } controllerModel.Methods.Add(methodModel); } var dependencies = GetDependencies(classSymbol); foreach (var dependency in dependencies) { controllerModel.Dependencies.Add(new CSharpDependencyModel() { Name = dependency.Name, Namespace = dependency.ContainingNamespace.ToString(), DependencyKind = dependency.TypeKind == TypeKind.Class ? DependencyKind.Model : DependencyKind.Enum }); } return(controllerModel); }