Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
        }