diff --git a/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java b/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java index 88604ac50..ecac69902 100644 --- a/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java @@ -22,22 +22,29 @@ import org.apache.poi.util.LittleEndianOutput; /** * Boolean (boolean) Stores a (java) boolean value in a formula. - * + * * @author Paul Krause (pkrause at soundbite dot com) * @author Andrew C. Oliver (acoliver at apache dot org) * @author Jason Height (jheight at chariot dot net dot au) */ public final class BoolPtg extends ScalarConstantPtg { - public final static int SIZE = 2; - public final static byte sid = 0x1D; + public static final int SIZE = 2; + public static final byte sid = 0x1D; + + private static final BoolPtg FALSE = new BoolPtg(false); + private static final BoolPtg TRUE = new BoolPtg(true); + private final boolean _value; - public BoolPtg(LittleEndianInput in) { - _value = (in.readByte() == 1); + private BoolPtg(boolean b) { + _value = b; } - public BoolPtg(String formulaToken) { - _value = (formulaToken.equalsIgnoreCase("TRUE")); + public static BoolPtg valueOf(boolean b) { + return b ? TRUE : FALSE; + } + public static BoolPtg read(LittleEndianInput in) { + return valueOf(in.readByte() == 1); } public boolean getValue() { diff --git a/src/java/org/apache/poi/hssf/record/formula/Ptg.java b/src/java/org/apache/poi/hssf/record/formula/Ptg.java index 2426249c1..dba30f322 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Ptg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Ptg.java @@ -152,7 +152,7 @@ public abstract class Ptg { case StringPtg.sid: return new StringPtg(in); // 0x17 case AttrPtg.sid: return new AttrPtg(in); // 0x19 case ErrPtg.sid: return ErrPtg.read(in); // 0x1c - case BoolPtg.sid: return new BoolPtg(in); // 0x1d + case BoolPtg.sid: return BoolPtg.read(in); // 0x1d case IntPtg.sid: return new IntPtg(in); // 0x1e case NumberPtg.sid: return new NumberPtg(in); // 0x1f } diff --git a/src/java/org/apache/poi/ss/formula/FormulaParser.java b/src/java/org/apache/poi/ss/formula/FormulaParser.java index 46d7fbfee..a750ed13f 100644 --- a/src/java/org/apache/poi/ss/formula/FormulaParser.java +++ b/src/java/org/apache/poi/ss/formula/FormulaParser.java @@ -551,7 +551,7 @@ public final class FormulaParser { return function(name); } if (name.equalsIgnoreCase("TRUE") || name.equalsIgnoreCase("FALSE")) { - return new ParseNode(new BoolPtg(name.toUpperCase())); + return new ParseNode(BoolPtg.valueOf(name.equalsIgnoreCase("TRUE"))); } if (_book == null) { // Only test cases omit the book (expecting it not to be needed)