2022-01-02 19:43:55 +11:00
|
|
|
|
using System;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using UniverseLib;
|
2022-01-31 21:24:01 +11:00
|
|
|
|
using UniverseLib.Utility;
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
|
|
|
|
namespace UnityExplorer.UI.Widgets
|
|
|
|
|
{
|
|
|
|
|
public class GenericArgumentHandler : BaseArgumentHandler
|
|
|
|
|
{
|
2022-04-22 21:04:23 +10:00
|
|
|
|
private Type genericArgument;
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
2022-04-22 21:04:23 +10:00
|
|
|
|
public void OnBorrowed(Type genericArgument)
|
2022-01-02 19:43:55 +11:00
|
|
|
|
{
|
2022-04-22 21:04:23 +10:00
|
|
|
|
this.genericArgument = genericArgument;
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
|
|
|
|
typeCompleter.Enabled = true;
|
2022-04-22 21:04:23 +10:00
|
|
|
|
typeCompleter.BaseType = this.genericArgument;
|
2022-04-24 01:59:40 +10:00
|
|
|
|
typeCompleter.CacheTypes();
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
2022-04-22 21:04:23 +10:00
|
|
|
|
Type[] constraints = this.genericArgument.GetGenericParameterConstraints();
|
|
|
|
|
|
|
|
|
|
StringBuilder sb = new($"<color={SignatureHighlighter.CONST}>{this.genericArgument.Name}</color>");
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
2022-04-24 01:59:40 +10:00
|
|
|
|
for (int i = 0; i < constraints.Length; i++)
|
2022-01-02 19:43:55 +11:00
|
|
|
|
{
|
2022-04-24 01:59:40 +10:00
|
|
|
|
if (i == 0) sb.Append(' ').Append('(');
|
2022-01-02 19:43:55 +11:00
|
|
|
|
else sb.Append(',').Append(' ');
|
|
|
|
|
|
2022-04-24 01:59:40 +10:00
|
|
|
|
sb.Append(SignatureHighlighter.Parse(constraints[i], false));
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
2022-04-24 01:59:40 +10:00
|
|
|
|
if (i + 1 == constraints.Length)
|
2022-01-02 19:43:55 +11:00
|
|
|
|
sb.Append(')');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
argNameLabel.text = sb.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void OnReturned()
|
|
|
|
|
{
|
2022-04-22 21:04:23 +10:00
|
|
|
|
this.genericArgument = null;
|
2022-01-02 19:43:55 +11:00
|
|
|
|
|
|
|
|
|
this.typeCompleter.Enabled = false;
|
|
|
|
|
|
|
|
|
|
this.inputField.Text = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Type Evaluate()
|
|
|
|
|
{
|
|
|
|
|
return ReflectionUtility.GetTypeByName(this.inputField.Text)
|
|
|
|
|
?? throw new Exception($"Could not find any type by name '{this.inputField.Text}'!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void CreateSpecialContent()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|