public Either<MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive)
        {
            var methodAst = astReference as AstGenericMethodWithTypeArguments;
            if (methodAst == null)
                return null;

            var method = recursive.Convert(methodAst.Actual, module, recursive).As<MethodReference>();
            var typeArguments = methodAst.GenericArgumentTypes.Select(a => recursive.Convert(a, module, recursive).As<TypeReference>());

            var result = new GenericInstanceMethod(method);
            typeArguments.ForEach(result.GenericArguments.Add);

            return result;
        }
示例#2
0
        public Either<MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive)
        {
            var generic = astReference as AstGenericTypeWithArguments;
            if (generic == null)
                return null;

            var primary = recursive.Convert(generic.PrimaryType, module, recursive).As<TypeReference>();
            var arguments = generic.TypeArguments.Select(a => recursive.Convert(a, module, recursive).As<TypeReference>());

            var result = new GenericInstanceType(primary);
            arguments.ForEach(result.GenericArguments.Add);

            return result;
        }
示例#3
0
        public Either <MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive)
        {
            var functionType = astReference as IAstFunctionTypeReference;

            if (functionType == null)
            {
                return(null);
            }

            var types            = new List <IAstTypeReference>(functionType.GetParameterTypes());
            var delegateTypeName = "Action";

            if (!(functionType.ReturnType is AstVoidType))
            {
                delegateTypeName = "Func";
                types.Add(functionType.ReturnType);
            }
            delegateTypeName += "`" + types.Count;

            var delegateOpenType = module.Import(Type.GetType("System." + delegateTypeName, true));
            var delegateType     = new GenericInstanceType(delegateOpenType);

            types.Select(t => recursive.Convert(t, module, recursive).As <TypeReference>())
            .ForEach(delegateType.GenericArguments.Add);

            return(delegateType);
        }
        public Either <MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive)
        {
            var methodAst = astReference as AstGenericMethodWithTypeArguments;

            if (methodAst == null)
            {
                return(null);
            }

            var method        = recursive.Convert(methodAst.Actual, module, recursive).As <MethodReference>();
            var typeArguments = methodAst.GenericArgumentTypes.Select(a => recursive.Convert(a, module, recursive).As <TypeReference>());

            var result = new GenericInstanceMethod(method);

            typeArguments.ForEach(result.GenericArguments.Add);

            return(result);
        }
示例#5
0
        public Either <MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive)
        {
            var generic = astReference as AstGenericTypeWithArguments;

            if (generic == null)
            {
                return(null);
            }

            var primary   = recursive.Convert(generic.PrimaryType, module, recursive).As <TypeReference>();
            var arguments = generic.TypeArguments.Select(a => recursive.Convert(a, module, recursive).As <TypeReference>());

            var result = new GenericInstanceType(primary);

            arguments.ForEach(result.GenericArguments.Add);

            return(result);
        }
示例#6
0
        public Either<MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive)
        {
            var functionType = astReference as IAstFunctionTypeReference;
            if (functionType == null)
                return null;

            var types = new List<IAstTypeReference>(functionType.GetParameterTypes());
            var delegateTypeName = "Action";
            if (!(functionType.ReturnType is AstVoidType)) {
                delegateTypeName = "Func";
                types.Add(functionType.ReturnType);
            }
            delegateTypeName += "`" + types.Count;

            var delegateOpenType = module.Import(Type.GetType("System." + delegateTypeName, true));
            var delegateType = new GenericInstanceType(delegateOpenType);
            types.Select(t => recursive.Convert(t, module, recursive).As<TypeReference>())
                 .ForEach(delegateType.GenericArguments.Add);

            return delegateType;
        }