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

8
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -27,7 +27,7 @@ namespace ICSharpCode.Decompiler @@ -27,7 +27,7 @@ namespace ICSharpCode.Decompiler
/// <summary>
/// Settings for the decompiler.
/// </summary>
public class DecompilerSettings : INotifyPropertyChanged
public record class DecompilerSettings : INotifyPropertyChanged
{
/// <summary>
/// Equivalent to <c>new DecompilerSettings(LanguageVersion.Latest)</c>
@ -2238,9 +2238,11 @@ namespace ICSharpCode.Decompiler @@ -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)
settings.csharpFormattingOptions = csharpFormattingOptions.Clone();
settings.PropertyChanged = null;

2
ILSpy/DecompilationOptions.cs

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

2
ILSpy/ExtensionMethods.cs

@ -78,7 +78,7 @@ namespace ICSharpCode.ILSpy @@ -78,7 +78,7 @@ namespace ICSharpCode.ILSpy
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))
csharpLanguageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(csharpLanguageVersion);

6
ILSpy/Languages/CSharpLanguage.cs

@ -578,7 +578,7 @@ namespace ICSharpCode.ILSpy @@ -578,7 +578,7 @@ namespace ICSharpCode.ILSpy
CSharpAmbience ambience = new CSharpAmbience();
// Do not forget to update CSharpAmbienceTests.ILSpyMainTreeViewTypeFlags, if this ever changes.
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))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion);
@ -789,7 +789,7 @@ namespace ICSharpCode.ILSpy @@ -789,7 +789,7 @@ namespace ICSharpCode.ILSpy
public override bool ShowMember(IEntity member)
{
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))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion);
@ -802,7 +802,7 @@ namespace ICSharpCode.ILSpy @@ -802,7 +802,7 @@ 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.Clone();
var settings = SettingsService.DecompilerSettings.DeepClone();
if (!Enum.TryParse(AssemblyTreeModel.CurrentLanguageVersion?.Version, out Decompiler.CSharp.LanguageVersion languageVersion))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
settings.SetLanguageVersion(languageVersion);

11
ILSpy/Options/DecompilerSettings.cs

@ -27,7 +27,7 @@ using System.Xml.Linq; @@ -27,7 +27,7 @@ using System.Xml.Linq;
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()
.Where(p => p.GetCustomAttribute<BrowsableAttribute>()?.Browsable != false)
@ -57,14 +57,9 @@ namespace ICSharpCode.ILSpy.Options @@ -57,14 +57,9 @@ namespace ICSharpCode.ILSpy.Options
}
}
public new DecompilerSettings Clone()
public new DecompilerSettings DeepClone()
{
var section = SaveToXml();
var newSettings = new DecompilerSettings();
newSettings.LoadFromXml(section);
return newSettings;
return (DecompilerSettings)base.DeepClone();
}
}
}

4
ILSpy/Search/SearchPane.xaml.cs

@ -474,11 +474,11 @@ namespace ICSharpCode.ILSpy.Search @@ -474,11 +474,11 @@ namespace ICSharpCode.ILSpy.Search
request.RegEx = regex;
request.SearchResultFactory = new SearchResultFactory(language);
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))
languageVersion = Decompiler.CSharp.LanguageVersion.Latest;
decompilerSettings.SetLanguageVersion(languageVersion);
request.DecompilerSettings = settingsService.DecompilerSettings.Clone();
request.DecompilerSettings = settingsService.DecompilerSettings.DeepClone();
return request;
}

Loading…
Cancel
Save