Skip to content

Commit 128f83d

Browse files
Fix: Pass current language version to all parts of the UI
1 parent 51522c4 commit 128f83d

16 files changed

+50
-19
lines changed

ILSpy/ExtensionMethods.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ public static U[] SelectArray<T, U>(this ICollection<T> collection, Func<T, U> f
7676
return result;
7777
}
7878

79-
public static ICompilation? GetTypeSystemWithCurrentOptionsOrNull(this MetadataFile file, SettingsService settingsService)
79+
public static ICompilation? GetTypeSystemWithCurrentOptionsOrNull(this MetadataFile file, SettingsService settingsService, LanguageVersion languageVersion)
8080
{
81+
var decompilerSettings = settingsService.DecompilerSettings.Clone();
82+
if (!Enum.TryParse(languageVersion.Version, out Decompiler.CSharp.LanguageVersion csharpLanguageVersion))
83+
csharpLanguageVersion = Decompiler.CSharp.LanguageVersion.Latest;
84+
decompilerSettings.SetLanguageVersion(csharpLanguageVersion);
8185
return file
8286
.GetLoadedAssembly()
83-
.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(settingsService.DecompilerSettings));
87+
.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(decompilerSettings));
8488
}
8589

8690
#region DPI independence

ILSpy/Languages/CSharpLanguage.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -578,10 +578,18 @@ CSharpAmbience CreateAmbience()
578578
CSharpAmbience ambience = new CSharpAmbience();
579579
// Do not forget to update CSharpAmbienceTests.ILSpyMainTreeViewTypeFlags, if this ever changes.
580580
ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList | ConversionFlags.PlaceReturnTypeAfterParameterList;
581-
if (SettingsService.DecompilerSettings.LiftNullables)
581+
var decompilerSettings = SettingsService.DecompilerSettings.Clone();
582+
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
583+
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
584+
decompilerSettings.SetLanguageVersion(languageVersion);
585+
if (decompilerSettings.LiftNullables)
582586
{
583587
ambience.ConversionFlags |= ConversionFlags.UseNullableSpecifierForValueTypes;
584588
}
589+
if (decompilerSettings.IntroducePrivateProtectedAccessibility)
590+
{
591+
ambience.ConversionFlags |= ConversionFlags.UsePrivateProtectedAccessibility;
592+
}
585593
return ambience;
586594
}
587595

@@ -781,7 +789,11 @@ public override string GetEntityName(MetadataFile module, EntityHandle handle, b
781789
public override bool ShowMember(IEntity member)
782790
{
783791
MetadataFile assembly = member.ParentModule.MetadataFile;
784-
return showAllMembers || !CSharpDecompiler.MemberIsHidden(assembly, member.MetadataToken, SettingsService.DecompilerSettings);
792+
var decompilerSettings = SettingsService.DecompilerSettings.Clone();
793+
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
794+
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
795+
decompilerSettings.SetLanguageVersion(languageVersion);
796+
return showAllMembers || !CSharpDecompiler.MemberIsHidden(assembly, member.MetadataToken, decompilerSettings);
785797
}
786798

787799
public override RichText GetRichTextTooltip(IEntity entity)
@@ -790,7 +802,10 @@ public override RichText GetRichTextTooltip(IEntity entity)
790802
var output = new StringWriter();
791803
var decoratedWriter = new TextWriterTokenWriter(output);
792804
var writer = new CSharpHighlightingTokenWriter(TokenWriter.InsertRequiredSpaces(decoratedWriter), locatable: decoratedWriter);
793-
var settings = SettingsService.DecompilerSettings;
805+
var settings = SettingsService.DecompilerSettings.Clone();
806+
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
807+
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
808+
settings.SetLanguageVersion(languageVersion);
794809
if (!settings.LiftNullables)
795810
{
796811
flags &= ~ConversionFlags.UseNullableSpecifierForValueTypes;
@@ -815,6 +830,10 @@ public override RichText GetRichTextTooltip(IEntity entity)
815830
{
816831
flags |= ConversionFlags.SupportInitAccessors;
817832
}
833+
if (settings.IntroducePrivateProtectedAccessibility)
834+
{
835+
flags |= ConversionFlags.UsePrivateProtectedAccessibility;
836+
}
818837
if (entity is IMethod m && m.IsLocalFunction)
819838
{
820839
writer.WriteIdentifier(Identifier.Create("(local)"));

ILSpy/Languages/LanguageService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ namespace ICSharpCode.ILSpy
3535
[Shared]
3636
public class LanguageService : ObservableObjectBase
3737
{
38+
private readonly SettingsService settingsService;
3839
private readonly LanguageSettings languageSettings;
3940

4041
public LanguageService(IEnumerable<Language> languages, SettingsService settingsService, DockWorkspace dockWorkspace)
4142
{
43+
this.settingsService = settingsService;
4244
languageSettings = settingsService.SessionSettings.LanguageSettings;
4345

4446
var sortedLanguages = languages.ToList();

ILSpy/Metadata/CorTables/EventTableTreeNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ struct EventDefEntry : IMemberTreeNode
9494

9595
IEntity IMemberTreeNode.Member {
9696
get {
97-
return ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle);
97+
return ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
9898
}
9999
}
100100

ILSpy/Metadata/CorTables/FieldTableTreeNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ struct FieldDefEntry : IMemberTreeNode
9595

9696
public string NameTooltip => $"{MetadataTokens.GetHeapOffset(fieldDef.Name):X} \"{Name}\"";
9797

98-
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle);
98+
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
9999

100100
[ColumnInfo("X8", Kind = ColumnKind.HeapOffset)]
101101
public int Signature => MetadataTokens.GetHeapOffset(fieldDef.Signature);

ILSpy/Metadata/CorTables/MethodTableTreeNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public string ParamListTooltip {
131131
}
132132
}
133133

134-
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle);
134+
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
135135

136136
public MethodDefEntry(MetadataFile metadataFile, MethodDefinitionHandle handle)
137137
{

ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ struct PropertyDefEntry : IMemberTreeNode
9292

9393
public string NameTooltip => $"{MetadataTokens.GetHeapOffset(propertyDef.Name):X} \"{Name}\"";
9494

95-
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle);
95+
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
9696

9797
[ColumnInfo("X8", Kind = ColumnKind.HeapOffset)]
9898
public int Signature => MetadataTokens.GetHeapOffset(propertyDef.Signature);

ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public string MethodListTooltip {
173173
}
174174
}
175175

176-
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule)?.GetDefinition(handle);
176+
IEntity IMemberTreeNode.Member => ((MetadataModule)metadataFile.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule)?.GetDefinition(handle);
177177

178178
public TypeDefEntry(MetadataFile metadataFile, TypeDefinitionHandle handle)
179179
{

ILSpy/Search/SearchPane.xaml.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ async void StartSearch(string searchTerm)
266266
searchTerm,
267267
(SearchMode)searchModeComboBox.SelectedIndex,
268268
assemblyTreeModel.CurrentLanguage,
269+
assemblyTreeModel.CurrentLanguageVersion,
269270
treeNodeFactory,
270271
settingsService);
271272
currentSearch = startedSearch;
@@ -295,14 +296,15 @@ sealed class RunningSearch
295296
readonly SearchRequest searchRequest;
296297
readonly SearchMode searchMode;
297298
readonly Language language;
299+
readonly LanguageVersion languageVersion;
298300
readonly ApiVisibility apiVisibility;
299301
readonly ITreeNodeFactory treeNodeFactory;
300302
readonly SettingsService settingsService;
301303

302304
public IProducerConsumerCollection<SearchResult> ResultQueue { get; } = new ConcurrentQueue<SearchResult>();
303305

304306
public RunningSearch(IList<LoadedAssembly> assemblies, string searchTerm, SearchMode searchMode,
305-
Language language, ITreeNodeFactory treeNodeFactory, SettingsService settingsService)
307+
Language language, LanguageVersion languageVersion, ITreeNodeFactory treeNodeFactory, SettingsService settingsService)
306308
{
307309
this.assemblies = assemblies;
308310
this.language = language;
@@ -471,7 +473,11 @@ Regex CreateRegex(string s)
471473
request.RegEx = regex;
472474
request.SearchResultFactory = new SearchResultFactory(language);
473475
request.TreeNodeFactory = this.treeNodeFactory;
474-
request.DecompilerSettings = settingsService.DecompilerSettings;
476+
var decompilerSettings = settingsService.DecompilerSettings.Clone();
477+
if (!Enum.TryParse(this.languageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
478+
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
479+
decompilerSettings.SetLanguageVersion(languageVersion);
480+
request.DecompilerSettings = settingsService.DecompilerSettings.Clone();
475481

476482
return request;
477483
}

ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ protected override void LoadChildren()
8989
var referencedModule = resolver.Resolve(r);
9090
if (referencedModule != null)
9191
{
92-
var module = (MetadataModule)referencedModule.GetTypeSystemWithCurrentOptionsOrNull(SettingsService)?.MainModule;
92+
var module = (MetadataModule)referencedModule.GetTypeSystemWithCurrentOptionsOrNull(SettingsService, AssemblyTreeModel.CurrentLanguageVersion)?.MainModule;
9393
foreach (var childRef in referencedModule.AssemblyReferences)
9494
this.Children.Add(new AssemblyReferenceTreeNode(module, childRef, parentAssembly));
9595
}

0 commit comments

Comments
 (0)