private string GenerateTsClass(ClassDeclarationSyntax classSyntax) { var tsClassGen = new TypeScriptClassGen(classSyntax); string generatedClass = tsClassGen.Generate(); Generated.Add(tsClassGen.ClassName); RefBasedClasses.AddRange(tsClassGen.ReferencedBaseClasses); RefClasses.AddRange(tsClassGen.ReferencedClasses); RefEnums.AddRange(tsClassGen.ReferencedEnums); return(generatedClass); }
public string Generate() { var sb = new StringBuilder(); foreach (GenProject genProject in _genProjects) { foreach (string identifier in genProject.GenProjSetting.Identifiers) { if (DeclarationManager.Instance.TryGetClass(identifier, out var syntax) && !Generated.Contains(identifier)) { sb.AppendLine(GenerateTsClass(syntax)); sb.AppendLine(); } } } while (true) { var refBaseClassToGenerate = RefBasedClasses.Except(Generated).ToArray(); if (refBaseClassToGenerate.Length == 0) { break; } foreach (string abstractClassName in refBaseClassToGenerate) { DeclarationManager.Instance.TryGetAbstractClass(abstractClassName, out var syntax); if (!Generated.Contains(abstractClassName)) { sb.AppendLine(GenerateTsClass(syntax)); sb.AppendLine(); } } } while (true) { var refClassToGenerate = RefClasses.Except(Generated).ToArray(); if (refClassToGenerate.Length == 0) { break; } foreach (string className in refClassToGenerate) { DeclarationManager.Instance.TryGetClass(className, out var syntax); if (!Generated.Contains(className)) { sb.AppendLine(GenerateTsClass(syntax)); sb.AppendLine(); } } } sb.AppendLine( @"export interface IEnumDefinition { value: number; display: string; color: string; } "); sb.AppendLine("export class Enums {"); foreach (string refEnum in RefEnums) { DeclarationManager.Instance.TryGetEnum(refEnum, out var syntax); if (!Generated.Contains(refEnum)) { sb.AppendLine(GenerateTsEnum(refEnum, syntax)); } } sb.AppendLine("}"); // end of class // TODO: Generate enums with colors for SASS return(sb.ToString()); }