Browse Source

Fix: Pass current language version to all parts of the UI

pull/3443/head
Siegfried Pammer 4 months ago
parent
commit
128f83d74c
  1. 8
      ILSpy/ExtensionMethods.cs
  2. 25
      ILSpy/Languages/CSharpLanguage.cs
  3. 2
      ILSpy/Languages/LanguageService.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. 10
      ILSpy/Search/SearchPane.xaml.cs
  10. 2
      ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs
  11. 2
      ILSpy/TreeNodes/EventTreeNode.cs
  12. 2
      ILSpy/TreeNodes/FieldTreeNode.cs
  13. 2
      ILSpy/TreeNodes/MethodTreeNode.cs
  14. 2
      ILSpy/TreeNodes/PropertyTreeNode.cs
  15. 2
      ILSpy/TreeNodes/ReferenceFolderTreeNode.cs
  16. 2
      ILSpy/TreeNodes/TypeTreeNode.cs

8
ILSpy/ExtensionMethods.cs

@ -76,11 +76,15 @@ namespace ICSharpCode.ILSpy
return result; return result;
} }
public static ICompilation? GetTypeSystemWithCurrentOptionsOrNull(this MetadataFile file, SettingsService settingsService) public static ICompilation? GetTypeSystemWithCurrentOptionsOrNull(this MetadataFile file, SettingsService settingsService, LanguageVersion languageVersion)
{ {
var decompilerSettings = settingsService.DecompilerSettings.Clone();
if (!Enum.TryParse(languageVersion.Version, out Decompiler.CSharp.LanguageVersion csharpLanguageVersion))
csharpLanguageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(csharpLanguageVersion);
return file return file
.GetLoadedAssembly() .GetLoadedAssembly()
.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(settingsService.DecompilerSettings)); .GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(decompilerSettings));
} }
#region DPI independence #region DPI independence

25
ILSpy/Languages/CSharpLanguage.cs

@ -578,10 +578,18 @@ namespace ICSharpCode.ILSpy
CSharpAmbience ambience = new CSharpAmbience(); CSharpAmbience ambience = new CSharpAmbience();
// Do not forget to update CSharpAmbienceTests.ILSpyMainTreeViewTypeFlags, if this ever changes. // Do not forget to update CSharpAmbienceTests.ILSpyMainTreeViewTypeFlags, if this ever changes.
ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList | ConversionFlags.PlaceReturnTypeAfterParameterList; ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList | ConversionFlags.PlaceReturnTypeAfterParameterList;
if (SettingsService.DecompilerSettings.LiftNullables) var decompilerSettings = SettingsService.DecompilerSettings.Clone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion);
if (decompilerSettings.LiftNullables)
{ {
ambience.ConversionFlags |= ConversionFlags.UseNullableSpecifierForValueTypes; ambience.ConversionFlags |= ConversionFlags.UseNullableSpecifierForValueTypes;
} }
if (decompilerSettings.IntroducePrivateProtectedAccessibility)
{
ambience.ConversionFlags |= ConversionFlags.UsePrivateProtectedAccessibility;
}
return ambience; return ambience;
} }
@ -781,7 +789,11 @@ namespace ICSharpCode.ILSpy
public override bool ShowMember(IEntity member) public override bool ShowMember(IEntity member)
{ {
MetadataFile assembly = member.ParentModule.MetadataFile; MetadataFile assembly = member.ParentModule.MetadataFile;
return showAllMembers || !CSharpDecompiler.MemberIsHidden(assembly, member.MetadataToken, SettingsService.DecompilerSettings); var decompilerSettings = SettingsService.DecompilerSettings.Clone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion);
return showAllMembers || !CSharpDecompiler.MemberIsHidden(assembly, member.MetadataToken, decompilerSettings);
} }
public override RichText GetRichTextTooltip(IEntity entity) public override RichText GetRichTextTooltip(IEntity entity)
@ -790,7 +802,10 @@ namespace ICSharpCode.ILSpy
var output = new StringWriter(); var output = new StringWriter();
var decoratedWriter = new TextWriterTokenWriter(output); var decoratedWriter = new TextWriterTokenWriter(output);
var writer = new CSharpHighlightingTokenWriter(TokenWriter.InsertRequiredSpaces(decoratedWriter), locatable: decoratedWriter); var writer = new CSharpHighlightingTokenWriter(TokenWriter.InsertRequiredSpaces(decoratedWriter), locatable: decoratedWriter);
var settings = SettingsService.DecompilerSettings; var settings = SettingsService.DecompilerSettings.Clone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
settings.SetLanguageVersion(languageVersion);
if (!settings.LiftNullables) if (!settings.LiftNullables)
{ {
flags &= ~ConversionFlags.UseNullableSpecifierForValueTypes; flags &= ~ConversionFlags.UseNullableSpecifierForValueTypes;
@ -815,6 +830,10 @@ namespace ICSharpCode.ILSpy
{ {
flags |= ConversionFlags.SupportInitAccessors; flags |= ConversionFlags.SupportInitAccessors;
} }
if (settings.IntroducePrivateProtectedAccessibility)
{
flags |= ConversionFlags.UsePrivateProtectedAccessibility;
}
if (entity is IMethod m && m.IsLocalFunction) if (entity is IMethod m && m.IsLocalFunction)
{ {
writer.WriteIdentifier(Identifier.Create("(local)")); writer.WriteIdentifier(Identifier.Create("(local)"));

2
ILSpy/Languages/LanguageService.cs

@ -35,10 +35,12 @@ namespace ICSharpCode.ILSpy
[Shared] [Shared]
public class LanguageService : ObservableObjectBase public class LanguageService : ObservableObjectBase
{ {
private readonly SettingsService settingsService;
private readonly LanguageSettings languageSettings; private readonly LanguageSettings languageSettings;
public LanguageService(IEnumerable<Language> languages, SettingsService settingsService, DockWorkspace dockWorkspace) public LanguageService(IEnumerable<Language> languages, SettingsService settingsService, DockWorkspace dockWorkspace)
{ {
this.settingsService = settingsService;
languageSettings = settingsService.SessionSettings.LanguageSettings; languageSettings = settingsService.SessionSettings.LanguageSettings;
var sortedLanguages = languages.ToList(); var sortedLanguages = languages.ToList();

2
ILSpy/Metadata/CorTables/EventTableTreeNode.cs

@ -94,7 +94,7 @@ namespace ICSharpCode.ILSpy.Metadata
IEntity IMemberTreeNode.Member { IEntity IMemberTreeNode.Member {
get { get {
return ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle); return ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
} }
} }

2
ILSpy/Metadata/CorTables/FieldTableTreeNode.cs

@ -95,7 +95,7 @@ namespace ICSharpCode.ILSpy.Metadata
public string NameTooltip => $"{MetadataTokens.GetHeapOffset(fieldDef.Name):X} \"{Name}\""; public string NameTooltip => $"{MetadataTokens.GetHeapOffset(fieldDef.Name):X} \"{Name}\"";
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle); IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
[ColumnInfo("X8", Kind = ColumnKind.HeapOffset)] [ColumnInfo("X8", Kind = ColumnKind.HeapOffset)]
public int Signature => MetadataTokens.GetHeapOffset(fieldDef.Signature); public int Signature => MetadataTokens.GetHeapOffset(fieldDef.Signature);

2
ILSpy/Metadata/CorTables/MethodTableTreeNode.cs

@ -131,7 +131,7 @@ namespace ICSharpCode.ILSpy.Metadata
} }
} }
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle); IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
public MethodDefEntry(MetadataFile metadataFile, MethodDefinitionHandle handle) public MethodDefEntry(MetadataFile metadataFile, MethodDefinitionHandle handle)
{ {

2
ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs

@ -92,7 +92,7 @@ namespace ICSharpCode.ILSpy.Metadata
public string NameTooltip => $"{MetadataTokens.GetHeapOffset(propertyDef.Name):X} \"{Name}\""; public string NameTooltip => $"{MetadataTokens.GetHeapOffset(propertyDef.Name):X} \"{Name}\"";
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle); IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
[ColumnInfo("X8", Kind = ColumnKind.HeapOffset)] [ColumnInfo("X8", Kind = ColumnKind.HeapOffset)]
public int Signature => MetadataTokens.GetHeapOffset(propertyDef.Signature); public int Signature => MetadataTokens.GetHeapOffset(propertyDef.Signature);

2
ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs

@ -173,7 +173,7 @@ namespace ICSharpCode.ILSpy.Metadata
} }
} }
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle); IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
public TypeDefEntry(MetadataFile metadataFile, TypeDefinitionHandle handle) public TypeDefEntry(MetadataFile metadataFile, TypeDefinitionHandle handle)
{ {

10
ILSpy/Search/SearchPane.xaml.cs

@ -266,6 +266,7 @@ namespace ICSharpCode.ILSpy.Search
searchTerm, searchTerm,
(SearchMode)searchModeComboBox.SelectedIndex, (SearchMode)searchModeComboBox.SelectedIndex,
assemblyTreeModel.CurrentLanguage, assemblyTreeModel.CurrentLanguage,
assemblyTreeModel.CurrentLanguageVersion,
treeNodeFactory, treeNodeFactory,
settingsService); settingsService);
currentSearch = startedSearch; currentSearch = startedSearch;
@ -295,6 +296,7 @@ namespace ICSharpCode.ILSpy.Search
readonly SearchRequest searchRequest; readonly SearchRequest searchRequest;
readonly SearchMode searchMode; readonly SearchMode searchMode;
readonly Language language; readonly Language language;
readonly LanguageVersion languageVersion;
readonly ApiVisibility apiVisibility; readonly ApiVisibility apiVisibility;
readonly ITreeNodeFactory treeNodeFactory; readonly ITreeNodeFactory treeNodeFactory;
readonly SettingsService settingsService; readonly SettingsService settingsService;
@ -302,7 +304,7 @@ namespace ICSharpCode.ILSpy.Search
public IProducerConsumerCollection<SearchResult> ResultQueue { get; } = new ConcurrentQueue<SearchResult>(); public IProducerConsumerCollection<SearchResult> ResultQueue { get; } = new ConcurrentQueue<SearchResult>();
public RunningSearch(IList<LoadedAssembly> assemblies, string searchTerm, SearchMode searchMode, public RunningSearch(IList<LoadedAssembly> assemblies, string searchTerm, SearchMode searchMode,
Language language, ITreeNodeFactory treeNodeFactory, SettingsService settingsService) Language language, LanguageVersion languageVersion, ITreeNodeFactory treeNodeFactory, SettingsService settingsService)
{ {
this.assemblies = assemblies; this.assemblies = assemblies;
this.language = language; this.language = language;
@ -471,7 +473,11 @@ namespace ICSharpCode.ILSpy.Search
request.RegEx = regex; request.RegEx = regex;
request.SearchResultFactory = new SearchResultFactory(language); request.SearchResultFactory = new SearchResultFactory(language);
request.TreeNodeFactory = this.treeNodeFactory; request.TreeNodeFactory = this.treeNodeFactory;
request.DecompilerSettings = settingsService.DecompilerSettings; var decompilerSettings = settingsService.DecompilerSettings.Clone();
if (!Enum.TryParse(this.languageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion);
request.DecompilerSettings = settingsService.DecompilerSettings.Clone();
return request; return request;
} }

2
ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs

@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
var referencedModule = resolver.Resolve(r); var referencedModule = resolver.Resolve(r);
if (referencedModule != null) if (referencedModule != null)
{ {
var module = (MetadataModule)referencedModule.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule; var module = (MetadataModule)referencedModule.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule;
foreach (var childRef in referencedModule.AssemblyReferences) foreach (var childRef in referencedModule.AssemblyReferences)
this.Children.Add(new AssemblyReferenceTreeNode(module, childRef, parentAssembly)); this.Children.Add(new AssemblyReferenceTreeNode(module, childRef, parentAssembly));
} }

2
ILSpy/TreeNodes/EventTreeNode.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
private IEvent GetEventDefinition() private IEvent GetEventDefinition()
{ {
return ((MetadataModule)EventDefinition.ParentModule?.MetadataFile return ((MetadataModule)EventDefinition.ParentModule?.MetadataFile
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService) ?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)
?.MainModule)?.GetDefinition((EventDefinitionHandle)EventDefinition.MetadataToken) ?? EventDefinition; ?.MainModule)?.GetDefinition((EventDefinitionHandle)EventDefinition.MetadataToken) ?? EventDefinition;
} }

2
ILSpy/TreeNodes/FieldTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
private IField GetFieldDefinition() private IField GetFieldDefinition()
{ {
return ((MetadataModule)FieldDefinition.ParentModule?.MetadataFile return ((MetadataModule)FieldDefinition.ParentModule?.MetadataFile
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService) ?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)
?.MainModule)?.GetDefinition((FieldDefinitionHandle)FieldDefinition.MetadataToken) ?? FieldDefinition; ?.MainModule)?.GetDefinition((FieldDefinitionHandle)FieldDefinition.MetadataToken) ?? FieldDefinition;
} }

2
ILSpy/TreeNodes/MethodTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
private IMethod GetMethodDefinition() private IMethod GetMethodDefinition()
{ {
return ((MetadataModule)MethodDefinition.ParentModule?.MetadataFile return ((MetadataModule)MethodDefinition.ParentModule?.MetadataFile
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService) ?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)
?.MainModule)?.GetDefinition((MethodDefinitionHandle)MethodDefinition.MetadataToken) ?? MethodDefinition; ?.MainModule)?.GetDefinition((MethodDefinitionHandle)MethodDefinition.MetadataToken) ?? MethodDefinition;
} }

2
ILSpy/TreeNodes/PropertyTreeNode.cs

@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
private IProperty GetPropertyDefinition() private IProperty GetPropertyDefinition()
{ {
return ((MetadataModule)PropertyDefinition.ParentModule?.MetadataFile return ((MetadataModule)PropertyDefinition.ParentModule?.MetadataFile
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService) ?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)
?.MainModule)?.GetDefinition((PropertyDefinitionHandle)PropertyDefinition.MetadataToken) ?? PropertyDefinition; ?.MainModule)?.GetDefinition((PropertyDefinitionHandle)PropertyDefinition.MetadataToken) ?? PropertyDefinition;
} }

2
ILSpy/TreeNodes/ReferenceFolderTreeNode.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
protected override void LoadChildren() protected override void LoadChildren()
{ {
var metadata = module.Metadata; var metadata = module.Metadata;
var metadataModule = (MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule; var metadataModule = (MetadataModule)module.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule;
foreach (var r in module.AssemblyReferences.OrderBy(r => r.Name)) foreach (var r in module.AssemblyReferences.OrderBy(r => r.Name))
this.Children.Add(new AssemblyReferenceTreeNode(metadataModule, r, parentAssembly)); this.Children.Add(new AssemblyReferenceTreeNode(metadataModule, r, parentAssembly));
foreach (var r in metadata.GetModuleReferences().OrderBy(r => metadata.GetString(metadata.GetModuleReference(r).Name))) foreach (var r in metadata.GetModuleReferences().OrderBy(r => metadata.GetString(metadata.GetModuleReference(r).Name)))

2
ILSpy/TreeNodes/TypeTreeNode.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{ {
return ((MetadataModule)ParentAssemblyNode.LoadedAssembly return ((MetadataModule)ParentAssemblyNode.LoadedAssembly
.GetMetadataFileOrNull() .GetMetadataFileOrNull()
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService) ?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)
?.MainModule)?.GetDefinition((SRM.TypeDefinitionHandle)TypeDefinition.MetadataToken); ?.MainModule)?.GetDefinition((SRM.TypeDefinitionHandle)TypeDefinition.MetadataToken);
} }

Loading…
Cancel
Save