private FieldReference ImportField(FieldInfo field, ImportGenericContext context) { TypeReference typeReference = this.ImportType(field.DeclaringType, context); if (ReflectionImporter.IsGenericInstance(field.DeclaringType)) { field = ReflectionImporter.ResolveFieldDefinition(field); } context.Push(typeReference); FieldReference result; try { result = new FieldReference { Name = field.Name, DeclaringType = typeReference, FieldType = this.ImportType(field.FieldType, context) }; } finally { context.Pop(); } return(result); }
private MethodReference ImportMethod(MethodBase method, ImportGenericContext context, ReflectionImporter.ImportGenericKind import_kind) { if (ReflectionImporter.IsMethodSpecification(method) || ReflectionImporter.ImportOpenGenericMethod(method, import_kind)) { return(this.ImportMethodSpecification(method, context)); } TypeReference declaringType = this.ImportType(method.DeclaringType, context); if (ReflectionImporter.IsGenericInstance(method.DeclaringType)) { method = method.Module.ResolveMethod(method.MetadataToken); } MethodReference methodReference = new MethodReference { Name = method.Name, HasThis = ReflectionImporter.HasCallingConvention(method, CallingConventions.HasThis), ExplicitThis = ReflectionImporter.HasCallingConvention(method, CallingConventions.ExplicitThis), DeclaringType = this.ImportType(method.DeclaringType, context, ReflectionImporter.ImportGenericKind.Definition) }; if (ReflectionImporter.HasCallingConvention(method, CallingConventions.VarArgs)) { MethodReference expr_9C = methodReference; expr_9C.CallingConvention &= MethodCallingConvention.VarArg; } if (method.IsGenericMethod) { ReflectionImporter.ImportGenericParameters(methodReference, method.GetGenericArguments()); } context.Push(methodReference); MethodReference result; try { MethodInfo methodInfo = method as MethodInfo; methodReference.ReturnType = ((methodInfo != null) ? this.ImportType(methodInfo.ReturnType, context) : this.ImportType(typeof(void), default(ImportGenericContext))); ParameterInfo[] parameters = method.GetParameters(); Collection <ParameterDefinition> parameters2 = methodReference.Parameters; for (int i = 0; i < parameters.Length; i++) { parameters2.Add(new ParameterDefinition(this.ImportType(parameters[i].ParameterType, context))); } methodReference.DeclaringType = declaringType; result = methodReference; } finally { context.Pop(); } return(result); }
private static bool IsTypeSpecification(Type type) { return(type.HasElementType || ReflectionImporter.IsGenericInstance(type) || type.IsGenericParameter); }