From e34ba844c54ffb4dfee47427029c4166a08776f9 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Fri, 13 Sep 2019 16:00:08 -0700 Subject: [PATCH] Improve diagnostics for failed instance creation --- plugin/src/Reconciler.lua | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/plugin/src/Reconciler.lua b/plugin/src/Reconciler.lua index 69a24916..66d41fe6 100644 --- a/plugin/src/Reconciler.lua +++ b/plugin/src/Reconciler.lua @@ -50,6 +50,8 @@ function Reconciler:reconcile(virtualInstancesById, id, instance) -- If an instance changes ClassName, we assume it's very different. That's -- not always the case! if virtualInstance.ClassName ~= instance.ClassName then + Logging.trace("Switching to reify for %s because ClassName is different", instance:GetFullName()) + -- TODO: Preserve existing children instead? local parent = instance.Parent self.instanceMap:destroyId(id) @@ -93,6 +95,12 @@ function Reconciler:reconcile(virtualInstancesById, id, instance) unvisitedExistingChildren[existingChildInstance] = nil self:reconcile(virtualInstancesById, childId, existingChildInstance) else + Logging.trace( + "Switching to reify for %s.%s because it does not exist", + instance:GetFullName(), + virtualInstancesById[childId].Name + ) + self:__reify(virtualInstancesById, childId, instance) end end @@ -148,7 +156,13 @@ function Reconciler:__reify(virtualInstancesById, id, parent) local virtualInstance = virtualInstancesById[id] - local instance = Instance.new(virtualInstance.ClassName) + local ok, instance = pcall(function() + return Instance.new(virtualInstance.ClassName) + end) + + if not ok then + error(("Couldn't create an Instance of type %q, a child of %s"):format(virtualInstance.ClassName, parent:GetFullName())) + end for key, value in pairs(virtualInstance.Properties) do setCanonicalProperty(instance, key, rojoValueToRobloxValue(value))