apply method

List<(TreeReference, Object)> apply(
  1. FormInstance instance,
  2. EvaluationContext parentContext,
  3. TreeReference context
)

Evaluates in context (a concrete instance of originalContext) and applies the result to every matching target; returns the affected references with the result.

Implementation

List<(TreeReference, Object)> apply(
  FormInstance instance,
  EvaluationContext parentContext,
  TreeReference context,
) {
  final ungenericised = originalContext.contextualize(context)!;
  final ec = EvaluationContext.withContext(parentContext, ungenericised);
  final result = eval(instance, ec);
  final affected = <(TreeReference, Object)>[];
  for (final target in _targets) {
    final targetRef = target.contextualize(ec.contextRef)!;
    for (final ref in ec.expandReference(targetRef)!) {
      applyResult(ref, result, instance);
      affected.add((ref, result));
    }
  }
  return affected;
}