예제 #1
0
        private IEnumerable <MethodDeclarationSyntax> GenerateConvenienceMutators(CoreDescriptor.CollectionEntry entry)
        {
            const string NodesParamName = "nodes";
            var          nodeType       = Descriptor.GetNodeTypeIdentifierName();
            var          entryNodeType  = entry.GetNodeTypeIdentifierName();

            yield return(CreateWithNodeList());

            yield return(CreateWithParams());

            yield return(CreateAddEnumerable());

            yield return(CreateAddParams());

            MethodDeclarationSyntax CreateWithNodeList()
            {
                return
                    (MethodDeclaration(nodeType, Names.WithPrefix + entry.Identifier)
                     .AddModifiers(SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword)
                     .AddParameterListParameters(
                         Parameter(ThisParameterToken)
                         .AddModifiers(SyntaxKind.ThisKeyword)
                         .WithType(Descriptor.GetNodeTypeIdentifierName()),
                         Parameter(entry.Identifier)
                         .WithType(
                             entry.GetNodeTypeIdentifierName().ToNodeListType()))
                     .AddBodyStatements(
                         ReturnStatement(
                             ThisParameterSyntax
                             .MemberAccess(
                                 IdentifierName(Names.UpdateWith))
                             .InvokeWithArguments(
                                 ThisParameterSyntax
                                 .MemberAccess(NodeGenerator.CorePropertyIdentifierName)
                                 .MemberAccess(
                                     IdentifierName(Names.WithPrefix + entry.Identifier))
                                 .InvokeWithArguments(
                                     entry.IdentifierName
                                     .MemberAccess(
                                         IdentifierName(Names.ToCoreArray))
                                     .InvokeWithArguments())))));
            }

            MethodDeclarationSyntax CreateWithParams()
            {
                return(CreateMutator(Names.WithPrefix, CreateParameters(), CreateNodesExpression()));

                IEnumerable <ParameterSyntax> CreateParameters()
                {
                    yield return
                        (Parameter(
                             Identifier(NodesParamName))
                         .AddModifiers(SyntaxKind.ParamsKeyword)
                         .WithType(
                             entryNodeType.ToArrayType()));
                }
예제 #2
0
 static StatementSyntax CreateNotSimpleInitialization(CoreDescriptor.Entry entry)
 {
     return
         (CorePropertyIdentifierName
          .MemberAccess(entry.IdentifierName)
          .MemberAccess(
              IdentifierName(entry.IsCollection ? Names.ToListNode : Names.ToNode))
          .InvokeWithArguments(
              ThisExpression())
          .AssignTo(entry.IdentifierName)
          .AsStatement());
 }