From 08cf98cb4ee6263ebb122d85794120362a059db6 Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Mon, 23 Nov 2009 01:22:56 +0000 Subject: [PATCH] Removed Ptg[] parameter from method IEvaluationListener.onStartEvaluate() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@883208 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/formula/IEvaluationListener.java | 13 ++-- .../poi/ss/formula/WorkbookEvaluator.java | 2 +- .../usermodel/TestFormulaEvaluatorBugs.java | 2 +- .../usermodel/TestHSSFFormulaEvaluator.java | 3 +- .../poi/ss/formula/EvaluationListener.java | 25 ++++---- .../poi/ss/formula/TestEvaluationCache.java | 59 ++++++++++--------- 6 files changed, 51 insertions(+), 53 deletions(-) diff --git a/src/java/org/apache/poi/ss/formula/IEvaluationListener.java b/src/java/org/apache/poi/ss/formula/IEvaluationListener.java index ed3fe442b0..bad90e7401 100644 --- a/src/java/org/apache/poi/ss/formula/IEvaluationListener.java +++ b/src/java/org/apache/poi/ss/formula/IEvaluationListener.java @@ -17,21 +17,20 @@ package org.apache.poi.ss.formula; -import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Tests can implement this class to track the internal working of the {@link WorkbookEvaluator}.
- * + * * For POI internal testing use only - * + * * @author Josh Micich */ interface IEvaluationListener { /** * A (mostly) opaque interface to allow test clients to trace cache values * Each spreadsheet cell gets one unique cache entry instance. These objects - * are safe to use as keys in {@link java.util.HashMap}s + * are safe to use as keys in {@link java.util.HashMap}s */ interface ICacheEntry { ValueEval getValue(); @@ -39,13 +38,13 @@ interface IEvaluationListener { void onCacheHit(int sheetIndex, int rowIndex, int columnIndex, ValueEval result); void onReadPlainValue(int sheetIndex, int rowIndex, int columnIndex, ICacheEntry entry); - void onStartEvaluate(EvaluationCell cell, ICacheEntry entry, Ptg[] ptgs); + void onStartEvaluate(EvaluationCell cell, ICacheEntry entry); void onEndEvaluate(ICacheEntry entry, ValueEval result); void onClearWholeCache(); void onClearCachedValue(ICacheEntry entry); /** - * Internally, formula {@link ICacheEntry}s are stored in sets which may change ordering due - * to seemingly trivial changes. This method is provided to make the order of call-backs to + * Internally, formula {@link ICacheEntry}s are stored in sets which may change ordering due + * to seemingly trivial changes. This method is provided to make the order of call-backs to * {@link #onClearDependentCachedValue(ICacheEntry, int)} more deterministic. */ void sortDependentCachedValues(ICacheEntry[] formulaCells); diff --git a/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java b/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java index d043376695..ddd5f5d36d 100644 --- a/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java +++ b/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java @@ -259,7 +259,7 @@ public final class WorkbookEvaluator { if (evalListener == null) { result = evaluateFormula(ec, ptgs); } else { - evalListener.onStartEvaluate(srcCell, cce, ptgs); + evalListener.onStartEvaluate(srcCell, cce); result = evaluateFormula(ec, ptgs); evalListener.onEndEvaluate(cce, result); } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java index 939634b629..811eef0913 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java @@ -311,7 +311,7 @@ public final class TestFormulaEvaluatorBugs extends TestCase { public void onCacheHit(int sheetIndex, int srcRowNum, int srcColNum, ValueEval result) { _countCacheHits++; } - public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry, Ptg[] ptgs) { + public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry) { _countCacheMisses++; } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java index 02e383f33a..b75fb441fc 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java @@ -22,7 +22,6 @@ import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.record.NameRecord; -import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.ss.formula.EvaluationCell; @@ -179,7 +178,7 @@ public final class TestHSSFFormulaEvaluator extends TestCase { public EvalCountListener() { _evalCount = 0; } - public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry, Ptg[] ptgs) { + public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry) { _evalCount++; } public int getEvalCount() { diff --git a/src/testcases/org/apache/poi/ss/formula/EvaluationListener.java b/src/testcases/org/apache/poi/ss/formula/EvaluationListener.java index 1158c73b22..a9ea163cdf 100644 --- a/src/testcases/org/apache/poi/ss/formula/EvaluationListener.java +++ b/src/testcases/org/apache/poi/ss/formula/EvaluationListener.java @@ -17,43 +17,42 @@ package org.apache.poi.ss.formula; -import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Tests should extend this class if they need to track the internal working of the {@link WorkbookEvaluator}.
- * + * * Default method implementations all do nothing - * + * * @author Josh Micich */ public abstract class EvaluationListener implements IEvaluationListener { public void onCacheHit(int sheetIndex, int rowIndex, int columnIndex, ValueEval result) { - // do nothing + // do nothing } public void onReadPlainValue(int sheetIndex, int rowIndex, int columnIndex, ICacheEntry entry) { - // do nothing + // do nothing } - public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry, Ptg[] ptgs) { - // do nothing + public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry) { + // do nothing } public void onEndEvaluate(ICacheEntry entry, ValueEval result) { - // do nothing + // do nothing } public void onClearWholeCache() { - // do nothing + // do nothing } public void onClearCachedValue(ICacheEntry entry) { - // do nothing + // do nothing } public void onChangeFromBlankValue(int sheetIndex, int rowIndex, int columnIndex, EvaluationCell cell, ICacheEntry entry) { - // do nothing + // do nothing } public void sortDependentCachedValues(ICacheEntry[] entries) { - // do nothing + // do nothing } public void onClearDependentCachedValue(ICacheEntry entry, int depth) { - // do nothing + // do nothing } } diff --git a/src/testcases/org/apache/poi/ss/formula/TestEvaluationCache.java b/src/testcases/org/apache/poi/ss/formula/TestEvaluationCache.java index 311367b0a7..f5a89a00ce 100644 --- a/src/testcases/org/apache/poi/ss/formula/TestEvaluationCache.java +++ b/src/testcases/org/apache/poi/ss/formula/TestEvaluationCache.java @@ -36,6 +36,7 @@ import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.StringEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; +import org.apache.poi.hssf.usermodel.FormulaExtractor; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFEvaluationTestHelper; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; @@ -43,30 +44,30 @@ import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellReference; +import org.apache.poi.ss.formula.IEvaluationListener.ICacheEntry; import org.apache.poi.ss.formula.PlainCellCache.Loc; import org.apache.poi.ss.usermodel.CellValue; /** - * Tests {@link org.apache.poi.ss.formula.EvaluationCache}. Makes sure that where possible (previously calculated) cached + * Tests {@link org.apache.poi.ss.formula.EvaluationCache}. Makes sure that where possible (previously calculated) cached * values are used. Also checks that changing cell values causes the correct (minimal) set of * dependent cached values to be cleared. * * @author Josh Micich */ public class TestEvaluationCache extends TestCase { - - private static final class FormulaCellCacheEntryComparer implements Comparator { - private final Map _formulaCellsByCacheEntry; + private static final class FormulaCellCacheEntryComparer implements Comparator { - public FormulaCellCacheEntryComparer(Map formulaCellsByCacheEntry) { + private final Map _formulaCellsByCacheEntry; + + public FormulaCellCacheEntryComparer(Map formulaCellsByCacheEntry) { _formulaCellsByCacheEntry = formulaCellsByCacheEntry; } - private EvaluationCell getCell(Object a) { - return (EvaluationCell)_formulaCellsByCacheEntry.get(a); + private EvaluationCell getCell(ICacheEntry a) { + return _formulaCellsByCacheEntry.get(a); } - - public int compare(Object oa, Object ob) { + public int compare(ICacheEntry oa, ICacheEntry ob) { EvaluationCell a = getCell(oa); EvaluationCell b = getCell(ob); int cmp; @@ -84,19 +85,19 @@ public class TestEvaluationCache extends TestCase { throw new RuntimeException("Incomplete code - don't know how to order sheets"); } } - + private static final class EvalListener extends EvaluationListener { - private final List _logList; + private final List _logList; private final HSSFWorkbook _book; - private Map _formulaCellsByCacheEntry; - private Map _plainCellLocsByCacheEntry; + private Map _formulaCellsByCacheEntry; + private Map _plainCellLocsByCacheEntry; public EvalListener(HSSFWorkbook wb) { _book = wb; - _logList = new ArrayList(); - _formulaCellsByCacheEntry = new HashMap(); - _plainCellLocsByCacheEntry = new HashMap(); + _logList = new ArrayList(); + _formulaCellsByCacheEntry = new HashMap(); + _plainCellLocsByCacheEntry = new HashMap(); } public void onCacheHit(int sheetIndex, int rowIndex, int columnIndex, ValueEval result) { log("hit", rowIndex, columnIndex, result); @@ -106,20 +107,21 @@ public class TestEvaluationCache extends TestCase { _plainCellLocsByCacheEntry.put(entry, loc); log("value", rowIndex, columnIndex, entry.getValue()); } - public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry, Ptg[] ptgs) { + public void onStartEvaluate(EvaluationCell cell, ICacheEntry entry) { _formulaCellsByCacheEntry.put(entry, cell); - log("start", cell.getRowIndex(), cell.getColumnIndex(), ptgs); + HSSFCell hc = _book.getSheetAt(0).getRow(cell.getRowIndex()).getCell(cell.getColumnIndex()); + log("start", cell.getRowIndex(), cell.getColumnIndex(), FormulaExtractor.getPtgs(hc)); } public void onEndEvaluate(ICacheEntry entry, ValueEval result) { - EvaluationCell cell = (EvaluationCell) _formulaCellsByCacheEntry.get(entry); + EvaluationCell cell = _formulaCellsByCacheEntry.get(entry); log("end", cell.getRowIndex(), cell.getColumnIndex(), result); } public void onClearCachedValue(ICacheEntry entry) { int rowIndex; int columnIndex; - EvaluationCell cell = (EvaluationCell) _formulaCellsByCacheEntry.get(entry); + EvaluationCell cell = _formulaCellsByCacheEntry.get(entry); if (cell == null) { - Loc loc = (Loc)_plainCellLocsByCacheEntry.get(entry); + Loc loc = _plainCellLocsByCacheEntry.get(entry); if (loc == null) { throw new IllegalStateException("can't find cell or location"); } @@ -135,7 +137,7 @@ public class TestEvaluationCache extends TestCase { Arrays.sort(entries, new FormulaCellCacheEntryComparer(_formulaCellsByCacheEntry)); } public void onClearDependentCachedValue(ICacheEntry entry, int depth) { - EvaluationCell cell = (EvaluationCell) _formulaCellsByCacheEntry.get(entry); + EvaluationCell cell = _formulaCellsByCacheEntry.get(entry); log("clear" + depth, cell.getRowIndex(), cell.getColumnIndex(), entry.getValue()); } @@ -395,7 +397,7 @@ public class TestEvaluationCache extends TestCase { "hit B3 2", "hit C2 62", "start C3 SUM(D3:E4)", - "hit D3 16", "hit E3 17", + "hit D3 16", "hit E3 17", // "value D4 #BLANK#", "value E4 #BLANK#", "end C3 33", "end B2 91", @@ -560,7 +562,7 @@ public class TestEvaluationCache extends TestCase { confirmLog(ms, new String[] { "hit A1 14", }); - + ms.setCellValue("D1", 1); ms.getAndClearLog(); @@ -573,7 +575,7 @@ public class TestEvaluationCache extends TestCase { "end A1 15", }); } - + /** * Make sure that when blank cells are changed to value/formula cells, any dependent formulas * have their cached results cleared. @@ -601,7 +603,7 @@ public class TestEvaluationCache extends TestCase { cv = fe.evaluate(cellA1); // B1 was used to evaluate A1 assertEquals(2.2, cv.getNumberValue(), 0.0); - cellB1.setCellValue(0.4); // changing B1, so A1 cached result should be cleared + cellB1.setCellValue(0.4); // changing B1, so A1 cached result should be cleared fe.notifyUpdateCell(cellB1); cv = fe.evaluate(cellA1); if (cv.getNumberValue() == 2.2) { @@ -610,7 +612,7 @@ public class TestEvaluationCache extends TestCase { } assertEquals(2.6, cv.getNumberValue(), 0.0); } - + /** * same use-case as the test for bug 46053, but checking trace values too */ @@ -642,7 +644,7 @@ public class TestEvaluationCache extends TestCase { "end A1 2.6", }); } - + private static void confirmEvaluate(MySheet ms, String cellRefText, double expectedValue) { ValueEval v = ms.evaluateCell(cellRefText); assertEquals(NumberEval.class, v.getClass()); @@ -692,7 +694,6 @@ public class TestEvaluationCache extends TestCase { private static void debugPrint(PrintStream ps, String[] log) { for (int i = 0; i < log.length; i++) { ps.println('"' + log[i] + "\","); - } } } -- 2.39.5