private Object getUseObjectAndRecompileIfNeeded()

in src/main/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SlingHTLMasterCompiler.java [388:424]


    private Object getUseObjectAndRecompileIfNeeded(Resource pojoResource)
            throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException,
                    NoSuchMethodException, InvocationTargetException {
        SourceIdentifier sourceIdentifier = new SourceIdentifier(sightlyEngineConfiguration, pojoResource.getPath());
        long sourceLastModifiedDateFromCache =
                resourceBackedPojoChangeMonitor.getLastModifiedDateForJavaUseObject(pojoResource.getPath());
        long classLastModifiedDate = classLoaderWriter.getLastModified(
                "/" + sourceIdentifier.getFullyQualifiedClassName().replaceAll("\\.", "/") + ".class");
        if (sourceLastModifiedDateFromCache == 0) {
            // first access; let's check the real last modified date of the source
            long sourceLastModifiedDate = pojoResource.getResourceMetadata().getModificationTime();
            resourceBackedPojoChangeMonitor.recordLastModifiedTimestamp(pojoResource.getPath(), sourceLastModifiedDate);
            if (classLastModifiedDate < 0 || sourceLastModifiedDate > classLastModifiedDate) {
                return compileSource(
                        sourceIdentifier,
                        IOUtils.toString(pojoResource.adaptTo(InputStream.class), StandardCharsets.UTF_8));
            } else {
                return classLoaderWriter
                        .getClassLoader()
                        .loadClass(sourceIdentifier.getFullyQualifiedClassName())
                        .getDeclaredConstructor()
                        .newInstance();
            }
        } else {
            if (sourceLastModifiedDateFromCache > classLastModifiedDate) {
                return compileSource(
                        sourceIdentifier,
                        IOUtils.toString(pojoResource.adaptTo(InputStream.class), StandardCharsets.UTF_8));
            } else {
                return classLoaderWriter
                        .getClassLoader()
                        .loadClass(sourceIdentifier.getFullyQualifiedClassName())
                        .getDeclaredConstructor()
                        .newInstance();
            }
        }
    }