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);
 }
Esempio n. 6
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 11
0
        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);
		}
Esempio n. 13
0
 internal TypeDefinition Resolve(TypeReference type)
 {
     return(MetadataResolver.Resolve(type));
 }
Esempio n. 14
0
 internal MethodDefinition Resolve(MethodReference method)
 {
     return(MetadataResolver.Resolve(method));
 }
Esempio n. 15
0
 internal FieldDefinition Resolve(FieldReference field)
 {
     return(MetadataResolver.Resolve(field));
 }
Esempio n. 16
0
 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));
 }