From 13526ded213a5f828bee4ec2e0415c7527fc3099 Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Wed, 28 Aug 2019 17:39:20 +0200 Subject: [PATCH] Prevent ephemeral messages caused by failed ask to propagate. A failed ask predicate constitutes normal evaluation flow, no need to report this to the user. --- .../mps/logic/reactor/core/CompositeFeedback.kt | 10 ++++++++++ .../mps/logic/reactor/core/internal/FeedbackStatus.kt | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/CompositeFeedback.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/CompositeFeedback.kt index e4b22ea5..bff54cc8 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/CompositeFeedback.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/CompositeFeedback.kt @@ -107,6 +107,16 @@ class CompositeFeedback private constructor(private val elements: List ?: ((right as? CompositeFeedback)?.composeLeft(left) ?: CompositeFeedback(Arrays.asList(left, right))) } + fun dropLast(mayberComposite: Feedback?): Feedback? = + if (mayberComposite == null || mayberComposite !is CompositeFeedback) { + null + } else if (mayberComposite.elements.size > 2) { + CompositeFeedback(mayberComposite.elements.dropLast(1)) + } else if (mayberComposite.elements.size == 2) { + mayberComposite.elements[0] + } else throw NoSuchElementException() + + private fun maxSeverity(efs: List): EvaluationFeedback.Severity { var sev: EvaluationFeedback.Severity = EvaluationFeedback.Severity.DEBUG for (ef in efs) { diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/FeedbackStatus.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/FeedbackStatus.kt index 7d989938..ab4b5277 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/FeedbackStatus.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/FeedbackStatus.kt @@ -62,7 +62,7 @@ abstract class FeedbackStatus(val feedback : Feedback?) { class ABORTED(status: FeedbackStatus, val reason: Feedback) : FeedbackStatus(compose(status.feedback, reason)) { override val operational = false - override fun recover(): FeedbackStatus = NORMAL(feedback) + override fun recover(): FeedbackStatus = NORMAL(CompositeFeedback.dropLast(feedback)) } }