Пример #1
0
        public static DynamicMethodSchema GetMethodSchema(ConditionSchema schema)
        {
            DynamicMethodSchema methodSchema = new DynamicMethodSchema();
            var argumentTypeList             = new List <Type>();
            var additionalReferencedTypes    = new List <Type>();

            argumentTypeList.Add(schema.targetSchema.propertyType);
            if (schema.targetSchema.propertySequence.Last().propertyType != null)
            {
                additionalReferencedTypes.Add(schema.targetSchema.propertySequence.Last().propertyType);
            }
            foreach (var x in schema.argumentSchemata)
            {
                if (x.primitiveType == PrimitiveType.NonPrimitive)
                {
                    argumentTypeList.Add(x.propertyType);
                    if (x.propertySequence.Length > 0 && x.propertySequence.Last().propertyType != null)
                    {
                        additionalReferencedTypes.Add(x.propertySequence.Last().propertyType);
                    }
                }
            }
            methodSchema.argumentData = argumentTypeList.ToArray();
            methodSchema.additionalReferencedTypes = additionalReferencedTypes.ToArray();
            methodSchema.returnType = typeof(bool).AssemblyQualifiedName;
            methodSchema.methodBody = DynamicCodeFragmentGenerator.GetMethodBodyFromConditionSchema(schema);
            return(methodSchema);
        }
Пример #2
0
        private static string GetStaticMethodString(DynamicMethodSchema schema)
        {
            StringBuilder methodBuilder = new StringBuilder();

            schema.methodName = DynamicCodeFragmentGenerator.autoChangingMethodName;
            string methodText = GenerateMethodText(schema);

            methodBuilder.Append(methodText);

            return(methodBuilder.ToString());
        }
Пример #3
0
        private static string GenerateMethodText(DynamicMethodSchema schema)
        {
            Type   returnType  = Type.GetType(schema.returnType);
            string declaration = "public static " + GetFullyConstructedTypeName(returnType) + " " + schema.methodName;
            string arguments   = "( ";

            int i = 0;

            foreach (var type in schema.argumentData)
            {
                arguments += GetFullyConstructedTypeName(type) + " a" + i++.ToString() + ",";
            }
            arguments = arguments.Insert(arguments.Length - 1, ")");
            arguments = arguments.Substring(0, arguments.Length - 1);

            string methodScopeAndBody = "{" + schema.methodBody + "}";

            return(declaration + arguments + methodScopeAndBody);
        }
Пример #4
0
        private static List <Tuple <string, string> > CollectNewUsingStatements(DynamicMethodSchema schema)
        {
            var newUsingStatements = new List <Tuple <string, string> >();
            var oldUsingStatements = new List <Tuple <string, string> >();

            oldUsingStatements.AddRange(_usingStatementsAndDlls);

            Type returnType = Type.GetType(schema.returnType);

            newUsingStatements.AddRange(GetUsingStatementsForTypeAndGenericArguments(oldUsingStatements, returnType));

            int i = 0;

            foreach (var type in schema.additionalReferencedTypes)
            {
                newUsingStatements.AddRange(GetUsingStatementsForTypeAndGenericArguments(oldUsingStatements, type));
            }
            foreach (var type in schema.argumentData)
            {
                newUsingStatements.AddRange(GetUsingStatementsForTypeAndGenericArguments(oldUsingStatements, type));
            }
            return(newUsingStatements);
        }
Пример #5
0
 public static MethodInfo GetGeneratedMethod([NotNull] DynamicMethodSchema schema)
 {
     return(GetGeneratedMethods(new[] { schema })[0]);
 }