Пример #1
0
        public string GenerateCode()
        {
            ClassTemplate t = new ClassTemplate();

            t.Class = this;
            return(t.TransformText());
        }
Пример #2
0
        static void GenerateClass()
        {
            ClassTemplate ct = new ClassTemplate();

            var tt = ct.TransformText();

            using (StreamWriter file = new StreamWriter(@"MyClass.cs"))
            {
                file.Write(tt);
            }
        }
Пример #3
0
    void GenerateCode()
    {
        Directory.CreateDirectory(OutputDir);

        // Generate Libs file
        using (TextWriter w = File.CreateText(Path.Combine(OutputDir, "Libs.cs"))) {
            LibsTemplate.Generator = this;
            LibsTemplate.Libs      = new[] { Lib };
            w.Write(LibsTemplate.TransformText());
        }


        // Generate user types
        foreach (Namespace ns in Lib.Namespaces)
        {
            if (ns.ParentNamespace is Class)
            {
                continue;
            }

            var klass = ns as Class;
            if (klass != null)
            {
                if (klass.Disable)
                {
                    continue;
                }

                using (TextWriter w = File.CreateText(Path.Combine(OutputDir, klass.Name + ".cs"))) {
                    ClassTemplate.Generator = this;
                    ClassTemplate.Class     = klass;
                    ClassTemplate.Nested    = false;
                    w.Write(ClassTemplate.TransformText());
                }

                continue;
            }

            var @enum = ns as Enumeration;
            if (@enum != null)
            {
                using (TextWriter w = File.CreateText(Path.Combine(OutputDir, @enum.Name + ".cs"))) {
                    EnumTemplate.Generator = this;
                    EnumTemplate.Enum      = @enum;
                    EnumTemplate.Nested    = false;
                    w.Write(EnumTemplate.TransformText());
                }

                continue;
            }
        }
    }
Пример #4
0
        public static string GenerateClassCode(ClassData classData)
        {
            ClassTemplate t = new ClassTemplate();

            t.Session = new Microsoft.VisualStudio.TextTemplating.TextTemplatingSession();
            t.Session["classParameters"] = classData;
            t.Session["methods"]         = classData.Methods;
            // Add other parameter values to t.Session here.
            t.Initialize(); // Must call this to transfer values.
            string resultText = t.TransformText();

            return(resultText);
        }
Пример #5
0
        static void Generate(string apiPath)
        {
            try
            {
                // Enumerate through all *.json files in the provided path and generate classes
                if (Directory.Exists(apiPath))
                {
                    Log("Scanning {0}...", apiPath);
                    var jsonFiles = Directory.EnumerateFiles(apiPath, "*.json").ToList();
                    Log("Found {0} objects.", jsonFiles.Count);

                    if (jsonFiles.Count > 0)
                    {
                        // Parse JSON into metadata classes
                        var generatedPath = Path.Combine(apiPath, "generated");
                        if (!Directory.Exists(generatedPath))
                        {
                            Directory.CreateDirectory(generatedPath);
                        }

                        Log("Parsing JSON files...");
                        var metaClasses = new List <MetaClass>();
                        foreach (var jsonFile in jsonFiles)
                        {
                            Log("Parsing {0}...", Path.GetFileName(jsonFile));
                            var node = JsonConvert.DeserializeObject <Node>(File.ReadAllText(jsonFile));
                            if (node.Attributes != null)
                            {
                                var metaClass = new MetaClass(node);
                                if (!String.IsNullOrWhiteSpace(metaClass.Name))
                                {
                                    metaClasses.Add(metaClass);
                                }
                            }
                        }

                        // Generate classes from the metadata
                        Log("Generating classes...");
                        foreach (var metaClass in metaClasses)
                        {
                            Log("Generating {0}...", metaClass.FullName);
                            // Add properties from mixins to the classes
                            metaClass.AddMixins(metaClasses);
                            // Add class interfaces
                            metaClass.AddInterfaces(metaClasses);

                            // Generate class/interface from T4 template
                            string content = null;
                            if (!metaClass.IsInterface)
                            {
                                var template = new ClassTemplate {
                                    Session = new Dictionary <string, object> {
                                        { "Model", metaClass }
                                    }
                                };
                                content = template.TransformText();
                            }
                            else if (metaClass.IsInterface)
                            {
                                var template = new InterfaceTemplate {
                                    Session = new Dictionary <string, object> {
                                        { "Model", metaClass }
                                    }
                                };
                                content = template.TransformText();
                            }

                            // Write output class to .cs file
                            if (content != null)
                            {
                                var relOutputFile = metaClass.OriginalFullName.Replace(".", @"\") + ".cs";
                                if (!relOutputFile.StartsWith(@"qx\"))
                                {
                                    relOutputFile = @"qx\" + relOutputFile;
                                }
                                var outputFile = Path.Combine(generatedPath, relOutputFile);
                                var outputPath = Path.GetDirectoryName(outputFile);
                                if (!Directory.Exists(outputPath))
                                {
                                    Directory.CreateDirectory(outputPath);
                                }
                                File.WriteAllText(outputFile, content);
                            }
                        }
                    }
                    Log("Generation completed.");
                }
                else
                {
                    Log("Path not found: " + apiPath);
                }
            }
            catch (Exception e)
            {
                Log(e);
            }
        }