Ejemplo n.º 1
0
        private StatementSyntax GenerateParantIfs(AutoSelectedWith autoSelectedWith, StatementSyntax blockStatement, int parentDepth)
        {
            var generatedIf = Statement.Selection.If(GetBinaryExpression(autoSelectedWith, true, parentDepth), BodyGenerator.Create(blockStatement));

            if (autoSelectedWith.Parent != null)
            {
                return(GenerateParantIfs(autoSelectedWith.Parent, generatedIf, parentDepth + 1));
            }

            return(generatedIf);
        }
Ejemplo n.º 2
0
        private IBinaryExpression GetBinaryExpression(AutoSelectedWith autoSelected, bool isParent, int parentDepth)
        {
            var binaryExpressions = new List <ConditionalBinaryExpression>();

            foreach (var attributeTagse in autoSelected.Withs)
            {
                VariableReference leftReference;
                if (isParent)
                {
                    var name = new StringBuilder();
                    for (int n = 0; n < parentDepth; n++)
                    {
                        name.Append("Parent?.");
                    }

                    name = name.Remove(name.Length - 1, 1);

                    leftReference = new VariableReference(
                        "n",
                        new MemberReference(name.ToString(), new MemberReference(Enum.GetName(typeof(AttributeTags), attributeTagse))));
                }
                else
                {
                    leftReference = new VariableReference("n", new MemberReference(Enum.GetName(typeof(AttributeTags), attributeTagse)));
                }

                binaryExpressions.Add(new ConditionalBinaryExpression(
                                          leftReference,
                                          new ConstantReference(GetNodeValue(autoSelected.Node, attributeTagse)),
                                          ConditionalStatements.Equal));
            }

            IBinaryExpression finalBinaryExpression;

            if (binaryExpressions.Count > 1)
            {
                finalBinaryExpression = new AndBinaryExpression(binaryExpressions.First(), binaryExpressions.Last());
            }
            else
            {
                finalBinaryExpression = binaryExpressions.First();
            }

            return(finalBinaryExpression);
        }
Ejemplo n.º 3
0
        private IEnumerable <IArgument> GenerateAutoSelectedWiths(AutoSelectedWith autoSelected)
        {
            // If it's only one parent create a simple lambda expression without block
            if (autoSelected.Parent.Parent == null)
            {
                return(new List <IArgument>
                {
                    new LambdaArgument(
                        new AndBinaryExpression(
                            GetBinaryExpression(autoSelected.Parent, true, 1),
                            GetBinaryExpression(autoSelected, false, 0)).GetBinaryExpression(),
                        "n")
                });
            }

            var generatedIf = Statement.Selection.If(
                GetBinaryExpression(autoSelected, false, 0),
                BodyGenerator.Create(Statement.Jump.ReturnTrue()));

            return(new List <IArgument>
            {
                new LambdaArgument(BodyGenerator.Create(GenerateParantIfs(autoSelected.Parent, generatedIf, 1), Statement.Jump.ReturnFalse()), "n")
            });
        }