From ccbb6ddec78486d788078b95a843519fc4f3eac4 Mon Sep 17 00:00:00 2001 From: Amy <3855802+amylizzle@users.noreply.github.com> Date: Mon, 6 May 2024 19:39:32 +0100 Subject: [PATCH] Add method for getting type of var (#5070) Co-authored-by: amylizzle --- .../Manager/ISerializationManager.cs | 3 +++ .../Manager/SerializationManager.cs | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Robust.Shared/Serialization/Manager/ISerializationManager.cs b/Robust.Shared/Serialization/Manager/ISerializationManager.cs index 1407e32bc4..22fd2c56e1 100644 --- a/Robust.Shared/Serialization/Manager/ISerializationManager.cs +++ b/Robust.Shared/Serialization/Manager/ISerializationManager.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using Robust.Shared.Reflection; using Robust.Shared.Serialization.Markdown; @@ -440,5 +441,7 @@ namespace Robust.Shared.Serialization.Manager } #endregion + + public bool TryGetVariableType(Type type, string variableName, [NotNullWhen(true)] out Type? variableType); } } diff --git a/Robust.Shared/Serialization/Manager/SerializationManager.cs b/Robust.Shared/Serialization/Manager/SerializationManager.cs index 54410610da..d2f27ba960 100644 --- a/Robust.Shared/Serialization/Manager/SerializationManager.cs +++ b/Robust.Shared/Serialization/Manager/SerializationManager.cs @@ -264,6 +264,26 @@ namespace Robust.Shared.Serialization.Manager return dataDefinition != null; } + public bool TryGetVariableType(Type type, string variableName, [NotNullWhen(true)] out Type? variableType) + { + if (!TryGetDefinition(type, out var definition)) + { + variableType = null; + return false; + } + var foundFieldDef = definition.BaseFieldDefinitions.FirstOrDefault(fieldDef => fieldDef?.BackingField.Name==variableName, null); + if(foundFieldDef != null) + { + variableType = foundFieldDef.BackingField.FieldType; + return true; + } + else + { + variableType = null; + return false; + } + } + private Type ResolveConcreteType(Type baseType, string typeName) { var type = ReflectionManager.YamlTypeTagLookup(baseType, typeName);