Skip to content

Commit

Permalink
Fix #41
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Ganss committed Oct 10, 2017
1 parent 43315e4 commit 20cabe2
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions XmlSchemaClassGenerator/TypeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,17 @@ private bool IsNullableValueType
}
}

private bool IsNillableValueType
{
get
{
return IsNillable
&& !IsNullableValueType
&& !(IsCollection || IsArray)
&& ((PropertyType is EnumModel) || (PropertyType is SimpleModel && ((SimpleModel)PropertyType).ValueType.IsValueType));
}
}

private CodeTypeReference TypeReference
{
get { return PropertyType.GetReferenceFor(OwningType.Namespace, IsCollection || IsArray); }
Expand Down Expand Up @@ -640,7 +651,16 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
if (DefaultValue == null)
{
var propertyName = isNullableValueType && Configuration.GenerateNullables ? Name + "Value" : Name;
member = new CodeMemberField(typeReference, propertyName);

if (IsNillableValueType)
{
var nullableType = new CodeTypeReference(typeof(Nullable<>), Configuration.CodeTypeReferenceOptions);
nullableType.TypeArguments.Add(typeReference);
member = new CodeMemberField(nullableType, propertyName);
}
else
member = new CodeMemberField(typeReference, propertyName);

var isPrivateSetter = IsCollection || isArray;
if (requiresBackingField)
{
Expand All @@ -659,7 +679,15 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
var defaultValueExpression = propertyType.GetDefaultValueFor(DefaultValue);
backingField.InitExpression = defaultValueExpression;

member = new CodeMemberField(typeReference, Name);
if (IsNillableValueType)
{
var nullableType = new CodeTypeReference(typeof(Nullable<>), Configuration.CodeTypeReferenceOptions);
nullableType.TypeArguments.Add(typeReference);
member = new CodeMemberField(nullableType, Name);
}
else
member = new CodeMemberField(typeReference, Name);

member.Name += GetAccessors(member.Name, backingField.Name, propertyType.GetPropertyValueTypeCode(), false, withDataBinding);

if (IsNullable)
Expand Down

0 comments on commit 20cabe2

Please sign in to comment.