Example #1
0
        private static MemberDeclarationSyntax GetTypeDefinitionCode(WebIdlTypeDefinition token)
        {
            MemberDeclarationSyntax memberDeclaration = null;
            var type = token.Type;

            if (type == "enum")
            {
                memberDeclaration = GenerateEnumCode(token);
            }

            if (type == "interface")
            {
                memberDeclaration = GenerateInterfaceCode(token);
            }

            if (type == "dictionary")
            {
                memberDeclaration = GenerateInterfaceCode(token);
            }

            if (type == "callback")
            {
                memberDeclaration = GenerateDelegate(token);
            }

            return(memberDeclaration);
        }
Example #2
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)));

                //// Inherit BaseEntity<T> and implement IHaveIdentity: (public class Order : BaseEntity<T>, IHaveIdentity)
                //classDeclaration = classDeclaration.AddBaseListTypes(
                //    SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("BaseEntity<Order>")),
                //    SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("IHaveIdentity")));

                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);
            }
        }
Example #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);
            }
        }
Example #4
0
        private static MemberDeclarationSyntax GenerateEnumCode(WebIdlTypeDefinition token)
        {
            var firstEnumMember = token.Values.FirstOrDefault();
            MemberDeclarationSyntax memberDeclaration;

            if (firstEnumMember.Type == "string")
            {
                memberDeclaration = GenerateStringEnum(token);
            }
            else
            {
                memberDeclaration = GenerateSimpleEnum(token);
            }

            return(memberDeclaration);
        }
Example #5
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);
            }
        }
Example #6
0
        private static EnumDeclarationSyntax GenerateSimpleEnum(WebIdlTypeDefinition token)
        {
            //  Create a class: (class Order)
            var classDeclaration = SyntaxFactory.EnumDeclaration(token.Name);

            // Add the public modifier: (public class Order)
            classDeclaration = classDeclaration.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword));

            //// Inherit BaseEntity<T> and implement IHaveIdentity: (public class Order : BaseEntity<T>, IHaveIdentity)
            //classDeclaration = classDeclaration.AddBaseListTypes(
            //    SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("BaseEntity<Order>")),
            //    SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("IHaveIdentity")));

            foreach (var enumMemberDefinition in token.Values)
            {
                // Create a field declaration: (private bool canceled;)
                var fieldDeclaration = SyntaxFactory.EnumMemberDeclaration(enumMemberDefinition.Value);

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

            return(classDeclaration);
        }
Example #7
0
        private static ClassDeclarationSyntax GenerateStringEnum(WebIdlTypeDefinition token)
        {
            //  Create a class: (class Order)
            var classDeclaration = SyntaxFactory.ClassDeclaration(token.Name)
                                   .WithModifiers(SyntaxFactory.TokenList(
                                                      SyntaxFactory.Token(SyntaxKind.PublicKeyword)));

            var enumType = SyntaxFactory.ParseTypeName(token.Name);
            //// Inherit BaseEntity<T> and implement IHaveIdentity: (public class Order : BaseEntity<T>, IHaveIdentity)
            //classDeclaration = classDeclaration.AddBaseListTypes(
            //    SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("BaseEntity<Order>")),
            //    SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("IHaveIdentity")));

            var backingField = SyntaxFactory.FieldDeclaration(
                SyntaxFactory.VariableDeclaration(
                    SyntaxFactory.PredefinedType(
                        SyntaxFactory.Token(SyntaxKind.StringKeyword)))
                .WithVariables(
                    SyntaxFactory.SingletonSeparatedList <VariableDeclaratorSyntax>(
                        SyntaxFactory.VariableDeclarator(
                            SyntaxFactory.Identifier("field")))))
                               .WithModifiers(SyntaxFactory.TokenList(
                                                  SyntaxFactory.Token(SyntaxKind.PrivateKeyword),
                                                  SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword)));

            classDeclaration = classDeclaration.AddMembers(backingField);

            var constructorMember = SyntaxFactory.ConstructorDeclaration(token.Name)
                                    .WithParameterList(SyntaxFactory.ParameterList(
                                                           SyntaxFactory.SingletonSeparatedList <ParameterSyntax>(
                                                               SyntaxFactory.Parameter(
                                                                   SyntaxFactory.Identifier("value"))
                                                               .WithType(SyntaxFactory.PredefinedType(
                                                                             SyntaxFactory.Token(SyntaxKind.StringKeyword))))))
                                    .WithExpressionBody(
                SyntaxFactory.ArrowExpressionClause(
                    SyntaxFactory.AssignmentExpression(
                        SyntaxKind.SimpleAssignmentExpression,
                        SyntaxFactory.IdentifierName("field"),
                        SyntaxFactory.IdentifierName("value"))))
                                    .WithModifiers(SyntaxFactory.TokenList(
                                                       SyntaxFactory.Token(SyntaxKind.PrivateKeyword)))
                                    .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken));

            classDeclaration = classDeclaration.AddMembers(constructorMember);

            foreach (var enumMemberDefinition in token.Values)
            {
                var backingValue = SyntaxFactory.LiteralExpression(
                    SyntaxKind.StringLiteralExpression,
                    SyntaxFactory.Literal(enumMemberDefinition.Value));
                var initializationValue = SyntaxFactory.ObjectCreationExpression(enumType)
                                          .WithArgumentList(SyntaxFactory.ArgumentList(
                                                                SyntaxFactory.SingletonSeparatedList <ArgumentSyntax>(
                                                                    SyntaxFactory.Argument(backingValue))));
                var constField = SyntaxFactory.FieldDeclaration(
                    SyntaxFactory.VariableDeclaration(
                        enumType)
                    .WithVariables(
                        SyntaxFactory.SingletonSeparatedList <VariableDeclaratorSyntax>(
                            SyntaxFactory.VariableDeclarator(
                                SyntaxFactory.Identifier(NameService.ConvertFromWebIdlIdentifier(enumMemberDefinition.Value)))
                            .WithInitializer(
                                SyntaxFactory.EqualsValueClause(
                                    initializationValue)))))
                                 .WithModifiers(SyntaxFactory.TokenList(
                                                    SyntaxFactory.Token(SyntaxKind.PublicKeyword),
                                                    SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword),
                                                    SyntaxFactory.Token(SyntaxKind.StaticKeyword)));

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

            return(classDeclaration);
        }