From 59b6fb09fedc3a1676c214c14aceca66c39731ef Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Thu, 2 May 2019 14:41:57 +0200 Subject: [PATCH] Rename some API interfaces to better reflect the intent. --- .../mps/logic/reactor/core/Dispatcher.kt | 1 - .../mps/logic/reactor/core/RuleMatchEx.kt | 4 +-- .../logic/reactor/core/RuleMatchingProbe.kt | 1 - .../reactor/core/internal/ControllerImpl.kt | 4 +-- .../reactor/core/internal/LogicalImpl.kt | 22 ++++++------- .../core/internal/ReteRuleMatcherImpl.kt | 1 - .../reactor/core/internal/RuleMatchImpl.kt | 1 - .../reactor/evaluation/EvaluationFailure.java | 2 +- .../reactor/evaluation/EvaluationTrace.java | 20 ++++++------ .../evaluation/PredicateInvocation.java | 7 +--- .../{MatchRule.java => RuleMatch.java} | 4 +-- .../mps/logic/reactor/logical/Logical.java | 2 -- ...inableLogical.java => MutableLogical.java} | 11 +++---- reactor/Test/src/solver/EqualsSolver.kt | 32 +++++++++---------- reactor/Test/test/LogicalHelper.kt | 4 +-- .../mps/unification/test/SolverTests.java | 14 ++++---- 16 files changed, 58 insertions(+), 72 deletions(-) rename reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/{MatchRule.java => RuleMatch.java} (94%) rename reactor/Core/src/jetbrains/mps/logic/reactor/logical/{JoinableLogical.java => MutableLogical.java} (77%) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Dispatcher.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Dispatcher.kt index 934b8af7..70c0876b 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Dispatcher.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Dispatcher.kt @@ -19,7 +19,6 @@ package jetbrains.mps.logic.reactor.core import com.github.andrewoma.dexx.collection.Maps import jetbrains.mps.logic.reactor.core.internal.RuleMatchImpl import com.github.andrewoma.dexx.collection.Map as PersMap -import jetbrains.mps.logic.reactor.evaluation.MatchRule /** * A front-end interface to [RuleMatcher]. diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchEx.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchEx.kt index 39d4a703..b95987ac 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchEx.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchEx.kt @@ -16,7 +16,7 @@ package jetbrains.mps.logic.reactor.core -import jetbrains.mps.logic.reactor.evaluation.MatchRule +import jetbrains.mps.logic.reactor.evaluation.RuleMatch import jetbrains.mps.logic.reactor.util.IdWrapper @@ -24,7 +24,7 @@ import jetbrains.mps.logic.reactor.util.IdWrapper * @author Fedor Isakov */ -interface RuleMatchEx : MatchRule { +interface RuleMatchEx : RuleMatch { /** * Returns an array of matched constraint occurrences wrapped in [IdWrapper]. diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchingProbe.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchingProbe.kt index 5387a985..310b587f 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchingProbe.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleMatchingProbe.kt @@ -16,7 +16,6 @@ package jetbrains.mps.logic.reactor.core -import jetbrains.mps.logic.reactor.evaluation.MatchRule import jetbrains.mps.logic.reactor.program.Rule import java.util.BitSet 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 2084e77b..026870ed 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 @@ -263,12 +263,12 @@ internal class ControllerImpl ( override fun variable(metaLogical: MetaLogical): Logical? = null } - private fun MatchRule.patternPredicates() = + private fun RuleMatch.patternPredicates() = (rule().headKept() + rule().headReplaced()).zip(matchHeadKept() + matchHeadReplaced()).flatMap { it.first.patternPredicates(it.second.arguments()) }.toList() - private fun MatchRule.allStored() = (matchHeadKept() + matchHeadReplaced()).all { co -> (co as Occurrence).stored } + private fun RuleMatch.allStored() = (matchHeadKept() + matchHeadReplaced()).all { co -> (co as Occurrence).stored } } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/LogicalImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/LogicalImpl.kt index 5385e96b..a1b0d89c 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/LogicalImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/LogicalImpl.kt @@ -17,11 +17,11 @@ package jetbrains.mps.logic.reactor.core.internal import jetbrains.mps.logic.reactor.core.LogicalObserver -import jetbrains.mps.logic.reactor.logical.JoinableLogical +import jetbrains.mps.logic.reactor.logical.MutableLogical import jetbrains.mps.logic.reactor.logical.MetaLogical import java.util.ArrayList -internal class LogicalImpl : JoinableLogical { +internal class LogicalImpl : MutableLogical { companion object { var lastIdx = 0 @@ -79,7 +79,7 @@ internal class LogicalImpl : JoinableLogical { override fun metaLogical(): MetaLogical = metaLogical - override fun findRoot(): JoinableLogical = find() + override fun findRoot(): MutableLogical = find() override fun setValue(newValue: T) { if (_value !== newValue) { @@ -88,7 +88,7 @@ internal class LogicalImpl : JoinableLogical { } } - override fun union(other: JoinableLogical, reconciler: JoinableLogical.ValueReconciler) { + override fun union(other: MutableLogical, reconciler: MutableLogical.ValueReconciler) { val thisRepr = this.find() val otherRepr = (other as LogicalImpl).find() @@ -143,7 +143,7 @@ internal class LogicalImpl : JoinableLogical { } } - override fun union(other: JoinableLogical) { + override fun union(other: MutableLogical) { union(other, { a, b -> if (a != b) throw IllegalStateException("$a does not equal to $b")}) } @@ -166,13 +166,13 @@ internal class LogicalImpl : JoinableLogical { notifyParentUpdated() } - private fun mergeValueObservers(mergeFrom: JoinableLogical) { + private fun mergeValueObservers(mergeFrom: MutableLogical) { val other = mergeFrom as LogicalImpl valueObservers.addAll(other.valueObservers) other.valueObservers.clear() } - private fun mergeParentObservers(mergeFrom: JoinableLogical) { + private fun mergeParentObservers(mergeFrom: MutableLogical) { val other = mergeFrom as LogicalImpl parentObservers.addAll(other.parentObservers) other.parentObservers.clear() @@ -203,11 +203,11 @@ class DefaultMetaLogical (val name: String) : MetaLogical(name, Object::cl // Used from tests -fun anonLogical(value: V): JoinableLogical = LogicalImpl(value) +fun anonLogical(value: V): MutableLogical = LogicalImpl(value) -fun namedLogical(name: String): JoinableLogical = LogicalImpl(name) +fun namedLogical(name: String): MutableLogical = LogicalImpl(name) -fun MetaLogical.logical(): JoinableLogical = LogicalImpl(this) +fun MetaLogical.logical(): MutableLogical = LogicalImpl(this) -fun MetaLogical.logical(value: V): JoinableLogical = LogicalImpl(name(), value) +fun MetaLogical.logical(value: V): MutableLogical = LogicalImpl(name(), value) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt index ea801293..42b177fa 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt @@ -18,7 +18,6 @@ package jetbrains.mps.logic.reactor.core.internal import jetbrains.mps.logic.reactor.core.* import jetbrains.mps.logic.reactor.evaluation.ConstraintOccurrence -import jetbrains.mps.logic.reactor.evaluation.MatchRule import jetbrains.mps.logic.reactor.logical.MetaLogical import jetbrains.mps.logic.reactor.program.Rule import jetbrains.mps.logic.reactor.util.allSetBits diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt index ef67f56f..168908ec 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt @@ -20,7 +20,6 @@ import jetbrains.mps.logic.reactor.core.Occurrence import jetbrains.mps.logic.reactor.core.RuleMatchEx import jetbrains.mps.logic.reactor.core.Subst import jetbrains.mps.logic.reactor.evaluation.ConstraintOccurrence -import jetbrains.mps.logic.reactor.evaluation.MatchRule import jetbrains.mps.logic.reactor.logical.Logical import jetbrains.mps.logic.reactor.logical.LogicalContext import jetbrains.mps.logic.reactor.logical.LogicalOwner diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationFailure.java b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationFailure.java index c2551025..4ab6c6c1 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationFailure.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationFailure.java @@ -44,7 +44,7 @@ public class EvaluationFailure extends EvaluationFeedback { } /** - * // FIXME need a smarter way to supercede previously reported failure with a more specific one + * // TODO need a smarter way to supercede previously reported failure with a more specific one * Constructs a more specific failure given a generic one. */ public EvaluationFailure(EvaluationFailure reason, String message) { diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationTrace.java b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationTrace.java index 3a7388a2..16b75935 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationTrace.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/EvaluationTrace.java @@ -38,19 +38,19 @@ public interface EvaluationTrace { public void discard(ConstraintOccurrence occurrence) { } - public void trying(MatchRule matchRule) { + public void trying(RuleMatch matchRule) { } - public void reject(MatchRule matchRule) { + public void reject(RuleMatch matchRule) { } - public void trigger(MatchRule matchRule) { + public void trigger(RuleMatch matchRule) { } - public void retry(MatchRule matchRule) { + public void retry(RuleMatch matchRule) { } - public void finish(MatchRule matchRule) { + public void finish(RuleMatch matchRule) { } public void tell(PredicateInvocation invocation) { @@ -72,15 +72,15 @@ public interface EvaluationTrace { void discard(ConstraintOccurrence occurrence); - void trying(MatchRule matchRule); + void trying(RuleMatch matchRule); - void reject(MatchRule matchRule); + void reject(RuleMatch matchRule); - void trigger(MatchRule matchRule); + void trigger(RuleMatch matchRule); - void retry(MatchRule matchRule); + void retry(RuleMatch matchRule); - void finish(MatchRule matchRule); + void finish(RuleMatch matchRule); void tell(PredicateInvocation invocation); diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/PredicateInvocation.java b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/PredicateInvocation.java index 40c4c68f..b2ea085d 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/PredicateInvocation.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/PredicateInvocation.java @@ -35,10 +35,5 @@ public interface PredicateInvocation { LogicalContext logicalContext(); - default InvocationContext invocationContext() { - // FIXME delete the implementation after all code has been migrated - // keep compatibitily with existing code - throw new UnsupportedOperationException(); - }; - + InvocationContext invocationContext(); } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/RuleMatch.java similarity index 94% rename from reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java rename to reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/RuleMatch.java index 6a873867..b602f973 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/RuleMatch.java @@ -23,11 +23,9 @@ import jetbrains.mps.logic.reactor.program.Rule; /** * A binding of a rule and the constraint occurrences that matched its head. * - * // FIXME rename to RuleMatch - * * @author Fedor Isakov */ -public interface MatchRule { +public interface RuleMatch { Rule rule(); diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/logical/Logical.java b/reactor/Core/src/jetbrains/mps/logic/reactor/logical/Logical.java index df415791..1cbf1d5b 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/logical/Logical.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/logical/Logical.java @@ -39,8 +39,6 @@ public interface Logical { * Returns the value associated with this logical instance. * Can be null. * Only the logical instance that is a representative can have value that is not null. - *

- * FIXME: must return the representative's value */ T value(); diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/logical/JoinableLogical.java b/reactor/Core/src/jetbrains/mps/logic/reactor/logical/MutableLogical.java similarity index 77% rename from reactor/Core/src/jetbrains/mps/logic/reactor/logical/JoinableLogical.java rename to reactor/Core/src/jetbrains/mps/logic/reactor/logical/MutableLogical.java index 5cd21ac0..c841a740 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/logical/JoinableLogical.java +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/logical/MutableLogical.java @@ -18,32 +18,31 @@ package jetbrains.mps.logic.reactor.logical; /** - * // FIXME to be renamed to MutableLogical * A logical variable that can be joined with another variable to produce a union. * * @param the value type * * @author Fedor Isakov */ -public interface JoinableLogical extends Logical { +public interface MutableLogical extends Logical { /** * Covariant override. */ - JoinableLogical findRoot(); + MutableLogical findRoot(); /** * Unions two equivalence classes of logicals. * Both the receiver and the {@code other} parameter are expected to be representatives. * The one with the highest rank becomes the representative for the new class. */ - void union(JoinableLogical other, JoinableLogical.ValueReconciler reconciler); + void union(MutableLogical other, MutableLogical.ValueReconciler reconciler); /** - * Calls {@link JoinableLogical#union(JoinableLogical , JoinableLogical.ValueReconciler) } with the default value reconciler. + * Calls {@link MutableLogical#union(MutableLogical , MutableLogical.ValueReconciler) } with the default value reconciler. * The default reconciler throws {@link java.lang.IllegalArgumentException } if the two values are not equal. */ - void union(JoinableLogical other); + void union(MutableLogical other); /** * Should only be called on a representative. diff --git a/reactor/Test/src/solver/EqualsSolver.kt b/reactor/Test/src/solver/EqualsSolver.kt index a46466bd..490db0ad 100644 --- a/reactor/Test/src/solver/EqualsSolver.kt +++ b/reactor/Test/src/solver/EqualsSolver.kt @@ -5,7 +5,7 @@ import jetbrains.mps.logic.reactor.evaluation.* import jetbrains.mps.logic.reactor.logical.Logical import jetbrains.mps.logic.reactor.logical.LogicalContext import jetbrains.mps.logic.reactor.logical.MetaLogical -import jetbrains.mps.logic.reactor.logical.JoinableLogical +import jetbrains.mps.logic.reactor.logical.MutableLogical import jetbrains.mps.logic.reactor.program.Predicate import jetbrains.mps.logic.reactor.program.PredicateSymbol @@ -26,11 +26,11 @@ class EqualsSolver : Solver { } private fun _ask(left: Any?, right: Any?): Boolean { - return if (left is JoinableLogical<*> && right is JoinableLogical<*>) { + return if (left is MutableLogical<*> && right is MutableLogical<*>) { ask_logical_logical(left, right) - } else if (left is JoinableLogical<*>) { + } else if (left is MutableLogical<*>) { ask_logical_value(left, right) - } else if (right is JoinableLogical<*>) { + } else if (right is MutableLogical<*>) { ask_value_logical(left, right) } else { ask_value_value(left, right) @@ -42,27 +42,27 @@ class EqualsSolver : Solver { } private fun _tell(left: Any?, right: Any?) { - if (left is JoinableLogical<*> && right is JoinableLogical<*>) { - tell_logical_logical(left as JoinableLogical, right as JoinableLogical) - } else if (left is JoinableLogical<*>) { - tell_logical_value(left as JoinableLogical, right) - } else if (right is JoinableLogical<*>) { - tell_value_logical(left, right as JoinableLogical) + if (left is MutableLogical<*> && right is MutableLogical<*>) { + tell_logical_logical(left as MutableLogical, right as MutableLogical) + } else if (left is MutableLogical<*>) { + tell_logical_value(left as MutableLogical, right) + } else if (right is MutableLogical<*>) { + tell_value_logical(left, right as MutableLogical) } else { tell_value_value(left, right) } } - fun ask_logical_logical(left: JoinableLogical<*>, right: JoinableLogical<*>): Boolean { + fun ask_logical_logical(left: MutableLogical<*>, right: MutableLogical<*>): Boolean { if (left.findRoot() == right.findRoot()) return true return left.isBound && right.isBound && left.findRoot().value() == right.findRoot().value() } - fun ask_logical_value(left: JoinableLogical<*>, right: Any?): Boolean { + fun ask_logical_value(left: MutableLogical<*>, right: Any?): Boolean { return left.isBound && left.findRoot().value() == right } - fun ask_value_logical(left: Any?, right: JoinableLogical<*>): Boolean { + fun ask_value_logical(left: Any?, right: MutableLogical<*>): Boolean { return right.isBound && right.findRoot().value() == left } @@ -70,7 +70,7 @@ class EqualsSolver : Solver { return left == right } - fun tell_logical_logical(left: JoinableLogical, right: JoinableLogical) { + fun tell_logical_logical(left: MutableLogical, right: MutableLogical) { if (left == right) return val leftRepr = left.findRoot() @@ -81,7 +81,7 @@ class EqualsSolver : Solver { leftRepr.union(rightRepr, { a, b -> tell_value_value(a, b)}) } - fun tell_logical_value(left: JoinableLogical, right: T?) { + fun tell_logical_value(left: MutableLogical, right: T?) { if (left.isBound) { check(left.findRoot().value() == right) } @@ -90,7 +90,7 @@ class EqualsSolver : Solver { } } - fun tell_value_logical(left: T?, right: JoinableLogical) { + fun tell_value_logical(left: T?, right: MutableLogical) { if (right.isBound) { check(right.findRoot().value() == left) } diff --git a/reactor/Test/test/LogicalHelper.kt b/reactor/Test/test/LogicalHelper.kt index da2c3e04..2c0934d9 100644 --- a/reactor/Test/test/LogicalHelper.kt +++ b/reactor/Test/test/LogicalHelper.kt @@ -1,7 +1,7 @@ import jetbrains.mps.logic.reactor.core.LogicalObserver import jetbrains.mps.logic.reactor.core.internal.anonLogical import jetbrains.mps.logic.reactor.core.internal.namedLogical -import jetbrains.mps.logic.reactor.logical.JoinableLogical +import jetbrains.mps.logic.reactor.logical.MutableLogical import jetbrains.mps.logic.reactor.logical.Logical import jetbrains.mps.logic.reactor.logical.MetaLogical import java.util.* @@ -36,7 +36,7 @@ fun Logical.get(): T = findRoot().value() fun Logical.getNullable(): T? = findRoot().value() fun Logical.set(t: T) { - if (this is JoinableLogical) + if (this is MutableLogical) findRoot().setValue(t) else throw IllegalStateException("unexpected receiver $this") diff --git a/reactor/Test/test/jetbrains/mps/unification/test/SolverTests.java b/reactor/Test/test/jetbrains/mps/unification/test/SolverTests.java index b483270f..685ea827 100644 --- a/reactor/Test/test/jetbrains/mps/unification/test/SolverTests.java +++ b/reactor/Test/test/jetbrains/mps/unification/test/SolverTests.java @@ -17,7 +17,7 @@ package jetbrains.mps.unification.test; import jetbrains.mps.logic.reactor.core.internal.LogicalImplKt; -import jetbrains.mps.logic.reactor.logical.JoinableLogical; +import jetbrains.mps.logic.reactor.logical.MutableLogical; import jetbrains.mps.logic.reactor.logical.MetaLogical; import jetbrains.mps.unification.Substitution; import jetbrains.mps.unification.Term; @@ -573,9 +573,9 @@ public class SolverTests { MetaLogical X = new MetaLogical<>("X", Term.class); MetaLogical Y = new MetaLogical<>("Y", Term.class); MetaLogical Z = new MetaLogical<>("Z", Term.class); - JoinableLogical xLogical = LogicalImplKt.logical(X); - JoinableLogical yLogical = LogicalImplKt.logical(Y); - JoinableLogical zLogical = LogicalImplKt.logical(Z); + MutableLogical xLogical = LogicalImplKt.logical(X); + MutableLogical yLogical = LogicalImplKt.logical(Y); + MutableLogical zLogical = LogicalImplKt.logical(Z); Term left = term("foo", term("bar", logicalVar(yLogical)), logicalVar(zLogical)); Term right = term("foo", term("bar", logicalVar(xLogical)), logicalVar(zLogical)); @@ -593,9 +593,9 @@ public class SolverTests { MetaLogical X = new MetaLogical<>("X", Term.class); MetaLogical Y = new MetaLogical<>("Y", Term.class); MetaLogical Z = new MetaLogical<>("Z", Term.class); - JoinableLogical xLogical = LogicalImplKt.logical(X); - JoinableLogical yLogical = LogicalImplKt.logical(Y); - JoinableLogical zLogical = LogicalImplKt.logical(Z); + MutableLogical xLogical = LogicalImplKt.logical(X); + MutableLogical yLogical = LogicalImplKt.logical(Y); + MutableLogical zLogical = LogicalImplKt.logical(Z); Term left = logicalVar(yLogical); Term right = term("foo", term("bar", logicalVar(xLogical)), logicalVar(zLogical));