public void NullabilityModeTest(string expectedFileName, NullabilityMode mode) { var generatedCode = GenerateCode(new TypeScriptGenerationOptions { NullabilityMode = mode }, CustomTypeGenerator.Null, typeof(NullabilityModeRootType)).Single(); var expectedCode = GetExpectedCode($"Options/{expectedFileName}"); generatedCode.Diff(expectedCode).ShouldBeEmpty(); }
public void CustomGeneratorWithMethodsTest(Type rootType, NullabilityMode nullabilityMode, string expectedFileName) { var options = TypeScriptGenerationOptions.Default; options.NullabilityMode = nullabilityMode; var(customGenerator, typesProvider) = GetCustomization <TTypesProvider>(typeof(TestCustomTypeGenerator), rootType); var generatedCode = GenerateCode(options, customGenerator, typesProvider).Single(); var expectedCode = GetExpectedCode($"CustomGenerator/{expectedFileName}"); generatedCode.Diff(expectedCode).ShouldBeEmpty(); }
public bool CanBeNull(NullabilityMode nullabilityMode) { if (nullabilityMode == NullabilityMode.None) { return(false); } var nullableByte = NullableInfo?[0] ?? NullableContext ?? 0; if (nullabilityMode == NullabilityMode.NullableReference || nullabilityMode.HasFlag(NullabilityMode.NullableReference) && nullableByte != 0) { return(nullableByte == 2); } return(nullabilityMode.HasFlag(NullabilityMode.Pessimistic) ? !HasNotNull : HasCanBeNull); }
public static (bool, Type) ProcessNullable(ICustomAttributeProvider attributeContainer, Type type, NullabilityMode nullabilityMode) { if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>)) { var underlyingType = type.GetGenericArguments()[0]; return(true, underlyingType); } if (attributeContainer == null || !type.IsClass && !type.IsInterface) { return(false, type); } return(CanBeNull(attributeContainer, nullabilityMode), type); }
public bool CanBeNull(NullabilityMode nullabilityMode) { return(!this.NeverNull() && NullabilityInfo.CanBeNull(nullabilityMode)); }
/// <summary> /// Marca una propiedad de forma explícita con el modo de nulabilidad a /// utilizar para generar el control de edición en la página de Crud. /// </summary> /// <typeparam name="TModel">Tipo de modelo descrito.</typeparam> /// <typeparam name="TProperty"> /// Información de tipo devuelto por la propiedad descrita. /// </typeparam> /// <typeparam name="TViewModel">Tipo de ViewModel editor.</typeparam> /// <param name="descriptor"> /// Instancia de descriptor de propiedad sobre la cual aplicar la /// configuración. /// </param> /// <param name="mode"> /// Modo de nulabilidad a utilizar para generar el control de edición /// en la página de Crud. /// </param> /// <returns> /// La misma instancia que <paramref name="descriptor"/>, permitiendo /// el uso de sintaxis Fluent. /// </returns> public static IPropertyDescriptor <TModel, TProperty, TViewModel> NullMode <TModel, TProperty, TViewModel>(this IPropertyDescriptor <TModel, TProperty, TViewModel> descriptor, NullabilityMode mode) where TModel : Model where TProperty : class where TViewModel : ViewModel <TModel> { return(descriptor.SetCustomConfigurationValue(GetGuid(), mode)); }