public override CrayonWorkerResult DoWorkImpl(CrayonWorkerResult[] args)
        {
            // resDb = GetResourceDatabaseFromBuild(buildContext)
            BuildContext     buildContext = (BuildContext)args[0].Value;
            ResourceDatabase resDb        = ResourceDatabaseBuilder.PrepareResources(buildContext, null);

            return(new CrayonWorkerResult()
            {
                Value = resDb
            });
        }
        public static string Run(ExportCommand command, BuildContext buildContext)
        {
            string           outputDirectory   = new GetOutputDirectoryWorker().DoWorkImpl(buildContext);
            ExportBundle     compilationResult = ExportBundle.Compile(buildContext);
            ResourceDatabase resDb             = ResourceDatabaseBuilder.PrepareResources(buildContext, null);
            string           byteCode          = ByteCodeEncoder.Encode(compilationResult.ByteCode);

            byte[] cbxFileBytes = new GenerateCbxFileContentWorker().GenerateCbxBinaryData(buildContext, resDb, compilationResult, byteCode);
            Dictionary <string, FileOutput> fileOutputContext = new Dictionary <string, FileOutput>();

            new PopulateFileOutputContextForCbxWorker().GenerateFileOutput(fileOutputContext, buildContext, resDb, cbxFileBytes);
            new EmitFilesToDiskWorker().DoWorkImpl(fileOutputContext, outputDirectory);
            string absoluteCbxFilePath = new GetCbxFileLocation().DoWorkImpl(outputDirectory, buildContext);

            return(absoluteCbxFilePath);
        }
        public ExportBundle ExportVmBundle(ExportCommand command, BuildContext buildContext)
        {
            // TODO: Worker: platform = GetPlatform(buildContext, command)
            string platformId = buildContext.Platform.ToLowerInvariant();

            Platform.AbstractPlatform platform = command.PlatformProvider.GetPlatform(platformId);
            if (platform == null)
            {
                throw new InvalidOperationException("Unrecognized platform. See usage.");
            }

            // TODO: Worker: Compile
            ExportBundle compilationResult = ExportBundle.Compile(buildContext);

            AssemblyMetadata[] libraries = compilationResult.LibraryScopesUsed.Select(scope => scope.Metadata).ToArray();

            ResourceDatabase resourceDatabase = ResourceDatabaseBuilder.PrepareResources(buildContext, compilationResult.ByteCode);

            string outputDirectory = command.HasOutputDirectoryOverride
                ? command.OutputDirectoryOverride
                : buildContext.OutputFolder;

            if (!Path.IsAbsolute(outputDirectory))
            {
                outputDirectory = FileUtil.JoinPath(buildContext.ProjectDirectory, outputDirectory);
            }
            outputDirectory = FileUtil.GetCanonicalizeUniversalPath(outputDirectory);
            FileOutputExporter exporter = new FileOutputExporter(outputDirectory);

            VmGenerator vmGenerator = new VmGenerator();
            Dictionary <string, FileOutput> result = new Dictionary <string, FileOutput>();

            vmGenerator.GenerateVmSourceCodeForPlatform(
                result,
                platform,
                compilationResult,
                resourceDatabase,
                libraries,
                outputDirectory,
                VmGenerationMode.EXPORT_SELF_CONTAINED_PROJECT_SOURCE);

            exporter.ExportFiles(result);

            // TODO: this needs to be the result of an earlier step after this is split into workers.
            return(compilationResult);
        }