From 8231ef795707f844bff92820cdb25832916c61fc Mon Sep 17 00:00:00 2001
From: phesch <ulila@student.kit.edu>
Date: Tue, 14 Jun 2022 09:13:47 +0200
Subject: [PATCH] Handle null objects in easy JSON converter

---
 .../tree_visitors/TreeTypedJSONConverter.cpp  | 39 ++++++++-----------
 1 file changed, 17 insertions(+), 22 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp
index 950f034f8..21e4c7bc9 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedJSONConverter.cpp
@@ -33,35 +33,30 @@ namespace armarx::armem::gui::instance
     TreeTypedJSONConverter::MapElements
     TreeTypedJSONConverter::getObjectElements(DataInput& elementData, TypeInput& elementType)
     {
-        std::map<std::string, std::pair<aron::data::VariantPtr, aron::type::VariantPtr>> ret;
-        auto data = aron::data::Dict::DynamicCastAndCheck(elementData);
-        auto type = aron::type::Object::DynamicCastAndCheck(elementType);
-
-        if (data)
-        {
-            for (const auto& [key, e] : data->getElements())
-            {
-                if (type && type->hasMemberType(key))
-                {
-                    auto memberType = type->getMemberType(key);
-                    ret.insert({key, {e, memberType}});
-                }
-                else
-                {
-                    ret.insert({key, {e, nullptr}});
-                }
-            }
-        }
-        return ret;
+        return GetObjectElementsWithNullType(elementData, elementType);
     }
 
     void
-    TreeTypedJSONConverter::visitObjectOnEnter(DataInput& elementData, TypeInput& /*elementType*/)
+    TreeTypedJSONConverter::visitObjectOnEnter(DataInput& elementData, TypeInput& elementType)
     {
         std::string key = "";
+        aron::Path path;
+        if (elementData)
+        {
+            path = elementData->getPath();
+        }
+        else if (elementType)
+        {
+            path = elementType->getPath();
+        }
+        else
+        {
+            return;
+        }
+
         try
         {
-            key = elementData->getPath().getLastElement();
+            key = path.getLastElement();
         }
         catch (const aron::error::AronException& e)
         {
-- 
GitLab