protected override MemberDeclarationSyntax CreateType()
        {
            return(SF.ClassDeclaration
                   (
                       SF.List <AttributeListSyntax>(),
                       SF.TokenList(SF.Token(SyntaxKind.PublicKeyword)),
                       Symbols.GetInterfaceDefaultNameSyntaxToken(Type),
                       null,
                       SF.BaseList(SF.SeparatedList(CreateBaseTypes())),
                       SF.List <TypeParameterConstraintClauseSyntax>(),
                       SF.List(CreateMembers())
                   ));

            IEnumerable <BaseTypeSyntax> CreateBaseTypes()
            {
                yield return(SF.SimpleBaseType(SF.ParseTypeName("DeputyBase")));

                yield return(SF.SimpleBaseType(Symbols.GetNameSyntax(Type, disambiguate: true)));
            }

            IEnumerable <MemberDeclarationSyntax> CreateMembers()
            {
                return(CreateProperties());
            }
        }
        protected override MemberDeclarationSyntax CreateType()
        {
            return(SF.ClassDeclaration
                   (
                       CreateAttributes(),
                       SF.TokenList(
                           SF.Token(SyntaxKind.InternalKeyword),
                           SF.Token(SyntaxKind.SealedKeyword)),
                       GetProxyTypeNameSyntax(),
                       null,
                       CreateBaseList(),
                       SF.List <TypeParameterConstraintClauseSyntax>(),
                       SF.List(CreateMembers())
                   ));

            SyntaxList <AttributeListSyntax> CreateAttributes()
            {
                var typeOfExpression          = SF.TypeOfExpression(Symbols.GetNameSyntax(Type));
                var fullyQualifiedNameLiteral = SF.Literal(Type.FullyQualifiedName);

                return(SF.List(new[]
                {
                    SF.AttributeList(SF.SeparatedList(new[]
                    {
                        SF.Attribute(
                            SF.ParseName("JsiiTypeProxy"),
                            SF.ParseAttributeArgumentList($"({typeOfExpression}, {fullyQualifiedNameLiteral})")
                            )
                    }))
                }));
            }

            BaseListSyntax CreateBaseList()
            {
                return(SF.BaseList(SF.SeparatedList(GetBaseTypes())));

                IEnumerable <BaseTypeSyntax> GetBaseTypes()
                {
                    if (Type is InterfaceType)
                    {
                        yield return(SF.SimpleBaseType(SF.ParseTypeName("DeputyBase")));
                    }

                    Namespaces.Add(Type);
                    yield return(SF.SimpleBaseType(Symbols.GetNameSyntax(Type, disambiguate: true)));
                }
            }

            IEnumerable <MemberDeclarationSyntax> CreateMembers()
            {
                return(CreateConstructors()
                       .Concat(CreateProperties())
                       .Concat(CreateMethods()));
            }
        }
Example #3
0
 public static BaseListSyntax ImplementIEquatable(string equatableTypeName)
 {
     return(SF.BaseList(
                SF.SingletonSeparatedList <BaseTypeSyntax>(
                    SF.SimpleBaseType(
                        SF.QualifiedName(
                            SF.IdentifierName("System"),
                            SF.GenericName(
                                SF.Identifier("IEquatable"))
                            .WithTypeArgumentList(
                                SF.TypeArgumentList(
                                    SF.SingletonSeparatedList <TypeSyntax>(
                                        SF.IdentifierName(equatableTypeName)))))))));
 }
Example #4
0
        protected override MemberDeclarationSyntax CreateType()
        {
            return(SF.InterfaceDeclaration
                   (
                       CreateAttributes(),
                       SF.TokenList(SF.Token(SyntaxKind.PublicKeyword)),
                       Symbols.GetNameSyntaxToken(Type),
                       null,
                       CreateBaseList(),
                       SF.List <TypeParameterConstraintClauseSyntax>(),
                       SF.List(CreateMembers())
                   ));

            SyntaxList <AttributeListSyntax> CreateAttributes()
            {
                TypeOfExpressionSyntax typeOfExpression          = SF.TypeOfExpression(Symbols.GetNameSyntax(Type));
                SyntaxToken            fullyQualifiedNameLiteral = SF.Literal(Type.FullyQualifiedName);

                return(SF.List(new[] {
                    SF.AttributeList(SF.SeparatedList(new[] {
                        SF.Attribute(
                            SF.ParseName("JsiiInterface"),
                            SF.ParseAttributeArgumentList($"({typeOfExpression}, {fullyQualifiedNameLiteral})")
                            )
                    }))
                }));
            }

            BaseListSyntax CreateBaseList()
            {
                IEnumerable <BaseTypeSyntax> baseTypes = GetBaseTypes();

                return(baseTypes?.Any() == true?SF.BaseList(SF.SeparatedList(baseTypes)) : null);

                IEnumerable <BaseTypeSyntax> GetBaseTypes()
                {
                    foreach (TypeReference interfaceReference in Type.Interfaces ?? Enumerable.Empty <TypeReference>())
                    {
                        Namespaces.Add(interfaceReference);
                        yield return(SF.SimpleBaseType(Symbols.GetTypeSyntax(interfaceReference)));
                    }
                }
            }

            IEnumerable <MemberDeclarationSyntax> CreateMembers()
            {
                return(CreateProperties().Concat(CreateMethods()));
            }
        }
Example #5
0
 /// <summary>
 /// private class CompiledHandlebarsTemplateAttribute : Attribute
 /// </summary>
 /// <returns></returns>
 internal static ClassDeclarationSyntax CompiledHandlebarsLayoutAttributeClass()
 {
     return
         (SF.ClassDeclaration(
              default(SyntaxList <AttributeListSyntax>),
              SF.TokenList(
                  SF.Token(SyntaxKind.PrivateKeyword)),
              SF.Identifier(StringConstants.LAYOUTATTRIBUTEFULL),
              default(TypeParameterListSyntax),
              SF.BaseList(new SeparatedSyntaxList <BaseTypeSyntax>().Add(
                              SF.SimpleBaseType(SF.ParseTypeName("Attribute")))),
              default(SyntaxList <TypeParameterConstraintClauseSyntax>),
              default(SyntaxList <MemberDeclarationSyntax>)
              ));
 }
Example #6
0
        protected override MemberDeclarationSyntax CreateType()
        {
            return(SF.InterfaceDeclaration
                   (
                       CreateAttributes(),
                       SF.TokenList(SF.Token(SyntaxKind.PublicKeyword)),
                       Symbols.GetNameSyntaxToken(Type),
                       null,
                       CreateBaseList(),
                       SF.List <TypeParameterConstraintClauseSyntax>(),
                       SF.List(CreateMembers())
                   ));

            SyntaxList <AttributeListSyntax> CreateAttributes()
            {
                TypeOfExpressionSyntax typeOfExpression          = SF.TypeOfExpression(Symbols.GetNameSyntax(Type));
                SyntaxToken            fullyQualifiedNameLiteral = SF.Literal(Type.FullyQualifiedName);

                return(SF.List(GetAttributeLists()));

                IEnumerable <AttributeListSyntax> GetAttributeLists()
                {
                    yield return(SF.AttributeList(SF.SeparatedList(new[] {
                        SF.Attribute(
                            SF.ParseName("JsiiInterface"),
                            SF.ParseAttributeArgumentList($"(nativeType: {typeOfExpression}, fullyQualifiedName: {fullyQualifiedNameLiteral})")
                            )
                    })));

                    if (Type.Docs?.Stability == Stability.Deprecated)
                    {
                        var argument = Type.Docs?.Deprecated != null?SF.Literal(Type.Docs?.Deprecated).ToString() : "";

                        yield return(SF.AttributeList(SF.SeparatedList(new[] {
                            SF.Attribute(
                                SF.ParseName("System.Obsolete"),
                                SF.ParseAttributeArgumentList($"({argument})")
                                )
                        })));
                    }
                }
            }

            BaseListSyntax CreateBaseList()
            {
                IEnumerable <BaseTypeSyntax> baseTypes = GetBaseTypes();

                return(baseTypes?.Any() ?? false?SF.BaseList(SF.SeparatedList(baseTypes)) : null);

                IEnumerable <BaseTypeSyntax> GetBaseTypes()
                {
                    foreach (string interfaceReference in Type.Interfaces ?? Enumerable.Empty <string>())
                    {
                        Namespaces.Add(Symbols.GetTypeFromFullyQualifiedName(interfaceReference));
                        yield return(SF.SimpleBaseType(Symbols.GetNameSyntax(interfaceReference, disambiguate: true)));
                    }
                }
            }

            IEnumerable <MemberDeclarationSyntax> CreateMembers()
            {
                return(CreateProperties().Concat(CreateMethods()));
            }
        }
 public static BaseListSyntax BaseList(params string[] names)
 {
     return
         (SF.BaseList(
              SF.SeparatedList <BaseTypeSyntax>(names.Select(name => SF.SimpleBaseType(SF.IdentifierName(name))))));
 }
Example #8
0
        protected override MemberDeclarationSyntax CreateType()
        {
            return(SF.ClassDeclaration
                   (
                       CreateAttributes(),
                       CreateModifiers(),
                       Symbols.GetNameSyntaxToken(Type),
                       null,
                       CreateBaseList(),
                       SF.List <TypeParameterConstraintClauseSyntax>(),
                       SF.List(CreateMembers())
                   ));

            SyntaxList <AttributeListSyntax> CreateAttributes()
            {
                TypeOfExpressionSyntax typeOfExpression          = SF.TypeOfExpression(Symbols.GetNameSyntax(Type));
                SyntaxToken            fullyQualifiedNameLiteral = SF.Literal(Type.FullyQualifiedName);
                SyntaxToken            parametersJsonLiteral     = Type.Initializer.GetParametersJsonSyntaxToken();

                return(SF.List(new[] {
                    SF.AttributeList(SF.SeparatedList(new[] {
                        SF.Attribute(
                            SF.ParseName("JsiiClass"),
                            SF.ParseAttributeArgumentList($"({typeOfExpression}, {fullyQualifiedNameLiteral}, {parametersJsonLiteral})")
                            )
                    }))
                }));
            }

            SyntaxTokenList CreateModifiers()
            {
                SyntaxTokenList modifierList = SF.TokenList(SF.Token(SyntaxKind.PublicKeyword));

                if (Type.IsAbstract)
                {
                    modifierList = modifierList.Add(SF.Token(SyntaxKind.AbstractKeyword));
                }

                return(modifierList);
            }

            BaseListSyntax CreateBaseList()
            {
                return(SF.BaseList(SF.SeparatedList(GetBaseTypes())));

                IEnumerable <BaseTypeSyntax> GetBaseTypes()
                {
                    if (Type.Base == null)
                    {
                        yield return(SF.SimpleBaseType(SF.ParseTypeName("DeputyBase")));
                    }
                    else
                    {
                        Namespaces.Add(Type.Base);
                        yield return(SF.SimpleBaseType(Symbols.GetNameSyntax(Type.Base.FullyQualifiedName, disambiguate: true)));
                    }

                    if (Type.Interfaces == null)
                    {
                        yield break;
                    }

                    foreach (TypeReference interfaceReference in Type.Interfaces)
                    {
                        Namespaces.Add(interfaceReference);
                        yield return(SF.SimpleBaseType(Symbols.GetNameSyntax(interfaceReference.FullyQualifiedName, disambiguate: true)));
                    }
                }
            }

            IEnumerable <MemberDeclarationSyntax> CreateMembers()
            {
                return(CreateConstructors()
                       .Concat(CreateProperties())
                       .Concat(CreateMethods()));
            }
        }
        protected override MemberDeclarationSyntax CreateType()
        {
            return(SF.ClassDeclaration
                   (
                       CreateAttributes(),
                       SF.TokenList(
                           SF.Token(SyntaxKind.InternalKeyword),
                           SF.Token(SyntaxKind.SealedKeyword)),
                       GetProxyTypeNameSyntax(),
                       null,
                       CreateBaseList(),
                       SF.List <TypeParameterConstraintClauseSyntax>(),
                       SF.List(CreateMembers())
                   ));

            SyntaxList <AttributeListSyntax> CreateAttributes()
            {
                var typeOfExpression          = SF.TypeOfExpression(Symbols.GetNameSyntax(Type));
                var fullyQualifiedNameLiteral = SF.Literal(Type.FullyQualifiedName);

                return(SF.List(GetAttributeLists()));

                IEnumerable <AttributeListSyntax> GetAttributeLists()
                {
                    yield return(SF.AttributeList(SF.SingletonSeparatedList(
                                                      SF.Attribute(
                                                          SF.ParseName("JsiiTypeProxy"),
                                                          SF.ParseAttributeArgumentList($"(nativeType: {typeOfExpression}, fullyQualifiedName: {fullyQualifiedNameLiteral})")
                                                          )
                                                      )));

                    if (Type.Docs?.Stability == Stability.Deprecated)
                    {
                        var argument = Type.Docs?.Deprecated != null?SF.Literal(Type.Docs?.Deprecated).ToString() : "";

                        yield return(SF.AttributeList(SF.SingletonSeparatedList(
                                                          SF.Attribute(
                                                              SF.ParseName("System.Obsolete"),
                                                              SF.ParseAttributeArgumentList($"({argument})")
                                                              )
                                                          )));
                    }
                }
            }

            BaseListSyntax CreateBaseList()
            {
                return(SF.BaseList(SF.SeparatedList(GetBaseTypes())));

                IEnumerable <BaseTypeSyntax> GetBaseTypes()
                {
                    if (Type is InterfaceType)
                    {
                        yield return(SF.SimpleBaseType(SF.ParseTypeName("DeputyBase")));
                    }

                    Namespaces.Add(Type);
                    yield return(SF.SimpleBaseType(Symbols.GetNameSyntax(Type, disambiguate: true)));
                }
            }

            IEnumerable <MemberDeclarationSyntax> CreateMembers()
            {
                return(CreateConstructors()
                       .Concat(CreateProperties())
                       .Concat(CreateMethods()));
            }
        }