public Either<MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module) { var reflectedType = astReference as AstReflectedType; if (reflectedType != null) return module.Import(reflectedType.ActualType); var reflectedMethod = astReference as AstReflectedMethod; if (reflectedMethod != null) return module.Import(reflectedMethod.Method); var reflectedConstructor = astReference as AstReflectedConstructor; if (reflectedConstructor != null) return module.Import(reflectedConstructor.Constructor); var reflectedProperty = astReference as AstReflectedProperty; if (reflectedProperty != null) { var getMethod = reflectedProperty.Property.GetGetMethod(); var setMethod = reflectedProperty.Property.GetSetMethod(); return new PropertyReferenceContainer( getMethod != null ? module.Import(getMethod) : null, setMethod != null ? module.Import(setMethod) : null ); } return null; }
public Either<MemberReference, PropertyReferenceContainer> Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive) { if (astReference != AstVoidType.Instance) return null; return module.Import(typeof(void)); }
Either<MemberReference, PropertyReferenceContainer> IReferenceProvider.Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive) { if (module != this.module) throw new InvalidOperationException("Expected module to be " + this.module + ", received " + module); return this.ConvertReference(astReference); }
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) { if (astReference != AstVoidType.Instance) { return(null); } return(module.Import(typeof(void))); }
protected override Either<MemberReference, PropertyReferenceContainer> ConvertReference(IAstReference reference, bool returnNullIfFailed = false) { var definition = reference as IAstDefinition ?? reference.Target as IAstDefinition; if (definition != null) { var result = this.references.GetValueOrDefault(definition); if (result != null) return result; } return base.ConvertReference(reference, returnNullIfFailed); }
protected virtual Either<MemberReference, PropertyReferenceContainer> ConvertReference(IAstReference reference, bool returnNullIfFailed = false) { var converted = this.providers.Select(r => r.Convert(reference, module, this)).FirstOrDefault(r => r != null); if (converted == null) { if (returnNullIfFailed) return null; throw new NotImplementedException("ReferenceContext: Cannot convert AST reference " + reference + "."); } return converted; }
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 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 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 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 reflectedType = astReference as AstReflectedType; if (reflectedType != null) { return(module.Import(reflectedType.ActualType)); } var reflectedMethod = astReference as AstReflectedMethod; if (reflectedMethod != null) { return(module.Import(reflectedMethod.Method)); } var reflectedConstructor = astReference as AstReflectedConstructor; if (reflectedConstructor != null) { return(module.Import(reflectedConstructor.Constructor)); } var reflectedProperty = astReference as AstReflectedProperty; if (reflectedProperty != null) { var getMethod = reflectedProperty.Property.GetGetMethod(); var setMethod = reflectedProperty.Property.GetSetMethod(); return(new PropertyReferenceContainer( getMethod != null ? module.Import(getMethod) : null, setMethod != null ? module.Import(setMethod) : null )); } return(null); }
public void Add(string name, IAstReference @object) { this.items.Add(name, @object); }
protected virtual Either <MemberReference, PropertyReferenceContainer> ConvertReference(IAstReference reference, bool returnNullIfFailed = false) { var converted = this.providers.Select(r => r.Convert(reference, module, this)).FirstOrDefault(r => r != null); if (converted == null) { if (returnNullIfFailed) { return(null); } throw new NotImplementedException("ReferenceContext: Cannot convert AST reference " + reference + "."); } return(converted); }
protected override Either <MemberReference, PropertyReferenceContainer> ConvertReference(IAstReference reference, bool returnNullIfFailed = false) { var definition = reference as IAstDefinition ?? reference.Target as IAstDefinition; if (definition != null) { var result = this.references.GetValueOrDefault(definition); if (result != null) { return(result); } } return(base.ConvertReference(reference, returnNullIfFailed)); }
Either <MemberReference, PropertyReferenceContainer> IReferenceProvider.Convert(IAstReference astReference, ModuleDefinition module, IReferenceProvider recursive) { if (module != this.module) { throw new InvalidOperationException("Expected module to be " + this.module + ", received " + module); } return(this.ConvertReference(astReference)); }