Mono.Cecil.MetadataResolver.GetType C# (CSharp) Method

GetType() static private method

static private GetType ( Mono.Cecil.ModuleDefinition module, TypeReference reference ) : Mono.Cecil.TypeDefinition
module Mono.Cecil.ModuleDefinition
reference TypeReference
return Mono.Cecil.TypeDefinition
		static TypeDefinition GetType (ModuleDefinition module, TypeReference reference)
		{
			var type = GetTypeDefinition (module, reference);
			if (type != null)
				return type;

			if (!module.HasExportedTypes)
				return null;

			var exported_types = module.ExportedTypes;

			for (int i = 0; i < exported_types.Count; i++) {
				var exported_type = exported_types [i];
				if (exported_type.Name != reference.Name)
					continue;

				if (exported_type.Namespace != reference.Namespace)
					continue;

				return exported_type.Resolve ();
			}

			return null;
		}

Usage Example

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