docs: protected void processConstraintsAndBinds(final RuleBuildContext context,
                                                final PatternDescr patternDescr,
                                                final Pattern pattern) {
  
          MVELDumper.MVELDumperContext mvelCtx = new MVELDumper.MVELDumperContext().setRuleContext(context);
          for (BaseDescr b : patternDescr.getDescrs()) {
              String expression;
              boolean isPositional = false;
              if (b instanceof BindingDescr) {
                  BindingDescr bind = (BindingDescr) b;
                  expression = bind.getVariable() + (bind.isUnification() ? " := " : " : ") + bind.getExpression();
              } else if (b instanceof ExprConstraintDescr) {
                  ExprConstraintDescr descr = (ExprConstraintDescr) b;
                  expression = descr.getExpression();
                  isPositional = descr.getType() == ExprConstraintDescr.Type.POSITIONAL;
              } else {
                  expression = b.getText();
              }
  
              ConstraintConnectiveDescr result = parseExpression(context,
                                                                 patternDescr,
                                                                 b,
                                                                 expression);
              if (result == null) {
                  return;
              }
  
              isPositional &= !(result.getDescrs().size() == 1 && result.getDescrs().get(0) instanceof BindingDescr);
  
              if (isPositional) {
                  processPositional(context,
                                    patternDescr,
                                    pattern,
                                    (ExprConstraintDescr) b);
              } else {
                  // need to build the actual constraint
                  List<Constraint> constraints = build(context, patternDescr, pattern, result, mvelCtx);
                  pattern.addConstraints(constraints);
              }
          }
  
          TypeDeclaration typeDeclaration = getTypeDeclaration(pattern, context);
          if (typeDeclaration != null && typeDeclaration.isPropertyReactive()) {
              for (String field : context.getRuleDescr().lookAheadFieldsOfIdentifier(patternDescr)) {
                  addFieldToPatternWatchlist(pattern, typeDeclaration, field);
              }
          }
  
          combineConstraints(context, pattern, mvelCtx);
      }