示例#1
0
        private static ParameterSyntax CreateParameter(WebIdlArgumentDefinition arg)
        {
            var item = SyntaxFactory.Identifier(NameService.GetValidIndentifier(arg.EscapedName));

            return(SyntaxFactory.Parameter(item)
                   .WithType(CreateType(arg.IdlType)));
        }
示例#2
0
        private static MemberDeclarationSyntax CreateInterfaceOperation(string proxyClass, WebIdlMemberDefinition memberDefinition)
        {
            var name = memberDefinition.Body.Name.Escaped;

            try
            {
                var returnTypeReference = memberDefinition.Body.IdlType;
                var isAsyncCall         = NameService.IsAsync(returnTypeReference);
                if (isAsyncCall)
                {
                    name += "Async";
                }

                var returnType = CreateType(returnTypeReference);
                var arguments  = memberDefinition.Body.Arguments.Select(CreateParameter);
                var body       = isAsyncCall
                    ? GenerateAsyncProxyCall(proxyClass, memberDefinition)
                    : GenerateSyncProxyCall(proxyClass, memberDefinition);
                var methodModifier = isAsyncCall
                    ? SyntaxFactory.TokenList(
                    SyntaxFactory.Token(SyntaxKind.PublicKeyword),
                    SyntaxFactory.Token(SyntaxKind.AsyncKeyword))
                    : SyntaxFactory.TokenList(
                    SyntaxFactory.Token(SyntaxKind.PublicKeyword));
                return(SyntaxFactory.MethodDeclaration(returnType, NameService.GetValidIndentifier(name))
                       .WithModifiers(methodModifier)
                       .WithParameterList(SyntaxFactory.ParameterList(SyntaxFactory.SeparatedList(arguments)))
                       .WithBody(body));
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"Error during generation operation {name}", ex);
            }
        }
示例#3
0
        private static ClassDeclarationSyntax GenerateInterfaceCode(WebIdlTypeDefinition token)
        {
            var name = token.Name;

            try
            {
                var classDeclaration = SyntaxFactory.ClassDeclaration(name)
                                       .WithModifiers(SyntaxFactory.TokenList(
                                                          SyntaxFactory.Token(SyntaxKind.PublicKeyword),
                                                          SyntaxFactory.Token(SyntaxKind.PartialKeyword)));

                var arguments = new[]
                {
                    Parameter(Identifier(NameService.GetValidIndentifier("asyncJsRunTime")))
                    .WithType(ParseTypeName("IJSRuntime")),
                };
                var constructorMember = ConstructorDeclaration(NameService.GetValidIndentifier(name))
                                        .WithModifiers(TokenList(
                                                           Token(SyntaxKind.PublicKeyword)))
                                        .WithParameterList(ParameterList(SeparatedList(arguments)))
                                        .WithBody(Block(
                                                      ParseStatement("this.asyncJsRunTime = asyncJsRunTime;")));
                classDeclaration = classDeclaration.AddMembers(constructorMember);
                var asyncJsRunTimeField = SyntaxFactory.FieldDeclaration(
                    VariableDeclaration(
                        ParseTypeName("IJSRuntime"))
                    .WithVariables(
                        SyntaxFactory.SingletonSeparatedList <VariableDeclaratorSyntax>(
                            SyntaxFactory.VariableDeclarator(
                                SyntaxFactory.Identifier(NameService.GetValidIndentifier("asyncJsRunTime"))))))
                                          .WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PrivateKeyword)));
                classDeclaration = classDeclaration.AddMembers(asyncJsRunTimeField);

                var proxyClass = $"Blazor{token.Name}Proxy";
                foreach (var enumMemberDefinition in token.Members)
                {
                    var constField = CreateInterfaceMember(proxyClass, enumMemberDefinition);

                    // Add the field, the property and method to the class.
                    classDeclaration = classDeclaration.AddMembers(constField);
                }

                return(classDeclaration);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"Error during generation interface {name}", ex);
            }
        }
示例#4
0
        private static DelegateDeclarationSyntax GenerateDelegate(WebIdlTypeDefinition memberDefinition)
        {
            var name = memberDefinition.Name;

            try
            {
                var returnTypeReference = memberDefinition.IdlType;
                var returnType          = CreateType(returnTypeReference);
                var arguments           = memberDefinition.Arguments.Select(CreateParameter);
                var methodModifier      = SyntaxFactory.TokenList(
                    SyntaxFactory.Token(SyntaxKind.PublicKeyword));
                return(SyntaxFactory.DelegateDeclaration(returnType, NameService.GetValidIndentifier(name))
                       .WithModifiers(methodModifier)
                       .WithParameterList(SyntaxFactory.ParameterList(SyntaxFactory.SeparatedList(arguments))));
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"Error during generation operation {name}", ex);
            }
        }
示例#5
0
        private static MemberDeclarationSyntax CreateInterfaceField(WebIdlMemberDefinition memberDefinition)
        {
            var name = memberDefinition.Name;

            try
            {
                var constField = SyntaxFactory.FieldDeclaration(
                    SyntaxFactory.VariableDeclaration(
                        SyntaxFactory.ParseTypeName(NameService.GetTypeName(memberDefinition.IdlType)))
                    .WithVariables(
                        SyntaxFactory.SingletonSeparatedList <VariableDeclaratorSyntax>(
                            SyntaxFactory.VariableDeclarator(
                                SyntaxFactory.Identifier(NameService.GetValidIndentifier(memberDefinition.Name))))))
                                 .WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)));
                return(constField);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"Error during generation field {name}", ex);
            }
        }
示例#6
0
 private static ArgumentSyntax CreateArgumentCallExpression(WebIdlArgumentDefinition argumentDefinition)
 {
     return(SyntaxFactory.Argument(
                SyntaxFactory.IdentifierName(NameService.GetValidIndentifier(argumentDefinition.Name))));
 }