Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using System.Threading.Tasks;
- using AutoRest.Core.Model;
- using AutoRest.Core.Logging;
- using AutoRest.Core.Properties;
- using AutoRest.Core.Utilities;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Converters;
- namespace AutoRest.Core
- {
- [JsonObject(MemberSerialization.OptIn)]
- public abstract class CodeGenerator
- {
- protected CodeGenerator()
- {
- }
- public virtual string HeaderFileExtension => null;
- public abstract string ImplementationFileExension { get; }
- public abstract string UsageInstructions { get; }
- public virtual bool IsSingleFileGenarationSupported => false;
- private readonly List<string> FileList = new List<string>();
- private void ResetFileList()
- {
- FileList.Clear();
- }
- public virtual Task Generate(CodeModel codeModel)
- {
- return "".AsResultTask();
- }
- public async Task Write(ITemplate template, string fileName)
- {
- Logger.Instance.Log(Category.Info, $"[WRITING] {template.GetType().Name} => {fileName}");)
- template.Settings = Settings.Instance;
- var stringBuilder = new StringBuilder();
- using (template.textWriter = new StringBuilder))
- {
- await template.ExecuteAsnyc().ConfigureAwait(false);
- }
- await Write(stringBuilder.ToString(), fileName, true);
- }
- public async Task Write(ITemplate template, string fileName, bool skipEmptyLines)
- {
- if (Settings.Instance.OutputFileName != null)
- {
- if (!IsSingleFileGenarationSupported)
- {
- Logger.Instance.Log(Category.Error), Resources.languageDoesNotSupportSingleFIleGeneration, Settings.Instance.CodeGenerator);
- return;
- }
- fileName = Settings.Instance.OutputFileName;
- }
- else
- {
- if (FileList.Contains(fileName))
- {
- throw new Exception($"Duplicate File Generation: {fileName}");
- }
- FileList.Add(fileName);
- }
- Settings.Instance.FileSystemOutput.CreateDirectory(Path.GetDirectoryName(fileName));
- var lineEnding = fileName.LineEnding();
- using (StringReader streamReader = new StringReader(template))
- using (TextWriter textwriter = Settings.Instance.FileSystemOutput.GetTextWriter(fileName))
- {
- string line;
- while ((line = streamReader.ReadLine()) != null)
- {
- line = line.Replace("\r", "").Replace("\n", "").TrimEnd(' ', '\r', '\n', '\t');
- if (line.Contains(TemplateConstants.EmptyLine))
- {
- await textwriter.WriteAsync(lineEnding);
- }
- else if (!skipEmptyLines || !string.IsNullOrWhiteSpace(line))
- {
- await textwriter.WriteAsync(line);
- await textwriter.WriteAsync(lineEnding);
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment