/// <summary> /// Gets the containing class namespace. /// </summary> /// <param name="root">The root.</param> /// <returns></returns> public IEnumerable <ControllerActionModel> GetMethods(ClassDeclarationSyntax classDeclarationSyntax, SemanticModel semanticModel, ControllerModel controllerModel, Compilation compilation) { var actions = new List <ControllerActionModel>(); foreach (var method in classDeclarationSyntax.DescendantNodes().OfType <MethodDeclarationSyntax>()) { var trivias = method.GetLeadingTrivia(); var xmlCommentTrivia = trivias.FirstOrDefault(t => t.Kind() == SyntaxKind.SingleLineDocumentationCommentTrivia); var xml = xmlCommentTrivia.GetStructure(); var nodes = xml.DescendantNodes().Where(x => x.IsKind(SyntaxKind.XmlElement)).ToList(); foreach (var n in nodes) { var kids = n.ChildNodes().ToList(); } Console.WriteLine(xml); logger.LogDebug($"{classDeclarationSyntax.Identifier.ToFullString().Trim()}.{method.Identifier.ToFullString().Trim()}"); var action = new ControllerActionModel { ActionName = method.Identifier.ValueText, Summary = "" }; GetMethodParameters(method, semanticModel, action, compilation); actions.Add(action); } return(actions); }
public void GetMethodParameters(MethodDeclarationSyntax methodDeclaration, SemanticModel semanticModel, ControllerActionModel controllerActionModel, Compilation compilation) { var list = methodDeclaration.AttributeLists.SelectMany(a => a.Attributes).ToList(); var parameters = new List <ControllerActionParameter>(); var parameterListSyntax = methodDeclaration.ChildNodes().OfType <ParameterListSyntax>().FirstOrDefault(); foreach (var parameterSyntax in parameterListSyntax.Parameters) { var symbol = semanticModel.GetDeclaredSymbol(parameterSyntax); if (symbol == null) { continue; } var type = symbol.Type as INamedTypeSymbol; if (type == null) { continue; } var controllerParameter = new ControllerActionParameter { ParameterName = parameterSyntax.Identifier.ValueText, Required = !symbol.HasExplicitDefaultValue, ParameterTypeName = type.ToString(), ParameterTypeNamespace = type.ContainingNamespace.ToString() }; if (type.ContainingNamespace.IsGlobalNamespace) { //var location = type.Locations.FirstOrDefault(); //var tree = location?.SourceTree; //var root = tree.GetCompilationUnitRoot(); //var model = compilation.GetSemanticModel(tree); //var ns = GetNamespace(root); //controllerParameter.ParameterTypeNamespace = GetNamespace(root); } parameters.Add(controllerParameter); //var blockMethodParameter = BlockFactory.ParameterProvider.BlockMethodParameterFromMethodDeclaration(parameterSyntax, semanticModel, blockMethod); //if (blockMethodParameter != null) //{ // blockMethod.Parameters.Add(blockMethodParameter); //} } controllerActionModel.Parameters = parameters; }