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

Scott Cantor cantor.2 at osu.edu
Tue Jun 20 16:49:09 UTC 2023


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

scantor pushed a commit to branch main
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=15e36d0b713a5eeff842b2b4ca46314dc2734429

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

commit 15e36d0b713a5eeff842b2b4ca46314dc2734429
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Jun 20 12:49:06 2023 -0400

    IDP-2083 - Treat NonnullElements as the default for collections
    
    https://shibboleth.atlassian.net/browse/IDP-2083
    
    Review idp-conf-impl, idp-core, idp-spring, idp-testing, idp-ui.
---
 .../idp/conf/impl/SLF4JMDCServletFilter.java       |  4 +--
 .../ServletConfigServletContextInitializer.java    |  4 +--
 .../SpringConfigServletContextInitializer.java     |  6 ++--
 .../net/shibboleth/idp/conf/impl/package-info.java |  5 +++-
 .../shibboleth/idp/metrics/impl/IdPGaugeSet.java   |  2 +-
 .../shibboleth/idp/metrics/impl/package-info.java  |  4 ++-
 .../main/java/net/shibboleth/idp/package-info.java |  4 ++-
 .../idp/spring/DeprecatedPropertyBean.java         |  6 ++--
 ...IdPPropertiesApplicationContextInitializer.java | 15 ++++++----
 .../net/shibboleth/idp/spring/package-info.java    |  4 ++-
 .../factory/FlowDefinitionRegistryFactoryBean.java |  7 ++---
 .../spring/factory/FlowRelativeResourceLoader.java |  7 +++--
 .../idp/profile/spring/factory/package-info.java   |  4 ++-
 .../MockAuthenticationProfileConfiguration.java    | 33 +++++++++++-----------
 .../shibboleth/idp/authn/testing/package-info.java |  4 ++-
 .../idp/profile/testing/ActionTestingSupport.java  | 21 ++++++++------
 .../idp/profile/testing/RequestContextBuilder.java | 31 ++++++++++----------
 .../idp/profile/testing/package-info.java          |  4 ++-
 .../idp/saml/impl/testing/TestSources.java         | 17 ++++++-----
 .../idp/saml/impl/testing}/package-info.java       |  6 ++--
 .../idp/saml/profile/testing}/package-info.java    |  6 ++--
 .../idp/ui/context/RelyingPartyUIContext.java      | 14 ++++-----
 .../shibboleth/idp/ui/context/package-info.java    |  4 ++-
 .../idp/ui/csrf/BaseCSRFTokenPredicate.java        |  4 +--
 .../java/net/shibboleth/idp/ui/csrf/CSRFToken.java |  3 +-
 .../idp/ui/csrf/InvalidCSRFTokenException.java     |  3 +-
 .../csrf/impl/CSRFTokenFlowExecutionListener.java  |  3 +-
 ...tEventRequiresCSRFTokenValidationPredicate.java |  2 +-
 .../DefaultViewRequiresCSRFTokenPredicate.java     | 11 ++++++--
 .../idp/ui/csrf/impl/SimpleCSRFToken.java          |  3 +-
 .../shibboleth/idp/ui/csrf/impl/package-info.java  |  6 ++--
 .../net/shibboleth/idp/ui/csrf/package-info.java   |  5 +++-
 .../shibboleth/idp/ui/impl/SetRPUIInformation.java | 10 ++-----
 .../net/shibboleth/idp/ui/impl/package-info.java   |  4 ++-
 .../idp/ui/taglib/OrganizationDisplayNameTag.java  |  3 +-
 .../idp/ui/taglib/OrganizationNameTag.java         |  3 +-
 .../idp/ui/taglib/OrganizationURLTag.java          |  5 ++--
 .../idp/ui/taglib/ServiceContactTag.java           |  7 +++--
 .../idp/ui/taglib/ServiceDescriptionTag.java       |  8 ++++--
 .../idp/ui/taglib/ServiceInformationURLTag.java    |  5 ++--
 .../shibboleth/idp/ui/taglib/ServiceLogoTag.java   | 10 ++++---
 .../shibboleth/idp/ui/taglib/ServiceNameTag.java   | 15 ++++++----
 .../idp/ui/taglib/ServicePrivacyURLTag.java        |  7 +++--
 .../net/shibboleth/idp/ui/taglib/package-info.java |  4 ++-
 44 files changed, 189 insertions(+), 144 deletions(-)

diff --git a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SLF4JMDCServletFilter.java b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SLF4JMDCServletFilter.java
index 99376d8d0..c69636e5e 100644
--- a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SLF4JMDCServletFilter.java
+++ b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SLF4JMDCServletFilter.java
@@ -73,8 +73,8 @@ public class SLF4JMDCServletFilter extends AbstractConditionalFilter implements
 
     /** {@inheritDoc} */
     @Override
-    protected void runFilter(final @Nonnull ServletRequest request, final @Nonnull ServletResponse response, final @Nonnull FilterChain chain)
-            throws IOException, ServletException {
+    protected void runFilter(final @Nonnull ServletRequest request, final @Nonnull ServletResponse response,
+            final @Nonnull FilterChain chain) throws IOException, ServletException {
         try {
             MDC.put(Version.MDC_ATTRIBUTE, Version.getVersion());
             MDC.put(CLIENT_ADDRESS_MDC_ATTRIBUTE, HttpServletSupport.getRemoteAddr(request));
diff --git a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/ServletConfigServletContextInitializer.java b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/ServletConfigServletContextInitializer.java
index d612f1e48..c6b96437a 100644
--- a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/ServletConfigServletContextInitializer.java
+++ b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/ServletConfigServletContextInitializer.java
@@ -83,14 +83,14 @@ public class ServletConfigServletContextInitializer implements ServletContainerI
 
         if ("true".equalsIgnoreCase(remoteUserFlag)) {
             log.info("Registering RemoteUser authentication servlet");
-            ServletRegistration.Dynamic registration = ctx.addServlet("RemoteUserAuthHandler",
+            final ServletRegistration.Dynamic registration = ctx.addServlet("RemoteUserAuthHandler",
                     new DelegatingServletProxy("shibboleth.RemoteUserAuthServlet"));
             registration.addMapping("/Authn/RemoteUser");
         }
         
         if ("true".equalsIgnoreCase(x509Flag)) {
             log.info("Registering X.509 authentication servlet");
-            ServletRegistration.Dynamic registration = ctx.addServlet("X509AuthHandler",
+            final ServletRegistration.Dynamic registration = ctx.addServlet("X509AuthHandler",
                     new DelegatingServletProxy("shibboleth.X509AuthServlet"));
             registration.addMapping("/Authn/X509");
         }
diff --git a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SpringConfigServletContextInitializer.java b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SpringConfigServletContextInitializer.java
index fd64ed3a3..b114bb0f6 100644
--- a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SpringConfigServletContextInitializer.java
+++ b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/SpringConfigServletContextInitializer.java
@@ -38,12 +38,12 @@ import net.shibboleth.shared.spring.context.DelimiterAwareApplicationContext;
  */
 public class SpringConfigServletContextInitializer implements ServletContainerInitializer {
 
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(SpringConfigServletContextInitializer.class);
-
     /** System property name for the activation of this class. */
     @Nonnull @NotEmpty public static final String INIT_PARAMETER_ACTIVATION = "net.shibboleth.idp.registerSpringConfig";
 
+    /** Class logger. */
+    @Nonnull private final Logger log = LoggerFactory.getLogger(SpringConfigServletContextInitializer.class);
+
     /** {@inheritDoc} */
     @Override
     public void onStartup(final Set<Class<?>> c, final ServletContext ctx) throws ServletException {
diff --git a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/package-info.java b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/package-info.java
index 4fdabb2a2..28d2de461 100644
--- a/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/package-info.java
+++ b/idp-conf-impl/src/main/java/net/shibboleth/idp/conf/impl/package-info.java
@@ -18,4 +18,7 @@
 /**
  * Configuration implementation classes used internally.
  */
-package net.shibboleth.idp.conf.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.idp.conf.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/IdPGaugeSet.java b/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/IdPGaugeSet.java
index e65bc0414..f189584ad 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/IdPGaugeSet.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/IdPGaugeSet.java
@@ -47,7 +47,7 @@ public class IdPGaugeSet extends ApplicationObjectSupport implements MetricSet,
     @Nonnull @NotEmpty private static final String DEFAULT_METRIC_NAME = "net.shibboleth.idp";
 
     /** The map of gauges. */
-    @Nonnull @NonnullElements private final Map<String,Metric> gauges;
+    @Nonnull private final Map<String,Metric> gauges;
     
     /** Constructor. */
     public IdPGaugeSet() {
diff --git a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java b/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
index dffcdabc6..8dbf6adc4 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
@@ -18,5 +18,7 @@
 /**
  * Implementation classes supporting code instrumentation.
  */
+ at NonnullElements
+package net.shibboleth.idp.metrics.impl;
 
-package net.shibboleth.idp.metrics.impl;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-core/src/main/java/net/shibboleth/idp/package-info.java b/idp-core/src/main/java/net/shibboleth/idp/package-info.java
index d226d585f..7eeaca6a3 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/package-info.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/package-info.java
@@ -16,5 +16,7 @@
  */
 
 /** Root package for IdP, contains a couple base/utility classes. */
+ at NonnullElements
+package net.shibboleth.idp;
 
-package net.shibboleth.idp;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-core/src/main/java/net/shibboleth/idp/spring/DeprecatedPropertyBean.java b/idp-core/src/main/java/net/shibboleth/idp/spring/DeprecatedPropertyBean.java
index 1989d6cfb..270cddae0 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/spring/DeprecatedPropertyBean.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/spring/DeprecatedPropertyBean.java
@@ -28,7 +28,6 @@ import org.slf4j.Logger;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
@@ -38,7 +37,6 @@ import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
 
-
 /**
  * A bean that emits deprecation warnings if a configurable set of properties are set.
  */
@@ -54,7 +52,7 @@ public class DeprecatedPropertyBean extends AbstractInitializableComponent imple
     @Nonnull private Map<String,String> deprecatedProperties;
 
     /** Dead properties. */
-    @Nonnull @NonnullElements private Collection<String> deadProperties;
+    @Nonnull private Collection<String> deadProperties;
 
     /** Constructor. */
     public DeprecatedPropertyBean() {
@@ -83,7 +81,7 @@ public class DeprecatedPropertyBean extends AbstractInitializableComponent imple
      * 
      * @param properties defunct property names
      */
-    public void setDeadProperties(@Nonnull @NonnullElements final Collection<String> properties) {
+    public void setDeadProperties(@Nonnull final Collection<String> properties) {
         checkSetterPreconditions();
         Constraint.isNotNull(properties, "Property collection cannot be null");
         
diff --git a/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java b/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java
index aa696b65f..95877edaf 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java
@@ -45,6 +45,8 @@ import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
 
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotLive;
+import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.logic.ConstraintViolationException;
@@ -238,12 +240,12 @@ public class IdPPropertiesApplicationContextInitializer
      * @param properties the content of idp.properties so far
      * @return a collection of paths
      */
-    public static Collection<String> getAdditionalSources(@Nonnull final String searchLocation,
-                            @Nonnull final Properties properties) {
+    @Nonnull @Unmodifiable @NotLive public static Collection<String> getAdditionalSources(
+            @Nonnull final String searchLocation, @Nonnull final Properties properties) {
         return getAdditionalSources(searchLocation, properties, false);
     }
 
-        // Checkstyle: AnonInnerLength OFF
+// Checkstyle: AnonInnerLength OFF
     /**
      * Find out all the additional property files we need to load.
      *
@@ -252,8 +254,9 @@ public class IdPPropertiesApplicationContextInitializer
      * @param idpHomeIsClasspath does idp.home point to a classpath 
      * @return a collection of paths
      */
-    public static Collection<String> getAdditionalSources(@Nonnull final String searchLocation,
-                            @Nonnull final Properties properties, final boolean idpHomeIsClasspath) {
+    @Nonnull @Unmodifiable @NotLive public static Collection<String> getAdditionalSources(
+            @Nonnull final String searchLocation, @Nonnull final Properties properties,
+            final boolean idpHomeIsClasspath) {
         
         final Collection<String> sources = new ArrayList<>();
        
@@ -436,4 +439,4 @@ public class IdPPropertiesApplicationContextInitializer
         return (failFast == null) ? true : Boolean.parseBoolean(failFast);
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-core/src/main/java/net/shibboleth/idp/spring/package-info.java b/idp-core/src/main/java/net/shibboleth/idp/spring/package-info.java
index 22c529c89..c8c110dd2 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/spring/package-info.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/spring/package-info.java
@@ -16,5 +16,7 @@
  */
 
 /** Classes for extending, or supporting, Spring based configuration and object management. */
+ at NonnullElements
+package net.shibboleth.idp.spring;
 
-package net.shibboleth.idp.spring;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowDefinitionRegistryFactoryBean.java b/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowDefinitionRegistryFactoryBean.java
index 260e83ec0..d5847b93a 100644
--- a/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowDefinitionRegistryFactoryBean.java
+++ b/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowDefinitionRegistryFactoryBean.java
@@ -49,7 +49,6 @@ import org.springframework.webflow.engine.model.registry.FlowModelHolder;
 import org.springframework.webflow.engine.model.registry.FlowModelRegistry;
 import org.springframework.webflow.engine.model.registry.FlowModelRegistryImpl;
 
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -68,10 +67,10 @@ public class FlowDefinitionRegistryFactoryBean extends AbstractFactoryBean<FlowD
     @Nonnull private final Logger log = LoggerFactory.getLogger(FlowDefinitionRegistryFactoryBean.class);
 
     /** Explicit flow mappings from flow ID to resource path. */
-    @Nonnull @NonnullElements private Map<String,String> flowLocations;
+    @Nonnull private Map<String,String> flowLocations;
 
     /** Pattern-based flow mappings from pattern to base location to apply. */
-    @Nonnull @NonnullElements private Map<String,String> flowLocationPatterns;
+    @Nonnull private Map<String,String> flowLocationPatterns;
 
     /** Required collaborator. */
     @Nullable private FlowBuilderServices flowBuilderServices;
@@ -108,7 +107,7 @@ public class FlowDefinitionRegistryFactoryBean extends AbstractFactoryBean<FlowD
      * 
      * @param locationMap mappings from flow ID to resource
      */
-    public void setFlowLocations(@Nonnull @NonnullElements final Map<String,String> locationMap) {
+    public void setFlowLocations(@Nonnull final Map<String,String> locationMap) {
         Constraint.isNotNull(locationMap, "Flow mappings cannot be null");
         
         flowLocations = new LinkedHashMap<>(locationMap.size());
diff --git a/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowRelativeResourceLoader.java b/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowRelativeResourceLoader.java
index 4bae501c1..4254ae1ca 100644
--- a/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowRelativeResourceLoader.java
+++ b/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/FlowRelativeResourceLoader.java
@@ -27,6 +27,7 @@ import org.springframework.core.io.FileSystemResource;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
 
+import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.spring.resource.ConditionalResourceResolver;
 
 /**
@@ -40,15 +41,15 @@ import net.shibboleth.shared.spring.resource.ConditionalResourceResolver;
 class FlowRelativeResourceLoader extends DefaultResourceLoader {
 
     /** Flow resource for relative lookup. */
-    private Resource flowResource;
+    @Nonnull private Resource flowResource;
 
     /**
      * Constructor.
      *
      * @param resource flow resource for relative lookup
      */
-    public FlowRelativeResourceLoader(final Resource resource) {
-        flowResource = resource;
+    public FlowRelativeResourceLoader(@Nonnull final Resource resource) {
+        flowResource = Constraint.isNotNull(resource, "Flow resource cannot be null");
         getProtocolResolvers().add(new ConditionalResourceResolver());
     }
 
diff --git a/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/package-info.java b/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/package-info.java
index 93a9239c8..f49afd0e8 100644
--- a/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/package-info.java
+++ b/idp-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/package-info.java
@@ -18,5 +18,7 @@
 /**
  * IdP factory bean implementations.
  */
+ at NonnullElements
+package net.shibboleth.idp.profile.spring.factory;
 
-package net.shibboleth.idp.profile.spring.factory;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/MockAuthenticationProfileConfiguration.java b/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/MockAuthenticationProfileConfiguration.java
index 8d67e5594..9557f9ef2 100644
--- a/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/MockAuthenticationProfileConfiguration.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/MockAuthenticationProfileConfiguration.java
@@ -32,7 +32,6 @@ import org.opensaml.xmlsec.config.BasicXMLSecurityConfiguration;
 import net.shibboleth.idp.authn.config.AuthenticationProfileConfiguration;
 import net.shibboleth.idp.profile.config.AbstractInterceptorAwareProfileConfiguration;
 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;
@@ -46,16 +45,16 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
         implements AuthenticationProfileConfiguration {
 
     /** Selects, and limits, the authentication methods to use for requests. */
-    @Nonnull @NonnullElements private List<Principal> defaultAuthenticationMethods = CollectionSupport.emptyList();
+    @Nonnull private List<Principal> defaultAuthenticationMethods = CollectionSupport.emptyList();
 
     /** Filters the usable authentication flows. */
-    @Nonnull @NonnullElements private Set<String> authenticationFlows = CollectionSupport.emptySet();
+    @Nonnull private Set<String> authenticationFlows = CollectionSupport.emptySet();
 
     /** Enables post-authentication interceptor flows. */
-    @Nonnull @NonnullElements private List<String> postAuthenticationFlows = CollectionSupport.emptyList();
+    @Nonnull private List<String> postAuthenticationFlows = CollectionSupport.emptyList();
 
     /** Precedence of name identifier formats to use for requests. */
-    @Nonnull @NonnullElements private List<String> nameIDFormatPrecedence = CollectionSupport.emptyList();
+    @Nonnull private List<String> nameIDFormatPrecedence = CollectionSupport.emptyList();
     
     /** ForceAuthn predicate. */
     @Nonnull private Predicate<ProfileRequestContext> forceAuthnPredicate;
@@ -70,7 +69,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * @param methods default authentication methods to use
      */
     public MockAuthenticationProfileConfiguration(@Nonnull @NotEmpty final String id,
-            @Nonnull @NonnullElements final List<Principal> methods) {
+            @Nonnull final List<Principal> methods) {
         this(id, methods, CollectionSupport.emptySet(), CollectionSupport.emptyList());
     }
 
@@ -83,9 +82,9 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * @param formats name identifier formats to use
      */
     public MockAuthenticationProfileConfiguration(@Nonnull @NotEmpty final String id,
-            @Nonnull @NonnullElements final List<Principal> methods,
-            @Nonnull @NonnullElements final Collection<String> flows,
-            @Nonnull @NonnullElements final List<String> formats) {
+            @Nonnull final List<Principal> methods,
+            @Nonnull final Collection<String> flows,
+            @Nonnull final List<String> formats) {
         super(id);
         setSecurityConfiguration(new BasicXMLSecurityConfiguration());
         setDefaultAuthenticationMethods(methods);
@@ -95,7 +94,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
     }
     
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable public List<Principal> getDefaultAuthenticationMethods(
+    @Nonnull @NotLive @Unmodifiable public List<Principal> getDefaultAuthenticationMethods(
             @Nullable final ProfileRequestContext profileRequestContext) {
         return defaultAuthenticationMethods;
     }
@@ -105,7 +104,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * 
      * @param methods   default authentication methods to use
      */
-    public void setDefaultAuthenticationMethods(@Nonnull @NonnullElements final List<Principal> methods) {
+    public void setDefaultAuthenticationMethods(@Nonnull final List<Principal> methods) {
         defaultAuthenticationMethods = CollectionSupport.copyToList(Constraint.isNotNull(methods, "List of methods cannot be null"));
     }
     
@@ -115,7 +114,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * @param profileRequestContext profile request context
      * @return formats to use
      */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getNameIDFormatPrecedence(
+    @Nonnull @NotLive @Unmodifiable public List<String> getNameIDFormatPrecedence(
             @Nullable final ProfileRequestContext profileRequestContext) {
         return nameIDFormatPrecedence;
     }
@@ -125,14 +124,14 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * 
      * @param formats   name identifier formats to use
      */
-    public void setNameIDFormatPrecedence(@Nonnull @NonnullElements final List<String> formats) {
+    public void setNameIDFormatPrecedence(@Nonnull final List<String> formats) {
         Constraint.isNotNull(formats, "List of formats cannot be null");
         
         nameIDFormatPrecedence = CollectionSupport.copyToList(StringSupport.normalizeStringCollection(formats));
     }
 
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable public Set<String> getAuthenticationFlows(
+    @Nonnull @NotLive @Unmodifiable public Set<String> getAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
         return authenticationFlows;
     }
@@ -142,14 +141,14 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * 
      * @param flows   flow identifiers to use
      */
-    public void setAuthenticationFlows(@Nonnull @NonnullElements final Collection<String> flows) {
+    public void setAuthenticationFlows(@Nonnull final Collection<String> flows) {
         Constraint.isNotNull(flows, "Collection of flows cannot be null");
         
         authenticationFlows = CollectionSupport.copyToSet(StringSupport.normalizeStringCollection(flows));
     }
 
     /** {@inheritDoc} */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getPostAuthenticationFlows(
+    @Nonnull @NotLive @Unmodifiable public List<String> getPostAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
         return postAuthenticationFlows;
     }
@@ -159,7 +158,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractInterceptorA
      * 
      * @param flows   flow identifiers to enable
      */
-    public void setPostAuthenticationFlows(@Nonnull @NonnullElements final Collection<String> flows) {
+    public void setPostAuthenticationFlows(@Nonnull final Collection<String> flows) {
         Constraint.isNotNull(flows, "Collection of flows cannot be null");
         
         postAuthenticationFlows = CollectionSupport.copyToList(StringSupport.normalizeStringCollection(flows));
diff --git a/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/package-info.java b/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/package-info.java
index 9a87953a4..b30cb9d9b 100644
--- a/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/package-info.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/authn/testing/package-info.java
@@ -18,5 +18,7 @@
 /**
  * Testing utility classes.
  */
+ at NonnullElements
+package net.shibboleth.idp.authn.testing;
 
-package net.shibboleth.idp.authn.testing;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/ActionTestingSupport.java b/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/ActionTestingSupport.java
index 343059900..6a782cf00 100644
--- a/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/ActionTestingSupport.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/ActionTestingSupport.java
@@ -17,9 +17,14 @@
 
 package net.shibboleth.idp.profile.testing;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Helper methods for creating/testing objects within profile action tests. When methods herein refer to mock objects
  * they are always objects that have been created via Mockito unless otherwise noted.
@@ -27,16 +32,16 @@ import org.testng.Assert;
 public class ActionTestingSupport {
 
     /** ID of the inbound message. */
-    public final static String INBOUND_MSG_ID = "inbound";
+    @Nonnull @NotEmpty public final static String INBOUND_MSG_ID = "inbound";
 
     /** Issuer of the inbound message. */
-    public final static String INBOUND_MSG_ISSUER = "http://sp.example.org";
+    @Nonnull @NotEmpty public final static String INBOUND_MSG_ISSUER = "http://sp.example.org";
 
     /** ID of the outbound message. */
-    public final static String OUTBOUND_MSG_ID = "outbound";
+    @Nonnull @NotEmpty public final static String OUTBOUND_MSG_ID = "outbound";
 
     /** Issuer of the outbound message. */
-    public final static String OUTBOUND_MSG_ISSUER = "http://idp.example.org";
+    @Nonnull @NotEmpty public final static String OUTBOUND_MSG_ISSUER = "http://idp.example.org";
 
     /**
      * Checks that the event is not null, that the event source is not null, and that the event ID is the given id.
@@ -44,8 +49,8 @@ public class ActionTestingSupport {
      * @param event the event to check
      * @param id ...
      */
-    public static void assertEvent(final Event event, final String id) {
-        Assert.assertNotNull(event);
+    public static void assertEvent(@Nullable final Event event, @Nullable final String id) {
+        assert event != null;
         Assert.assertNotNull(event.getSource());
         Assert.assertEquals(event.getId(), id);
     }
@@ -55,8 +60,8 @@ public class ActionTestingSupport {
      * 
      * @param event the event to check
      */
-    public static void assertProceedEvent(final Event event) {
+    public static void assertProceedEvent(@Nullable final Event event) {
         Assert.assertNull(event);
     }
     
-}
+}
\ No newline at end of file
diff --git a/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/RequestContextBuilder.java b/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/RequestContextBuilder.java
index 1829e4595..a01df5d1b 100644
--- a/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/RequestContextBuilder.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/RequestContextBuilder.java
@@ -35,6 +35,7 @@ import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.profile.relyingparty.BasicRelyingPartyConfiguration;
 import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.messaging.context.MessageContext;
@@ -54,43 +55,43 @@ import org.springframework.webflow.test.MockRequestContext;
 public class RequestContextBuilder {
 
     /** Value used to represent a string value that has not be set. */
-    private final String NO_VAL = "novalue";
+    @Nonnull @NotEmpty private static final String NO_VAL = "novalue";
 
     /** The {@link ServletContext} used when building the request context. */
-    private ServletContext servletContext;
+    @Nullable private ServletContext servletContext;
 
     /** The {@link HttpServletRequest} used when building the request context. */
-    private HttpServletRequest httpRequest;
+    @Nullable private HttpServletRequest httpRequest;
 
     /** The {@link HttpServletResponse} used when building the request context. */
-    private HttpServletResponse httpResponse;
+    @Nullable private HttpServletResponse httpResponse;
 
     /** The ID of the inbound message. */
-    private String inboundMessageId = NO_VAL;
+    @Nullable private String inboundMessageId = NO_VAL;
 
     /** The issue instant of the inbound message. */
-    private Instant inboundMessageIssueInstant;
+    @Nullable private Instant inboundMessageIssueInstant;
 
     /** The issuer of the inbound message. */
-    private String inboundMessageIssuer = NO_VAL;
+    @Nullable private String inboundMessageIssuer = NO_VAL;
 
     /** The inbound message. */
-    private Object inboundMessage;
+    @Nullable private Object inboundMessage;
 
     /** The ID of the outbound message. */
-    private String outboundMessageId = NO_VAL;
+    @Nullable private String outboundMessageId = NO_VAL;
 
     /** The issue instant of the outbound message. */
-    private Instant outboundMessageIssueInstant;
+    @Nullable private Instant outboundMessageIssueInstant;
 
     /** The issuer of the outbound message. */
-    private String outboundMessageIssuer = NO_VAL;
+    @Nullable private String outboundMessageIssuer = NO_VAL;
 
     /** The outbound message. */
-    private Object outboundMessage;
+    @Nullable private Object outboundMessage;
 
     /** The profile configurations associated with the relying party. */
-    private Collection<ProfileConfiguration> relyingPartyProfileConfigurations;
+    @Nullable private Collection<ProfileConfiguration> relyingPartyProfileConfigurations;
 
     /** Constructor. */
     public RequestContextBuilder() {
@@ -102,7 +103,7 @@ public class RequestContextBuilder {
      * 
      * @param prototype prototype whose properties are copied onto this builder
      */
-    public RequestContextBuilder(RequestContextBuilder prototype) {
+    public RequestContextBuilder(@Nonnull final RequestContextBuilder prototype) {
         servletContext = prototype.servletContext;
         httpRequest = prototype.httpRequest;
         httpResponse = prototype.httpResponse;
@@ -441,7 +442,7 @@ public class RequestContextBuilder {
         if (relyingPartyProfileConfigurations == null) {
             relyingPartyProfileConfigurations = new ArrayList<>();
         }
-        
+        assert relyingPartyProfileConfigurations != null;
         final List<ProfileConfiguration> profileConfigs =
                 relyingPartyProfileConfigurations.
                 stream().
diff --git a/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/package-info.java b/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/package-info.java
index f16cf7342..9c0a2c916 100644
--- a/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/package-info.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/profile/testing/package-info.java
@@ -18,5 +18,7 @@
 /**
  * Testing utility classes.
  */
+ at NonnullElements
+package net.shibboleth.idp.profile.testing;
 
-package net.shibboleth.idp.profile.testing;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/TestSources.java b/idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/TestSources.java
index 20967767d..0d24a1b57 100644
--- a/idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/TestSources.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/TestSources.java
@@ -54,7 +54,6 @@ public final class TestSources {
     /** The name we use in this test for the static connector. */
     @Nonnull public static final String STATIC_CONNECTOR_NAME = "staticCon";
 
-
     /** The name of the attribute we use as source. */
     @Nonnull public static final String DEPENDS_ON_ATTRIBUTE_NAME_ATTR = "at1";
 
@@ -135,7 +134,7 @@ public final class TestSources {
      * @return The connector
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static DataConnector populatedStaticConnector(@Nonnull @NonnullElements final List<IdPAttribute> attributes)
+    @Nonnull public static DataConnector populatedStaticConnector(@Nonnull @NonnullElements final List<IdPAttribute> attributes)
             throws ComponentInitializationException {
 
         final StaticDataConnector connector = new StaticDataConnector();
@@ -153,7 +152,7 @@ public final class TestSources {
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
     @SuppressWarnings("null")
-    public static DataConnector populatedStaticConnector() throws ComponentInitializationException {
+    @Nonnull public static DataConnector populatedStaticConnector() throws ComponentInitializationException {
         List<IdPAttribute> attributeSet = new ArrayList<>(2);
 
         IdPAttribute attr = new IdPAttribute(DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR);
@@ -175,11 +174,11 @@ public final class TestSources {
      * @return the attribute definition
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static AttributeDefinition populatedStaticAttribute() throws ComponentInitializationException {
+    @Nonnull public static AttributeDefinition populatedStaticAttribute() throws ComponentInitializationException {
         return populatedStaticAttribute(DEPENDS_ON_ATTRIBUTE_NAME_ATTR, 2);
     }
     
-    public static AttributeDefinition populatedStaticAttribute(@Nonnull String attributeName,
+    @Nonnull public static AttributeDefinition populatedStaticAttribute(@Nonnull String attributeName,
             int attributeValuesCount) throws ComponentInitializationException {
         
         final List<IdPAttributeValue> valuesList = new ArrayList<>();
@@ -206,7 +205,7 @@ public final class TestSources {
      * @return the attribute definition
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static AttributeDefinition populatedStaticAttribute(@Nonnull final IdPAttribute attribute)
+    @Nonnull public static AttributeDefinition populatedStaticAttribute(@Nonnull final IdPAttribute attribute)
             throws ComponentInitializationException {
         
         final StaticAttributeDefinition definition = new StaticAttributeDefinition();
@@ -221,7 +220,7 @@ public final class TestSources {
      * @return the definition
      * @throws ComponentInitializationException for completeness
      */
-    public static AttributeDefinition nonStringAttributeDefiniton(@Nonnull String name) throws ComponentInitializationException {
+    @Nonnull public static AttributeDefinition nonStringAttributeDefiniton(@Nonnull String name) throws ComponentInitializationException {
         final SAML2NameIDAttributeDefinition defn = new SAML2NameIDAttributeDefinition();
         defn.setId(name);
 
@@ -255,7 +254,7 @@ public final class TestSources {
      * @param attributeId attributeId
      * @return  the dependency
      */
-    public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(@Nonnull String attributeId) {
+    @Nonnull public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(@Nonnull String attributeId) {
         ResolverAttributeDefinitionDependency retVal = new ResolverAttributeDefinitionDependency(attributeId);
         return retVal;
     }
@@ -265,7 +264,7 @@ public final class TestSources {
      * @param attributeId attributeId
      * @return the dependency
      */
-    public static ResolverDataConnectorDependency makeDataConnectorDependency(@Nonnull String connectorId, @Nullable String attributeId) {
+    @Nonnull public static ResolverDataConnectorDependency makeDataConnectorDependency(@Nonnull String connectorId, @Nullable String attributeId) {
         ResolverDataConnectorDependency retVal = new ResolverDataConnectorDependency(connectorId);
         if (null == attributeId) {
             retVal.setAllAttributes(true);
diff --git a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java b/idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/package-info.java
similarity index 81%
copy from idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
copy to idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/package-info.java
index dffcdabc6..01c15a9d4 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/saml/impl/testing/package-info.java
@@ -16,7 +16,9 @@
  */
 
 /**
- * Implementation classes supporting code instrumentation.
+ * Testing utility classes for SAML implementation code.
  */
+ at NonnullElements
+package net.shibboleth.idp.saml.impl.testing;
 
-package net.shibboleth.idp.metrics.impl;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java b/idp-testing/src/main/java/net/shibboleth/idp/saml/profile/testing/package-info.java
similarity index 82%
copy from idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
copy to idp-testing/src/main/java/net/shibboleth/idp/saml/profile/testing/package-info.java
index dffcdabc6..ad7d8b98b 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/metrics/impl/package-info.java
+++ b/idp-testing/src/main/java/net/shibboleth/idp/saml/profile/testing/package-info.java
@@ -16,7 +16,9 @@
  */
 
 /**
- * Implementation classes supporting code instrumentation.
+ * Testing utility classes for SAML profile code.
  */
+ at NonnullElements
+package net.shibboleth.idp.saml.profile.testing;
 
-package net.shibboleth.idp.metrics.impl;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java
index 1f855e6f5..ff4b248d0 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java
@@ -49,7 +49,6 @@ import net.shibboleth.idp.attribute.AttributesMapContainer;
 import net.shibboleth.idp.saml.metadata.ACSUIInfo;
 import net.shibboleth.idp.saml.metadata.IdPUIInfo;
 import net.shibboleth.idp.saml.metadata.OrganizationUIInfo;
-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;
@@ -83,7 +82,7 @@ public final class RelyingPartyUIContext extends BaseContext {
     @Nullable private IdPUIInfo rpUIInfo;
 
     /** The (statically defined) languages that this user wants to know about. */
-    @Nonnull @NonnullElements private List<LanguageRange> browserLanguages;
+    @Nonnull private List<LanguageRange> browserLanguages;
     
     /** The languages that this the Operator want to fall back to. */
     @Nonnull private List<LanguageRange> fallbackLanguages;
@@ -150,7 +149,7 @@ public final class RelyingPartyUIContext extends BaseContext {
      * 
      * @since 4.0.0
      */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable public Collection<String> getEntityAttributeStringValues(
+    @Nonnull @NotLive @Unmodifiable public Collection<String> getEntityAttributeStringValues(
             @Nonnull @NotEmpty final String id) {
         
         XMLObject object = getRPEntityDescriptor(); 
@@ -247,7 +246,7 @@ public final class RelyingPartyUIContext extends BaseContext {
      * @deprecated use {@link #setBrowserLanguageRanges(List)}
      */
     @Deprecated(since="4.0.0", forRemoval=true)
-    @Nonnull public RelyingPartyUIContext setBrowserLanguages(@Nonnull @NonnullElements final List<String> languages) {
+    @Nonnull public RelyingPartyUIContext setBrowserLanguages(@Nonnull final List<String> languages) {
         Constraint.isNotNull(languages, "Language List cannot be null");
         DeprecationSupport.warnOnce(ObjectType.METHOD, "RelyingPartyUIContext.setBrowserLanguages", null,
                 "setBrowserLanguageRanges");
@@ -267,8 +266,7 @@ public final class RelyingPartyUIContext extends BaseContext {
      * 
      * @return this context
      */
-    @Nonnull public RelyingPartyUIContext setBrowserLanguageRanges(
-            @Nonnull @NonnullElements final List<LanguageRange> ranges) {
+    @Nonnull public RelyingPartyUIContext setBrowserLanguageRanges(@Nonnull final List<LanguageRange> ranges) {
         browserLanguages = Constraint.isNotNull(ranges, "Language Range cannot be null");
         return this;
     }
@@ -280,7 +278,7 @@ public final class RelyingPartyUIContext extends BaseContext {
      * 
      * @return the languages.
      */
-    @Nonnull @NonnullElements protected List<LanguageRange> getBrowserLanguages() {
+    @Nonnull protected List<LanguageRange> getBrowserLanguages() {
         final NonnullSupplier<HttpServletRequest> supplier = requestSupplier;
         if (supplier == null || supplier.get() == null) {
             return browserLanguages;
@@ -316,7 +314,7 @@ public final class RelyingPartyUIContext extends BaseContext {
      * 
      * @return the languages.
      */
-    @Nonnull @NonnullElements protected List<LanguageRange> getFallbackLanguages() {
+    @Nonnull protected List<LanguageRange> getFallbackLanguages() {
         return fallbackLanguages;
     }
 
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/context/package-info.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/context/package-info.java
index d688ebcfb..6fec2cf92 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/context/package-info.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/context/package-info.java
@@ -18,5 +18,7 @@
 /**
  * Context classes for information needed by the UI.
  */
+ at NonnullElements
+package net.shibboleth.idp.ui.context;
 
-package net.shibboleth.idp.ui.context;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/BaseCSRFTokenPredicate.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/BaseCSRFTokenPredicate.java
index 3f32c15b6..37722059d 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/BaseCSRFTokenPredicate.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/BaseCSRFTokenPredicate.java
@@ -24,7 +24,6 @@ import org.springframework.webflow.definition.StateDefinition;
 
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
-
 /**
  * A base helper class for predicates that determine if CSRF protection is required per state. 
  */
@@ -36,7 +35,6 @@ public abstract class BaseCSRFTokenPredicate {
      */
     @Nonnull @NotEmpty public static final String CSRF_EXCLUDED_ATTRIBUTE_NAME = "csrf_excluded";
     
-    
     /**
      * Safe get the <code>boolean</code> value of the attribute from the attributes annotating 
      * the {@link StateDefinition}. Returns the <code>defaultValue</code> if either:
@@ -67,4 +65,4 @@ public abstract class BaseCSRFTokenPredicate {
         
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/CSRFToken.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/CSRFToken.java
index 54dc7c3b0..d2364cb21 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/CSRFToken.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/CSRFToken.java
@@ -40,4 +40,5 @@ public interface CSRFToken extends Serializable{
      * @return the anti-CSRF token.
      */
     @Nonnull String getToken();
-}
+
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/InvalidCSRFTokenException.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/InvalidCSRFTokenException.java
index 19116034e..49ba11dfb 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/InvalidCSRFTokenException.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/InvalidCSRFTokenException.java
@@ -41,5 +41,4 @@ public class InvalidCSRFTokenException extends FlowExecutionException{
         
     }
     
-
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/CSRFTokenFlowExecutionListener.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/CSRFTokenFlowExecutionListener.java
index 9a3adabd1..693a91e1c 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/CSRFTokenFlowExecutionListener.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/CSRFTokenFlowExecutionListener.java
@@ -39,7 +39,6 @@ import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
 
-
 /**
  * A flow execution lifecycle listener that, if enabled:
  * <ul>
@@ -212,4 +211,4 @@ public class CSRFTokenFlowExecutionListener extends AbstractInitializableCompone
         
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultEventRequiresCSRFTokenValidationPredicate.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultEventRequiresCSRFTokenValidationPredicate.java
index 8abdf60b5..925201c02 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultEventRequiresCSRFTokenValidationPredicate.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultEventRequiresCSRFTokenValidationPredicate.java
@@ -55,4 +55,4 @@ public class DefaultEventRequiresCSRFTokenValidationPredicate
    }
 
    
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultViewRequiresCSRFTokenPredicate.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultViewRequiresCSRFTokenPredicate.java
index 07c772ec5..2b93c12ab 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultViewRequiresCSRFTokenPredicate.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/DefaultViewRequiresCSRFTokenPredicate.java
@@ -19,6 +19,8 @@ package net.shibboleth.idp.ui.csrf.impl;
 
 import java.util.function.Predicate;
 
+import javax.annotation.Nullable;
+
 import org.springframework.webflow.execution.RequestContext;
 
 import net.shibboleth.idp.ui.csrf.BaseCSRFTokenPredicate;
@@ -37,13 +39,16 @@ public class DefaultViewRequiresCSRFTokenPredicate
             extends BaseCSRFTokenPredicate implements Predicate<RequestContext>{
     
     /** {@inheritDoc} */
-    public boolean test(final RequestContext context) {
+    public boolean test(@Nullable final RequestContext context) {
+        
+        if (context == null) {
+            return false;
+        }
         
-        assert context != null;
         final boolean excluded = safeGetBooleanStateAttribute(context.getCurrentState(),
                 CSRF_EXCLUDED_ATTRIBUTE_NAME,false);
         //if NOT excluded from CSRF checks, return true, else return false.
         return !excluded;
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/SimpleCSRFToken.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/SimpleCSRFToken.java
index 2572e15ea..ea0c9b7b0 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/SimpleCSRFToken.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/SimpleCSRFToken.java
@@ -30,7 +30,6 @@ import net.shibboleth.shared.logic.Constraint;
  */
 @Immutable
 public class SimpleCSRFToken implements CSRFToken{
-    
 
     /** Serial UID. */
     private static final long serialVersionUID = 3742188179558262003L;
@@ -63,4 +62,4 @@ public class SimpleCSRFToken implements CSRFToken{
        return token;
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/package-info.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/package-info.java
index 9d5d00d8d..cf16ca985 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/package-info.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/impl/package-info.java
@@ -16,7 +16,9 @@
  */
 
 /**
- * 
  * Implementation classes for cross-site request forgery mitigation. 
  */
-package net.shibboleth.idp.ui.csrf.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.idp.ui.csrf.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/package-info.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/package-info.java
index 5e6294a00..370243f07 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/package-info.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/csrf/package-info.java
@@ -18,4 +18,7 @@
 /**
  * APIs relating to cross-site request forgery mitigations. 
  */
-package net.shibboleth.idp.ui.csrf;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.idp.ui.csrf;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java
index b4f804707..a331e74cc 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java
@@ -83,11 +83,8 @@ public class SetRPUIInformation extends AbstractProfileAction {
     /** The {@link SPSSODescriptor}. Not finding this is not fatal */
     @Nullable private SPSSODescriptor spSSODescriptor;
 
-    /** The RPUI context - we always create this in {@link #doPreExecute(ProfileRequestContext)}. */
-    private RelyingPartyUIContext rpUIContext;
-
     /** The ACS context. */
-    private AttributeConsumingService acsDesriptor;
+    @Nullable private AttributeConsumingService acsDesriptor;
 
     /** Constructor. */
     public SetRPUIInformation() {
@@ -200,8 +197,7 @@ public class SetRPUIInformation extends AbstractProfileAction {
 
     /** {@inheritDoc} */
     @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
-
-        rpUIContext = rpUIContextCreateStrategy.apply(profileRequestContext);
+        final RelyingPartyUIContext rpUIContext = rpUIContextCreateStrategy.apply(profileRequestContext);
         if (rpUIContext == null) {
             log.error("{} Unable to create RelyingPartyUIContext", getLogPrefix());
             ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
@@ -222,4 +218,4 @@ public class SetRPUIInformation extends AbstractProfileAction {
         rpUIContext.setRequestSupplier(supplier);
    }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/package-info.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/package-info.java
index 97de54e65..80be3f2fa 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/package-info.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/package-info.java
@@ -18,5 +18,7 @@
 /**
  * Implementation classes for information needed by the UI. 
  */
+ at NonnullElements
+package net.shibboleth.idp.ui.impl;
 
-package net.shibboleth.idp.ui.impl;
\ No newline at end of file
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationDisplayNameTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationDisplayNameTag.java
index 3dbcdec89..ab111a504 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationDisplayNameTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationDisplayNameTag.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
@@ -38,7 +39,7 @@ public class OrganizationDisplayNameTag extends ServiceTagSupport {
     private static final long serialVersionUID = -196716418770324981L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(OrganizationDisplayNameTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(OrganizationDisplayNameTag.class);
 
     /**
      * look for the <OrganizationDisplayName>.
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationNameTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationNameTag.java
index be7f92930..c7cf1f0cb 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationNameTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationNameTag.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import jakarta.servlet.jsp.JspException;
 import jakarta.servlet.jsp.JspWriter;
@@ -36,7 +37,7 @@ public class OrganizationNameTag extends ServiceTagSupport {
     private static final long serialVersionUID = -6896271567378071224L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(OrganizationNameTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(OrganizationNameTag.class);
 
     /**
      * look for the <OrganizationName>.
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationURLTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationURLTag.java
index 093e04e1e..b80ab5dbd 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationURLTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/OrganizationURLTag.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
@@ -37,10 +38,10 @@ public class OrganizationURLTag extends ServiceTagSupport {
     private static final long serialVersionUID = 5633365955540356312L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(OrganizationURLTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(OrganizationURLTag.class);
 
     /** Bean storage for the link text attribute. */
-    private static String linkText;
+    @Nullable private static String linkText;
 
     /**
      * Bean setter for the link text attribute.
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceContactTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceContactTag.java
index 381b05479..9107793cc 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceContactTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceContactTag.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.ui.taglib;
 import java.io.IOException;
 import java.util.List;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import jakarta.servlet.jsp.JspException;
 import jakarta.servlet.jsp.JspWriter;
@@ -42,13 +43,13 @@ public class ServiceContactTag extends ServiceTagSupport {
     private static final long serialVersionUID = 5437171915434315671L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(ServiceContactTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(ServiceContactTag.class);
 
     /** storage for the contactType bean. */
-    private ContactPersonTypeEnumeration contactType = ContactPersonTypeEnumeration.SUPPORT;
+    @Nonnull private ContactPersonTypeEnumeration contactType = ContactPersonTypeEnumeration.SUPPORT;
 
     /** bean storage for the name attribute. */
-    private String contactName;
+    @Nullable private String contactName;
 
     /**
      * Setter for the contactType bean.
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceDescriptionTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceDescriptionTag.java
index 186e3ff23..18ad9a9a5 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceDescriptionTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceDescriptionTag.java
@@ -19,6 +19,8 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
+
 import jakarta.servlet.jsp.JspException;
 import jakarta.servlet.jsp.JspWriter;
 import jakarta.servlet.jsp.tagext.BodyContent;
@@ -38,8 +40,7 @@ public class ServiceDescriptionTag extends ServiceTagSupport {
     private static final long serialVersionUID = 3794685928805227487L;
     
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(ServiceDescriptionTag.class);
-
+    @Nonnull private static Logger log = LoggerFactory.getLogger(ServiceDescriptionTag.class);
 
     /** {@inheritDoc} */
     @Override public int doEndTag() throws JspException {
@@ -68,4 +69,5 @@ public class ServiceDescriptionTag extends ServiceTagSupport {
         }
         return super.doEndTag();
     }
-}
+
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceInformationURLTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceInformationURLTag.java
index 880667988..b5c191bcf 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceInformationURLTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceInformationURLTag.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
@@ -36,7 +37,7 @@ public class ServiceInformationURLTag extends ServiceTagSupport {
     private static final long serialVersionUID = 4154999542916069376L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(ServiceInformationURLTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(ServiceInformationURLTag.class);
 
     /** Bean storage for the link text attribute. */
     @Nullable private static String linkText;
@@ -87,4 +88,4 @@ public class ServiceInformationURLTag extends ServiceTagSupport {
         return super.doEndTag();
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceLogoTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceLogoTag.java
index a842de2eb..4841e1af3 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceLogoTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceLogoTag.java
@@ -21,11 +21,13 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import jakarta.servlet.jsp.JspException;
 import jakarta.servlet.jsp.JspWriter;
 import jakarta.servlet.jsp.tagext.BodyContent;
 import net.shibboleth.idp.ui.context.RelyingPartyUIContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.codec.HTMLEncoder;
 
 import org.slf4j.Logger;
@@ -38,13 +40,13 @@ public class ServiceLogoTag extends ServiceTagSupport {
     private static final long serialVersionUID = 5309357312113020929L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(ServiceLogoTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(ServiceLogoTag.class);
 
     /** what to emit if the jsp has nothing. */
-    private static final String DEFAULT_VALUE = "";
+    @Nonnull @NotEmpty private static final String DEFAULT_VALUE = "";
 
     /** what to emit as alt txt if all else fails. */
-    private static final String DEFAULT_ALT_TXT = "SP Logo";
+    @Nonnull @NotEmpty private static final String DEFAULT_ALT_TXT = "SP Logo";
 
     /** Bean storage. Size constraint X */
     private int minWidth;
@@ -59,7 +61,7 @@ public class ServiceLogoTag extends ServiceTagSupport {
     private int maxHeight = Integer.MAX_VALUE;
 
     /** Bean storage. alt text */
-    private String altTxt;
+    @Nullable private String altTxt;
 
     /**
      * Set the maximum width of the logo.
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceNameTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceNameTag.java
index a88c88a75..7946273f9 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceNameTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServiceNameTag.java
@@ -19,9 +19,13 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import jakarta.servlet.jsp.JspException;
 import jakarta.servlet.jsp.JspWriter;
 import jakarta.servlet.jsp.tagext.BodyContent;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.codec.HTMLEncoder;
 
 import org.slf4j.Logger;
@@ -43,20 +47,20 @@ public class ServiceNameTag extends ServiceTagSupport {
     private static final long serialVersionUID = 2131709003267781456L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(ServiceNameTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(ServiceNameTag.class);
     
     /** what to emit if the jsp has nothing. */
-    private static final String DEFAULT_VALUE = "Unspecified Service Provider";
+    @Nonnull @NotEmpty private static final String DEFAULT_VALUE = "Unspecified Service Provider";
 
     /** Bean storage for default value. */
-    private String defaultValue;
+    @Nullable private String defaultValue;
 
     /**
      * Set the default value.
      * 
      * @param value what to set
      */
-    public void setDefaultValue(final String value) {
+    public void setDefaultValue(@Nullable final String value) {
         defaultValue = value;
     }
     
@@ -90,4 +94,5 @@ public class ServiceNameTag extends ServiceTagSupport {
         }
         return super.doStartTag();
     }
-}
+
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServicePrivacyURLTag.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServicePrivacyURLTag.java
index c5afa87cc..e25c41d84 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServicePrivacyURLTag.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/ServicePrivacyURLTag.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.ui.taglib;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
@@ -36,10 +37,10 @@ public class ServicePrivacyURLTag extends ServiceTagSupport {
     private static final long serialVersionUID = -5857694815588394787L;
 
     /** Class logger. */
-    private static Logger log = LoggerFactory.getLogger(ServicePrivacyURLTag.class);
+    @Nonnull private static Logger log = LoggerFactory.getLogger(ServicePrivacyURLTag.class);
 
     /** Bean storage for the link text attribute. */
-    private static String linkText;
+    @Nullable private static String linkText;
 
     /**
      * Bean setter for the link text attribute.
@@ -86,4 +87,4 @@ public class ServicePrivacyURLTag extends ServiceTagSupport {
         return super.doEndTag();
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/package-info.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/package-info.java
index 966dc1e7a..2faad7c63 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/package-info.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/taglib/package-info.java
@@ -18,5 +18,7 @@
 /**
  * Contains the code for the jsp taglibs.
  */
+ at NonnullElements
+package net.shibboleth.idp.ui.taglib;
 
-package net.shibboleth.idp.ui.taglib;
\ No newline at end of file
+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