示例#1
0
        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);
        }
示例#2
0
        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());
        }