void GenerateEventHelper(List <GeneratedEventMetadata> generatedEvents) { var eventMetadataHash = GeneratedEventMetadata.GetHash(generatedEvents); var eventMetadataHashHex = HexUtil.GetHexFromBytes(eventMetadataHash); var eventMetadataHashHexBytes = Encoding.ASCII.GetBytes(eventMetadataHashHex); var outputFilePath = Path.Combine(_generatedContractsDirectory, EventHelperFile + G_CS_FILE_EXT); if (!_returnFullSources && FileStartsWithHash(outputFilePath, eventMetadataHashHexBytes)) { _logger("Skipping writing already up-to-date source file: " + EventHelperFile); return; } var generator = new EventHelperGenerator(generatedEvents, _namespace); var(generatedCode, syntaxTree) = generator.GenerateSourceCode(); using (var fs = new StreamWriter(outputFilePath, append: false, encoding: StringUtil.UTF8)) { _logger("Writing source file: " + outputFilePath); fs.WriteLine("//" + eventMetadataHashHex); fs.WriteLine(generatedCode); var generatedCSharpEntry = new SolCodeGenCSharpResult(outputFilePath, generatedCode, syntaxTree); _genResults.GeneratedCSharpEntries.Add(generatedCSharpEntry); } }
void GeneratedContractSourceFiles( ContractInfo[] contractInfos, List <GeneratedEventMetadata> generatedEvents) { int skippedAlreadyUpdated = 0; foreach (var contractInfo in contractInfos) { var(solFile, contractName, contract, hash, bytecode) = contractInfo; var hashHex = HexUtil.GetHexFromBytes(hash); var hashHexBytes = Encoding.ASCII.GetBytes(hashHex); var contactEventInfo = GeneratedEventMetadata.Parse(contractName, _namespace, contract).ToList(); generatedEvents.AddRange(contactEventInfo); var outputFilePath = Path.Combine(_generatedContractsDirectory, contractName + G_CS_FILE_EXT); if (!_returnFullSources && FileStartsWithHash(outputFilePath, hashHexBytes)) { skippedAlreadyUpdated++; continue; } var generator = new ContractGenerator(contractInfo, _solSourceDirectory, _namespace, contactEventInfo); var(generatedContractCode, syntaxTree) = generator.GenerateSourceCode(); using (var fs = new StreamWriter(outputFilePath, append: false, encoding: StringUtil.UTF8)) { _logger("Writing source file: " + outputFilePath); fs.WriteLine("//" + hashHex); fs.WriteLine(generatedContractCode); var generatedCSharpEntry = new SolCodeGenCSharpResult(outputFilePath, generatedContractCode, syntaxTree); _genResults.GeneratedCSharpEntries.Add(generatedCSharpEntry); } } if (skippedAlreadyUpdated > 0) { _logger($"Detected already up-to-date generated files: {skippedAlreadyUpdated} contracts"); } }