Added Module.__GetReferencedAssemblies() API.

This commit is contained in:
jfrijters 2010-12-08 06:33:03 +00:00
Родитель 7f82abb787
Коммит 83f9eaa729
7 изменённых файлов: 50 добавлений и 3 удалений

Просмотреть файл

@ -701,6 +701,11 @@ namespace IKVM.Reflection.Emit
get { return "RefEmit_InMemoryManifestModule"; }
}
public override AssemblyName[] __GetReferencedAssemblies()
{
throw new InvalidOperationException();
}
internal override Type GetModuleType()
{
throw new InvalidOperationException();

Просмотреть файл

@ -57,6 +57,7 @@ namespace IKVM.Reflection.Emit
private readonly Dictionary<MemberInfo, int> importedMembers = new Dictionary<MemberInfo, int>();
private readonly Dictionary<MemberRefKey, int> importedMemberRefs = new Dictionary<MemberRefKey, int>();
private readonly Dictionary<Assembly, int> referencedAssemblies = new Dictionary<Assembly, int>();
private List<AssemblyName> referencedAssemblyNames;
private int nextPseudoToken = -1;
private readonly List<int> resolvedTokens = new List<int>();
internal readonly TableHeap Tables = new TableHeap();
@ -1217,7 +1218,36 @@ namespace IKVM.Reflection.Emit
public void __AddAssemblyReference(AssemblyName assemblyName)
{
if (referencedAssemblyNames == null)
{
referencedAssemblyNames = new List<AssemblyName>();
}
FindOrAddAssemblyRef(assemblyName);
referencedAssemblyNames.Add((AssemblyName)assemblyName.Clone());
}
public override AssemblyName[] __GetReferencedAssemblies()
{
List<AssemblyName> list = new List<AssemblyName>();
if (referencedAssemblyNames != null)
{
foreach (AssemblyName name in referencedAssemblyNames)
{
if (!list.Contains(name))
{
list.Add(name);
}
}
}
foreach (Assembly asm in referencedAssemblies.Keys)
{
AssemblyName name = asm.GetName();
if (!list.Contains(name))
{
list.Add(name);
}
}
return list.ToArray();
}
}

Просмотреть файл

@ -66,7 +66,7 @@ namespace IKVM.Reflection
public AssemblyName[] GetReferencedAssemblies()
{
return module.GetReferencedAssemblies();
return module.__GetReferencedAssemblies();
}
public void Dispose()
@ -385,6 +385,8 @@ namespace IKVM.Reflection
return Empty<CustomAttributeData>.Array;
}
public abstract AssemblyName[] __GetReferencedAssemblies();
internal Type CanonicalizeType(Type type)
{
Type canon;

Просмотреть файл

@ -244,7 +244,7 @@ namespace IKVM.Reflection.Reader
public override AssemblyName[] GetReferencedAssemblies()
{
return manifestModule.GetReferencedAssemblies();
return manifestModule.__GetReferencedAssemblies();
}
internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)

Просмотреть файл

@ -191,6 +191,11 @@ namespace IKVM.Reflection.Reader
get { throw new InvalidOperationException(); }
}
public override AssemblyName[] __GetReferencedAssemblies()
{
throw new InvalidOperationException();
}
internal override Type GetModuleType()
{
throw new InvalidOperationException();

Просмотреть файл

@ -890,7 +890,7 @@ namespace IKVM.Reflection.Reader
throw new FileNotFoundException();
}
internal AssemblyName[] GetReferencedAssemblies()
public override AssemblyName[] __GetReferencedAssemblies()
{
List<AssemblyName> list = new List<AssemblyName>();
for (int i = 0; i < AssemblyRef.records.Length; i++)

Просмотреть файл

@ -105,6 +105,11 @@ namespace IKVM.Reflection.Reader
throw new NotSupportedException();
}
public override AssemblyName[] __GetReferencedAssemblies()
{
throw new NotSupportedException();
}
internal override Type GetTypeImpl(string typeName)
{
return null;