Пример #1
0
  public Node applyRules(Node node, ArrayList<RewriteRule> rules) {
    modified = true;
    int count = 0;
    while (modified) {
      count++;
      if (count > MAX_ITERATIONS) {
        throw new RuntimeException("Rewriter hangs!");
      }
      modified = false;

      node =
          Traverse.transform(
              node,
              n -> {
                for (RewriteRule rule : rules) {
                  Optional<Map<Hole, Node>> unifier = Unifier.unify(rule.getPattern(), n);
                  if (unifier.isPresent()) {
                    modified = true;
                    return rule.apply(n, unifier.get());
                  }
                }
                return n;
              });
    }
    return node;
  }
 public void testGetOptions() {
   RewriteRule rule = new ApacheRewriteRule("a", "b", "0", "1");
   assertEquals(rule.getOptions().length, 2);
   assertEquals(rule.getOptions()[0], "0");
   assertEquals(rule.getOptions()[1], "1");
 }
 public void testGetSubstitution() {
   String substitution = "substitution";
   RewriteRule rule = new ApacheRewriteRule("a", substitution);
   assertEquals(rule.getSubstitution(), substitution);
 }
 public void testGetEmptyOptions() {
   RewriteRule rule = new ApacheRewriteRule("a", "b");
   assertEquals(rule.getOptions().length, 0);
 }
 public void testGetPattern() {
   String pattern = "pattern";
   RewriteRule rule = new ApacheRewriteRule(pattern, "a", "b");
   assertEquals(rule.getPattern(), pattern);
 }