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); }
private static string GetStaticMethodString(DynamicMethodSchema schema) { StringBuilder methodBuilder = new StringBuilder(); schema.methodName = DynamicCodeFragmentGenerator.autoChangingMethodName; string methodText = GenerateMethodText(schema); methodBuilder.Append(methodText); return(methodBuilder.ToString()); }
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); }
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); }
public static MethodInfo GetGeneratedMethod([NotNull] DynamicMethodSchema schema) { return(GetGeneratedMethods(new[] { schema })[0]); }