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())); } }
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))))))))); }
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())); } }
/// <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>) )); }
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)))))); }
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())); } }