Browse Source

Convert DecompilerSettings to a record class

pull/3488/head
ds5678 3 weeks ago
parent
commit
3d60dc1c8b
  1. 2
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 8
      ICSharpCode.Decompiler/DecompilerSettings.cs
  3. 2
      ILSpy/DecompilationOptions.cs
  4. 2
      ILSpy/ExtensionMethods.cs
  5. 6
      ILSpy/Languages/CSharpLanguage.cs
  6. 11
      ILSpy/Options/DecompilerSettings.cs
  7. 4
      ILSpy/Search/SearchPane.xaml.cs

2
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -1742,7 +1742,7 @@ namespace ICSharpCode.Decompiler.CSharp
AddAnnotationsToDeclaration(method, entityDecl, function); AddAnnotationsToDeclaration(method, entityDecl, function);
var localSettings = settings.Clone(); var localSettings = settings.DeepClone();
if (IsWindowsFormsInitializeComponentMethod(method)) if (IsWindowsFormsInitializeComponentMethod(method))
{ {
localSettings.UseImplicitMethodGroupConversion = false; localSettings.UseImplicitMethodGroupConversion = false;

8
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -27,7 +27,7 @@ namespace ICSharpCode.Decompiler
/// <summary> /// <summary>
/// Settings for the decompiler. /// Settings for the decompiler.
/// </summary> /// </summary>
public class DecompilerSettings : INotifyPropertyChanged public record class DecompilerSettings : INotifyPropertyChanged
{ {
/// <summary> /// <summary>
/// Equivalent to <c>new DecompilerSettings(LanguageVersion.Latest)</c> /// Equivalent to <c>new DecompilerSettings(LanguageVersion.Latest)</c>
@ -2238,9 +2238,11 @@ namespace ICSharpCode.Decompiler
} }
} }
public DecompilerSettings Clone() protected virtual DecompilerSettings ShallowClone() => this with { };
public DecompilerSettings DeepClone()
{ {
DecompilerSettings settings = (DecompilerSettings)MemberwiseClone(); DecompilerSettings settings = ShallowClone();
if (csharpFormattingOptions != null) if (csharpFormattingOptions != null)
settings.csharpFormattingOptions = csharpFormattingOptions.Clone(); settings.csharpFormattingOptions = csharpFormattingOptions.Clone();
settings.PropertyChanged = null; settings.PropertyChanged = null;

2
ILSpy/DecompilationOptions.cs

@ -90,7 +90,7 @@ namespace ICSharpCode.ILSpy
if (!Enum.TryParse(version?.Version, out Decompiler.CSharp.LanguageVersion languageVersion)) if (!Enum.TryParse(version?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest; languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
var newSettings = this.DecompilerSettings = settings.Clone(); var newSettings = this.DecompilerSettings = settings.DeepClone();
newSettings.SetLanguageVersion(languageVersion); newSettings.SetLanguageVersion(languageVersion);
newSettings.ExpandMemberDefinitions = displaySettings.ExpandMemberDefinitions; newSettings.ExpandMemberDefinitions = displaySettings.ExpandMemberDefinitions;

2
ILSpy/ExtensionMethods.cs

@ -78,7 +78,7 @@ namespace ICSharpCode.ILSpy
public static ICompilation? GetTypeSystemWithCurrentOptionsOrNull(this MetadataFile file, SettingsService settingsService, LanguageVersion languageVersion) public static ICompilation? GetTypeSystemWithCurrentOptionsOrNull(this MetadataFile file, SettingsService settingsService, LanguageVersion languageVersion)
{ {
var decompilerSettings = settingsService.DecompilerSettings.Clone(); var decompilerSettings = settingsService.DecompilerSettings.DeepClone();
if (!Enum.TryParse(languageVersion?.Version, out Decompiler.CSharp.LanguageVersion csharpLanguageVersion)) if (!Enum.TryParse(languageVersion?.Version, out Decompiler.CSharp.LanguageVersion csharpLanguageVersion))
csharpLanguageVersion = Decompiler.CSharp.LanguageVersion.Latest; csharpLanguageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(csharpLanguageVersion); decompilerSettings.SetLanguageVersion(csharpLanguageVersion);

6
ILSpy/Languages/CSharpLanguage.cs

@ -578,7 +578,7 @@ 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;
var decompilerSettings = SettingsService.DecompilerSettings.Clone(); var decompilerSettings = SettingsService.DecompilerSettings.DeepClone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion)) if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest; languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion); decompilerSettings.SetLanguageVersion(languageVersion);
@ -789,7 +789,7 @@ 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;
var decompilerSettings = SettingsService.DecompilerSettings.Clone(); var decompilerSettings = SettingsService.DecompilerSettings.DeepClone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion)) if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest; languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion); decompilerSettings.SetLanguageVersion(languageVersion);
@ -802,7 +802,7 @@ 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.Clone(); var settings = SettingsService.DecompilerSettings.DeepClone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion)) if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest; languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
settings.SetLanguageVersion(languageVersion); settings.SetLanguageVersion(languageVersion);

11
ILSpy/Options/DecompilerSettings.cs

@ -27,7 +27,7 @@ using System.Xml.Linq;
namespace ICSharpCode.ILSpy.Options namespace ICSharpCode.ILSpy.Options
{ {
public class DecompilerSettings : Decompiler.DecompilerSettings, ISettingsSection public record class DecompilerSettings : Decompiler.DecompilerSettings, ISettingsSection
{ {
static readonly PropertyInfo[] properties = typeof(Decompiler.DecompilerSettings).GetProperties() static readonly PropertyInfo[] properties = typeof(Decompiler.DecompilerSettings).GetProperties()
.Where(p => p.GetCustomAttribute<BrowsableAttribute>()?.Browsable != false) .Where(p => p.GetCustomAttribute<BrowsableAttribute>()?.Browsable != false)
@ -57,14 +57,9 @@ namespace ICSharpCode.ILSpy.Options
} }
} }
public new DecompilerSettings Clone() public new DecompilerSettings DeepClone()
{ {
var section = SaveToXml(); return (DecompilerSettings)base.DeepClone();
var newSettings = new DecompilerSettings();
newSettings.LoadFromXml(section);
return newSettings;
} }
} }
} }

4
ILSpy/Search/SearchPane.xaml.cs

@ -474,11 +474,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;
var decompilerSettings = settingsService.DecompilerSettings.Clone(); var decompilerSettings = settingsService.DecompilerSettings.DeepClone();
if (!Enum.TryParse(this.languageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion)) if (!Enum.TryParse(this.languageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest; languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion); decompilerSettings.SetLanguageVersion(languageVersion);
request.DecompilerSettings = settingsService.DecompilerSettings.Clone(); request.DecompilerSettings = settingsService.DecompilerSettings.DeepClone();
return request; return request;
} }

Loading…
Cancel
Save