private static EPCompiledManifest CompileToAssembly( FAFQueryMethodForge query, string classPostfix, CompilerOptions compilerOptions, ModuleCompileTimeServices compileTimeServices, out Assembly assembly) { string queryMethodProviderClassName; try { queryMethodProviderClassName = CompilerHelperFAFQuery.CompileQuery(query, classPostfix,compileTimeServices, out assembly); } catch (StatementSpecCompileException ex) { EPCompileExceptionItem first; if (ex is StatementSpecCompileSyntaxException) { first = new EPCompileExceptionSyntaxItem(ex.Message, ex.Expression, -1); } else { first = new EPCompileExceptionItem(ex.Message, ex.Expression, -1); } var items = Collections.SingletonList(first); throw new EPCompileException(ex.Message + " [" + ex.Expression + "]", ex, items); } // compile query provider var fafProviderClassName = MakeFAFProvider( queryMethodProviderClassName, classPostfix, compileTimeServices, out assembly); // create manifest return new EPCompiledManifest(COMPILER_VERSION, null, fafProviderClassName, false); }
public StmtClassForgableQueryMethodProvider( string className, CodegenNamespaceScope namespaceScope, FAFQueryMethodForge forge) { ClassName = className; this._namespaceScope = namespaceScope; this._forge = forge; }
public static string CompileQuery( FAFQueryMethodForge query, string classPostfix, ModuleCompileTimeServices compileTimeServices, out Assembly assembly) { var statementFieldsClassName = CodeGenerationIDGenerator.GenerateClassNameSimple( typeof(StatementFields), classPostfix); var packageScope = new CodegenNamespaceScope( compileTimeServices.Namespace, statementFieldsClassName, compileTimeServices.IsInstrumented()); var queryMethodProviderClassName = CodeGenerationIDGenerator.GenerateClassNameSimple( typeof(FAFQueryMethodProvider), classPostfix); var forgeablesQueryMethod = query.MakeForgeables(queryMethodProviderClassName, classPostfix, packageScope); IList<StmtClassForgeable> forgeables = new List<StmtClassForgeable>(forgeablesQueryMethod); forgeables.Add(new StmtClassForgeableStmtFields(statementFieldsClassName, packageScope, 0)); // forge with statement-fields last var classes = new List<CodegenClass>(forgeables.Count); foreach (var forgeable in forgeables) { var clazz = forgeable.Forge(true, true); classes.Add(clazz); } // assign the assembly (required for completeness) assembly = null; // compile with statement-field first classes = classes .OrderBy(c => c.ClassType.GetSortCode()) .ToList(); var container = compileTimeServices.Container; var compiler = container .RoslynCompiler() .WithCodeLogging(compileTimeServices.Configuration.Compiler.Logging.IsEnableCode) .WithCodeAuditDirectory(compileTimeServices.Configuration.Compiler.Logging.AuditDirectory) .WithCodegenClasses(classes); assembly = compiler.Compile(); return queryMethodProviderClassName; }