SLING-9365: optimize the path lookup
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
index 035316f..c8880d1 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
@@ -45,22 +45,27 @@
     @Override
     public Resource decorate(Resource resource) {
         String path = ResourceUtil.normalize(resource.getPath());
-        String resolutionPath = resource.getResourceMetadata().getResolutionPath();
-        Resource script = getResource(resource, path);
-        if (script == resource && Resource.RESOURCE_TYPE_NON_EXISTING.equals(resource.getResourceType())) {
-            int idx = path.indexOf('.');
-            if (idx != -1) {
-                path = path.substring(0, idx);
-                script = getResource(resource, path);
-                resolutionPath = path;
+        if (this.provider.isRootOf(path)) {
+            String resolutionPath = resource.getResourceMetadata().getResolutionPath();
+            Resource script = getResource(resource, path);
+            if (script == resource && Resource.RESOURCE_TYPE_NON_EXISTING.equals(resource.getResourceType())) {
+                int idx = path.indexOf('.');
+                if (idx != -1) {
+                    path = path.substring(0, idx);
+                    script = getResource(resource, path);
+                    resolutionPath = path;
+                }
             }
-        }
-        if (script != resource) {
-            script.getResourceMetadata().putAll(resource.getResourceMetadata());
-            script.getResourceMetadata().setResolutionPath(resolutionPath);
-        }
+            if (script != resource) {
+                script.getResourceMetadata().putAll(resource.getResourceMetadata());
+                script.getResourceMetadata().setResolutionPath(resolutionPath);
+            }
 
-        return script;
+            return script;
+        }
+        else {
+            return resource;
+        }
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
index a73dce0..05ebd46 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
@@ -123,6 +123,20 @@
         }
     }
 
+    public boolean isRootOf(String path) {
+        if (path != null && path.startsWith("/")) {
+            int idx = path.indexOf('/', 1);
+            if (idx != -1) {
+                path = path.substring(0, idx);
+                return tree.get().containsKey(path);
+            } else {
+                return true;
+            }
+        } else {
+            return false;
+        }
+    }
+
     public Resource getResource(ResolveContext resolveContext, String path) {
         Resource wrapped = null;
         final ResourceProvider parentProvider = resolveContext.getParentResourceProvider();