コード例 #1
0
            private static ExpressionStatementSyntax CreateArrayCopyWithStartingPoints(
                IdentifierNameSyntax sourceExpression, ExpressionSyntax sourceStart,
                ExpressionSyntax targetExpression, ExpressionSyntax targetStart, ExpressionSyntax length)
            {
                var copyArgList = ExpressionSyntaxExtensions.CreateArgList(sourceExpression, sourceStart, targetExpression, targetStart, length);
                var arrayCopy   = SyntaxFactory.InvocationExpression(SyntaxFactory.ParseExpression("Array.Copy"), copyArgList);

                return(SyntaxFactory.ExpressionStatement(arrayCopy));
            }
コード例 #2
0
 /// <summary>
 /// Yields "variable = lhs==rhs;"
 /// </summary>
 /// <param name="variable"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 internal static ExpressionStatementSyntax AssignValueEqualsValue(string variable, string lhs, string rhs)
 {
     return
         (SF.ExpressionStatement(
              SF.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
                                      SF.ParseExpression(variable),
                                      SF.ParseExpression($"{lhs}=={rhs}")
                                      )
              ));
 }
コード例 #3
0
 /// <summary>
 /// Returns syntax for the constructor.
 /// </summary>
 /// <param name="className">The name of the class.</param>
 /// <returns>Syntax for the constructor.</returns>
 private static ConstructorDeclarationSyntax GenerateConstructor(string className)
 {
     return
         (SF.ConstructorDeclaration(className)
          .AddModifiers(SF.Token(SyntaxKind.StaticKeyword))
          .AddParameterListParameters()
          .AddBodyStatements(
              SF.ExpressionStatement(
                  SF.InvocationExpression(SF.IdentifierName("Register")).AddArgumentListArguments())));
 }
コード例 #4
0
            private static ExpressionStatementSyntax CreateArrayCopyWithMinOfLengths(
                IdentifierNameSyntax sourceExpression, ExpressionSyntax sourceLength,
                ExpressionSyntax targetExpression, ExpressionSyntax targetLength)
            {
                var minLength   = SyntaxFactory.InvocationExpression(SyntaxFactory.ParseExpression("Math.Min"), ExpressionSyntaxExtensions.CreateArgList(targetLength, sourceLength));
                var copyArgList = ExpressionSyntaxExtensions.CreateArgList(sourceExpression, targetExpression, minLength);
                var arrayCopy   = SyntaxFactory.InvocationExpression(SyntaxFactory.ParseExpression("Array.Copy"), copyArgList);

                return(SyntaxFactory.ExpressionStatement(arrayCopy));
            }
コード例 #5
0
 /// <summary>
 /// Yields "variable = false;"
 /// </summary>
 /// <param name="variable"></param>
 /// <returns></returns>
 internal static ExpressionStatementSyntax AssignFalse(string variable)
 {
     return
         (SF.ExpressionStatement(
              SF.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
                                      SF.ParseExpression(variable),
                                      SF.ParseExpression($"false")
                                      )
              ));
 }
コード例 #6
0
        ////for (int i = 0; i<length; i++)
        ////{
        ////    // inside-for
        ////}
        ////// next

        ////int i = 0;
        ////if (i<length)
        ////{
        ////    // inside-for
        ////    i++;
        ////    if (i<length)
        ////    {
        ////        // inside-for
        ////        i++;
        ////    }
        ////}
        ////// next
        public override SyntaxNode VisitForStatement(ForStatementSyntax node)
        {
            var incrementator = node.Incrementors.Single();

            var forStatementsBlock = SF.Block(JoinStatements(node.Statement, SF.ExpressionStatement(incrementator)));

            var ifStatement = MakeIfStatement(LoopIterations, forStatementsBlock, SF.IfStatement(node.Condition, forStatementsBlock));

            return(SF.Block(SF.LocalDeclarationStatement(node.Declaration), ifStatement));
        }
コード例 #7
0
 /// <summary>
 /// Yields "variable = value==0;"
 /// </summary>
 /// <param name="variable"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 internal static ExpressionStatementSyntax AssignValueEqualsZero(string variable, string value)
 {
     return
         (SF.ExpressionStatement(
              SF.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
                                      SF.ParseExpression(variable),
                                      SF.ParseExpression($"{value}==0")
                                      )
              ));
 }
コード例 #8
0
 public static StatementSyntax MakeStatePopWriteStatement()
 {
     return(SF.ExpressionStatement(SF.InvocationExpression(
                                       SF.MemberAccessExpression(
                                           SyntaxKind.SimpleMemberAccessExpression,
                                           SF.IdentifierName("_this"),
                                           SF.IdentifierName("Write")),
                                       SF.ArgumentList(SF.SingletonSeparatedList <ArgumentSyntax>(SF.Argument(MakeStatePopExpression()))
                                                       )
                                       )));
 }
コード例 #9
0
ファイル: SetContext.cs プロジェクト: aarondh/TxMark
        public override void Exit()
        {
            var setStatement = SF.ExpressionStatement(
                SF.AssignmentExpression(
                    SyntaxKind.SimpleAssignmentExpression,
                    VariableHelper.MakeStateVariableExpression(_variableName),
                    _valueExpression
                    )
                );

            _exitHandler(setStatement);
        }
コード例 #10
0
 public static StatementSyntax MakeModelAssignmentStatement()
 {
     return(SF.ExpressionStatement(
                SF.AssignmentExpression(
                    SyntaxKind.SimpleAssignmentExpression,
                    SF.MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        SF.BaseExpression(),
                        SF.IdentifierName("Model")
                        ),
                    SF.IdentifierName("model")
                    )));
 }
コード例 #11
0
            public override SyntaxList <StatementSyntax> VisitEraseStatement(VBSyntax.EraseStatementSyntax node)
            {
                var eraseStatements = node.Expressions.Select <VBSyntax.ExpressionSyntax, StatementSyntax>(arrayExpression => {
                    var lhs = arrayExpression.Accept(_nodesVisitor);
                    var rhs = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
                    var assignmentExpressionSyntax =
                        SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, (ExpressionSyntax)lhs,
                                                           rhs);
                    return(SyntaxFactory.ExpressionStatement(assignmentExpressionSyntax));
                });

                return(SyntaxFactory.List(eraseStatements));
            }
コード例 #12
0
        /// <summary>
        /// Generates syntax to invoke a method on a grain.
        /// </summary>
        /// <param name="grainType">
        /// The grain type.
        /// </param>
        /// <param name="grain">
        /// The grain instance expression.
        /// </param>
        /// <param name="method">
        /// The method.
        /// </param>
        /// <param name="arguments">
        /// The arguments expression.
        /// </param>
        /// <returns>
        /// Syntax to invoke a method on a grain.
        /// </returns>
        private static StatementSyntax[] GenerateInvokeForMethod(
            Type grainType,
            IdentifierNameSyntax grain,
            MethodInfo method,
            ExpressionSyntax arguments)
        {
            var castGrain = SF.ParenthesizedExpression(SF.CastExpression(grainType.GetTypeSyntax(), grain));

            // Construct expressions to retrieve each of the method's parameters.
            var parameters       = new List <ExpressionSyntax>();
            var methodParameters = method.GetParameters().ToList();

            for (var i = 0; i < methodParameters.Count; i++)
            {
                var parameter     = methodParameters[i];
                var parameterType = parameter.ParameterType.GetTypeSyntax();
                var indexArg      = SF.Argument(SF.LiteralExpression(SyntaxKind.NumericLiteralExpression, SF.Literal(i)));
                var arg           = SF.CastExpression(
                    parameterType,
                    SF.ElementAccessExpression(arguments).AddArgumentListArguments(indexArg));
                parameters.Add(arg);
            }

            // Invoke the method.
            var grainMethodCall =
                SF.InvocationExpression(castGrain.Member(method.Name))
                .AddArgumentListArguments(parameters.Select(SF.Argument).ToArray());

            // For void methods, invoke the method and return a completed task.
            if (method.ReturnType == typeof(void))
            {
                var completed = (Expression <Func <Task <object> > >)(() => TaskUtility.Completed());
                return(new StatementSyntax[]
                {
                    SF.ExpressionStatement(grainMethodCall), SF.ReturnStatement(completed.Invoke())
                });
            }

            // For methods which return the expected type, Task<object>, simply return that.
            if (method.ReturnType == typeof(Task <object>))
            {
                return(new StatementSyntax[] { SF.ReturnStatement(grainMethodCall) });
            }

            // The invoke method expects a Task<object>, so we need to upcast the returned value.
            // For methods which do not return a value, the Box extension method returns a meaningless value.
            return(new StatementSyntax[]
            {
                SF.ReturnStatement(SF.InvocationExpression(grainMethodCall.Member((Task _) => _.Box())))
            });
        }
コード例 #13
0
        private async Task <Document> AddSecureFlags(Document document,
                                                     Diagnostic diagnostic,
                                                     CancellationToken cancellationToken,
                                                     string[]          propertyNames)
        {
            var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);

            var variableDeclarator = FindParentNode(root.FindToken(diagnostic.Location.SourceSpan.Start).Parent);

            if (variableDeclarator == null)
            {
                return(document); //Abort!
            }
            if (!(variableDeclarator.Parent is VariableDeclarationSyntax variableDeclaration))
            {
                return(document); //Abort!
            }
            if (!(variableDeclaration.Parent is LocalDeclarationStatementSyntax parentDeclaration))
            {
                return(document); //Abort!
            }
            var identifierCookie = variableDeclaration.Variables[0];

            //Building the nodes model

            var nodes = new List <SyntaxNode>();

            foreach (var property in propertyNames)
            {
                var newAssignment = SF.ExpressionStatement(
                    SF.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
                                            SF.MemberAccessExpression(
                                                SyntaxKind.SimpleMemberAccessExpression,
                                                SF.IdentifierName(identifierCookie.Identifier),
                                                SF.IdentifierName(property)),
                                            SF.LiteralExpression(SyntaxKind.TrueLiteralExpression)
                                            ))
                                    .WithLeadingTrivia(CodeFixUtil.KeepLastLine(parentDeclaration.GetLeadingTrivia()));

                /*
                 * .WithLeadingTrivia(parentDeclaration.GetLeadingTrivia()
                 *  .Insert(0, SF.ElasticEndOfLine(Environment.NewLine))
                 * );*/
                nodes.Add(newAssignment);
            }

            //Inserting the nodes
            var newRoot = root.InsertNodesAfter(parentDeclaration, nodes);

            return(document.WithSyntaxRoot(newRoot));
        }
コード例 #14
0
ファイル: PropertyBasedMock.cs プロジェクト: mocklis/mocklis
 protected ExpressionStatementSyntax InitialisationStatement(TypeSyntax mockPropertyType)
 {
     return(F.ExpressionStatement(F.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
                                                         F.IdentifierName(MemberMockName),
                                                         F.ObjectCreationExpression(mockPropertyType)
                                                         .WithExpressionsAsArgumentList(
                                                             F.ThisExpression(),
                                                             F.LiteralExpression(SyntaxKind.StringLiteralExpression, F.Literal(ClassSymbol.Name)),
                                                             F.LiteralExpression(SyntaxKind.StringLiteralExpression, F.Literal(InterfaceSymbol.Name)),
                                                             F.LiteralExpression(SyntaxKind.StringLiteralExpression, F.Literal(Symbol.Name)),
                                                             F.LiteralExpression(SyntaxKind.StringLiteralExpression, F.Literal(MemberMockName)),
                                                             StrictnessExpression()
                                                             ))));
 }
コード例 #15
0
        public override BlockSyntax GenerateMethodBody()
        {
            var whileStatement = new SyntaxList <StatementSyntax>()
                                 .Add(SF.ParseStatement("if (!reader.TryGetByte(out var bsonType)) { return false; }"))
                                 .Add(SF.ParseStatement("if (!reader.TryGetCStringAsSpan(out var bsonName)) { return false; } "))
                                 .AddRange(OperationsList.CreateReadOperations(ClassSymbol, Members).Generate())
                                 .Add(SF.ParseStatement(@$ "throw new ArgumentException($" "{ClassSymbol.Name}.TryParse  with bson type number {{bsonType}} and name {{System.Text.Encoding.UTF8.GetString(bsonName)}}" ");"));

            return(SF.Block(
                       SF.ExpressionStatement(SF.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, Basics.TryParseOutVariableIdentifier, Basics.ObjectCreationWitoutArgs(ClassSymbol))),
                       SF.ParseStatement("if (!reader.TryGetInt32(out var docLength)) { return false; }"),
                       SF.ParseStatement("var unreaded = reader.Remaining + sizeof(int);"),
                       SF.WhileStatement(
                           attributeLists: default,
コード例 #16
0
        protected override BlockSyntax GetBody()
        {
            if (Method.IsAbstract)
            {
                return(null);
            }

            if (Method.Returns == null)
            {
                return(SF.Block(SF.ExpressionStatement(CreateInvocationExpression())));
            }

            return(SF.Block(SF.ReturnStatement(CreateInvocationExpression())));
        }
コード例 #17
0
 /// <summary>
 /// Returns syntax for the generic serializer registration method for the provided type..
 /// </summary>
 /// <param name="type">The type which is supported by this serializer.</param>
 /// <param name="serializerType">The type of the serializer.</param>
 /// <returns>Syntax for the generic serializer registration method for the provided type..</returns>
 private static MemberDeclarationSyntax GenerateMasterRegisterMethod(Type type, TypeSyntax serializerType)
 {
     Expression<Action> register = () => SerializationManager.Register(default(Type), default(Type));
     return
         SF.MethodDeclaration(typeof(void).GetTypeSyntax(), "Register")
             .AddModifiers(SF.Token(SyntaxKind.PublicKeyword), SF.Token(SyntaxKind.StaticKeyword))
             .AddParameterListParameters()
             .AddBodyStatements(
                 SF.ExpressionStatement(
                     register.Invoke()
                         .AddArgumentListArguments(
                             SF.Argument(
                                 SF.TypeOfExpression(type.GetTypeSyntax(includeGenericParameters: false))),
                             SF.Argument(SF.TypeOfExpression(serializerType)))));
 }
コード例 #18
0
            private ExpressionStatementSyntax CreateNewArrayAssignment(VBSyntax.ExpressionSyntax vbArrayExpression,
                                                                       ExpressionSyntax csArrayExpression, List <ExpressionSyntax> convertedBounds,
                                                                       int nodeSpanStart)
            {
                var arrayRankSpecifierSyntax = SyntaxFactory.ArrayRankSpecifier(SyntaxFactory.SeparatedList(convertedBounds));
                var convertedType            = (IArrayTypeSymbol)_semanticModel.GetTypeInfo(vbArrayExpression).ConvertedType;
                var typeSyntax    = GetTypeSyntaxFromTypeSymbol(convertedType.ElementType, nodeSpanStart);
                var arrayCreation =
                    SyntaxFactory.ArrayCreationExpression(SyntaxFactory.ArrayType(typeSyntax,
                                                                                  SyntaxFactory.SingletonList(arrayRankSpecifierSyntax)));
                var assignmentExpressionSyntax =
                    SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, csArrayExpression, arrayCreation);
                var newArrayAssignment = SyntaxFactory.ExpressionStatement(assignmentExpressionSyntax);

                return(newArrayAssignment);
            }
コード例 #19
0
 /// <summary>
 /// Yields "sb.Append(argument)"
 /// </summary>
 /// <param name="argument"></param>
 /// <returns></returns>
 private static ExpressionStatementSyntax SbAppend(ArgumentSyntax argument, bool encoded)
 {
     if (encoded)
     {
         argument = EncodeArgument(argument);
     }
     return
         (SF.ExpressionStatement(
              SF.InvocationExpression(
                  SF.ParseExpression("sb.Append")
                  )
              .AddArgumentListArguments(
                  argument
                  )
              ));
 }
コード例 #20
0
        public static string GenerateClass()
        {
            var @consoleWriteLine = Syntax.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
                                                                  Syntax.IdentifierName("Console"),
                                                                  name: Syntax.IdentifierName("WriteLine"));


            var @arguments = Syntax.ArgumentList(Syntax.SeparatedList(new[] {
                Syntax.Argument(
                    Syntax.LiteralExpression(
                        SyntaxKind.StringLiteralExpression,
                        Syntax.Literal(@"$""{this.Name} -> {this.counter}""", "${this.Name} -> {this.counter}")))
            }));

            var @consoleWriteLineStatement = Syntax.ExpressionStatement(Syntax.InvocationExpression(@consoleWriteLine, @arguments));

            var @voidType   = Syntax.ParseTypeName("void");
            var @stringType = Syntax.ParseTypeName("string");

            var @field    = Syntax.FieldDeclaration(Syntax.VariableDeclaration(Syntax.ParseTypeName("int"), Syntax.SeparatedList(new[] { Syntax.VariableDeclarator(Syntax.Identifier("counter")) }))).AddModifiers(Syntax.Token(SyntaxKind.PrivateKeyword)).WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken));
            var @property = Syntax.PropertyDeclaration(stringType, "Name").AddAccessorListAccessors(Syntax.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
                                                                                                    .WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken)
                                                                                                                        )).AddModifiers(Syntax.Token(SyntaxKind.PublicKeyword));

            @property = @property.AddAccessorListAccessors(Syntax.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken)));

            var @printMethod = Syntax.MethodDeclaration(voidType, "Print").AddModifiers(Syntax.Token(SyntaxKind.PublicKeyword)).WithBody(Syntax.Block(consoleWriteLineStatement));



            List <ParameterSyntax> @parameterList = new List <ParameterSyntax>
            {
                Syntax.Parameter(Syntax.Identifier("x")).WithType(Syntax.ParseTypeName("int"))
            };
            var @methodBody      = Syntax.ParseStatement("counter += x;");
            var @incrementMethod = Syntax.MethodDeclaration(voidType, "Increment").AddModifiers(Syntax.Token(SyntaxKind.PublicKeyword)).WithBody(Syntax.Block(methodBody)).AddParameterListParameters(parameterList.ToArray());


            var @class = Syntax.ClassDeclaration("MyClass").WithMembers(Syntax.List(new MemberDeclarationSyntax[] { @property, @field, @incrementMethod, @printMethod })).AddModifiers(Syntax.Token(SyntaxKind.PublicKeyword)).AddModifiers(Syntax.Token(SyntaxKind.SealedKeyword));

            var adhocWorkSpace = new AdhocWorkspace();

            adhocWorkSpace.Options.WithChangedOption(CSharpFormattingOptions.IndentBraces, true);
            var formattedCode = Formatter.Format(@class, adhocWorkSpace);

            return(formattedCode.ToFullString());
        }
コード例 #21
0
 /// <summary>
 /// sb.Append(Template.Render(membername))
 /// </summary>
 /// <param name="templateTypeName"></param>
 /// <param name="memberName"></param>
 /// <returns></returns>
 internal static ExpressionStatementSyntax HbsTemplateCall(string templateTypeName, string memberName, string methodName = "Render")
 {
     return
         (SF.ExpressionStatement(
              SF.InvocationExpression(
                  SF.ParseExpression("sb.Append")
                  )
              .AddArgumentListArguments(
                  SF.Argument(
                      SF.InvocationExpression(
                          SF.ParseExpression($"{templateTypeName}.{methodName}")
                          ).AddArgumentListArguments(
                          SF.Argument(SF.ParseExpression(memberName))
                          )
                      )
                  )
              ));
 }
コード例 #22
0
 internal static ExpressionStatementSyntax SelfReferencingPartialCall(string memberName)
 {
     return
         (SF.ExpressionStatement(
              SF.InvocationExpression(
                  SF.ParseExpression("sb.Append")
                  )
              .AddArgumentListArguments(
                  SF.Argument(
                      SF.InvocationExpression(
                          SF.ParseExpression("Render")
                          ).AddArgumentListArguments(
                          SF.Argument(SF.ParseExpression(memberName))
                          )
                      )
                  )
              ));
 }
コード例 #23
0
        private static MemberDeclarationSyntax GenerateSerializerMethod(Type type, List <FieldInfoMember> fields)
        {
            Expression <Action> serializeInner =
                () =>
                SerializationManager.SerializeInner(default(object), default(ISerializationContext), default(Type));
            var contextParameter = SF.IdentifierName("context");

            var body = new List <StatementSyntax>
            {
                SF.LocalDeclarationStatement(
                    SF.VariableDeclaration(type.GetTypeSyntax())
                    .AddVariables(
                        SF.VariableDeclarator("input")
                        .WithInitializer(
                            SF.EqualsValueClause(
                                SF.CastExpression(type.GetTypeSyntax(), SF.IdentifierName("untypedInput"))))))
            };

            var inputExpression = SF.IdentifierName("input");

            // Serialize all members.
            foreach (var field in fields)
            {
                body.Add(
                    SF.ExpressionStatement(
                        serializeInner.Invoke()
                        .AddArgumentListArguments(
                            SF.Argument(field.GetGetter(inputExpression, forceAvoidCopy: true)),
                            SF.Argument(contextParameter),
                            SF.Argument(SF.TypeOfExpression(field.FieldInfo.FieldType.GetTypeSyntax())))));
            }

            return
                (SF.MethodDeclaration(typeof(void).GetTypeSyntax(), "Serializer")
                 .AddModifiers(SF.Token(SyntaxKind.PublicKeyword), SF.Token(SyntaxKind.StaticKeyword))
                 .AddParameterListParameters(
                     SF.Parameter(SF.Identifier("untypedInput")).WithType(typeof(object).GetTypeSyntax()),
                     SF.Parameter(SF.Identifier("context")).WithType(typeof(ISerializationContext).GetTypeSyntax()),
                     SF.Parameter(SF.Identifier("expected")).WithType(typeof(Type).GetTypeSyntax()))
                 .AddBodyStatements(body.ToArray())
                 .AddAttributeLists(
                     SF.AttributeList()
                     .AddAttributes(SF.Attribute(typeof(SerializerMethodAttribute).GetNameSyntax()))));
        }
コード例 #24
0
        /// <summary>
        /// Generates a method.
        /// </summary>
        /// <param name="methodDescription">
        /// The method description.
        /// </param>
        /// <returns>
        /// The generated method.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// The return type of the provided method is not supported.
        /// </exception>
        private static MethodDeclarationSyntax GenerateMethod(ActorMethodDescription methodDescription)
        {
            // Types
            var method = methodDescription.MethodInfo;

            Type asyncReturnType;

            if (!method.ReturnType.IsGenericType && (method.ReturnType == typeof(Task)))
            {
                asyncReturnType = typeof(void);
            }
            else if (method.ReturnType.GetGenericTypeDefinition() == typeof(Task <>))
            {
                asyncReturnType = method.ReturnType.GenericTypeArguments[0];
            }
            else
            {
                throw new ArgumentException("Method return type is not Task or Task<T>.");
            }

            // Body statements
            var parameterReferences =
                method.GetParameters()
                .Select(
                    p => SF.Argument(SF.CastExpression(typeof(object).GetTypeSyntax(), SF.IdentifierName(p.Name))))
                .ToArray();
            var writeEventMethod = SF.ThisExpression().Member((EventProducerBase <object> _) => _.WriteEvent(default(string), default(object), default(object)));
            var writeEvent       =
                SF.ExpressionStatement(
                    SF.AwaitExpression(
                        SF.InvocationExpression(writeEventMethod)
                        .AddArgumentListArguments(SF.Argument(methodDescription.Name.GetLiteralExpression()))
                        .AddArgumentListArguments(parameterReferences)));

            var returnValue = asyncReturnType == typeof(void) ? null : SF.DefaultExpression(asyncReturnType.GetTypeSyntax());

            // Build and return the method.
            return
                (SF.MethodDeclaration(method.ReturnType.GetTypeSyntax(), methodDescription.MethodInfo.Name)
                 .AddModifiers(SF.Token(SyntaxKind.PublicKeyword), SF.Token(SyntaxKind.AsyncKeyword))
                 .AddParameterListParameters(method.GetParameterListSyntax())
                 .AddBodyStatements(writeEvent, SF.ReturnStatement(returnValue)));
        }
コード例 #25
0
 protected virtual IfStatementSyntax GenerateIfBsonTypeNull()
 {
     return(SF.IfStatement(
                condition: SF.BinaryExpression(
                    SyntaxKind.EqualsExpression,
                    Basics.TryParseBsonTypeIdentifier,
                    SF.Token(SyntaxKind.EqualsEqualsToken),
                    Basics.NumberLiteral(10)
                    ),
                statement: SF.Block(
                    SF.ExpressionStatement(
                        SF.AssignmentExpression(
                            kind: SyntaxKind.SimpleAssignmentExpression,
                            left: Basics.SimpleMemberAccess(Basics.TryParseOutVariableIdentifier, Basics.IdentifierName(MemberDecl.DeclSymbol)),
                            right: SF.LiteralExpression(SyntaxKind.DefaultLiteralExpression))
                        ),
                    SF.ContinueStatement())
                ));
 }
コード例 #26
0
        private static ConstructorDeclarationSyntax MakeConstructor(
            TypeDeclarationSyntax type, IEnumerable <Field> fields,
            ConstructorDeclarationSyntax maybePreviousConstructor)
        {
            var fieldsList = fields.ToList();

            var constructorParameters = SF.ParameterList(
                SF.SeparatedList(
                    fieldsList.Select(
                        field => SF.Parameter(SF.Identifier(field.Name))
                        .WithType(field.Type)
                        .WithAttributeLists(field.Attributes)
                        )
                    )
                );

            var constructorBodyStatements = fieldsList.Select(
                field => SF.ExpressionStatement(
                    SF.AssignmentExpression(
                        SyntaxKind.SimpleAssignmentExpression,
                        SF.MemberAccessExpression(
                            SyntaxKind.SimpleMemberAccessExpression, SF.ThisExpression(), SF.IdentifierName(field.Name)
                            ), SF.IdentifierName(field.Name)
                        )
                    )
                );

            var previousAttributes = maybePreviousConstructor?.AttributeLists ?? new SyntaxList <AttributeListSyntax>();

            var res = SF.ConstructorDeclaration(type.Identifier.Text)
                      .WithAttributeLists(previousAttributes)
                      .WithModifiers(SF.TokenList(new[] { SF.Token(SyntaxKind.PublicKeyword) }))
                      .WithParameterList(constructorParameters)
                      .WithBody(SF.Block(constructorBodyStatements));

            res = fieldsList.Any(x => x.StructuredTrivia != null) ? res.WithLeadingTrivia(
                MakeXmlDocComments(maybePreviousConstructor, fieldsList, Constants.DefaultCtorSummary)
                ) :
                  maybePreviousConstructor?.HasLeadingTrivia ?? false?
                  res.WithLeadingTrivia(maybePreviousConstructor.GetLeadingTrivia()) : res;

            return(res);
        }
コード例 #27
0
        private ClassDeclarationSyntax AddConstructor(INamedTypeSymbol interfaceType, ClassDeclarationSyntax classDclr, SimpleStubsConfig config)
        {
            string ctorName            = NamingUtils.GetStubName(interfaceType.Name);
            string defaultMockBehavior = GetValidMockBehaviorEnumValue(config.DefaultMockBehavior);

            var ctorParameter =
                SF.Parameter(SF.Identifier("mockBehavior"))
                .WithType(SF.ParseTypeName("MockBehavior"))
                .WithDefault(SF.EqualsValueClause(SF.ParseExpression($"MockBehavior.{defaultMockBehavior}")));

            classDclr = classDclr.AddMembers(SF.ConstructorDeclaration(ctorName)
                                             .WithModifiers(SF.TokenList(SF.Token(SyntaxKind.PublicKeyword)))
                                             .WithParameterList(SF.ParameterList().AddParameters(ctorParameter))
                                             .WithBody(SF.Block().AddStatements(SF.ExpressionStatement(
                                                                                    SF.AssignmentExpression(
                                                                                        SyntaxKind.SimpleAssignmentExpression,
                                                                                        SF.IdentifierName("MockBehavior"),
                                                                                        SF.IdentifierName("mockBehavior")))
                                                                                )));
            return(classDclr);
        }
コード例 #28
0
 /// <summary>
 /// Returns syntax for the serializer registration method.
 /// </summary>
 /// <param name="type">The type.</param>
 /// <returns>Syntax for the serializer registration method.</returns>
 private static MemberDeclarationSyntax GenerateRegisterMethod(Type type)
 {
     Expression<Action> register =
         () =>
         SerializationManager.Register(
             default(Type),
             default(SerializationManager.DeepCopier),
             default(SerializationManager.Serializer),
             default(SerializationManager.Deserializer));
     return
         SF.MethodDeclaration(typeof(void).GetTypeSyntax(), "Register")
             .AddModifiers(SF.Token(SyntaxKind.PublicKeyword), SF.Token(SyntaxKind.StaticKeyword))
             .AddParameterListParameters()
             .AddBodyStatements(
                 SF.ExpressionStatement(
                     register.Invoke()
                         .AddArgumentListArguments(
                             SF.Argument(SF.TypeOfExpression(type.GetTypeSyntax())),
                             SF.Argument(SF.IdentifierName("DeepCopier")),
                             SF.Argument(SF.IdentifierName("Serializer")),
                             SF.Argument(SF.IdentifierName("Deserializer")))));
 }
コード例 #29
0
ファイル: EachContext.cs プロジェクト: aarondh/TxMark
        public override void Exit()
        {
            List <StatementSyntax> loopStatements = new List <StatementSyntax>();

            //loopStatements.Add(StateHelper.MakeStatePushStatement());
            loopStatements.Add(SF.ExpressionStatement(
                                   SF.AssignmentExpression(
                                       SyntaxKind.SimpleAssignmentExpression,
                                       VariableHelper.MakeStateVariableExpression(_asVariableName),
                                       SF.IdentifierName(_iteratorVariableName)
                                       )
                                   )
                               );
            if (_hookName != null)
            {
                loopStatements.Add(BlockContext.MakeWriteStatement(MethodCallContext.CreateMethodCall(_hookName, true)));
            }
            //loopStatements.Add(StateHelper.MakeStatePopWriteStatement());
            var forEachStatement = SF.ForEachStatement(SF.ParseTypeName("var"), _iteratorVariableName, _expression, SF.Block(loopStatements));

            _exitHandler(forEachStatement);
        }
コード例 #30
0
        private static MemberDeclarationSyntax GeneratePopulateMethod(List <GrainClassDescription> grains)
        {
            var interfaceMethod  = TypeUtils.Method((IFeaturePopulator <GrainClassFeature> _) => _.Populate(default(GrainClassFeature)));
            var featureParameter = interfaceMethod.GetParameters()[0].Name.ToIdentifierName();

            var grainsMember = TypeUtils.Member((GrainClassFeature feature) => feature.Classes);
            var addMethod    = TypeUtils.Method((IList <GrainClassMetadata> _) => _.Add(default(GrainClassMetadata)));

            var bodyStatements = new List <StatementSyntax>();

            foreach (var metadata in grains)
            {
                var newMetadataExpression = SF.ObjectCreationExpression(typeof(GrainClassMetadata).GetTypeSyntax())
                                            .AddArgumentListArguments(
                    SF.Argument(SF.TypeOfExpression(metadata.ClassType)));
                bodyStatements.Add(
                    SF.ExpressionStatement(
                        SF.InvocationExpression(featureParameter.Member(grainsMember.Name).Member(addMethod.Name))
                        .AddArgumentListArguments(
                            SF.Argument(newMetadataExpression))));
            }

            return(interfaceMethod.GetDeclarationSyntax().AddBodyStatements(bodyStatements.ToArray()));
        }