It is possible to collide hintNames by placing the same value in postInit as in execute.
[Fact]
public void PostInit_Source_HintName_Is_Not_Useable_During_Execute()
{
var source = @"
class C { }
";
var parseOptions = TestOptions.Regular;
Compilation compilation = CreateCompilation(source, options: TestOptions.DebugDll, parseOptions: parseOptions);
compilation.VerifyDiagnostics();
Assert.Single(compilation.SyntaxTrees);
static void postInit(GeneratorPostInitializationContext context)
{
context.AddSource("postInit", "public class D {} ");
}
static void execute(GeneratorExecutionContext context)
{
context.AddSource("postInit", "public class E {} ");
}
var generator = new CallbackGenerator((ic) => ic.RegisterForPostInitialization(postInit), execute);
GeneratorDriver driver = CSharpGeneratorDriver.Create(new[] { generator }, parseOptions: parseOptions);
driver = driver.RunGeneratorsAndUpdateCompilation(compilation, out var outputCompilation, out _);
var results = driver.GetRunResult();
// BUG: should produce a diagnostic about colliding hint names
outputCompilation.VerifyDiagnostics();
}
Note this is very technically a breaking change, but I think we should take it as its not possible to correctly author a generator that does this anyway.
It is possible to collide
hintName
s by placing the same value in postInit as in execute.