|
Author: doogie
Date: Mon Feb 22 15:39:13 2010 New Revision: 912623 URL: http://svn.apache.org/viewvc?rev=912623&view=rev Log: CurrElem no longer creates a new string for nested expression evaluation. Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java?rev=912623&r1=912622&r2=912623&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java Mon Feb 22 15:39:13 2010 @@ -161,30 +161,40 @@ if (UtilValidate.isEmpty(expression)) { return nullExpr; } + return getInstance(expression, expression.toCharArray(), 0, expression.length(), useCache); + } + + private static FlexibleStringExpander getInstance(String expression, char[] chars, int offset, int length, boolean useCache) { + if (length == 0) { + return nullExpr; + } if (!useCache) { - return parse(expression); + return parse(chars, offset, length); } - // Remove the next three lines to cache all expressions + // Remove the next nine lines to cache all expressions if (!expression.contains(openBracket)) { - return new ConstSimpleElem(expression.toCharArray()); + if (chars.length == length) { + return new ConstSimpleElem(chars); + } else { + return new ConstOffsetElem(chars, offset, length); + } } FlexibleStringExpander fse = exprCache.get(expression); if (fse == null) { synchronized (exprCache) { - fse = parse(expression); + fse = parse(chars, offset, length); exprCache.put(expression, fse); } } return fse; } - private static FlexibleStringExpander parse(String expression) { - char[] chars = expression.toCharArray(); - FlexibleStringExpander[] strElems = getStrElems(chars, 0, chars.length); + private static FlexibleStringExpander parse(char[] chars, int offset, int length) { + FlexibleStringExpander[] strElems = getStrElems(chars, offset, length); if (strElems.length == 1) { return strElems[0]; } else { - return new Elements(chars, 0, chars.length, strElems); + return new Elements(chars, offset, length, strElems); } } @@ -472,7 +482,7 @@ String parse = new String(chars, parseStart, parseLength); int currencyPos = parse.indexOf("?currency("); int closeParen = parse.indexOf(")", currencyPos + 10); - this.codeExpr = FlexibleStringExpander.getInstance(parse.substring(currencyPos + 10, closeParen)); + this.codeExpr = FlexibleStringExpander.getInstance(parse, chars, parseStart + currencyPos + 10, closeParen - currencyPos - 10, true); this.valueStr = openBracket.concat(parse.substring(0, currencyPos)).concat(closeBracket).toCharArray(); } |
| Free forum by Nabble | Edit this page |
