/** * Dereferences a single value from any AreaEval or RefEval evaluation result. If the supplied * evaluationResult is just a plain value, it is returned as-is. * * @return a <tt>NumberEval</tt>, <tt>StringEval</tt>, <tt>BoolEval</tt>, <tt>BlankEval</tt> or * <tt>ErrorEval</tt>. Never <code>null</code>. */ private static ValueEval dereferenceValue( ValueEval evaluationResult, int srcRowNum, int srcColNum) { if (evaluationResult instanceof RefEval) { RefEval rv = (RefEval) evaluationResult; return rv.getInnerValueEval(); } if (evaluationResult instanceof AreaEval) { AreaEval ae = (AreaEval) evaluationResult; if (ae.isRow()) { if (ae.isColumn()) { return ae.getRelativeValue(0, 0); } return ae.getValueAt(ae.getFirstRow(), srcColNum); } if (ae.isColumn()) { return ae.getValueAt(srcRowNum, ae.getFirstColumn()); } return ErrorEval.VALUE_INVALID; } return evaluationResult; }