SLING-11357 : Fix nullable/notnull annotations
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java b/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java
index 2351efd..af26010 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java
@@ -114,14 +114,14 @@
             // exclude paths
             final Set<String> excludePaths = config.getExcludedPaths().toStringSet();
             if (!excludePaths.isEmpty()) {
-                filter.setExcludedPaths(excludePaths.toArray(new String[excludePaths.size()]));
+                filter.setExcludedPaths(excludePaths.toArray(new String[0]));
             }
 
             // external
             filter.setNoExternal(!config.includeExternal());
 
             // types
-            filter.setEventTypes(this.getTypes(config));
+            filter.setEventTypes(getTypes(config));
 
             // nt:file handling
             filter.withNodeTypeAggregate(new String[]{"nt:file"}, new String[]{"", "jcr:content"});
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java b/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
index 2345899..7d1048f 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
@@ -28,6 +28,7 @@
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.jcr.resource.internal.helper.JcrPropertyMapCacheEntry;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Modifiable value map implementation leveraging the base class
@@ -82,7 +83,7 @@
      * @see java.util.Map#putAll(java.util.Map)
      */
     @Override
-    public void putAll(final Map<? extends String, ? extends Object> t) {
+    public void putAll(final @NotNull Map<? extends String, ? extends Object> t) {
         if (t != null) {
             final Iterator<?> i = t.entrySet().iterator();
             while (i.hasNext()) {
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java b/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java
index ede96f4..81e0313 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java
@@ -38,6 +38,7 @@
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.jcr.resource.internal.helper.JcrPropertyMapCacheEntry;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * This implementation of the value map allows to change
@@ -87,7 +88,7 @@
      */
     @Override
     @SuppressWarnings("unchecked")
-    public <T> T get(final String aKey, final Class<T> type) {
+    public <T> T get(final @NotNull String aKey, final @NotNull Class<T> type) {
         final String key = checkKey(aKey);
         if (type == null) {
             return (T) get(key);
@@ -105,7 +106,7 @@
      */
     @Override
     @SuppressWarnings("unchecked")
-    public <T> T get(final String aKey, final T defaultValue) {
+    public <T> @NotNull T get(final @NotNull String aKey, final @NotNull T defaultValue) {
         final String key = checkKey(aKey);
         if (defaultValue == null) {
             return (T) get(key);
@@ -173,7 +174,7 @@
      * @see java.util.Map#entrySet()
      */
     @Override
-    public Set<java.util.Map.Entry<String, Object>> entrySet() {
+    public @NotNull Set<java.util.Map.Entry<String, Object>> entrySet() {
         readFully();
         final Map<String, Object> sourceMap;
         if (cache.size() == valueCache.size()) {
@@ -188,7 +189,7 @@
      * @see java.util.Map#keySet()
      */
     @Override
-    public Set<String> keySet() {
+    public @NotNull Set<String> keySet() {
         readFully();
         return Collections.unmodifiableSet(cache.keySet());
     }
@@ -197,7 +198,7 @@
      * @see java.util.Map#values()
      */
     @Override
-    public Collection<Object> values() {
+    public @NotNull Collection<Object> values() {
         readFully();
         final Map<String, Object> sourceMap;
         if (cache.size() == valueCache.size()) {
@@ -434,7 +435,7 @@
      * @see java.util.Map#putAll(java.util.Map)
      */
     @Override
-    public void putAll(final Map<? extends String, ? extends Object> t) {
+    public void putAll(final @NotNull Map<? extends String, ? extends Object> t) {
         throw new UnsupportedOperationException();
     }
 
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/BasicQueryLanguageProvider.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/BasicQueryLanguageProvider.java
index 2bc3bfc..d3d2118 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/BasicQueryLanguageProvider.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/BasicQueryLanguageProvider.java
@@ -92,7 +92,7 @@
     }
 
     @Override
-    public Iterator<ValueMap> queryResources(final ResolveContext<JcrProviderState> ctx,
+    public Iterator<ValueMap> queryResources(final @NotNull ResolveContext<JcrProviderState> ctx,
                                              final String query,
                                              final String language) {
         final String queryLanguage = ArrayUtils.contains(getSupportedLanguages(ctx), language) ? language : DEFAULT_QUERY_LANGUAGE;
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrExternalizableInputStream.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrExternalizableInputStream.java
index f9702e9..ba26490 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrExternalizableInputStream.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrExternalizableInputStream.java
@@ -20,6 +20,7 @@
 
 
 import org.apache.sling.api.resource.external.ExternalizableInputStream;
+import org.jetbrains.annotations.NotNull;
 
 import javax.jcr.Property;
 import javax.jcr.RepositoryException;
@@ -74,7 +75,7 @@
     }
 
     @Override
-    public URI getURI() {
+    public @NotNull URI getURI() {
         return uri;
     }
 
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResource.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResource.java
index 20c4028..87ddd6f 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResource.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResource.java
@@ -33,6 +33,7 @@
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.jcr.resource.api.JcrResourceConstants;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,7 +72,7 @@
      * @see org.apache.sling.api.resource.Resource#getResourceResolver()
      */
     @Override
-    public ResourceResolver getResourceResolver() {
+    public @NotNull ResourceResolver getResourceResolver() {
         return resourceResolver;
     }
 
@@ -79,7 +80,7 @@
      * @see org.apache.sling.api.resource.Resource#getPath()
      */
     @Override
-    public String getPath() {
+    public @NotNull String getPath() {
         if (version == null) {
             return path;
         } else if (version.contains(".")) {
@@ -93,7 +94,7 @@
      * @see org.apache.sling.api.resource.Resource#getResourceMetadata()
      */
     @Override
-    public ResourceMetadata getResourceMetadata() {
+    public @NotNull ResourceMetadata getResourceMetadata() {
         return metadata;
     }
 
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
index 912ffd0..ce94337 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
@@ -41,6 +41,7 @@
 import org.apache.sling.jcr.resource.internal.JcrModifiableValueMap;
 import org.apache.sling.jcr.resource.internal.JcrValueMap;
 import org.apache.sling.jcr.resource.internal.NodeUtil;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,7 +86,7 @@
      * @see org.apache.sling.api.resource.Resource#getResourceType()
      */
     @Override
-    public String getResourceType() {
+    public @NotNull String getResourceType() {
         if (this.resourceType == null) {
             try {
                 this.resourceType = getResourceTypeForNode(getNode());
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceMetadata.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceMetadata.java
index 155464b..3707603 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceMetadata.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceMetadata.java
@@ -39,6 +39,7 @@
 import javax.jcr.ValueFormatException;
 
 import org.apache.sling.api.resource.ResourceMetadata;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -207,19 +208,19 @@
     }
 
     @Override
-    public Set<Map.Entry<String, Object>> entrySet() {
+    public @NotNull Set<Map.Entry<String, Object>> entrySet() {
         populate();
         return super.entrySet();
     }
 
     @Override
-    public Set<String> keySet() {
+    public @NotNull Set<String> keySet() {
         populate();
         return super.keySet();
     }
 
     @Override
-    public Collection<Object> values() {
+    public @NotNull Collection<Object> values() {
         populate();
         return super.values();
     }
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java
index 64daa80..e5f8284 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java
@@ -36,6 +36,8 @@
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,11 +68,11 @@
         this.getResourceMetadata().setContentLength(getContentLength(property));
     }
 
-    public String getResourceType() {
+    public @NotNull String getResourceType() {
         return resourceType;
     }
 
-    public String getResourceSuperType() {
+    public @Nullable String getResourceSuperType() {
         return null;
     }
 
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
index d9cbf5c..57713b4 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
@@ -187,7 +187,7 @@
     }
 
     @Override
-    public void start(final ProviderContext ctx) {
+    public void start(final @NotNull ProviderContext ctx) {
         super.start(ctx);
         this.registerListeners();
     }
@@ -311,8 +311,10 @@
     }
 
     @Override
-    public void logout(final @NotNull JcrProviderState state) {
-        state.logout();
+    public void logout(final @Nullable JcrProviderState state) {
+        if (state != null) {
+            state.logout();
+        }
     }
 
     @Override
@@ -321,7 +323,9 @@
     }
 
     @Override
-    public Resource getResource(ResolveContext<JcrProviderState> ctx, String path, ResourceContext rCtx, Resource parent) {
+    @Nullable
+    public Resource getResource(@NotNull ResolveContext<JcrProviderState> ctx, @NotNull String path, 
+                                @NotNull ResourceContext rCtx, @Nullable Resource parent) {
         try {
             return ctx.getProviderState().getResourceFactory().createResource(ctx.getResourceResolver(), path, parent, rCtx.getResolveParameters());
         } catch (RepositoryException e) {
@@ -330,7 +334,8 @@
     }
 
     @Override
-    public Iterator<Resource> listChildren(ResolveContext<JcrProviderState> ctx, Resource parent) {
+    @Nullable
+    public Iterator<Resource> listChildren(@NotNull ResolveContext<JcrProviderState> ctx, @NotNull Resource parent) {
         JcrItemResource<?> parentItemResource;
 
         // short cut for known JCR resources
@@ -377,6 +382,7 @@
     }
 
     @Override
+    @NotNull
     public Collection<String> getAttributeNames(final @NotNull ResolveContext<JcrProviderState> ctx) {
         final Set<String> names = new HashSet<>();
         final String[] sessionNames = ctx.getProviderState().getSession().getAttributeNames();
@@ -389,6 +395,7 @@
     }
 
     @Override
+    @Nullable
     public Object getAttribute(final @NotNull ResolveContext<JcrProviderState> ctx, final @NotNull String name) {
         if (isAttributeVisible(name)) {
             if (ResourceResolverFactory.USER.equals(name)) {
@@ -400,6 +407,7 @@
     }
 
     @Override
+    @NotNull
     public Resource create(final @NotNull ResolveContext<JcrProviderState> ctx, final String path, final Map<String, Object> properties) throws PersistenceException {
         // check for node type
         final Object nodeObj = (properties != null ? properties.get(JcrConstants.JCR_PRIMARYTYPE) : null);
@@ -599,15 +607,15 @@
 
     @Override
     public boolean copy(final @NotNull ResolveContext<JcrProviderState> ctx,
-                        final String srcAbsPath,
-                        final String destAbsPath) {
+                        final @NotNull String srcAbsPath,
+                        final @NotNull String destAbsPath) {
         return false;
     }
 
     @Override
     public boolean move(final @NotNull ResolveContext<JcrProviderState> ctx,
-                        final String srcAbsPath,
-                        final String destAbsPath) throws PersistenceException {
+                        final @NotNull String srcAbsPath,
+                        final @NotNull String destAbsPath) throws PersistenceException {
         final String srcNodePath = srcAbsPath;
         final String dstNodePath = destAbsPath + '/' + ResourceUtil.getName(srcAbsPath);
         try {
diff --git a/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/BinaryDownloadUriProviderTest.java b/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/BinaryDownloadUriProviderTest.java
index c17f09f..e454745 100644
--- a/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/BinaryDownloadUriProviderTest.java
+++ b/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/BinaryDownloadUriProviderTest.java
@@ -41,6 +41,7 @@
 import org.apache.sling.api.resource.external.URIProvider.Scope;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.jetbrains.annotations.NotNull;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -80,7 +81,7 @@
     public void testMockedProperty() throws RepositoryException, URISyntaxException {
         uriProvider = new BinaryDownloadUriProvider(false) {
             @Override
-            protected Property getPrimaryProperty(Node node) {
+            protected @NotNull Property getPrimaryProperty(@NotNull Node node) {
                 return property;
             }
         };