From da9814a18dfe89dea8f59d826b4bb401f9ebd7e4 Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Sun, 6 Dec 2020 18:04:16 +0100 Subject: [PATCH] Deprecate RulesDiff, introduce replacement methods in Program. --- .../mps/logic/reactor/core/RulesDiff.kt | 1 + .../core/internal/EvaluationSessionImpl.kt | 4 ++-- .../core/internal/ProcessingStrategy.kt | 12 +++++++----- .../mps/logic/reactor/program/Program.java | 18 ++++++++++++++++++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RulesDiff.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RulesDiff.kt index de5baa1a..d36f2671 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RulesDiff.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RulesDiff.kt @@ -19,6 +19,7 @@ package jetbrains.mps.logic.reactor.core import jetbrains.mps.logic.reactor.program.Rule +@Deprecated("superfluous") class RulesDiff( preserved: Iterable, val added: Iterable, diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt index f46adf29..ccfb6bb7 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt @@ -147,7 +147,7 @@ internal class EvaluationSessionImpl private constructor ( val processing = ConstraintsProcessing(front, journal, logicalState, incrementality, trace, profiler) val processingStrategy = IncrementalProcessing( - incrementality, journal, program.incrementalDiff(), processing.getStateCleaner(), ruleIndex, trace + incrementality, journal, program.newRules(), program.droppedRules(), processing.getStateCleaner(), ruleIndex, trace ) processing.setStrategy(processingStrategy) @@ -187,7 +187,7 @@ internal class EvaluationSessionImpl private constructor ( val processing = ConstraintsProcessing(front, journal, logicalState, incrementality, trace, profiler) val processingStrategy = PreambleProcessing( - incrementality, journal, program.incrementalDiff(), ruleIndex, trace + incrementality, journal, program.newRules(), ruleIndex, trace ) processing.setStrategy(processingStrategy) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ProcessingStrategy.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ProcessingStrategy.kt index dd3debc5..42510687 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ProcessingStrategy.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ProcessingStrategy.kt @@ -20,6 +20,7 @@ import jetbrains.mps.logic.reactor.core.* import jetbrains.mps.logic.reactor.evaluation.EvaluationTrace import jetbrains.mps.logic.reactor.program.Constraint import jetbrains.mps.logic.reactor.program.IncrementalSpec +import jetbrains.mps.logic.reactor.program.Rule /** * Facade interface for incremental processing. @@ -91,7 +92,8 @@ internal class NonIncrementalProcessing: ProcessingStrategy { internal class IncrementalProcessing( override val ispec: IncrementalSpec, val journal: MatchJournal, - rulesDiff: RulesDiff, + newRules: Iterable, + droppedRules: Iterable, stateCleaner: ConstraintsProcessing.ProgramStateCleaner, ruleIndex: RuleIndex, trace: EvaluationTrace @@ -101,8 +103,8 @@ internal class IncrementalProcessing( private val ruleOrdering = RuleOrdering(ruleIndex) private val continuator = ContinueOccurrencesStage(ispec, journalIndex) - private val invalidator = InvalidationStage(ispec, rulesDiff.removed, continuator, stateCleaner, trace) - private val adder = AdditionStage(ispec, rulesDiff.added, continuator, ruleOrdering, ruleIndex, trace) + private val invalidator = InvalidationStage(ispec, droppedRules.toSet(), continuator, stateCleaner, trace) + private val adder = AdditionStage(ispec, newRules, continuator, ruleOrdering, ruleIndex, trace) private val postponer = PostponeMatchesStage(ispec, journal, journalIndex, ruleOrdering) @@ -180,7 +182,7 @@ internal class IncrementalProcessing( internal class PreambleProcessing( override val ispec: IncrementalSpec, val journal: MatchJournal, - rulesDiff: RulesDiff, + newRules: Iterable, ruleIndex: RuleIndex, trace: EvaluationTrace ): ProcessingStrategy, IncrSpecHolder { @@ -189,7 +191,7 @@ internal class PreambleProcessing( private val ruleOrdering = RuleOrdering(ruleIndex) private val continuator = ContinueOccurrencesStage(ispec, journalIndex) - private val adder = AdditionStage(ispec, rulesDiff.added, continuator, ruleOrdering, ruleIndex, trace) + private val adder = AdditionStage(ispec, newRules, continuator, ruleOrdering, ruleIndex, trace) override fun invalidatedFeedback(): FeedbackKeySet = emptySet() diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Program.java b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Program.java index 4dba00de..65e8a4b7 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Program.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Program.java @@ -16,6 +16,7 @@ package jetbrains.mps.logic.reactor.program; +import javaslang.collection.List; import javaslang.collection.Stream; import jetbrains.mps.logic.reactor.core.RulesDiff; @@ -36,8 +37,10 @@ public abstract class Program { public abstract PreambleInfo preambleInfo(); + @Deprecated public Program withRulesDiff(RulesDiff diff) { return this; }; + @Deprecated public RulesDiff incrementalDiff() { return RulesDiff.emptyDiff(); }; public Iterable rules() { @@ -49,4 +52,19 @@ public abstract class Program { } return allRules; }; + + /** + * Returns rules that have been created since the last evaluation of this program. + */ + public Iterable newRules () { + return incrementalDiff().getAdded(); + } + + /** + * Returns objects that identify rules removed from the previous invocation. + */ + public Iterable droppedRules() { + return incrementalDiff().getRemoved(); + } + }