Ejemplo n.º 1
0
        /// <summary>
        /// Creates generic method info from current definition according to given translations and path.
        /// </summary>
        /// <param name="translations">Translations defining generic parameters substitutions.</param>
        /// <returns>Maked method info.</returns>
        public TypeMethodInfo MakeGenericMethod(Dictionary <string, string> translations)
        {
            var translatedName = TypeDescriptor.TranslatePath(MethodName, translations);

            var translatedParams = new List <ParameterTypeInfo>();

            foreach (var parameter in Parameters)
            {
                var translatedType  = parameter.Type.MakeGeneric(translations);
                var translatedParam = parameter.MakeGeneric(translatedType);
                translatedParams.Add(translatedParam);
            }

            var methodTypeArguments = new List <TypeDescriptor>(MethodTypeArguments.Length);

            foreach (var argument in MethodTypeArguments)
            {
                var translatedType = argument.MakeGeneric(translations);
                methodTypeArguments.Add(translatedType);
            }

            var generic = new TypeMethodInfo(
                DeclaringType.MakeGeneric(translations), translatedName,
                ReturnType.MakeGeneric(translations), translatedParams.ToArray(),
                IsStatic, methodTypeArguments.ToArray(), IsAbstract);

            return(generic);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Set importing constructor of component.
 /// </summary>
 /// <param name="info">The information.</param>
 public void SetImportingCtor(TypeMethodInfo info)
 {
     _importingCtor = info.MethodID;
     foreach (var parameter in info.Parameters)
     {
         var type = parameter.Type;
         addPreImport(type);
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MethodItem"/> class.
        /// </summary>
        /// <param name="generator">The instruction generator defining instruction of represented method.</param>
        /// <param name="info">Information about signature of represented method.</param>
        /// <exception cref="System.NotSupportedException">Cannot create method item for generic method without generic generator</exception>
        public MethodItem(GeneratorBase generator, TypeMethodInfo info)
        {
            Info = info;

            _genericGenerator = generator as GenericMethodGenerator;
            if (info.HasGenericParameters)
            {
                if (_genericGenerator == null)
                {
                    throw new NotSupportedException("Cannot create method item for generic method without generic generator");
                }
            }
            else
            {
                Generator = generator;
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Make generic specialization of method.
 /// </summary>
 /// <param name="methodPath">The method path with generic arguments.</param>
 /// <param name="methodDefinition">The method signature with generic parameters.</param>
 /// <returns>Generic specialization of method.</returns>
 public MethodItem Make(PathInfo methodPath, TypeMethodInfo methodDefinition)
 {
     return(new MethodItem(this, methodDefinition.MakeGenericMethod(methodPath)));
 }