[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