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