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 @@ -78,7 +78,7 @@ namespace ICSharpCode.ILSpy
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;
var newSettings = this.DecompilerSettings = settings.Clone();
newSettings.SetLanguageVersion(languageVersion);

6
ILSpy/Docking/DockWorkspace.cs

@ -175,8 +175,12 @@ namespace ICSharpCode.ILSpy.Docking @@ -175,8 +175,12 @@ namespace ICSharpCode.ILSpy.Docking
private void FilterSettings_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Language" || e.PropertyName == "LanguageVersion") {
if (e.PropertyName == "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;
}
}

1
ILSpy/FilterSettings.cs

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

19
ILSpy/Languages/Language.cs

@ -33,7 +33,7 @@ using SRM = System.Reflection.Metadata; @@ -33,7 +33,7 @@ using SRM = System.Reflection.Metadata;
namespace ICSharpCode.ILSpy
{
public struct LanguageVersion : IEquatable<LanguageVersion>
public class LanguageVersion
{
public string Version { get; }
public string DisplayName { get; }
@ -44,23 +44,10 @@ namespace ICSharpCode.ILSpy @@ -44,23 +44,10 @@ namespace ICSharpCode.ILSpy
this.DisplayName = name ?? version.ToString();
}
public bool Equals(LanguageVersion other)
{
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()
public override string ToString()
{
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>

20
ILSpy/ViewModels/TabPageModel.cs

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

Loading…
Cancel
Save