[java-opensaml] branch main updated: Null cleanup and annotation fixes.

Scott Cantor cantor.2 at osu.edu
Mon Dec 18 18:31:57 UTC 2023


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

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

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

The following commit(s) were added to refs/heads/main by this push:
     new d417f7b4b Null cleanup and annotation fixes.
d417f7b4b is described below

commit d417f7b4b04998286a2d167fc769904362605f00
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Dec 18 13:31:54 2023 -0500

    Null cleanup and annotation fixes.
---
 .../opensaml/core/xml/AbstractXSAnyAdapter.java    |  47 ++------
 .../saml/saml2/core/impl/BaseIDXSAnyAdapter.java   |   8 +-
 .../metadata/impl/RoleDescriptorXSAnyAdapter.java  | 128 ++++++++-------------
 3 files changed, 66 insertions(+), 117 deletions(-)

diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/AbstractXSAnyAdapter.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/AbstractXSAnyAdapter.java
index 84a0fd253..a66b0a5db 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/AbstractXSAnyAdapter.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/AbstractXSAnyAdapter.java
@@ -57,184 +57,157 @@ public abstract class AbstractXSAnyAdapter implements XSAnyAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override
     public void detach() {
         adapted.detach();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public Element getDOM() {
         return adapted.getDOM();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull
     public Element ensureDOM() {
         return adapted.ensureDOM();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull
     public QName getElementQName() {
         return adapted.getElementQName();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull
     public IDIndex getIDIndex() {
         return adapted.getIDIndex();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull
     public NamespaceManager getNamespaceManager() {
         return adapted.getNamespaceManager();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull
     public Set<Namespace> getNamespaces() {
         return adapted.getNamespaces();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public String getNoNamespaceSchemaLocation() {
         return adapted.getNoNamespaceSchemaLocation();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public List<XMLObject> getOrderedChildren() {
         return adapted.getOrderedChildren();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public XMLObject getParent() {
         return adapted.getParent();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public String getSchemaLocation() {
         return adapted.getSchemaLocation();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public QName getSchemaType() {
         return adapted.getSchemaType();
     }
 
     /** {@inheritDoc} */
-    @Override
     public boolean hasChildren() {
         return adapted.hasChildren();
     }
 
     /** {@inheritDoc} */
-    @Override
     public boolean hasParent() {
         return adapted.hasParent();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void releaseChildrenDOM(boolean propagateRelease) {
+    public void releaseChildrenDOM(final boolean propagateRelease) {
         adapted.releaseChildrenDOM(propagateRelease);
     }
 
     /** {@inheritDoc} */
-    @Override
     public void releaseDOM() {
         adapted.releaseDOM();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void releaseParentDOM(boolean propagateRelease) {
+    public void releaseParentDOM(final boolean propagateRelease) {
         adapted.releaseParentDOM(propagateRelease);
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
-    public XMLObject resolveID(@Nonnull String id) {
+    public XMLObject resolveID(@Nonnull final String id) {
         return adapted.resolveID(id);
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
-    public XMLObject resolveIDFromRoot(@Nonnull String id) {
+    public XMLObject resolveIDFromRoot(@Nonnull final String id) {
         return adapted.resolveIDFromRoot(id);
     }
 
     /** {@inheritDoc} */
     @Override
-    public void setDOM(@Nullable Element dom) {
+    public void setDOM(@Nullable final Element dom) {
         adapted.setDOM(dom);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setNoNamespaceSchemaLocation(@Nullable String location) {
+    public void setNoNamespaceSchemaLocation(@Nullable final String location) {
         adapted.setNoNamespaceSchemaLocation(location);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setParent(@Nullable XMLObject parent) {
+    public void setParent(@Nullable final XMLObject parent) {
         adapted.setParent(parent);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setSchemaLocation(@Nullable String location) {
+    public void setSchemaLocation(@Nullable final String location) {
         adapted.setSchemaLocation(location);
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public Boolean isNil() {
         return adapted.isNil();
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable
     public XSBooleanValue isNilXSBoolean() {
         return adapted.isNilXSBoolean();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setNil(@Nullable Boolean newNil) {
+    public void setNil(@Nullable final Boolean newNil) {
         adapted.setNil(newNil);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setNil(@Nullable XSBooleanValue newNil) {
+    public void setNil(@Nullable final XSBooleanValue newNil) {
         adapted.setNil(newNil);
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull
     public LockableClassToInstanceMultiMap<Object> getObjectMetadata() {
         return adapted.getObjectMetadata();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/BaseIDXSAnyAdapter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/BaseIDXSAnyAdapter.java
index 6ef1bea7d..b93d5e57e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/BaseIDXSAnyAdapter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/BaseIDXSAnyAdapter.java
@@ -14,6 +14,8 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
 import org.opensaml.core.xml.AbstractXSAnyAdapter;
@@ -30,7 +32,7 @@ public class BaseIDXSAnyAdapter extends AbstractXSAnyAdapter implements BaseID {
      *
      * @param xsAny the adapted instance
      */
-    public BaseIDXSAnyAdapter(XSAny xsAny) {
+    public BaseIDXSAnyAdapter(@Nonnull final XSAny xsAny) {
         super(xsAny);
     }
 
@@ -42,7 +44,7 @@ public class BaseIDXSAnyAdapter extends AbstractXSAnyAdapter implements BaseID {
 
     /** {@inheritDoc} */
     @Override
-    public void setNameQualifier(String newNameQualifier) {
+    public void setNameQualifier(@Nullable final String newNameQualifier) {
         getAdapted().getUnknownAttributes().put(new QName(BaseID.NAME_QUALIFIER_ATTRIB_NAME), newNameQualifier);
     }
 
@@ -54,7 +56,7 @@ public class BaseIDXSAnyAdapter extends AbstractXSAnyAdapter implements BaseID {
 
     /** {@inheritDoc} */
     @Override
-    public void setSPNameQualifier(String newSPNameQualifier) {
+    public void setSPNameQualifier(@Nullable final String newSPNameQualifier) {
         getAdapted().getUnknownAttributes().put(new QName(BaseID.SP_NAME_QUALIFIER_ATTRIB_NAME), newSPNameQualifier);
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/impl/RoleDescriptorXSAnyAdapter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/impl/RoleDescriptorXSAnyAdapter.java
index b7fc5edee..ca96bf72e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/impl/RoleDescriptorXSAnyAdapter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/impl/RoleDescriptorXSAnyAdapter.java
@@ -17,10 +17,11 @@ package org.opensaml.saml.saml2.metadata.impl;
 import java.time.Duration;
 import java.time.Instant;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
 import org.opensaml.core.xml.AbstractXSAnyAdapter;
@@ -35,6 +36,9 @@ import org.opensaml.saml.saml2.metadata.Organization;
 import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 import org.opensaml.xmlsec.signature.Signature;
 
+import net.shibboleth.shared.annotation.constraint.Live;
+import net.shibboleth.shared.annotation.constraint.NotLive;
+import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.collection.LazyList;
 import net.shibboleth.shared.primitive.StringSupport;
@@ -50,26 +54,23 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
      *
      * @param xsAny the instance to adapt
      */
-    public RoleDescriptorXSAnyAdapter(XSAny xsAny) {
+    public RoleDescriptorXSAnyAdapter(@Nonnull final XSAny xsAny) {
         super(xsAny);
         getAdapted().getUnknownAttributes().registerID(new QName(RoleDescriptor.ID_ATTRIB_NAME));
     }
 
     /** {@inheritDoc} */
-    @Override
-    public String getSignatureReferenceID() {
+    @Nullable public String getSignatureReferenceID() {
         return getID();
     }
 
     /** {@inheritDoc} */
-    @Override
     public boolean isSigned() {
         return getSignature() != null;
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Signature getSignature() {
+    @Nullable public Signature getSignature() {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(Signature.DEFAULT_ELEMENT_NAME);
         if (xmlObjects.isEmpty()) {
             return null;
@@ -78,13 +79,11 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setSignature(Signature newSignature) {
+    public void setSignature(@Nullable final Signature newSignature) {
         throw new UnsupportedOperationException();
     }
 
     /** {@inheritDoc} */
-    @Override
     public boolean isValid() {
         final Instant validUntil = getValidUntil();
 
@@ -96,48 +95,49 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
     public Instant getValidUntil() {
-        return DOMTypeSupport.stringToInstant(getAdapted().getUnknownAttributes().get(
-                RoleDescriptor.VALID_UNTIL_ATTRIB_QNAME));
+        final String attr = getAdapted().getUnknownAttributes().get(RoleDescriptor.VALID_UNTIL_ATTRIB_QNAME);
+        return attr != null ? DOMTypeSupport.stringToInstant(attr) : null;
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setValidUntil(Instant validUntil) {
-        getAdapted().getUnknownAttributes().put(RoleDescriptor.VALID_UNTIL_ATTRIB_QNAME,
-                DOMTypeSupport.instantToString(validUntil));
+    public void setValidUntil(@Nullable final Instant validUntil) {
+        if (validUntil != null) {
+            getAdapted().getUnknownAttributes().put(RoleDescriptor.VALID_UNTIL_ATTRIB_QNAME,
+                    DOMTypeSupport.instantToString(validUntil));
+        } else {
+            getAdapted().getUnknownAttributes().remove(RoleDescriptor.VALID_UNTIL_ATTRIB_QNAME);
+        }
     }
 
     /** {@inheritDoc} */
-    @Override
     public Duration getCacheDuration() {
-        return DOMTypeSupport.stringToDuration(getAdapted().getUnknownAttributes().get(
-                RoleDescriptor.CACHE_DURATION_ATTRIB_QNAME));
+        final String attr = getAdapted().getUnknownAttributes().get(RoleDescriptor.CACHE_DURATION_ATTRIB_QNAME);
+        return attr != null ? DOMTypeSupport.stringToDuration(attr) : null;
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setCacheDuration(Duration duration) {
-        getAdapted().getUnknownAttributes().put(RoleDescriptor.CACHE_DURATION_ATTRIB_QNAME,
-                DOMTypeSupport.durationToString(duration));
+    public void setCacheDuration(@Nullable final Duration duration) {
+        if (duration != null) {
+            getAdapted().getUnknownAttributes().put(RoleDescriptor.CACHE_DURATION_ATTRIB_QNAME,
+                    DOMTypeSupport.durationToString(duration));
+        } else {
+            getAdapted().getUnknownAttributes().remove(RoleDescriptor.CACHE_DURATION_ATTRIB_QNAME);
+        }
     }
 
     /** {@inheritDoc} */
-    @Override
-    public AttributeMap getUnknownAttributes() {
+    @Nonnull public AttributeMap getUnknownAttributes() {
         return getAdapted().getUnknownAttributes();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public String getID() {
+    @Nullable public String getID() {
         return getAdapted().getUnknownAttributes().get(new QName(RoleDescriptor.ID_ATTRIB_NAME));
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setID(String newID) {
+    public void setID(@Nullable final String newID) {
         getAdapted().getUnknownAttributes().put(new QName(RoleDescriptor.ID_ATTRIB_NAME), newID);
     }
     
@@ -170,62 +170,53 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
-    public List<String> getSupportedProtocols() {
+    @Nonnull @Unmodifiable @NotLive public List<String> getSupportedProtocols() {
         return CollectionSupport.copyToList(fetchSupportedProtocols());
     }
 
     /** {@inheritDoc} */
-    @Override
-    public boolean isSupportedProtocol(String protocol) {
+    public boolean isSupportedProtocol(@Nonnull final String protocol) {
         return fetchSupportedProtocols().contains(protocol);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void addSupportedProtocol(String protocol) {
+    public void addSupportedProtocol(@Nonnull final String protocol) {
         final List<String> protocols = fetchSupportedProtocols();
         protocols.add(protocol);
         storeSupportedProtocols(protocols);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void removeSupportedProtocol(String protocol) {
+    public void removeSupportedProtocol(@Nonnull final String protocol) {
         final List<String> protocols = fetchSupportedProtocols();
         protocols.remove(protocol);
         storeSupportedProtocols(protocols);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void removeSupportedProtocols(Collection<String> protocolsToRemove) {
+    public void removeSupportedProtocols(@Nonnull final Collection<String> protocolsToRemove) {
         final List<String> protocols = fetchSupportedProtocols();
         protocols.removeAll(protocolsToRemove);
         storeSupportedProtocols(protocols);
     }
 
     /** {@inheritDoc} */
-    @Override
     public void removeAllSupportedProtocols() {
-        storeSupportedProtocols(Collections.emptyList());
+        storeSupportedProtocols(CollectionSupport.emptyList());
     }
 
     /** {@inheritDoc} */
-    @Override
-    public String getErrorURL() {
+    @Nullable public String getErrorURL() {
         return getAdapted().getUnknownAttributes().get(new QName(RoleDescriptor.ERROR_URL_ATTRIB_NAME));
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setErrorURL(String errorURL) {
+    public void setErrorURL(@Nullable final String errorURL) {
         getAdapted().getUnknownAttributes().put(new QName(RoleDescriptor.ERROR_URL_ATTRIB_NAME), errorURL);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Extensions getExtensions() {
+    @Nullable public Extensions getExtensions() {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(Extensions.DEFAULT_ELEMENT_NAME);
         if (xmlObjects.isEmpty()) {
             return null;
@@ -238,18 +229,14 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setExtensions(Extensions extensions) {
+    public void setExtensions(@Nullable final Extensions extensions) {
         throw new UnsupportedOperationException();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public List<KeyDescriptor> getKeyDescriptors() {
+    @Nonnull @Live public List<KeyDescriptor> getKeyDescriptors() {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(KeyDescriptor.DEFAULT_ELEMENT_NAME);
-        if (xmlObjects.isEmpty()) {
-            return null;
-        }
+        // TODO: this returned list is immutable, which violates the API
         return xmlObjects.stream()
                 .filter(KeyDescriptor.class::isInstance)
                 .map(KeyDescriptor.class::cast)
@@ -257,8 +244,7 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Organization getOrganization() {
+    @Nullable public Organization getOrganization() {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(Organization.DEFAULT_ELEMENT_NAME);
         if (xmlObjects.isEmpty()) {
             return null;
@@ -270,18 +256,14 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
-    public void setOrganization(Organization organization) {
+    public void setOrganization(@Nullable final Organization organization) {
         throw new UnsupportedOperationException();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public List<ContactPerson> getContactPersons() {
+    @Nonnull @Live public List<ContactPerson> getContactPersons() {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(ContactPerson.DEFAULT_ELEMENT_NAME);
-        if (xmlObjects.isEmpty()) {
-            return null;
-        }
+        // TODO: this returned list is immutable, which violates the API
         return xmlObjects.stream()
                 .filter(ContactPerson.class::isInstance)
                 .map(ContactPerson.class::cast)
@@ -289,29 +271,21 @@ public class RoleDescriptorXSAnyAdapter extends AbstractXSAnyAdapter implements
     }
 
     /** {@inheritDoc} */
-    @Override
-    public List<Endpoint> getEndpoints() {
+    @Nonnull @NotLive @Unmodifiable public List<Endpoint> getEndpoints() {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(Endpoint.DEFAULT_ELEMENT_NAME);
-        if (xmlObjects.isEmpty()) {
-            return null;
-        }
         return xmlObjects.stream()
                 .filter(Endpoint.class::isInstance)
                 .map(Endpoint.class::cast)
-                .toList();
+                .collect(CollectionSupport.nonnullCollector(Collectors.toUnmodifiableList())).get();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public List<Endpoint> getEndpoints(QName type) {
+    @Nonnull @NotLive @Unmodifiable public List<Endpoint> getEndpoints(@Nonnull final QName type) {
         final List<XMLObject> xmlObjects = getAdapted().getUnknownXMLObjects(type);
-        if (xmlObjects.isEmpty()) {
-            return null;
-        }
         return xmlObjects.stream()
                 .filter(Endpoint.class::isInstance)
                 .map(Endpoint.class::cast)
-                .toList();
+                .collect(CollectionSupport.nonnullCollector(Collectors.toUnmodifiableList())).get();
     }
 
-}
+}
\ No newline at end of file

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


More information about the commits mailing list