protected internal override CodeCompileUnit GetCodeCompileUnit(out IDictionary linePragmasTable) { Debug.Assert(_parser != null); // Return the provider type and compiler params Type codeDomProviderType = _parser.CompilerType.CodeDomProviderType; // Create a code generator for the language CodeDomProvider codeDomProvider = CompilationUtil.CreateCodeDomProviderNonPublic( codeDomProviderType); // Create a designer mode codedom tree for the page BaseCodeDomTreeGenerator treeGenerator = CreateCodeDomTreeGenerator(_parser); treeGenerator.SetDesignerMode(); CodeCompileUnit ccu = treeGenerator.GetCodeDomTree(codeDomProvider, new StringResourceBuilder(), VirtualPathObject); linePragmasTable = treeGenerator.LinePragmasTable; // This code is used to see the full generated code in the debugger. Just uncomment and look at // generatedCode in the debugger. Don't check in with this code uncommented! #if TESTCODE Stream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream, System.Text.Encoding.Unicode); codeDomProvider.GenerateCodeFromCompileUnit(ccu, writer, null /*CodeGeneratorOptions*/); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); TextReader reader = new StreamReader(stream); string generatedCode = reader.ReadToEnd(); #endif return(ccu); }
public override void GenerateCode(AssemblyBuilder assemblyBuilder) { if (this.Parser.RequiresCompilation) { BaseCodeDomTreeGenerator generator = this.CreateCodeDomTreeGenerator(this._parser); CodeCompileUnit ccu = generator.GetCodeDomTree(assemblyBuilder.CodeDomProvider, assemblyBuilder.StringResourceBuilder, base.VirtualPathObject); if (ccu != null) { if (this._parser.AssemblyDependencies != null) { foreach (Assembly assembly in (IEnumerable)this._parser.AssemblyDependencies) { assemblyBuilder.AddAssemblyReference(assembly, ccu); } } assemblyBuilder.AddCodeCompileUnit(this, ccu); } this._instantiatableFullTypeName = generator.GetInstantiatableFullTypeName(); if (this._instantiatableFullTypeName != null) { assemblyBuilder.GenerateTypeFactory(this._instantiatableFullTypeName); } this._intermediateFullTypeName = generator.GetIntermediateFullTypeName(); } }
protected internal override CodeCompileUnit GetCodeCompileUnit(out IDictionary linePragmasTable) { CodeDomProvider codeDomProvider = CompilationUtil.CreateCodeDomProviderNonPublic(this._parser.CompilerType.CodeDomProviderType); BaseCodeDomTreeGenerator generator = this.CreateCodeDomTreeGenerator(this._parser); generator.SetDesignerMode(); CodeCompileUnit unit = generator.GetCodeDomTree(codeDomProvider, new StringResourceBuilder(), base.VirtualPathObject); linePragmasTable = generator.LinePragmasTable; return(unit); }
public override void GenerateCode(AssemblyBuilder assemblyBuilder) { // Don't generate any code for no-compile pages if (!Parser.RequiresCompilation) { return; } BaseCodeDomTreeGenerator treeGenerator = CreateCodeDomTreeGenerator(_parser); CodeCompileUnit ccu = treeGenerator.GetCodeDomTree(assemblyBuilder.CodeDomProvider, assemblyBuilder.StringResourceBuilder, VirtualPathObject); if (ccu != null) { // Add all the assemblies if (_parser.AssemblyDependencies != null) { foreach (Assembly assembly in _parser.AssemblyDependencies) { assemblyBuilder.AddAssemblyReference(assembly, ccu); } } assemblyBuilder.AddCodeCompileUnit(this, ccu); } // Get the name of the generated type that can be instantiated. It may be null // in updatable compilation scenarios. _instantiatableFullTypeName = treeGenerator.GetInstantiatableFullTypeName(); // tell the assembly builder to generate a fast factory for this type if (_instantiatableFullTypeName != null) { assemblyBuilder.GenerateTypeFactory(_instantiatableFullTypeName); } _intermediateFullTypeName = treeGenerator.GetIntermediateFullTypeName(); }