Ejemplo n.º 1
0
 public sealed override Type[] GetInterfaces() => ImplementedInterfaces.ToArray();
Ejemplo n.º 2
0
        public string BuildFile()
        {
            var fileBuilder = new StringBuilder();
            var lineBuffer  = new StringBuilder();

            currentIndent = 0;

            // Usings
            foreach (var _using in Usings)
            {
                AddLine(fileBuilder, $"using {_using};");
            }
            AddLine(fileBuilder, "");

            // Namespace
            AddLine(fileBuilder, $"namespace {Namespace}");
            AddLine(fileBuilder, "{");
            currentIndent++;

            // Class Documentation
            AddLine(fileBuilder, "/// <summary>");
            foreach (var line in Description)
            {
                AddLine(fileBuilder, $"/// <para>{line}</para>");
            }
            AddLine(fileBuilder, "/// </summary>");

            // Class name and implemented interfaces
            lineBuffer.Clear();
            lineBuffer.Append($"{ClassAccessLevel} {(IsInterface ? "interface" : "class")} {ClassName}");

            if (ImplementedInterfaces.Count > 0)
            {
                lineBuffer.Append($" : {ImplementedInterfaces[0]}");

                foreach (var implementedInterface in ImplementedInterfaces.Skip(1))
                {
                    lineBuffer.Append($", {implementedInterface}");
                }
            }

            AddLine(fileBuilder, lineBuffer.ToString());
            lineBuffer.Clear();

            AddLine(fileBuilder, "{");
            currentIndent++;

            // Global fields and properties
            foreach (var region in Regions)
            {
                AddLine(fileBuilder, $"// {region}");

                if (regionVariables.ContainsKey(region))
                {
                    foreach (var regionVariable in regionVariables[region])
                    {
                        if (regionVariable.StartsWith("method:")) // Is a method
                        {
                            var methodName = regionVariable.Replace("method:", "");

                            if (methodPreStubComments.ContainsKey(methodName))
                            {
                                AddLine(fileBuilder, $"// {methodPreStubComments[methodName]}");
                            }

                            AddLine(fileBuilder, methodStubs[methodName]);
                            if (!IsInterface)
                            {
                                AddLine(fileBuilder, "{");
                                currentIndent++;
                                if (methodBodies.ContainsKey(methodName) && methodBodies[methodName].Count > 0)
                                {
                                    foreach (var line in methodBodies[methodName])
                                    {
                                        AddLine(fileBuilder, line);
                                    }
                                }
                                else
                                {
                                    AddLine(fileBuilder, "");
                                }

                                currentIndent--;
                                AddLine(fileBuilder, "}");
                            }
                        }
                        else // Is a field or property
                        {
                            AddLine(fileBuilder, regionVariable);
                        }
                    }
                }

                AddLine(fileBuilder, "");
            }

            if (!IsInterface)
            {
                // Constructor Documentation
                AddLine(fileBuilder, "/// <summary>");
                AddLine(fileBuilder, $"/// <para>{Description.FirstOrDefault()}</para>");
                AddLine(fileBuilder, "/// </summary>");

                // Constructor
                AddLine(fileBuilder, $"public {ClassName}()");
                AddLine(fileBuilder, "{");
                currentIndent++;

                if (ConstructorBody.Count > 0)
                {
                    foreach (var line in ConstructorBody)
                    {
                        AddLine(fileBuilder, line);
                    }
                }
                else
                {
                    AddLine(fileBuilder, "");
                }

                currentIndent--;
                AddLine(fileBuilder, "}");
            }

            // // Method stubs
            // foreach (var kvp in methodStubs)
            // {
            //     AddLine(fileBuilder, "");
            //     if (methodPreStubComments.ContainsKey(kvp.Key)) AddLine(fileBuilder, $"// {methodPreStubComments[kvp.Key]}");
            //
            //     AddLine(fileBuilder, kvp.Value);
            //     if (!IsInterface)
            //     {
            //         AddLine(fileBuilder, "{");
            //         currentIndent++;
            //         if (methodBodies.ContainsKey(kvp.Key) && methodBodies[kvp.Key].Count > 0)
            //         {
            //             foreach (var line in methodBodies[kvp.Key])
            //             {
            //                 AddLine(fileBuilder, line);
            //             }
            //         }
            //         else
            //         {
            //             AddLine(fileBuilder, "");
            //         }
            //
            //         currentIndent--;
            //         AddLine(fileBuilder, "}");
            //     }
            // }

            currentIndent--;
            AddLine(fileBuilder, "}");

            currentIndent--;
            AddLine(fileBuilder, "}");

            var fileContents = fileBuilder.ToString();

            return(fileContents);
        }
 public IGeneratedTypeBuilder ImplementsInterface <T>()
 {
     ImplementedInterfaces.Add(typeof(T));
     return(this);
 }
Ejemplo n.º 4
0
 public EnumsGeneratorItem WithInterface <T>()
 {
     ImplementedInterfaces.Add(typeof(T));
     return(this);
 }