[java-identity-provider] branch master updated: IDP-1516 - Reduce Guava dependence

Scott Cantor cantor.2 at osu.edu
Mon Oct 28 20:40:26 EDT 2019


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

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

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

The following commit(s) were added to refs/heads/master by this push:
       new  6599f54   IDP-1516 - Reduce Guava dependence
6599f54 is described below

commit 6599f541467499da47986696fe37324aa25bebd9
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Oct 28 20:40:21 2019 -0400

    IDP-1516 - Reduce Guava dependence
    
    https://issues.shibboleth.net/jira/browse/IDP-1516
---
 .../profile/logic/DynamicAttributePredicate.java   |  5 ++-
 .../relyingparty/RelyingPartyConfiguration.java    | 15 +++++---
 .../impl/PopulateProfileInterceptorContext.java    |  7 ++--
 .../factory/StaticExplicitKeyFactoryBean.java      | 26 ++++++++------
 .../spring/factory/StaticPKIXFactoryBean.java      |  9 ++---
 .../resource/impl/HTTPResourceFactoryBean.java     | 19 +++++-----
 .../NameIDCanonicalizationFlowDescriptor.java      | 19 +++++-----
 .../config/BrowserSSOProfileConfiguration.java     | 41 ++++++++++++++--------
 .../config/BrowserSSOProfileConfiguration.java     | 41 ++++++++++++++--------
 .../profile/delegation/DelegationContext.java      | 15 +++-----
 ...tributeSourcedSAML1NameIdentifierGenerator.java |  7 +---
 .../impl/AttributeSourcedSAML2NameIDGenerator.java |  7 +---
 .../impl/PersistentSAML2NameIDGenerator.java       |  7 +---
 .../impl/AddAttributeStatementToAssertion.java     |  7 ++--
 .../impl/AddAttributeStatementToAssertion.java     |  7 ++--
 .../profile/impl/ProcessRequestedAuthnContext.java |  4 +--
 16 files changed, 116 insertions(+), 120 deletions(-)

diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
index d31f89b..ab6686b 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
@@ -17,9 +17,7 @@
 
 package net.shibboleth.idp.profile.logic;
 
-import com.google.common.base.Predicates;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.ListMultimap;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -39,6 +37,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 
@@ -73,7 +72,7 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
         attributeFunctionMap.clear();
         for (final Map.Entry<String,Collection<Function<ProfileRequestContext,String>>> entry : map.entrySet()) {
             final String attributeId = StringSupport.trimOrNull(entry.getKey());
-            attributeFunctionMap.putAll(attributeId, Collections2.filter(entry.getValue(), Predicates.notNull()));
+            attributeFunctionMap.putAll(attributeId, List.copyOf(entry.getValue()));
         }
     }
 
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java b/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java
index 2559014..d233005 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java
@@ -18,7 +18,9 @@
 package net.shibboleth.idp.relyingparty;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 import java.util.function.Predicate;
@@ -31,7 +33,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -45,7 +46,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /** The configuration that applies to a given relying party. */
 public class RelyingPartyConfiguration extends AbstractIdentifiableInitializableComponent implements
@@ -152,7 +152,12 @@ public class RelyingPartyConfiguration extends AbstractIdentifiableInitializable
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Map<String,ProfileConfiguration> getProfileConfigurations(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableMap(profileConfigurationsLookupStrategy.apply(profileRequestContext));
+        
+        final Map<String,ProfileConfiguration> map = profileConfigurationsLookupStrategy.apply(profileRequestContext);
+        if (map != null) {
+            return Map.copyOf(map);
+        }
+        return Collections.emptyMap();
     }
 
     /**
@@ -188,13 +193,13 @@ public class RelyingPartyConfiguration extends AbstractIdentifiableInitializable
             profileConfigurationsLookupStrategy = FunctionSupport.constant(null);
         } else {
             final HashMap<String,ProfileConfiguration> map = new HashMap<>();
-            for (final ProfileConfiguration config : Collections2.filter(configs, Predicates.notNull())) {
+            for (final ProfileConfiguration config : List.copyOf(configs)) {
                 final String trimmedId =
                         Constraint.isNotNull(StringSupport.trimOrNull(config.getId()),
                                 "ID of profile configuration class " + config.getClass().getName() + " cannot be null");
                 map.put(trimmedId, config);
             }
-            profileConfigurationsLookupStrategy = FunctionSupport.constant(map);
+            profileConfigurationsLookupStrategy = FunctionSupport.constant(Map.copyOf(map));
         }
     }
 
diff --git a/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/interceptor/impl/PopulateProfileInterceptorContext.java b/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/interceptor/impl/PopulateProfileInterceptorContext.java
index 0474838..68eda25 100644
--- a/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/interceptor/impl/PopulateProfileInterceptorContext.java
+++ b/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/interceptor/impl/PopulateProfileInterceptorContext.java
@@ -17,9 +17,9 @@
 
 package net.shibboleth.idp.profile.interceptor.impl;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
@@ -40,8 +40,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.Iterables;
 
 /**
@@ -77,9 +75,8 @@ public class PopulateProfileInterceptorContext extends AbstractProfileIntercepto
      */
     public void setAvailableFlows(@Nonnull @NonnullElements final Collection<ProfileInterceptorFlowDescriptor> flows) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(flows, "Flow collection cannot be null");
 
-        availableFlows = new ArrayList<>(Collections2.filter(flows, Predicates.notNull()));
+        availableFlows = List.copyOf(Constraint.isNotNull(flows, "Flow collection cannot be null"));
     }
     
     /**
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticExplicitKeyFactoryBean.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticExplicitKeyFactoryBean.java
index 30b83af..01b116f 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticExplicitKeyFactoryBean.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticExplicitKeyFactoryBean.java
@@ -26,6 +26,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.cryptacular.EncodingException;
@@ -42,9 +43,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.FatalBeanException;
 import org.springframework.core.io.Resource;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.ext.spring.factory.AbstractComponentAwareFactoryBean;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 
@@ -55,8 +53,8 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
  */
 public class StaticExplicitKeyFactoryBean extends AbstractComponentAwareFactoryBean<ExplicitKeyTrustEngine> {
 
-    /** log. */
-    private Logger log = LoggerFactory.getLogger(StaticExplicitKeyFactoryBean.class);
+    /** Class logger. */
+    @Nonnull private Logger log = LoggerFactory.getLogger(StaticExplicitKeyFactoryBean.class);
 
     /** The resources to be turned into keys. */
     private List<Resource> keyResources;
@@ -66,8 +64,8 @@ public class StaticExplicitKeyFactoryBean extends AbstractComponentAwareFactoryB
 
     /** Constructor. */
     public StaticExplicitKeyFactoryBean() {
-        keyResources = Collections.<Resource>emptyList();
-        certificateResources = Collections.<Resource>emptyList();
+        keyResources = Collections.emptyList();
+        certificateResources = Collections.emptyList();
     }
     
     /**
@@ -76,7 +74,7 @@ public class StaticExplicitKeyFactoryBean extends AbstractComponentAwareFactoryB
      * @param keys the resources
      */
     public void setPublicKeys(@Nullable final List<Resource> keys) {
-        keyResources = keys != null ? keys : Collections.<Resource>emptyList();
+        keyResources = keys != null ? keys : Collections.emptyList();
     }
     
     /**
@@ -85,7 +83,7 @@ public class StaticExplicitKeyFactoryBean extends AbstractComponentAwareFactoryB
      * @param certs the resources
      */
     public void setCertificates(@Nullable final List<Resource> certs) {
-        certificateResources = certs != null ? certs : Collections.<Resource>emptyList();
+        certificateResources = certs != null ? certs : Collections.emptyList();
     }
 
     /**
@@ -109,9 +107,15 @@ public class StaticExplicitKeyFactoryBean extends AbstractComponentAwareFactoryB
         for (final Resource f : certificateResources) {
             try(final InputStream is = f.getInputStream()) {
                 final Collection<X509Certificate> raw = X509Support.decodeCertificates(is);
-                for (final X509Certificate x : Collections2.filter(raw, Predicates.notNull())) {
-                    credentials.add(new BasicX509Credential(x));
+                if (raw != null) {
+                    raw.forEach(x -> {
+                        if (x != null) {
+                            credentials.add(new BasicX509Credential(x));
+                            }
+                        }
+                    );
                 }
+                
             } catch (final CertificateException | IOException e) {
                 log.error("Could not decode certificate from {}", f.getDescription(), e);
                 throw new FatalBeanException("Could not decode certificate from: " + f.getDescription(), e);
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticPKIXFactoryBean.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticPKIXFactoryBean.java
index 9c4a933..dc73614 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticPKIXFactoryBean.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/factory/StaticPKIXFactoryBean.java
@@ -26,14 +26,12 @@ import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.opensaml.security.x509.PKIXValidationInformation;
 import org.opensaml.security.x509.X509Support;
 import org.opensaml.security.x509.impl.BasicPKIXValidationInformation;
 import org.opensaml.security.x509.impl.PKIXX509CredentialTrustEngine;
@@ -43,8 +41,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.FatalBeanException;
 import org.springframework.core.io.Resource;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 import net.shibboleth.ext.spring.factory.AbstractComponentAwareFactoryBean;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -135,7 +131,7 @@ public class StaticPKIXFactoryBean extends AbstractComponentAwareFactoryBean<PKI
      */
     public void setTrustedNames(@Nullable @NonnullElements final Collection<String> names) {
         if (names != null) {
-            trustedNames = new HashSet<>(Collections2.filter(names, Predicates.notNull()));
+            trustedNames = Set.copyOf(names);
         } else {
             trustedNames = null;
         }
@@ -192,8 +188,7 @@ public class StaticPKIXFactoryBean extends AbstractComponentAwareFactoryBean<PKI
                 new BasicPKIXValidationInformation(getCertificates(), getCRLs(), verifyDepth);
         
         final StaticPKIXValidationInformationResolver resolver =
-                new StaticPKIXValidationInformationResolver(
-                        Collections.<PKIXValidationInformation>singletonList(info), trustedNames, checkNames);
+                new StaticPKIXValidationInformationResolver(Collections.singletonList(info), trustedNames, checkNames);
         
         if (checkNames) {
             return new PKIXX509CredentialTrustEngine(resolver);
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/resource/impl/HTTPResourceFactoryBean.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/resource/impl/HTTPResourceFactoryBean.java
index ea7855f..8c515db 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/resource/impl/HTTPResourceFactoryBean.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/resource/impl/HTTPResourceFactoryBean.java
@@ -53,9 +53,6 @@ import org.springframework.beans.FatalBeanException;
 import org.springframework.beans.factory.config.AbstractFactoryBean;
 import org.springframework.core.io.Resource;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.ext.spring.resource.FileBackedHTTPResource;
 import net.shibboleth.ext.spring.resource.HTTPResource;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -99,8 +96,8 @@ public class HTTPResourceFactoryBean extends AbstractFactoryBean<HTTPResource> {
 
     /** Constructor. */
     public HTTPResourceFactoryBean() {
-        keyResources = Collections.<Resource>emptyList();
-        certificateResources = Collections.<Resource>emptyList();
+        keyResources = Collections.emptyList();
+        certificateResources = Collections.emptyList();
     }
 
     /**
@@ -145,7 +142,7 @@ public class HTTPResourceFactoryBean extends AbstractFactoryBean<HTTPResource> {
      * @param keys the resources
      */
     public void setPublicKeys(@Nullable final List<Resource> keys) {
-        keyResources = keys != null ? keys : Collections.<Resource>emptyList();
+        keyResources = keys != null ? keys : Collections.emptyList();
     }
     
     /**
@@ -154,7 +151,7 @@ public class HTTPResourceFactoryBean extends AbstractFactoryBean<HTTPResource> {
      * @param certs the resources
      */
     public void setCertificates(@Nullable final List<Resource> certs) {
-        certificateResources = certs != null ? certs : Collections.<Resource>emptyList();
+        certificateResources = certs != null ? certs : Collections.emptyList();
     }
     
     /**
@@ -197,8 +194,12 @@ public class HTTPResourceFactoryBean extends AbstractFactoryBean<HTTPResource> {
         for (final Resource f : certificateResources) {
             try(final InputStream is = f.getInputStream()) {
                 final Collection<X509Certificate> raw = X509Support.decodeCertificates(is);
-                for (final X509Certificate x : Collections2.filter(raw, Predicates.notNull())) {
-                    credentials.add(new BasicX509Credential(x));
+                if (raw != null) {
+                    raw.forEach(x -> {
+                        if (x != null) {
+                            credentials.add(new BasicX509Credential(x));
+                        }
+                    });
                 }
             } catch (final CertificateException | IOException e) {
                 log.error("Could not decode certificate from {}", f.getDescription(), e);
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/nameid/NameIDCanonicalizationFlowDescriptor.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/nameid/NameIDCanonicalizationFlowDescriptor.java
index 51d7dd8..daa7af2 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/nameid/NameIDCanonicalizationFlowDescriptor.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/nameid/NameIDCanonicalizationFlowDescriptor.java
@@ -19,17 +19,16 @@ package net.shibboleth.idp.saml.nameid;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.authn.SubjectCanonicalizationFlowDescriptor;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
-
-import com.google.common.base.Predicates;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
  * A class used to describe flow descriptors for {@link net.shibboleth.idp.saml.authn.principal.NameIDPrincipal} and
@@ -39,7 +38,7 @@ import com.google.common.base.Predicates;
 public class NameIDCanonicalizationFlowDescriptor extends SubjectCanonicalizationFlowDescriptor {
 
     /** Store Set of acceptable formats. */
-    @Nonnull private Set<String> formats;
+    @Nonnull @NonnullElements private Set<String> formats;
 
     /** Constructor. */
     public NameIDCanonicalizationFlowDescriptor() {
@@ -51,7 +50,7 @@ public class NameIDCanonicalizationFlowDescriptor extends SubjectCanonicalizatio
      * 
      * @return Returns the formats. Never empty after initialization.
      */
-    @Nonnull @NonnullElements public Collection<String> getFormats() {
+    @Nonnull @NonnullElements @Unmodifiable @NotLive public Collection<String> getFormats() {
         return formats;
     }
 
@@ -60,11 +59,9 @@ public class NameIDCanonicalizationFlowDescriptor extends SubjectCanonicalizatio
      * 
      * @param theFormats The formats to set.
      */
-    public void setFormats(@Nonnull final Collection<String> theFormats) {
-        Constraint.isNotNull(theFormats, "Format collection cannot be null");
-        
-        formats = new HashSet<>(theFormats.size());
-        CollectionSupport.addIf(formats, theFormats, Predicates.notNull());
+    public void setFormats(@Nonnull @NonnullElements final Collection<String> theFormats) {
+        formats = Set.copyOf(StringSupport.normalizeStringCollection(
+                Constraint.isNotNull(theFormats, "Format collection cannot be null")));
     }
     
 }
\ No newline at end of file
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml1/profile/config/BrowserSSOProfileConfiguration.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml1/profile/config/BrowserSSOProfileConfiguration.java
index 45b2222..cf46788 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml1/profile/config/BrowserSSOProfileConfiguration.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml1/profile/config/BrowserSSOProfileConfiguration.java
@@ -18,9 +18,8 @@
 package net.shibboleth.idp.saml.saml1.profile.config;
 
 import java.security.Principal;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
@@ -32,7 +31,6 @@ import javax.annotation.Nullable;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 import net.shibboleth.idp.authn.config.AuthenticationProfileConfiguration;
 import net.shibboleth.idp.saml.authn.principal.AuthenticationMethodPrincipal;
@@ -40,7 +38,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -186,8 +183,12 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<Principal> getDefaultAuthenticationMethods(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(
-                defaultAuthenticationMethodsLookupStrategy.apply(profileRequestContext));
+        final Collection<AuthenticationMethodPrincipal> methods =
+                defaultAuthenticationMethodsLookupStrategy.apply(profileRequestContext);
+        if (methods != null) {
+            return List.copyOf(methods);
+        }
+        return Collections.emptyList();
     }
     
     /**
@@ -199,8 +200,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
             @Nullable @NonnullElements final Collection<AuthenticationMethodPrincipal> methods) {
 
         if (methods != null) {
-            defaultAuthenticationMethodsLookupStrategy =
-                    FunctionSupport.constant(new ArrayList<>(Collections2.filter(methods, Predicates.notNull())));
+            defaultAuthenticationMethodsLookupStrategy = FunctionSupport.constant(List.copyOf(methods));
         } else {
             defaultAuthenticationMethodsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -221,7 +221,12 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public Set<String> getAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableSet(authenticationFlowsLookupStrategy.apply(profileRequestContext));
+        
+        final Set<String> flows = authenticationFlowsLookupStrategy.apply(profileRequestContext);
+        if (flows != null) {
+            return Set.copyOf(flows);
+        }
+        return Collections.emptySet();
     }
 
     /**
@@ -232,7 +237,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
     public void setAuthenticationFlows(@Nullable @NonnullElements final Collection<String> flows) {
         if (flows != null) {
             authenticationFlowsLookupStrategy =
-                    FunctionSupport.constant(new HashSet<>(StringSupport.normalizeStringCollection(flows)));
+                    FunctionSupport.constant(Set.copyOf(StringSupport.normalizeStringCollection(flows)));
         } else {
             authenticationFlowsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -253,7 +258,11 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getPostAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(postAuthenticationFlowsLookupStrategy.apply(profileRequestContext));
+        final Collection<String> flows = postAuthenticationFlowsLookupStrategy.apply(profileRequestContext);
+        if (flows != null) {
+            return List.copyOf(flows);
+        }
+        return Collections.emptyList();
     }
 
     /**
@@ -264,7 +273,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
     public void setPostAuthenticationFlows(@Nullable @NonnullElements final Collection<String> flows) {
         if (flows != null) {
             postAuthenticationFlowsLookupStrategy =
-                    FunctionSupport.constant(new ArrayList<>(StringSupport.normalizeStringCollection(flows)));
+                    FunctionSupport.constant(List.copyOf(StringSupport.normalizeStringCollection(flows)));
         } else {
             postAuthenticationFlowsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -285,7 +294,11 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getNameIDFormatPrecedence(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(nameIDFormatPrecedenceLookupStrategy.apply(profileRequestContext));
+        final Collection<String> formats = nameIDFormatPrecedenceLookupStrategy.apply(profileRequestContext);
+        if (formats != null) {
+            return List.copyOf(formats);
+        }
+        return Collections.emptyList();
     }
 
     /**
@@ -297,7 +310,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML1ArtifactAwarePr
         Constraint.isNotNull(formats, "List of formats cannot be null");
         
         nameIDFormatPrecedenceLookupStrategy =
-                FunctionSupport.constant(new ArrayList<>(StringSupport.normalizeStringCollection(formats)));
+                FunctionSupport.constant(List.copyOf(StringSupport.normalizeStringCollection(formats)));
     }
 
     /**
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java
index 439f645..532b3b2 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/BrowserSSOProfileConfiguration.java
@@ -19,9 +19,8 @@ package net.shibboleth.idp.saml.saml2.profile.config;
 
 import java.security.Principal;
 import java.time.Duration;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
@@ -37,7 +36,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -46,7 +44,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.saml2.core.AuthnContextComparisonTypeEnumeration;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /** Configuration support for SAML 2 Browser SSO. */
 public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwareProfileConfiguration
@@ -503,8 +500,12 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<Principal> getDefaultAuthenticationMethods(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(
-                defaultAuthenticationContextsLookupStrategy.apply(profileRequestContext));
+        final Collection<AuthnContextClassRefPrincipal> methods =
+                defaultAuthenticationContextsLookupStrategy.apply(profileRequestContext);
+        if (methods != null) {
+            return List.copyOf(methods);
+        }
+        return Collections.emptyList();
     }
         
     /**
@@ -515,8 +516,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     public void setDefaultAuthenticationMethods(
             @Nullable @NonnullElements final Collection<AuthnContextClassRefPrincipal> contexts) {
         if (contexts != null) {
-            defaultAuthenticationContextsLookupStrategy =
-                    FunctionSupport.constant(new ArrayList<>(Collections2.filter(contexts, Predicates.notNull())));
+            defaultAuthenticationContextsLookupStrategy = FunctionSupport.constant(List.copyOf(contexts));
         } else {
             defaultAuthenticationContextsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -537,7 +537,11 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public Set<String> getAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableSet(authenticationFlowsLookupStrategy.apply(profileRequestContext));
+        final Set<String> flows = authenticationFlowsLookupStrategy.apply(profileRequestContext);
+        if (flows != null) {
+            return Set.copyOf(flows);
+        }
+        return Collections.emptySet();
     }
 
     /**
@@ -548,7 +552,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     public void setAuthenticationFlows(@Nullable @NonnullElements final Collection<String> flows) {
         if (flows != null) {
             authenticationFlowsLookupStrategy =
-                    FunctionSupport.constant(new HashSet<>(StringSupport.normalizeStringCollection(flows)));
+                    FunctionSupport.constant(Set.copyOf(StringSupport.normalizeStringCollection(flows)));
         } else {
             authenticationFlowsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -569,7 +573,11 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getPostAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(postAuthenticationFlowsLookupStrategy.apply(profileRequestContext));
+        final Collection<String> flows = postAuthenticationFlowsLookupStrategy.apply(profileRequestContext);
+        if (flows != null) {
+            return List.copyOf(flows);
+        }
+        return Collections.emptyList();
     }
 
     /**
@@ -580,7 +588,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     public void setPostAuthenticationFlows(@Nullable @NonnullElements final Collection<String> flows) {
         if (flows != null) {
             postAuthenticationFlowsLookupStrategy =
-                    FunctionSupport.constant(new ArrayList<>(StringSupport.normalizeStringCollection(flows)));
+                    FunctionSupport.constant(List.copyOf(StringSupport.normalizeStringCollection(flows)));
         } else {
             postAuthenticationFlowsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -601,7 +609,12 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getNameIDFormatPrecedence(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(nameIDFormatPrecedenceLookupStrategy.apply(profileRequestContext));
+        
+        final Collection<String> formats = nameIDFormatPrecedenceLookupStrategy.apply(profileRequestContext);
+        if (formats != null) {
+            return List.copyOf(formats);
+        }
+        return Collections.emptyList();
     }
 
     /**
@@ -613,7 +626,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2ArtifactAwarePr
         Constraint.isNotNull(formats, "List of formats cannot be null");
         
         nameIDFormatPrecedenceLookupStrategy =
-                FunctionSupport.constant(new ArrayList<>(StringSupport.normalizeStringCollection(formats)));
+                FunctionSupport.constant(List.copyOf(StringSupport.normalizeStringCollection(formats)));
     }
 
     /**
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/delegation/DelegationContext.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/delegation/DelegationContext.java
index 68e0529..39d2597 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/delegation/DelegationContext.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/delegation/DelegationContext.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.saml.saml2.profile.delegation;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -29,9 +28,6 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.security.credential.Credential;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Context which holds data relevant to the issuance of a delegated {@link org.opensaml.saml.saml2.core.Assertion}.
  */
@@ -41,13 +37,13 @@ public class DelegationContext extends BaseContext {
     private boolean issuingDelegatedAssertion;
     
     /** Status of whether the relying party has requested issuance of a delegated assertion token. */
-    private DelegationRequest delegationRequested;
+    @Nonnull private DelegationRequest delegationRequested;
     
     /**
      * The relying party credentials which will be included in the assertion's
      * {@link org.opensaml.saml.saml2.core.KeyInfoConfirmationDataType}.
      */
-    private List<Credential> subjectConfirmationCredentials;
+    @Nullable @NonnullElements private List<Credential> subjectConfirmationCredentials;
     
     
     /** Constructor. */
@@ -87,7 +83,7 @@ public class DelegationContext extends BaseContext {
      * 
      * @param requested the delegation request status
      */
-    public void setDelegationRequested(final DelegationRequest requested) {
+    public void setDelegationRequested(@Nonnull final DelegationRequest requested) {
         delegationRequested = Constraint.isNotNull(requested, "DelegationRequest was null");
     }
 
@@ -107,12 +103,11 @@ public class DelegationContext extends BaseContext {
      * 
      * @param credentials the confirmation credentials
      */
-    public void setSubjectConfirmationCredentials(
-            @Nullable @NonnullElements final List<Credential> credentials) {
+    public void setSubjectConfirmationCredentials(@Nullable @NonnullElements final List<Credential> credentials) {
         if (credentials == null) {
             subjectConfirmationCredentials = null;
         } else {
-            subjectConfirmationCredentials = new ArrayList<>(Collections2.filter(credentials, Predicates.notNull()));
+            subjectConfirmationCredentials = List.copyOf(credentials);
         }
     }
 
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java
index 99cbe6f..6585974 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.saml.nameid.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -53,9 +52,6 @@ import org.opensaml.saml.saml1.profile.SAML1ObjectSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Generator for {@link NameIdentifier} objects based on {@link IdPAttribute} data.
  */
@@ -120,9 +116,8 @@ public class AttributeSourcedSAML1NameIdentifierGenerator extends AbstractSAML1N
      */
     public void setAttributeSourceIds(@Nonnull @NonnullElements final List<String> ids) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(ids, "Attribute ID collection cannot be null");
 
-        attributeSourceIds = new ArrayList<>(Collections2.filter(ids, Predicates.notNull()));
+        attributeSourceIds = List.copyOf(Constraint.isNotNull(ids, "Attribute ID collection cannot be null"));
     }
 
     /**
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java
index 0389215..fa67d23 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.saml.nameid.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -52,9 +51,6 @@ import org.opensaml.saml.saml2.profile.SAML2ObjectSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Generator for {@link NameID} objects based on {@link IdPAttribute} data.
  */
@@ -119,9 +115,8 @@ public class AttributeSourcedSAML2NameIDGenerator extends AbstractSAML2NameIDGen
      */
     public void setAttributeSourceIds(@Nonnull @NonnullElements final List<String> ids) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(ids, "Attribute ID collection cannot be null");
 
-        attributeSourceIds = new ArrayList<>(Collections2.filter(ids, Predicates.notNull()));
+        attributeSourceIds = List.copyOf(Constraint.isNotNull(ids, "Attribute ID collection cannot be null"));
     }
 
     /**
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java
index 5c4e665..3250f2e 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java
@@ -18,7 +18,6 @@
 package net.shibboleth.idp.saml.nameid.impl;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -56,9 +55,6 @@ import org.opensaml.saml.saml2.profile.AbstractSAML2NameIDGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Generator for "persistent" Format {@link NameID} objects that provides a source/seed ID based on {@link IdPAttribute}
  * data.
@@ -132,9 +128,8 @@ public class PersistentSAML2NameIDGenerator extends AbstractSAML2NameIDGenerator
      */
     public void setAttributeSourceIds(@Nonnull @NonnullElements final List<String> ids) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(ids, "Attribute ID collection cannot be null");
 
-        attributeSourceIds = new ArrayList<>(Collections2.filter(ids, Predicates.notNull()));
+        attributeSourceIds = List.copyOf(Constraint.isNotNull(ids, "Attribute ID collection cannot be null"));
     }
 
     /**
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertion.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertion.java
index 23543d3..eb460ed 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertion.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertion.java
@@ -48,9 +48,6 @@ import org.opensaml.saml.saml1.profile.SAML1ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Action that builds an {@link AttributeStatement} and adds it to an {@link Assertion} returned by a lookup
  * strategy, by default in the {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -142,8 +139,8 @@ public class AddAttributeStatementToAssertion extends BaseAddAttributeStatementT
             if (component == null) {
                 throw new AttributeEncodingException("Attribute transoding service unavailable");
             }
-            for (final IdPAttribute attribute : Collections2.filter(attributes, Predicates.notNull())) {
-                if (!attribute.getValues().isEmpty()) {
+            for (final IdPAttribute attribute : attributes) {
+                if (attribute != null && !attribute.getValues().isEmpty()) {
                     encodeAttribute(component.getComponent(), profileRequestContext, attribute, encodedAttributes);
                 }
             }
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertion.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertion.java
index 8228b64..d331d07 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertion.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertion.java
@@ -48,9 +48,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Action that builds an {@link AttributeStatement} and adds it to an {@link Assertion} returned by a lookup
  * strategy, by default in the {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -144,8 +141,8 @@ public class AddAttributeStatementToAssertion extends BaseAddAttributeStatementT
             if (component == null) {
                 throw new AttributeEncodingException("Attribute transoding service unavailable");
             }
-            for (final IdPAttribute attribute : Collections2.filter(attributes, Predicates.notNull())) {
-                if (!attribute.getValues().isEmpty()) {
+            for (final IdPAttribute attribute : attributes) {
+                if (attributes != null && !attribute.getValues().isEmpty()) {
                     encodeAttribute(component.getComponent(), profileRequestContext, attribute, encodedAttributes);
                 }
             }
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContext.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContext.java
index b1dfbad..0d12dc2 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContext.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContext.java
@@ -21,7 +21,6 @@ import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
@@ -136,8 +135,7 @@ public class ProcessRequestedAuthnContext extends AbstractAuthenticationAction {
         if (trimmed.isEmpty()) {
             ignoredContexts = Collections.emptySet();
         } else {
-            ignoredContexts = new HashSet<>(trimmed.size());
-            ignoredContexts.addAll(trimmed);
+            ignoredContexts = Set.copyOf(trimmed);
         }
     }
     

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


More information about the commits mailing list