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)); }
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); } } }
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; } } }
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; } } }
public virtual void OnNext(ICompilierResult value) { _count++; _results.Push(value); Commands.Log.Item(value); }
public ProgressToken(ICompilierResult result, int maxOperations = 0) { Result = result; MaxOperations = maxOperations; }