mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 20:39:01 +00:00
204 lines
9.7 KiB
C#
204 lines
9.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Reflection;
|
|
using System.Windows.Forms;
|
|
|
|
namespace PlugViewer.TreeViewNodes
|
|
{
|
|
public enum MethodType
|
|
{
|
|
BasicMethod,
|
|
VirtualMethod,
|
|
OverrideMethod,
|
|
}
|
|
|
|
internal class MethodTreeNode : OTreeNode
|
|
{
|
|
public MethodTreeNode(MethodInfo definition, MethodType mType, Access mAccess) : base(TreeNodeType.Method)
|
|
{
|
|
this.def = definition;
|
|
this.Text = NameBuilder.BuildMethodDisplayName(definition);
|
|
this.mType = mType;
|
|
this.acc = mAccess;
|
|
switch (mType)
|
|
{
|
|
case MethodType.BasicMethod:
|
|
{
|
|
switch (mAccess)
|
|
{
|
|
case Access.Public:
|
|
this.SelectedImageIndex = Constants.Method_Public;
|
|
this.ImageIndex = Constants.Method_Public;
|
|
break;
|
|
case Access.Private:
|
|
this.SelectedImageIndex = Constants.Method_Private;
|
|
this.ImageIndex = Constants.Method_Private;
|
|
break;
|
|
case Access.Protected:
|
|
this.SelectedImageIndex = Constants.Method_Protected;
|
|
this.ImageIndex = Constants.Method_Protected;
|
|
break;
|
|
case Access.Internal:
|
|
this.SelectedImageIndex = Constants.Method_Internal;
|
|
this.ImageIndex = Constants.Method_Internal;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case MethodType.OverrideMethod:
|
|
{
|
|
|
|
switch (mAccess)
|
|
{
|
|
case Access.Public:
|
|
this.SelectedImageIndex = Constants.MethodOverride_Public;
|
|
this.ImageIndex = Constants.MethodOverride_Public;
|
|
break;
|
|
case Access.Private:
|
|
this.SelectedImageIndex = Constants.MethodOverride_Private;
|
|
this.ImageIndex = Constants.MethodOverride_Private;
|
|
break;
|
|
case Access.Protected:
|
|
this.SelectedImageIndex = Constants.MethodOverride_Protected;
|
|
this.ImageIndex = Constants.MethodOverride_Protected;
|
|
break;
|
|
case Access.Internal:
|
|
this.SelectedImageIndex = Constants.MethodOverride_Internal;
|
|
this.ImageIndex = Constants.MethodOverride_Internal;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case MethodType.VirtualMethod:
|
|
{
|
|
|
|
switch (mAccess)
|
|
{
|
|
case Access.Public:
|
|
this.SelectedImageIndex = Constants.MethodVirtual_Public;
|
|
this.ImageIndex = Constants.MethodVirtual_Public;
|
|
break;
|
|
case Access.Private:
|
|
this.SelectedImageIndex = Constants.MethodVirtual_Private;
|
|
this.ImageIndex = Constants.MethodVirtual_Private;
|
|
break;
|
|
case Access.Protected:
|
|
this.SelectedImageIndex = Constants.MethodVirtual_Protected;
|
|
this.ImageIndex = Constants.MethodVirtual_Protected;
|
|
break;
|
|
case Access.Internal:
|
|
this.SelectedImageIndex = Constants.MethodVirtual_Internal;
|
|
this.ImageIndex = Constants.MethodVirtual_Internal;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
#if DebugTreeNodeLoading
|
|
Log.WriteLine("Method '" + this.Text + "' was loaded.");
|
|
#endif
|
|
}
|
|
|
|
public override TreeNodeType Type
|
|
{
|
|
get { return TreeNodeType.Method; }
|
|
}
|
|
|
|
private MethodInfo def;
|
|
private MethodType mType;
|
|
private Access acc;
|
|
|
|
public Access AccessModifier
|
|
{
|
|
get { return acc; }
|
|
}
|
|
|
|
public MethodType TypeOfMethod
|
|
{
|
|
get { return mType; }
|
|
}
|
|
|
|
public override object Definition
|
|
{
|
|
get { return (object)def; }
|
|
}
|
|
|
|
public override void ShowNodeInfo(RichTextBox rtb)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
switch (mType)
|
|
{
|
|
case MethodType.BasicMethod:
|
|
{
|
|
sb.AppendLine("Basic Method '" + this.Text + "' contains:");
|
|
sb.AppendLine(def.GetGenericArguments().Length.ToString() + " Generic Parameters,");
|
|
sb.AppendLine(def.GetParameters().Length.ToString() + " Parameters,");
|
|
//sb.AppendLine(def.SecurityDeclarations.Count.ToString() + " Security Declarations,");
|
|
sb.AppendLine(def.GetCustomAttributes(true).Length.ToString() + " Custom Attributes,");
|
|
if (def.GetMethodBody() != null)
|
|
{
|
|
sb.AppendLine(def.GetMethodBody().GetILAsByteArray().Length.ToString() + " Instructions,");
|
|
sb.AppendLine(def.GetMethodBody().ExceptionHandlingClauses.Count.ToString() + " Exception Handlers,");
|
|
sb.AppendLine(def.GetMethodBody().LocalVariables.Count.ToString() + " Variables,");
|
|
}
|
|
else
|
|
{
|
|
sb.AppendLine("Doesn't have a body.");
|
|
}
|
|
sb.AppendLine("Has a calling convention of '" + def.CallingConvention.ToString() + "'");
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
}
|
|
break;
|
|
case MethodType.OverrideMethod:
|
|
{
|
|
sb.AppendLine("Override Method '" + this.Text + "' contains:");
|
|
sb.AppendLine(def.GetGenericArguments().Length.ToString() + " Generic Parameters,");
|
|
sb.AppendLine(def.GetParameters().Length.ToString() + " Parameters,");
|
|
//sb.AppendLine(def.SecurityDeclarations.Count.ToString() + " Security Declarations,");
|
|
sb.AppendLine(def.GetCustomAttributes(true).Length.ToString() + " Custom Attributes,");
|
|
if (def.GetMethodBody() != null)
|
|
{
|
|
sb.AppendLine(def.GetMethodBody().GetILAsByteArray().Length.ToString() + " Instructions,");
|
|
sb.AppendLine(def.GetMethodBody().ExceptionHandlingClauses.Count.ToString() + " Exception Handlers,");
|
|
sb.AppendLine(def.GetMethodBody().LocalVariables.Count.ToString() + " Variables,");
|
|
}
|
|
else
|
|
{
|
|
sb.AppendLine("Doesn't have a body.");
|
|
}
|
|
//sb.AppendLine("Overrides " + def..Resolve().Overrides.Count.ToString() + " methods,");
|
|
sb.AppendLine("Has a calling convention of '" + def.CallingConvention.ToString() + "'");
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
}
|
|
break;
|
|
case MethodType.VirtualMethod:
|
|
{
|
|
sb.AppendLine("Virtual Method '" + this.Text + "' contains:");
|
|
sb.AppendLine(def.GetGenericArguments().Length.ToString() + " Generic Parameters,");
|
|
sb.AppendLine(def.GetParameters().Length.ToString() + " Parameters,");
|
|
//sb.AppendLine(def.SecurityDeclarations.Count.ToString() + " Security Declarations,");
|
|
sb.AppendLine(def.GetCustomAttributes(true).Length.ToString() + " Custom Attributes,");
|
|
if (def.GetMethodBody() != null)
|
|
{
|
|
sb.AppendLine(def.GetMethodBody().GetILAsByteArray().Length.ToString() + " Instructions,");
|
|
sb.AppendLine(def.GetMethodBody().ExceptionHandlingClauses.Count.ToString() + " Exception Handlers,");
|
|
sb.AppendLine(def.GetMethodBody().LocalVariables.Count.ToString() + " Variables,");
|
|
}
|
|
else
|
|
{
|
|
sb.AppendLine("Doesn't have a body.");
|
|
}
|
|
sb.AppendLine("Has a calling convention of '" + def.CallingConvention.ToString() + "'");
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
}
|
|
break;
|
|
}
|
|
|
|
rtb.Text = sb.ToString();
|
|
}
|
|
}
|
|
}
|