From 7dc75c6dd242ecf0b0c91529381b72e5b791baad Mon Sep 17 00:00:00 2001 From: EvilFactory Date: Fri, 29 Mar 2024 11:32:35 -0300 Subject: [PATCH] Fixed stackoverflow caused by ParseDerived due to GetDerivedNonAbstract not returning abstract types --- .../BarotraumaCore/Utils/ReflectionUtils.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Libraries/BarotraumaLibs/BarotraumaCore/Utils/ReflectionUtils.cs b/Libraries/BarotraumaLibs/BarotraumaCore/Utils/ReflectionUtils.cs index 49586c83f..b7c65fa79 100644 --- a/Libraries/BarotraumaLibs/BarotraumaCore/Utils/ReflectionUtils.cs +++ b/Libraries/BarotraumaLibs/BarotraumaCore/Utils/ReflectionUtils.cs @@ -1,4 +1,5 @@ #nullable enable +using Barotrauma.Debugging; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -55,7 +56,13 @@ namespace Barotrauma if (list.Length == 0) { return ImmutableArray.Empty; // No types, don't add to cache - } + } + + if (!TypeSearchCache.TryAdd(typeName, list)) + { + DebugConsoleCore.Log($"ReflectionUtils.AddNonAbstractAssemblyTypes(): Error while adding to quick lookup cache."); + } + return list; } @@ -107,7 +114,7 @@ namespace Barotrauma public static void ResetCache() { CachedNonAbstractTypes.Clear(); - CachedNonAbstractTypes.TryAdd(typeof(ReflectionUtils).Assembly, typeof(ReflectionUtils).Assembly.GetTypes().ToImmutableArray()); + CachedNonAbstractTypes.TryAdd(typeof(ReflectionUtils).Assembly, typeof(ReflectionUtils).Assembly.GetTypes().Where(t => !t.IsAbstract).ToImmutableArray()); TypeSearchCache.Clear(); }