diff --git a/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java b/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java index 4ed054467f..dfe74a72f0 100644 --- a/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java +++ b/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java @@ -624,95 +624,95 @@ public final class WorkbookEvaluator { } - /** - * returns an appropriate Eval impl instance for the Ptg. The Ptg must be - * one of: Area3DPtg, AreaPtg, ReferencePtg, Ref3DPtg, IntPtg, NumberPtg, - * StringPtg, BoolPtg
special Note: OperationPtg subtypes cannot be - * passed here! - */ - private ValueEval getEvalForPtg(Ptg ptg, OperationEvaluationContext ec) { - // consider converting all these (ptg instanceof XxxPtg) expressions to (ptg.getClass() == XxxPtg.class) + /** + * returns an appropriate Eval impl instance for the Ptg. The Ptg must be + * one of: Area3DPtg, AreaPtg, ReferencePtg, Ref3DPtg, IntPtg, NumberPtg, + * StringPtg, BoolPtg
special Note: OperationPtg subtypes cannot be + * passed here! + */ + private ValueEval getEvalForPtg(Ptg ptg, OperationEvaluationContext ec) { + // consider converting all these (ptg instanceof XxxPtg) expressions to (ptg.getClass() == XxxPtg.class) - if (ptg instanceof NamePtg) { - // Named ranges, macro functions - NamePtg namePtg = (NamePtg) ptg; - EvaluationName nameRecord = _workbook.getName(namePtg); - return getEvalForNameRecord(nameRecord, ec); - } - if (ptg instanceof NameXPtg) { - // Externally defined named ranges or macro functions - return processNameEval(ec.getNameXEval((NameXPtg)ptg), ec); - } - if (ptg instanceof NameXPxg) { - // Externally defined named ranges or macro functions - return processNameEval(ec.getNameXEval((NameXPxg)ptg), ec); - } + if (ptg instanceof NamePtg) { + // Named ranges, macro functions + NamePtg namePtg = (NamePtg) ptg; + EvaluationName nameRecord = _workbook.getName(namePtg); + return getEvalForNameRecord(nameRecord, ec); + } + if (ptg instanceof NameXPtg) { + // Externally defined named ranges or macro functions + return processNameEval(ec.getNameXEval((NameXPtg)ptg), ec); + } + if (ptg instanceof NameXPxg) { + // Externally defined named ranges or macro functions + return processNameEval(ec.getNameXEval((NameXPxg)ptg), ec); + } - if (ptg instanceof IntPtg) { + if (ptg instanceof IntPtg) { return new NumberEval(((IntPtg)ptg).getValue()); - } - if (ptg instanceof NumberPtg) { - return new NumberEval(((NumberPtg)ptg).getValue()); - } - if (ptg instanceof StringPtg) { + } + if (ptg instanceof NumberPtg) { + return new NumberEval(((NumberPtg)ptg).getValue()); + } + if (ptg instanceof StringPtg) { return new StringEval(((StringPtg) ptg).getValue()); - } - if (ptg instanceof BoolPtg) { + } + if (ptg instanceof BoolPtg) { return BoolEval.valueOf(((BoolPtg) ptg).getValue()); - } - if (ptg instanceof ErrPtg) { + } + if (ptg instanceof ErrPtg) { return ErrorEval.valueOf(((ErrPtg) ptg).getErrorCode()); - } - if (ptg instanceof MissingArgPtg) { + } + if (ptg instanceof MissingArgPtg) { return MissingArgEval.instance; - } - if (ptg instanceof AreaErrPtg ||ptg instanceof RefErrorPtg + } + if (ptg instanceof AreaErrPtg ||ptg instanceof RefErrorPtg || ptg instanceof DeletedArea3DPtg || ptg instanceof DeletedRef3DPtg) { return ErrorEval.REF_INVALID; - } - if (ptg instanceof Ref3DPtg) { + } + if (ptg instanceof Ref3DPtg) { return ec.getRef3DEval((Ref3DPtg)ptg); - } - if (ptg instanceof Ref3DPxg) { + } + if (ptg instanceof Ref3DPxg) { return ec.getRef3DEval((Ref3DPxg)ptg); - } - if (ptg instanceof Area3DPtg) { + } + if (ptg instanceof Area3DPtg) { return ec.getArea3DEval((Area3DPtg)ptg); - } - if (ptg instanceof Area3DPxg) { + } + if (ptg instanceof Area3DPxg) { return ec.getArea3DEval((Area3DPxg)ptg); - } - if (ptg instanceof RefPtg) { + } + if (ptg instanceof RefPtg) { RefPtg rptg = (RefPtg) ptg; return ec.getRefEval(rptg.getRow(), rptg.getColumn()); - } - if (ptg instanceof AreaPtg) { + } + if (ptg instanceof AreaPtg) { AreaPtg aptg = (AreaPtg) ptg; return ec.getAreaEval(aptg.getFirstRow(), aptg.getFirstColumn(), aptg.getLastRow(), aptg.getLastColumn()); - } + } - if (ptg instanceof UnknownPtg) { - // POI uses UnknownPtg when the encoded Ptg array seems to be corrupted. - // This seems to occur in very rare cases (e.g. unused name formulas in bug 44774, attachment 21790) - // In any case, formulas are re-parsed before execution, so UnknownPtg should not get here - throw new RuntimeException("UnknownPtg not allowed"); - } - if (ptg instanceof ExpPtg) { - // ExpPtg is used for array formulas and shared formulas. - // it is currently unsupported, and may not even get implemented here - throw new RuntimeException("ExpPtg currently not supported"); - } + if (ptg instanceof UnknownPtg) { + // POI uses UnknownPtg when the encoded Ptg array seems to be corrupted. + // This seems to occur in very rare cases (e.g. unused name formulas in bug 44774, attachment 21790) + // In any case, formulas are re-parsed before execution, so UnknownPtg should not get here + throw new RuntimeException("UnknownPtg not allowed"); + } + if (ptg instanceof ExpPtg) { + // ExpPtg is used for array formulas and shared formulas. + // it is currently unsupported, and may not even get implemented here + throw new RuntimeException("ExpPtg currently not supported"); + } - throw new RuntimeException("Unexpected ptg class (" + ptg.getClass().getName() + ")"); + throw new RuntimeException("Unexpected ptg class (" + ptg.getClass().getName() + ")"); } - private ValueEval processNameEval(ValueEval eval, OperationEvaluationContext ec) { - if (eval instanceof ExternalNameEval) { - EvaluationName name = ((ExternalNameEval)eval).getName(); - return getEvalForNameRecord(name, ec); - } - return eval; - } + private ValueEval processNameEval(ValueEval eval, OperationEvaluationContext ec) { + if (eval instanceof ExternalNameEval) { + EvaluationName name = ((ExternalNameEval)eval).getName(); + return getEvalForNameRecord(name, ec); + } + return eval; + } private ValueEval getEvalForNameRecord(EvaluationName nameRecord, OperationEvaluationContext ec) { if (nameRecord.isFunctionName()) { @@ -738,7 +738,8 @@ public final class WorkbookEvaluator { /** * Used by the lazy ref evals whenever they need to get the value of a contained cell. */ - /* package */ ValueEval evaluateReference(EvaluationSheet sheet, int sheetIndex, int rowIndex, + /* package */ ValueEval evaluateReference( + EvaluationSheet sheet, int sheetIndex, int rowIndex, int columnIndex, EvaluationTracker tracker) { EvaluationCell cell = sheet.getCell(rowIndex, columnIndex);