You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2010/02/22 16:39:13 UTC

svn commit: r912623 - /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java

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();
         }