private static bool AreSame(GenericInstanceType a, GenericInstanceType b) { if (a.GenericArguments.Count != b.GenericArguments.Count) { return(false); } for (int i = 0; i < a.GenericArguments.Count; i++) { if (!MetadataResolver.AreSame(a.GenericArguments[i], b.GenericArguments[i])) { return(false); } } return(true); }
public virtual TypeDefinition Resolve(TypeReference type) { if (type == null) { throw new ArgumentNullException("type"); } type = type.GetElementType(); IMetadataScope scope = type.Scope; if (scope == null) { return(null); } switch (scope.MetadataScopeType) { case MetadataScopeType.AssemblyNameReference: { AssemblyDefinition assemblyDefinition = this.assembly_resolver.Resolve((AssemblyNameReference)scope); if (assemblyDefinition == null) { return(null); } return(MetadataResolver.GetType(assemblyDefinition.MainModule, type)); } case MetadataScopeType.ModuleReference: { Collection <ModuleDefinition> modules = type.Module.Assembly.Modules; ModuleReference moduleReference = (ModuleReference)scope; for (int i = 0; i < modules.Count; i++) { ModuleDefinition item = modules[i]; if (item.Name == moduleReference.Name) { return(MetadataResolver.GetType(item, type)); } } break; } case MetadataScopeType.ModuleDefinition: { return(MetadataResolver.GetType((ModuleDefinition)scope, type)); } } throw new NotSupportedException(); }
private MethodDefinition GetMethod(TypeDefinition type, MethodReference reference) { while (type != null) { MethodDefinition method = MetadataResolver.GetMethod(type.Methods, reference); if (method != null) { return(method); } if (type.BaseType == null) { return(null); } type = this.Resolve(type.BaseType); } return(null); }
private FieldDefinition GetField(TypeDefinition type, FieldReference reference) { while (type != null) { FieldDefinition field = MetadataResolver.GetField(type.Fields, reference); if (field != null) { return(field); } if (type.BaseType == null) { return(null); } type = this.Resolve(type.BaseType); } return(null); }
public static MethodDefinition GetMethod(Collection <MethodDefinition> methods, MethodReference reference) { for (int i = 0; i < methods.Count; i++) { MethodDefinition item = methods[i]; if (!(item.Name != reference.Name) && item.HasGenericParameters == reference.HasGenericParameters && (!item.HasGenericParameters || item.GenericParameters.Count == reference.GenericParameters.Count) && MetadataResolver.AreSame(item.ReturnType, reference.ReturnType) && item.HasParameters == reference.HasParameters) { if (!item.HasParameters && !reference.HasParameters) { return(item); } if (MetadataResolver.AreSame(item.Parameters, reference.Parameters)) { return(item); } } } return(null); }
static int GetHashCodeHelper(TypeSpecification type) { var hashCode = MetadataResolver.GetHashCode(type.ElementType); if (type.IsGenericInstance) { hashCode ^= GetHashCodeHelper2((GenericInstanceType)type); } else if (type.IsRequiredModifier || type.IsOptionalModifier) { hashCode ^= GetHashCodeHelper2((IModifierType)type); } else if (type.IsArray) { hashCode ^= GetHashCodeHelper2((ArrayType)type); } return(hashCode); }
private static bool AreSame(TypeSpecification a, TypeSpecification b) { if (!MetadataResolver.AreSame(a.ElementType, b.ElementType)) { return(false); } if (a.IsGenericInstance) { return(MetadataResolver.AreSame((GenericInstanceType)a, (GenericInstanceType)b)); } if (a.IsRequiredModifier || a.IsOptionalModifier) { return(MetadataResolver.AreSame((IModifierType)a, (IModifierType)b)); } if (!a.IsArray) { return(true); } return(MetadataResolver.AreSame((ArrayType)a, (ArrayType)b)); }
private static bool AreSame(Collection <ParameterDefinition> a, Collection <ParameterDefinition> b) { int count = a.Count; if (count != b.Count) { return(false); } if (count == 0) { return(true); } for (int i = 0; i < count; i++) { if (!MetadataResolver.AreSame(a[i].ParameterType, b[i].ParameterType)) { return(false); } } return(true); }
internal ModuleDefinition(string name, AssemblyDefinition asm, StructureReader reader, bool main) : base(name) { if (asm == null) { throw new ArgumentNullException("asm"); } if (name == null || name.Length == 0) { throw new ArgumentNullException("name"); } m_asm = asm; m_main = main; #if !CF_1_0 m_mvid = Guid.NewGuid(); #endif if (reader != null) { m_image = reader.Image; m_imgReader = reader.ImageReader; m_manifestOnly = reader.ManifestOnly; } else { m_image = Image.CreateImage(); } m_modRefs = new ModuleReferenceCollection(this); m_asmRefs = new AssemblyNameReferenceCollection(this); m_res = new ResourceCollection(this); m_types = new TypeDefinitionCollection(this); m_refs = new TypeReferenceCollection(this); m_members = new MemberReferenceCollection(this); m_controller = new ReflectionController(this); m_resolver = new MetadataResolver(asm); }
private static TypeDefinition GetType(ModuleDefinition module, TypeReference reference) { TypeDefinition typeDefinition = MetadataResolver.GetTypeDefinition(module, reference); if (typeDefinition != null) { return(typeDefinition); } if (!module.HasExportedTypes) { return(null); } Collection <ExportedType> exportedTypes = module.ExportedTypes; for (int i = 0; i < exportedTypes.Count; i++) { ExportedType item = exportedTypes[i]; if (!(item.Name != reference.Name) && !(item.Namespace != reference.Namespace)) { return(item.Resolve()); } } return(null); }
public static int GetHashCode(TypeReference type) { if (type == null) { return(0); } var hashCode = (type.DeclaringType == null ? 0 : type.DeclaringType.GetHashCode()) ^ (type.Name.GetHashCode() << 3) ^ (type.Namespace.GetHashCode() << 7) ^ (type.etype.GetHashCode() << 11); if (type.IsGenericParameter) { hashCode ^= MetadataResolver.GetHashCodeHelper((GenericParameter)type); } else if (type.IsTypeSpecification()) { hashCode ^= MetadataResolver.GetHashCodeHelper((TypeSpecification)type); } return(hashCode); }
internal ModuleDefinition (string name, AssemblyDefinition asm, StructureReader reader, bool main) : base (name) { if (asm == null) throw new ArgumentNullException ("asm"); if (name == null || name.Length == 0) throw new ArgumentNullException ("name"); m_asm = asm; m_main = main; #if !CF_1_0 m_mvid = Guid.NewGuid (); #endif if (reader != null) { m_image = reader.Image; m_imgReader = reader.ImageReader; m_manifestOnly = reader.ManifestOnly; } else m_image = Image.CreateImage (); m_modRefs = new ModuleReferenceCollection (this); m_asmRefs = new AssemblyNameReferenceCollection (this); m_res = new ResourceCollection (this); m_types = new TypeDefinitionCollection (this); m_refs = new TypeReferenceCollection (this); m_members = new MemberReferenceCollection (this); m_controller = new ReflectionController (this); m_resolver = new MetadataResolver (asm); }
internal TypeDefinition Resolve(TypeReference type) { return(MetadataResolver.Resolve(type)); }
internal MethodDefinition Resolve(MethodReference method) { return(MetadataResolver.Resolve(method)); }
internal FieldDefinition Resolve(FieldReference field) { return(MetadataResolver.Resolve(field)); }
static int GetHashCodeHelper2(IModifierType type) { return(MetadataResolver.GetHashCode(type.ModifierType)); }
private static bool AreSame(IModifierType a, IModifierType b) { return(MetadataResolver.AreSame(a.ModifierType, b.ModifierType)); }