public static Type ToFullyWrappedType( this Type type, TypeWrapperKind typeWrapperKind) { Type result; switch (typeWrapperKind) { case TypeWrapperKind.NotWrapped: result = type; break; case TypeWrapperKind.Nullable: result = type.IsValueType ? typeof(Nullable <>).MakeGenericType(type) : null; break; case TypeWrapperKind.ArrayOf: result = type.MakeArrayType(); break; case TypeWrapperKind.ArrayOfNullable: result = type.ToFullyWrappedType(TypeWrapperKind.Nullable)?.ToFullyWrappedType(TypeWrapperKind.ArrayOf); break; case TypeWrapperKind.IReadOnlyCollectionOf: result = typeof(IReadOnlyCollection <>).MakeGenericType(type); break; case TypeWrapperKind.IReadOnlyCollectionOfNullable: result = type.ToFullyWrappedType(TypeWrapperKind.Nullable)?.ToFullyWrappedType(TypeWrapperKind.IReadOnlyCollectionOf); break; case TypeWrapperKind.IReadOnlyListOf: result = typeof(IReadOnlyList <>).MakeGenericType(type); break; case TypeWrapperKind.IReadOnlyListOfNullable: result = type.ToFullyWrappedType(TypeWrapperKind.Nullable)?.ToFullyWrappedType(TypeWrapperKind.IReadOnlyListOf); break; case TypeWrapperKind.IReadOnlyDictionaryOf: result = typeof(IReadOnlyDictionary <,>).MakeGenericType(type, type); break; case TypeWrapperKind.IReadOnlyDictionaryOfNullable: result = type.ToFullyWrappedType(TypeWrapperKind.Nullable)?.ToFullyWrappedType(TypeWrapperKind.IReadOnlyDictionaryOf); break; default: throw new ArgumentOutOfRangeException(nameof(typeWrapperKind), typeWrapperKind, null); } return(result); }
public static string BuildScriptedModelName( this DeclaredKeyMethod declaredKeyMethod, SetterKind setterKind, HierarchyKind hierarchyKind, TypeWrapperKind typeWrapperKind, string childIdentifier) { var result = Invariant($"{Settings.ModelBaseName}{declaredKeyMethod.BuildNameToken()}{setterKind.BuildNameToken()}{typeWrapperKind.BuildNameToken()}{hierarchyKind.BuildNameToken()}{childIdentifier}"); return(result); }
public static string BuildNameToken( this TypeWrapperKind typeWrapperKind) { new { typeWrapperKind }.AsArg().Must().NotBeEqualTo(TypeWrapperKind.NotApplicable); switch (typeWrapperKind) { case TypeWrapperKind.AdditionalTypes: return("Misc"); case TypeWrapperKind.ArrayOf: return("Array"); case TypeWrapperKind.ArrayOfNullable: return("ArrayOfNullable"); case TypeWrapperKind.IReadOnlyCollectionOf: return("ReadOnlyCollection"); case TypeWrapperKind.IReadOnlyCollectionOfNullable: return("ReadOnlyCollectionOfNullable"); case TypeWrapperKind.IReadOnlyDictionaryOf: return("ReadOnlyDictionary"); case TypeWrapperKind.IReadOnlyDictionaryOfNullable: return("ReadOnlyDictionaryOfNullable"); case TypeWrapperKind.IReadOnlyListOf: return("ReadOnlyList"); case TypeWrapperKind.IReadOnlyListOfNullable: return("ReadOnlyListOfNullable"); case TypeWrapperKind.NotWrapped: return("None"); case TypeWrapperKind.Nullable: return("Nullable"); default: throw new NotSupportedException("this type wrapper kind is not supported: " + typeWrapperKind); } }
public static string GetScriptedModelsDirectoryPath( this ModelOrTest modelOrTest, DeclaredKeyMethod declaredKeyMethod, SetterKind setterKind, TypeWrapperKind typeWrapperKind) { string result; switch (modelOrTest) { case ModelOrTest.Model: result = Settings.ScriptedModelsPath + declaredKeyMethod.BuildNameToken() + "\\" + setterKind.BuildNameToken() + "\\" + typeWrapperKind.BuildNameToken() + "\\"; break; case ModelOrTest.Test: result = Settings.ScriptedModelsTestsPath + declaredKeyMethod.BuildNameToken() + "\\" + setterKind.BuildNameToken() + "\\" + typeWrapperKind.BuildNameToken() + "\\"; break; default: throw new NotSupportedException("This model or test is not supported: " + modelOrTest); } return(result); }