Files
UnityExplorer_Fix/src/UI/Widgets/EvaluateWidget/GenericArgumentHandler.cs

58 lines
1.6 KiB
C#
Raw Normal View History

using System;
using System.Text;
using UniverseLib;
2022-01-31 21:24:01 +11:00
using UniverseLib.Utility;
namespace UnityExplorer.UI.Widgets
{
public class GenericArgumentHandler : BaseArgumentHandler
{
2022-04-22 21:04:23 +10:00
private Type genericArgument;
2022-04-22 21:04:23 +10:00
public void OnBorrowed(Type genericArgument)
{
2022-04-22 21:04:23 +10:00
this.genericArgument = genericArgument;
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-04-22 21:04:23 +10:00
Type[] constraints = this.genericArgument.GetGenericParameterConstraints();
StringBuilder sb = new($"<color={SignatureHighlighter.CONST}>{this.genericArgument.Name}</color>");
2022-04-24 01:59:40 +10:00
for (int i = 0; i < constraints.Length; i++)
{
2022-04-24 01:59:40 +10:00
if (i == 0) sb.Append(' ').Append('(');
else sb.Append(',').Append(' ');
2022-04-24 01:59:40 +10:00
sb.Append(SignatureHighlighter.Parse(constraints[i], false));
2022-04-24 01:59:40 +10:00
if (i + 1 == constraints.Length)
sb.Append(')');
}
argNameLabel.text = sb.ToString();
}
public void OnReturned()
{
2022-04-22 21:04:23 +10:00
this.genericArgument = null;
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()
{
}
}
}