-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCSharpYamlDiscriminatorTemplate.cs
43 lines (39 loc) · 1.58 KB
/
CSharpYamlDiscriminatorTemplate.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.CodeDom;
using System.CodeDom.Compiler;
namespace Bonsai.Sgen
{
internal class CSharpYamlDiscriminatorTemplate : CSharpCodeDomTemplate
{
public CSharpYamlDiscriminatorTemplate(
CodeDomProvider provider,
CodeGeneratorOptions options,
CSharpCodeDomGeneratorSettings settings)
: base(provider, options, settings)
{
}
public override string TypeName => "YamlDiscriminatorAttribute";
public override void BuildType(CodeTypeDeclaration type)
{
type.IsPartial = false;
type.Attributes |= MemberAttributes.Family;
type.BaseTypes.Add(typeof(Attribute));
type.CustomAttributes.Add(new CodeAttributeDeclaration(
new CodeTypeReference(typeof(AttributeUsageAttribute)),
new CodeAttributeArgument(new CodeBinaryOperatorExpression(
new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression(typeof(AttributeTargets)),
nameof(AttributeTargets.Class)),
CodeBinaryOperatorType.BitwiseOr,
new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression(typeof(AttributeTargets)),
nameof(AttributeTargets.Interface))))));
type.Members.Add(new CodeSnippetTypeMember(
@" public YamlDiscriminatorAttribute(string discriminator)
{
Discriminator = discriminator;
}
public string Discriminator { get; private set; }
"));
}
}
}