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 @@ -76,11 +76,15 @@ namespace ICSharpCode.ILSpy
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
.GetLoadedAssembly()
.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(settingsService.DecompilerSettings));
.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(decompilerSettings));
}
#region DPI independence

25
ILSpy/Languages/CSharpLanguage.cs

@ -578,10 +578,18 @@ namespace ICSharpCode.ILSpy @@ -578,10 +578,18 @@ namespace ICSharpCode.ILSpy
CSharpAmbience ambience = new CSharpAmbience();
// Do not forget to update CSharpAmbienceTests.ILSpyMainTreeViewTypeFlags, if this ever changes.
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;
}
if (decompilerSettings.IntroducePrivateProtectedAccessibility)
{
ambience.ConversionFlags |= ConversionFlags.UsePrivateProtectedAccessibility;
}
return ambience;
}
@ -781,7 +789,11 @@ namespace ICSharpCode.ILSpy @@ -781,7 +789,11 @@ namespace ICSharpCode.ILSpy
public override bool ShowMember(IEntity member)
{
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)
@ -790,7 +802,10 @@ namespace ICSharpCode.ILSpy @@ -790,7 +802,10 @@ namespace ICSharpCode.ILSpy
var output = new StringWriter();
var decoratedWriter = new TextWriterTokenWriter(output);
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)
{
flags &= ~ConversionFlags.UseNullableSpecifierForValueTypes;
@ -815,6 +830,10 @@ namespace ICSharpCode.ILSpy @@ -815,6 +830,10 @@ namespace ICSharpCode.ILSpy
{
flags |= ConversionFlags.SupportInitAccessors;
}
if (settings.IntroducePrivateProtectedAccessibility)
{
flags |= ConversionFlags.UsePrivateProtectedAccessibility;
}
if (entity is IMethod m && m.IsLocalFunction)
{
writer.WriteIdentifier(Identifier.Create("(local)"));

2
ILSpy/Languages/LanguageService.cs

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

2
ILSpy/Metadata/CorTables/EventTableTreeNode.cs

@ -94,7 +94,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -94,7 +94,7 @@ namespace ICSharpCode.ILSpy.Metadata
IEntity IMemberTreeNode.Member {
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 @@ -95,7 +95,7 @@ namespace ICSharpCode.ILSpy.Metadata
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)]
public int Signature => MetadataTokens.GetHeapOffset(fieldDef.Signature);

2
ILSpy/Metadata/CorTables/MethodTableTreeNode.cs

@ -131,7 +131,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -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)
{

2
ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs

@ -92,7 +92,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -92,7 +92,7 @@ namespace ICSharpCode.ILSpy.Metadata
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)]
public int Signature => MetadataTokens.GetHeapOffset(propertyDef.Signature);

2
ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs

@ -173,7 +173,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -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)
{

10
ILSpy/Search/SearchPane.xaml.cs

@ -266,6 +266,7 @@ namespace ICSharpCode.ILSpy.Search @@ -266,6 +266,7 @@ namespace ICSharpCode.ILSpy.Search
searchTerm,
(SearchMode)searchModeComboBox.SelectedIndex,
assemblyTreeModel.CurrentLanguage,
assemblyTreeModel.CurrentLanguageVersion,
treeNodeFactory,
settingsService);
currentSearch = startedSearch;
@ -295,6 +296,7 @@ namespace ICSharpCode.ILSpy.Search @@ -295,6 +296,7 @@ namespace ICSharpCode.ILSpy.Search
readonly SearchRequest searchRequest;
readonly SearchMode searchMode;
readonly Language language;
readonly LanguageVersion languageVersion;
readonly ApiVisibility apiVisibility;
readonly ITreeNodeFactory treeNodeFactory;
readonly SettingsService settingsService;
@ -302,7 +304,7 @@ namespace ICSharpCode.ILSpy.Search @@ -302,7 +304,7 @@ namespace ICSharpCode.ILSpy.Search
public IProducerConsumerCollection<SearchResult> ResultQueue { get; } = new ConcurrentQueue<SearchResult>();
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.language = language;
@ -471,7 +473,11 @@ namespace ICSharpCode.ILSpy.Search @@ -471,7 +473,11 @@ namespace ICSharpCode.ILSpy.Search
request.RegEx = regex;
request.SearchResultFactory = new SearchResultFactory(language);
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;
}

2
ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs

@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
var referencedModule = resolver.Resolve(r);
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)
this.Children.Add(new AssemblyReferenceTreeNode(module, childRef, parentAssembly));
}

2
ILSpy/TreeNodes/EventTreeNode.cs

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

2
ILSpy/TreeNodes/FieldTreeNode.cs

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

2
ILSpy/TreeNodes/MethodTreeNode.cs

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

2
ILSpy/TreeNodes/PropertyTreeNode.cs

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

2
ILSpy/TreeNodes/ReferenceFolderTreeNode.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
protected override void LoadChildren()
{
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))
this.Children.Add(new AssemblyReferenceTreeNode(metadataModule, r, parentAssembly));
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 @@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
return ((MetadataModule)ParentAssemblyNode.LoadedAssembly
.GetMetadataFileOrNull()
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)
?.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)
?.MainModule)?.GetDefinition((SRM.TypeDefinitionHandle)TypeDefinition.MetadataToken);
}

Loading…
Cancel
Save