Made AttributeBuilder not a singleton, replaced multiple methods per attribute with a single method that returns all the attributes in a single sweep.
This commit is contained in:
@@ -5,23 +5,29 @@ using System.Collections.Generic;
|
||||
namespace CodeGenerator {
|
||||
public class AttributeBuilder {
|
||||
|
||||
private static AttributeBuilder _instance;
|
||||
public static AttributeBuilder Instance => _instance ??= new();
|
||||
|
||||
private CodeTypeDeclaration _attrDecl = new();
|
||||
|
||||
private List<(Type, string)> _fields = new();
|
||||
private List<(Type, string, string)> _properties = new();
|
||||
|
||||
public AttributeBuilder New() {
|
||||
public AttributeBuilder() {
|
||||
_attrDecl.IsClass = true;
|
||||
_attrDecl.Attributes = MemberAttributes.Public;
|
||||
_attrDecl.BaseTypes.Add(typeof(Attribute));
|
||||
}
|
||||
|
||||
public AttributeBuilder(string name) : this() {
|
||||
_attrDecl.Name = name;
|
||||
}
|
||||
|
||||
public AttributeBuilder New() {
|
||||
_attrDecl = new CodeTypeDeclaration();
|
||||
_fields.Clear();
|
||||
_properties.Clear();
|
||||
return this;
|
||||
}
|
||||
|
||||
public AttributeBuilder New(string name) {
|
||||
New();
|
||||
public AttributeBuilder SetName(string name) {
|
||||
_attrDecl.Name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -54,10 +54,11 @@ namespace CodeGenerator {
|
||||
}
|
||||
|
||||
private static CodeNamespace GenerateTypes(out CodeNamespace additionalNs) {
|
||||
//Initialize the namespaces
|
||||
CodeNamespace rootNs = new CodeNamespace(Namespace);
|
||||
rootNs.Types.Add(GenerateDnaFieldAttributeType());
|
||||
rootNs.Types.Add(GenerateDnaClassAttributeType());
|
||||
CodeNamespace ns = new CodeNamespace(Namespace+".DNA");
|
||||
//Fill the attribute types then add them to the namespaces
|
||||
rootNs.Types.AddRange(GenerateTypeDeclarations());
|
||||
ns.Imports.Add(new(rootNs.Name));
|
||||
|
||||
_customTypes = new();
|
||||
@@ -136,10 +137,11 @@ namespace CodeGenerator {
|
||||
return ns;
|
||||
}
|
||||
|
||||
private static CodeTypeDeclaration GenerateDnaFieldAttributeType() {
|
||||
var attributeBuilder = AttributeBuilder.Instance;
|
||||
private static CodeTypeDeclaration[] GenerateTypeDeclarations() {
|
||||
var attributeBuilder = new AttributeBuilder();
|
||||
|
||||
return attributeBuilder.New("DNAFieldAttribute")
|
||||
var typeDeclarations = new CodeTypeDeclaration[] {
|
||||
attributeBuilder.New().SetName("DNAFieldAttribute")
|
||||
.SetAttributeUsage(new (new CodeSnippetExpression("AttributeTargets.Field")))
|
||||
.AddAutoProperty(typeof(int), "Size")
|
||||
.AddAutoProperty(typeof(string), "OriginalType")
|
||||
@@ -149,19 +151,16 @@ namespace CodeGenerator {
|
||||
.AddAutoProperty(typeof(bool), "IsPointer")
|
||||
.AddAutoProperty(typeof(int), "MemoryOffset")
|
||||
.AddPropertiesConstructor()
|
||||
.Build();
|
||||
}
|
||||
|
||||
private static CodeTypeDeclaration GenerateDnaClassAttributeType() {
|
||||
var attributeBuilder = AttributeBuilder.Instance;
|
||||
|
||||
return attributeBuilder.New("DNAClassAttribute")
|
||||
.Build(),
|
||||
attributeBuilder.New().SetName("DNAClassAttribute")
|
||||
.SetAttributeUsage(new (new CodeSnippetExpression("AttributeTargets.Class | AttributeTargets.Struct")))
|
||||
.AddAutoProperty(typeof(int), "OriginalIndex")
|
||||
.AddAutoProperty(typeof(string), "OriginalName")
|
||||
.AddAutoProperty(typeof(int), "Size")
|
||||
.AddPropertiesConstructor()
|
||||
.Build();
|
||||
.Build()
|
||||
};
|
||||
return typeDeclarations;
|
||||
}
|
||||
|
||||
private static CodeAttributeDeclaration GenerateDnaFieldAttribute(int index, BlendFile.DnaField field,
|
||||
|
||||
Reference in New Issue
Block a user