You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2019/04/04 11:28:46 UTC

[sling-org-apache-sling-caconfig-impl] branch master updated: apply @NonNull and @Nullable annotations to match with those in the API/SPI definitions ignore null analysis checks in unit test classes no logic/code change

This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-impl.git


The following commit(s) were added to refs/heads/master by this push:
     new 38ebc46  apply @NonNull and @Nullable annotations to match with those in the API/SPI definitions ignore null analysis checks in unit test classes no logic/code change
38ebc46 is described below

commit 38ebc4643fdc2a703016843d0d4eb0682e77013f
Author: sseifert <ss...@pro-vision.de>
AuthorDate: Thu Apr 4 13:27:40 2019 +0200

    apply @NonNull and @Nullable annotations to match with those in the API/SPI definitions
    ignore null analysis checks in unit test classes
    no logic/code change
---
 .../impl/ConfigurationBindingsValueProvider.java   |  2 +
 .../impl/ConfigurationBuilderAdapterFactory.java   |  3 +-
 .../caconfig/impl/ConfigurationBuilderImpl.java    | 17 +++++----
 ...gurationInheritanceStrategyMultiplexerImpl.java |  3 +-
 .../ConfigurationPersistenceStrategyBridge.java    | 30 ++++++++-------
 .../caconfig/impl/ConfigurationResolverImpl.java   |  5 ++-
 .../impl/ConfigurationResourceWrapper.java         | 13 ++++---
 .../DefaultConfigurationInheritanceStrategy.java   |  3 +-
 .../DefaultConfigurationPersistenceStrategy.java   | 30 ++++++++-------
 ...notationClassConfigurationMetadataProvider.java |  3 +-
 ...nfigurationMetadataProviderMultiplexerImpl.java |  3 +-
 .../ConfigurationOverrideMultiplexerImpl.java      | 10 +++--
 .../OsgiConfigurationOverrideProvider.java         |  3 +-
 ...ystemPropertyConfigurationOverrideProvider.java |  3 +-
 .../impl/ConfigurationCollectionDataImpl.java      |  7 ++--
 .../management/impl/ConfigurationDataImpl.java     | 10 +++--
 .../management/impl/ConfigurationManagerImpl.java  | 19 +++++-----
 ...gurationPersistenceStrategyMultiplexerImpl.java | 36 +++++++++---------
 .../impl/ContextPathStrategyMultiplexerImpl.java   |  3 +-
 .../caconfig/management/impl/ValueInfoImpl.java    |  4 +-
 .../impl/ConfigurationResourceResolverImpl.java    |  9 +++--
 ...onResourceResolvingStrategyMultiplexerImpl.java | 15 ++++----
 ...aultConfigurationResourceResolvingStrategy.java | 15 ++++----
 .../impl/def/DefaultContextPathStrategy.java       |  3 +-
 .../ConfigurationBuilderAdapterFactoryTest.java    |  1 +
 .../caconfig/impl/ConfigurationProxyTest.java      |  1 +
 .../impl/ConfigurationResolverAdaptableTest.java   |  1 +
 .../ConfigurationResolverAnnotationClassTest.java  |  1 +
 ...onfigurationResolverCustomPersistence2Test.java |  1 +
 ...ConfigurationResolverCustomPersistenceTest.java |  1 +
 .../impl/ConfigurationResolverValueMapTest.java    |  1 +
 .../impl/DummyConfigurationMetadataProvider.java   |  3 +-
 ...efaultConfigurationInheritanceStrategyTest.java |  1 +
 ...efaultConfigurationPersistenceStrategyTest.java |  1 +
 ...urationMetadataProviderMultiplexerImplTest.java |  3 +-
 .../DummyConfigurationOverrideProvider.java        |  3 +-
 .../management/impl/ConfigurationDataImplTest.java |  1 +
 .../ConfigurationManagerImplNoDefaultTest.java     |  1 +
 .../impl/ConfigurationManagerImplTest.java         |  1 +
 ...tionPersistenceStrategyMultiplexerImplTest.java | 44 +++++++++++-----------
 .../ContextPathStrategyMultiplexerImplTest.java    |  3 +-
 .../CustomConfigurationPersistenceStrategy.java    | 31 ++++++++-------
 .../CustomConfigurationPersistenceStrategy2.java   | 31 ++++++++-------
 .../ConfigurationResourceResolverImplTest.java     |  1 +
 ...sourceResolvingStrategyMultiplexerImplTest.java | 37 +++++++++---------
 ...tionResourceResolvingStrategyHierarchyTest.java |  1 +
 ...ConfigurationResourceResolvingStrategyTest.java |  1 +
 .../ResourceEliminateDuplicatesIteratorTest.java   |  1 +
 .../util/ResourcePathCollatingIteratorTest.java    |  1 +
 49 files changed, 242 insertions(+), 179 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
index 0e88848..8cc9fbe 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
@@ -72,6 +72,7 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
     private boolean enabled;
 
     @Override
+    @SuppressWarnings({ "unused", "null" })
     public void addBindings(Bindings bindings) {
         if (!enabled || !bindings.containsKey(SlingBindings.REQUEST)) {
             return;
@@ -142,6 +143,7 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
         }
         
         private Object getConfigValue(String configName) {
+            @SuppressWarnings("null")
             ConfigurationBuilder configBuilder = resource.adaptTo(ConfigurationBuilder.class).name(configName);
             if (isCollection(configName)) {
                 return configBuilder.asValueMapCollection();
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactory.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactory.java
index dc806ef..464b574 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactory.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactory.java
@@ -22,6 +22,7 @@ import org.apache.sling.api.adapter.AdapterFactory;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.caconfig.ConfigurationBuilder;
 import org.apache.sling.caconfig.ConfigurationResolver;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferencePolicyOption;
@@ -38,7 +39,7 @@ public class ConfigurationBuilderAdapterFactory implements AdapterFactory {
 
     @Override
     @SuppressWarnings("unchecked")
-    public <AdapterType> AdapterType getAdapter(final Object adaptable, final Class<AdapterType> type) {
+    public <AdapterType> AdapterType getAdapter(@NotNull final Object adaptable, @NotNull final Class<AdapterType> type) {
         if (adaptable instanceof Resource && type == ConfigurationBuilder.class) {
             return (AdapterType) resolver.get((Resource) adaptable);
         }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
index 5534e6c..2cdb7aa 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
@@ -49,6 +49,7 @@ import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
 import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -99,7 +100,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     }
 
     @Override
-    public ConfigurationBuilder name(final String configName) {
+    public @NotNull ConfigurationBuilder name(@NotNull final String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         return new ConfigurationBuilderImpl(contentResource,
                 configurationResolver,
@@ -166,8 +167,8 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
                        .getResourceCollectionInheritanceChain(this.contentResource, configBucketNames, collectionParentConfigName);
                if (result != null) {
                    resourceInheritanceChains.addAll(result);
-                   }
                }
+           }
 
            final Collection<T> result = new ArrayList<>();
            if (resourceInheritanceChains != null) {
@@ -284,7 +285,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     // --- Annotation class support ---
 
     @Override
-    public <T> T as(final Class<T> clazz) {
+    public @NotNull <T> T as(@NotNull final Class<T> clazz) {
         final String name = getConfigurationNameForAnnotationClass(clazz);
         if (log.isDebugEnabled()) {
             log.debug("Get configuration for context path {}, name '{}', class {}", contentResource.getPath(), name, clazz.getName());
@@ -293,7 +294,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     }
 
     @Override
-    public <T> Collection<T> asCollection(Class<T> clazz) {
+    public @NotNull <T> Collection<T> asCollection(@NotNull Class<T> clazz) {
         final String name = getConfigurationNameForAnnotationClass(clazz);
         if (log.isDebugEnabled()) {
             log.debug("Get configuration collection for context path {}, name '{}', class {}", contentResource.getPath(), name, clazz.getName());
@@ -341,7 +342,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     // --- ValueMap support ---
 
     @Override
-    public ValueMap asValueMap() {
+    public @NotNull ValueMap asValueMap() {
         if (log.isDebugEnabled()) {
             log.debug("Get ValueMap for context path {}, name '{}'", contentResource.getPath(), this.configName);
         }
@@ -349,7 +350,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     }
 
     @Override
-    public Collection<ValueMap> asValueMapCollection() {
+    public @NotNull Collection<ValueMap> asValueMapCollection() {
         if (log.isDebugEnabled()) {
             log.debug("Get ValueMap collection for context path {}, name '{}'", contentResource.getPath(), this.configName);
         }
@@ -373,7 +374,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     // --- Adaptable support ---
 
     @Override
-    public <T> T asAdaptable(Class<T> clazz) {
+    public <T> T asAdaptable(@NotNull Class<T> clazz) {
         if (log.isDebugEnabled()) {
             log.debug("Get adaptable for context path {}, name '{}', class {}", contentResource.getPath(), this.configName, clazz);
         }
@@ -381,7 +382,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     }
 
     @Override
-    public <T> Collection<T> asAdaptableCollection(Class<T> clazz) {
+    public @NotNull <T> Collection<T> asAdaptableCollection(@NotNull Class<T> clazz) {
         if (log.isDebugEnabled()) {
             log.debug("Get adaptable collection for context path {}, name '{}', class {}", contentResource.getPath(), this.configName, clazz);
         }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java
index 7c981a3..e1325af 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java
@@ -29,6 +29,7 @@ import org.apache.sling.caconfig.management.multiplexer.ConfigurationInheritance
 import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.RankedServices;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -63,7 +64,7 @@ public class ConfigurationInheritanceStrategyMultiplexerImpl implements Configur
      */
     @SuppressWarnings("unchecked")
     @Override
-    public Resource getResource(Iterator<Resource> configResources) {
+    public Resource getResource(@NotNull Iterator<Resource> configResources) {
         List<ConfigurationInheritanceStrategy> itemList = items.getList();
         if (itemList.isEmpty()) {
             return null;
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationPersistenceStrategyBridge.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationPersistenceStrategyBridge.java
index d12da2f..f860078 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationPersistenceStrategyBridge.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationPersistenceStrategyBridge.java
@@ -31,6 +31,8 @@ import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.ServiceUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.annotations.Activate;
@@ -137,67 +139,67 @@ public final class ConfigurationPersistenceStrategyBridge {
         }
 
         @Override
-        public Resource getResource(Resource resource) {
+        public Resource getResource(@NotNull Resource resource) {
             return delegate.getResource(resource);
         }
 
         @Override
-        public Resource getCollectionParentResource(Resource resource) {
+        public Resource getCollectionParentResource(@NotNull Resource resource) {
             // with SPI/Impl 1.2 it was not possible to manipulate collection parent resource
             return resource;
         }
 
         @Override
-        public Resource getCollectionItemResource(Resource resource) {
+        public Resource getCollectionItemResource(@NotNull Resource resource) {
             return delegate.getResource(resource);
         }
 
         @Override
-        public String getResourcePath(String resourcePath) {
+        public String getResourcePath(@NotNull String resourcePath) {
             return delegate.getResourcePath(resourcePath);
         }
 
         @Override
-        public String getCollectionParentResourcePath(String resourcePath) {
+        public String getCollectionParentResourcePath(@NotNull String resourcePath) {
             // with SPI/Impl 1.2 it was not possible to manipulate collection parent resource
             return resourcePath;
         }
 
         @Override
-        public String getCollectionItemResourcePath(String resourcePath) {
+        public String getCollectionItemResourcePath(@NotNull String resourcePath) {
             return delegate.getResourcePath(resourcePath);
         }
 
         @Override
-        public String getConfigName(String configName, String relatedConfigPath) {
+        public String getConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
             return delegate.getResourcePath(configName);
         }
 
         @Override
-        public String getCollectionParentConfigName(String configName, String relatedConfigPath) {
+        public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
             // with SPI/Impl 1.2 it was not possible to manipulate collection parent resource
             return configName;
         }
 
         @Override
-        public String getCollectionItemConfigName(String configName, String relatedConfigPath) {
+        public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
             return delegate.getResourcePath(configName);
         }
 
         @Override
-        public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-                ConfigurationPersistData data) {
+        public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+                @NotNull ConfigurationPersistData data) {
             return delegate.persistConfiguration(resourceResolver, configResourcePath, data);
         }
 
         @Override
-        public boolean persistConfigurationCollection(ResourceResolver resourceResolver,
-                String configResourceCollectionParentPath, ConfigurationCollectionPersistData data) {
+        public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver,
+                @NotNull String configResourceCollectionParentPath, @NotNull ConfigurationCollectionPersistData data) {
             return delegate.persistConfigurationCollection(resourceResolver, configResourceCollectionParentPath, data);
         }
 
         @Override
-        public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+        public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
             return delegate.deleteConfiguration(resourceResolver, configResourcePath);
         }
         
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
index 44f04ae..7a8212a 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
@@ -34,6 +34,7 @@ import org.apache.sling.caconfig.management.multiplexer.ConfigurationMetadataPro
 import org.apache.sling.caconfig.management.multiplexer.ConfigurationOverrideMultiplexer;
 import org.apache.sling.caconfig.management.multiplexer.ConfigurationPersistenceStrategyMultiplexer;
 import org.apache.sling.caconfig.management.multiplexer.ConfigurationResourceResolvingStrategyMultiplexer;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
@@ -81,7 +82,7 @@ public class ConfigurationResolverImpl implements ConfigurationResolver, Configu
     }
     
     @Override
-    public ConfigurationBuilder get(Resource resource) {
+    public @NotNull ConfigurationBuilder get(@NotNull Resource resource) {
         return new ConfigurationBuilderImpl(resource, this,
                 configurationResourceResolvingStrategy, configurationPersistenceStrategy,
                 configurationInheritanceStrategy, configurationOverrideMultiplexer, configurationMetadataProvider,
@@ -89,7 +90,7 @@ public class ConfigurationResolverImpl implements ConfigurationResolver, Configu
     }
 
     @Override
-    public Collection<String> configBucketNames() {
+    public @NotNull Collection<String> configBucketNames() {
         return configBucketNames;
     }
 
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java
index 784ee5b..938886c 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java
@@ -25,6 +25,7 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Wrapper that returns an enhanced value map for the resource
@@ -51,8 +52,8 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         }
     }
     
-    @SuppressWarnings("unchecked")
-    public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+    @SuppressWarnings({ "unchecked", "null" })
+    public <AdapterType> AdapterType adaptTo(@NotNull Class<AdapterType> type) {
         if (type == ValueMap.class) {
             return (AdapterType)props;
         }
@@ -63,7 +64,7 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         return props;
     }
 
-    public String getPath() {
+    public @NotNull String getPath() {
         return resource.getPath();
     }
 
@@ -87,7 +88,7 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         return resource.getChild(relPath);
     }
 
-    public String getResourceType() {
+    public @NotNull String getResourceType() {
         return resource.getResourceType();
     }
 
@@ -103,11 +104,11 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         return resource.isResourceType(resourceType);
     }
 
-    public ResourceMetadata getResourceMetadata() {
+    public @NotNull ResourceMetadata getResourceMetadata() {
         return resource.getResourceMetadata();
     }
 
-    public ResourceResolver getResourceResolver() {
+    public @NotNull ResourceResolver getResourceResolver() {
         return resource.getResourceResolver();
     }
     
diff --git a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
index b4bfe7b..1845075 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
@@ -29,6 +29,7 @@ import org.apache.sling.api.wrappers.ValueMapDecorator;
 import org.apache.sling.caconfig.impl.ConfigurationResourceWrapper;
 import org.apache.sling.caconfig.resource.impl.util.PropertyUtil;
 import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -66,7 +67,7 @@ public class DefaultConfigurationInheritanceStrategy implements ConfigurationInh
     }
     
     @Override
-    public Resource getResource(Iterator<Resource> configResources) {
+    public Resource getResource(@NotNull Iterator<Resource> configResources) {
         if (!config.enabled()) {
             return null;
         }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
index 1cec19c..cf5571a 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
@@ -36,6 +36,8 @@ import org.apache.sling.caconfig.spi.ConfigurationPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceAccessDeniedException;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -78,7 +80,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
         
     @Override
-    public Resource getResource(Resource resource) {
+    public Resource getResource(@NotNull Resource resource) {
         if (!config.enabled()) {
             return null;
         }
@@ -86,7 +88,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
     
     @Override
-    public Resource getCollectionParentResource(Resource resource) {
+    public Resource getCollectionParentResource(@NotNull Resource resource) {
         if (!config.enabled()) {
             return null;
         }
@@ -94,7 +96,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public Resource getCollectionItemResource(Resource resource) {
+    public Resource getCollectionItemResource(@NotNull Resource resource) {
         if (!config.enabled()) {
             return null;
         }
@@ -102,7 +104,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public String getResourcePath(String resourcePath) {
+    public String getResourcePath(@NotNull String resourcePath) {
         if (!config.enabled()) {
             return null;
         }
@@ -110,7 +112,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionParentResourcePath(String resourcePath) {
+    public String getCollectionParentResourcePath(@NotNull String resourcePath) {
         if (!config.enabled()) {
             return null;
         }
@@ -118,7 +120,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionItemResourcePath(String resourcePath) {
+    public String getCollectionItemResourcePath(@NotNull String resourcePath) {
         if (!config.enabled()) {
             return null;
         }
@@ -126,7 +128,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public String getConfigName(String configName, String relatedConfigPath) {
+    public String getConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         if (!config.enabled()) {
             return null;
         }
@@ -134,7 +136,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionParentConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         if (!config.enabled()) {
             return null;
         }
@@ -142,7 +144,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionItemConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         if (!config.enabled()) {
             return null;
         }
@@ -150,8 +152,8 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
     
     @Override
-    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-            ConfigurationPersistData data) {
+    public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+            @NotNull ConfigurationPersistData data) {
         if (!config.enabled()) {
             return false;
         }
@@ -161,8 +163,8 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
-            ConfigurationCollectionPersistData data) {
+    public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver, @NotNull String configResourceCollectionParentPath,
+            @NotNull ConfigurationCollectionPersistData data) {
         if (!config.enabled()) {
             return false;
         }
@@ -180,7 +182,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     @Override
-    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+    public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
         if (!config.enabled()) {
             return false;
         }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
index 9e1d6a3..c13ab75 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentSkipListMap;
 
 import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.annotations.Activate;
@@ -59,7 +60,7 @@ public class AnnotationClassConfigurationMetadataProvider implements Configurati
     }
 
     @Override
-    public SortedSet<String> getConfigurationNames() {
+    public @NotNull SortedSet<String> getConfigurationNames() {
         SortedSet<String> allConfigNames = new TreeSet<String>();
         for (BundleConfigurationMapping bundleMapping : bundleMappings.values()) {
             allConfigNames.addAll(bundleMapping.getConfigurationNames());
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java
index 0ae86b7..dd76471 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java
@@ -27,6 +27,7 @@ import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.RankedServices;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -60,7 +61,7 @@ public class ConfigurationMetadataProviderMultiplexerImpl implements Configurati
      * Merge configuration names from all providers.
      */
     @Override
-    public SortedSet<String> getConfigurationNames() {
+    public @NotNull SortedSet<String> getConfigurationNames() {
         SortedSet<String> configNames = new TreeSet<>();
         for (ConfigurationMetadataProvider item : items) {
             configNames.addAll(item.getConfigurationNames());
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java
index 113cf12..8184b4c 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java
@@ -38,6 +38,8 @@ import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.RankedServices;
 import org.apache.sling.commons.osgi.RankedServices.ChangeListener;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -73,7 +75,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
     }
     
     @Override
-    public boolean isAllOverridden(String contextPath, String configName) {
+    public boolean isAllOverridden(@NotNull String contextPath, @NotNull String configName) {
         for (OverrideItem override : allOverrides) {
             if (StringUtils.equals(configName, override.getConfigName()) && override.matchesPath(contextPath)) {
                 if (override.isAllProperties()) {
@@ -85,7 +87,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
     }
 
     @Override
-    public Map<String,Object> overrideProperties(String contextPath, String configName, Map<String,Object> properties) {
+    public Map<String,Object> overrideProperties(@NotNull String contextPath, @NotNull String configName, @NotNull Map<String,Object> properties) {
         if (allOverrides.size() == 0) {
             return null;
         }
@@ -111,7 +113,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
     }
     
     @Override
-    public Resource overrideProperties(String contextPath, String configName, Resource configResource) {
+    public Resource overrideProperties(@NotNull String contextPath, @NotNull String configName, @Nullable Resource configResource) {
         if (configResource == null) {
             return null;
         }
@@ -119,7 +121,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
     }
     
     @Override
-    public Resource overrideProperties(String contextPath, String configName, Resource configResource, ResourceResolver resourceResolver) {
+    public Resource overrideProperties(@NotNull String contextPath, @NotNull String configName, @Nullable Resource configResource, @NotNull ResourceResolver resourceResolver) {
         Map<String,Object> overrideProperties = overrideProperties(contextPath, configName, configResource != null ?  configResource.getValueMap() : ValueMap.EMPTY);
         if (overrideProperties == null) {
             return configResource;
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java b/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java
index d5f8c36..eb18d11 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -77,7 +78,7 @@ public final class OsgiConfigurationOverrideProvider implements ConfigurationOve
     }
 
     @Override
-    public Collection<String> getOverrideStrings() {
+    public @NotNull Collection<String> getOverrideStrings() {
         return overrideStrings;
     }
     
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProvider.java b/src/main/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProvider.java
index ebb6ef3..54301ec 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProvider.java
@@ -26,6 +26,7 @@ import java.util.Properties;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -82,7 +83,7 @@ public final class SystemPropertyConfigurationOverrideProvider implements Config
     }
 
     @Override
-    public Collection<String> getOverrideStrings() {
+    public @NotNull Collection<String> getOverrideStrings() {
         return overrideStrings;
     }
 
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java
index ad00d3c..ce1f5f5 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java
@@ -26,6 +26,7 @@ import org.apache.sling.caconfig.management.ConfigurationCollectionData;
 import org.apache.sling.caconfig.management.ConfigurationData;
 import org.apache.sling.caconfig.management.ConfigurationManagementSettings;
 import org.apache.sling.caconfig.resource.impl.def.ConfigurationResourceNameConstants;
+import org.jetbrains.annotations.NotNull;
 
 final class ConfigurationCollectionDataImpl implements ConfigurationCollectionData {
     
@@ -47,12 +48,12 @@ final class ConfigurationCollectionDataImpl implements ConfigurationCollectionDa
     }
 
     @Override
-    public String getConfigName() {
+    public @NotNull String getConfigName() {
         return configName;
     }
 
     @Override
-    public Collection<ConfigurationData> getItems() {
+    public @NotNull Collection<ConfigurationData> getItems() {
         return items;
     }
 
@@ -62,7 +63,7 @@ final class ConfigurationCollectionDataImpl implements ConfigurationCollectionDa
     }
 
     @Override
-    public Map<String, Object> getProperties() {
+    public @NotNull Map<String, Object> getProperties() {
         if (filteredPropertiesCache == null) {
             filteredPropertiesCache = new HashMap<>();
             if (properties != null) {
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
index fa1fa8a..fb7e24b 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
@@ -43,6 +43,7 @@ import org.apache.sling.caconfig.management.multiplexer.ConfigurationOverrideMul
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
+import org.jetbrains.annotations.NotNull;
 
 final class ConfigurationDataImpl implements ConfigurationData {
     
@@ -107,7 +108,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
     }
     
     @Override
-    public String getConfigName() {
+    public @NotNull String getConfigName() {
         return configName;
     }
 
@@ -128,7 +129,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
     }
 
     @Override
-    public Set<String> getPropertyNames() {
+    public @NotNull Set<String> getPropertyNames() {
         if (propertyNamesCache == null) {
             propertyNamesCache = new LinkedHashSet<>();
             if (configMetadata != null) {
@@ -143,7 +144,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
     }
 
     @Override
-    public ValueMap getValues() {
+    public @NotNull ValueMap getValues() {
         if (valuesCache == null) {
             Map<String,Object> props = new HashMap<>();
             if (writebackConfigurationResource != null) {
@@ -157,7 +158,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
     }
 
     @Override
-    public ValueMap getEffectiveValues() {
+    public @NotNull ValueMap getEffectiveValues() {
         if (effectiveValuesCache == null) {
             Map<String,Object> props = new HashMap<>();
             if (configMetadata != null) {
@@ -260,6 +261,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
     }
 
     @Override
+    @SuppressWarnings("null")
     public boolean isInherited() {
         // detect if the whole config or config item was inherited
         if (resolvedConfigurationResource != null && resolvedConfigurationResource.getPath() != null) {
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
index 615d195..244632e 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
@@ -53,6 +53,7 @@ import org.apache.sling.caconfig.spi.ConfigurationPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
@@ -80,7 +81,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     
     @SuppressWarnings("unchecked")
     @Override
-    public ConfigurationData getConfiguration(Resource resource, String configName) {
+    public ConfigurationData getConfiguration(@NotNull Resource resource, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         if (log.isDebugEnabled()) {
             log.debug("Get configuration for context path {}, name '{}'", resource.getPath(), configName);
@@ -141,7 +142,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
 
     @SuppressWarnings("unchecked")
     @Override
-    public ConfigurationCollectionData getConfigurationCollection(Resource resource, String configName) {
+    public@NotNull  ConfigurationCollectionData getConfigurationCollection(@NotNull Resource resource, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         if (log.isDebugEnabled()) {
             log.debug("Get configuration collection for context path {}, name '{}'", resource.getPath(), configName);
@@ -271,7 +272,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     }
 
     @Override
-    public void persistConfiguration(Resource resource, String configName, ConfigurationPersistData data) {
+    public void persistConfiguration(@NotNull Resource resource, @NotNull String configName, @NotNull ConfigurationPersistData data) {
         ConfigNameUtil.ensureValidConfigName(configName);
         String configResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, CONFIGS_BUCKET_NAME, configName);
         if (configResourcePath == null) {
@@ -286,7 +287,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     }
 
     @Override
-    public void persistConfigurationCollection(Resource resource, String configName, ConfigurationCollectionPersistData data) {
+    public void persistConfigurationCollection(@NotNull Resource resource, @NotNull String configName, @NotNull ConfigurationCollectionPersistData data) {
         ConfigNameUtil.ensureValidConfigName(configName);
         String configResourceParentPath = configurationResourceResolvingStrategy.getResourceCollectionParentPath(resource, CONFIGS_BUCKET_NAME, configName);
         if (configResourceParentPath == null) {
@@ -301,7 +302,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     }
 
     @Override
-    public ConfigurationData newCollectionItem(Resource resource, String configName) {
+    public ConfigurationData newCollectionItem(@NotNull Resource resource, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         ConfigurationMetadata configMetadata = getConfigurationMetadata(configName);
         if (configMetadata != null) {
@@ -313,7 +314,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     }
 
     @Override
-    public void deleteConfiguration(Resource resource, String configName) {
+    public void deleteConfiguration(@NotNull Resource resource, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         
         // try to delete from all config bucket names
@@ -336,12 +337,12 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     }
     
     @Override
-    public SortedSet<String> getConfigurationNames() {
+    public @NotNull SortedSet<String> getConfigurationNames() {
         return configurationMetadataProvider.getConfigurationNames();
     }
 
     @Override
-    public ConfigurationMetadata getConfigurationMetadata(String configName) {
+    public ConfigurationMetadata getConfigurationMetadata(@NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         ConfigurationMetadata metadata = configurationMetadataProvider.getConfigurationMetadata(configName);
         if (metadata != null) {
@@ -419,7 +420,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     }
 
     @Override
-    public String getPersistenceResourcePath(String configResourcePath) {
+    public String getPersistenceResourcePath(@NotNull String configResourcePath) {
         return configurationPersistenceStrategy.getResourcePath(configResourcePath);
     }
 
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java
index c0010a8..bdae9a8 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java
@@ -31,6 +31,8 @@ import org.apache.sling.caconfig.spi.ConfigurationPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.RankedServices;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -64,7 +66,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
      * Transform the configuration resource by the first implementation that has an answer.
      */    
     @Override
-    public Resource getResource(Resource resource) {
+    public Resource getResource(@NotNull Resource resource) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             Resource result = item.getResource(resource);
             if (result != null) {
@@ -75,7 +77,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public Resource getCollectionParentResource(Resource resource) {
+    public Resource getCollectionParentResource(@NotNull Resource resource) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             Resource result = item.getCollectionParentResource(resource);
             if (result != null) {
@@ -86,7 +88,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public Resource getCollectionItemResource(Resource resource) {
+    public Resource getCollectionItemResource(@NotNull Resource resource) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             Resource result = item.getCollectionItemResource(resource);
             if (result != null) {
@@ -97,7 +99,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }    
         
     @Override
-    public String getResourcePath(String resourcePath) {
+    public String getResourcePath(@NotNull String resourcePath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getResourcePath(resourcePath);
             if (result != null) {
@@ -108,7 +110,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public String getCollectionParentResourcePath(String resourcePath) {
+    public String getCollectionParentResourcePath(@NotNull String resourcePath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getCollectionParentResourcePath(resourcePath);
             if (result != null) {
@@ -119,7 +121,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public String getCollectionItemResourcePath(String resourcePath) {
+    public String getCollectionItemResourcePath(@NotNull String resourcePath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getCollectionItemResourcePath(resourcePath);
             if (result != null) {
@@ -130,7 +132,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public String getConfigName(String configName, String relatedConfigPath) {
+    public String getConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getConfigName(configName, relatedConfigPath);
             if (result != null) {
@@ -141,7 +143,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public String getCollectionParentConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getCollectionParentConfigName(configName, relatedConfigPath);
             if (result != null) {
@@ -152,7 +154,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public String getCollectionItemConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getCollectionItemConfigName(configName, relatedConfigPath);
             if (result != null) {
@@ -163,7 +165,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
     
     @Override
-    public Collection<String> getAllConfigNames(String configName) {
+    public @NotNull Collection<String> getAllConfigNames(@NotNull String configName) {
         Set<String> configNames = new LinkedHashSet<>();
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getConfigName(configName, null);
@@ -175,7 +177,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public Collection<String> getAllCollectionParentConfigNames(String configName) {
+    public @NotNull Collection<String> getAllCollectionParentConfigNames(@NotNull String configName) {
         Set<String> configNames = new LinkedHashSet<>();
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getCollectionParentConfigName(configName, null);
@@ -187,7 +189,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public Collection<String> getAllCollectionItemConfigNames(String configName) {
+    public @NotNull Collection<String> getAllCollectionItemConfigNames(@NotNull String configName) {
         Set<String> configNames = new LinkedHashSet<>();
         for (ConfigurationPersistenceStrategy2 item : items) {
             String result = item.getCollectionItemConfigName(configName, null);
@@ -202,8 +204,8 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
      * Persist configuration data with the first implementation that accepts it.
      */
     @Override
-    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-            ConfigurationPersistData data) {
+    public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+            @NotNull ConfigurationPersistData data) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             if (item.persistConfiguration(resourceResolver, configResourcePath, data)) {
                 return true;
@@ -216,8 +218,8 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
      * Persist configuration data with the first implementation that accepts it.
      */
     @Override
-    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
-            ConfigurationCollectionPersistData data) {
+    public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver, @NotNull String configResourceCollectionParentPath,
+            @NotNull ConfigurationCollectionPersistData data) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             if (item.persistConfigurationCollection(resourceResolver, configResourceCollectionParentPath, data)) {
                 return true;
@@ -227,7 +229,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
     }
 
     @Override
-    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+    public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
             if (item.deleteConfiguration(resourceResolver, configResourcePath)) {
                 return true;
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java
index ce27151..85a74de 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java
@@ -32,6 +32,7 @@ import org.apache.sling.caconfig.resource.spi.ContextPathStrategy;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.RankedServices;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -66,7 +67,7 @@ public class ContextPathStrategyMultiplexerImpl implements ContextPathStrategyMu
      * Merges all results from the detected implementations into a single answer.
      */
     @Override
-    public Iterator<ContextResource> findContextResources(Resource resource) {
+    public @NotNull Iterator<ContextResource> findContextResources(@NotNull Resource resource) {
         List<Iterator<ContextResource>> allResults = getAllResults(resource);
         if (allResults.isEmpty()) {
             return Collections.emptyIterator();
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ValueInfoImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ValueInfoImpl.java
index 0c50254..bde459c 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ValueInfoImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ValueInfoImpl.java
@@ -28,6 +28,7 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.caconfig.management.ValueInfo;
 import org.apache.sling.caconfig.management.multiplexer.ConfigurationOverrideMultiplexer;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
+import org.jetbrains.annotations.NotNull;
 
 final class ValueInfoImpl<T> implements ValueInfo<T> {
     
@@ -64,7 +65,7 @@ final class ValueInfoImpl<T> implements ValueInfo<T> {
     }
     
     @Override
-    public String getName() {
+    public @NotNull String getName() {
         return name;
     }
  
@@ -108,6 +109,7 @@ final class ValueInfoImpl<T> implements ValueInfo<T> {
     }
 
     @Override
+    @SuppressWarnings("null")
     public boolean isInherited() {
         if (isDefault() || effectiveValue == null) {
             return false;
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
index d8af0e5..41495b2 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
@@ -30,6 +30,7 @@ import org.apache.sling.caconfig.management.multiplexer.ContextPathStrategyMulti
 import org.apache.sling.caconfig.resource.ConfigurationResourceResolver;
 import org.apache.sling.caconfig.resource.impl.util.ConfigNameUtil;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 
@@ -42,19 +43,19 @@ public class ConfigurationResourceResolverImpl implements ConfigurationResourceR
     private ConfigurationResourceResolvingStrategyMultiplexer configurationResourceResolvingStrategy;
 
     @Override
-    public Resource getResource(Resource resource, String bucketName, String configName) {
+    public Resource getResource(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         return configurationResourceResolvingStrategy.getResource(resource, Collections.singleton(bucketName), configName);
     }
 
     @Override
-    public Collection<Resource> getResourceCollection(Resource resource, String bucketName, String configName) {
+    public @NotNull Collection<Resource> getResourceCollection(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
         return configurationResourceResolvingStrategy.getResourceCollection(resource, Collections.singleton(bucketName), configName);
     }
 
     @Override
-    public String getContextPath(Resource resource) {
+    public String getContextPath(@NotNull Resource resource) {
         Iterator<ContextResource> it = contextPathStrategy.findContextResources(resource);
         if (it.hasNext()) {
             return it.next().getResource().getPath();
@@ -65,7 +66,7 @@ public class ConfigurationResourceResolverImpl implements ConfigurationResourceR
     }
 
     @Override
-    public Collection<String> getAllContextPaths(Resource resource) {
+    public @NotNull Collection<String> getAllContextPaths(@NotNull Resource resource) {
         final List<String> contextPaths = new ArrayList<>();
         Iterator<ContextResource> contextResources = contextPathStrategy.findContextResources(resource);
         while (contextResources.hasNext()) {
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java
index a3d61a3..1669124 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java
@@ -27,6 +27,7 @@ import org.apache.sling.caconfig.management.multiplexer.ConfigurationResourceRes
 import org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
 import org.apache.sling.commons.osgi.Order;
 import org.apache.sling.commons.osgi.RankedServices;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -60,7 +61,7 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements Co
      * Gets the configuration resource from the first implementation that has an answer.
      */
     @Override
-    public Resource getResource(Resource resource, Collection<String> bucketNames, String configName) {
+    public Resource getResource(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
         for (ConfigurationResourceResolvingStrategy item : items) {
             Resource result = item.getResource(resource, bucketNames, configName);
             if (result != null) {
@@ -74,7 +75,7 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements Co
      * Gets the configuration resource collection from the first implementation that has an answer.
      */
     @Override
-    public Collection<Resource> getResourceCollection(Resource resource, Collection<String> bucketNames, String configName) {
+    public Collection<Resource> getResourceCollection(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
         for (ConfigurationResourceResolvingStrategy item : items) {
             Collection<Resource> result = item.getResourceCollection(resource, bucketNames, configName);
             if (result != null) {
@@ -88,7 +89,7 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements Co
      * Gets the configuration resource inheritance chain from the first implementation that has an answer.
      */
     @Override
-    public Iterator<Resource> getResourceInheritanceChain(Resource resource, Collection<String> bucketNames, String configName) {
+    public Iterator<Resource> getResourceInheritanceChain(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
         for (ConfigurationResourceResolvingStrategy item : items) {
             Iterator<Resource> result = item.getResourceInheritanceChain(resource, bucketNames, configName);
             if (result != null) {
@@ -102,8 +103,8 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements Co
      * Gets the configuration resource collection inheritance chains from the first implementation that has an answer.
      */
     @Override
-    public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource, Collection<String> bucketNames,
-            String configName) {
+    public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@NotNull Resource resource, @NotNull Collection<String> bucketNames,
+            @NotNull String configName) {
         for (ConfigurationResourceResolvingStrategy item : items) {
             Collection<Iterator<Resource>> result = item.getResourceCollectionInheritanceChain(resource, bucketNames, configName);
             if (result != null) {
@@ -117,7 +118,7 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements Co
      * Gets the configuration resource path from the first implementation that has an answer.
      */
     @Override
-    public String getResourcePath(Resource resource, String bucketName, String configName) {
+    public String getResourcePath(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
         for (ConfigurationResourceResolvingStrategy item : items) {
             String result = item.getResourcePath(resource, bucketName, configName);
             if (result != null) {
@@ -131,7 +132,7 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements Co
      * Gets the configuration resource collection parent path from the first implementation that has an answer.
      */
     @Override
-    public String getResourceCollectionParentPath(Resource resource, String bucketName, String configName) {
+    public String getResourceCollectionParentPath(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
         for (ConfigurationResourceResolvingStrategy item : items) {
             String result = item.getResourceCollectionParentPath(resource, bucketName, configName);
             if (result != null) {
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java b/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
index 5b0cfd9..f1c680a 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
@@ -52,6 +52,7 @@ import org.apache.sling.caconfig.resource.spi.CollectionInheritanceDecider;
 import org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
 import org.apache.sling.caconfig.resource.spi.InheritanceDecision;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -269,7 +270,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
     }
 
     @Override
-    public Resource getResource(final Resource contentResource, final Collection<String> bucketNames, final String configName) {
+    public Resource getResource(@NotNull final Resource contentResource, @NotNull final Collection<String> bucketNames, @NotNull final String configName) {
         Iterator<Resource> resources = getResourceInheritanceChain(contentResource, bucketNames, configName);
         if (resources != null && resources.hasNext()) {
             return resources.next();
@@ -309,7 +310,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
     }
 
     @Override
-    public Iterator<Resource> getResourceInheritanceChain(Resource contentResource, Collection<String> bucketNames, String configName) {
+    public Iterator<Resource> getResourceInheritanceChain(@NotNull Resource contentResource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
         if (!isEnabledAndParamsValid(contentResource, bucketNames, configName)) {
             return null;
         }
@@ -397,7 +398,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
     }
 
     @Override
-    public Collection<Resource> getResourceCollection(final Resource contentResource, final Collection<String> bucketNames, final String configName) {
+    public Collection<Resource> getResourceCollection(@NotNull final Resource contentResource, @NotNull final Collection<String> bucketNames, @NotNull final String configName) {
         if (!isEnabledAndParamsValid(contentResource, bucketNames, configName)) {
             return null;
         }
@@ -413,8 +414,8 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
 
     @SuppressWarnings("unchecked")
     @Override
-    public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(final Resource contentResource,
-            final Collection<String> bucketNames, final String configName) {
+    public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@NotNull final Resource contentResource,
+            @NotNull final Collection<String> bucketNames, @NotNull final String configName) {
         if (!isEnabledAndParamsValid(contentResource, bucketNames, configName)) {
             return null;
         }
@@ -447,7 +448,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
     }
 
     @Override
-    public String getResourcePath(Resource contentResource, String bucketName, String configName) {
+    public String getResourcePath(@NotNull Resource contentResource, @NotNull String bucketName, @NotNull String configName) {
         if (!isEnabledAndParamsValid(contentResource, Collections.singleton(bucketName), configName)) {
             return null;
         }
@@ -466,7 +467,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
     }
 
     @Override
-    public String getResourceCollectionParentPath(Resource contentResource, String bucketName, String configName) {
+    public String getResourceCollectionParentPath(@NotNull Resource contentResource, @NotNull String bucketName, @NotNull String configName) {
         return getResourcePath(contentResource, bucketName, configName);
     }
 
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java b/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java
index c2bae5a..d925f66 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultContextPathStrategy.java
@@ -29,6 +29,7 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.caconfig.resource.spi.ContextPathStrategy;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -74,7 +75,7 @@ public class DefaultContextPathStrategy implements ContextPathStrategy {
     }
 
     @Override
-    public Iterator<ContextResource> findContextResources(Resource resource) {
+    public @NotNull Iterator<ContextResource> findContextResources(@NotNull Resource resource) {
         if (!config.enabled()) {
             return Collections.emptyIterator();
         }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java
index f990d7e..609d7eb 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java
@@ -29,6 +29,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+@SuppressWarnings("null")
 public class ConfigurationBuilderAdapterFactoryTest {
     
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java
index 774b341..2280a79 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java
@@ -252,6 +252,7 @@ public class ConfigurationProxyTest {
                 return ConfigurationProxy.get(child, clazz, childResolver(child));
             }
             @Override
+            @SuppressWarnings("null")
             public <T> Collection<T> getChildren(String configName, Class<T> clazz) {
                 List<T> collection = new ArrayList<>();
                 Resource childParent = resource!=null ? resource.getChild(configName) : null;
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
index 98a181d..226cff3 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
@@ -44,6 +44,7 @@ import com.google.common.collect.ImmutableMap;
 /**
  * Test {@link ConfigurationResolver} with custom adaptions (in this case: Sling Models) for reading the config.
  */
+@SuppressWarnings("null")
 public class ConfigurationResolverAdaptableTest {
 
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
index 15221a0..5a477b3 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
@@ -50,6 +50,7 @@ import com.google.common.collect.ImmutableList;
 /**
  * Test {@link ConfigurationResolver} with annotation classes for reading the config.
  */
+@SuppressWarnings("null")
 public class ConfigurationResolverAnnotationClassTest {
 
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
index 50db544..ced83d7 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
@@ -50,6 +50,7 @@ import com.google.common.collect.ImmutableList;
 /**
  * Test {@link ConfigurationResolver} with annotation classes for reading the config.
  */
+@SuppressWarnings("null")
 public class ConfigurationResolverCustomPersistence2Test {
 
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
index d5058c2..ed84581 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
@@ -50,6 +50,7 @@ import com.google.common.collect.ImmutableList;
 /**
  * Test {@link ConfigurationResolver} with annotation classes for reading the config.
  */
+@SuppressWarnings("null")
 public class ConfigurationResolverCustomPersistenceTest {
 
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
index 9030624..da74135 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
@@ -45,6 +45,7 @@ import com.google.common.collect.ImmutableMap;
 /**
  * Test {@link ConfigurationResolver} with ValueMap for reading the config.
  */
+@SuppressWarnings("null")
 public class ConfigurationResolverValueMapTest {
 
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java b/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
index 9018136..edb7af3 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
+import org.jetbrains.annotations.NotNull;
 
 import com.google.common.collect.ImmutableSortedSet;
 
@@ -43,7 +44,7 @@ class DummyConfigurationMetadataProvider implements ConfigurationMetadataProvide
     }
     
     @Override
-    public SortedSet<String> getConfigurationNames() {
+    public @NotNull SortedSet<String> getConfigurationNames() {
         return ImmutableSortedSet.of(configName);
     }
     
diff --git a/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java b/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
index 2f5ec8c..ee6251c 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 
+@SuppressWarnings("null")
 public class DefaultConfigurationInheritanceStrategyTest {
     
     private static final String PROPERTY_CONFIG_PROPERTY_INHERIT_CUSTOM = "custom:configPropertyInherit";
diff --git a/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java b/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
index 015cf9a..ded22e0 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
@@ -41,6 +41,7 @@ import org.junit.Test;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
+@SuppressWarnings("null")
 public class DefaultConfigurationPersistenceStrategyTest {
 
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java b/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java
index 3d93d41..e5cbe3e 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java
@@ -34,6 +34,7 @@ import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
 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;
@@ -101,7 +102,7 @@ public class ConfigurationMetadataProviderMultiplexerImplTest {
         }
         context.registerService(ConfigurationMetadataProvider.class, new ConfigurationMetadataProvider() {
             @Override
-            public SortedSet<String> getConfigurationNames() {
+            public @NotNull SortedSet<String> getConfigurationNames() {
                 return new TreeSet<>(metadata.keySet());
             }
             @Override
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java b/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java
index e686f0f..5950a7a 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
+import org.jetbrains.annotations.NotNull;
 
 import com.google.common.collect.ImmutableList;
 
@@ -34,7 +35,7 @@ public class DummyConfigurationOverrideProvider implements ConfigurationOverride
     }
 
     @Override
-    public Collection<String> getOverrideStrings() {
+    public @NotNull Collection<String> getOverrideStrings() {
         return overrideStrings;
     }
 
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java
index bcfb442..3007d50 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java
@@ -46,6 +46,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
 @RunWith(MockitoJUnitRunner.class)
+@SuppressWarnings("null")
 public class ConfigurationDataImplTest {
     
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
index 70649c6..0e957d5 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
@@ -49,6 +49,7 @@ import com.google.common.collect.ImmutableSet;
  * Test {@link ConfigurationManagerImpl} with no default implementation of the multiplexed services.
  */
 @RunWith(MockitoJUnitRunner.class)
+@SuppressWarnings("null")
 public class ConfigurationManagerImplNoDefaultTest {
     
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
index 8017ebd..10591b1 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
@@ -61,6 +61,7 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSortedSet;
 
 @RunWith(MockitoJUnitRunner.class)
+@SuppressWarnings("null")
 public class ConfigurationManagerImplTest {
     
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImplTest.java
index 369d6a7..1370f78 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImplTest.java
@@ -33,6 +33,8 @@ import org.apache.sling.caconfig.spi.ConfigurationCollectionPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -93,25 +95,25 @@ public class ConfigurationPersistenceStrategyMultiplexerImplTest {
         context.registerService(org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy.class,
                 new org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy() {
             @Override
-            public Resource getResource(Resource resource) {
+            public Resource getResource(@NotNull Resource resource) {
                 return resource2;
             }
             @Override
-            public String getResourcePath(String resourcePath) {
+            public String getResourcePath(@NotNull String resourcePath) {
                 return resource2.getPath();
             }
             @Override
-            public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-                    ConfigurationPersistData data) {
+            public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+                    @NotNull ConfigurationPersistData data) {
                 return true;
             }
             @Override
-            public boolean persistConfigurationCollection(ResourceResolver resourceResolver,
-                    String configResourceCollectionParentPath, ConfigurationCollectionPersistData data) {
+            public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver,
+                    @NotNull String configResourceCollectionParentPath, @NotNull ConfigurationCollectionPersistData data) {
                 return false;
             }
             @Override
-            public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+            public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
                 return false;
             }
         }, Constants.SERVICE_RANKING, 2000);
@@ -119,53 +121,53 @@ public class ConfigurationPersistenceStrategyMultiplexerImplTest {
         // strategy 2
         context.registerService(ConfigurationPersistenceStrategy2.class, new ConfigurationPersistenceStrategy2() {
             @Override
-            public Resource getResource(Resource resource) {
+            public Resource getResource(@NotNull Resource resource) {
                 return resource1;
             }
             @Override
-            public Resource getCollectionParentResource(Resource resource) {
+            public Resource getCollectionParentResource(@NotNull Resource resource) {
                 return resource1;
             }
             @Override
-            public Resource getCollectionItemResource(Resource resource) {
+            public Resource getCollectionItemResource(@NotNull Resource resource) {
                 return resource1;
             }
             @Override
-            public String getResourcePath(String resourcePath) {
+            public String getResourcePath(@NotNull String resourcePath) {
                 return resource1.getPath();
             }
             @Override
-            public String getCollectionParentResourcePath(String resourcePath) {
+            public String getCollectionParentResourcePath(@NotNull String resourcePath) {
                 return resource1.getPath();
             }
             @Override
-            public String getCollectionItemResourcePath(String resourcePath) {
+            public String getCollectionItemResourcePath(@NotNull String resourcePath) {
                 return resource1.getPath();
             }
             @Override
-            public String getConfigName(String configName, String relatedConfigPath) {
+            public String getConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
                 return resource1.getPath();
             }
             @Override
-            public String getCollectionParentConfigName(String configName, String relatedConfigPath) {
+            public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
                 return resource1.getPath();
             }
             @Override
-            public String getCollectionItemConfigName(String configName, String relatedConfigPath) {
+            public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
                 return resource1.getPath();
             }
             @Override
-            public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-                    ConfigurationPersistData data) {
+            public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+                    @NotNull ConfigurationPersistData data) {
                 return false;
             }
             @Override
-            public boolean persistConfigurationCollection(ResourceResolver resourceResolver,
-                    String configResourceCollectionParentPath, ConfigurationCollectionPersistData data) {
+            public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver,
+                    @NotNull String configResourceCollectionParentPath, @NotNull ConfigurationCollectionPersistData data) {
                 return true;
             }
             @Override
-            public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+            public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
                 return true;
             }
         }, Constants.SERVICE_RANKING, 1000);
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImplTest.java
index db0ed10..7a33a3d 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImplTest.java
@@ -34,6 +34,7 @@ import org.apache.sling.caconfig.resource.spi.ContextPathStrategy;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
 import org.apache.sling.hamcrest.ResourceIteratorMatchers;
 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;
@@ -114,7 +115,7 @@ public class ContextPathStrategyMultiplexerImplTest {
         }
         context.registerService(ContextPathStrategy.class, new ContextPathStrategy() {
             @Override
-            public Iterator<ContextResource> findContextResources(Resource resource) {
+            public @NotNull Iterator<ContextResource> findContextResources(@NotNull Resource resource) {
                 return toContextResourceIterator(resources.iterator());
             }
         });
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
index 207b79e..d21d742 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
@@ -35,6 +35,8 @@ import org.apache.sling.caconfig.spi.ConfigurationCollectionPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * This is a variant of {@link org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy}
@@ -46,70 +48,70 @@ public class CustomConfigurationPersistenceStrategy implements ConfigurationPers
     private static final String CHILD_NODE_NAME = JcrConstants.JCR_CONTENT;
     
     @Override
-    public Resource getResource(Resource resource) {
+    public Resource getResource(@NotNull Resource resource) {
         assertNotNull(resource);
         return resource.getChild(CHILD_NODE_NAME);
     }
 
     @Override
-    public Resource getCollectionParentResource(Resource resource) {
+    public Resource getCollectionParentResource(@NotNull Resource resource) {
         assertNotNull(resource);
         return resource;
     }
 
     @Override
-    public Resource getCollectionItemResource(Resource resource) {
+    public Resource getCollectionItemResource(@NotNull Resource resource) {
         assertNotNull(resource);
         return resource.getChild(CHILD_NODE_NAME);
     }
 
     @Override
-    public String getResourcePath(String resourcePath) {
+    public String getResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
         return resourcePath + "/" + CHILD_NODE_NAME;
     }
 
     @Override
-    public String getCollectionParentResourcePath(String resourcePath) {
+    public String getCollectionParentResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
         return resourcePath;
     }
 
     @Override
-    public String getCollectionItemResourcePath(String resourcePath) {
+    public String getCollectionItemResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
         return resourcePath + "/" + CHILD_NODE_NAME;
     }
 
     @Override
-    public String getConfigName(String configName, String relatedConfigPath) {
+    public String getConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
         return configName + "/" + CHILD_NODE_NAME;
     }
 
     @Override
-    public String getCollectionParentConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
         return configName;
     }
 
     @Override
-    public String getCollectionItemConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
         return configName + "/" + CHILD_NODE_NAME;
     }
     
     @Override
-    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-            ConfigurationPersistData data) {
+    public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+            @NotNull ConfigurationPersistData data) {
         getOrCreateResource(resourceResolver, configResourcePath + "/" + CHILD_NODE_NAME, data.getProperties());
         commit(resourceResolver);
         return true;
     }
 
     @Override
-    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
-            ConfigurationCollectionPersistData data) {
+    public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver, @NotNull String configResourceCollectionParentPath,
+            @NotNull ConfigurationCollectionPersistData data) {
         Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, ValueMap.EMPTY);
         
         // delete existing children and create new ones
@@ -129,7 +131,7 @@ public class CustomConfigurationPersistenceStrategy implements ConfigurationPers
     }
     
     @Override
-    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+    public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
         Resource resource = resourceResolver.getResource(configResourcePath);
         if (resource != null) {
             try {
@@ -166,6 +168,7 @@ public class CustomConfigurationPersistenceStrategy implements ConfigurationPers
         }
     }
     
+    @SuppressWarnings("null")
     private void replaceProperties(Resource resource, Map<String,Object> properties) {
         ModifiableValueMap modValueMap = resource.adaptTo(ModifiableValueMap.class);
         // remove all existing properties that do not have jcr: namespace
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
index da64c00..06af08c 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
@@ -36,6 +36,8 @@ import org.apache.sling.caconfig.spi.ConfigurationCollectionPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistData;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * This is a variant of {@link org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy}
@@ -52,7 +54,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     private static final Pattern JCR_CONTENT_PATTERN = Pattern.compile("(.*/)?" + Pattern.quote(CHILD_NODE_NAME) + "(/.*)?");
     
     @Override
-    public Resource getResource(Resource resource) {
+    public Resource getResource(@NotNull Resource resource) {
         assertNotNull(resource);
         if (containsJcrContent(resource.getPath())) {
             return resource;
@@ -63,7 +65,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
 
     @Override
-    public Resource getCollectionParentResource(Resource resource) {
+    public Resource getCollectionParentResource(@NotNull Resource resource) {
         assertNotNull(resource);
         if (containsJcrContent(resource.getPath())) {
             return resource;
@@ -74,13 +76,13 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
 
     @Override
-    public Resource getCollectionItemResource(Resource resource) {
+    public Resource getCollectionItemResource(@NotNull Resource resource) {
         assertNotNull(resource);
         return resource;
     }
 
     @Override
-    public String getResourcePath(String resourcePath) {
+    public String getResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
         if (containsJcrContent(resourcePath)) {
             return resourcePath;
@@ -91,7 +93,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionParentResourcePath(String resourcePath) {
+    public String getCollectionParentResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
         if (containsJcrContent(resourcePath)) {
             return resourcePath;
@@ -102,13 +104,13 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionItemResourcePath(String resourcePath) {
+    public String getCollectionItemResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
         return resourcePath;
     }
 
     @Override
-    public String getConfigName(String configName, String relatedConfigPath) {
+    public String getConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
         if (containsJcrContent(configName)) {
             return configName;
@@ -119,7 +121,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionParentConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
         if (containsJcrContent(configName)) {
             return configName;
@@ -130,22 +132,22 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
 
     @Override
-    public String getCollectionItemConfigName(String configName, String relatedConfigPath) {
+    public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
         return configName;
     }
     
     @Override
-    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
-            ConfigurationPersistData data) {
+    public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
+            @NotNull ConfigurationPersistData data) {
         getOrCreateResource(resourceResolver, getResourcePath(configResourcePath), data.getProperties());
         commit(resourceResolver);
         return true;
     }
 
     @Override
-    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
-            ConfigurationCollectionPersistData data) {
+    public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver, @NotNull String configResourceCollectionParentPath,
+            @NotNull ConfigurationCollectionPersistData data) {
         String parentPath = getCollectionParentResourcePath(configResourceCollectionParentPath);
         Resource configResourceParent = getOrCreateResource(resourceResolver, parentPath, ValueMap.EMPTY);
         
@@ -167,7 +169,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
     }
     
     @Override
-    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+    public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
         Resource resource = resourceResolver.getResource(configResourcePath);
         if (resource != null) {
             try {
@@ -204,6 +206,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         }
     }
     
+    @SuppressWarnings("null")
     private void replaceProperties(Resource resource, Map<String,Object> properties) {
         ModifiableValueMap modValueMap = resource.adaptTo(ModifiableValueMap.class);
         // remove all existing properties that do not have jcr: namespace
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImplTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImplTest.java
index 66d991a..c723cc0 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImplTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 
+@SuppressWarnings("null")
 public class ConfigurationResourceResolverImplTest {
     
     private static final String BUCKET = "sling:test";
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImplTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImplTest.java
index 034958f..c3e4998 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImplTest.java
@@ -36,6 +36,8 @@ import org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStra
 import org.apache.sling.hamcrest.ResourceCollectionMatchers;
 import org.apache.sling.hamcrest.ResourceMatchers;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -46,6 +48,7 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterators;
 
+@SuppressWarnings("null")
 public class ConfigurationResourceResolvingStrategyMultiplexerImplTest {
 
     private static final String BUCKET = "sling:test";
@@ -124,33 +127,33 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImplTest {
         // strategy 1
         context.registerService(ConfigurationResourceResolvingStrategy.class, new ConfigurationResourceResolvingStrategy() {
             @Override
-            public Resource getResource(Resource resource, Collection<String> bucketNames, String configName) {
+            public Resource getResource(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return context.resourceResolver().getResource("/conf/site1/sling:test/test");
             }
             @Override
-            public Collection<Resource> getResourceCollection(Resource resource, Collection<String> bucketNames, String configName) {
+            public Collection<Resource> getResourceCollection(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return ImmutableList.copyOf(context.resourceResolver().getResource("/conf/site1/sling:test/feature").listChildren());
             }
             @Override
-            public Iterator<Resource> getResourceInheritanceChain(Resource resource, Collection<String> bucketNames, String configName) {
+            public Iterator<Resource> getResourceInheritanceChain(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return Iterators.singletonIterator(getResource(resource, bucketNames, configName));
             }
             @Override
-            public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource,
-                    Collection<String> bucketNames, String configName) {
+            public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@NotNull Resource resource,
+                    @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return Collections2.transform(getResourceCollection(resource, bucketNames, configName), new Function<Resource, Iterator<Resource>>() {
                     @Override
-                    public Iterator<Resource> apply(Resource input) {
+                    public Iterator<Resource> apply(@Nullable Resource input) {
                         return Iterators.singletonIterator(input);
                     }
                 });
             }
             @Override
-            public String getResourcePath(Resource resource, String bucketName, String configName) {
+            public String getResourcePath(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
                 return "/conf/site1/sling:test/test";
             }
             @Override
-            public String getResourceCollectionParentPath(Resource resource, String bucketName, String configName) {
+            public String getResourceCollectionParentPath(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
                 return "/conf/site1/sling:test/feature";
             }
         }, Constants.SERVICE_RANKING, 2000);
@@ -158,33 +161,33 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImplTest {
         // strategy 2
         context.registerService(ConfigurationResourceResolvingStrategy.class, new ConfigurationResourceResolvingStrategy() {
             @Override
-            public Resource getResource(Resource resource, Collection<String> bucketNames, String configName) {
+            public Resource getResource(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return context.resourceResolver().getResource("/libs/conf/sling:test/test");
             }
             @Override
-            public Collection<Resource> getResourceCollection(Resource resource, Collection<String> bucketNames, String configName) {
+            public Collection<Resource> getResourceCollection(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return ImmutableList.copyOf(context.resourceResolver().getResource("/libs/conf/sling:test/feature").listChildren());
             }
             @Override
-            public Iterator<Resource> getResourceInheritanceChain(Resource resource, Collection<String> bucketNames, String configName) {
+            public Iterator<Resource> getResourceInheritanceChain(@NotNull Resource resource, @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return Iterators.singletonIterator(getResource(resource, bucketNames, configName));
             }
             @Override
-            public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource,
-                    Collection<String> bucketNames, String configName) {
+            public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@NotNull Resource resource,
+                    @NotNull Collection<String> bucketNames, @NotNull String configName) {
                 return Collections2.transform(getResourceCollection(resource, bucketNames, configName), new Function<Resource, Iterator<Resource>>() {
                     @Override
-                    public Iterator<Resource> apply(Resource input) {
+                    public Iterator<Resource> apply(@Nullable Resource input) {
                         return Iterators.singletonIterator(input);
                     }
                 });
             }
             @Override
-            public String getResourcePath(Resource resource, String bucketName, String configName) {
+            public String getResourcePath(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
                 return null;
             }
             @Override
-            public String getResourceCollectionParentPath(Resource resource, String bucketName, String configName) {
+            public String getResourceCollectionParentPath(@NotNull Resource resource, @NotNull String bucketName, @NotNull String configName) {
                 return null;
             }
         }, Constants.SERVICE_RANKING, 1000);
@@ -214,7 +217,7 @@ public class ConfigurationResourceResolvingStrategyMultiplexerImplTest {
         return Collections2.transform(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKETS, "feature"),
                 new Function<Iterator<Resource>, Resource>() {
                 @Override
-                public Resource apply(Iterator<Resource> input) {
+                public Resource apply(@Nullable Iterator<Resource> input) {
                     return input.next();
                 }
             });
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
index 1bc4993..5fb28b4 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
@@ -44,6 +44,7 @@ import com.google.common.collect.ImmutableList;
 /**
  * Tests with content and configurations that form a deeper nested hierarchy.
  */
+@SuppressWarnings("null")
 public class DefaultConfigurationResourceResolvingStrategyHierarchyTest {
     
     private static final String BUCKET = "sling:test";
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
index 4ff5000..e224541 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
@@ -36,6 +36,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+@SuppressWarnings("null")
 public class DefaultConfigurationResourceResolvingStrategyTest {
 
     private static final String BUCKET = "sling:test";
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIteratorTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIteratorTest.java
index 36f02f6..080d313 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIteratorTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIteratorTest.java
@@ -34,6 +34,7 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 
+@SuppressWarnings("null")
 public class ResourceEliminateDuplicatesIteratorTest {
     
     @Rule
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIteratorTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIteratorTest.java
index 85a9605..176239c 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIteratorTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIteratorTest.java
@@ -37,6 +37,7 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 
+@SuppressWarnings("null")
 public class ResourcePathCollatingIteratorTest {
 
     @Rule