Browse Source

Fix #1504: Selected decompiler settings should affect tree view and tooltips

pull/1939/head
Siegfried Pammer 6 years ago
parent
commit
da33002c66
  1. 16
      ILSpy/LoadedAssembly.cs
  2. 5
      ILSpy/LoadedAssemblyExtensions.cs
  3. 6
      ILSpy/MainWindow.xaml.cs
  4. 2
      ILSpy/Metadata/CorTables/EventTableTreeNode.cs
  5. 2
      ILSpy/Metadata/CorTables/FieldTableTreeNode.cs
  6. 2
      ILSpy/Metadata/CorTables/MethodTableTreeNode.cs
  7. 2
      ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs
  8. 2
      ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs
  9. 2
      ILSpy/Search/LiteralSearchStrategy.cs
  10. 2
      ILSpy/Search/MemberSearchStrategy.cs
  11. 2
      ILSpy/Search/MetadataTokenSearchStrategy.cs
  12. 2
      ILSpy/Search/NamespaceSearchStrategy.cs
  13. 2
      ILSpy/TreeNodes/AssemblyTreeNode.cs
  14. 2
      ILSpy/TreeNodes/BaseTypesEntryNode.cs

16
ILSpy/LoadedAssembly.cs

@ -115,6 +115,22 @@ namespace ICSharpCode.ILSpy @@ -115,6 +115,22 @@ namespace ICSharpCode.ILSpy
MinimalCorlib.Instance);
}
ICompilation typeSystemWithOptions;
TypeSystemOptions currentTypeSystemOptions;
public ICompilation GetTypeSystemOrNull(TypeSystemOptions options)
{
if (typeSystemWithOptions != null && options == currentTypeSystemOptions)
return typeSystemWithOptions;
var module = GetPEFileOrNull();
if (module == null)
return null;
currentTypeSystemOptions = options;
return typeSystemWithOptions = new SimpleCompilation(
module.WithOptions(options | TypeSystemOptions.Uncached | TypeSystemOptions.KeepModifiers),
MinimalCorlib.Instance);
}
public AssemblyList AssemblyList => assemblyList;
public string FileName => fileName;

5
ILSpy/LoadedAssemblyExtensions.cs

@ -45,6 +45,11 @@ namespace ICSharpCode.ILSpy @@ -45,6 +45,11 @@ namespace ICSharpCode.ILSpy
return GetLoadedAssembly(file).GetTypeSystemOrNull();
}
public static ICompilation GetTypeSystemWithCurrentOptionsOrNull(this PEFile file)
{
return GetLoadedAssembly(file).GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(new DecompilationOptions().DecompilerSettings));
}
public static LoadedAssembly GetLoadedAssembly(this PEFile file)
{
if (file == null)

6
ILSpy/MainWindow.xaml.cs

@ -662,6 +662,7 @@ namespace ICSharpCode.ILSpy @@ -662,6 +662,7 @@ namespace ICSharpCode.ILSpy
void filterSettings_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
RefreshTreeView();
RefreshTreeViewFilter();
if (e.PropertyName == "Language" || e.PropertyName == "LanguageVersion") {
DecompileSelectedNodes(recordHistory: false);
@ -944,6 +945,11 @@ namespace ICSharpCode.ILSpy @@ -944,6 +945,11 @@ namespace ICSharpCode.ILSpy
}
void RefreshCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
RefreshTreeView();
}
void RefreshTreeView()
{
try {
refreshInProgress = true;

2
ILSpy/Metadata/CorTables/EventTableTreeNode.cs

@ -98,7 +98,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -98,7 +98,7 @@ namespace ICSharpCode.ILSpy.Metadata
public string Name => metadata.GetString(eventDef.Name);
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemOrNull()?.MainModule).GetDefinition(handle);
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull()?.MainModule).GetDefinition(handle);
[StringFormat("X8")]
public int Type => MetadataTokens.GetToken(eventDef.Type);

2
ILSpy/Metadata/CorTables/FieldTableTreeNode.cs

@ -104,7 +104,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -104,7 +104,7 @@ namespace ICSharpCode.ILSpy.Metadata
public string NameTooltip => $"{MetadataTokens.GetHeapOffset(fieldDef.Name):X} \"{Name}\"";
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemOrNull()?.MainModule).GetDefinition(handle);
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull()?.MainModule).GetDefinition(handle);
[StringFormat("X")]
public int Signature => MetadataTokens.GetHeapOffset(fieldDef.Signature);

2
ILSpy/Metadata/CorTables/MethodTableTreeNode.cs

@ -130,7 +130,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -130,7 +130,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
}
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemOrNull()?.MainModule).GetDefinition(handle);
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull()?.MainModule).GetDefinition(handle);
public MethodDefEntry(PEFile module, MethodDefinitionHandle handle)
{

2
ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs

@ -98,7 +98,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -98,7 +98,7 @@ namespace ICSharpCode.ILSpy.Metadata
public string NameTooltip => $"{MetadataTokens.GetHeapOffset(propertyDef.Name):X} \"{Name}\"";
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemOrNull()?.MainModule).GetDefinition(handle);
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull()?.MainModule).GetDefinition(handle);
[StringFormat("X")]
public int Signature => MetadataTokens.GetHeapOffset(propertyDef.Signature);

2
ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs

@ -165,7 +165,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -165,7 +165,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
}
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemOrNull()?.MainModule).GetDefinition(handle);
IEntity IMemberTreeNode.Member => ((MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull()?.MainModule).GetDefinition(handle);
public TypeDefEntry(PEFile module, TypeDefinitionHandle handle)
{

2
ILSpy/Search/LiteralSearchStrategy.cs

@ -56,7 +56,7 @@ namespace ICSharpCode.ILSpy.Search @@ -56,7 +56,7 @@ namespace ICSharpCode.ILSpy.Search
{
cancellationToken.ThrowIfCancellationRequested();
var metadata = module.Metadata;
var typeSystem = module.GetTypeSystemOrNull();
var typeSystem = module.GetTypeSystemWithCurrentOptionsOrNull();
if (typeSystem == null) return;
foreach (var handle in metadata.MethodDefinitions) {

2
ILSpy/Search/MemberSearchStrategy.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.ILSpy.Search @@ -25,7 +25,7 @@ namespace ICSharpCode.ILSpy.Search
{
cancellationToken.ThrowIfCancellationRequested();
var metadata = module.Metadata;
var typeSystem = module.GetTypeSystemOrNull();
var typeSystem = module.GetTypeSystemWithCurrentOptionsOrNull();
if (typeSystem == null) return;
if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Type) {

2
ILSpy/Search/MetadataTokenSearchStrategy.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.ILSpy.Search @@ -26,7 +26,7 @@ namespace ICSharpCode.ILSpy.Search
{
cancellationToken.ThrowIfCancellationRequested();
if (searchTermToken.IsNil) return;
var typeSystem = module.GetTypeSystemOrNull();
var typeSystem = module.GetTypeSystemWithCurrentOptionsOrNull();
if (typeSystem == null) return;
var metadataModule = (MetadataModule)typeSystem.MainModule;
int row = module.Metadata.GetRowNumber(searchTermToken);

2
ILSpy/Search/NamespaceSearchStrategy.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.ILSpy.Search @@ -29,7 +29,7 @@ namespace ICSharpCode.ILSpy.Search
public override void Search(PEFile module, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
var typeSystem = module.GetTypeSystemOrNull();
var typeSystem = module.GetTypeSystemWithCurrentOptionsOrNull();
if (typeSystem == null) return;
var root = ((MetadataModule)typeSystem.MainModule).RootNamespace;

2
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -139,7 +139,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -139,7 +139,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
// if we crashed on loading, then we don't have any children
return;
}
typeSystem = LoadedAssembly.GetTypeSystemOrNull();
typeSystem = LoadedAssembly.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(new DecompilationOptions().DecompilerSettings));
var assembly = (MetadataModule)typeSystem.MainModule;
var metadata = module.Metadata;
this.Children.Add(new Metadata.MetadataTreeNode(module, this));

2
ILSpy/TreeNodes/BaseTypesEntryNode.cs

@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
var t = typeSystem.MainModule.ResolveEntity(handle) as ITypeDefinition;
if (t != null) {
showExpander = t.DirectBaseTypes.Any();
var other = t.ParentModule.PEFile.GetTypeSystemOrNull();
var other = t.ParentModule.PEFile.GetTypeSystemWithCurrentOptionsOrNull();
Debug.Assert(other != null);
t = other.FindType(t.FullTypeName).GetDefinition();
} else {

Loading…
Cancel
Save