diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/EvaluationSession.java b/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/EvaluationSession.java index 5fffa4ba..da4d230f 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/EvaluationSession.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/EvaluationSession.java @@ -39,23 +39,12 @@ public abstract class EvaluationSession { public abstract SessionSolver sessionSolver(); + public abstract Instructible sessionInstructible(); + + public abstract Queryable sessionQueryable(); + public abstract StoreView storeView(); - @Deprecated - public Iterable constraintSymbols() { - throw new UnsupportedOperationException(); - } - - @Deprecated - public Iterable constraintOccurrences() { - throw new UnsupportedOperationException(); - } - - @Deprecated - public Iterable constraintOccurrences(ConstraintSymbol symbol) { - throw new UnsupportedOperationException(); - } - protected static void setBackend(EvaluationSession.Backend backend) { if (ourBackend != null) { throw new IllegalStateException("backend already assigned"); diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/SessionSolver.java b/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/SessionSolver.java index bb81fba7..d1e676b3 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/SessionSolver.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/evaluation/SessionSolver.java @@ -59,20 +59,7 @@ public abstract class SessionSolver implements Instructible, Queryable { solver.tell(invocation); } - public abstract boolean queueIfBusy(Runnable runnable); - - public abstract void fail(String message); - - public Queryable lookupQueryable(Class clazz) { - for (Map.Entry e : solvers.entrySet()) { - Queryable queryable = e.getValue(); - if (clazz.isAssignableFrom(queryable.getClass())) { - return queryable; - } - } - return null; - } - + @Deprecated public abstract Class solverClass(PredicateSymbol predicateSymbol); protected abstract void registerSymbol(PredicateSymbol predicateSymbol, EvaluationTrace computingTracer); @@ -119,4 +106,5 @@ public abstract class SessionSolver implements Instructible, Queryable { private Map solvers = new HashMap(); private EvaluationTrace tracer = EvaluationTrace.NULL; + } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt index 03c3b019..985548b9 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt @@ -286,7 +286,7 @@ class Controller { profiler.profile("ask_${invocation.predicate().symbol()}", { // TODO: provide SessionSolver as part of evaluation session - val result = EvaluationSession.current().sessionSolver().ask(invocation) + val result = EvaluationSession.current().sessionQueryable().ask(invocation) // trace.ask(result, invocation) return result @@ -297,7 +297,7 @@ class Controller { // TODO: provide SessionSolver as part of evaluation session // trace.tell(invocation) - EvaluationSession.current().sessionSolver().tell(invocation) + EvaluationSession.current().sessionInstructible().tell(invocation) } } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/MemEvaluationSession.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/MemEvaluationSession.kt index fc3faf88..527dd21c 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/MemEvaluationSession.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/MemEvaluationSession.kt @@ -97,18 +97,13 @@ class MemEvaluationSession : EvaluationSession, SessionObjects { override fun sessionSolver(): SessionSolver = sessionSolver + override fun sessionInstructible(): Instructible = sessionSolver + + override fun sessionQueryable(): Queryable = sessionSolver + override fun storeView(): StoreView = controller.storeView() - override fun constraintSymbols(): Iterable = - storeView().constraintSymbols() - - override fun constraintOccurrences(): Iterable = - storeView().allOccurrences() - - override fun constraintOccurrences(symbol: ConstraintSymbol): Iterable = - storeView().occurrences(symbol) - private class Backend : EvaluationSession.Backend { val ourSession = ThreadLocal() diff --git a/reactor/Test/src/solver/EqualsSolver.kt b/reactor/Test/src/solver/EqualsSolver.kt index c6c400ce..0e265711 100644 --- a/reactor/Test/src/solver/EqualsSolver.kt +++ b/reactor/Test/src/solver/EqualsSolver.kt @@ -100,7 +100,6 @@ class EqualsSolver : Solver { if (!condition) throw EvaluationFailureException("condition is not satisfied") } - private fun ERROR(msg: String) : Nothing = throw IllegalArgumentException(msg) } infix fun Logical.eq(value: T) { diff --git a/reactor/Test/src/solver/MockSessionSolver.kt b/reactor/Test/src/solver/MockSessionSolver.kt index 4ad99260..c90a7f2c 100644 --- a/reactor/Test/src/solver/MockSessionSolver.kt +++ b/reactor/Test/src/solver/MockSessionSolver.kt @@ -1,9 +1,6 @@ package solver -import jetbrains.mps.logic.reactor.evaluation.EvaluationTrace -import jetbrains.mps.logic.reactor.evaluation.Queryable -import jetbrains.mps.logic.reactor.evaluation.SessionSolver -import jetbrains.mps.logic.reactor.evaluation.Solver +import jetbrains.mps.logic.reactor.evaluation.* import jetbrains.mps.logic.reactor.program.JavaPredicateSymbol import jetbrains.mps.logic.reactor.program.PredicateSymbol @@ -29,7 +26,4 @@ open class MockSessionSolver(val expressionSolver: Solver, val equalsSolver: Sol } } - override fun queueIfBusy(runnable: Runnable): Boolean = false - - override fun fail(message: String) = throw IllegalStateException (message) } diff --git a/reactor/Test/test/TestController.kt b/reactor/Test/test/TestController.kt index 955bf520..d5a5fcf5 100644 --- a/reactor/Test/test/TestController.kt +++ b/reactor/Test/test/TestController.kt @@ -27,10 +27,9 @@ class TestController { lateinit var controller: Controller override fun handler(): Controller = controller override fun sessionSolver(): SessionSolver = solver + override fun sessionInstructible(): Instructible = solver + override fun sessionQueryable(): Queryable = solver override fun storeView(): StoreView = TODO() - override fun constraintSymbols(): MutableIterable = TODO() - override fun constraintOccurrences(): MutableIterable = TODO() - override fun constraintOccurrences(symbol: ConstraintSymbol?): MutableIterable = TODO() class MockBackend(val session: MockSession) : Backend { override fun current(): EvaluationSession = session diff --git a/reactor/Test/test/TestProgram.kt b/reactor/Test/test/TestProgram.kt index d9b62807..f3210eb4 100644 --- a/reactor/Test/test/TestProgram.kt +++ b/reactor/Test/test/TestProgram.kt @@ -1,5 +1,6 @@ import jetbrains.mps.logic.reactor.core.MemEvaluationSession import jetbrains.mps.logic.reactor.evaluation.EvaluationSession +import jetbrains.mps.logic.reactor.evaluation.StoreView import jetbrains.mps.logic.reactor.logical.Logical import solver.MockSessionSolver import jetbrains.mps.logic.reactor.program.ConstraintSymbol @@ -25,15 +26,16 @@ class TestProgram { } } - private fun Builder.session(name: String): EvaluationSession { + private fun Builder.session(name: String): StoreView { val sessionSolver = MockSessionSolver(env.expressionSolver, env.equalsSolver) val programBuilder = ProgramBuilder(ConstraintRegistry(sessionSolver)) for (h in handlers) { programBuilder.addHandler(h) } - return EvaluationSession.newSession(programBuilder.program(name)). + val session = EvaluationSession.newSession(programBuilder.program(name)). withPredicates(PredicateSymbol("equals", 2), JavaPredicateSymbol.EXPRESSION0, JavaPredicateSymbol.EXPRESSION1, JavaPredicateSymbol.EXPRESSION2, JavaPredicateSymbol.EXPRESSION3). withParam("main", MockConstraint(ConstraintSymbol("main", 0))).start(sessionSolver) + return session.storeView() } @Test @@ -83,8 +85,8 @@ class TestProgram { ) ).session("logicalValue").run { assertEquals(setOf(ConstraintSymbol("foo", 1), ConstraintSymbol("bar", 1)), constraintSymbols()) - assertEquals(2, constraintOccurrences().count()) - val yval = constraintOccurrences(ConstraintSymbol("bar", 1)).first().arguments().first() + assertEquals(2, allOccurrences().count()) + val yval = occurrences(ConstraintSymbol("bar", 1)).first().arguments().first() assertEquals(66, (yval as Logical).get()) } } @@ -106,10 +108,10 @@ class TestProgram { ) ).session("dec").run { assertEquals(setOf(ConstraintSymbol("val", 1), ConstraintSymbol("trail", 1)), constraintSymbols()) - assertEquals(1, constraintOccurrences(ConstraintSymbol.symbol("val", 1)).count()) - val a = constraintOccurrences(ConstraintSymbol.symbol("val", 1)).first().arguments().first() + assertEquals(1, occurrences(ConstraintSymbol.symbol("val", 1)).count()) + val a = occurrences(ConstraintSymbol.symbol("val", 1)).first().arguments().first() assertEquals(0, (a as Logical).get()) - assertEquals(5, constraintOccurrences(ConstraintSymbol.symbol("trail", 1)).count()) + assertEquals(5, occurrences(ConstraintSymbol.symbol("trail", 1)).count()) } } @@ -135,8 +137,8 @@ class TestProgram { ) ) ).session("gcd").run { - assertEquals(1, constraintOccurrences().count()) - val arg = constraintOccurrences().first().arguments().first() + assertEquals(1, allOccurrences().count()) + val arg = allOccurrences().first().arguments().first() assertEquals(7, (arg as Logical).get()) } } @@ -162,8 +164,8 @@ class TestProgram { body( statement { } /* nothing */ ) ) ).session("primes").run { - assertEquals(4, constraintOccurrences().count()) - assertEquals(setOf(2,3,5,7), constraintOccurrences(ConstraintSymbol.symbol("prime", 1)). + assertEquals(4, allOccurrences().count()) + assertEquals(setOf(2,3,5,7), occurrences(ConstraintSymbol.symbol("prime", 1)). flatMap { co -> co.arguments() }. map { a -> (a as Logical).findRoot().value() }. toSet())