Browse Source

Clean Analyzer tree nodes

pull/1030/head
Siegfried Pammer 7 years ago
parent
commit
a1940eefe5
  1. 67
      ILSpy/Analyzers/TreeNodes/AnalyzedEventTreeNode.cs
  2. 6
      ILSpy/Analyzers/TreeNodes/AnalyzedFieldTreeNode.cs
  3. 3
      ILSpy/Analyzers/TreeNodes/AnalyzedMethodTreeNode.cs
  4. 63
      ILSpy/Analyzers/TreeNodes/AnalyzedPropertyTreeNode.cs
  5. 3
      ILSpy/Analyzers/TreeNodes/AnalyzedTypeTreeNode.cs

67
ILSpy/Analyzers/TreeNodes/AnalyzedEventTreeNode.cs

@ -18,72 +18,47 @@ @@ -18,72 +18,47 @@
using System;
using System.Linq;
using System.Reflection.Metadata;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
{
internal sealed class AnalyzedEventTreeNode : AnalyzerEntityTreeNode
{
readonly Decompiler.Metadata.PEFile module;
readonly EventDefinitionHandle analyzedEvent;
readonly IEvent analyzedEvent;
readonly string prefix;
public AnalyzedEventTreeNode(Decompiler.Metadata.PEFile module, EventDefinitionHandle analyzedEvent, string prefix = "")
public AnalyzedEventTreeNode(IEvent analyzedEvent, string prefix = "")
{
if (analyzedEvent == null)
throw new ArgumentNullException(nameof(analyzedEvent));
this.module = module;
this.analyzedEvent = analyzedEvent;
this.analyzedEvent = analyzedEvent ?? throw new ArgumentNullException(nameof(analyzedEvent));
this.prefix = prefix;
this.LazyLoading = true;
}
public override Decompiler.Metadata.IMetadataEntity Member => new Decompiler.Metadata.EventDefinition(module, analyzedEvent);
public override IEntity Member => analyzedEvent;
public override object Icon
{
get { return EventTreeNode.GetIcon(new Decompiler.Metadata.EventDefinition(module, analyzedEvent)); }
}
public override object Icon => EventTreeNode.GetIcon(analyzedEvent);
// TODO: This way of formatting is not suitable for events which explicitly implement interfaces.
public override object Text => prefix + Language.EventToString(new Decompiler.Metadata.EventDefinition(module, analyzedEvent), includeTypeName: true, includeNamespace: true);
public override object Text => prefix + Language.EventToString(analyzedEvent, includeTypeName: true, includeNamespace: true);
protected override void LoadChildren()
{
if (analyzedEvent.AddMethod != null)
this.Children.Add(new AnalyzedEventAccessorTreeNode(analyzedEvent.AddMethod, "add"));
if (analyzedEvent.RemoveMethod != null)
this.Children.Add(new AnalyzedEventAccessorTreeNode(analyzedEvent.RemoveMethod, "remove"));
if (analyzedEvent.AddAccessor != null)
this.Children.Add(new AnalyzedAccessorTreeNode(analyzedEvent.AddAccessor, "add"));
foreach (var accessor in analyzedEvent.OtherMethods)
this.Children.Add(new AnalyzedEventAccessorTreeNode(accessor, null));
if (analyzedEvent.RemoveAccessor != null)
this.Children.Add(new AnalyzedAccessorTreeNode(analyzedEvent.RemoveAccessor, "remove"));
if (AnalyzedEventFiredByTreeNode.CanShow(analyzedEvent))
this.Children.Add(new AnalyzedEventFiredByTreeNode(analyzedEvent));
if (AnalyzedEventOverridesTreeNode.CanShow(analyzedEvent))
this.Children.Add(new AnalyzedEventOverridesTreeNode(analyzedEvent));
if (AnalyzedInterfaceEventImplementedByTreeNode.CanShow(analyzedEvent))
this.Children.Add(new AnalyzedInterfaceEventImplementedByTreeNode(analyzedEvent));
}
//foreach (var accessor in analyzedEvent.OtherMethods)
// this.Children.Add(new AnalyzedAccessorTreeNode(accessor, null));
/*public static AnalyzerTreeNode TryCreateAnalyzer(MemberReference member)
{
if (CanShow(member))
return new AnalyzedEventTreeNode(member as EventDefinition);
else
return null;
foreach (var lazy in App.ExportProvider.GetExports<IAnalyzer<IEvent>>()) {
var analyzer = lazy.Value;
if (analyzer.Show(analyzedEvent)) {
this.Children.Add(new AnalyzerSearchTreeNode<IEvent>(analyzedEvent, analyzer));
}
}
}
public static bool CanShow(IMemberReference member)
{
if (!(member is EventDefinition eventDef))
return false;
return !MainWindow.Instance.CurrentLanguage.ShowMember(eventDef.GetAccessors().First().Method)
|| AnalyzedEventOverridesTreeNode.CanShow(eventDef);
}*/
}
}

6
ILSpy/Analyzers/TreeNodes/AnalyzedFieldTreeNode.cs

@ -17,12 +17,10 @@ @@ -17,12 +17,10 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Reflection.Metadata;
using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Analyzers;
using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
{
class AnalyzedFieldTreeNode : AnalyzerEntityTreeNode
{

3
ILSpy/Analyzers/TreeNodes/AnalyzedMethodTreeNode.cs

@ -22,8 +22,9 @@ using System.Reflection.Metadata; @@ -22,8 +22,9 @@ using System.Reflection.Metadata;
using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Analyzers;
using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
{
internal class AnalyzedMethodTreeNode : AnalyzerEntityTreeNode
{

63
ILSpy/Analyzers/TreeNodes/AnalyzedPropertyTreeNode.cs

@ -17,70 +17,45 @@ @@ -17,70 +17,45 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Reflection.Metadata;
using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
{
sealed class AnalyzedPropertyTreeNode : AnalyzerEntityTreeNode
{
readonly Decompiler.Metadata.PEFile module;
readonly PropertyDefinitionHandle analyzedProperty;
readonly bool isIndexer;
readonly IProperty analyzedProperty;
readonly string prefix;
public AnalyzedPropertyTreeNode(Decompiler.Metadata.PEFile module, PropertyDefinitionHandle analyzedProperty, string prefix = "")
public AnalyzedPropertyTreeNode(IProperty analyzedProperty, string prefix = "")
{
if (analyzedProperty == null)
throw new ArgumentNullException(nameof(analyzedProperty));
using (LoadedAssembly.DisableAssemblyLoad()) {
this.isIndexer = analyzedProperty.HasMatchingDefaultMemberAttribute(module, out _);
}
this.module = module;
this.analyzedProperty = analyzedProperty;
this.analyzedProperty = analyzedProperty ?? throw new ArgumentNullException(nameof(analyzedProperty));
this.prefix = prefix;
this.LazyLoading = true;
}
public override object Icon => PropertyTreeNode.GetIcon(new Decompiler.Metadata.PropertyDefinition(module, analyzedProperty), isIndexer);
public override object Icon => PropertyTreeNode.GetIcon(analyzedProperty);
// TODO: This way of formatting is not suitable for properties which explicitly implement interfaces.
public override object Text => prefix + Language.PropertyToString(new Decompiler.Metadata.PropertyDefinition(module, analyzedProperty), includeNamespace: true, includeTypeName: true, isIndexer: isIndexer);
public override object Text => prefix + Language.PropertyToString(analyzedProperty, includeNamespace: true, includeTypeName: true);
protected override void LoadChildren()
{
var accessors = module.Metadata.GetPropertyDefinition(analyzedProperty).GetAccessors();
if (!accessors.Getter.IsNil)
this.Children.Add(new AnalyzedPropertyAccessorTreeNode(module, accessors.Getter, "get"));
if (!accessors.Setter.IsNil)
this.Children.Add(new AnalyzedPropertyAccessorTreeNode(module, accessors.Setter, "set"));
if (!analyzedProperty.CanGet)
this.Children.Add(new AnalyzedAccessorTreeNode(analyzedProperty.Getter, "get"));
if (!analyzedProperty.CanSet)
this.Children.Add(new AnalyzedAccessorTreeNode(analyzedProperty.Setter, "set"));
//foreach (var accessor in analyzedProperty.OtherMethods)
// this.Children.Add(new AnalyzedPropertyAccessorTreeNode(accessor, null));
/*if (AnalyzedPropertyOverridesTreeNode.CanShow(analyzedProperty))
this.Children.Add(new AnalyzedPropertyOverridesTreeNode(analyzedProperty));
if (AnalyzedInterfacePropertyImplementedByTreeNode.CanShow(analyzedProperty))
this.Children.Add(new AnalyzedInterfacePropertyImplementedByTreeNode(analyzedProperty));*/
}
/*public static AnalyzerTreeNode TryCreateAnalyzer(IMemberReference member)
{
if (CanShow(member))
return new AnalyzedPropertyTreeNode((PropertyDefinition)member);
else
return null;
foreach (var lazy in App.ExportProvider.GetExports<IAnalyzer<IProperty>>()) {
var analyzer = lazy.Value;
if (analyzer.Show(analyzedProperty)) {
this.Children.Add(new AnalyzerSearchTreeNode<IProperty>(analyzedProperty, analyzer));
}
}
}
public static bool CanShow(IMemberReference member)
{
if (!(member is PropertyDefinition property))
return false;
return !MainWindow.Instance.CurrentLanguage.ShowMember(property.GetMethod.IsNil ? property.SetMethod : property.GetMethod)
|| AnalyzedPropertyOverridesTreeNode.CanShow(property);
}*/
public override Decompiler.Metadata.IMetadataEntity Member => new Decompiler.Metadata.PropertyDefinition(module, analyzedProperty);
public override IEntity Member => analyzedProperty;
}
}

3
ILSpy/Analyzers/TreeNodes/AnalyzedTypeTreeNode.cs

@ -19,8 +19,9 @@ @@ -19,8 +19,9 @@
using System;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Analyzers;
using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
{
internal class AnalyzedTypeTreeNode : AnalyzerEntityTreeNode
{

Loading…
Cancel
Save