protected override bool TryMatchInternal(StatementCollection statements, int startIndex, out Statement result, out int replacedStatementsCount)
 {
     result = null;
     replacedStatementsCount = 0;
     if (!this.TryGetObjectCreation(statements, startIndex, out V_0, out V_1))
     {
         return(false);
     }
     V_2 = new ExpressionCollection();
     V_3 = new HashSet <string>();
     if (V_0.get_Initializer() != null)
     {
         if (V_0.get_Initializer().get_InitializerType() != 1)
         {
             return(false);
         }
         V_4 = V_0.get_Initializer().get_Expressions().GetEnumerator();
         try
         {
             while (V_4.MoveNext())
             {
                 V_5       = V_4.get_Current();
                 V_6       = this.GetName((V_5 as BinaryExpression).get_Left());
                 dummyVar0 = V_3.Add(V_6);
             }
         }
         finally
         {
             if (V_4 != null)
             {
                 V_4.Dispose();
             }
         }
     }
     V_7 = startIndex + 1;
     while (V_7 < statements.get_Count() && this.TryGetNextExpression(statements.get_Item(V_7), out V_8))
     {
         V_9 = V_8 as BinaryExpression;
         if (!this.IsObjectPropertyOrFieldAssignment(V_9, V_1))
         {
             break;
         }
         V_10 = null;
         if (V_9.get_Left().get_CodeNodeType() != 42)
         {
             if (V_9.get_Left().get_CodeNodeType() == 30)
             {
                 V_13 = (V_9.get_Left() as FieldReferenceExpression).get_Field().Resolve();
                 if (!this.Visit(V_13.get_Name(), V_3))
                 {
                     break;
                 }
                 V_10 = new FieldInitializerExpression(V_13, V_13.get_FieldType(), V_9.get_Left().get_UnderlyingSameMethodInstructions());
             }
         }
         else
         {
             V_12 = (V_9.get_Left() as PropertyReferenceExpression).get_Property();
             if (!this.Visit(V_12.get_Name(), V_3))
             {
                 break;
             }
             V_10 = new PropertyInitializerExpression(V_12, V_12.get_PropertyType(), V_9.get_Left().get_UnderlyingSameMethodInstructions());
         }
         V_11 = new BinaryExpression(26, V_10, V_9.get_Right().Clone(), this.typeSystem, null, false);
         V_2.Add(V_11);
         V_7 = V_7 + 1;
     }
     if (V_2.get_Count() == 0)
     {
         return(false);
     }
     if (V_0.get_Initializer() != null)
     {
         V_4 = V_2.GetEnumerator();
         try
         {
             while (V_4.MoveNext())
             {
                 V_15 = V_4.get_Current();
                 V_0.get_Initializer().get_Expressions().Add(V_15);
             }
         }
         finally
         {
             if (V_4 != null)
             {
                 V_4.Dispose();
             }
         }
     }
     else
     {
         V_14 = new InitializerExpression(V_2, 1);
         V_14.set_IsMultiLine(true);
         V_0.set_Initializer(V_14);
     }
     result = statements.get_Item(startIndex);
     replacedStatementsCount = V_2.get_Count() + 1;
     return(true);
 }
Ejemplo n.º 2
0
 public ICodeNode VisitFieldInitializerExpression(FieldInitializerExpression node)
 {
     return(node);
 }
Ejemplo n.º 3
0
 public virtual void VisitFieldInitializerExpression(FieldInitializerExpression node)
 {
 }
Ejemplo n.º 4
0
        // Person person = new Person { Name = "John", Age = 20 };
        //
        // ==
        //
        // Person person = new Person();
        // person.Name = "John";
        // person.Age = 20;

        protected override bool TryMatchInternal(StatementCollection statements, int startIndex, out Statement result, out int replacedStatementsCount)
        {
            result = null;
            replacedStatementsCount = 0;

            ObjectCreationExpression objectCreation;
            Expression assignee;

            if (!TryGetObjectCreation(statements, startIndex, out objectCreation, out assignee))
            {
                return(false);
            }

            ExpressionCollection inlinedExpressions   = new ExpressionCollection();
            HashSet <string>     visitedPropertyNames = new HashSet <string>();

            if (objectCreation.Initializer != null)
            {
                if (objectCreation.Initializer.InitializerType != InitializerType.ObjectInitializer)
                {
                    return(false);
                }

                foreach (var item in objectCreation.Initializer.Expressions)
                {
                    string name = GetName((item as BinaryExpression).Left);
                    visitedPropertyNames.Add(name);
                }
            }

            for (int i = startIndex + 1; i < statements.Count; i++)
            {
                Expression expression;
                if (!TryGetNextExpression(statements[i], out expression))
                {
                    break;
                }

                BinaryExpression assignment = expression as BinaryExpression;
                if (!IsObjectPropertyOrFieldAssignment(assignment, assignee))
                {
                    break;
                }

                Expression initializer = null;

                if (assignment.Left.CodeNodeType == CodeNodeType.PropertyReferenceExpression)
                {
                    PropertyDefinition property = (assignment.Left as PropertyReferenceExpression).Property;
                    if (!Visit(property.Name, visitedPropertyNames))
                    {
                        break;
                    }
                    initializer = new PropertyInitializerExpression(property, property.PropertyType,
                                                                    assignment.Left.UnderlyingSameMethodInstructions);
                }
                else if (assignment.Left.CodeNodeType == CodeNodeType.FieldReferenceExpression)
                {
                    FieldDefinition field = (assignment.Left as FieldReferenceExpression).Field.Resolve();
                    if (!Visit(field.Name, visitedPropertyNames))
                    {
                        break;
                    }
                    initializer = new FieldInitializerExpression(field, field.FieldType,
                                                                 assignment.Left.UnderlyingSameMethodInstructions);
                }

                var inlinedAssignment = new BinaryExpression(BinaryOperator.Assign,
                                                             initializer, assignment.Right.Clone(), this.typeSystem, null);
                inlinedExpressions.Add(inlinedAssignment);
            }

            if (inlinedExpressions.Count == 0)
            {
                return(false);
            }

            if (objectCreation.Initializer == null)
            {
                var initializer = new InitializerExpression(inlinedExpressions, InitializerType.ObjectInitializer);
                initializer.IsMultiLine    = true;
                objectCreation.Initializer = initializer;
            }
            else
            {
                foreach (var item in inlinedExpressions)
                {
                    objectCreation.Initializer.Expressions.Add(item);
                }
            }

            result = statements[startIndex];
            replacedStatementsCount = inlinedExpressions.Count + 1;
            return(true);
        }