示例#1
0
        public MethodName GetMethod(string name, TypeName returnType, IEnumerable <string> typeParameters, IEnumerable <TypeName> parameters)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.Length == 0)
            {
                throw Failure.EmptyString(nameof(name));
            }
            if (returnType == null)
            {
                throw new ArgumentNullException("returnType");
            }

            typeParameters = typeParameters ?? Array.Empty <string>();
            parameters     = parameters ?? Array.Empty <TypeName>();

            if (typeParameters.Any(t => t == null))
            {
                throw Failure.CollectionContainsNullElement("typeParameters");
            }
            if (parameters.Any(t => t == null))
            {
                throw Failure.CollectionContainsNullElement("parameters");
            }

            return(new DefaultMethodName(
                       this,
                       name,
                       DefaultMethodName.SetGenericParameters(typeParameters),
                       DefaultMethodName.SetParameters(parameters),
                       DefaultMethodName.SetReturnType(returnType)
                       ));
        }
示例#2
0
        public MethodName GetMethod(string name, params TypeName[] parameters)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.Length == 0)
            {
                throw Failure.EmptyString(nameof(name));
            }

            parameters = parameters ?? Array.Empty <TypeName>();
            if (parameters.Any(t => t == null))
            {
                throw Failure.CollectionContainsNullElement("parameters");
            }

            int mangle;
            var method = TypeName.StripMangle(name, out mangle);

            return(new DefaultMethodName(
                       this,
                       method,
                       DefaultMethodName.SetGenericMangle(mangle),
                       DefaultMethodName.SetParameters(parameters)
                       ));
        }
示例#3
0
 private void RequireTemplates(IEnumerable <HxlTemplate> templates)
 {
     if (templates == null)
     {
         throw new ArgumentNullException("templates");
     }
     if (!templates.Any())
     {
         throw Failure.EmptyCollection("templates");
     }
     if (templates.Any(t => t == null))
     {
         throw Failure.CollectionContainsNullElement("templates");
     }
 }
示例#4
0
 public static MetadataName Combine(params MetadataName[] names)
 {
     if (names == null)
     {
         throw new ArgumentNullException("names");
     }
     if (names.Length == 0)
     {
         throw Failure.EmptyCollection("names");
     }
     if (names.Any(t => t == null))
     {
         throw Failure.CollectionContainsNullElement("names");
     }
     return(names.Reverse().Aggregate((x, y) => y.AddRight(x)));
 }
示例#5
0
        public PropertyName GetProperty(string name, params TypeName[] parameters)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.Length == 0)
            {
                throw Failure.EmptyString(nameof(name));
            }

            parameters = parameters ?? Array.Empty <TypeName>();
            if (parameters.Any(t => t == null))
            {
                throw Failure.CollectionContainsNullElement("parameters");
            }

            return(new PropertyName(this, name, null, ParameterData.AllFromTypes(parameters)));
        }
示例#6
0
        public GenericInstanceTypeName MakeGenericType(params TypeName[] arguments)
        {
            if (arguments == null)
            {
                throw new ArgumentNullException("arguments");
            }
            if (arguments.Length == 0)
            {
                throw Failure.EmptyCollection("arguments");
            }
            if (arguments.Any(t => t == null))
            {
                throw Failure.CollectionContainsNullElement("arguments");
            }
            if (arguments.Length != this.GenericParameterCount)
            {
                throw DotNetFailure.GenericParametersLengthMismatch("arguments");
            }

            return(new GenericInstanceTypeName(this, arguments));
        }
示例#7
0
        public PropertyName GetProperty(string name,
                                        TypeName propertyType,
                                        IEnumerable <TypeName> parameters)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.Length == 0)
            {
                throw Failure.EmptyString(nameof(name));
            }

            parameters = parameters ?? Array.Empty <TypeName>();
            if (parameters.Any(t => t == null))
            {
                throw Failure.CollectionContainsNullElement(nameof(parameters));
            }

            // TODO Can't bind unboound method parameters here
            var allParams = ParameterData.AllFromTypes(BindParameterTypes(null, parameters.ToArray()));

            return(new PropertyName(this, name, SafeCloneBind(propertyType), allParams));
        }