@Override
public Calendar next(Calendar cal, ExpressionContext context) {
int month = cal.get(Calendar.MONTH);
Calendar next = alignDayOfWeek((Calendar) cal.clone());
if (next.before(cal) || next.equals(cal)) {
next.set(Calendar.DAY_OF_MONTH, 1);
if (next.get(Calendar.MONTH) == month) {
next.add(Calendar.MONTH, 1);
}
alignDayOfWeek(next);