From 83f9eaa729aeeed8ddbe05addaa083de3a3bb641 Mon Sep 17 00:00:00 2001 From: jfrijters Date: Wed, 8 Dec 2010 06:33:03 +0000 Subject: [PATCH] Added Module.__GetReferencedAssemblies() API. --- reflect/Emit/AssemblyBuilder.cs | 5 +++++ reflect/Emit/ModuleBuilder.cs | 30 ++++++++++++++++++++++++++ reflect/Module.cs | 4 +++- reflect/Reader/AssemblyReader.cs | 2 +- reflect/Reader/GenericTypeParameter.cs | 5 +++++ reflect/Reader/ModuleReader.cs | 2 +- reflect/Reader/ResourceModule.cs | 5 +++++ 7 files changed, 50 insertions(+), 3 deletions(-) diff --git a/reflect/Emit/AssemblyBuilder.cs b/reflect/Emit/AssemblyBuilder.cs index 16576aab..0a26aa11 100644 --- a/reflect/Emit/AssemblyBuilder.cs +++ b/reflect/Emit/AssemblyBuilder.cs @@ -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(); diff --git a/reflect/Emit/ModuleBuilder.cs b/reflect/Emit/ModuleBuilder.cs index 9ad2fbf2..177f630e 100644 --- a/reflect/Emit/ModuleBuilder.cs +++ b/reflect/Emit/ModuleBuilder.cs @@ -57,6 +57,7 @@ namespace IKVM.Reflection.Emit private readonly Dictionary importedMembers = new Dictionary(); private readonly Dictionary importedMemberRefs = new Dictionary(); private readonly Dictionary referencedAssemblies = new Dictionary(); + private List referencedAssemblyNames; private int nextPseudoToken = -1; private readonly List resolvedTokens = new List(); 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(); + } FindOrAddAssemblyRef(assemblyName); + referencedAssemblyNames.Add((AssemblyName)assemblyName.Clone()); + } + + public override AssemblyName[] __GetReferencedAssemblies() + { + List list = new List(); + 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(); } } diff --git a/reflect/Module.cs b/reflect/Module.cs index 4e043b11..31ff0121 100644 --- a/reflect/Module.cs +++ b/reflect/Module.cs @@ -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.Array; } + public abstract AssemblyName[] __GetReferencedAssemblies(); + internal Type CanonicalizeType(Type type) { Type canon; diff --git a/reflect/Reader/AssemblyReader.cs b/reflect/Reader/AssemblyReader.cs index 02429a01..08d66ddf 100644 --- a/reflect/Reader/AssemblyReader.cs +++ b/reflect/Reader/AssemblyReader.cs @@ -244,7 +244,7 @@ namespace IKVM.Reflection.Reader public override AssemblyName[] GetReferencedAssemblies() { - return manifestModule.GetReferencedAssemblies(); + return manifestModule.__GetReferencedAssemblies(); } internal override IList GetCustomAttributesData(Type attributeType) diff --git a/reflect/Reader/GenericTypeParameter.cs b/reflect/Reader/GenericTypeParameter.cs index 802a5a7f..2f961f94 100644 --- a/reflect/Reader/GenericTypeParameter.cs +++ b/reflect/Reader/GenericTypeParameter.cs @@ -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(); diff --git a/reflect/Reader/ModuleReader.cs b/reflect/Reader/ModuleReader.cs index 64e5e1fd..3f04d715 100644 --- a/reflect/Reader/ModuleReader.cs +++ b/reflect/Reader/ModuleReader.cs @@ -890,7 +890,7 @@ namespace IKVM.Reflection.Reader throw new FileNotFoundException(); } - internal AssemblyName[] GetReferencedAssemblies() + public override AssemblyName[] __GetReferencedAssemblies() { List list = new List(); for (int i = 0; i < AssemblyRef.records.Length; i++) diff --git a/reflect/Reader/ResourceModule.cs b/reflect/Reader/ResourceModule.cs index 50e98d37..e80170d2 100644 --- a/reflect/Reader/ResourceModule.cs +++ b/reflect/Reader/ResourceModule.cs @@ -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;