示例#1
0
        /// <summary>
        ///  Serializes a method invocation on the control being serialized.  Used to serialize Suspend/ResumeLayout pairs, etc.
        /// </summary>
        private void SerializeMethodInvocation(IDesignerSerializationManager manager, CodeStatementCollection statements, object control, string methodName, CodeExpressionCollection parameters, Type[] paramTypes, StatementOrdering ordering)
        {
            using (TraceScope("ControlCodeDomSerializer::SerializeMethodInvocation(" + methodName + ")"))
            {
                string name = manager.GetName(control);
                Trace(name + "." + methodName);

                // Use IReflect to see if this method name exists on the control.
                paramTypes = ToTargetTypes(control, paramTypes);
                MethodInfo mi = TypeDescriptor.GetReflectionType(control).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance, null, paramTypes, null);

                if (mi != null)
                {
                    CodeExpression field = SerializeToExpression(manager, control);
                    CodeMethodReferenceExpression method       = new CodeMethodReferenceExpression(field, methodName);
                    CodeMethodInvokeExpression    methodInvoke = new CodeMethodInvokeExpression();
                    methodInvoke.Method = method;

                    if (parameters != null)
                    {
                        methodInvoke.Parameters.AddRange(parameters);
                    }

                    CodeExpressionStatement statement = new CodeExpressionStatement(methodInvoke);

                    switch (ordering)
                    {
                    case StatementOrdering.Prepend:
                        statement.UserData["statement-ordering"] = "begin";
                        break;

                    case StatementOrdering.Append:
                        statement.UserData["statement-ordering"] = "end";
                        break;

                    default:
                        Debug.Fail("Unsupported statement ordering: " + ordering);
                        break;
                    }

                    statements.Add(statement);
                }
            }
        }
        private void SerializeMethodInvocation(IDesignerSerializationManager manager, CodeStatementCollection statements, object control, string methodName, CodeExpressionCollection parameters, System.Type[] paramTypes, StatementOrdering ordering)
        {
            using (CodeDomSerializerBase.TraceScope("ControlCodeDomSerializer::SerializeMethodInvocation(" + methodName + ")"))
            {
                manager.GetName(control);
                paramTypes = ToTargetTypes(control, paramTypes);
                if (TypeDescriptor.GetReflectionType(control).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance, null, paramTypes, null) != null)
                {
                    CodeMethodReferenceExpression expression2 = new CodeMethodReferenceExpression(base.SerializeToExpression(manager, control), methodName);
                    CodeMethodInvokeExpression expression = new CodeMethodInvokeExpression {
                        Method = expression2
                    };
                    if (parameters != null)
                    {
                        expression.Parameters.AddRange(parameters);
                    }
                    CodeExpressionStatement statement = new CodeExpressionStatement(expression);
                    switch (ordering)
                    {
                        case StatementOrdering.Prepend:
                            statement.UserData["statement-ordering"] = "begin";
                            break;

                        case StatementOrdering.Append:
                            statement.UserData["statement-ordering"] = "end";
                            break;
                    }
                    statements.Add(statement);
                }
            }
        }
示例#3
0
        private void SerializeMethodInvocation(IDesignerSerializationManager manager, CodeStatementCollection statements, object control, string methodName, CodeExpressionCollection parameters, System.Type[] paramTypes, StatementOrdering ordering)
        {
            using (CodeDomSerializerBase.TraceScope("ControlCodeDomSerializer::SerializeMethodInvocation(" + methodName + ")"))
            {
                manager.GetName(control);
                paramTypes = ToTargetTypes(control, paramTypes);
                if (TypeDescriptor.GetReflectionType(control).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance, null, paramTypes, null) != null)
                {
                    CodeMethodReferenceExpression expression2 = new CodeMethodReferenceExpression(base.SerializeToExpression(manager, control), methodName);
                    CodeMethodInvokeExpression    expression  = new CodeMethodInvokeExpression {
                        Method = expression2
                    };
                    if (parameters != null)
                    {
                        expression.Parameters.AddRange(parameters);
                    }
                    CodeExpressionStatement statement = new CodeExpressionStatement(expression);
                    switch (ordering)
                    {
                    case StatementOrdering.Prepend:
                        statement.UserData["statement-ordering"] = "begin";
                        break;

                    case StatementOrdering.Append:
                        statement.UserData["statement-ordering"] = "end";
                        break;
                    }
                    statements.Add(statement);
                }
            }
        }