This is an automated email from the ASF dual-hosted git repository. enorman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-core.git
The following commit(s) were added to refs/heads/master by this push: new 4bcf2fd SLING-11431 cleanup many compiler and sonar warnings (#20) 4bcf2fd is described below commit 4bcf2fdc941029e03470837030cf0cf88a01083d Author: Eric Norman <enor...@apache.org> AuthorDate: Thu Jun 30 15:26:49 2022 -0700 SLING-11431 cleanup many compiler and sonar warnings (#20) --- .../apache/sling/scripting/core/ScriptHelper.java | 51 +-- .../impl/BindingsValuesProvidersByContextImpl.java | 103 +++--- .../scripting/core/impl/ContextBvpCollector.java | 36 +-- .../scripting/core/impl/DefaultSlingScript.java | 25 +- .../scripting/core/impl/InternalScriptHelper.java | 5 +- .../core/impl/ScriptCacheConsolePlugin.java | 4 +- .../sling/scripting/core/impl/ScriptCacheImpl.java | 52 ++- .../core/impl/ScriptCacheImplConfiguration.java | 4 +- .../core/impl/ScriptEngineConsolePlugin.java | 11 +- .../core/impl/ScriptingResourceResolver.java | 4 +- .../ScriptingResourceResolverProviderImpl.java | 2 +- .../core/impl/ScriptingVariablesConsolePlugin.java | 3 - .../sling/scripting/core/impl/ServiceCache.java | 26 +- .../core/impl/SlingScriptAdapterFactory.java | 21 +- .../core/impl/SlingScriptEnginePicker.java | 7 +- .../core/impl/bundled/BundledScriptContext.java | 14 +- .../scripting/core/impl/bundled/LogWriter.java | 4 +- .../sling/scripting/core/impl/bundled/Script.java | 3 +- .../core/impl/bundled/ScriptContextProvider.java | 8 +- .../scripting/core/impl/helper/CachingMap.java | 23 ++ .../scripting/core/impl/helper/OnDemandReader.java | 2 +- .../core/impl/helper/ProtectedBindings.java | 51 ++- .../core/impl/jsr223/SlingScriptEngineManager.java | 2 +- .../impl/jsr223/SortableScriptEngineFactory.java | 5 +- .../sling/scripting/core/impl/LogWriterTest.java | 357 ++++++++++----------- .../core/impl/ScriptingResourceResolverTest.java | 14 +- .../scripting/core/impl/ServiceCacheTest.java | 9 +- .../bundled/AbstractBundledRenderUnitTest.java | 1 - .../impl/bundled/BundledScriptContextTest.java | 11 +- .../scripting/core/impl/bundled/LogWriterTest.java | 7 +- .../core/impl/helper/ProtectedBindingsTest.java | 6 +- .../impl/jsr223/SlingScriptEngineManagerTest.java | 12 +- .../it/BindingsValuesProvidersByContextIT.java | 4 +- .../sling/scripting/core/it/HtmlScriptingIT.java | 18 +- 34 files changed, 497 insertions(+), 408 deletions(-) diff --git a/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java b/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java index ce6b8f1..fa7024a 100644 --- a/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java +++ b/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java @@ -21,7 +21,7 @@ package org.apache.sling.scripting.core; import java.io.IOException; import java.lang.reflect.Array; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -77,7 +77,7 @@ public class ScriptHelper implements SlingScriptHelper { * The list of references - we don't need to synchronize this as we are * running in one single request. */ - protected List<ServiceReference> references; + protected List<ServiceReference<?>> references; /** A map of found services. */ protected Map<String, Object> services; @@ -192,6 +192,7 @@ public class ScriptHelper implements SlingScriptHelper { /** * @see org.apache.sling.api.scripting.SlingScriptHelper#dispose() + * @deprecated This method is deprecated and should never be called by clients! */ @Deprecated public void dispose() { @@ -202,18 +203,18 @@ public class ScriptHelper implements SlingScriptHelper { * @see org.apache.sling.api.scripting.SlingScriptHelper#getService(java.lang.Class) */ @SuppressWarnings("unchecked") - public <ServiceType> ServiceType getService(Class<ServiceType> type) { - ServiceType service = (this.services == null ? null : (ServiceType) this.services.get(type.getName())); + public <T> T getService(Class<T> type) { + T service = (this.services == null ? null : (T) this.services.get(type.getName())); if (service == null) { - final ServiceReference ref = this.bundleContext.getServiceReference(type.getName()); + final ServiceReference<T> ref = this.bundleContext.getServiceReference(type); if (ref != null) { - service = (ServiceType) this.bundleContext.getService(ref); + service = this.bundleContext.getService(ref); if ( service != null ) { if ( this.services == null ) { - this.services = new HashMap<String, Object>(); + this.services = new HashMap<>(); } if ( this.references == null ) { - this.references = new ArrayList<ServiceReference>(); + this.references = new ArrayList<>(); } this.references.add(ref); this.services.put(type.getName(), service); @@ -227,33 +228,33 @@ public class ScriptHelper implements SlingScriptHelper { * @see org.apache.sling.api.scripting.SlingScriptHelper#getServices(java.lang.Class, java.lang.String) */ @SuppressWarnings("unchecked") - public <ServiceType> ServiceType[] getServices( - Class<ServiceType> serviceType, String filter) + public <T> T[] getServices( + Class<T> serviceType, String filter) throws InvalidServiceFilterSyntaxException { try { - final ServiceReference[] refs = this.bundleContext.getServiceReferences( - serviceType.getName(), filter); - ServiceType[] result = null; - if (refs != null) { + Collection<ServiceReference<T>> refsCollection = this.bundleContext.getServiceReferences( + serviceType, filter); + T[] result = null; + if (refsCollection != null) { // sort by service ranking (lowest first) (see ServiceReference#compareTo(Object)) - List<ServiceReference> references = Arrays.asList(refs); - Collections.sort(references); + List<ServiceReference<T>> refsList = new ArrayList<>(refsCollection); + Collections.sort(refsList); // get the highest ranking first - Collections.reverse(references); + Collections.reverse(refsList); - final List<ServiceType> objects = new ArrayList<ServiceType>(); - for (ServiceReference reference : references) { - final ServiceType service = (ServiceType) this.bundleContext.getService(reference); + final List<T> objects = new ArrayList<>(); + for (ServiceReference<T> reference : refsList) { + final T service = this.bundleContext.getService(reference); if (service != null) { if ( this.references == null ) { - this.references = new ArrayList<ServiceReference>(); + this.references = new ArrayList<>(); } this.references.add(reference); objects.add(service); } } - if (objects.size() > 0) { - ServiceType[] srv = (ServiceType[]) Array.newInstance(serviceType, objects.size()); + if (!objects.isEmpty()) { + T[] srv = (T[]) Array.newInstance(serviceType, objects.size()); result = objects.toArray(srv); } } @@ -269,9 +270,9 @@ public class ScriptHelper implements SlingScriptHelper { */ public void cleanup() { if ( this.references != null ) { - final Iterator<ServiceReference> i = this.references.iterator(); + final Iterator<ServiceReference<?>> i = this.references.iterator(); while (i.hasNext()) { - final ServiceReference ref = i.next(); + final ServiceReference<?> ref = i.next(); this.bundleContext.ungetService(ref); } this.references.clear(); diff --git a/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java b/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java index 850e5b1..9ef85f9 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java @@ -60,7 +60,7 @@ import org.slf4j.LoggerFactory; Constants.SERVICE_VENDOR + "=The Apache Software Foundation" } ) -public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvidersByContext, ServiceTrackerCustomizer { +public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvidersByContext { private final Map<String, ContextBvpCollector> customizers = new HashMap<>(); public static final String [] DEFAULT_CONTEXT_ARRAY = new String [] { DEFAULT_CONTEXT }; @@ -69,11 +69,12 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi private static final String TOPIC_MODIFIED = "org/apache/sling/scripting/core/BindingsValuesProvider/MODIFIED"; private static final String TOPIC_REMOVED = "org/apache/sling/scripting/core/BindingsValuesProvider/REMOVED"; - private ServiceTracker bvpTracker; - private ServiceTracker mapsTracker; + private ServiceTracker<BindingsValuesProvider, Object> bvpTracker; + @SuppressWarnings("rawtypes") + private ServiceTracker<Map, Object> mapsTracker; private BundleContext bundleContext; private final Logger logger = LoggerFactory.getLogger(getClass()); - private final List<ServiceReference> pendingRefs = new ArrayList<>(); + private final List<ServiceReference<?>> pendingRefs = new ArrayList<>(); @Reference private SlingScriptEngineManager scriptEngineManager; @@ -86,7 +87,11 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi private volatile EventAdmin eventAdmin; private abstract class ContextLoop { - Object apply(ServiceReference ref) { + private String [] getContexts(ServiceReference<?> reference) { + return PropertiesUtil.toStringArray(reference.getProperty(CONTEXT), new String[] { DEFAULT_CONTEXT }); + } + + Object apply(ServiceReference<?> ref) { final Object service = bundleContext.getService(ref); if(service != null) { for(String context : getContexts(ref)) { @@ -104,24 +109,26 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi } protected abstract void applyInContext(ContextBvpCollector c); - }; + } @Activate public void activate(ComponentContext ctx) { bundleContext = ctx.getBundleContext(); synchronized (pendingRefs) { - for(ServiceReference ref : pendingRefs) { + for(ServiceReference<?> ref : pendingRefs) { addingService(ref); } pendingRefs.clear(); } - bvpTracker = new ServiceTracker(bundleContext, BindingsValuesProvider.class.getName(), this); + bvpTracker = new ServiceTracker<>(bundleContext, BindingsValuesProvider.class, + new ProvidersServiceTrackerCustomizer<>()); bvpTracker.open(); // Map services can also be registered to provide bindings - mapsTracker = new ServiceTracker(bundleContext, Map.class.getName(), this); + mapsTracker = new ServiceTracker<>(bundleContext, Map.class, + new ProvidersServiceTrackerCustomizer<>()); mapsTracker.open(); } @@ -155,7 +162,7 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi if (factoryProperties != null) { String[] compatibleLangs = PropertiesUtil.toStringArray(factoryProperties.get("compatible.javax.script.name"), new String[0]); for (final String name : compatibleLangs) { - final Map<ServiceReference, BindingsValuesProvider> langProviders = bvpc.getLangBindingsValuesProviders().get(name); + final Map<ServiceReference<?>, BindingsValuesProvider> langProviders = bvpc.getLangBindingsValuesProviders().get(name); if (langProviders != null) { results.addAll(langProviders.values()); } @@ -164,7 +171,7 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi } for (final String name : scriptEngineFactory.getNames()) { - final Map<ServiceReference, BindingsValuesProvider> langProviders = bvpc.getLangBindingsValuesProviders().get(name); + final Map<ServiceReference<?>, BindingsValuesProvider> langProviders = bvpc.getLangBindingsValuesProviders().get(name); if (langProviders != null) { results.addAll(langProviders.values()); } @@ -174,18 +181,13 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi return results; } - private String [] getContexts(ServiceReference reference) { - return PropertiesUtil.toStringArray(reference.getProperty(CONTEXT), new String[] { DEFAULT_CONTEXT }); - } - - private Event newEvent(final String topic, final ServiceReference reference) { - Dictionary<String, Object> props = new Hashtable<>(); + private Event newEvent(final String topic, final ServiceReference<?> reference) { + Dictionary<String, Object> props = new Hashtable<>(); // NOSONAR props.put("service.id", reference.getProperty(Constants.SERVICE_ID)); return new Event(topic, props); } - @Override - public Object addingService(final ServiceReference reference) { + private Object addingService(final ServiceReference<?> reference) { if(bundleContext == null) { synchronized (pendingRefs) { pendingRefs.add(reference); @@ -203,35 +205,46 @@ public class BindingsValuesProvidersByContextImpl implements BindingsValuesProvi }.apply(reference); } - @Override - public void modifiedService(final ServiceReference reference, final Object service) { - new ContextLoop() { - @Override - protected void applyInContext(ContextBvpCollector c) { - c.modifiedService(reference); - if (eventAdmin != null) { - eventAdmin.postEvent(newEvent(TOPIC_MODIFIED, reference)); - } - } - }.apply(reference); - } + private class ProvidersServiceTrackerCustomizer<S, T> implements ServiceTrackerCustomizer<S, T> { - @Override - public void removedService(final ServiceReference reference, final Object service) { - if(bundleContext == null) { - synchronized (pendingRefs) { - pendingRefs.remove(reference); - } - return; + @SuppressWarnings("unchecked") + @Override + public T addingService(ServiceReference<S> reference) { + return (T)BindingsValuesProvidersByContextImpl.this.addingService(reference); } - new ContextLoop() { - @Override - protected void applyInContext(ContextBvpCollector c) { - c.removedService(reference); - if (eventAdmin != null) { - eventAdmin.postEvent(newEvent(TOPIC_REMOVED, reference)); + + @Override + public void modifiedService(ServiceReference<S> reference, T service) { + new ContextLoop() { + @Override + protected void applyInContext(ContextBvpCollector c) { + c.modifiedService(reference); + if (eventAdmin != null) { + eventAdmin.postEvent(newEvent(TOPIC_MODIFIED, reference)); + } + } + }.apply(reference); + } + + @Override + public void removedService(ServiceReference<S> reference, T service) { + if(bundleContext == null) { + synchronized (pendingRefs) { + pendingRefs.remove(reference); } + return; } - }.apply(reference); + new ContextLoop() { + @Override + protected void applyInContext(ContextBvpCollector c) { + c.removedService(reference); + if (eventAdmin != null) { + eventAdmin.postEvent(newEvent(TOPIC_REMOVED, reference)); + } + } + }.apply(reference); + } + } + } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java b/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java index b2b5071..c77914a 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ContextBvpCollector.java @@ -19,6 +19,7 @@ package org.apache.sling.scripting.core.impl; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListMap; @@ -41,21 +42,21 @@ class ContextBvpCollector { /** * The BindingsValuesProvider impls which apply to all languages. Keys are serviceIds. */ - private final Map<ServiceReference, BindingsValuesProvider> genericBindingsValuesProviders; + private final Map<ServiceReference<?>, BindingsValuesProvider> genericBindingsValuesProviders; /** * The BindingsValuesProvider impls which apply to a specific language. */ - private final Map<String, Map<ServiceReference, BindingsValuesProvider>> langBindingsValuesProviders; + private final Map<String, Map<ServiceReference<?>, BindingsValuesProvider>> langBindingsValuesProviders; ContextBvpCollector(BundleContext bc) { bundleContext = bc; - genericBindingsValuesProviders = new ConcurrentSkipListMap<ServiceReference, BindingsValuesProvider>(); - langBindingsValuesProviders = new ConcurrentHashMap<String, Map<ServiceReference, BindingsValuesProvider>>(); + genericBindingsValuesProviders = new ConcurrentSkipListMap<>(); + langBindingsValuesProviders = new ConcurrentHashMap<>(); } @SuppressWarnings("unchecked") - public Object addingService(final ServiceReference ref) { + public Object addingService(final ServiceReference<?> ref) { final String[] engineNames = PropertiesUtil .toStringArray(ref.getProperty(ScriptEngine.NAME), new String[0]); Object service = bundleContext.getService(ref); @@ -69,12 +70,7 @@ class ContextBvpCollector { genericBindingsValuesProviders.put(ref, (BindingsValuesProvider) service); } else { for (String engineName : engineNames) { - Map<ServiceReference, BindingsValuesProvider> langProviders = langBindingsValuesProviders.get(engineName); - if (langProviders == null) { - langProviders = new ConcurrentSkipListMap<ServiceReference, BindingsValuesProvider>(); - langBindingsValuesProviders.put(engineName, langProviders); - } - + Map<ServiceReference<?>, BindingsValuesProvider> langProviders = langBindingsValuesProviders.computeIfAbsent(engineName, k -> new ConcurrentSkipListMap<>()); langProviders.put(ref, (BindingsValuesProvider) service); } } @@ -82,7 +78,7 @@ class ContextBvpCollector { return service; } - public void modifiedService(final ServiceReference ref) { + public void modifiedService(final ServiceReference<?> ref) { removedService(ref); // Note that any calls to our get* methods at this // point won't see the service. We could synchronize @@ -93,19 +89,23 @@ class ContextBvpCollector { addingService(ref); } - public void removedService(final ServiceReference ref) { + public void removedService(final ServiceReference<?> ref) { if (genericBindingsValuesProviders.remove(ref) == null) { - for (Map<ServiceReference, BindingsValuesProvider> coll : langBindingsValuesProviders.values()) { + for (Map<ServiceReference<?>, BindingsValuesProvider> coll : langBindingsValuesProviders.values()) { coll.remove(ref); } } } - Map<ServiceReference, BindingsValuesProvider> getGenericBindingsValuesProviders() { + // ServiceReference type can be either Map or BindingsValuesProvider so we must use generic type + @SuppressWarnings("java:S1452") + Map<ServiceReference<?>, BindingsValuesProvider> getGenericBindingsValuesProviders() { return genericBindingsValuesProviders; } - Map<String, Map<ServiceReference, BindingsValuesProvider>> getLangBindingsValuesProviders() { + // ServiceReference type can be either Map or BindingsValuesProvider so we must use generic type + @SuppressWarnings("java:S1452") + Map<String, Map<ServiceReference<?>, BindingsValuesProvider>> getLangBindingsValuesProviders() { return langBindingsValuesProviders; } @@ -118,8 +118,8 @@ class ContextBvpCollector { } public void addBindings(Bindings bindings) { - for (String key : map.keySet()) { - bindings.put(key, map.get(key)); + for (Entry<String, Object> entry : map.entrySet()) { + bindings.put(entry.getKey(), entry.getValue()); } } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java index 1d6b25c..2fca84b 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java @@ -97,11 +97,11 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { "general page rendering performance."; /** Thread local containing the resource resolver. */ - private static ThreadLocal<ResourceResolver> requestResourceResolver = new ThreadLocal<ResourceResolver>(); + private static ThreadLocal<ResourceResolver> requestResourceResolver = new ThreadLocal<>(); /** The set of protected keys. */ private static final Set<String> PROTECTED_KEYS = - new HashSet<String>(Arrays.asList(REQUEST, RESPONSE, READER, SLING, RESOURCE, RESOLVER, OUT, LOG)); + new HashSet<>(Arrays.asList(REQUEST, RESPONSE, READER, SLING, RESOURCE, RESOLVER, OUT, LOG)); /** The resource pointing to the script. */ @@ -243,8 +243,9 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { case SlingScriptConstants.SLING_SCOPE : return slingScope; case 100: return this.engineScope; case 200: return this.globalScope; + default: + throw new IllegalArgumentException("Invalid scope"); } - throw new IllegalArgumentException("Invalid scope"); } /** @@ -403,9 +404,9 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { throw new ScriptEvaluationException(this.scriptName, "Method " + method + " not found in script.", e); } } - // optionall flush the output channel + // optional flush the output channel Object flushObject = bindings.get(FLUSH); - if (flushObject instanceof Boolean && (Boolean) flushObject) { + if (Boolean.TRUE.equals(flushObject)) { ctx.getWriter().flush(); } @@ -455,7 +456,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { */ public void init(ServletConfig servletConfig) { if (servletConfig != null) { - final Dictionary<String, String> params = new Hashtable<String, String>(); + final Dictionary<String, String> params = new Hashtable<>(); // NOSONAR for (Enumeration<?> ne = servletConfig.getInitParameterNames(); ne.hasMoreElements();) { String name = String.valueOf(ne.nextElement()); String value = servletConfig.getInitParameter(name); @@ -731,7 +732,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { } if (!bindingsValuesProviders.isEmpty()) { - Set<String> protectedKeys = new HashSet<String>(); + Set<String> protectedKeys = new HashSet<>(); protectedKeys.addAll(PROTECTED_KEYS); ProtectedBindings protectedBindings = new ProtectedBindings(bindings, protectedKeys); @@ -747,8 +748,10 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { if (request != null && request.getRequestProgressTracker() != null) { request.getRequestProgressTracker().log(String.format(BINDINGS_THRESHOLD_MESSAGE, provider.getClass().getName(), (stop-start)/1000, WARN_LIMIT_FOR_BVP_NANOS/1000)); } else { - LOGGER.info(String.format(BINDINGS_THRESHOLD_MESSAGE, provider.getClass().getName(), (stop-start)/1000, - WARN_LIMIT_FOR_BVP_NANOS/1000)); + if (LOGGER.isInfoEnabled()) { + LOGGER.info(String.format(BINDINGS_THRESHOLD_MESSAGE, provider.getClass().getName(), (stop-start)/1000, + WARN_LIMIT_FOR_BVP_NANOS/1000)); + } } } } @@ -795,7 +798,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { * This ensures that the input stream is only fetched from the repository * if it is really used by the script engines. */ - public final static class LazyInputStream extends InputStream { + public static final class LazyInputStream extends InputStream { /** The script resource which is adapted to an inputm stream. */ private final Resource resource; @@ -895,7 +898,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig { private Resource delegatee; public LazyScriptResource(final String path, final String resourceType, final ResourceResolver resolver) { - super(null); + super(null); // NOSONAR this.path = path; this.resourceType = resourceType; this.resolver = resolver; diff --git a/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java b/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java index 4b4f95e..737b284 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java @@ -51,12 +51,13 @@ public class InternalScriptHelper extends ScriptHelper { /** * @see org.apache.sling.api.scripting.SlingScriptHelper#getService(java.lang.Class) */ - public <ServiceType> ServiceType getService(Class<ServiceType> type) { + @Override + public <T> T getService(Class<T> type) { return this.serviceCache.getService(type); } @Override - public <ServiceType> ServiceType[] getServices(Class<ServiceType> serviceType, String filter) + public <T> T[] getServices(Class<T> serviceType, String filter) throws InvalidServiceFilterSyntaxException { return this.serviceCache.getServices(serviceType, filter); } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheConsolePlugin.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheConsolePlugin.java index 7503515..8285594 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheConsolePlugin.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheConsolePlugin.java @@ -49,6 +49,8 @@ import org.osgi.service.component.annotations.Reference; ) public class ScriptCacheConsolePlugin extends AbstractWebConsolePlugin { + private static final long serialVersionUID = 8073398598702884758L; + public static final String CONSOLE_LABEL = "scriptcache"; public static final String CONSOLE_TITLE = "Script Cache Status"; public static final String RESOURCES = CONSOLE_LABEL + "/ui"; @@ -83,7 +85,7 @@ public class ScriptCacheConsolePlugin extends AbstractWebConsolePlugin { StringBuilder sb = new StringBuilder(); sb.append("<script type='text/javascript' src='").append(RESOURCES).append("/").append(SCRIPTCACHE_JS).append("'></script>"); sb.append("<div id='cached-scripts' class='ui-widget statline'>"); - if (scripts.size() > 0) { + if (!scripts.isEmpty()) { Collections.sort(scripts); sb.append("<p class='ui-widget-header'>Cached Scripts</p>"); sb.append("<table class='nicetable ui-widget-content'>"); diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java index c78cef9..579e11f 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java @@ -34,8 +34,6 @@ import javax.script.Compilable; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; -import org.apache.sling.api.resource.LoginException; -import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.api.resource.observation.ExternalResourceChangeListener; import org.apache.sling.api.resource.observation.ResourceChange; @@ -79,7 +77,7 @@ import org.slf4j.LoggerFactory; */ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, ExternalResourceChangeListener, EventHandler { - private final Logger LOGGER = LoggerFactory.getLogger(ScriptCacheImpl.class); + private final Logger logger = LoggerFactory.getLogger(ScriptCacheImpl.class); public static final int DEFAULT_CACHE_SIZE = 65536; @@ -88,7 +86,6 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext private ServiceRegistration<ResourceChangeListener> resourceChangeListener; private Set<String> extensions = new HashSet<>(); private String[] additionalExtensions = new String[]{}; - private String[] searchPaths = {}; // use a static policy so that we can reconfigure the watched script files if the search paths are changed @Reference @@ -131,7 +128,7 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext try { SoftReference<CachedScript> reference = new SoftReference<>(script); internalMap.put(script.getScriptPath(), reference); - LOGGER.debug("Added script {} to script cache.", script.getScriptPath()); + logger.debug("Added script {} to script cache.", script.getScriptPath()); } finally { writeLock.unlock(); } @@ -142,7 +139,7 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext writeLock.lock(); try { internalMap.clear(); - LOGGER.debug("Cleared script cache."); + logger.debug("Cleared script cache."); } finally { writeLock.unlock(); } @@ -155,7 +152,7 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext SoftReference<CachedScript> reference = internalMap.remove(scriptPath); boolean result = reference != null; if (result) { - LOGGER.debug("Removed script {} from script cache.", scriptPath); + logger.debug("Removed script {} from script cache.", scriptPath); } return result; } finally { @@ -166,30 +163,27 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext @Override public void onChange(@NotNull List<ResourceChange> list) { for (final ResourceChange change : list) { - Runnable eventTask = new Runnable() { - @Override - public void run() { - String path = change.getPath(); - writeLock.lock(); - try { - final boolean removed = internalMap.remove(path) != null; - LOGGER.debug("Detected script change for {} - removed entry from the cache.", path); - if ( !removed && change.getType() == ChangeType.REMOVED ) { - final String prefix = path + "/"; - final Set<String> removal = new HashSet<>(); - for(final Map.Entry<String, SoftReference<CachedScript>> entry : internalMap.entrySet()) { - if ( entry.getKey().startsWith(prefix) ) { - removal.add(entry.getKey()); - } - } - for(final String key : removal) { - internalMap.remove(key); - LOGGER.debug("Detected removal for {} - removed entry {} from the cache.", path, key); + Runnable eventTask = () -> { + String path = change.getPath(); + writeLock.lock(); + try { + final boolean removed = internalMap.remove(path) != null; + logger.debug("Detected script change for {} - removed entry from the cache.", path); + if ( !removed && change.getType() == ChangeType.REMOVED ) { + final String prefix = path + "/"; + final Set<String> removal = new HashSet<>(); + for(final Map.Entry<String, SoftReference<CachedScript>> entry : internalMap.entrySet()) { + if ( entry.getKey().startsWith(prefix) ) { + removal.add(entry.getKey()); } } - } finally { - writeLock.unlock(); + for(final String key : removal) { + internalMap.remove(key); + logger.debug("Detected removal for {} - removed entry {} from the cache.", path, key); + } } + } finally { + writeLock.unlock(); } }; threadPool.execute(eventTask); @@ -238,7 +232,7 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext for (String extension : extensions) { globPatterns.add("glob:**/*." + extension); } - Dictionary<String, Object> resourceChangeListenerProperties = new Hashtable<>(); + Dictionary<String, Object> resourceChangeListenerProperties = new Hashtable<>(); // NOSONAR resourceChangeListenerProperties .put(ResourceChangeListener.PATHS, globPatterns.toArray(new String[globPatterns.size()])); resourceChangeListenerProperties.put(ResourceChangeListener.CHANGES, diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImplConfiguration.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImplConfiguration.java index 7dd865f..2d1ed30 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImplConfiguration.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImplConfiguration.java @@ -33,13 +33,13 @@ import static org.apache.sling.scripting.core.impl.ScriptCacheImpl.DEFAULT_CACHE name = "Cache Size", description = "The Cache Size defines the maximum number of compiled script references that will be stored in the cache's internal map." ) - int org_apache_sling_scripting_cache_size() default DEFAULT_CACHE_SIZE; + int org_apache_sling_scripting_cache_size() default DEFAULT_CACHE_SIZE; // NOSONAR @AttributeDefinition( name = "Additional Extensions", description = "Scripts from the search paths with these extensions will also be monitored so that changes to them will clean the cache if the cache contains them." ) - String[] org_apache_sling_scripting_cache_additional__extensions() default {}; + String[] org_apache_sling_scripting_cache_additional__extensions() default {}; // NOSONAR } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineConsolePlugin.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineConsolePlugin.java index 1b88807..2bef509 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineConsolePlugin.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptEngineConsolePlugin.java @@ -20,25 +20,18 @@ package org.apache.sling.scripting.core.impl; import java.io.IOException; import java.io.PrintWriter; -import java.util.Arrays; -import java.util.Dictionary; -import java.util.Hashtable; import java.util.Iterator; import java.util.List; import javax.script.ScriptEngineFactory; -import javax.script.ScriptEngineManager; import javax.servlet.Servlet; -import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.felix.webconsole.AbstractWebConsolePlugin; import org.apache.felix.webconsole.WebConsoleConstants; import org.apache.sling.scripting.core.impl.jsr223.SlingScriptEngineManager; -import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; -import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; @@ -55,6 +48,8 @@ import org.osgi.service.component.annotations.Reference; ) public class ScriptEngineConsolePlugin extends AbstractWebConsolePlugin { + private static final long serialVersionUID = -6444729200748932100L; + public static final String CONSOLE_LABEL = "slingscripting"; public static final String CONSOLE_TITLE = "Script Engines"; @@ -109,7 +104,7 @@ public class ScriptEngineConsolePlugin extends AbstractWebConsolePlugin { } private void printArray(PrintWriter pw, List<?> values) { - if (values == null || values.size() == 0) { + if (values == null || values.isEmpty()) { pw.println("-"); } else { for (Iterator<?> vi = values.iterator(); vi.hasNext();) { diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolver.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolver.java index f91fece..2959825 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolver.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolver.java @@ -54,11 +54,11 @@ public class ScriptingResourceResolver extends ResourceResolverWrapper { StringWriter writer = new StringWriter(); Throwable t = new Throwable(); t.printStackTrace(new PrintWriter(writer)); - LOGGER.warn("The following code attempted to close the per-request resource resolver: {}", writer.toString()); + LOGGER.warn("The following code attempted to close the per-request resource resolver: {}", writer); } } - void _close() { + void _close() { // NOSONAR delegate.close(); } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverProviderImpl.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverProviderImpl.java index fb1b8ac..dac10a9 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverProviderImpl.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverProviderImpl.java @@ -70,7 +70,7 @@ public class ScriptingResourceResolverProviderImpl implements ScriptingResourceR description = "If enabled, all calls to ResourceResolver#close for the request-scoped resource resolvers will be logged " + "with the full stack trace. Don't enable this setting on production systems." ) - boolean log_stacktrace_onclose() default false; + boolean log_stacktrace_onclose() default false; // NOSONAR } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java index 50237ac..89dca2d 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java @@ -61,9 +61,6 @@ public class ScriptingVariablesConsolePlugin extends AbstractWebConsolePlugin { @Reference private ScriptEngineManager scriptEngineManager; - public ScriptingVariablesConsolePlugin() { - } - /** * Automatically called from * <a href="https://github.com/apache/felix/blob/4a60744d0f88f351551e4cb4673eb60b8fbd21d3/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java#L510">AbstractWebConsolePlugin#spoolResource</a> diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ServiceCache.java b/src/main/java/org/apache/sling/scripting/core/impl/ServiceCache.java index d1e5062..235bbfe 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/ServiceCache.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/ServiceCache.java @@ -71,10 +71,10 @@ public class ServiceCache implements ServiceListener { */ @SuppressWarnings("unchecked") @Nullable - public <ServiceType> ServiceType getService(Class<ServiceType> type) { + public <T> T getService(Class<T> type) { SortedSet<Reference> references = getCachedReferences(type); for (Reference reference : references) { - ServiceType service = (ServiceType) reference.getService(); + T service = (T) reference.getService(); if (service != null) { return service; } @@ -84,22 +84,22 @@ public class ServiceCache implements ServiceListener { @SuppressWarnings("unchecked") @Nullable - public <ServiceType> ServiceType[] getServices(Class<ServiceType> type, String filter) { - List<ServiceType> result = new ArrayList<>(); + public <T> T[] getServices(Class<T> type, String filter) { + List<T> result = new ArrayList<>(); try { SortedSet<Reference> cachedReferences = getCachedReferences(type); - final Collection<ServiceReference<ServiceType>> filteredReferences = this.bundleContext.getServiceReferences(type, filter); + final Collection<ServiceReference<T>> filteredReferences = this.bundleContext.getServiceReferences(type, filter); if (!filteredReferences.isEmpty()) { - List<ServiceReference<ServiceType>> localFilteredReferences = new ArrayList<>(filteredReferences); + List<ServiceReference<T>> localFilteredReferences = new ArrayList<>(filteredReferences); Collections.sort(localFilteredReferences); // get the highest ranking first Collections.reverse(localFilteredReferences); - for (ServiceReference<ServiceType> serviceReference : localFilteredReferences) { + for (ServiceReference<T> serviceReference : localFilteredReferences) { Reference lookup = new Reference(serviceReference); if (cachedReferences.contains(lookup)) { for (Reference reference : cachedReferences) { if (serviceReference.equals(reference.getServiceReference())) { - ServiceType service = (ServiceType) reference.getService(); + T service = (T) reference.getService(); if (service != null) { result.add(service); } @@ -116,7 +116,7 @@ public class ServiceCache implements ServiceListener { LOGGER.error(String.format("Unable to retrieve the services of type %s.", type.getName()), e); } if (!result.isEmpty()) { - ServiceType[] srv = (ServiceType[]) Array.newInstance(type, result.size()); + T[] srv = (T[]) Array.newInstance(type, result.size()); return result.toArray(srv); } return null; @@ -143,18 +143,18 @@ public class ServiceCache implements ServiceListener { } } - private <ServiceType> SortedSet<Reference> getCachedReferences(Class<ServiceType> type) { + private <T> SortedSet<Reference> getCachedReferences(Class<T> type) { String key = type.getName(); SortedSet<Reference> references = cache.get(key); if (references == null) { references = new ConcurrentSkipListSet<>(Comparator.reverseOrder()); try { - Collection<ServiceReference<ServiceType>> serviceReferences = this.bundleContext.getServiceReferences(type, null); + Collection<ServiceReference<T>> serviceReferences = this.bundleContext.getServiceReferences(type, null); if (!serviceReferences.isEmpty()) { - List<ServiceReference<ServiceType>> localReferences = new ArrayList<>(serviceReferences); + List<ServiceReference<T>> localReferences = new ArrayList<>(serviceReferences); Collections.sort(localReferences); Collections.reverse(localReferences); - for (ServiceReference<ServiceType> ref : localReferences) { + for (ServiceReference<T> ref : localReferences) { references.add(new Reference(ref)); } synchronized (this) { diff --git a/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java b/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java index c7bc766..edb1a66 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java @@ -31,8 +31,9 @@ import org.apache.sling.scripting.core.impl.jsr223.SlingScriptEngineManager; import org.jetbrains.annotations.NotNull; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; -import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; /** @@ -87,7 +88,7 @@ public class SlingScriptAdapterFactory implements AdapterFactory, MimeTypeProvid @Override @SuppressWarnings("unchecked") - public <AdapterType> AdapterType getAdapter(@NotNull final Object adaptable, @NotNull final Class<AdapterType> type) { + public <A> A getAdapter(@NotNull final Object adaptable, @NotNull final Class<A> type) { final Resource resource = (Resource) adaptable; final String path = resource.getPath(); @@ -95,7 +96,7 @@ public class SlingScriptAdapterFactory implements AdapterFactory, MimeTypeProvid final List<ScriptEngine> engines = scriptEngineManager.getEnginesByExtension(extension); final ScriptEngine engine; - if (engines.size() == 0) { + if (engines.isEmpty()) { return null; } else if (engines.size() == 1) { engine = engines.get(0); @@ -105,7 +106,7 @@ public class SlingScriptAdapterFactory implements AdapterFactory, MimeTypeProvid if (engine != null) { final Collection<BindingsValuesProvider> bindingsValuesProviders = bindingsValuesProviderTracker.getBindingsValuesProviders(engine.getFactory(), BINDINGS_CONTEXT); // unchecked cast - return (AdapterType) new DefaultSlingScript(this.bundleContext, resource, engine, bindingsValuesProviders, this.serviceCache, scriptCache); + return (A) new DefaultSlingScript(this.bundleContext, resource, engine, bindingsValuesProviders, this.serviceCache, scriptCache); } return null; @@ -131,7 +132,7 @@ public class SlingScriptAdapterFactory implements AdapterFactory, MimeTypeProvid ScriptEngine se = scriptEngineManager.getEngineByExtension(name); if (se != null) { List<?> mimeTypes = se.getFactory().getMimeTypes(); - if (mimeTypes != null && mimeTypes.size() > 0) { + if (mimeTypes != null && !mimeTypes.isEmpty()) { return String.valueOf(mimeTypes.get(0)); } } @@ -153,7 +154,7 @@ public class SlingScriptAdapterFactory implements AdapterFactory, MimeTypeProvid ScriptEngine se = scriptEngineManager.getEngineByMimeType(mimeType); if (se != null) { List<?> extensions = se.getFactory().getExtensions(); - if (extensions != null && extensions.size() > 0) { + if (extensions != null && !extensions.isEmpty()) { return String.valueOf(extensions.get(0)); } } @@ -163,12 +164,14 @@ public class SlingScriptAdapterFactory implements AdapterFactory, MimeTypeProvid // ---------- SCR integration ---------------------------------------------- - protected void activate(ComponentContext context) { - bundleContext = context.getBundleContext(); + @Activate + protected void activate(BundleContext bc) { + bundleContext = bc; this.serviceCache = new ServiceCache(this.bundleContext); } - protected void deactivate(ComponentContext context) { + @Deactivate + protected void deactivate() { this.serviceCache.dispose(); this.serviceCache = null; this.bundleContext = null; diff --git a/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptEnginePicker.java b/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptEnginePicker.java index 666189d..fd3cc4c 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptEnginePicker.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptEnginePicker.java @@ -48,18 +48,15 @@ public class SlingScriptEnginePicker { * "html=Thymeleaf:3.0" * ] */ - private static String SLING_SCRIPTING = "sling:scripting"; + private static final String SLING_SCRIPTING = "sling:scripting"; private final Logger logger = LoggerFactory.getLogger(SlingScriptEnginePicker.class); - public SlingScriptEnginePicker() { - } - @Nullable ScriptEngine pickScriptEngine(@NotNull final List<ScriptEngine> scriptEngines, @NotNull Resource resource, @NotNull String extension) { final String scriptingMapping = findScriptingMapping(resource, extension); logger.debug("scripting mapping: {}", scriptingMapping); if (scriptingMapping == null || scriptingMapping.isEmpty()) { - return scriptEngines.size() > 0 ? scriptEngines.get(0) : null; + return !scriptEngines.isEmpty() ? scriptEngines.get(0) : null; } final Conditions conditions = parseScriptingMapping(scriptingMapping); diff --git a/src/main/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContext.java b/src/main/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContext.java index 30d85be..b82a057 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContext.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContext.java @@ -33,9 +33,14 @@ class BundledScriptContext extends SimpleScriptContext { private static final Integer[] SCOPES = {SlingScriptConstants.SLING_SCOPE, GLOBAL_SCOPE, ENGINE_SCOPE}; - private Bindings globalScope = new LazyBindings(); - private Bindings engineScope = new LazyBindings(); - private Bindings slingScope = new LazyBindings(); + private Bindings slingScope; + + public BundledScriptContext() { + super(); + globalScope = new LazyBindings(); + engineScope = new LazyBindings(); + slingScope = new LazyBindings(); + } @Override public void setBindings(final Bindings bindings, final int scope) { @@ -66,8 +71,9 @@ class BundledScriptContext extends SimpleScriptContext { return this.engineScope; case 200: return this.globalScope; + default: + throw new IllegalArgumentException("Invalid scope."); } - throw new IllegalArgumentException("Invalid scope."); } @Override diff --git a/src/main/java/org/apache/sling/scripting/core/impl/bundled/LogWriter.java b/src/main/java/org/apache/sling/scripting/core/impl/bundled/LogWriter.java index a55b450..c43bc07 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/bundled/LogWriter.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/bundled/LogWriter.java @@ -27,13 +27,13 @@ class LogWriter extends Writer { /** * The logger to which the error messages are written */ - final private Logger logger; + private final Logger logger; /** * The internal buffer to gather message data until being flushed or a CR or * LF is encountered in the message data. */ - final private StringBuilder lineBuffer; + private final StringBuilder lineBuffer; /** * Creates a writer based on the given logger. diff --git a/src/main/java/org/apache/sling/scripting/core/impl/bundled/Script.java b/src/main/java/org/apache/sling/scripting/core/impl/bundled/Script.java index f46a77e..4de7150 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/bundled/Script.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/bundled/Script.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.net.URL; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Set; import java.util.concurrent.locks.Lock; @@ -80,7 +81,7 @@ class Script extends AbstractBundledRenderUnit { @Override public InputStream getInputStream() { try { - return IOUtils.toInputStream(getSourceCode()); + return IOUtils.toInputStream(getSourceCode(), Charset.defaultCharset()); } catch (IOException e) { return null; diff --git a/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java b/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java index 02056f7..6855976 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java @@ -114,7 +114,7 @@ public class ScriptContextProvider { bindings.put(SlingBindings.SLING, scriptHelper); bindings.put(BundledRenderUnit.VARIABLE, executable); bindings.put(ScriptEngine.FILENAME, executable.getPath()); - bindings.put(ScriptEngine.FILENAME.replaceAll("\\.", "_"), executable.getPath()); + bindings.put(ScriptEngine.FILENAME.replace(".", "_"), executable.getPath()); ProtectedBindings protectedBindings = new ProtectedBindings(bindings, PROTECTED_BINDINGS); long inclusionStart = System.nanoTime(); @@ -131,8 +131,10 @@ public class ScriptContextProvider { request.getRequestProgressTracker().log(String.format(BINDINGS_THRESHOLD_MESSAGE, bindingsValuesProvider.getClass().getName(), (stop-start)/1000, WARN_LIMIT_FOR_BVP_NANOS/1000)); } else { - LOG.info(String.format(BINDINGS_THRESHOLD_MESSAGE, bindingsValuesProvider.getClass().getName(), (stop-start)/1000, - WARN_LIMIT_FOR_BVP_NANOS/1000)); + if (LOG.isInfoEnabled()) { + LOG.info(String.format(BINDINGS_THRESHOLD_MESSAGE, bindingsValuesProvider.getClass().getName(), (stop-start)/1000, + WARN_LIMIT_FOR_BVP_NANOS/1000)); + } } } } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/helper/CachingMap.java b/src/main/java/org/apache/sling/scripting/core/impl/helper/CachingMap.java index be5e973..f3cb326 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/helper/CachingMap.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/helper/CachingMap.java @@ -36,6 +36,8 @@ import java.util.Map; */ public class CachingMap<T> extends LinkedHashMap<String, SoftReference<T>> { + private static final long serialVersionUID = -3392702301736494889L; + private int capacity; /** @@ -51,4 +53,25 @@ public class CachingMap<T> extends LinkedHashMap<String, SoftReference<T>> { protected boolean removeEldestEntry(Map.Entry<String, SoftReference<T>> eldest) { return size() > capacity; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + capacity; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + CachingMap<?> other = (CachingMap<?>) obj; + return capacity != other.capacity; + } + } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReader.java b/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReader.java index d3384c6..e089e05 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReader.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReader.java @@ -48,7 +48,7 @@ class OnDemandReader extends Reader { @Override public boolean markSupported() { - return (delegatee != null) ? delegatee.markSupported() : false; + return delegatee != null && delegatee.markSupported(); } @Override diff --git a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java index c117b37..a2f8790 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java @@ -30,6 +30,8 @@ import org.jetbrains.annotations.NotNull; public class ProtectedBindings extends LazyBindings implements Bindings { + private static final long serialVersionUID = -5988579857015221345L; + private final Bindings wrapped; private final Set<String> protectedKeys; @@ -43,6 +45,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { * * @throws IllegalArgumentException if the key is protected */ + @Override public Object put(String key, Object value) { if (protectedKeys.contains(key)) { throw new IllegalArgumentException(String.format("Key %s is protected.", key)); @@ -53,10 +56,13 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * {@inheritDoc} */ + @SuppressWarnings("java:S4968") // can't fix, so stop warning about it + @Override public void putAll(Map<? extends String, ? extends Object> toMerge) { - for (String key : toMerge.keySet()) { + for (Entry<? extends String, ? extends Object> entry : toMerge.entrySet()) { + String key = entry.getKey(); if (!protectedKeys.contains(key)) { - wrapped.put(key, toMerge.get(key)); + wrapped.put(key, entry.getValue()); } } } @@ -66,6 +72,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { * * @throws IllegalArgumentException if the key is protected */ + @Override public Object remove(Object key) { if (protectedKeys.contains(key)) { throw new IllegalArgumentException(String.format("Key %s is protected.", key)); @@ -76,6 +83,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * The clear operation is not supported. */ + @Override public void clear() { throw new UnsupportedOperationException("ProtectedBindings does not support clear()"); } @@ -83,6 +91,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * {@inheritDoc} */ + @Override public boolean containsValue(Object value) { return wrapped.containsValue(value); } @@ -93,6 +102,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { * * @return an unmodifiable Set view of the map */ + @Override @NotNull public Set<Entry<String, Object>> entrySet() { return Collections.unmodifiableSet(wrapped.entrySet()); @@ -101,6 +111,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * {@inheritDoc} */ + @Override public boolean isEmpty() { return wrapped.isEmpty(); } @@ -111,6 +122,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { * * @return an unmodifiable Set view of the map's keys */ + @Override @NotNull public Set<String> keySet() { return Collections.unmodifiableSet(wrapped.keySet()); @@ -119,6 +131,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * {@inheritDoc} */ + @Override public int size() { return wrapped.size(); } @@ -129,6 +142,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { * * @return an unmodifiable Collection view of the map's values */ + @Override @NotNull public Collection<Object> values() { return Collections.unmodifiableCollection(wrapped.values()); @@ -137,6 +151,7 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * {@inheritDoc} */ + @Override public boolean containsKey(Object key) { return wrapped.containsKey(key); } @@ -144,8 +159,40 @@ public class ProtectedBindings extends LazyBindings implements Bindings { /** * {@inheritDoc} */ + @Override public Object get(Object key) { return wrapped.get(key); } + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((protectedKeys == null) ? 0 : protectedKeys.hashCode()); + result = prime * result + ((wrapped == null) ? 0 : wrapped.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + ProtectedBindings other = (ProtectedBindings) obj; + if (protectedKeys == null) { + if (other.protectedKeys != null) + return false; + } else if (!protectedKeys.equals(other.protectedKeys)) + return false; + if (wrapped == null) { + if (other.wrapped != null) + return false; + } else if (!wrapped.equals(other.wrapped)) + return false; + return true; + } + } diff --git a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java index 63db942..5939a15 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java @@ -504,7 +504,7 @@ public class SlingScriptEngineManager extends ScriptEngineManager implements Bun private void postEvent(final String topic, final ScriptEngineFactory scriptEngineFactory) { if (eventAdmin != null) { - final Dictionary<String, Object> props = new Hashtable<>(); + final Dictionary<String, Object> props = new Hashtable<>(); // NOSONAR props.put(SlingScriptConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_NAME, scriptEngineFactory.getEngineName()); props.put(SlingScriptConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_VERSION, scriptEngineFactory.getEngineVersion()); props.put(SlingScriptConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_EXTENSIONS, scriptEngineFactory.getExtensions().toArray(new String[0])); diff --git a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SortableScriptEngineFactory.java b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SortableScriptEngineFactory.java index 30a70bc..040d8fb 100644 --- a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SortableScriptEngineFactory.java +++ b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SortableScriptEngineFactory.java @@ -27,7 +27,7 @@ import javax.script.ScriptEngineFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class SortableScriptEngineFactory implements ScriptEngineFactory, Comparable { +public class SortableScriptEngineFactory implements ScriptEngineFactory, Comparable<SortableScriptEngineFactory> { private final ScriptEngineFactory delegate; private final int serviceRanking; @@ -129,8 +129,7 @@ public class SortableScriptEngineFactory implements ScriptEngineFactory, Compara } @Override - public int compareTo(@NotNull Object o) { - SortableScriptEngineFactory other = (SortableScriptEngineFactory) o; + public int compareTo(SortableScriptEngineFactory other) { if (equals(other)) { return 0; } diff --git a/src/test/java/org/apache/sling/scripting/core/impl/LogWriterTest.java b/src/test/java/org/apache/sling/scripting/core/impl/LogWriterTest.java index 812611e..a638c24 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/LogWriterTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/LogWriterTest.java @@ -20,205 +20,204 @@ package org.apache.sling.scripting.core.impl; import java.io.IOException; -import junit.framework.TestCase; - -import org.apache.sling.scripting.core.impl.LogWriter; import org.slf4j.Logger; import org.slf4j.Marker; +import junit.framework.TestCase; + public class LogWriterTest extends TestCase { public void testCharacter() { MockLogger logger = new MockLogger(); - LogWriter logWriter = new LogWriter(logger); - - // ensure logger is empty - logger.getLastMessage(); + try(LogWriter logWriter = new LogWriter(logger)) { + // ensure logger is empty + logger.getLastMessage(); - // empty flush - logWriter.flush(); - String msg = logger.getLastMessage(); - assertNull(msg); + // empty flush + logWriter.flush(); + String msg = logger.getLastMessage(); + assertNull(msg); - // write a single character, message only after flush - logWriter.write('a'); - assertNull(logger.getLastMessage()); - logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals("a", msg); + // write a single character, message only after flush + logWriter.write('a'); + assertNull(logger.getLastMessage()); + logWriter.flush(); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals("a", msg); - // write a single CR, no message - logWriter.write('\r'); - assertNull(logger.getLastMessage()); + // write a single CR, no message + logWriter.write('\r'); + assertNull(logger.getLastMessage()); - // write a single LF, no message - logWriter.write('\n'); - assertNull(logger.getLastMessage()); + // write a single LF, no message + logWriter.write('\n'); + assertNull(logger.getLastMessage()); - // write three characters (one is CR) - logWriter.write('a'); - logWriter.write('\r'); - logWriter.write('b'); + // write three characters (one is CR) + logWriter.write('a'); + logWriter.write('\r'); + logWriter.write('b'); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals("a", msg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals("a", msg); - logWriter.flush(); + logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals("b", msg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals("b", msg); - // write three characters (one is LF) - logWriter.write('a'); - logWriter.write('\n'); - logWriter.write('b'); + // write three characters (one is LF) + logWriter.write('a'); + logWriter.write('\n'); + logWriter.write('b'); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals("a", msg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals("a", msg); - logWriter.flush(); + logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals("b", msg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals("b", msg); + } } public void testStringCR() throws IOException { MockLogger logger = new MockLogger(); - LogWriter logWriter = new LogWriter(logger); - - // ensure logger is empty - logger.getLastMessage(); - - // empty flush - logWriter.flush(); - String msg = logger.getLastMessage(); - assertNull(msg); - - // intermediate CR - String tMsg1 = "Ein"; - String tMsg2 = "Text"; - String tMsg = tMsg1 + "\r" + tMsg2; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg1, msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg2, msg); - - // initial CR - tMsg = "\r" + tMsg1 + tMsg2; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNull(msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg1 + tMsg2, msg); - - // terminating CR - tMsg = tMsg1 + tMsg2 + "\r"; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg1+tMsg2, msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNull(msg); + try (LogWriter logWriter = new LogWriter(logger)) { + // ensure logger is empty + logger.getLastMessage(); + + // empty flush + logWriter.flush(); + String msg = logger.getLastMessage(); + assertNull(msg); + + // intermediate CR + String tMsg1 = "Ein"; + String tMsg2 = "Text"; + String tMsg = tMsg1 + "\r" + tMsg2; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg1, msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg2, msg); + + // initial CR + tMsg = "\r" + tMsg1 + tMsg2; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNull(msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg1 + tMsg2, msg); + + // terminating CR + tMsg = tMsg1 + tMsg2 + "\r"; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg1+tMsg2, msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNull(msg); + } } - + public void testStringLF() throws IOException { MockLogger logger = new MockLogger(); - LogWriter logWriter = new LogWriter(logger); - - // ensure logger is empty - logger.getLastMessage(); - - // empty flush - logWriter.flush(); - String msg = logger.getLastMessage(); - assertNull(msg); - - // intermediate LF - String tMsg1 = "Ein"; - String tMsg2 = "Text"; - String tMsg = tMsg1 + "\n" + tMsg2; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg1, msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg2, msg); - - // initial LF - tMsg = "\n" + tMsg1 + tMsg2; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNull(msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg1 + tMsg2, msg); - - // terminating LF - tMsg = tMsg1 + tMsg2 + "\n"; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg1+tMsg2, msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNull(msg); + try (LogWriter logWriter = new LogWriter(logger)) { + // ensure logger is empty + logger.getLastMessage(); + + // empty flush + logWriter.flush(); + String msg = logger.getLastMessage(); + assertNull(msg); + + // intermediate LF + String tMsg1 = "Ein"; + String tMsg2 = "Text"; + String tMsg = tMsg1 + "\n" + tMsg2; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg1, msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg2, msg); + + // initial LF + tMsg = "\n" + tMsg1 + tMsg2; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNull(msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg1 + tMsg2, msg); + + // terminating LF + tMsg = tMsg1 + tMsg2 + "\n"; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg1+tMsg2, msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNull(msg); + } } public void testString() throws IOException { MockLogger logger = new MockLogger(); - LogWriter logWriter = new LogWriter(logger); - - // ensure logger is empty - logger.getLastMessage(); - - // empty flush - logWriter.flush(); - String msg = logger.getLastMessage(); - assertNull(msg); - - // flushed line - String tMsg = "Ein Text"; - logWriter.write(tMsg); - msg = logger.getLastMessage(); - assertNull(msg); - - logWriter.flush(); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg, msg); - - // CR terminated line - logWriter.write(tMsg + "\r"); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg, msg); - - // LF terminated line - logWriter.write(tMsg + "\n"); - msg = logger.getLastMessage(); - assertNotNull(msg); - assertEquals(tMsg, msg); + try (LogWriter logWriter = new LogWriter(logger)) { + // ensure logger is empty + logger.getLastMessage(); + + // empty flush + logWriter.flush(); + String msg = logger.getLastMessage(); + assertNull(msg); + + // flushed line + String tMsg = "Ein Text"; + logWriter.write(tMsg); + msg = logger.getLastMessage(); + assertNull(msg); + + logWriter.flush(); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg, msg); + + // CR terminated line + logWriter.write(tMsg + "\r"); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg, msg); + + // LF terminated line + logWriter.write(tMsg + "\n"); + msg = logger.getLastMessage(); + assertNotNull(msg); + assertEquals(tMsg, msg); + } } private static class MockLogger implements Logger { @@ -239,7 +238,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void debug(String format, Object[] argArray) { + public void debug(String format, Object... argArray) { fail("Unexpected call"); } @@ -259,7 +258,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void debug(Marker marker, String format, Object[] argArray) { + public void debug(Marker marker, String format, Object... argArray) { fail("Unexpected call"); } @@ -279,7 +278,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void error(String format, Object[] argArray) { + public void error(String format, Object... argArray) { fail("Unexpected call"); } @@ -299,7 +298,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void error(Marker marker, String format, Object[] argArray) { + public void error(Marker marker, String format, Object... argArray) { fail("Unexpected call"); } @@ -323,7 +322,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void info(String format, Object[] argArray) { + public void info(String format, Object... argArray) { fail("Unexpected call"); } @@ -343,7 +342,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void info(Marker marker, String format, Object[] argArray) { + public void info(Marker marker, String format, Object... argArray) { fail("Unexpected call"); } @@ -403,7 +402,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void trace(String format, Object[] argArray) { + public void trace(String format, Object... argArray) { fail("Unexpected call"); } @@ -423,7 +422,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void trace(Marker marker, String format, Object[] argArray) { + public void trace(Marker marker, String format, Object... argArray) { fail("Unexpected call"); } @@ -443,7 +442,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void warn(String format, Object[] argArray) { + public void warn(String format, Object... argArray) { fail("Unexpected call"); } @@ -463,7 +462,7 @@ public class LogWriterTest extends TestCase { fail("Unexpected call"); } - public void warn(Marker marker, String format, Object[] argArray) { + public void warn(Marker marker, String format, Object... argArray) { fail("Unexpected call"); } diff --git a/src/test/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverTest.java b/src/test/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverTest.java index c764703..45ab297 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/ScriptingResourceResolverTest.java @@ -16,19 +16,21 @@ ******************************************************************************/ package org.apache.sling.scripting.core.impl; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import java.util.Map; import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.ResourceResolver; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; - -@SuppressWarnings({"unchecked", "deprecation"}) +@SuppressWarnings({"unchecked"}) public class ScriptingResourceResolverTest { private ScriptingResourceResolver scriptingResourceResolver; diff --git a/src/test/java/org/apache/sling/scripting/core/impl/ServiceCacheTest.java b/src/test/java/org/apache/sling/scripting/core/impl/ServiceCacheTest.java index ccbb6c0..90144e6 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/ServiceCacheTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/ServiceCacheTest.java @@ -18,21 +18,19 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ package org.apache.sling.scripting.core.impl; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + import java.util.Dictionary; import java.util.Hashtable; import org.apache.sling.testing.mock.osgi.junit.OsgiContext; -import org.apache.sling.testing.mock.sling.junit.SlingContext; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - public class ServiceCacheTest { @Rule @@ -94,6 +92,7 @@ public class ServiceCacheTest { } private static final class TestService { + @SuppressWarnings("unused") private final String service; public TestService(String service) { diff --git a/src/test/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnitTest.java b/src/test/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnitTest.java index 2c3aca2..7ba5923 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnitTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnitTest.java @@ -61,7 +61,6 @@ public class AbstractBundledRenderUnitTest { serviceCache = new ServiceCache(bundleContext); } - @SuppressWarnings({ "unchecked", "rawtypes" }) @Test public void testGetService() throws Exception { Object fooBarSvc = new Object(); diff --git a/src/test/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContextTest.java b/src/test/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContextTest.java index 342c385..41f7883 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContextTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/bundled/BundledScriptContextTest.java @@ -18,19 +18,18 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ package org.apache.sling.scripting.core.impl.bundled; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.SimpleBindings; import org.apache.sling.api.scripting.SlingScriptConstants; -import org.apache.sling.scripting.core.impl.bundled.BundledScriptContext; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - public class BundledScriptContextTest { @Test diff --git a/src/test/java/org/apache/sling/scripting/core/impl/bundled/LogWriterTest.java b/src/test/java/org/apache/sling/scripting/core/impl/bundled/LogWriterTest.java index 850a0e0..6dbc3a1 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/bundled/LogWriterTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/bundled/LogWriterTest.java @@ -18,14 +18,13 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ package org.apache.sling.scripting.core.impl.bundled; -import org.apache.sling.scripting.core.impl.bundled.LogWriter; -import org.junit.Test; -import org.slf4j.Logger; - import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; +import org.junit.Test; +import org.slf4j.Logger; + public class LogWriterTest { @Test diff --git a/src/test/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindingsTest.java b/src/test/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindingsTest.java index aeccaef..e8b2a06 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindingsTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindingsTest.java @@ -24,6 +24,8 @@ import javax.script.SimpleBindings; import org.junit.Before; import org.junit.Test; +import org.junit.Test.None; + import static org.junit.Assert.*; @@ -52,12 +54,12 @@ public class ProtectedBindingsTest { bindings.remove("test1"); } - @Test + @Test(expected=None.class) public void testAddingAllowed() { bindings.put("test2", "value2"); } - @Test + @Test(expected=None.class) public void testOverwriteNonProtectedAllowed() { bindings.put("test2", "value2"); bindings.put("test2", "value3"); diff --git a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java index 761a114..2e4b961 100644 --- a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java +++ b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java @@ -87,7 +87,9 @@ public class SlingScriptEngineManagerTest { (latch, "org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager/UPDATED"); context.registerService( EventHandler.class, eventHandler, - new HashMap<String, Object>() {{ + new HashMap<String, Object>() { + private static final long serialVersionUID = -826334194042415106L; + { put(EventConstants.EVENT_TOPIC, "org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager/*"); }} ); @@ -98,11 +100,15 @@ public class SlingScriptEngineManagerTest { .singletonList("f2/text")); ServiceRegistration<ScriptEngineFactory> f1SR = context.bundleContext().registerService(ScriptEngineFactory.class, f1, new - Hashtable<String, Object>() {{ + Hashtable<String, Object>() { + private static final long serialVersionUID = 3476669145432094983L; + { put(Constants.SERVICE_RANKING, 2); }}); context.bundleContext().registerService(ScriptEngineFactory.class, f2, new - Hashtable<String, Object>() {{ + Hashtable<String, Object>() { + private static final long serialVersionUID = 625624336896085659L; + { put(Constants.SERVICE_RANKING, 1); }}); diff --git a/src/test/java/org/apache/sling/scripting/core/it/BindingsValuesProvidersByContextIT.java b/src/test/java/org/apache/sling/scripting/core/it/BindingsValuesProvidersByContextIT.java index 31a18f8..19ad338 100644 --- a/src/test/java/org/apache/sling/scripting/core/it/BindingsValuesProvidersByContextIT.java +++ b/src/test/java/org/apache/sling/scripting/core/it/BindingsValuesProvidersByContextIT.java @@ -60,7 +60,7 @@ public class BindingsValuesProvidersByContextIT extends ScriptingCoreTestSupport @Inject private BundleContext bundleContext; - private final List<ServiceRegistration> regs = new ArrayList<ServiceRegistration>(); + private final List<ServiceRegistration<?>> regs = new ArrayList<>(); @Before public void setup() { @@ -69,7 +69,7 @@ public class BindingsValuesProvidersByContextIT extends ScriptingCoreTestSupport @After public void cleanup() { - for (ServiceRegistration reg : regs) { + for (ServiceRegistration<?> reg : regs) { reg.unregister(); } } diff --git a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java index 94794d9..0fbcf17 100644 --- a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java +++ b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java @@ -18,6 +18,15 @@ */ package org.apache.sling.scripting.core.it; +import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar; +import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingSightly; +import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingThymeleaf; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.ops4j.pax.exam.CoreOptions.composite; +import static org.ops4j.pax.exam.CoreOptions.options; +import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration; + import java.io.IOException; import javax.inject.Inject; @@ -40,15 +49,6 @@ import org.ops4j.pax.exam.spi.reactors.PerClass; import org.ops4j.pax.exam.util.Filter; import org.osgi.service.http.HttpService; -import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar; -import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingSightly; -import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingThymeleaf; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import static org.ops4j.pax.exam.CoreOptions.composite; -import static org.ops4j.pax.exam.CoreOptions.options; -import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration; - @RunWith(PaxExam.class) @ExamReactorStrategy(PerClass.class) public class HtmlScriptingIT extends ScriptingCoreTestSupport {