Repository: camel
Updated Branches:
  refs/heads/master 19ae13a4c -> eb51dfb5f


CAMEL-5252: Simple language. Lazy eval nested functions that avoid provisional 
conversion to String value when using simple in method call OGNL expression 
style. This allows to call methods with the nested functions as-is.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/eb51dfb5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/eb51dfb5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/eb51dfb5

Branch: refs/heads/master
Commit: eb51dfb5f6519c5b11cbe08640a959a9155c24c7
Parents: 19ae13a
Author: Claus Ibsen <davscl...@apache.org>
Authored: Tue May 3 08:44:03 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue May 3 08:50:51 2016 +0200

----------------------------------------------------------------------
 .../camel/language/simple/SimpleLanguage.java   | 14 +++++++++----
 .../camel/language/simple/SimpleTokenizer.java  | 21 ++++++++++++++++++--
 2 files changed, 29 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/eb51dfb5/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java 
b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
index d77ec36..1962a1c 100644
--- 
a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
+++ 
b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
@@ -101,10 +101,6 @@ public class SimpleLanguage extends LanguageSupport {
     public SimpleLanguage() {
     }
 
-    public static boolean hasSimpleFunction(String expression) {
-        return SimpleTokenizer.hasFunctionStartToken(expression);
-    }
-
     public Predicate createPredicate(String expression) {
         ObjectHelper.notNull(expression, "expression");
 
@@ -187,6 +183,16 @@ public class SimpleLanguage extends LanguageSupport {
     }
 
     /**
+     * Does the expression include a simple function.
+     *
+     * @param expression the expression
+     * @return <tt>true</tt> if one or more simple function is included in the 
expression
+     */
+    public static boolean hasSimpleFunction(String expression) {
+        return SimpleTokenizer.hasFunctionStartToken(expression);
+    }
+
+    /**
      * Change the start tokens used for functions.
      * <p/>
      * This can be used to alter the function tokens to avoid clashes with 
other

http://git-wip-us.apache.org/repos/asf/camel/blob/eb51dfb5/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
 
b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
index 85bb775..7c3aa1b 100644
--- 
a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
+++ 
b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
@@ -85,6 +85,12 @@ public final class SimpleTokenizer {
         // static methods
     }
 
+    /**
+     * Does the expression include a simple function.
+     *
+     * @param expression the expression
+     * @return <tt>true</tt> if one or more simple function is included in the 
expression
+     */
     public static boolean hasFunctionStartToken(String expression) {
         if (expression != null) {
             for (SimpleTokenType type : KNOWN_TOKENS) {
@@ -92,6 +98,9 @@ public final class SimpleTokenizer {
                     if (expression.contains(type.getValue())) {
                         return true;
                     }
+                } else {
+                    // function start are always first
+                    return false;
                 }
             }
         }
@@ -124,9 +133,17 @@ public final class SimpleTokenizer {
             }
         }
 
-        // add in start of list as its a more common token to be used
+        // add after the start tokens
+        int pos = 0;
+        for (SimpleTokenType type : KNOWN_TOKENS) {
+            if (type.getType() == TokenType.functionStart) {
+                pos++;
+            }
+        }
+
+        // add after function start of list as its a more common token to be 
used
         for (String token : endToken) {
-            KNOWN_TOKENS.add(0, new SimpleTokenType(TokenType.functionEnd, 
token));
+            KNOWN_TOKENS.add(pos, new SimpleTokenType(TokenType.functionEnd, 
token));
         }
     }
 

Reply via email to