You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/09/12 16:25:09 UTC

svn commit: r1522593 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java

Author: mduerig
Date: Thu Sep 12 14:25:09 2013
New Revision: 1522593

URL: http://svn.apache.org/r1522593
Log:
OAK-1015 Optimise path parsing
Heuristic shortcutting path parsing

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java?rev=1522593&r1=1522592&r2=1522593&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java Thu Sep 12 14:25:09 2013
@@ -110,7 +110,7 @@ public class NamePathMapperImpl implemen
                 if (index == 0) {
                     elements.add(p);
                 } else {
-                    elements.add(p + "[" + index + "]");
+                    elements.add(p + '[' + index + ']');
                 }
                 return true;
             }
@@ -162,7 +162,25 @@ public class NamePathMapperImpl implemen
             return this.idManager.getPath(jcrPath.substring(1, length - 1));
         }
 
+        // Shortcut iff the JCR path does not start with a dot, does not contain any of
+        // {}[]/ and if it contains a colon the session does not have local re-mappings.
+        boolean hasLocalMappings = hasSessionLocalMappings();
+        boolean shortcut = length > 0 && jcrPath.charAt(0) != '.';
+        for (int i = 0; shortcut && i < length; i++) {
+            char c = jcrPath.charAt(i);
+            if (c == '{' || c == '}' || c == '[' || c == ']' || c == '/') {
+                shortcut = false;
+            } else if (c == ':') {
+                shortcut = !hasLocalMappings;
+            }
+        }
+
+        if (shortcut) {
+            return jcrPath;
+        }
+
         final StringBuilder parseErrors = new StringBuilder();
+
         PathListener listener = new PathListener() {
             @Override
             public void error(String message) {