protected override void HandleTaskCompletionCore() { if (engineController.IsDisposed) { BuildWarnings = new Dictionary <Guid, List <WarningEntry> >(); RuntimeWarnings = new Dictionary <Guid, List <ProtoCore.Runtime.WarningEntry> >(); } else { // Retrieve warnings in the context of ISchedulerThread. BuildWarnings = engineController.GetBuildWarnings(); RuntimeWarnings = engineController.GetRuntimeWarnings(); // Mark all modified nodes as being updated (if the task has been // successfully scheduled, executed and completed, it is expected // for "modifiedNodes" to be both non-null and non-empty. // // In addition to marking modified nodes as being updated, their // warning states are cleared (which include the tool-tip). Any node // that has build/runtime warnings assigned to it will properly be // restored to warning state when task completion handler sets the // corresponding build/runtime warning on it. // executedNodes = new List <NodeModel>(); var executedNodeGuids = engineController.GetExecutedAstGuids(graphSyncData.SessionID); foreach (var guid in executedNodeGuids) { var node = TargetedWorkspace.Nodes.FirstOrDefault(n => n.GUID.Equals(guid)); if (node != null) { executedNodes.Add(node); } } foreach (var node in executedNodes) { node.WasInvolvedInExecution = true; node.WasRenderPackageUpdatedAfterExecution = false; if (node.State == ElementState.Warning) { using (node.PropertyChangeManager.SetPropsToSuppress(nameof(NodeModel.ToolTipText), nameof(NodeModel.State))) { node.ClearErrorsAndWarnings(); } } } engineController.RemoveRecordedAstGuidsForSession(graphSyncData.SessionID); } }