diff --git a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs index aa1a25ab4..77f429408 100644 --- a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs +++ b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs @@ -8,7 +8,6 @@ using Artemis.Core; using Artemis.Core.Modules; using Artemis.UI.Shared.Services; -using Avalonia; using ReactiveUI; namespace Artemis.UI.Shared.DataModelVisualization.Shared; @@ -282,12 +281,8 @@ internal void PopulateProperties(IDataModelUIService dataModelUIService, DataMod foreach (PropertyInfo propertyInfo in modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance).OrderBy(t => t.MetadataToken)) { string childPath = AppendToPath(propertyInfo.Name); - if (Children.Any(c => c.Path != null && c.Path.Equals(childPath))) - continue; - if (propertyInfo.GetCustomAttribute() != null) - continue; - MethodInfo? getMethod = propertyInfo.GetGetMethod(); - if (getMethod == null || getMethod.GetParameters().Any()) + + if (!ShouldIncludePath(childPath, propertyInfo)) continue; DataModelVisualizationViewModel? child = CreateChild(dataModelUIService, childPath, GetChildDepth()); @@ -331,6 +326,27 @@ internal void PopulateProperties(IDataModelUIService dataModelUIService, DataMod Children.Remove(dataModelVisualizationViewModel); } + private bool ShouldIncludePath(string childPath, PropertyInfo propertyInfo) + { + // Outdated plugins can cause unpredictable exceptions when resolving types + try + { + if (Children.Any(c => c.Path != null && c.Path.Equals(childPath))) + return false; + if (propertyInfo.GetCustomAttribute() != null) + return false; + MethodInfo? getMethod = propertyInfo.GetGetMethod(); + if (getMethod == null || getMethod.GetParameters().Any()) + return false; + + return true; + } + catch (Exception) + { + return false; + } + } + private DataModelVisualizationViewModel? CreateChild(IDataModelUIService dataModelUIService, string path, int depth) { if (DataModel == null)