public static async Task ConvertFolderAsync(string sourcePath, string targetPath, ILogger logger) { try { var fs = new FileSystem(); var options = new Dictionary <string, object>(); var typeAnalysis = new AnalyzerImpl(fs, logger, options, DateTime.Now); typeAnalysis.Analyze(sourcePath); typeAnalysis.Finish(); var types = new TypeReferenceTranslator(typeAnalysis.BuildTypeDictionary()); var walker = new DirectoryWalker(fs, sourcePath, "*.py"); await walker.EnumerateAsync(state => { foreach (var file in fs.GetFiles(state.DirectoryName, "*.py", SearchOption.TopDirectoryOnly)) { var path = fs.GetFullPath(file); var xlator = new Translator( state.Namespace, fs.GetFileNameWithoutExtension(file), fs, logger); var module = typeAnalysis.GetAstForFile(path); var relativePath = MakeRelative(sourcePath, path); var targetFilePath = Path.ChangeExtension(MakeAbsolute(targetPath, relativePath), ".py.cs"); var targetFileDirectory = Path.GetDirectoryName(targetFilePath); if (!Directory.Exists(targetFileDirectory)) { Directory.CreateDirectory(targetFileDirectory); } xlator.TranslateModuleStatements( module.body.stmts, types, targetFilePath); } }); logger.Inform(Resources.Done); } catch (Exception ex) { logger.Error(Resources.ErrUnexpectedConversionError, ex.Message); logger.Inform(Resources.ConversionWasAborted); } }