docs: private static boolean argsMatch(AbstractExpression e1, AbstractExpression e2) {
          final List<AbstractExpression> args1 = e1.getArgs(), args2 = e2.getArgs();
          if (args1 == null || args2 == null) {
              return args1 == args2;
          } else {
              return args1.size() == args2.size() &&
                      IntStream.range(0, args1.size())
                      .mapToObj(index -> (new FilterMatcher(args1.get(index), args2.get(index))).match())
                      .reduce(Boolean::logicalAnd).get();
          }
      }