public void Execute(GeneratorExecutionContext context) { if (!IsCsWinRTComponent(context)) { return; } Logger.Initialize(context); if (CatchWinRTDiagnostics(context)) { Logger.Log("Exiting early -- found errors in authored runtime component."); Logger.Close(); return; } try { context.AddSource("System.Runtime.InteropServices.WindowsRuntime", SourceText.From(ArrayAttributes, Encoding.UTF8)); string assembly = GetAssemblyName(context); string version = GetAssemblyVersion(context); MetadataBuilder metadataBuilder = new MetadataBuilder(); var writer = new WinRTTypeWriter( assembly, version, metadataBuilder); foreach (SyntaxTree tree in context.Compilation.SyntaxTrees) { writer.Model = context.Compilation.GetSemanticModel(tree); writer.Visit(tree.GetRoot()); } writer.FinalizeGeneration(); string winmdFile = GetWinmdOutputFile(context); GenerateWinMD(metadataBuilder, winmdFile); GenerateSources(context); } catch (Exception e) { Logger.Log(e.ToString()); if (e.InnerException != null) { Logger.Log(e.InnerException.ToString()); } Logger.Close(); throw; } Logger.Log("Done"); Logger.Close(); }
public void Generate() { if (CatchWinRTDiagnostics()) { Logger.Log("Exiting early -- found errors in authored runtime component."); Logger.Close(); return; } try { context.AddSource("System.Runtime.InteropServices.WindowsRuntime", SourceText.From(ArrayAttributes, Encoding.UTF8)); string assembly = context.GetAssemblyName(); string version = context.GetAssemblyVersion(); MetadataBuilder metadataBuilder = new MetadataBuilder(); var writer = new WinRTTypeWriter( assembly, version, metadataBuilder, Logger); WinRTSyntaxReciever syntaxReciever = (WinRTSyntaxReciever)context.SyntaxReceiver; Logger.Log("Found " + syntaxReciever.Declarations.Count + " types"); foreach (var declaration in syntaxReciever.Declarations) { writer.Model = context.Compilation.GetSemanticModel(declaration.SyntaxTree); writer.Visit(declaration); } writer.FinalizeGeneration(); GenerateWinMD(metadataBuilder); GenerateSources(); } catch (Exception e) { Logger.Log(e.ToString()); if (e.InnerException != null) { Logger.Log(e.InnerException.ToString()); } Logger.Close(); throw; } Logger.Log("Done"); Logger.Close(); }
public void Execute(GeneratorExecutionContext context) { if (!IsCsWinRTComponent(context)) { return; } Logger.Initialize(context); try { string assembly = GetAssemblyName(context); string version = GetAssemblyVersion(context); MetadataBuilder metadataBuilder = new MetadataBuilder(); var writer = new WinRTTypeWriter( assembly, version, metadataBuilder); foreach (SyntaxTree tree in context.Compilation.SyntaxTrees) { writer.Model = context.Compilation.GetSemanticModel(tree); writer.Visit(tree.GetRoot()); } writer.FinalizeGeneration(); string winmdFile = GetWinmdOutputFile(context); GenerateWinMD(metadataBuilder, winmdFile); GenerateSources(context); } catch (Exception e) { Logger.Log(e.ToString()); if (e.InnerException != null) { Logger.Log(e.InnerException.ToString()); } Logger.Close(); throw; } Logger.Log("Done"); Logger.Close(); }