diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java
index 7ebb1850..6a873867 100644
--- a/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java
+++ b/reactor/Core/src/jetbrains/mps/logic/reactor/evaluation/MatchRule.java
@@ -23,6 +23,8 @@ 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 {
diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Handler.java b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Handler.java
index f2a277f9..625fef21 100644
--- a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Handler.java
+++ b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Handler.java
@@ -19,6 +19,7 @@ package jetbrains.mps.logic.reactor.program;
/**
* A handler is a container of rules.
*
+ * FIXME to be renamed to RulesList
* @author Fedor Isakov
*/
public abstract class Handler {
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 ca571379..943a51da 100644
--- a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Program.java
+++ b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Program.java
@@ -25,30 +25,36 @@ import java.util.List;
/**
* A collection of handlers that constitute a constraint rules program.
*
+ * FIXME a handler is to be renamed to RulesList
* @author Fedor Isakov
*/
public abstract class Program {
public abstract String name();
- public abstract Iterable constraintSymbols();
+ /**
+ * @deprecated no usages
+ * @return
+ */
+ @Deprecated
+ public Iterable constraintSymbols() { throw new UnsupportedOperationException (); }
- public abstract List> constraintArgumentTypes(ConstraintSymbol constraintSymbol);
+ /**
+ * @deprecated no usages
+ * @return
+ */
+ @Deprecated
+ public List> constraintArgumentTypes(ConstraintSymbol constraintSymbol) { throw new UnsupportedOperationException (); }
- public abstract Iterable predicateSymbols();
+ /**
+ * @deprecated no usages
+ * @return
+ */
+ @Deprecated
+ public Iterable predicateSymbols() { throw new UnsupportedOperationException (); }
public abstract Iterable handlers();
- /**
- * @deprecated use the overloaded method with InvocationContext parameter
- */
- @Deprecated
- public List> instantiateArguments(List> arguments, LogicalContext logicalContext) {
- throw new UnsupportedOperationException();
- }
-
- public List> instantiateArguments(List> arguments, LogicalContext logicalContext, InvocationContext ignore) {
- return instantiateArguments(arguments, logicalContext);
- }
+ public abstract List> instantiateArguments(List> arguments, LogicalContext logicalContext, InvocationContext invocationContext);
}
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 dda9379b..25e4b79f 100644
--- a/reactor/Core/src/jetbrains/mps/logic/reactor/program/Rule.java
+++ b/reactor/Core/src/jetbrains/mps/logic/reactor/program/Rule.java
@@ -26,8 +26,16 @@ public abstract class Rule {
public abstract Rule.Kind kind();
+ /**
+ * A tag uniquely identifies the rule.
+ */
public abstract String tag();
+ /**
+ * An origin serves as justification for all constraints affected by this rule.
+ */
+ public Object origin() { return null; }
+
public abstract Iterable headKept();
public abstract Iterable headReplaced();
diff --git a/reactor/Test/src/program/MockProgram.kt b/reactor/Test/src/program/MockProgram.kt
index 266c3780..8c4c7418 100644
--- a/reactor/Test/src/program/MockProgram.kt
+++ b/reactor/Test/src/program/MockProgram.kt
@@ -2,6 +2,7 @@
* @author Fedor Isakov
*/
+import jetbrains.mps.logic.reactor.evaluation.InvocationContext
import jetbrains.mps.logic.reactor.logical.LogicalContext
import jetbrains.mps.logic.reactor.logical.MetaLogical
import jetbrains.mps.logic.reactor.program.*
@@ -96,6 +97,7 @@ class MockProgram(val name: String, val handlers: List, val registry: M
override fun name(): String = name
+
override fun constraintSymbols(): Iterable =
registry.constraintSymbols()
@@ -105,7 +107,7 @@ class MockProgram(val name: String, val handlers: List, val registry: M
override fun predicateSymbols(): Iterable =
registry.predicateSymbols()
- override fun instantiateArguments(arguments: List<*>, logicalContext: LogicalContext): List<*> =
+ override fun instantiateArguments(arguments: List<*>, logicalContext: LogicalContext, invocationContext: InvocationContext): List<*> =
arguments.map { a ->
if (a is MetaLogical<*>) logicalContext.variable(a)
else a