static void Main(string[] args) { var generator = new HelloWorldGenerator("Hello World") { IntervalInMilliseconds = 1000, NumberOfItemsInMessage = 100, NumberOfMessages = 10 }; generator.RunAsync().Wait(); }
public void Test_HelloWorldGenerator() { // Create the 'input' compilation that the generator will act on Compilation inputCompilation = CreateCompilation(@" namespace MyCode { public class Program { public static void Main(string[] args) { } } } "); // directly create an instance of the generator // (Note: in the compiler this is loaded from an assembly, and created via reflection at runtime) HelloWorldGenerator generator = new HelloWorldGenerator(); // Create the driver that will control the generation, passing in our generator GeneratorDriver driver = CSharpGeneratorDriver.Create(generator); // Run the generation pass // (Note: the generator driver itself is immutable, and all calls return an updated version of the driver that you should use for subsequent calls) driver = driver.RunGeneratorsAndUpdateCompilation(inputCompilation, out var outputCompilation, out var diagnostics); // We can now assert things about the resulting compilation: Debug.Assert(diagnostics.IsEmpty); // there were no diagnostics created by the generators Debug.Assert(outputCompilation.SyntaxTrees.Count() == 2); // we have two syntax trees, the original 'user' provided one, and the one added by the generator Debug.Assert(outputCompilation.GetDiagnostics().IsEmpty); // verify the compilation with the added source has no diagnostics // Or we can look at the results directly: GeneratorDriverRunResult runResult = driver.GetRunResult(); // The runResult contains the combined results of all generators passed to the driver Debug.Assert(runResult.GeneratedTrees.Length == 1); Debug.Assert(runResult.Diagnostics.IsEmpty); // Or you can access the individual results on a by-generator basis GeneratorRunResult generatorResult = runResult.Results[0]; Debug.Assert(generatorResult.Generator == generator); Debug.Assert(generatorResult.Diagnostics.IsEmpty); Debug.Assert(generatorResult.GeneratedSources.Length == 1); Debug.Assert(generatorResult.Exception is null); }
private BaseGenerator GetGenerator() { BaseGenerator generator; switch (GeneratorName ?? "hello") { case "fruit": generator = new FruitGenerator("FreshFruits"); break; case "dnd": generator = new DnDGenerator("DnD Characters"); break; case "hello": generator = new HelloWorldGenerator("Hello World"); break; default: throw new NotImplementedException($"Generator for {GeneratorName} does not exist"); } return(generator); }