protected override bool Execute(ConfigFile config) { var cppHeaderGenerator = new CppHeaderGenerator(SharpGenLogger, OutputPath); var configsWithHeaders = new HashSet <ConfigFile>(ConfigFile.IdComparer); var configsWithExtensions = new HashSet <ConfigFile>(ConfigFile.IdComparer); foreach (var cfg in config.ConfigFilesLoaded) { if (HeaderFiles.Any(item => item.GetMetadata("ConfigId") == cfg.Id)) { configsWithHeaders.Add(cfg); } if (ExtensionHeaders.Any(item => item.GetMetadata("ConfigId") == cfg.Id)) { configsWithExtensions.Add(cfg); } } var cppHeaderGenerationResult = cppHeaderGenerator.GenerateCppHeaders(config, configsWithHeaders, configsWithExtensions); var consumerConfig = new ConfigFile { Id = "CppConsumerConfig", IncludeProlog = { cppHeaderGenerationResult.Prologue } }; consumerConfig.Write(CppConsumerConfigCache.ItemSpec); var updatedConfigFiles = new List <ITaskItem>(); foreach (var cfg in configsWithHeaders) { if (cppHeaderGenerationResult.UpdatedConfigs.Contains(cfg) && cfg.AbsoluteFilePath != null) { var item = new TaskItem(cfg.AbsoluteFilePath); item.SetMetadata("Id", cfg.Id); updatedConfigFiles.Add(item); } } UpdatedConfigs = updatedConfigFiles.ToArray(); return(!SharpGenLogger.HasErrors); }
protected override bool Execute(ConfigFile config) { var updatedConfigs = new HashSet <ConfigFile>(ConfigFile.IdComparer); var configsWithExtensions = new HashSet <ConfigFile>(ConfigFile.IdComparer); foreach (var cfg in config.ConfigFilesLoaded) { if (UpdatedConfigs.Any(updated => updated.GetMetadata("Id") == cfg.Id)) { updatedConfigs.Add(cfg); } if (ExtensionHeaders.Any(updated => updated.GetMetadata("ConfigId") == cfg.Id)) { configsWithExtensions.Add(cfg); } } var resolver = new IncludeDirectoryResolver(SharpGenLogger); resolver.Configure(config); var castXml = new CastXmlRunner(SharpGenLogger, resolver, CastXmlExecutablePath, CastXmlArguments) { OutputPath = OutputPath }; var macroManager = new MacroManager(castXml); var cppExtensionGenerator = new CppExtensionHeaderGenerator(macroManager); var module = cppExtensionGenerator.GenerateExtensionHeaders(config, OutputPath, configsWithExtensions, updatedConfigs); ReferencedHeaders = macroManager.IncludedFiles.Select(file => new TaskItem(file)).ToArray <ITaskItem>(); if (SharpGenLogger.HasErrors) { return(false); } module.Write(PartialCppModuleCache.ItemSpec); return(!SharpGenLogger.HasErrors); }