public Resource resolveScript()

in src/main/java/org/apache/sling/scripting/sightly/impl/utils/ScriptDependencyResolver.java [92:129]


    public Resource resolveScript(RenderContext renderContext, String scriptIdentifier) {
        readLock.lock();
        try {
            SlingHttpServletRequest request = BindingsUtils.getRequest(renderContext.getBindings());
            String cacheKey = request.getResource().getResourceType() + ":" + scriptIdentifier;
            Resource result = null;
            if (!resolutionCache.containsKey(cacheKey)) {
                readLock.unlock();
                writeLock.lock();
                try {
                    Resource caller =
                            ResourceResolution.getResourceForRequest(scriptingResourceResolverProvider.getRequestScopedResourceResolver(),
                                    request);
                    result = ResourceResolution.getResourceFromSearchPath(caller, scriptIdentifier);
                    if (result == null) {
                        SlingScriptHelper sling = BindingsUtils.getHelper(renderContext.getBindings());
                        if (sling != null) {
                            caller = getResource(scriptingResourceResolverProvider.getRequestScopedResourceResolver(),
                                    sling.getScript().getScriptResource());
                            result = ResourceResolution.getResourceFromSearchPath(caller, scriptIdentifier);
                        }
                    }
                    if (result != null) {
                       resolutionCache.put(cacheKey, result.getPath());
                    }
                    readLock.lock();
                } finally {
                    writeLock.unlock();
                }
            } else {
                String scriptPath = resolutionCache.get(cacheKey);
                result = scriptingResourceResolverProvider.getRequestScopedResourceResolver().getResource(scriptPath);
            }
            return result;
        } finally {
            readLock.unlock();
        }
    }