Browse Source

Avoid loading assemblies when figuring out whether a property is in indexer.

pull/124/head
Daniel Grunwald 15 years ago
parent
commit
5a317786af
  1. 24
      ILSpy/LoadedAssembly.cs
  2. 4
      ILSpy/TreeNodes/PropertyTreeNode.cs

24
ILSpy/LoadedAssembly.cs

@ -72,6 +72,28 @@ namespace ICSharpCode.ILSpy @@ -72,6 +72,28 @@ namespace ICSharpCode.ILSpy
return AssemblyDefinition.ReadAssembly(fileName, p);
}
[ThreadStatic]
static int assemblyLoadDisableCount;
public static IDisposable DisableAssemblyLoad()
{
assemblyLoadDisableCount++;
return new DecrementAssemblyLoadDisableCount();
}
sealed class DecrementAssemblyLoadDisableCount : IDisposable
{
bool disposed;
public void Dispose()
{
if (!disposed) {
disposed = true;
assemblyLoadDisableCount--;
}
}
}
sealed class MyAssemblyResolver : IAssemblyResolver
{
readonly LoadedAssembly parent;
@ -112,6 +134,8 @@ namespace ICSharpCode.ILSpy @@ -112,6 +134,8 @@ namespace ICSharpCode.ILSpy
if (asm.AssemblyDefinition != null && fullName.Equals(asm.AssemblyDefinition.FullName, StringComparison.OrdinalIgnoreCase))
return asm;
}
if (assemblyLoadDisableCount > 0)
return null;
if (!App.Current.Dispatcher.CheckAccess()) {
// Call this method on the GUI thread.

4
ILSpy/TreeNodes/PropertyTreeNode.cs

@ -36,7 +36,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -36,7 +36,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
if (property == null)
throw new ArgumentNullException("property");
this.property = property;
this.isIndexer = property.IsIndexer();
using (LoadedAssembly.DisableAssemblyLoad()) {
this.isIndexer = property.IsIndexer();
}
if (property.GetMethod != null)
this.Children.Add(new MethodTreeNode(property.GetMethod));

Loading…
Cancel
Save