protected virtual void ValidatePropertyModel(CompositeValidationResult result, CompositeModel model, PropertyModel property) { if (property.IsPartOfCompositeState()) { UseDefaultsAttribute udAttr; if (property.IsUseDefaults(out udAttr)) { if (udAttr.ActualType != null && !property.NativeInfo.PropertyType.IsAssignableFrom(udAttr.ActualType)) { result.StructureValidationErrors.Add(ValidationErrorFactory.NewStructureError("The type " + property.NativeInfo.PropertyType + " of " + property.NativeInfo + " is not assignable from type given to " + typeof(UseDefaultsAttribute) + " constructor ( " + udAttr.ActualType + ").", model, property)); } else if (property.NativeInfo.PropertyType.IsGenericParameter) { result.StructureValidationErrors.Add(ValidationErrorFactory.NewStructureError("The type " + property.NativeInfo.PropertyType + " of " + property.NativeInfo + " is marked with " + typeof(UseDefaultsAttribute) + " but it is generic type parameter.", model, property)); } } } }
protected virtual Boolean CanEmitDefaultValueForPropertyModel(PropertyModel propModel) { return(propModel.IsPartOfCompositeState() && (propModel.DefaultValueCreator != null || propModel.IsUseDefaults())); }