public void OnTemplateChanged(string templatePath, bool force = false) { Log.Debug("{0} queued {1}", GenerationType.Template, templatePath); ErrorList.Clear(); ThreadHelper.JoinableTaskFactory.Run(async() => { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var projectItem = _dte.Solution.FindProjectItem(templatePath); var template = _templateController.GetTemplate(projectItem); if (force == false && ExtensionPackage.Instance.RenderOnSave == false) { Log.Debug("Render skipped {0}", templatePath); return; } var filesToRender = template.GetFilesToRender(); Log.Debug(" Will Check/Render {0} .cs files in referenced projects", filesToRender.Count); // Delay to wait for Roslyn to refresh the current Workspace after a change. await Task.Delay(1000).ConfigureAwait(true); _eventQueue.Enqueue(() => { var stopwatch = Stopwatch.StartNew(); foreach (var path in filesToRender) { var metadata = _metadataProvider.GetFile(path, template.Settings, null); if (metadata == null) { // the cs-file was found, but the build-action is not set to compile. continue; } var file = new FileImpl(metadata); template.RenderFile(file); if (template.HasCompileException) { break; } } template.SaveProjectFile(); stopwatch.Stop(); Log.Debug("{0} processed {1} in {2}ms", GenerationType.Template, templatePath, stopwatch.ElapsedMilliseconds); }); }); }
public void OnTemplateChanged(string templatePath) { Log.Debug("{0} queued {1}", GenerationType.Template, templatePath); ErrorList.Clear(); var projectItem = _dte.Solution.FindProjectItem(templatePath); var template = _templateController.GetTemplate(projectItem); var filesToRender = template.GetFilesToRender(); Log.Debug(" Will Check/Render {0} .cs files in referenced projects", filesToRender.Count); // Delay to wait for Roslyn to refresh the current Workspace after a change. Task.Delay(1000).ContinueWith(task => { _eventQueue.Enqueue(() => { var stopwatch = Stopwatch.StartNew(); foreach (var path in filesToRender) { var metadata = _metadataProvider.GetFile(path); var file = new FileImpl(metadata); template.RenderFile(file); if (template.HasCompileException) { break; } } template.SaveProjectFile(); stopwatch.Stop(); Log.Debug("{0} processed {1} in {2}ms", GenerationType.Template, templatePath, stopwatch.ElapsedMilliseconds); }); }); }
public void OnTemplateChanged(string templatePath, bool force = false) { Log.Debug("{0} queued {1}", GenerationType.Template, templatePath); ErrorList.Clear(); var projectItem = _dte.Solution.FindProjectItem(templatePath); var template = _templateController.GetTemplate(projectItem); if (force == false && ExtensionPackage.Instance.Options.RenderOnSave == false) { Log.Debug("Render skipped {0}", templatePath); return; } var filesToRender = template.GetFilesToRender(); Log.Debug(" Will Check/Render {0} .cs files in referenced projects", filesToRender.Count); if (Path.GetExtension(templatePath) == Constants.TstXTemplateExtension) { Task.Delay(1000).ContinueWith(task => { _eventQueue.Enqueue(() => { var stopwatch = Stopwatch.StartNew(); var allProjectFiles = new RootContextImpl(filesToRender.Select(file => _metadataProvider.GetFile(file, template.Settings, null))); template.RenderProjectFiles(allProjectFiles); template.SaveProjectFile(); stopwatch.Stop(); Log.Debug("{0} processed {1} in {2}ms", GenerationType.Template, templatePath, stopwatch.ElapsedMilliseconds); }); }); } else { Task.Delay(1000).ContinueWith(task => { _eventQueue.Enqueue(() => { var stopwatch = Stopwatch.StartNew(); foreach (var path in filesToRender) { var metadata = _metadataProvider.GetFile(path, template.Settings, null); if (metadata == null) { // the cs-file was found, but the build-action is not set to compile. continue; } var file = new FileImpl(metadata); template.RenderFile(file); if (template.HasCompileException) { break; } } template.SaveProjectFile(); stopwatch.Stop(); Log.Debug("{0} processed {1} in {2}ms", GenerationType.Template, templatePath, stopwatch.ElapsedMilliseconds); }); }); } }