internal GenerationResult Generate() { _usingsResult = new GenerationResult(_file); _parametersResult = new GenerationResult(_file); _inheritsResult = new GenerationResult(_file); _transformTextResult = new GenerationResult(_file); _featureResult = new GenerationResult(_file); _file.ProcessDescendants(this); var result = new GenerationResult(_file); StringBuilder builder = result.Builder; string ns = GetNamespace(); bool hasNamespace = !String.IsNullOrEmpty(ns); if (hasNamespace) { builder.AppendFormat("namespace {0} {{", ns); builder.AppendLine(); } builder.AppendLine("using System;"); result.Append(_usingsResult); builder.AppendFormat("[{0}]", SyntheticAttribute.Name); builder.AppendLine(); builder.AppendFormat("public class {0} : ", ClassName); if (_inheritsResult.Builder.Length == 0) { builder.Append(DefaultBaseClassName); } else { result.Append(_inheritsResult); } builder.AppendLine(" {"); builder.AppendFormat("[{0}] private static string __\x200CToString(object value) {{ return null; }}", SyntheticAttribute.Name); builder.AppendLine(); if (_hasHost) { builder.AppendLine("public virtual Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host { get; set; }"); } result.Append(_parametersResult); builder.AppendFormat("[System.CodeDom.Compiler.GeneratedCodeAttribute] public override string {0}() {{", TransformTextMethodName); builder.AppendLine(); result.Append(_transformTextResult); builder.AppendLine(); builder.AppendLine("return GenerationEnvironment.ToString();"); builder.AppendLine("}"); result.Append(_featureResult); builder.AppendLine("}"); if (hasNamespace) { builder.AppendLine("}"); } return(result); }
public T4CSharpCodeGenerationIntermediateResult Collect([NotNull] IT4File file) { var projectFile = file.PhysicalPsiSourceFile.ToProjectFile(); if (projectFile == null) return new T4CSharpCodeGenerationIntermediateResult(file, Interrupter); Results.Push(new T4CSharpCodeGenerationIntermediateResult(file, Interrupter)); Guard.StartProcessing(file.LogicalPsiSourceFile.GetLocation()); file.ProcessDescendants(this); string suffix = Result.State.ProduceBeforeEof(); if (!string.IsNullOrEmpty(suffix)) AppendTransformation(suffix, Result.State.FirstNode); Guard.EndProcessing(); return Results.Pop(); }