Rename Handler class in reactor API to RulesList.

This commit is contained in:
Fedor Isakov 2019-05-09 15:28:55 +02:00
parent bd1c56d9d0
commit eb5b38384f
8 changed files with 51 additions and 58 deletions

View File

@ -457,7 +457,7 @@
<node concept="3uibUv" id="4MqhgXUS0Q7" role="1tU5fm">
<ref role="3uigEE" to="33ny:~List" resolve="List" />
<node concept="3uibUv" id="4MqhgXUS0Q8" role="11_B2D">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
</node>
@ -590,7 +590,7 @@
<node concept="3uibUv" id="4MqhgXUKgMf" role="3clF45">
<ref role="3uigEE" to="wyt6:~Iterable" resolve="Iterable" />
<node concept="3uibUv" id="4MqhgXUKgMg" role="11_B2D">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="3clFbS" id="4MqhgXUKgMh" role="3clF47">
@ -658,7 +658,7 @@
<node concept="3uibUv" id="4MqhgXULV52" role="1tU5fm">
<ref role="3uigEE" to="33ny:~List" resolve="List" />
<node concept="3uibUv" id="4MqhgXULVdx" role="11_B2D">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
</node>
@ -1573,7 +1573,7 @@
<node concept="3clFb_" id="4MqhgXUNDLG" role="jymVt">
<property role="TrG5h" value="toHandler" />
<node concept="3uibUv" id="4MqhgXUNEFF" role="3clF45">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
<node concept="3Tm1VV" id="4MqhgXUNDLJ" role="1B3o_S" />
<node concept="3clFbS" id="4MqhgXUNDLK" role="3clF47">
@ -1711,7 +1711,7 @@
<node concept="2tJIrI" id="4MqhgXUM$3z" role="jymVt" />
<node concept="3Tm1VV" id="4MqhgXUMzTR" role="1B3o_S" />
<node concept="3uibUv" id="4MqhgXUM$3j" role="1zkMxy">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="2tJIrI" id="4MqhgXUMzKi" role="jymVt" />
@ -1784,7 +1784,7 @@
</node>
<node concept="TZ5HA" id="2$$Q_FeW4_3" role="TZ5H$">
<node concept="1dT_AC" id="2$$Q_FeW4_4" role="1dT_Ay">
<property role="1dT_AB" value="Instance of Handler produced by toHandler() returns the rules sorted by location key." />
<property role="1dT_AB" value="Instance of RulesList produced by toHandler() returns the rules sorted by location key." />
</node>
</node>
</node>
@ -1955,7 +1955,7 @@
<property role="TrG5h" value="allHandlers" />
<node concept="A3Dl8" id="7DvO2M9UagV" role="3clF45">
<node concept="3uibUv" id="7DvO2M9UagW" role="A3Ik2">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="3Tm1VV" id="7DvO2M9UagX" role="1B3o_S" />
@ -1965,13 +1965,13 @@
<property role="TrG5h" value="allHandlers" />
<node concept="_YKpA" id="7DvO2M9Uah1" role="1tU5fm">
<node concept="3uibUv" id="7DvO2M9Uah2" role="_ZDj9">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="2ShNRf" id="7DvO2M9Uah3" role="33vP2m">
<node concept="Tc6Ow" id="7DvO2M9Uah4" role="2ShVmc">
<node concept="3uibUv" id="7DvO2M9Uah5" role="HW$YZ">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
</node>
@ -4246,7 +4246,7 @@
<node concept="37vLTG" id="4MqhgXUQrZn" role="3clF46">
<property role="TrG5h" value="handler" />
<node concept="3uibUv" id="4MqhgXUQsf0" role="1tU5fm">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="3cqZAl" id="4MqhgXUQoON" role="3clF45" />
@ -4276,7 +4276,7 @@
<ref role="3cqZAo" node="4MqhgXUQrZn" resolve="handler" />
</node>
<node concept="liA8E" id="4MqhgXUQtEx" role="2OqNvi">
<ref role="37wK5l" to="av0y:~Handler.rules():java.lang.Iterable" resolve="rules" />
<ref role="37wK5l" to="av0y:~RulesList.rules():java.lang.Iterable" resolve="rules" />
</node>
</node>
</node>
@ -4461,13 +4461,13 @@
<node concept="3Tm6S6" id="4MqhgXULVBB" role="1B3o_S" />
<node concept="_YKpA" id="4$YN6Qv0idE" role="1tU5fm">
<node concept="3uibUv" id="4$YN6Qv0idG" role="_ZDj9">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="2ShNRf" id="4$YN6Qv0kjy" role="33vP2m">
<node concept="Tc6Ow" id="4$YN6Qv0kjj" role="2ShVmc">
<node concept="3uibUv" id="4$YN6Qv0kjk" role="HW$YZ">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
</node>
@ -4913,7 +4913,7 @@
<node concept="3cpWsn" id="4MqhgXUSKVP" role="1Duv9x">
<property role="TrG5h" value="handler" />
<node concept="3uibUv" id="4MqhgXUSKVT" role="1tU5fm">
<ref role="3uigEE" to="av0y:~Handler" resolve="Handler" />
<ref role="3uigEE" to="av0y:~RulesList" resolve="RulesList" />
</node>
</node>
<node concept="2OqwBi" id="6tPOoeTbtQC" role="1DdaDG">

View File

@ -34,7 +34,7 @@ import kotlin.collections.HashMap
* FIXME handler to be renamed to RulesList
* @author Fedor Isakov
*/
class RuleIndex(handlers: Iterable<Handler>) : Iterable<Rule>, RuleLookup {
class RuleIndex(handlers: Iterable<RulesList>) : Iterable<Rule>, RuleLookup {
private val symbol2index = HashMap<ConstraintSymbol, ArgumentRuleIndex>()
@ -73,7 +73,7 @@ class RuleIndex(handlers: Iterable<Handler>) : Iterable<Rule>, RuleLookup {
override fun iterator(): Iterator<Rule> = rulesList.iterator()
private fun buildIndex(handlers: Iterable<Handler>) {
private fun buildIndex(handlers: Iterable<RulesList>) {
var ruleBit = 0
for (h in handlers) {
for (rule in h.rules()) {

View File

@ -17,11 +17,6 @@
package jetbrains.mps.logic.reactor.program;
import jetbrains.mps.logic.reactor.evaluation.InvocationContext;
import jetbrains.mps.logic.reactor.logical.LogicalContext;
import java.util.List;
/**
* A collection of handlers that constitute a constraint rules program.
*
@ -32,6 +27,6 @@ public abstract class Program {
public abstract String name();
public abstract Iterable<Handler> handlers();
public abstract Iterable<RulesList> handlers();
}

View File

@ -17,12 +17,11 @@
package jetbrains.mps.logic.reactor.program;
/**
* A handler is a container of rules.
* <p>
* FIXME to be renamed to RulesList
* A container for rules.
*
* @author Fedor Isakov
*/
public abstract class Handler {
public abstract class RulesList {
public abstract String name();

View File

@ -2,7 +2,6 @@
* @author Fedor Isakov
*/
import jetbrains.mps.logic.reactor.evaluation.EvaluationFeedback
import jetbrains.mps.logic.reactor.evaluation.InvocationContext
import jetbrains.mps.logic.reactor.evaluation.Supervisor
import jetbrains.mps.logic.reactor.logical.LogicalContext
@ -14,13 +13,13 @@ import kotlin.collections.LinkedHashMap
class ProgramBuilder(val registry: MockConstraintRegistry) {
fun program(name: String, handlers: List<Handler>): Program {
for (h in handlers) {
fun program(name: String, rulesLists: List<RulesList>): Program {
for (h in rulesLists) {
for (r in h.rules()) {
registry.update(r)
}
}
return MockProgram(name, handlers, registry)
return MockProgram(name, rulesLists, registry)
}
}
@ -29,8 +28,8 @@ class HandlerBuilder(val name: String) {
val rules = LinkedHashMap<String, Rule>()
constructor(name: String, handler: Handler) : this(name) {
for (r in handler.rules()) {
constructor(name: String, rulesList: RulesList) : this(name) {
for (r in rulesList.rules()) {
appendRule(r)
}
}
@ -39,7 +38,7 @@ class HandlerBuilder(val name: String) {
rules[rule.tag()] = rule
}
fun toHandler(): Handler = MockHandler(name, rules.values.toList())
fun toHandler(): RulesList = MockHandler(name, rules.values.toList())
}
class RuleBuilder(val tag: String) {
@ -66,7 +65,7 @@ class RuleBuilder(val tag: String) {
class MockHandler(
val name: String,
val rules: List<Rule>) : Handler() {
val rules: List<Rule>) : RulesList() {
override fun name(): String = name
@ -97,11 +96,11 @@ class MockRule(
else (kept + replaced).map { it as AndItem } + guard + body.flatten()
}
class MockProgram(val name: String, val handlers: List<Handler>, val registry: MockConstraintRegistry) : Program() {
class MockProgram(val name: String, val rulesLists: List<RulesList>, val registry: MockConstraintRegistry) : Program() {
override fun name(): String = name
override fun handlers(): Iterable<Handler> = unmodifiableCollection(handlers)
override fun handlers(): Iterable<RulesList> = unmodifiableCollection(rulesLists)
}

View File

@ -10,14 +10,14 @@ import kotlin.collections.HashMap
* @author Fedor Isakov
*/
class Builder(var handlers: List<Handler>) : RuleLookup {
class Builder(var rulesLists: List<RulesList>) : RuleLookup {
val tag2rule = HashMap<String, Rule>()
val programBuilder = ProgramBuilder(MockConstraintRegistry())
init {
handlers
rulesLists
.flatMap { it.rules() }
.forEach { r -> tag2rule[r.tag()] = r }
}
@ -29,28 +29,28 @@ class Builder(var handlers: List<Handler>) : RuleLookup {
fun ruleMatcher(): RuleMatcher = createRuleMatcher(this, rules.first().tag())
fun program(name: String): Program = programBuilder.program(name, handlers)
fun program(name: String): Program = programBuilder.program(name, rulesLists)
}
private fun createBuilder(handlerBlocks: Array<out () -> Handler>): Builder {
val handlers = ArrayList<Handler>()
for (block in handlerBlocks) {
private fun createBuilder(rulesListBlocks: Array<out () -> RulesList>): Builder {
val handlers = ArrayList<RulesList>()
for (block in rulesListBlocks) {
handlers.add(block())
}
return Builder(handlers)
}
private fun updateBuilder(builder:Builder, handlerBlocks: Array<out () -> Handler>): Builder {
val name2handler = HashMap(builder.handlers.map { it.name() to it }.toMap())
for (block in handlerBlocks) {
private fun updateBuilder(builder:Builder, rulesListBlocks: Array<out () -> RulesList>): Builder {
val name2handler = HashMap(builder.rulesLists.map { it.name() to it }.toMap())
for (block in rulesListBlocks) {
val h = block()
name2handler[h.name()] = h
}
return Builder(name2handler.values.toList())
}
private fun createHandler(name: String, vararg ruleBlocks: () -> Rule): () -> Handler = {
private fun createHandler(name: String, vararg ruleBlocks: () -> Rule): () -> RulesList = {
val hb = HandlerBuilder(name)
for (block in ruleBlocks) {
hb.appendRule(block())
@ -58,8 +58,8 @@ private fun createHandler(name: String, vararg ruleBlocks: () -> Rule): () -> Ha
hb.toHandler()
}
private fun updateHandler(name: String, handler: Handler, vararg ruleBlocks: () -> Rule): () -> Handler = {
val hb = HandlerBuilder(name, handler)
private fun updateHandler(name: String, rulesList: RulesList, vararg ruleBlocks: () -> Rule): () -> RulesList = {
val hb = HandlerBuilder(name, rulesList)
for (block in ruleBlocks) {
hb.appendRule(block())
}
@ -72,7 +72,7 @@ fun programWithRules(vararg ruleBuilders: () -> Rule): Builder =
createBuilder(arrayOf(createHandler("test", * ruleBuilders)))
fun Builder.programWithRules(vararg ruleBuilders: () -> Rule): Builder =
updateBuilder(this, arrayOf(updateHandler("test", handlers.first(), * ruleBuilders)))
updateBuilder(this, arrayOf(updateHandler("test", rulesLists.first(), * ruleBuilders)))
fun rule(tag: String, vararg component: RuleBuilder.() -> Unit): () -> Rule = {
val rb = RuleBuilder(tag)

View File

@ -58,22 +58,22 @@ class TestController {
}
private fun Builder.controller(vararg occurrences: ConstraintOccurrence): Controller {
val program = MockProgram("test", handlers, registry = MockConstraintRegistry())
val program = MockProgram("test", rulesLists, registry = MockConstraintRegistry())
MockSession.init(program, MockSupervisor())
val controller = createController(MockSupervisor(), RuleIndex(program.handlers), storeView = MockStoreView(listOf(* occurrences)))
val controller = createController(MockSupervisor(), RuleIndex(program.rulesLists), storeView = MockStoreView(listOf(* occurrences)))
MockSession.ourBackend.session.controller = controller
return controller
}
private fun Builder.controllerWithFeedback(feedbackHandler: (Rule, EvaluationFeedback) -> Boolean,
vararg occurrences: ConstraintOccurrence): Controller {
val program = MockProgram("test", handlers, registry = MockConstraintRegistry())
val program = MockProgram("test", rulesLists, registry = MockConstraintRegistry())
val supervisor = object : MockSupervisor() {
override fun handleFeedback(rule: Rule, feedback: EvaluationFeedback): Boolean =
feedbackHandler(rule, feedback)
}
MockSession.init(program, supervisor)
val controller = createController(supervisor, RuleIndex(program.handlers), storeView = MockStoreView(listOf(* occurrences)))
val controller = createController(supervisor, RuleIndex(program.rulesLists), storeView = MockStoreView(listOf(* occurrences)))
MockSession.ourBackend.session.controller = controller
return controller
}

View File

@ -545,7 +545,7 @@ class TestRuleMatcher {
constraint("qux")
))))
{
with(Dispatcher(RuleIndex(handlers)).front()) {
with(Dispatcher(RuleIndex(rulesLists)).front()) {
expand(occurrence("foo")) }.apply {
matches().count() shouldBe 0 }.run {
@ -587,7 +587,7 @@ class TestRuleMatcher {
constraint("qux")
))))
{
with(Dispatcher(RuleIndex(handlers)).front()) {
with(Dispatcher(RuleIndex(rulesLists)).front()) {
expand(occurrence("foo")) }.apply {
matches().count() shouldBe 0 }.run {
@ -656,7 +656,7 @@ class TestRuleMatcher {
constraint("qux")
))))
{
with(Dispatcher(RuleIndex(handlers)).front()) {
with(Dispatcher(RuleIndex(rulesLists)).front()) {
expand(occurrence("blin")) }.apply {
matches().count() shouldBe 0 }.run {
@ -706,7 +706,7 @@ class TestRuleMatcher {
constraint("qux")
))))
{
with(Dispatcher(RuleIndex(handlers)).front()) {
with(Dispatcher(RuleIndex(rulesLists)).front()) {
expand(occurrence("foo")) }.apply {
matches().count() shouldBe 0 }.run {
@ -759,7 +759,7 @@ class TestRuleMatcher {
))))
{
val bar = occurrence("bar")
with(Dispatcher(RuleIndex(handlers)).front()) {
with(Dispatcher(RuleIndex(rulesLists)).front()) {
expand(occurrence("foo")) }.apply {
matches().count() shouldBe 0 }.run {