예제 #1
0
        internal ParameterName(ParameterInfo parameter, TypeNameFlag flags)
        {
            Parameter = parameter;
            TypeName  = TypeNameFactory.Create(parameter.ParameterType, flags);
            Name      = parameter.Name;

            if (parameter.IsOut)
            {
                Modifier = "out";
            }
            else if (parameter.ParameterType.IsByRef)
            {
                if (!flags.Has(TypeNameFlag.ExplicitRef))
                {
                    Modifier = "ref";
                }
            }
            else if (parameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0)
            {
                Modifier = "params";
            }
            else
            {
                Modifier = null;
            }
        }
예제 #2
0
 internal GenericParameterTypeName(Type type, TypeNameFlag flags) : base(type)
 {
     if (flags.Has(TypeNameFlag.OmitGenericParameter))
     {
         Name = "";
     }
     else
     {
         Name = type.Name;
     }
 }
예제 #3
0
 internal RefTypeName(Type type, TypeNameFlag flags) : base(type)
 {
     ComponentType = TypeNameFactory.Create(type.GetElementType(), flags);
     if (flags.Has(TypeNameFlag.ExplicitRef))
     {
         Sign = SignConstant.Ref;
     }
     else
     {
         Sign = null;
     }
 }
예제 #4
0
 internal SimpleTypeName(Type type, TypeNameFlag flags) : base(type)
 {
     if (flags.Has(TypeNameFlag.FullPrimitive))
     {
         Namespace = new Namespace(type.Namespace);
         Name      = type.Name;
     }
     else
     {
         Namespace = Namespace.Empty;
         Name      = SimpleNames[type];
     }
 }
예제 #5
0
        internal NullableTypeName(Type type, TypeNameFlag flags) : base(type)
        {
            var component     = type.GetGenericArguments()[0];
            var componentType = TypeNameFactory.Create(component, flags);

            if (flags.Has(TypeNameFlag.FullNullable))
            {
                Namespace = new Namespace(type.Namespace);
                BaseNames = BaseNameList.Empty;
                Name      = nameof(Sign);
                Generics  = new GenericList {
                    componentType
                };
                Sign = null;
            }
            else
            {
                Namespace = componentType.Namespace;
                BaseNames = componentType.BaseNames;
                Name      = componentType.Name;
                Generics  = GenericList.Empty;
                Sign      = SignConstant.Nullable;
            }
        }