internal static MethodDeclarationSyntax CreateIEnumerableFromParamsArrayMethod(MetaField field, MethodDeclarationSyntax paramsArrayMethod) { return(paramsArrayMethod .WithParameterList(SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList( SyntaxFactory.Parameter(ValuesParameterName.Identifier) .WithType(Syntax.IEnumerableOf(GetFullyQualifiedSymbolName(field.ElementType))))))); }
private void ImplementIEnumerableInterfaces() { this.baseTypes.Add(SyntaxFactory.SimpleBaseType(Syntax.IEnumerableOf(this.generator.applyToMetaType.RecursiveType.TypeSyntax))); // return ((IEnumerable<RecursiveType>)this.<#=templateType.RecursiveField.NameCamelCase#>).GetEnumerator(); var body = SyntaxFactory.Block( SyntaxFactory.ReturnStatement( SyntaxFactory.InvocationExpression( SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.ParenthesizedExpression( SyntaxFactory.CastExpression( Syntax.IEnumerableOf(GetFullyQualifiedSymbolName(this.generator.applyToMetaType.RecursiveField.ElementType)), Syntax.ThisDot(SyntaxFactory.IdentifierName(this.generator.applyToMetaType.RecursiveField.Name)))), SyntaxFactory.IdentifierName(nameof(IEnumerable <int> .GetEnumerator))), SyntaxFactory.ArgumentList()))); // public System.Collections.Generic.IEnumerator<RecursiveType> GetEnumerator() this.innerMembers.Add( SyntaxFactory.MethodDeclaration( Syntax.IEnumeratorOf(GetFullyQualifiedSymbolName(this.generator.applyToMetaType.RecursiveField.ElementType)), nameof(IEnumerable <int> .GetEnumerator)) .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword)) .WithBody(body)); // System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() this.innerMembers.Add( SyntaxFactory.MethodDeclaration( Syntax.GetTypeSyntax(typeof(System.Collections.IEnumerator)), nameof(IEnumerable <int> .GetEnumerator)) .WithExplicitInterfaceSpecifier( SyntaxFactory.ExplicitInterfaceSpecifier( SyntaxFactory.QualifiedName( SyntaxFactory.QualifiedName( SyntaxFactory.IdentifierName(nameof(System)), SyntaxFactory.IdentifierName(nameof(System.Collections))), SyntaxFactory.IdentifierName(nameof(System.Collections.IEnumerable))))) .WithBody(body)); }