[java-shib-attribute] 03/04: IDP-2069 Null Handling Task

Rod Widdowson rdw at steadingsoftware.com
Sat Apr 29 10:36:40 UTC 2023


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

rdw pushed a commit to branch main
in repository java-shib-attribute.

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

commit db160b40e2f3643515ebaf434ab3043a7c1057af
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Apr 29 11:23:08 2023 +0100

    IDP-2069 Null Handling Task
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Tighten up the contract around nullness of result data connectors and
    atributes.  These have always been non-null and documented as such,
    but mislabeled.
---
 .../idp/attribute/resolver/AbstractDataConnector.java      |  7 ++++---
 .../idp/attribute/resolver/AbstractResolverPlugin.java     | 13 ++++++-------
 .../attribute/resolver/ResolvedAttributeDefinition.java    | 14 +++++++-------
 .../idp/attribute/resolver/ResolvedDataConnector.java      |  9 +++++----
 .../shibboleth/idp/attribute/resolver/ResolverPlugin.java  | 10 ++++------
 5 files changed, 26 insertions(+), 27 deletions(-)

diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java
index 44110559b..0747f096f 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java
@@ -21,7 +21,6 @@ import java.time.Duration;
 import java.time.Instant;
 import java.util.Collection;
 import java.util.Map;
-import java.util.Set;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -68,7 +67,9 @@ public abstract class AbstractDataConnector extends AbstractResolverPlugin<Map<S
 
     /** Constructor. */
     public AbstractDataConnector() {
-        noRetryDelay = Duration.ZERO; 
+        final Duration zero = Duration.ZERO;
+        assert zero != null;
+        noRetryDelay = zero;
         exportAttributes = CollectionSupport.emptySet();
     }
     
@@ -152,7 +153,7 @@ public abstract class AbstractDataConnector extends AbstractResolverPlugin<Map<S
      */
     public void setExportAttributes(@Nonnull @NonnullElements final Collection<String> what) {
         checkSetterPreconditions();
-        exportAttributes = Set.copyOf(what);
+        exportAttributes = CollectionSupport.copyToSet(what);
     }
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index c5d5ea790..3c40e8c2f 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -32,7 +32,6 @@ import org.springframework.beans.factory.DisposableBean;
 
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
-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.annotation.constraint.Unmodifiable;
@@ -107,9 +106,9 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
     /**
      * Gets the unmodifiable list of attributeDependencies for this plugin.
      * 
-     * @return unmodifiable list of dependencies for this plugin, never null
+     * @return unmodifiable list of dependencies for this plugin, never null.
      */
-    @Override @NonnullAfterInit @NonnullElements @Unmodifiable public Set<ResolverAttributeDefinitionDependency>
+    @Override @Nonnull @Unmodifiable public Set<ResolverAttributeDefinitionDependency>
             getAttributeDependencies() {
         return attributeDependencies;
     }
@@ -117,9 +116,9 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
     /**
      * Gets the unmodifiable list of dependencies for this plugin.
      * 
-     * @return unmodifiable list of dependencies for this plugin, never null
+     * @return unmodifiable list of dependencies for this plugin, never null.
      */
-    @NonnullAfterInit @NonnullElements @Unmodifiable public Set<ResolverDataConnectorDependency>
+    @Nonnull @NonnullElements @Unmodifiable public Set<ResolverDataConnectorDependency>
             getDataConnectorDependencies() {
         return dataConnectorDependencies;
     }
@@ -287,7 +286,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
         if (prc != null) {
             final MetricContext timerCtx = prc.getSubcontext(MetricContext.class);
             if (timerCtx != null) {
-                timerCtx.start(getId());
+                timerCtx.start(ensureId());
                 return true;
             }
         }
@@ -305,7 +304,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
         if (prc != null) {
             final MetricContext timerCtx = prc.getSubcontext(MetricContext.class);
             if (timerCtx != null) {
-                timerCtx.stop(getId());
+                timerCtx.stop(ensureId());
             }
         }
     }
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
index 823391985..1b88b7463 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
@@ -24,15 +24,13 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.opensaml.profile.context.ProfileRequestContext;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
-import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 
-import org.opensaml.profile.context.ProfileRequestContext;
-
 /**
  * A proxy which wraps a resolved attribute definition and always returns the same attribute. The goal being that once
  * an attribute definition is resolved once this can be used in its place and calls to
@@ -77,13 +75,13 @@ public final class ResolvedAttributeDefinition extends AbstractAttributeDefiniti
 
     /** {@inheritDoc} */
     @Override
-    @NonnullAfterInit @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
+    @Nonnull public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
         return resolvedDefinition.getAttributeDependencies();
     }
 
     /** {@inheritDoc} */
     @Override
-    @NonnullAfterInit @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
+    @Nonnull public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
         return resolvedDefinition.getDataConnectorDependencies();
     }
 
@@ -135,7 +133,9 @@ public final class ResolvedAttributeDefinition extends AbstractAttributeDefiniti
 
     /** {@inheritDoc} */
     @Override @Nonnull public String toString() {
-        return resolvedDefinition.toString();
+        final String result = resolvedDefinition.toString();
+        assert result != null;
+        return result;
     }
 
     /**
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
index ec6898528..848c545ad 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
@@ -31,7 +31,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
-import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.logic.Constraint;
@@ -80,13 +79,13 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
 
     /** {@inheritDoc} */
     @Override 
-    @NonnullAfterInit @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
+    @Nonnull public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
         return resolvedConnector.getAttributeDependencies();
     }
 
     /** {@inheritDoc} */
     @Override
-    @NonnullAfterInit @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
+    @Nonnull public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
         return resolvedConnector.getDataConnectorDependencies();
     }
 
@@ -129,7 +128,9 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
 
     /** {@inheritDoc} */
     @Override @Nonnull public String toString() {
-        return resolvedConnector.toString();
+        final String result = resolvedConnector.toString();
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverPlugin.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverPlugin.java
index a410a0472..1985706b9 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverPlugin.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverPlugin.java
@@ -24,17 +24,15 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.opensaml.profile.context.ProfileRequestContext;
+
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
-import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.component.DestructableComponent;
 import net.shibboleth.shared.component.IdentifiedComponent;
 import net.shibboleth.shared.component.InitializableComponent;
 import net.shibboleth.shared.component.UnmodifiableComponent;
 
-import org.opensaml.profile.context.ProfileRequestContext;
-
 /**
  * Interface defining the base work done by all plugins used within attribute resolution.
  * 
@@ -64,7 +62,7 @@ public interface ResolverPlugin<ResolvedType> extends UnmodifiableComponent,
      * 
      * @return unmodifiable list of attribute dependencies for this plugin, never null
      */
-    @NonnullAfterInit @NonnullElements @Unmodifiable Set<ResolverAttributeDefinitionDependency>
+    @Nonnull @Unmodifiable Set<ResolverAttributeDefinitionDependency>
         getAttributeDependencies();
 
     /**
@@ -72,7 +70,7 @@ public interface ResolverPlugin<ResolvedType> extends UnmodifiableComponent,
      * 
      * @return unmodifiable list of data connector dependencies for this plugin, never null
      */
-    @NonnullAfterInit @NonnullElements @Unmodifiable Set<ResolverDataConnectorDependency>
+    @Nonnull @Unmodifiable Set<ResolverDataConnectorDependency>
         getDataConnectorDependencies();
 
     /**

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


More information about the commits mailing list