Exemplo n.º 1
0
        public static Task <ICompilierResult[]> CompileAsync(this Project project, IProgress <ICompilierResult> progress = default, System.Threading.CancellationToken cancellationToken = default)
        {
            var factory = new CompilerFactory();
            var tasks   = new Stack <Task <ICompilierResult> >();

            foreach (string path in Directory.EnumerateFiles(project.DirectoryName, "*", SearchOption.AllDirectories))
            {
                foreach (IItemGroup itemGroup in project.GetItempGroups())
                {
                    if (itemGroup.Enabled && itemGroup.CanAccept(path))
                    {
                        foreach (ICompilierOptions options in itemGroup.CreateCompilerOptions(path))
                        {
                            ICompiler compiler = factory.CreateInstance(options);
                            tasks.Push(Task.Run(() =>
                            {
                                using (compiler)
                                {
                                    if (compiler.CanExecute(options))
                                    {
                                        ICompilierResult result = compiler.Execute(options);
                                        progress?.Report(result);
                                        return(result);
                                    }

                                    return(new EmptyResult());
                                }
                            }, cancellationToken));
                        }
                    }
                }
            }

            return(Task.WhenAll(tasks));
        }
Exemplo n.º 2
0
        public static void Item(ICompilierResult value)
        {
            string path = value.OutputFile.GetRelativePath(WorkingDirectory);

            if (value.Succeeded)
            {
                string elapse = TimeSpan.FromTicks(value.ExecutionTime).ToString(@"mm\:ss\.fff");
                Write($"=> generated '{path}' in ({elapse}).", ConsoleColor.White);
            }
            else
            {
                foreach (var error in value.ErrorList)
                {
                    Write($"{error.Message} at {error.File}:{error.Line}", ConsoleColor.Red);
                }
            }
        }
Exemplo n.º 3
0
        protected void HandleMessage(ICompilierOptions options)
        {
            foreach (Type type in _factory.GetCompilerTypesThatSupports(options))
            {
                ICompiler fileOperator = (_compilers.Contains(type.Name) ? ((ICompiler)_compilers[type.Name]) : _factory.CreateInstance(type));

                if (fileOperator.CanExecute(options))
                {
                    if (!_compilers.Contains(type.Name))
                    {
                        _compilers.Add(type.Name, fileOperator);
                    }

                    ICompilierResult result = fileOperator.Execute(options);
                    _reporter?.Report(new ProgressToken(result));
                    break;
                }
            }
        }
Exemplo n.º 4
0
        internal void Process(ICompilierOptions options)
        {
            foreach (Type type in _factory.GetCompilerTypesThatSupports(options))
            {
                ICompiler fileOperator = _factory.CreateInstance(type);

                if (fileOperator.CanExecute(options))
                {
                    _totalActiveOperations++;
                    _preCompilationHandler?.Invoke(options, _project?.DirectoryName);
                    Task.Run(() =>
                    {
                        using (fileOperator)
                        {
                            ICompilierResult result = fileOperator.Execute(options);
                            _postCompilationHandler?.Invoke(new ProgressToken(result), _project?.DirectoryName);
                            _totalActiveOperations--;
                        }
                    });
                    break;
                }
            }
        }
Exemplo n.º 5
0
 public virtual void OnNext(ICompilierResult value)
 {
     _count++;
     _results.Push(value);
     Commands.Log.Item(value);
 }
Exemplo n.º 6
0
 public ProgressToken(ICompilierResult result, int maxOperations = 0)
 {
     Result        = result;
     MaxOperations = maxOperations;
 }