From 0cef5ad29884c7586555c787100a8b3aade1cf23 Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Mon, 12 Apr 2021 12:13:32 +0200 Subject: [PATCH] Introduce method isBasis to Rule class, use that for feedback Feedback basis are calculated for rules in history that are marked as "basis" instead of "principal". --- .../mps/logic/reactor/core/internal/ControllerImpl.kt | 4 ++-- .../jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt | 2 +- .../mps/logic/reactor/core/internal/MatchJournalImpl.kt | 4 ++-- .../Core/src/jetbrains/mps/logic/reactor/program/Rule.java | 2 ++ 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt index ca394ccb..739fcfbe 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt @@ -175,7 +175,7 @@ internal class ControllerImpl ( if (status.feedback?.alreadyHandled() == false) { status.feedback.handle(match, newParent.match.feedbackKey, - processing.principalRuleTags(newParent), + processing.basisRuleTags(newParent), supervisor) } } @@ -199,7 +199,7 @@ internal class ControllerImpl ( } else if (status.feedback?.alreadyHandled() == false && status.failure.handle(match, newParent.match.feedbackKey, - processing.principalRuleTags(newParent), + processing.basisRuleTags(newParent), supervisor)) { status.recover() diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt index 471290c4..a4a56223 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt @@ -121,7 +121,7 @@ interface MatchJournal : EvidenceSource { */ fun index(): Index - fun principalRuleTags(chunk: Chunk): List + fun basisRuleTags(chunk: Chunk): List /** * Simplifies some search operations on [MatchJournal]. diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt index a1f83ba5..8b35e9f4 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt @@ -243,12 +243,12 @@ internal open class MatchJournalImpl( override fun index(): MatchJournal.Index = IndexImpl(hist) - override fun principalRuleTags(chunk: Chunk): List { + override fun basisRuleTags(chunk: Chunk): List { val ptags = mutableListOf() chunk.justifications().forEach { jn -> // hist is sequential, random access can be expensive (lookupChunkByEvidence(jn) as? MatchChunk)?.let { - if (it.match.isPrincipal) { + if (it.match.rule().isBasis) { ptags.add(it.ruleUniqueTag) } } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Rule.java b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Rule.java index 3601fb87..01828281 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Rule.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Rule.java @@ -40,6 +40,8 @@ public abstract class Rule { return Collections.emptyList(); } + public boolean isBasis() { return false; } + /** * A tag uniquely identifies the rule. */