Browse Source

Fix #1849: Language version lost when switch language

pull/1716/head
Siegfried Pammer 5 years ago
parent
commit
732b0397ca
  1. 2
      ILSpy/DecompilationOptions.cs
  2. 6
      ILSpy/Docking/DockWorkspace.cs
  3. 1
      ILSpy/FilterSettings.cs
  4. 19
      ILSpy/Languages/Language.cs
  5. 20
      ILSpy/ViewModels/TabPageModel.cs

2
ILSpy/DecompilationOptions.cs

@ -78,7 +78,7 @@ namespace ICSharpCode.ILSpy
public DecompilationOptions(LanguageVersion version, Decompiler.DecompilerSettings settings, Options.DisplaySettings displaySettings) public DecompilationOptions(LanguageVersion version, Decompiler.DecompilerSettings settings, Options.DisplaySettings displaySettings)
{ {
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.Clone();
newSettings.SetLanguageVersion(languageVersion); newSettings.SetLanguageVersion(languageVersion);

6
ILSpy/Docking/DockWorkspace.cs

@ -175,8 +175,12 @@ namespace ICSharpCode.ILSpy.Docking
private void FilterSettings_PropertyChanged(object sender, PropertyChangedEventArgs e) private void FilterSettings_PropertyChanged(object sender, PropertyChangedEventArgs e)
{ {
if (e.PropertyName == "Language" || e.PropertyName == "LanguageVersion") { if (e.PropertyName == "Language") {
ActiveTabPage.Language = sessionSettings.FilterSettings.Language; ActiveTabPage.Language = sessionSettings.FilterSettings.Language;
if (sessionSettings.FilterSettings.Language.HasLanguageVersions) {
sessionSettings.FilterSettings.LanguageVersion = ActiveTabPage.LanguageVersion;
}
} else if (e.PropertyName == "LanguageVersion") {
ActiveTabPage.LanguageVersion = sessionSettings.FilterSettings.LanguageVersion; ActiveTabPage.LanguageVersion = sessionSettings.FilterSettings.LanguageVersion;
} }
} }

1
ILSpy/FilterSettings.cs

@ -141,7 +141,6 @@ namespace ICSharpCode.ILSpy
set { set {
if (language != value) { if (language != value) {
language = value; language = value;
LanguageVersion = language.LanguageVersions.LastOrDefault();
OnPropertyChanged(); OnPropertyChanged();
} }
} }

19
ILSpy/Languages/Language.cs

@ -33,7 +33,7 @@ using SRM = System.Reflection.Metadata;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
public struct LanguageVersion : IEquatable<LanguageVersion> public class LanguageVersion
{ {
public string Version { get; } public string Version { get; }
public string DisplayName { get; } public string DisplayName { get; }
@ -44,23 +44,10 @@ namespace ICSharpCode.ILSpy
this.DisplayName = name ?? version.ToString(); this.DisplayName = name ?? version.ToString();
} }
public bool Equals(LanguageVersion other) public override string ToString()
{
return other.Version == this.Version && other.DisplayName == this.DisplayName;
}
public override bool Equals(object obj)
{
return obj is LanguageVersion version && Equals(version);
}
public override int GetHashCode()
{ {
return unchecked(982451629 * Version.GetHashCode() + 982451653 * DisplayName.GetHashCode()); return $"[LanguageVersion DisplayName={DisplayName}, Version={Version}]";
} }
public static bool operator ==(LanguageVersion lhs, LanguageVersion rhs) => lhs.Equals(rhs);
public static bool operator !=(LanguageVersion lhs, LanguageVersion rhs) => !lhs.Equals(rhs);
} }
/// <summary> /// <summary>

20
ILSpy/ViewModels/TabPageModel.cs

@ -17,21 +17,36 @@
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows;
using ICSharpCode.ILSpy.TextView; using ICSharpCode.ILSpy.TextView;
namespace ICSharpCode.ILSpy.ViewModels namespace ICSharpCode.ILSpy.ViewModels
{ {
public class TabPageModel : PaneModel public class TabPageModel : PaneModel
{ {
private readonly Dictionary<Language, LanguageVersion> languageVersionHistory = new Dictionary<Language, LanguageVersion>();
private Language language; private Language language;
public Language Language { public Language Language {
get => language; get => language;
set { set {
if (language != value) { if (language != value) {
if (language != null && language.HasLanguageVersions) {
languageVersionHistory[language] = languageVersion;
}
language = value; language = value;
RaisePropertyChanged(nameof(Language)); RaisePropertyChanged(nameof(Language));
if (language.HasLanguageVersions) {
if (languageVersionHistory.TryGetValue(value, out var version)) {
LanguageVersion = version;
} else {
LanguageVersion = Language.LanguageVersions.Last();
}
} else {
LanguageVersion = default;
}
} }
} }
} }
@ -42,6 +57,9 @@ namespace ICSharpCode.ILSpy.ViewModels
set { set {
if (languageVersion != value) { if (languageVersion != value) {
languageVersion = value; languageVersion = value;
if (language.HasLanguageVersions) {
languageVersionHistory[language] = languageVersion;
}
RaisePropertyChanged(nameof(LanguageVersion)); RaisePropertyChanged(nameof(LanguageVersion));
} }
} }

Loading…
Cancel
Save