public static void HandleException(this IGraphElementWithDebugData element, GraphPointer pointer, Exception ex) { Ensure.That(nameof(ex)).IsNotNull(ex); if (pointer == null) { Debug.LogError("Caught exception with null graph pointer (flow was likely disposed):\n" + ex); return; } var reference = pointer.AsReference(); if (!ex.HandledIn(reference)) { element.SetException(pointer, ex); } while (reference.isChild) { var parentElement = reference.parentElement; reference = reference.ParentReference(true); if (parentElement is IGraphElementWithDebugData debuggableParentElement) { if (!ex.HandledIn(reference)) { debuggableParentElement.SetException(reference, ex); } } } }
public IGraphElementDebugData GetOrCreateElementData(IGraphElementWithDebugData element) { if (!elementsData.TryGetValue(element, out var elementDebugData)) { elementDebugData = element.CreateDebugData(); elementsData.Add(element, elementDebugData); } return(elementDebugData); }
public static void SetException(this IGraphElementWithDebugData element, GraphPointer pointer, Exception ex) { if (!pointer.hasDebugData) { return; } var debugData = pointer.GetElementDebugData <IGraphElementDebugData>(element); debugData.runtimeException = ex; }
public static Exception GetException(this IGraphElementWithDebugData element, GraphPointer pointer) { if (!pointer.hasDebugData) { return(null); } var debugData = pointer.GetElementDebugData <IGraphElementDebugData>(element); return(debugData.runtimeException); }