public Object evaluate(Evaluator evaluator) { final Member[] members = tupleCalc.evaluateTuple(evaluator); if (members == null) { return null; } final boolean needToReturnNull = evaluator.needToReturnNullForUnrelatedDimension(members); if (needToReturnNull) { return null; } Member[] savedMembers = new Member[members.length]; for (int i = 0; i < members.length; i++) { savedMembers[i] = evaluator.setContext(members[i]); } Object result = evaluator.evaluateCurrent(); evaluator.setContext(savedMembers); return result; }