Browse Source

Remove redundant language settings related code

pull/3257/head
tom-englert 9 months ago
parent
commit
25bbca76aa
  1. 8
      ICSharpCode.ILSpyX/Analyzers/Builtin/TypeExposedByAnalyzer.cs
  2. 24
      ILSpy/Analyzers/AnalyzerSearchTreeNode.cs
  3. 29
      ILSpy/Analyzers/AnalyzerTreeNode.cs
  4. 20
      ILSpy/Analyzers/AnalyzerTreeView.cs
  5. 1
      ILSpy/App.xaml.cs
  6. 3
      ILSpy/Commands/DecompileAllCommand.cs
  7. 4
      ILSpy/Commands/SaveCodeContextMenuEntry.cs
  8. 12
      ILSpy/Controls/TreeView/SharpTreeView.cs
  9. 2
      ILSpy/LanguageSettings.cs
  10. 24
      ILSpy/Languages/Languages.cs
  11. 7
      ILSpy/TextView/DecompilerTextView.cs
  12. 4
      ILSpy/TreeNodes/ILSpyTreeNode.cs
  13. 4
      ILSpy/Views/DebugSteps.xaml.cs

8
ICSharpCode.ILSpyX/Analyzers/Builtin/TypeExposedByAnalyzer.cs

@ -17,15 +17,13 @@ @@ -17,15 +17,13 @@
// DEALINGS IN THE SOFTWARE.
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Diagnostics;
using ICSharpCode.Decompiler.TypeSystem;
namespace ICSharpCode.ILSpyX.Analyzers.Builtin
{
using System.ComponentModel.Composition;
using ICSharpCode.Decompiler.TypeSystem;
/// <summary>
/// Finds all entities that expose a type.
/// </summary>
@ -146,4 +144,4 @@ namespace ICSharpCode.ILSpyX.Analyzers.Builtin @@ -146,4 +144,4 @@ namespace ICSharpCode.ILSpyX.Analyzers.Builtin
return visitor.Found;
}
}
}
}

24
ILSpy/Analyzers/AnalyzerSearchTreeNode.cs

@ -86,29 +86,17 @@ namespace ICSharpCode.ILSpy.Analyzers @@ -86,29 +86,17 @@ namespace ICSharpCode.ILSpy.Analyzers
switch (symbol)
{
case IModule module:
return new AnalyzedModuleTreeNode(module) {
Language = this.Language
};
return new AnalyzedModuleTreeNode(module) { };
case ITypeDefinition td:
return new AnalyzedTypeTreeNode(td) {
Language = this.Language
};
return new AnalyzedTypeTreeNode(td) { };
case IField fd:
return new AnalyzedFieldTreeNode(fd) {
Language = this.Language
};
return new AnalyzedFieldTreeNode(fd) { };
case IMethod md:
return new AnalyzedMethodTreeNode(md) {
Language = this.Language
};
return new AnalyzedMethodTreeNode(md) { };
case IProperty pd:
return new AnalyzedPropertyTreeNode(pd) {
Language = this.Language
};
return new AnalyzedPropertyTreeNode(pd) { };
case IEvent ed:
return new AnalyzedEventTreeNode(ed) {
Language = this.Language
};
return new AnalyzedEventTreeNode(ed) { };
default:
throw new ArgumentOutOfRangeException(nameof(symbol), $"Symbol {symbol.GetType().FullName} is not supported.");
}

29
ILSpy/Analyzers/AnalyzerTreeNode.cs

@ -17,9 +17,8 @@ @@ -17,9 +17,8 @@
// DEALINGS IN THE SOFTWARE.
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using ICSharpCode.ILSpy.Util;
using ICSharpCode.ILSpyX;
using ICSharpCode.ILSpyX.TreeView;
@ -27,23 +26,11 @@ namespace ICSharpCode.ILSpy.Analyzers @@ -27,23 +26,11 @@ namespace ICSharpCode.ILSpy.Analyzers
{
public abstract class AnalyzerTreeNode : SharpTreeNode
{
private Language language;
public Language Language {
get { return language; }
set {
if (language != value)
{
language = value;
foreach (var child in this.Children.OfType<AnalyzerTreeNode>())
child.Language = value;
}
}
}
public Language Language => SettingsService.Instance.SessionSettings.LanguageSettings.Language;
public override bool CanDelete()
{
return Parent != null && Parent.IsRoot;
return Parent is { IsRoot: true };
}
public override void DeleteCore()
@ -56,16 +43,6 @@ namespace ICSharpCode.ILSpy.Analyzers @@ -56,16 +43,6 @@ namespace ICSharpCode.ILSpy.Analyzers
DeleteCore();
}
internal protected override void OnChildrenChanged(NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (AnalyzerTreeNode a in e.NewItems.OfType<AnalyzerTreeNode>())
a.Language = this.Language;
}
base.OnChildrenChanged(e);
}
/// <summary>
/// Handles changes to the assembly list.
/// </summary>

20
ILSpy/Analyzers/AnalyzerTreeView.cs

@ -47,28 +47,12 @@ namespace ICSharpCode.ILSpy.Analyzers @@ -47,28 +47,12 @@ namespace ICSharpCode.ILSpy.Analyzers
public AnalyzerTreeView()
{
this.ShowRoot = false;
this.BorderThickness = new Thickness(0);
this.BorderThickness = new();
this.Root = new AnalyzerRootNode();
ContextMenuProvider.Add(this);
MessageBus<CurrentAssemblyListChangedEventArgs>.Subscribers += (sender, e) => CurrentAssemblyList_Changed(sender, e);
MessageBus<DockWorkspaceActiveTabPageChangedEventArgs>.Subscribers += DockWorkspace_ActiveTabPageChanged;
MessageBus<LanguageSettingsChangedEventArgs>.Subscribers += (sender, e) => LanguageSettings_PropertyChanged(sender, e);
}
private void DockWorkspace_ActiveTabPageChanged(object sender, EventArgs e)
{
this.Root ??= new AnalyzerRootNode { Language = MainWindow.Instance.CurrentLanguage };
}
private void LanguageSettings_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "Language":
case "LanguageVersion":
((AnalyzerRootNode)this.Root).Language = MainWindow.Instance.CurrentLanguage;
break;
}
}
void CurrentAssemblyList_Changed(object sender, NotifyCollectionChangedEventArgs e)
{

1
ILSpy/App.xaml.cs

@ -98,7 +98,6 @@ namespace ICSharpCode.ILSpy @@ -98,7 +98,6 @@ namespace ICSharpCode.ILSpy
// Add data templates registered via MEF.
Resources.MergedDictionaries.Add(DataTemplateManager.CreateDynamicDataTemplates(ExportProvider));
Languages.Initialize(ExportProvider);
EventManager.RegisterClassHandler(typeof(Window),
Hyperlink.RequestNavigateEvent,
new RequestNavigateEventHandler(Window_RequestNavigate));

3
ILSpy/Commands/DecompileAllCommand.cs

@ -28,6 +28,7 @@ using System.Threading.Tasks; @@ -28,6 +28,7 @@ using System.Threading.Tasks;
using ICSharpCode.Decompiler;
using ICSharpCode.ILSpy.Properties;
using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.Util;
using ICSharpCode.ILSpyX;
using TomsToolbox.Essentials;
@ -94,7 +95,7 @@ namespace ICSharpCode.ILSpy @@ -94,7 +95,7 @@ namespace ICSharpCode.ILSpy
public override void Execute(object parameter)
{
const int numRuns = 100;
var language = MainWindow.Instance.CurrentLanguage;
var language = SettingsService.Instance.SessionSettings.LanguageSettings.Language;
var nodes = MainWindow.Instance.SelectedNodes.ToArray();
var options = MainWindow.Instance.CreateDecompilationOptions();
Docking.DockWorkspace.Instance.RunWithCancellation(ct => Task<AvalonEditTextOutput>.Factory.StartNew(() => {

4
ILSpy/Commands/SaveCodeContextMenuEntry.cs

@ -32,6 +32,8 @@ using Microsoft.Win32; @@ -32,6 +32,8 @@ using Microsoft.Win32;
using ICSharpCode.ILSpyX.TreeView;
using System.ComponentModel.Composition;
using ICSharpCode.ILSpy.Util;
namespace ICSharpCode.ILSpy.TextView
{
[ExportContextMenuEntry(Header = nameof(Resources._SaveCode), Category = nameof(Resources.Save), Icon = "Images/Save")]
@ -60,7 +62,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -60,7 +62,7 @@ namespace ICSharpCode.ILSpy.TextView
public static void Execute(IReadOnlyList<SharpTreeNode> selectedNodes)
{
var currentLanguage = MainWindow.Instance.CurrentLanguage;
var currentLanguage = SettingsService.Instance.SessionSettings.LanguageSettings.Language;
var tabPage = Docking.DockWorkspace.Instance.ActiveTabPage;
tabPage.ShowTextView(textView => {
if (selectedNodes.Count == 1 && selectedNodes[0] is ILSpyTreeNode singleSelection)

12
ILSpy/Controls/TreeView/SharpTreeView.cs

@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
RegisterCommands();
}
public static ResourceKey DefaultItemContainerStyleKey { get; private set; }
public static ResourceKey DefaultItemContainerStyleKey { get; }
public SharpTreeView()
{
@ -62,7 +62,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -62,7 +62,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
public static readonly DependencyProperty RootProperty =
DependencyProperty.Register("Root", typeof(SharpTreeNode), typeof(SharpTreeView));
DependencyProperty.Register(nameof(Root), typeof(SharpTreeNode), typeof(SharpTreeView));
public SharpTreeNode Root {
get { return (SharpTreeNode)GetValue(RootProperty); }
@ -70,7 +70,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -70,7 +70,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
public static readonly DependencyProperty ShowRootProperty =
DependencyProperty.Register("ShowRoot", typeof(bool), typeof(SharpTreeView),
DependencyProperty.Register(nameof(ShowRoot), typeof(bool), typeof(SharpTreeView),
new FrameworkPropertyMetadata(true));
public bool ShowRoot {
@ -79,7 +79,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -79,7 +79,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
public static readonly DependencyProperty ShowRootExpanderProperty =
DependencyProperty.Register("ShowRootExpander", typeof(bool), typeof(SharpTreeView),
DependencyProperty.Register(nameof(ShowRootExpander), typeof(bool), typeof(SharpTreeView),
new FrameworkPropertyMetadata(false));
public bool ShowRootExpander {
@ -88,7 +88,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -88,7 +88,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
public static readonly DependencyProperty AllowDropOrderProperty =
DependencyProperty.Register("AllowDropOrder", typeof(bool), typeof(SharpTreeView));
DependencyProperty.Register(nameof(AllowDropOrder), typeof(bool), typeof(SharpTreeView));
public bool AllowDropOrder {
get { return (bool)GetValue(AllowDropOrderProperty); }
@ -96,7 +96,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -96,7 +96,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
public static readonly DependencyProperty ShowLinesProperty =
DependencyProperty.Register("ShowLines", typeof(bool), typeof(SharpTreeView),
DependencyProperty.Register(nameof(ShowLines), typeof(bool), typeof(SharpTreeView),
new FrameworkPropertyMetadata(true));
public bool ShowLines {

2
ILSpy/LanguageSettings.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy
public LanguageSettings(XElement element)
{
this.ShowApiLevel = (ApiVisibility?)(int?)element.Element("ShowAPILevel") ?? ApiVisibility.PublicAndInternal;
this.Language = Languages.GetLanguage((string)element.Element("Language"));
this.Language = Languages.GetLanguage((string)element.Element("Language")) ?? Languages.AllLanguages.First();
this.LanguageVersion = Language.LanguageVersions.FirstOrDefault(v => v.Version == (string)element.Element("LanguageVersion"))
?? Language.LanguageVersions.LastOrDefault();
}

24
ILSpy/Languages/Languages.cs

@ -16,41 +16,31 @@ @@ -16,41 +16,31 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System.Collections.Generic;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using Microsoft.VisualStudio.Composition;
using TomsToolbox.Composition;
namespace ICSharpCode.ILSpy
{
public static class Languages
{
// Start with a dummy list with an IL entry so that crashes
// in Initialize() (e.g. due to invalid plugins) don't lead to
// confusing follow-up errors in GetLanguage().
private static ReadOnlyCollection<Language> allLanguages = new ReadOnlyCollection<Language>(
new Language[] { new ILLanguage() });
/// <summary>
/// A list of all languages.
/// </summary>
public static ReadOnlyCollection<Language> AllLanguages {
get { return allLanguages; }
}
public static ReadOnlyCollection<Language> AllLanguages { get; } = Initialize(App.ExportProvider);
internal static void Initialize(IExportProvider ep)
static ReadOnlyCollection<Language> Initialize(IExportProvider ep)
{
List<Language> languages = new List<Language>();
languages.AddRange(ep.GetExportedValues<Language>());
languages.Sort((a, b) => a.Name.CompareTo(b.Name));
var languages = ep.GetExportedValues<Language>().ToList();
languages.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal));
#if DEBUG
languages.AddRange(ILAstLanguage.GetDebugLanguages());
languages.AddRange(CSharpLanguage.GetDebugLanguages());
#endif
allLanguages = languages.AsReadOnly();
return languages.AsReadOnly();
}
/// <summary>

7
ILSpy/TextView/DecompilerTextView.cs

@ -56,6 +56,7 @@ using ICSharpCode.ILSpy.AvalonEdit; @@ -56,6 +56,7 @@ using ICSharpCode.ILSpy.AvalonEdit;
using ICSharpCode.ILSpy.Options;
using ICSharpCode.ILSpy.Themes;
using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpy.Util;
using ICSharpCode.ILSpy.ViewModels;
using ICSharpCode.ILSpyX;
@ -392,7 +393,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -392,7 +393,7 @@ namespace ICSharpCode.ILSpy.TextView
if (segment.Reference is ICSharpCode.Decompiler.Disassembler.OpCodeInfo code)
{
XmlDocumentationProvider docProvider = XmlDocLoader.MscorlibDocumentation;
DocumentationUIBuilder renderer = new DocumentationUIBuilder(new CSharpAmbience(), MainWindow.Instance.CurrentLanguage.SyntaxHighlighting);
DocumentationUIBuilder renderer = new DocumentationUIBuilder(new CSharpAmbience(), SettingsService.Instance.SessionSettings.LanguageSettings.Language.SyntaxHighlighting);
renderer.AddSignatureBlock($"{code.Name} (0x{code.Code:x})");
if (docProvider != null)
{
@ -442,7 +443,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -442,7 +443,7 @@ namespace ICSharpCode.ILSpy.TextView
static FlowDocument? CreateTooltipForEntity(IEntity resolved)
{
Language currentLanguage = MainWindow.Instance.CurrentLanguage;
Language currentLanguage = SettingsService.Instance.SessionSettings.LanguageSettings.Language;
DocumentationUIBuilder renderer = new DocumentationUIBuilder(new CSharpAmbience(), currentLanguage.SyntaxHighlighting);
RichText richText = currentLanguage.GetRichTextTooltip(resolved);
if (richText == null)
@ -533,7 +534,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -533,7 +534,7 @@ namespace ICSharpCode.ILSpy.TextView
{
if (MainWindow.Instance.CurrentDisplaySettings.HighlightMatchingBraces)
{
var result = MainWindow.Instance.CurrentLanguage.BracketSearcher.SearchBracket(textEditor.Document, textEditor.CaretOffset);
var result = SettingsService.Instance.SessionSettings.LanguageSettings.Language.BracketSearcher.SearchBracket(textEditor.Document, textEditor.CaretOffset);
bracketHighlightRenderer.SetHighlight(result);
}
else

4
ILSpy/TreeNodes/ILSpyTreeNode.cs

@ -48,9 +48,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -48,9 +48,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
LanguageSettings LanguageSettings => SettingsService.Instance.SessionSettings.LanguageSettings;
public Language Language {
get { return LanguageSettings.Language ?? Languages.AllLanguages[0]; }
}
public Language Language => LanguageSettings.Language;
public virtual FilterResult Filter(LanguageSettings settings)
{

4
ILSpy/Views/DebugSteps.xaml.cs

@ -39,7 +39,7 @@ namespace ICSharpCode.ILSpy @@ -39,7 +39,7 @@ namespace ICSharpCode.ILSpy
MainWindow.Instance.SelectionChanged += SelectionChanged;
writingOptions.PropertyChanged += WritingOptions_PropertyChanged;
if (MainWindow.Instance.CurrentLanguage is ILAstLanguage l)
if (SettingsService.Instance.SessionSettings.LanguageSettings.Language is ILAstLanguage l)
{
l.StepperUpdated += ILAstStepperUpdated;
language = l;
@ -70,7 +70,7 @@ namespace ICSharpCode.ILSpy @@ -70,7 +70,7 @@ namespace ICSharpCode.ILSpy
{
language.StepperUpdated -= ILAstStepperUpdated;
}
if (MainWindow.Instance.CurrentLanguage is ILAstLanguage l)
if (SettingsService.Instance.SessionSettings.LanguageSettings.Language is ILAstLanguage l)
{
l.StepperUpdated += ILAstStepperUpdated;
language = l;

Loading…
Cancel
Save