[java-shib-profile] branch main updated: IDP-2083 - Treat NonnullElements as the default for collections

Scott Cantor cantor.2 at osu.edu
Mon May 1 20:27:47 UTC 2023


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch main
in repository java-shib-profile.

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-profile.git;a=commit;h=9837078d419cdb9db324dc1235e1e35ca3da2267

The following commit(s) were added to refs/heads/main by this push:
     new 9837078  IDP-2083 - Treat NonnullElements as the default for collections
9837078 is described below

commit 9837078d419cdb9db324dc1235e1e35ca3da2267
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon May 1 16:27:44 2023 -0400

    IDP-2083 - Treat NonnullElements as the default for collections
    
    https://shibboleth.atlassian.net/browse/IDP-2083
    
    Review and annotate packages in java-shib-profile.
---
 .../profile/config/logic/package-info.java         |  5 +++-
 ...ntTLSValidationConfigurationLookupFunction.java |  3 +-
 .../DecryptionConfigurationLookupFunction.java     |  3 +-
 .../EncryptionConfigurationLookupFunction.java     |  3 +-
 ...ignatureSigningConfigurationLookupFunction.java |  3 +-
 ...atureValidationConfigurationLookupFunction.java |  3 +-
 ...pClientSecurityConfigurationLookupFunction.java |  3 +-
 ...ignatureSigningConfigurationLookupFunction.java |  3 +-
 ...atureValidationConfigurationLookupFunction.java |  3 +-
 .../config/navigate/messaging/package-info.java    |  5 +++-
 .../profile/config/navigate/package-info.java      |  5 +++-
 .../shibboleth/profile/config/package-info.java    |  4 ++-
 .../shibboleth/profile/context/AuditContext.java   |  4 +--
 .../profile/context/RelyingPartyContext.java       | 33 +++++++++++++++++++++-
 .../context/logic/AbstractAttributePredicate.java  |  3 +-
 .../context/logic/DateAttributePredicate.java      |  3 +-
 .../context/logic/DynamicAttributePredicate.java   | 10 +++----
 .../context/logic/LoopDetectionPredicate.java      |  5 ++--
 .../context/logic/RegexAttributePredicate.java     |  7 +++--
 .../context/logic/RelyingPartyIdPredicate.java     |  7 ++---
 .../profile/context/logic/ScriptedPredicate.java   |  9 +++---
 .../context/logic/SimpleAttributePredicate.java    |  9 +++---
 .../context/logic/messaging/package-info.java      |  5 +++-
 .../profile/context/logic/package-info.java        |  5 +++-
 .../context/navigate/IssuerLookupFunction.java     |  4 +--
 .../navigate/ScriptedContextLookupFunction.java    |  1 -
 .../ServletRequestProfileRequestContextLookup.java |  5 ++--
 .../profile/context/navigate/package-info.java     |  5 +++-
 .../shibboleth/profile/context/package-info.java   |  5 +++-
 .../BasicRelyingPartyConfiguration.java            | 10 +++----
 .../relyingparty/RelyingPartyConfiguration.java    |  3 +-
 .../RelyingPartyConfigurationResolver.java         |  5 ++--
 .../RelyingPartyCredentialResolver.java            |  3 +-
 .../profile/relyingparty/package-info.java         |  5 +++-
 .../profile/audit/impl/package-info.java           |  5 +++-
 .../profile/context/logic/impl/package-info.java   |  5 +++-
 .../impl/CriteriaSelfEntityIDResolver.java         |  4 +--
 .../DefaultRelyingPartyConfigurationResolver.java  | 19 +++++--------
 .../profile/relyingparty/impl/package-info.java    |  5 +++-
 .../profile/spring/impl/package-info.java          |  5 +++-
 .../net/shibboleth/saml/binding/package-info.java  |  5 +++-
 ...SAMLAssertionConsumingProfileConfiguration.java |  3 +-
 ...SAMLAssertionProducingProfileConfiguration.java |  3 +-
 .../config/logic/SignAssertionsPredicate.java      |  2 +-
 .../config/logic/SignRequestsPredicate.java        | 10 ++++---
 .../config/logic/messaging/package-info.java       |  5 +++-
 .../saml/profile/config/logic/package-info.java    |  5 +++-
 .../navigate/AssertionAudiencesLookupFunction.java |  4 ++-
 .../AudienceRestrictionsLookupFunction.java        |  3 +-
 .../config/navigate/messaging/package-info.java    |  5 +++-
 .../saml/profile/config/navigate/package-info.java |  5 +++-
 .../saml/profile/config/package-info.java          |  5 +++-
 .../logic/MappedEntityAttributesPredicate.java     | 24 ++++++++--------
 .../saml/profile/context/logic/package-info.java   |  5 +++-
 .../context/navigate/messaging/package-info.java   |  5 +++-
 .../profile/context/navigate/package-info.java     |  5 +++-
 .../RelyingPartyConfigurationSupport.java          | 17 ++++-------
 .../shibboleth/saml/relyingparty/package-info.java |  5 +++-
 .../saml/saml1/profile/config/package-info.java    |  5 +++-
 .../config/BrowserSSOProfileConfiguration.java     |  3 +-
 .../config/SingleLogoutProfileConfiguration.java   |  4 +--
 .../config/logic/messaging/package-info.java       |  5 +++-
 .../saml2/profile/config/logic/package-info.java   |  5 +++-
 .../QualifiedNameIDFormatsLookupFunction.java      |  3 +-
 .../profile/config/navigate/package-info.java      |  5 +++-
 .../saml/saml2/profile/config/package-info.java    |  5 +++-
 66 files changed, 240 insertions(+), 143 deletions(-)

diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/logic/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/logic/package-info.java
index 865da32..596d607 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/logic/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/logic/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates based on profile configuration settings.
  */
-package net.shibboleth.profile.config.logic;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.config.logic;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/ClientTLSValidationConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/ClientTLSValidationConfigurationLookupFunction.java
index 2673f0c..91d06d3 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/ClientTLSValidationConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/ClientTLSValidationConfigurationLookupFunction.java
@@ -24,6 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 import org.opensaml.core.config.ConfigurationService;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -39,7 +40,7 @@ public class ClientTLSValidationConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<ClientTLSValidationConfiguration>> {
 
     /** {@inheritDoc} */
-    @Nullable public List<ClientTLSValidationConfiguration> apply(@Nullable final ProfileRequestContext input) {
+    @Nullable @Live public List<ClientTLSValidationConfiguration> apply(@Nullable final ProfileRequestContext input) {
         
         final List<ClientTLSValidationConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/DecryptionConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/DecryptionConfigurationLookupFunction.java
index 7b34b19..aaf3361 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/DecryptionConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/DecryptionConfigurationLookupFunction.java
@@ -24,6 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.config.SecurityConfiguration;
@@ -40,7 +41,7 @@ public class DecryptionConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<DecryptionConfiguration>> {
 
     /** {@inheritDoc} */
-    @Nullable public List<DecryptionConfiguration> apply(@Nullable final ProfileRequestContext input) {
+    @Nullable @Live public List<DecryptionConfiguration> apply(@Nullable final ProfileRequestContext input) {
 
         final List<DecryptionConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/EncryptionConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/EncryptionConfigurationLookupFunction.java
index bb11527..890f2e2 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/EncryptionConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/EncryptionConfigurationLookupFunction.java
@@ -24,6 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.config.SecurityConfiguration;
@@ -40,7 +41,7 @@ public class EncryptionConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<EncryptionConfiguration>> {
     
     /** {@inheritDoc} */
-    @Nullable public List<EncryptionConfiguration> apply(@Nullable final ProfileRequestContext input) {
+    @Nullable @Live public List<EncryptionConfiguration> apply(@Nullable final ProfileRequestContext input) {
         
         final List<EncryptionConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java
index 818968c..e828e79 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java
@@ -24,6 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.config.SecurityConfiguration;
@@ -40,7 +41,7 @@ public class SignatureSigningConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<SignatureSigningConfiguration>> {
 
     /** {@inheritDoc} */
-    @Nullable public List<SignatureSigningConfiguration> apply(@Nullable final ProfileRequestContext input) {
+    @Nullable @Live public List<SignatureSigningConfiguration> apply(@Nullable final ProfileRequestContext input) {
         
         final List<SignatureSigningConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureValidationConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureValidationConfigurationLookupFunction.java
index e577112..398197c 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureValidationConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/SignatureValidationConfigurationLookupFunction.java
@@ -24,6 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.config.SecurityConfiguration;
@@ -40,7 +41,7 @@ public class SignatureValidationConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<SignatureValidationConfiguration>> {
 
     /** {@inheritDoc} */
-    @Nullable public List<SignatureValidationConfiguration> apply(@Nullable final ProfileRequestContext input) {
+    @Nullable @Live public List<SignatureValidationConfiguration> apply(@Nullable final ProfileRequestContext input) {
         
         final List<SignatureValidationConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java
index efa4082..daeb6f1 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java
@@ -29,6 +29,7 @@ import org.opensaml.security.httpclient.HttpClientSecuritySupport;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 /**
  * A {@link MessageContext} function that returns a {@link HttpClientSecurityConfiguration} list 
@@ -40,7 +41,7 @@ public class HttpClientSecurityConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<HttpClientSecurityConfiguration>> {
 
     /** {@inheritDoc} */
-    @Nullable public List<HttpClientSecurityConfiguration> apply(@Nullable final MessageContext input) {
+    @Nullable @Live public List<HttpClientSecurityConfiguration> apply(@Nullable final MessageContext input) {
         
         final List<HttpClientSecurityConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java
index 85387b0..1e6f4c2 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java
@@ -30,6 +30,7 @@ import org.opensaml.xmlsec.config.XMLSecurityConfiguration;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 /**
  * A {@link MessageContext} function that returns a {@link SignatureSigningConfiguration} list 
@@ -41,7 +42,7 @@ public class SignatureSigningConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<SignatureSigningConfiguration>> {
     
     /** {@inheritDoc} */
-    @Nullable public List<SignatureSigningConfiguration> apply(@Nullable final MessageContext input) {
+    @Nullable @Live public List<SignatureSigningConfiguration> apply(@Nullable final MessageContext input) {
         
         final List<SignatureSigningConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java
index 0a317b0..0c7d457 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java
@@ -30,6 +30,7 @@ import org.opensaml.xmlsec.config.XMLSecurityConfiguration;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
 
 /**
  * A {@link MessageContext} function that returns a {@link SignatureValidationConfiguration} list 
@@ -41,7 +42,7 @@ public class SignatureValidationConfigurationLookupFunction
         extends AbstractDefaultSecurityConfigurationLookupFunction<List<SignatureValidationConfiguration>> {
     
     /** {@inheritDoc} */
-    @Nullable public List<SignatureValidationConfiguration> apply(@Nullable final MessageContext input) {
+    @Nullable @Live public List<SignatureValidationConfiguration> apply(@Nullable final MessageContext input) {
         
         final List<SignatureValidationConfiguration> configs = new ArrayList<>();
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/package-info.java
index c33e005..058757e 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/messaging/package-info.java
@@ -19,4 +19,7 @@
  * Lookup functions for accessing profile configuration and related settings via
  * a message context.
  */
-package net.shibboleth.profile.config.navigate.messaging;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.config.navigate.messaging;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/package-info.java
index ed3ed5c..db98583 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/navigate/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Lookup functions for accessing profile configuration and related settings.
  */
-package net.shibboleth.profile.config.navigate;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.config.navigate;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/config/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/config/package-info.java
index b3599a5..4c6469b 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/config/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/config/package-info.java
@@ -18,5 +18,7 @@
 /** 
  * Classes pertaining to request-time profile configuration options.
  */
+ at NonnullElements
+package net.shibboleth.profile.config;
 
-package net.shibboleth.profile.config;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/AuditContext.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/AuditContext.java
index 0643add..5e8ab32 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/AuditContext.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/AuditContext.java
@@ -36,7 +36,7 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
 public final class AuditContext extends BaseContext {
 
     /** Extensible map of arbitrary field to data mappings. */
-    @Nonnull @NonnullElements private Multimap<String,String> fieldMap;
+    @Nonnull private Multimap<String,String> fieldMap;
     
     /** Constructor. */
     public AuditContext() {
@@ -48,7 +48,7 @@ public final class AuditContext extends BaseContext {
      * 
      * @return field/data mappings
      */
-    @Nonnull @NonnullElements @Live public Multimap<String,String> getFields() {
+    @Nonnull @Live public Multimap<String,String> getFields() {
         return fieldMap;
     }
     
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/RelyingPartyContext.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/RelyingPartyContext.java
index e39b2ee..017462d 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/RelyingPartyContext.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/RelyingPartyContext.java
@@ -191,7 +191,21 @@ public final class RelyingPartyContext extends BaseContext {
     @Nullable public RelyingPartyConfiguration getConfiguration() {
         return relyingPartyConfiguration;
     }
-
+    
+    /**
+     * Get the relying party configuration, raising an {@link IllegalStateException} if null.
+     * 
+     * @return the relying party configuration
+     * 
+     * @since 5.0.0
+     */
+    @Nonnull public RelyingPartyConfiguration ensureConfiguration() {
+        if (relyingPartyConfiguration != null) {
+            return relyingPartyConfiguration;
+        }
+        throw new IllegalStateException("RelyingPartyConfiguration was null");
+    }
+    
     /**
      * Set the configuration to use when processing requests for this relying party.
      * 
@@ -213,6 +227,23 @@ public final class RelyingPartyContext extends BaseContext {
         return profileConfiguration;
     }
 
+
+    /**
+     * Get the configuration for the request profile currently being processed,
+     * raising an {@link IllegalStateException} if null.
+     * 
+     * @return profile configuration for the request profile currently being processed
+     * 
+     * @since 5.0.0
+     */
+    @Nonnull public ProfileConfiguration ensureProfileConfig() {
+        if (profileConfiguration != null) {
+            return this.profileConfiguration;
+        }
+        
+        throw new IllegalStateException("ProfileConfiguration was null");
+    }
+    
     /**
      * Set the configuration for the request profile currently being processed.
      * 
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/AbstractAttributePredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/AbstractAttributePredicate.java
index 8c78a9a..83f3a6d 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/AbstractAttributePredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/AbstractAttributePredicate.java
@@ -31,7 +31,6 @@ import org.slf4j.Logger;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
 
@@ -134,6 +133,6 @@ public abstract class AbstractAttributePredicate implements Predicate<ProfileReq
      * 
      * @return the condition result
      */
-    protected abstract boolean hasMatch(@Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap);
+    protected abstract boolean hasMatch(@Nonnull final Map<String,IdPAttribute> attributeMap);
     
 }
\ No newline at end of file
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DateAttributePredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DateAttributePredicate.java
index 315971d..505c2db 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DateAttributePredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DateAttributePredicate.java
@@ -33,7 +33,6 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.shared.annotation.ParameterName;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -133,7 +132,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
 
     /** {@inheritDoc} */
     @Override
-    protected boolean hasMatch(@Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap) {
+    protected boolean hasMatch(@Nonnull final Map<String,IdPAttribute> attributeMap) {
         
         final IdPAttribute attribute = attributeMap.get(attributeName);
         if (attribute == null) {
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DynamicAttributePredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DynamicAttributePredicate.java
index 384e113..f14dc7d 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DynamicAttributePredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/DynamicAttributePredicate.java
@@ -35,7 +35,6 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -58,9 +57,10 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
     @Nonnull private final Logger log = LoggerFactory.getLogger(DynamicAttributePredicate.class);
 
     /** Map of attribute IDs to functions. */
-    @Nonnull @NonnullElements private ListMultimap<String,Function<ProfileRequestContext,Object>> attributeFunctionMap;
+    @Nonnull private ListMultimap<String,Function<ProfileRequestContext,Object>> attributeFunctionMap;
     
     /** Constructor. */
+    @SuppressWarnings("null")
     public DynamicAttributePredicate() {
         attributeFunctionMap = ArrayListMultimap.create();
     }
@@ -71,7 +71,7 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
      * @param map   map of attribute/function pairs
      */
     public void setAttributeFunctionMap(
-            @Nonnull @NonnullElements final Map<String,Collection<Function<ProfileRequestContext,Object>>> map) {
+            @Nonnull final Map<String,Collection<Function<ProfileRequestContext,Object>>> map) {
         Constraint.isNotNull(map, "Attribute/value map cannot be null");
         
         attributeFunctionMap.clear();
@@ -103,7 +103,7 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
 
     /** {@inheritDoc} */
     @Override
-    protected boolean hasMatch(@Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap) {
+    protected boolean hasMatch(@Nonnull final Map<String,IdPAttribute> attributeMap) {
         log.error("Method should never be called");
         return false;
     }
@@ -118,7 +118,7 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
      * @return the condition result
      */
     protected boolean hasMatch(@Nullable final ProfileRequestContext profileRequestContext,
-            @Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap) {
+            @Nonnull final Map<String,IdPAttribute> attributeMap) {
         
         for (final String id : attributeFunctionMap.keySet()) {
             log.debug("Checking for attribute: {}", id);
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/LoopDetectionPredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/LoopDetectionPredicate.java
index f457338..b3217b9 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/LoopDetectionPredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/LoopDetectionPredicate.java
@@ -33,7 +33,6 @@ import com.codahale.metrics.MetricRegistry.MetricSupplier;
 import com.codahale.metrics.SlidingTimeWindowMovingAverages;
 
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.Positive;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
@@ -54,7 +53,7 @@ public class LoopDetectionPredicate extends AbstractRelyingPartyPredicate {
     private long threshold;
     
     /** Map of RP names to meter names. */
-    @Nonnull @NonnullElements private Map<String,String> relyingPartyMap;
+    @Nonnull private Map<String,String> relyingPartyMap;
     
     /** Lookup strategy to obtain subject name. */
     @Nonnull private Function<ProfileRequestContext,String> usernameLookupStrategy;
@@ -82,7 +81,7 @@ public class LoopDetectionPredicate extends AbstractRelyingPartyPredicate {
      * 
      * @param map map of RP/meter mappings
      */
-    public void setRelyingPartyMap(@Nullable @NonnullElements final Map<String,String> map) {
+    public void setRelyingPartyMap(@Nullable final Map<String,String> map) {
         if (map != null) {
             relyingPartyMap = CollectionSupport.copyToMap(map);
         } else {
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RegexAttributePredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RegexAttributePredicate.java
index 2256eb3..2ea1098 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RegexAttributePredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RegexAttributePredicate.java
@@ -29,13 +29,14 @@ import org.slf4j.Logger;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
+
 /**
- * Predicate that evaluates an {@link net.shibboleth.idp.attribute.context.AttributeContext} and checks
+ * Predicate that evaluates an {@link AttributeContext} and checks
  * a specific attribute for value(s) that match a regular expression.
  * 
  * <p>This handles only simple string-valued data.</p>
@@ -97,7 +98,7 @@ public class RegexAttributePredicate extends AbstractAttributePredicate {
     }
 
     /** {@inheritDoc} */
-    @Override protected boolean hasMatch(@Nonnull @NonnullElements final Map<String, IdPAttribute> attributeMap) {
+    @Override protected boolean hasMatch(@Nonnull final Map<String, IdPAttribute> attributeMap) {
 
         if (attributeId == null || pattern == null) {
             log.warn("Attribute ID or regular expression were not set");
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RelyingPartyIdPredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RelyingPartyIdPredicate.java
index a14bbd3..c1dcef9 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RelyingPartyIdPredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/RelyingPartyIdPredicate.java
@@ -25,7 +25,6 @@ import javax.annotation.Nonnull;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.context.navigate.RelyingPartyIdLookupFunction;
 import net.shibboleth.shared.annotation.ParameterName;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.StrategyIndirectedPredicate;
@@ -45,8 +44,7 @@ public class RelyingPartyIdPredicate extends StrategyIndirectedPredicate<Profile
      * 
      * @param candidates hardwired set of values to check against
      */
-    public RelyingPartyIdPredicate(
-            @Nonnull @NonnullElements @ParameterName(name="candidates") final Collection<String> candidates) {
+    public RelyingPartyIdPredicate(@Nonnull @ParameterName(name="candidates") final Collection<String> candidates) {
         super(new RelyingPartyIdLookupFunction(), StringSupport.normalizeStringCollection(candidates));
     }
 
@@ -77,8 +75,7 @@ public class RelyingPartyIdPredicate extends StrategyIndirectedPredicate<Profile
      * 
      * @since 3.4.0
      */
-    @Nonnull public static RelyingPartyIdPredicate fromCandidates(
-            @Nonnull @NonnullElements final Collection<String> candidates) {
+    @Nonnull public static RelyingPartyIdPredicate fromCandidates(@Nonnull final Collection<String> candidates) {
         return new RelyingPartyIdPredicate(candidates);
     }
     
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/ScriptedPredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/ScriptedPredicate.java
index 426c304..4ba6672 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/ScriptedPredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/ScriptedPredicate.java
@@ -77,7 +77,7 @@ public class ScriptedPredicate
      * @throws ScriptException if the compile fails
      * @throws IOException if the file doesn't exist.
      */
-    public static ScriptedPredicate resourceScript(@Nonnull @NotEmpty final String engineName,
+    @Nonnull public static ScriptedPredicate resourceScript(@Nonnull @NotEmpty final String engineName,
             @Nonnull final Resource resource) throws ScriptException, IOException {
         try (final InputStream is = resource.getInputStream()) {
             final EvaluableScript script = new EvaluableScript();
@@ -96,7 +96,7 @@ public class ScriptedPredicate
      * @throws ScriptException if the compile fails
      * @throws IOException if the file doesn't exist.
      */
-    public static ScriptedPredicate resourceScript(@Nonnull final Resource resource)
+    @Nonnull public static ScriptedPredicate resourceScript(@Nonnull final Resource resource)
             throws ScriptException, IOException {
         return resourceScript(DEFAULT_ENGINE, resource);
     }
@@ -109,7 +109,7 @@ public class ScriptedPredicate
      * @return the predicate
      * @throws ScriptException if the compile fails
      */
-    public static ScriptedPredicate inlineScript(@Nonnull @NotEmpty final String engineName,
+    @Nonnull public static ScriptedPredicate inlineScript(@Nonnull @NotEmpty final String engineName,
             @Nonnull @NotEmpty final String scriptSource) throws ScriptException {
         final EvaluableScript script = new EvaluableScript();
         script.setEngineName(engineName);
@@ -125,7 +125,8 @@ public class ScriptedPredicate
      * @return the predicate
      * @throws ScriptException if the compile fails
      */
-    public static ScriptedPredicate inlineScript(@Nonnull @NotEmpty final String scriptSource) throws ScriptException {
+    @Nonnull public static ScriptedPredicate inlineScript(@Nonnull @NotEmpty final String scriptSource)
+            throws ScriptException {
         return inlineScript(DEFAULT_ENGINE, scriptSource);
     }
 
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/SimpleAttributePredicate.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/SimpleAttributePredicate.java
index 1c6b166..59a3701 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/SimpleAttributePredicate.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/SimpleAttributePredicate.java
@@ -32,7 +32,6 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -57,12 +56,13 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
     @Nonnull private final Logger log = LoggerFactory.getLogger(SimpleAttributePredicate.class);
 
     /** Map of attribute IDs to values. */
-    @Nonnull @NonnullElements private ListMultimap<String,String> attributeValueMap;
+    @Nonnull private ListMultimap<String,String> attributeValueMap;
     
     /** Optional scope to check. */
     @Nullable @NotEmpty private String scope;
     
     /** Constructor. */
+    @SuppressWarnings("null")
     public SimpleAttributePredicate() {
         attributeValueMap = ArrayListMultimap.create();
     }
@@ -72,7 +72,7 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
      * 
      * @param map   map of attribute/value pairs
      */
-    public void setAttributeValueMap(@Nonnull @NonnullElements final Map<String,Collection<String>> map) {
+    public void setAttributeValueMap(@Nonnull final Map<String,Collection<String>> map) {
         Constraint.isNotNull(map, "Attribute/value map cannot be null");
         
         attributeValueMap.clear();
@@ -104,7 +104,7 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
 
     /** {@inheritDoc} */
     @Override
-    protected boolean hasMatch(final Map<String, IdPAttribute> attributeMap) {
+    protected boolean hasMatch(@Nonnull final Map<String, IdPAttribute> attributeMap) {
         for (final String id : attributeValueMap.keySet()) {
             log.debug("Checking for attribute: {}", id);
 
@@ -117,6 +117,7 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
             boolean matched = false;
 
             for (final String value : attributeValueMap.get(id)) {
+                assert value != null;
                 if (findMatch(value, attribute)) {
                     matched = true;
                     break;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/messaging/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/messaging/package-info.java
index 27ac960..2fcd6a7 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/messaging/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/messaging/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates that evaluate message contexts.
  */
-package net.shibboleth.profile.context.logic.messaging;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.context.logic.messaging;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/package-info.java
index f67fb88..abb95d9 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/logic/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates that evaluate profile contexts.
  */
-package net.shibboleth.profile.context.logic;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.context.logic;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/IssuerLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/IssuerLookupFunction.java
index ddf3024..8114ab4 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/IssuerLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/IssuerLookupFunction.java
@@ -44,8 +44,8 @@ public class IssuerLookupFunction extends AbstractRelyingPartyLookupFunction<Str
             final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
             if (rpc != null) {
                 final ProfileConfiguration pc = rpc.getProfileConfig();
-                if (pc instanceof OverriddenIssuerProfileConfiguration) {
-                    final String issuer = ((OverriddenIssuerProfileConfiguration) pc).getIssuer(input);
+                if (pc instanceof OverriddenIssuerProfileConfiguration downcast) {
+                    final String issuer = downcast.getIssuer(input);
                     if (issuer != null) {
                         return issuer;
                     }
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ScriptedContextLookupFunction.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ScriptedContextLookupFunction.java
index 0cedf0d..3e7ad07 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ScriptedContextLookupFunction.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ScriptedContextLookupFunction.java
@@ -42,7 +42,6 @@ import org.springframework.core.io.Resource;
  * 
  * @param <T> the specific type of context
  */
- at SuppressWarnings("removal")
 public class ScriptedContextLookupFunction<T extends BaseContext> extends AbstractScriptEvaluator
         implements ContextDataLookupFunction<T,Object> {
 
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ServletRequestProfileRequestContextLookup.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ServletRequestProfileRequestContextLookup.java
index 27e555c..b6faa8b 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ServletRequestProfileRequestContextLookup.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/ServletRequestProfileRequestContextLookup.java
@@ -32,9 +32,8 @@ import jakarta.servlet.ServletRequest;
 public class ServletRequestProfileRequestContextLookup implements Function<ServletRequest,ProfileRequestContext> {
 
     /** {@inheritDoc} */
-    @Nullable
-    public ProfileRequestContext apply(final ServletRequest input) {
-        return (ProfileRequestContext) input.getAttribute(ProfileRequestContext.BINDING_KEY);
+    @Nullable public ProfileRequestContext apply(@Nullable final ServletRequest input) {
+        return  input != null ? (ProfileRequestContext) input.getAttribute(ProfileRequestContext.BINDING_KEY) : null;
     }
 
 }
\ No newline at end of file
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/package-info.java
index 381aa04..2cb7625 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/navigate/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Context lookup functions that navigate profile contexts.
  */
-package net.shibboleth.profile.context.navigate;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.context.navigate;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/context/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/context/package-info.java
index 329b652..6ec4f61 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/context/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/context/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Context classes used in profile handling.
  */
-package net.shibboleth.profile.context;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.context;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/BasicRelyingPartyConfiguration.java b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/BasicRelyingPartyConfiguration.java
index d433f2c..2d009f5 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/BasicRelyingPartyConfiguration.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/BasicRelyingPartyConfiguration.java
@@ -19,7 +19,6 @@ package net.shibboleth.profile.relyingparty;
 
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 import java.util.function.Predicate;
@@ -31,7 +30,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.config.SecurityConfiguration;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
@@ -184,7 +182,7 @@ public class BasicRelyingPartyConfiguration extends AbstractIdentifiableInitiali
     }
     
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive public Map<String,ProfileConfiguration> getProfileConfigurations(
+    @Nonnull @Unmodifiable @NotLive public Map<String,ProfileConfiguration> getProfileConfigurations(
             @Nullable final ProfileRequestContext profileRequestContext) {
         
         final Map<String,ProfileConfiguration> map = profileConfigurationsLookupStrategy.apply(profileRequestContext);
@@ -210,19 +208,19 @@ public class BasicRelyingPartyConfiguration extends AbstractIdentifiableInitiali
      * 
      * @param configs the configurations to set
      */
-    public void setProfileConfigurations(@Nullable @NonnullElements final Collection<ProfileConfiguration> configs) {
+    public void setProfileConfigurations(@Nullable final Collection<ProfileConfiguration> configs) {
         checkSetterPreconditions();
         if (configs == null) {
             profileConfigurationsLookupStrategy = FunctionSupport.constant(null);
         } else {
             final HashMap<String,ProfileConfiguration> map = new HashMap<>();
-            for (final ProfileConfiguration config : List.copyOf(configs)) {
+            for (final ProfileConfiguration config : configs) {
                 final String trimmedId =
                         Constraint.isNotNull(StringSupport.trimOrNull(config.getId()),
                                 "ID of profile configuration class " + config.getClass().getName() + " cannot be null");
                 map.put(trimmedId, config);
             }
-            profileConfigurationsLookupStrategy = FunctionSupport.constant(Map.copyOf(map));
+            profileConfigurationsLookupStrategy = FunctionSupport.constant(map);
         }
     }
 
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfiguration.java b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfiguration.java
index 3f4d061..981478f 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfiguration.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfiguration.java
@@ -27,7 +27,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.config.SecurityConfiguration;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
@@ -96,7 +95,7 @@ public interface RelyingPartyConfiguration extends InitializableComponent, Ident
      * 
      * @return unmodifiable set of profile configurations for this relying party, never null
      */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive Map<String,ProfileConfiguration> getProfileConfigurations(
+    @Nonnull @Unmodifiable @NotLive Map<String,ProfileConfiguration> getProfileConfigurations(
             @Nullable final ProfileRequestContext profileRequestContext);
 
     /**
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfigurationResolver.java b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfigurationResolver.java
index f2dfedc..06b74d5 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfigurationResolver.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyConfigurationResolver.java
@@ -24,7 +24,6 @@ import javax.annotation.Nonnull;
 import org.opensaml.profile.criterion.ProfileRequestContextCriterion;
 import org.opensaml.security.credential.Credential;
 
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.component.IdentifiedComponent;
@@ -50,13 +49,13 @@ public interface RelyingPartyConfigurationResolver extends Resolver<RelyingParty
      * 
      * @return signing credentials
      */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive public Collection<Credential> getSigningCredentials();
+    @Nonnull @Unmodifiable @NotLive public Collection<Credential> getSigningCredentials();
     
     /**
      * Directly expose any configured encryption (really decryption) credentials.
      * 
      * @return signing credentials
      */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive public Collection<Credential> getEncryptionCredentials();
+    @Nonnull @Unmodifiable @NotLive public Collection<Credential> getEncryptionCredentials();
 
 }
\ No newline at end of file
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyCredentialResolver.java b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyCredentialResolver.java
index 3cb5560..facbe37 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyCredentialResolver.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/RelyingPartyCredentialResolver.java
@@ -85,8 +85,7 @@ public class RelyingPartyCredentialResolver implements CredentialResolver, Ident
     }
     
     /** {@inheritDoc} */
-    @Nonnull public Iterable<Credential> resolve(@Nullable final CriteriaSet criteria) 
-            throws ResolverException {
+    @Nonnull public Iterable<Credential> resolve(@Nullable final CriteriaSet criteria) throws ResolverException {
         
         final UsageCriterion usage = criteria != null ? criteria.get(UsageCriterion.class) : null;
         
diff --git a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/package-info.java b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/package-info.java
index e3947e9..b8b50f7 100644
--- a/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/package-info.java
+++ b/shib-profile-api/src/main/java/net/shibboleth/profile/relyingparty/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Shared RelyingPartyConfiguration and resolver APIs.
  */
-package net.shibboleth.profile.relyingparty;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.relyingparty;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-impl/src/main/java/net/shibboleth/profile/audit/impl/package-info.java b/shib-profile-impl/src/main/java/net/shibboleth/profile/audit/impl/package-info.java
index 018eaf7..f29c22a 100644
--- a/shib-profile-impl/src/main/java/net/shibboleth/profile/audit/impl/package-info.java
+++ b/shib-profile-impl/src/main/java/net/shibboleth/profile/audit/impl/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Audit implementation classes.
  */
-package net.shibboleth.profile.audit.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.audit.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-impl/src/main/java/net/shibboleth/profile/context/logic/impl/package-info.java b/shib-profile-impl/src/main/java/net/shibboleth/profile/context/logic/impl/package-info.java
index 30d803f..4439907 100644
--- a/shib-profile-impl/src/main/java/net/shibboleth/profile/context/logic/impl/package-info.java
+++ b/shib-profile-impl/src/main/java/net/shibboleth/profile/context/logic/impl/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Implementation classes supporting profile predicates.
  */
-package net.shibboleth.profile.context.logic.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.context.logic.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/CriteriaSelfEntityIDResolver.java b/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/CriteriaSelfEntityIDResolver.java
index 79d15e9..301bbef 100644
--- a/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/CriteriaSelfEntityIDResolver.java
+++ b/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/CriteriaSelfEntityIDResolver.java
@@ -34,7 +34,6 @@ import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.profile.relyingparty.RelyingPartyConfigurationResolver;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent;
@@ -99,8 +98,7 @@ public class CriteriaSelfEntityIDResolver extends AbstractIdentifiedInitializabl
     }
 
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements public Iterable<String> resolve(@Nullable final CriteriaSet criteria)
-            throws ResolverException {
+    @Nonnull public Iterable<String> resolve(@Nullable final CriteriaSet criteria) throws ResolverException {
         checkComponentActive();
         final String entityID = resolveSingle(criteria);
         if (entityID != null) {
diff --git a/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/DefaultRelyingPartyConfigurationResolver.java b/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/DefaultRelyingPartyConfigurationResolver.java
index b296eb4..3f62de5 100644
--- a/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/DefaultRelyingPartyConfigurationResolver.java
+++ b/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/DefaultRelyingPartyConfigurationResolver.java
@@ -43,7 +43,6 @@ import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.profile.relyingparty.RelyingPartyConfigurationResolver;
 import net.shibboleth.profile.relyingparty.VerifiedProfileCriterion;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
@@ -106,7 +105,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
      * 
      * @return unmodifiable list of verified relying party configurations
      */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive
+    @Nonnull @Unmodifiable @NotLive
     public Collection<? extends RelyingPartyConfiguration> getRelyingPartyConfigurations() {
         return rpConfigurations;
     }
@@ -116,8 +115,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
      * 
      * @param configs list of verified relying party configurations
      */
-    public void setRelyingPartyConfigurations(
-            @Nullable @NonnullElements final Collection<? extends RelyingPartyConfiguration> configs) {
+    public void setRelyingPartyConfigurations(@Nullable final Collection<? extends RelyingPartyConfiguration> configs) {
         checkSetterPreconditions();
         
         if (configs != null) {
@@ -184,8 +182,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
     }
 
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements public Iterable<RelyingPartyConfiguration> resolve(@Nullable final CriteriaSet criteria)
-            throws ResolverException {
+    @Nonnull public Iterable<RelyingPartyConfiguration> resolve(@Nullable final CriteriaSet criteria) throws ResolverException {
         checkComponentActive();
 
         log.debug("Resolving relying party configuration");
@@ -277,7 +274,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
     }
 
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive public Collection<Credential> getSigningCredentials() {
+    @Nonnull @Unmodifiable @NotLive public Collection<Credential> getSigningCredentials() {
         return signingCredentials;
     }
     
@@ -288,8 +285,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
      */
     @Autowired
     @Qualifier("signing")
-    public void setSigningCredentials(
-            @Nullable @NonnullElements final List<CredentialHolder> credentials) {
+    public void setSigningCredentials(@Nullable final List<CredentialHolder> credentials) {
         checkSetterPreconditions();
         
         if (credentials != null) {
@@ -302,7 +298,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
     }
 
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive public Collection<Credential> getEncryptionCredentials() {
+    @Nonnull @Unmodifiable @NotLive public Collection<Credential> getEncryptionCredentials() {
         return encryptionCredentials;
     }
     
@@ -313,8 +309,7 @@ public class DefaultRelyingPartyConfigurationResolver extends AbstractIdentifiab
      */
     @Autowired
     @Qualifier("encryption")
-    public void setEncryptionCredentials(
-            @Nullable @NonnullElements final List<CredentialHolder> credentials) {
+    public void setEncryptionCredentials(@Nullable final List<CredentialHolder> credentials) {
         checkSetterPreconditions();
         
         if (credentials != null) {
diff --git a/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/package-info.java b/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/package-info.java
index a394c02..cd5a5ca 100644
--- a/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/package-info.java
+++ b/shib-profile-impl/src/main/java/net/shibboleth/profile/relyingparty/impl/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Implementation of relying party resolution.
  */
-package net.shibboleth.profile.relyingparty.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.relyingparty.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-profile-impl/src/main/java/net/shibboleth/profile/spring/impl/package-info.java b/shib-profile-impl/src/main/java/net/shibboleth/profile/spring/impl/package-info.java
index 650f9db..fb3934e 100644
--- a/shib-profile-impl/src/main/java/net/shibboleth/profile/spring/impl/package-info.java
+++ b/shib-profile-impl/src/main/java/net/shibboleth/profile/spring/impl/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Spring helper classes for profile-aware software.
  */
-package net.shibboleth.profile.spring.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.profile.spring.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/binding/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/binding/package-info.java
index 1ec56b0..744ec6d 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/binding/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/binding/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Classes related to SAML bindings.
  */
-package net.shibboleth.saml.binding;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.binding;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionConsumingProfileConfiguration.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionConsumingProfileConfiguration.java
index 321e4c3..e08ef12 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionConsumingProfileConfiguration.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionConsumingProfileConfiguration.java
@@ -27,7 +27,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.saml.saml2.profile.config.SAML2ProfileConfiguration;
 import net.shibboleth.shared.annotation.constraint.NonNegative;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 
@@ -61,7 +60,7 @@ public interface SAMLAssertionConsumingProfileConfiguration extends SAML2Profile
      * 
      * @return additional audiences
      */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable
+    @Nonnull @NotLive @Unmodifiable
     Set<String> getAssertionAudiences( @Nullable final ProfileRequestContext profileRequestContext);
 
 }
\ No newline at end of file
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionProducingProfileConfiguration.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionProducingProfileConfiguration.java
index c2d8d86..13d178e 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionProducingProfileConfiguration.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/SAMLAssertionProducingProfileConfiguration.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.shared.annotation.constraint.NonNegative;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 
@@ -74,7 +73,7 @@ public interface SAMLAssertionProducingProfileConfiguration extends SAMLProfileC
      * 
      * @return additional audiences to which an assertion may be shared
      */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable
+    @Nonnull @NotLive @Unmodifiable
     Set<String> getAssertionAudiences(@Nullable final ProfileRequestContext profileRequestContext);
     
 }
\ No newline at end of file
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignAssertionsPredicate.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignAssertionsPredicate.java
index fa1c653..5136f23 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignAssertionsPredicate.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignAssertionsPredicate.java
@@ -44,7 +44,7 @@ public class SignAssertionsPredicate extends AbstractRelyingPartyPredicate {
     private boolean honorMetadata;
     
     /** Lookup strategy for {@link SAMLMetadataContext}. */
-    private Function<ProfileRequestContext,SAMLMetadataContext> metadataContextLookupStrategy;
+    @Nonnull private Function<ProfileRequestContext,SAMLMetadataContext> metadataContextLookupStrategy;
     
     /** Constructor. */
     public SignAssertionsPredicate() {
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignRequestsPredicate.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignRequestsPredicate.java
index 8f7f2be..76e00c8 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignRequestsPredicate.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/SignRequestsPredicate.java
@@ -22,6 +22,7 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
@@ -45,7 +46,7 @@ public class SignRequestsPredicate extends AbstractRelyingPartyPredicate {
     private boolean honorMetadata;
     
     /** Lookup strategy for {@link SAMLMetadataContext}. */
-    private Function<ProfileRequestContext,SAMLMetadataContext> metadataContextLookupStrategy;
+    @Nonnull private Function<ProfileRequestContext,SAMLMetadataContext> metadataContextLookupStrategy;
     
     /** Constructor. */
     public SignRequestsPredicate() {
@@ -86,12 +87,13 @@ public class SignRequestsPredicate extends AbstractRelyingPartyPredicate {
         
         final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
-            if (rpc.getProfileConfig() instanceof SAMLProfileConfiguration downcast) {
-                if (downcast.isSignRequests(input)) {
+            final ProfileConfiguration pc = rpc.getProfileConfig();
+            if (pc instanceof SAMLProfileConfiguration) {
+                if (((SAMLProfileConfiguration) pc).isSignRequests(input)) {
                     return true;
                 }
                 
-                if (downcast instanceof BrowserSSOProfileConfiguration) {
+                if (pc instanceof BrowserSSOProfileConfiguration) {
                     sso = true;
                 }
             }
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/messaging/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/messaging/package-info.java
index 4e058f5..7b267c9 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/messaging/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/messaging/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates based on message contexts and SAML profile configuration.
  */
-package net.shibboleth.saml.profile.config.logic.messaging;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.config.logic.messaging;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/package-info.java
index b75813e..0311372 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/logic/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates based on SAML profile configuration.
  */
-package net.shibboleth.saml.profile.config.logic;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.config.logic;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AssertionAudiencesLookupFunction.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AssertionAudiencesLookupFunction.java
index f4181ea..c14d149 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AssertionAudiencesLookupFunction.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AssertionAudiencesLookupFunction.java
@@ -26,6 +26,8 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.context.navigate.AbstractRelyingPartyLookupFunction;
 import net.shibboleth.saml.profile.config.SAMLAssertionProducingProfileConfiguration;
+import net.shibboleth.shared.annotation.constraint.NotLive;
+import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 
 /**
  * A function that returns
@@ -38,7 +40,7 @@ import net.shibboleth.saml.profile.config.SAMLAssertionProducingProfileConfigura
 public class AssertionAudiencesLookupFunction extends AbstractRelyingPartyLookupFunction<Set<String>> {
 
     /** {@inheritDoc} */
-    @Nullable public Set<String> apply(@Nullable final ProfileRequestContext input) {
+    @Nullable @NotLive @Unmodifiable public Set<String> apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             if (rpc.getProfileConfig() instanceof SAMLAssertionProducingProfileConfiguration downcast) {
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AudienceRestrictionsLookupFunction.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AudienceRestrictionsLookupFunction.java
index 8db15b6..64b14ab 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AudienceRestrictionsLookupFunction.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/AudienceRestrictionsLookupFunction.java
@@ -25,7 +25,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.context.navigate.AbstractRelyingPartyLookupFunction;
 import net.shibboleth.saml.profile.config.SAMLAssertionProducingProfileConfiguration;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
@@ -47,7 +46,7 @@ import com.google.common.collect.ImmutableList;
 public class AudienceRestrictionsLookupFunction extends AbstractRelyingPartyLookupFunction<Collection<String>> {
 
     /** {@inheritDoc} */
-    @Nullable @NonnullElements @NotLive @Unmodifiable public Collection<String> apply(
+    @Nullable @NotLive @Unmodifiable public Collection<String> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/messaging/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/messaging/package-info.java
index d332c74..f5e7f04 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/messaging/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/messaging/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Functions based on message contexts and SAML profile configuration.
  */
-package net.shibboleth.saml.profile.config.navigate.messaging;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.config.navigate.messaging;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/package-info.java
index 5ac0471..6a95d30 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/navigate/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Functions to navigate into SAML profile configuration.
  */
-package net.shibboleth.saml.profile.config.navigate;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.config.navigate;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/package-info.java
index 7262525..cabfa85 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/config/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Generic SAML profile configuration.
  */
-package net.shibboleth.saml.profile.config;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.config;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/MappedEntityAttributesPredicate.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/MappedEntityAttributesPredicate.java
index 7576340..2523e7f 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/MappedEntityAttributesPredicate.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/MappedEntityAttributesPredicate.java
@@ -39,7 +39,6 @@ import net.shibboleth.idp.attribute.AttributesMapContainer;
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.EmptyAttributeValue.EmptyType;
 import net.shibboleth.shared.annotation.ParameterName;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -69,7 +68,7 @@ public class MappedEntityAttributesPredicate extends EntityAttributesPredicate {
      * @param candidates the {@link Candidate} criteria to check for
      */
     public MappedEntityAttributesPredicate(
-            @Nonnull @NonnullElements @ParameterName(name="candidates") final Collection<Candidate> candidates) {
+            @Nonnull @ParameterName(name="candidates") final Collection<Candidate> candidates) {
         super(candidates);
 
         Constraint.isTrue(Iterables.all(candidates, c -> c.getNameFormat() == null),
@@ -83,7 +82,7 @@ public class MappedEntityAttributesPredicate extends EntityAttributesPredicate {
      * @param trim true iff the values found in the metadata should be trimmed before comparison
      */
     public MappedEntityAttributesPredicate(
-            @Nonnull @NonnullElements @ParameterName(name="candidates") final Collection<Candidate> candidates,
+            @Nonnull @ParameterName(name="candidates") final Collection<Candidate> candidates,
             @ParameterName(name="trim") final boolean trim) {
         super(candidates, trim);
         
@@ -99,7 +98,7 @@ public class MappedEntityAttributesPredicate extends EntityAttributesPredicate {
      * @param all true iff all the criteria must match to be a successful test
      */
     public MappedEntityAttributesPredicate(
-            @Nonnull @NonnullElements @ParameterName(name="candidates") final Collection<Candidate> candidates,
+            @Nonnull @ParameterName(name="candidates") final Collection<Candidate> candidates,
             @ParameterName(name="trim") final boolean trim,
             @ParameterName(name="all") final boolean all) {
         super(candidates, trim, all);
@@ -167,7 +166,7 @@ public class MappedEntityAttributesPredicate extends EntityAttributesPredicate {
      * @return true iff the attached object metadata matched at least one input candidate
      */
     private boolean doTest(@Nonnull final XMLObject input, @Nullable final String name,
-            @Nonnull @NonnullElements final Collection<Candidate> candidates) {
+            @Nonnull final Collection<Candidate> candidates) {
         final List<AttributesMapContainer> containerList =
                 input.getObjectMetadata().get(AttributesMapContainer.class);
         if (null == containerList || containerList.isEmpty() || containerList.get(0).get() == null ||
@@ -200,7 +199,7 @@ public class MappedEntityAttributesPredicate extends EntityAttributesPredicate {
          *
          * @param attrs population to evaluate for a match
          */
-        public EntityAttributesMatcher(@Nonnull @NonnullElements final Multimap<String,? extends IdPAttribute> attrs) {
+        public EntityAttributesMatcher(@Nonnull final Multimap<String,? extends IdPAttribute> attrs) {
             attributes = Constraint.isNotNull(attrs, "Extension attributes cannot be null");
         }
 
@@ -286,13 +285,12 @@ public class MappedEntityAttributesPredicate extends EntityAttributesPredicate {
          */
         @Nullable private String attributeValueToString(@Nonnull final IdPAttributeValue value) {
             
-            if (value instanceof ScopedStringAttributeValue) {
-                return ((ScopedStringAttributeValue) value).getValue() + scopeDelimiter +
-                        ((ScopedStringAttributeValue) value).getScope();
-            } else if (value instanceof StringAttributeValue) {
-                return ((StringAttributeValue) value).getValue();
-            } else if (value instanceof EmptyAttributeValue) {
-                final EmptyType empty = ((EmptyAttributeValue) value).getValue();
+            if (value instanceof ScopedStringAttributeValue scoped) {
+                return scoped.getValue() + scopeDelimiter + scoped.getScope();
+            } else if (value instanceof StringAttributeValue string) {
+                return string.getValue();
+            } else if (value instanceof EmptyAttributeValue ev) {
+                final EmptyType empty = ev.getValue();
                 return EmptyType.ZERO_LENGTH_VALUE.equals(empty) ? "" : null;
             }
             return null;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/package-info.java
index c0e1ba0..0992610 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/logic/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates operating against SAML contexts.
  */
-package net.shibboleth.saml.profile.context.logic;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.context.logic;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/messaging/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/messaging/package-info.java
index 23a4899..8e248d4 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/messaging/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/messaging/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Functions for navigating SAML message context objects.
  */
-package net.shibboleth.saml.profile.context.navigate.messaging;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.context.navigate.messaging;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/package-info.java
index dd1d585..4e5cd4a 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/profile/context/navigate/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Context lookup functions related to SAML contexts.
  */
-package net.shibboleth.saml.profile.context.navigate;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.profile.context.navigate;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/RelyingPartyConfigurationSupport.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/RelyingPartyConfigurationSupport.java
index c09b34a..253a246 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/RelyingPartyConfigurationSupport.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/RelyingPartyConfigurationSupport.java
@@ -37,7 +37,6 @@ import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.profile.context.logic.RelyingPartyIdPredicate;
 import net.shibboleth.saml.profile.context.logic.MappedEntityAttributesPredicate;
 import net.shibboleth.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.logic.StrategyIndirectedPredicate;
 
@@ -62,8 +61,7 @@ public final class RelyingPartyConfigurationSupport {
      * 
      * @return  a default-constructed configuration with the appropriate condition set
      */
-    @Nonnull public static BasicRelyingPartyConfiguration byName(
-            @Nonnull @NonnullElements final Collection<String> relyingPartyIds) {
+    @Nonnull public static BasicRelyingPartyConfiguration byName(@Nonnull final Collection<String> relyingPartyIds) {
 
         Constraint.isNotNull(relyingPartyIds, "Relying Party ID list cannot be null");
 
@@ -89,8 +87,7 @@ public final class RelyingPartyConfigurationSupport {
      * 
      * @return  a default-constructed configuration with the appropriate condition set
      */
-    @Nonnull public static BasicRelyingPartyConfiguration byGroup(
-            @Nonnull @NonnullElements final Collection<String> groupNames,
+    @Nonnull public static BasicRelyingPartyConfiguration byGroup(@Nonnull final Collection<String> groupNames,
             @Nullable final MetadataResolver resolver) {
         Constraint.isNotNull(groupNames, "Group name list cannot be null");
         
@@ -126,9 +123,8 @@ public final class RelyingPartyConfigurationSupport {
      * 
      * @return  a default-constructed configuration with the appropriate condition set
      */
-    @Nonnull public static BasicRelyingPartyConfiguration byTag(
-            @Nonnull @NonnullElements final Collection<Candidate> candidates, final boolean trim,
-            final boolean matchAll) {
+    @Nonnull public static BasicRelyingPartyConfiguration byTag(@Nonnull final Collection<Candidate> candidates,
+            final boolean trim, final boolean matchAll) {
         Constraint.isNotNull(candidates, "Candidate list cannot be null");
         
         // We adapt an OpenSAML Predicate applying to an EntityDescriptor by indirecting the lookup of the
@@ -155,9 +151,8 @@ public final class RelyingPartyConfigurationSupport {
      * 
      * @return  a default-constructed configuration with the appropriate condition set
      */
-    @Nonnull public static BasicRelyingPartyConfiguration byMappedTag(
-            @Nonnull @NonnullElements final Collection<Candidate> candidates, final boolean trim,
-            final boolean matchAll) {
+    @Nonnull public static BasicRelyingPartyConfiguration byMappedTag(@Nonnull final Collection<Candidate> candidates,
+            final boolean trim, final boolean matchAll) {
         Constraint.isNotNull(candidates, "Candidate list cannot be null");
         
         // We adapt an OpenSAML Predicate applying to an EntityDescriptor by indirecting the lookup of the
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/package-info.java
index abe8843..ec99a3f 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/relyingparty/package-info.java
@@ -18,4 +18,7 @@
 /**
  * SAML-specific RelyingParty support classes.
  */
-package net.shibboleth.saml.relyingparty;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.relyingparty;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml1/profile/config/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml1/profile/config/package-info.java
index bcbd43f..3895820 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml1/profile/config/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml1/profile/config/package-info.java
@@ -18,4 +18,7 @@
 /**
  * SAML 1.x profile configuration classes.
  */
-package net.shibboleth.saml.saml1.profile.config;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.saml1.profile.config;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java
index 6b35b7a..c392d02 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.saml.profile.config.SAMLArtifactConsumerProfileConfiguration;
 import net.shibboleth.saml.profile.config.SAMLAssertionConsumingProfileConfiguration;
 import net.shibboleth.shared.annotation.constraint.NonNegative;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
@@ -141,7 +140,7 @@ public interface BrowserSSOProfileConfiguration extends SAMLArtifactConsumerProf
      * 
      * @return the requested attributes
      */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive Collection<RequestedAttribute> getRequestedAttributes(
+    @Nonnull @Unmodifiable @NotLive Collection<RequestedAttribute> getRequestedAttributes(
             @Nullable final ProfileRequestContext profileRequestContext);
     
 }
\ No newline at end of file
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/SingleLogoutProfileConfiguration.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/SingleLogoutProfileConfiguration.java
index c8a8cc1..eb9d235 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/SingleLogoutProfileConfiguration.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/SingleLogoutProfileConfiguration.java
@@ -26,9 +26,9 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.saml.profile.config.SAMLArtifactConsumerProfileConfiguration;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
+import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 
 /** Configuration support for SAML 2 Single Logout. */
 public interface SingleLogoutProfileConfiguration extends SAML2ProfileConfiguration,
@@ -70,7 +70,7 @@ public interface SingleLogoutProfileConfiguration extends SAML2ProfileConfigurat
      * 
      * @since 3.4.0
      */
-    @Nonnull @NonnullElements @NotLive Collection<String> getQualifiedNameIDFormats(
+    @Nonnull @Unmodifiable @NotLive Collection<String> getQualifiedNameIDFormats(
             @Nullable final ProfileRequestContext profileRequestContext);
     
 }
\ No newline at end of file
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/messaging/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/messaging/package-info.java
index 612aa45..9b87b53 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/messaging/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/messaging/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates based on message contexts and SAML 2.0 profile configuration.
  */
-package net.shibboleth.saml.saml2.profile.config.logic.messaging;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.saml2.profile.config.logic.messaging;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/package-info.java
index 4ecf70d..3bde8b9 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/logic/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Predicates based on SAML 2.0 profile configuration.
  */
-package net.shibboleth.saml.saml2.profile.config.logic;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.saml2.profile.config.logic;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/QualifiedNameIDFormatsLookupFunction.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/QualifiedNameIDFormatsLookupFunction.java
index 8d80b8b..04aa4c4 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/QualifiedNameIDFormatsLookupFunction.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/QualifiedNameIDFormatsLookupFunction.java
@@ -24,7 +24,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.context.navigate.AbstractRelyingPartyLookupFunction;
 import net.shibboleth.saml.saml2.profile.config.SingleLogoutProfileConfiguration;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
@@ -45,7 +44,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 public class QualifiedNameIDFormatsLookupFunction extends AbstractRelyingPartyLookupFunction<Collection<String>> {
 
     /** {@inheritDoc} */
-    @Nullable @NonnullElements @NotLive @Unmodifiable public Collection<String> apply(
+    @Nullable @NotLive @Unmodifiable public Collection<String> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/package-info.java
index 3416b15..737b0df 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/navigate/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Functions that access SAML 2.0 profile configuration.
  */
-package net.shibboleth.saml.saml2.profile.config.navigate;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.saml2.profile.config.navigate;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/package-info.java b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/package-info.java
index 9bbbc26..17ee2a3 100644
--- a/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/package-info.java
+++ b/shib-saml-profile-api/src/main/java/net/shibboleth/saml/saml2/profile/config/package-info.java
@@ -18,4 +18,7 @@
 /**
  * SAML 2.0 profile configuration classes.
  */
-package net.shibboleth.saml.saml2.profile.config;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.saml.saml2.profile.config;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list