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; }
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; }
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); }
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); }
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; }