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);
                });
            });
        }
示例#3
0
        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);
                    });
                });
            }
        }