Skip to content

Commit

Permalink
Merge pull request #22 from flcdrg/MemberVisitor
Browse files Browse the repository at this point in the history
Implement #21
  • Loading branch information
mganss authored Apr 5, 2017
2 parents 7e71bf8 + 5fbae58 commit 39dec11
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
8 changes: 5 additions & 3 deletions XmlSchemaClassGenerator.Tests/XmlTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ private Assembly Compile(string name, string pattern, Generator generatorPrototy
GenerateDesignerCategoryAttribute = false,
EntityFramework = false,
GenerateInterfaces = true,
NamespacePrefix = name,
NamespacePrefix = name
};

var gen = new Generator
Expand All @@ -52,7 +52,8 @@ private Assembly Compile(string name, string pattern, Generator generatorPrototy
DataAnnotationMode = generatorPrototype.DataAnnotationMode,
GenerateDesignerCategoryAttribute = generatorPrototype.GenerateDesignerCategoryAttribute,
EntityFramework = generatorPrototype.EntityFramework,
GenerateInterfaces = generatorPrototype.GenerateInterfaces
GenerateInterfaces = generatorPrototype.GenerateInterfaces,
MemberVisitor = generatorPrototype.MemberVisitor
};

var files = Glob.Glob.ExpandNames(pattern);
Expand Down Expand Up @@ -103,7 +104,8 @@ public void CanDeserializeSampleXml()
{
EntityFramework = true,
DataAnnotationMode = DataAnnotationMode.All,
NamespaceProvider = new Dictionary<NamespaceKey, string> { { new NamespaceKey("http://wadl.dev.java.net/2009/02"), "Wadl" } }.ToNamespaceProvider(new GeneratorConfiguration { NamespacePrefix = "Wadl" }.NamespaceProvider.GenerateNamespace)
NamespaceProvider = new Dictionary<NamespaceKey, string> { { new NamespaceKey("http://wadl.dev.java.net/2009/02"), "Wadl" } }.ToNamespaceProvider(new GeneratorConfiguration { NamespacePrefix = "Wadl" }.NamespaceProvider.GenerateNamespace),
MemberVisitor = (member, model) => { }
});
TestSamples("Wadl", WadlPattern);
Compile("IS24ImmoTransfer", IS24ImmoTransferPattern);
Expand Down
9 changes: 9 additions & 0 deletions XmlSchemaClassGenerator/Generator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,15 @@ public CodeTypeReferenceOptions CodeTypeReferenceOptions
set { _configuration.CodeTypeReferenceOptions = value; }
}

/// <summary>
/// Optional delegate that is called for each generated type member
/// </summary>
public Action<CodeTypeMember, PropertyModel> MemberVisitor
{
get { return _configuration.MemberVisitor; }
set { _configuration.MemberVisitor = value;}
}

private readonly XmlSchemaSet Set = new XmlSchemaSet();
private Dictionary<XmlQualifiedName, XmlSchemaAttributeGroup> AttributeGroups;
private Dictionary<XmlQualifiedName, XmlSchemaGroup> Groups;
Expand Down
6 changes: 6 additions & 0 deletions XmlSchemaClassGenerator/GeneratorConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public GeneratorConfiguration()
DataAnnotationMode = DataAnnotationMode.All;
GenerateSerializableAttribute = GenerateDesignerCategoryAttribute = true;
CollectionType = typeof(Collection<>);
MemberVisitor = (member, model) => { };
}

/// <summary>
Expand Down Expand Up @@ -139,5 +140,10 @@ public void WriteLog(string message)
Log(message);
}
}

/// <summary>
/// Optional delegate that is called for each generated type member
/// </summary>
public Action<CodeTypeMember, PropertyModel> MemberVisitor { get; set; }
}
}
11 changes: 11 additions & 0 deletions XmlSchemaClassGenerator/TypeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,13 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
specifiedMember.Comments.AddRange(DocumentationModel.GetComments(specifiedDocs).ToArray());
typeDeclaration.Members.Add(specifiedMember);

var specifiedMemberPropertyModel = new PropertyModel(Configuration)
{
Name = specifiedName + "Specified"
};

Configuration.MemberVisitor(specifiedMember, specifiedMemberPropertyModel);

if (Configuration.GenerateNullables)
{
// public X? Name
Expand Down Expand Up @@ -789,6 +796,8 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
new DocumentationModel { Language = "de", Text = string.Format("Ruft einen Wert ab, der angibt, ob die {0}-Collection leer ist.", Name) } };
specifiedProperty.Comments.AddRange(DocumentationModel.GetComments(specifiedDocs).ToArray());

Configuration.MemberVisitor(specifiedProperty, this);

typeDeclaration.Members.Add(specifiedProperty);
}

Expand Down Expand Up @@ -837,6 +846,8 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
{
member.CustomAttributes.Add(notMappedAttribute);
}

Configuration.MemberVisitor(member, this);
}

private IEnumerable<CodeAttributeDeclaration> GetAttributes(bool isArray)
Expand Down

0 comments on commit 39dec11

Please sign in to comment.