From d81d6d034b44069950264fd006773b18cb700f53 Mon Sep 17 00:00:00 2001 From: Sinai <49360850+sinai-dev@users.noreply.github.com> Date: Tue, 15 Mar 2022 01:19:48 +1100 Subject: [PATCH] Implement support for implicit struct constructors --- src/CacheObject/CacheConstructor.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/CacheObject/CacheConstructor.cs b/src/CacheObject/CacheConstructor.cs index 202158b..e6de8da 100644 --- a/src/CacheObject/CacheConstructor.cs +++ b/src/CacheObject/CacheConstructor.cs @@ -11,8 +11,9 @@ namespace UnityExplorer.CacheObject public class CacheConstructor : CacheMember { public ConstructorInfo CtorInfo { get; } + readonly Type typeForStructConstructor; - public override Type DeclaringType => CtorInfo.DeclaringType; + public override Type DeclaringType => typeForStructConstructor ?? CtorInfo.DeclaringType; public override bool IsStatic => true; public override bool ShouldAutoEvaluate => false; public override bool CanWrite => false; @@ -22,8 +23,27 @@ namespace UnityExplorer.CacheObject this.CtorInfo = ci; } + public CacheConstructor(Type typeForStructConstructor) + { + this.typeForStructConstructor = typeForStructConstructor; + } + public override void SetInspectorOwner(ReflectionInspector inspector, MemberInfo member) { + // if is parameterless struct ctor + if (typeForStructConstructor != null) + { + this.Owner = inspector; + + // eg. Vector3.Vector3() + this.NameLabelText = SignatureHighlighter.Parse(typeForStructConstructor, false); + NameLabelText += $".{NameLabelText}()"; + + this.NameForFiltering = SignatureHighlighter.RemoveHighlighting(NameLabelText); + this.NameLabelTextRaw = NameForFiltering; + return; + } + base.SetInspectorOwner(inspector, member); Arguments = CtorInfo.GetParameters();