Ejemplo n.º 1
0
    public static MethodDeclarationSyntax CreateInterfaceMethod(
        string parameterTypeName,
        string resultTypeName,
        bool hasParameters)
    {
        ArgumentNullException.ThrowIfNull(parameterTypeName);
        ArgumentNullException.ThrowIfNull(resultTypeName);

        var arguments = hasParameters
            ? new SyntaxNodeOrToken[]
        {
            SyntaxParameterFactory.Create(parameterTypeName, "parameters"),
            SyntaxTokenFactory.Comma(),
            SyntaxParameterFactory.Create(nameof(CancellationToken), nameof(CancellationToken).EnsureFirstCharacterToLower())
            .WithDefault(SyntaxFactory.EqualsValueClause(
                             SyntaxFactory.LiteralExpression(SyntaxKind.DefaultLiteralExpression, SyntaxTokenFactory.DefaultKeyword()))),
        }
            : new SyntaxNodeOrToken[]
        {
            SyntaxParameterFactory.Create(nameof(CancellationToken), nameof(CancellationToken).EnsureFirstCharacterToLower())
            .WithDefault(SyntaxFactory.EqualsValueClause(
                             SyntaxFactory.LiteralExpression(SyntaxKind.DefaultLiteralExpression, SyntaxTokenFactory.DefaultKeyword()))),
        };

        return(SyntaxFactory.MethodDeclaration(
                   SyntaxFactory.GenericName(SyntaxFactory.Identifier(nameof(Task)))
                   .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(resultTypeName)),
                   SyntaxFactory.Identifier("ExecuteAsync"))
               .WithParameterList(SyntaxFactory.ParameterList(SyntaxFactory.SeparatedList <ParameterSyntax>(arguments)))
               .WithSemicolonToken(SyntaxTokenFactory.Semicolon()));
    }
        private static MethodDeclarationSyntax CreateMembersForEndpointsPrivateHelper(
            KeyValuePair <OperationType, OpenApiOperation> apiOperation,
            bool hasRouteParameters)
        {
            var operationName              = apiOperation.Value.GetOperationName();
            var interfaceName              = "I" + operationName + NameConstants.ContractHandler;
            var methodName                 = $"Invoke{operationName}Async";
            var parameterTypeName          = operationName + NameConstants.ContractParameters;
            var hasParametersOrRequestBody = apiOperation.Value.HasParametersOrRequestBody() || hasRouteParameters;

            // Create method # use CreateParameterList & CreateCodeBlockReturnStatement
            var methodDeclaration = SyntaxFactory.MethodDeclaration(
                SyntaxFactory.GenericName(SyntaxFactory.Identifier(nameof(Task)))
                .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(nameof(ActionResult))),
                SyntaxFactory.Identifier(methodName))
                                    .AddModifiers(SyntaxTokenFactory.PrivateKeyword())
                                    .AddModifiers(SyntaxTokenFactory.StaticKeyword())
                                    .AddModifiers(SyntaxTokenFactory.AsyncKeyword())
                                    .WithParameterList(CreateParameterList(hasParametersOrRequestBody, parameterTypeName, interfaceName, false))
                                    .WithBody(
                SyntaxFactory.Block(
                    CreateCodeBlockReturnStatementForHelper(hasParametersOrRequestBody)));

            return(methodDeclaration);
        }
Ejemplo n.º 3
0
    public static PropertyDeclarationSyntax CreateListAuto(
        string dataType,
        string propertyName,
        bool initializeList = true)
    {
        var propertyDeclaration = SyntaxFactory.PropertyDeclaration(
            SyntaxFactory.GenericName(SyntaxFactory.Identifier(Microsoft.OpenApi.Models.NameConstants.List))
            .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(dataType)),
            SyntaxFactory.Identifier(propertyName))
                                  .AddModifiers(SyntaxTokenFactory.PublicKeyword())
                                  .WithAccessorList(
            SyntaxFactory.AccessorList(
                SyntaxFactory.List(
                    new[]
        {
            SyntaxAccessorDeclarationFactory.Get(),
            SyntaxAccessorDeclarationFactory.Set(),
        })));

        if (initializeList)
        {
            propertyDeclaration = propertyDeclaration.WithInitializer(
                SyntaxFactory.EqualsValueClause(
                    SyntaxFactory.ObjectCreationExpression(
                        SyntaxFactory.GenericName(SyntaxFactory.Identifier(Microsoft.OpenApi.Models.NameConstants.List))
                        .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(dataType)))
                    .WithArgumentList(
                        SyntaxFactory.ArgumentList())))
                                  .WithSemicolonToken(SyntaxTokenFactory.Semicolon());
        }

        return(propertyDeclaration);
    }
Ejemplo n.º 4
0
        private MemberDeclarationSyntax CreateInvokeExecuteAsyncMethod(string parameterTypeName, string resultTypeName, bool hasParameters)
        {
            var arguments = hasParameters
                ? new SyntaxNodeOrToken[]
            {
                SyntaxParameterFactory.Create(parameterTypeName, "parameters"),
                SyntaxTokenFactory.Comma(),
                SyntaxParameterFactory.Create(nameof(CancellationToken), nameof(CancellationToken).EnsureFirstCharacterToLower()),
            }
                : new SyntaxNodeOrToken[]
            {
                SyntaxParameterFactory.Create(nameof(CancellationToken), nameof(CancellationToken).EnsureFirstCharacterToLower()),
            };

            return(SyntaxFactory.MethodDeclaration(
                       SyntaxFactory.GenericName(SyntaxFactory.Identifier(nameof(Task)))
                       .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(resultTypeName)),
                       SyntaxFactory.Identifier("InvokeExecuteAsync"))
                   .WithModifiers(
                       SyntaxFactory.TokenList(
                           SyntaxFactory.Token(
                               CreatePragmaWarningCodeStyle1998(true),
                               SyntaxKind.PrivateKeyword,
                               SyntaxFactory.TriviaList()), SyntaxFactory.Token(SyntaxKind.AsyncKeyword)))
                   .WithParameterList(SyntaxFactory.ParameterList(SyntaxFactory.SeparatedList <ParameterSyntax>(arguments)))
                   .WithBody(
                       SyntaxFactory.Block(SyntaxThrowStatementFactory.CreateNotImplementedException())
                       .WithOpenBraceToken(
                           SyntaxFactory.Token(
                               CreatePragmaWarningCodeStyle1998(false),
                               SyntaxKind.OpenBraceToken,
                               SyntaxFactory.TriviaList()))));
        }
Ejemplo n.º 5
0
    private MethodDeclarationSyntax CreateMembersForEndpoints(
        KeyValuePair <OperationType, OpenApiOperation> apiOperation,
        string urlPath,
        string area,
        bool hasRouteParameters)
    {
        var operationName     = apiOperation.Value.GetOperationName();
        var interfaceName     = "I" + operationName + NameConstants.ContractHandler;
        var methodName        = operationName + "Async";
        var helperMethodName  = $"Invoke{operationName}Async";
        var parameterTypeName = operationName + NameConstants.ContractParameters;

        // Create method # use CreateParameterList & CreateCodeBlockReturnStatement
        var methodDeclaration = SyntaxFactory.MethodDeclaration(
            SyntaxFactory.GenericName(SyntaxFactory.Identifier(nameof(Task)))
            .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(nameof(ActionResult))),
            SyntaxFactory.Identifier(methodName))
                                .AddModifiers(SyntaxTokenFactory.PublicKeyword())
                                .WithParameterList(CreateParameterList(apiOperation.Value.HasParametersOrRequestBody() || hasRouteParameters, parameterTypeName, interfaceName, true))
                                .WithBody(
            SyntaxFactory.Block(
                SyntaxIfStatementFactory.CreateParameterArgumentNullCheck("handler", false),
                CreateCodeBlockReturnStatement(helperMethodName, apiOperation.Value.HasParametersOrRequestBody() || hasRouteParameters)));

        // Create and add Http-method-attribute
        var httpAttributeRoutePart = GetHttpAttributeRoutePart(urlPath);

        methodDeclaration = string.IsNullOrEmpty(httpAttributeRoutePart)
            ? methodDeclaration.AddAttributeLists(
            SyntaxAttributeListFactory.Create($"Http{apiOperation.Key}"))
            : methodDeclaration.AddAttributeLists(
            SyntaxAttributeListFactory.CreateWithOneItemWithOneArgument(
                $"Http{apiOperation.Key}",
                httpAttributeRoutePart));

        // Create and add RequestFormLimits-attribute
        if (apiOperation.Value.HasRequestBodyWithAnythingAsFormatTypeBinary())
        {
            methodDeclaration = methodDeclaration.AddAttributeLists(
                SyntaxAttributeListFactory.Create(
                    "RequestFormLimits(MultipartBodyLengthLimit = long.MaxValue)"));
        }

        // Create and add producesResponseTypes-attributes
        var producesResponseAttributeParts = apiOperation.Value.Responses.GetProducesResponseAttributeParts(
            OperationSchemaMappings,
            area,
            ApiProjectOptions.ProjectName,
            ApiProjectOptions.ApiOptions.Generator.Response.UseProblemDetailsAsDefaultBody,
            apiOperation.Value.HasParametersOrRequestBody(),
            includeIfNotDefinedAuthorization: false,
            includeIfNotDefinedInternalServerError: false);

        return(producesResponseAttributeParts
               .Aggregate(
                   methodDeclaration,
                   (current, producesResponseAttributePart) => current.AddAttributeLists(
                       SyntaxAttributeListFactory.Create(producesResponseAttributePart))));
    }
Ejemplo n.º 6
0
        public void CreateWithOneItem()
        {
            // Arrange
            var expected = SyntaxFactory.TypeArgumentList(
                SyntaxFactory.SingletonSeparatedList <TypeSyntax>(
                    SyntaxFactory.IdentifierName("int")));

            // Act
            var actual = SyntaxTypeArgumentListFactory.CreateWithOneItem("int");

            // Assert
            Assert.Equal(expected.ToFullString(), actual.ToFullString());
        }
Ejemplo n.º 7
0
    private MemberDeclarationSyntax CreateExecuteAsyncMethod(
        string parameterTypeName,
        string resultTypeName,
        bool hasParameters)
    {
        var arguments = hasParameters
            ? new SyntaxNodeOrToken[]
        {
            SyntaxParameterFactory.Create(parameterTypeName, "parameters"),
            SyntaxTokenFactory.Comma(),
            SyntaxParameterFactory.Create(nameof(CancellationToken), nameof(CancellationToken).EnsureFirstCharacterToLower())
            .WithDefault(SyntaxFactory.EqualsValueClause(
                             SyntaxFactory.LiteralExpression(SyntaxKind.DefaultLiteralExpression, SyntaxTokenFactory.DefaultKeyword()))),
        }
            : new SyntaxNodeOrToken[]
        {
            SyntaxParameterFactory.Create(nameof(CancellationToken), nameof(CancellationToken).EnsureFirstCharacterToLower())
            .WithDefault(SyntaxFactory.EqualsValueClause(
                             SyntaxFactory.LiteralExpression(SyntaxKind.DefaultLiteralExpression, SyntaxTokenFactory.DefaultKeyword()))),
        };

        var codeBody = hasParameters
            ? SyntaxFactory.Block(
            SyntaxIfStatementFactory.CreateParameterArgumentNullCheck("parameters"),
            SyntaxFactory.ReturnStatement(
                SyntaxFactory.InvocationExpression(SyntaxFactory.IdentifierName("InvokeExecuteAsync"))
                .WithArgumentList(
                    SyntaxFactory.ArgumentList(
                        SyntaxFactory.SeparatedList <ArgumentSyntax>(
                            new SyntaxNodeOrToken[]
        {
            SyntaxFactory.Argument(SyntaxFactory.IdentifierName("parameters")),
            SyntaxTokenFactory.Comma(),
            SyntaxFactory.Argument(SyntaxFactory.IdentifierName(nameof(CancellationToken).EnsureFirstCharacterToLower())),
        })))))
            : SyntaxFactory.Block(
            SyntaxThrowStatementFactory.CreateNotImplementedException());

        return(SyntaxFactory.MethodDeclaration(
                   SyntaxFactory.GenericName(SyntaxFactory.Identifier(nameof(Task)))
                   .WithTypeArgumentList(SyntaxTypeArgumentListFactory.CreateWithOneItem(resultTypeName)),
                   SyntaxFactory.Identifier("ExecuteAsync"))
               .WithModifiers(SyntaxTokenListFactory.PublicKeyword())
               .WithParameterList(SyntaxFactory.ParameterList(SyntaxFactory.SeparatedList <ParameterSyntax>(arguments)))
               .WithBody(codeBody));
    }
Ejemplo n.º 8
0
        public void CreateWithTwoItems()
        {
            // Arrange
            var expected = SyntaxFactory.TypeArgumentList(
                SyntaxFactory.SeparatedList <TypeSyntax>(
                    new SyntaxNodeOrToken[]
            {
                SyntaxFactory.IdentifierName("int"),
                SyntaxFactory.Token(SyntaxTriviaList.Empty, SyntaxKind.CommaToken, new SyntaxTriviaList(SyntaxFactory.Space)),
                SyntaxFactory.IdentifierName("bool"),
            }));

            // Act
            var actual = SyntaxTypeArgumentListFactory.CreateWithTwoItems("int", "bool");

            // Assert
            Assert.Equal(expected.ToFullString(), actual.ToFullString());
        }