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

Scott Cantor cantor.2 at osu.edu
Mon Oct 28 15:39:59 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=33b1e08e3eb06a27d52adc6bc0c0a045381fc7e5

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

commit 33b1e08e3eb06a27d52adc6bc0c0a045381fc7e5
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Oct 28 15:39:53 2019 -0400

    IDP-1516 - Reduce Guava dependence
    
    https://issues.shibboleth.net/jira/browse/IDP-1516
---
 .../idp/attribute/context/AttributeContext.java    |  6 ++--
 .../idp/authn/AbstractCredentialValidator.java     |  5 ++--
 .../idp/authn/AbstractValidationAction.java        | 17 +++++-------
 .../idp/authn/AuthenticationFlowDescriptor.java    |  5 ++--
 .../idp/authn/context/AuthenticationContext.java   |  4 +--
 .../idp/authn/context/CertificateContext.java      |  6 ++--
 .../authn/context/PreferredPrincipalContext.java   |  7 +----
 .../authn/context/RequestedPrincipalContext.java   |  7 +----
 .../idp/authn/duo/BasicDuoIntegration.java         |  5 +---
 .../principal/ProxyAuthenticationPrincipal.java    |  5 ++--
 .../MockAuthenticationProfileConfiguration.java    | 20 +++++---------
 .../DefaultAuthenticationResultSerializer.java     |  8 ++----
 .../authn/impl/PopulateAuthenticationContext.java  | 11 ++------
 .../PopulateSubjectCanonicalizationContext.java    |  8 ++----
 .../idp/authn/impl/RemoteUserAuthServlet.java      |  7 ++---
 .../idp/authn/impl/ValidateCredentials.java        |  6 +---
 .../idp/authn/impl/ValidateUserAgentAddress.java   |  6 ++--
 .../authn/impl/X500SubjectCanonicalization.java    | 10 ++-----
 .../impl/InexactPrincipalEvalPredicateFactory.java |  5 ++--
 .../ProxyAuthenticationPrincipalSerializer.java    |  8 +-----
 .../idp/authn/spnego/impl/KerberosSettings.java    |  8 ++----
 .../DefaultAuthenticationResultSerializerTest.java |  9 +++---
 .../idp/cas/config/impl/LoginConfiguration.java    | 32 +++++++++++++++-------
 .../PrepareTicketValidationResponseAction.java     |  5 +---
 .../consent/storage/impl/CollectionSerializer.java | 11 +++-----
 25 files changed, 81 insertions(+), 140 deletions(-)

diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
index 18b7894..4849e6a 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
@@ -35,8 +35,6 @@ import org.opensaml.messaging.context.BaseContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableMap;
-
 /**
  * A {@link BaseContext} that tracks a set of attributes. Usually the tracked attributes are about a particular user and
  * associated with a particular service request.
@@ -86,7 +84,7 @@ public final class AttributeContext extends BaseContext {
             }
         }
 
-        attributes = ImmutableMap.copyOf(checkedAttributes);
+        attributes = Map.copyOf(checkedAttributes);
     }
     
     
@@ -124,6 +122,6 @@ public final class AttributeContext extends BaseContext {
             }
         }
 
-        unfilteredAttributes = ImmutableMap.copyOf(checkedAttributes);
+        unfilteredAttributes = Map.copyOf(checkedAttributes);
     }
 }
\ No newline at end of file
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java
index 8c687fa..df873bf 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java
@@ -45,7 +45,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * An abstract {@link CredentialValidator} that handles some common behavior.
@@ -105,8 +104,8 @@ public abstract class AbstractCredentialValidator extends AbstractIdentifiedInit
     public void setSupportedPrincipals(@Nullable @NonnullElements final Collection<Principal> principals) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        if (principals != null && !principals.isEmpty()) {
-            final Collection<Principal> copy = Collections2.filter(principals, Predicates.notNull());
+        if (principals != null) {
+            final Collection<Principal> copy = Set.copyOf(principals);
             if (!copy.isEmpty()) {
                 customPrincipals = new Subject();
                 customPrincipals.getPrincipals().addAll(copy);
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
index ca0e856..aca455e 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
@@ -20,7 +20,8 @@ package net.shibboleth.idp.authn;
 import java.security.Principal;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
@@ -55,11 +56,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 
 /**
@@ -168,7 +165,8 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
      * @return classified error message map
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Map<String,Collection<String>> getClassifiedErrors() {
-        return ImmutableMap.copyOf(classifiedMessages);
+        // For now this is using the older wrapper approach to guarding a live map to maintain the map insertion order.
+        return Collections.unmodifiableMap(classifiedMessages);
     }
     
     /**
@@ -180,12 +178,11 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         Constraint.isNotNull(messages, "Map of classified messages cannot be null");
         
-        classifiedMessages = new HashMap<>();
+        classifiedMessages = new LinkedHashMap<>();
         for (final Map.Entry<String, Collection<String>> entry : messages.entrySet()) {
             if (entry.getKey() != null && !entry.getKey().isEmpty()
                     && entry.getValue() != null && !entry.getValue().isEmpty()) {
-                classifiedMessages.put(entry.getKey(),
-                        ImmutableList.copyOf(Collections2.filter(entry.getValue(), Predicates.notNull())));
+                classifiedMessages.put(entry.getKey(), List.copyOf(entry.getValue()));
             }
         }
     }
@@ -254,7 +251,7 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
         getSubject().getPrincipals().clear();
         
         if (principals != null && !principals.isEmpty()) {
-            getSubject().getPrincipals().addAll(Collections2.filter(principals, Predicates.notNull()));
+            getSubject().getPrincipals().addAll(Set.copyOf(principals));
         }
     }
  
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
index 6e5d116..48722a2 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
@@ -48,7 +48,6 @@ import org.opensaml.storage.StorageSerializer;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * A descriptor for an authentication flow.
@@ -286,7 +285,7 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
      * @return a live collection of supported principals
      */
     @Nonnull @NonnullElements public Collection<Principal> getSupportedPrincipals() {
-        return Collections2.filter(supportedPrincipals.getPrincipals(), Predicates.notNull());
+        return supportedPrincipals.getPrincipals();
     }
 
     /**
@@ -300,7 +299,7 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
         Constraint.isNotNull(principals, "Principal collection cannot be null.");
 
         supportedPrincipals.getPrincipals().clear();
-        supportedPrincipals.getPrincipals().addAll(Collections2.filter(principals, Predicates.notNull()));
+        supportedPrincipals.getPrincipals().addAll(Set.copyOf(principals));
     }
 
     /**
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
index 3903eab..19c209c 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
@@ -47,8 +47,6 @@ import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * A context representing the state of an authentication attempt, this is the primary
@@ -653,7 +651,7 @@ public final class AuthenticationContext extends BaseContext {
         final Constructor<? extends Principal> ctor = claz.getConstructor(String.class);
         
         final List<Principal> prins = new ArrayList<>(principals.size());
-        for (final String prin : Collections2.filter(principals, Predicates.notNull())) {
+        for (final String prin : principals) {
             prins.add(ctor.newInstance(prin));
         }
         
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/CertificateContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/CertificateContext.java
index 5a8fd27..b4f0890 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/CertificateContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/CertificateContext.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.authn.context;
 import java.security.cert.Certificate;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -30,9 +31,6 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.messaging.context.BaseContext;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Context that carries a {@link Certificate} to be validated.
  * 
@@ -93,7 +91,7 @@ public final class CertificateContext extends BaseContext {
         Constraint.isNotNull(certs, "Intermediate certificate collection cannot be null");
         
         intermediates.clear();
-        intermediates.addAll(Collections2.filter(certs, Predicates.notNull()));
+        intermediates.addAll(List.copyOf(certs));
         
         return this;
     }
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/PreferredPrincipalContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/PreferredPrincipalContext.java
index 2632475..07fa0f8 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/PreferredPrincipalContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/PreferredPrincipalContext.java
@@ -32,10 +32,6 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.messaging.context.BaseContext;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * A context that holds information about an authentication request's
  * preference for a specific custom {@link Principal}.
@@ -78,9 +74,8 @@ public final class PreferredPrincipalContext extends BaseContext {
      */
     @Nonnull public PreferredPrincipalContext setPreferredPrincipals(
             @Nonnull @NonnullElements final List<Principal> principals) {
-        Constraint.isNotNull(principals, "Principal list cannot be null");
         
-        preferredPrincipals = ImmutableList.copyOf(Collections2.filter(principals, Predicates.notNull()));
+        preferredPrincipals = List.copyOf(Constraint.isNotNull(principals, "Principal list cannot be null"));
         return this;
     }
         
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
index c7ba481..f9c6158 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
@@ -40,10 +40,6 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.opensaml.messaging.context.BaseContext;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * A context that holds information about an authentication request's
  * requirement for a specific custom {@link Principal}.
@@ -151,9 +147,8 @@ public final class RequestedPrincipalContext extends BaseContext {
      */
     @Nonnull public RequestedPrincipalContext setRequestedPrincipals(
             @Nonnull @NonnullElements final List<Principal> principals) {
-        Constraint.isNotNull(principals, "Principal list cannot be null");
         
-        requestedPrincipals = ImmutableList.copyOf(Collections2.filter(principals, Predicates.notNull()));
+        requestedPrincipals = List.copyOf(Constraint.isNotNull(principals, "Principal list cannot be null"));
         return this;
     }
     
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/duo/BasicDuoIntegration.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/duo/BasicDuoIntegration.java
index 5c3c41b..f18014a 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/duo/BasicDuoIntegration.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/duo/BasicDuoIntegration.java
@@ -35,9 +35,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.security.auth.Subject;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Wrapper for use of Duo.
  * 
@@ -151,7 +148,7 @@ public class BasicDuoIntegration extends AbstractInitializableComponent implemen
         supportedPrincipals.getPrincipals().clear();
         
         if (principals != null && !principals.isEmpty()) {
-            supportedPrincipals.getPrincipals().addAll(Collections2.filter(principals, Predicates.notNull()));
+            supportedPrincipals.getPrincipals().addAll(Set.copyOf(principals));
         }
     }
 
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/ProxyAuthenticationPrincipal.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/ProxyAuthenticationPrincipal.java
index b26e4fa..1a50756 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/ProxyAuthenticationPrincipal.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/ProxyAuthenticationPrincipal.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.authn.principal;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 
@@ -29,8 +30,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * Principal that wraps a set of proxied authentication authorities.
@@ -55,7 +54,7 @@ public class ProxyAuthenticationPrincipal implements Principal {
     public ProxyAuthenticationPrincipal(@Nonnull @NonnullElements final Collection<String> proxiedAuthorities) {
         Constraint.isNotNull(proxiedAuthorities, "Proxied authority collection cannot be null");
         
-        authorities = new ArrayList<>(Collections2.filter(proxiedAuthorities, Predicates.notNull()));
+        authorities = new ArrayList<>(List.copyOf(proxiedAuthorities));
     }
 
     /** {@inheritDoc} */
diff --git a/idp-authn-api/src/test/java/net/shibboleth/idp/authn/config/MockAuthenticationProfileConfiguration.java b/idp-authn-api/src/test/java/net/shibboleth/idp/authn/config/MockAuthenticationProfileConfiguration.java
index d3109db..06c6361 100644
--- a/idp-authn-api/src/test/java/net/shibboleth/idp/authn/config/MockAuthenticationProfileConfiguration.java
+++ b/idp-authn-api/src/test/java/net/shibboleth/idp/authn/config/MockAuthenticationProfileConfiguration.java
@@ -18,10 +18,8 @@
 package net.shibboleth.idp.authn.config;
 
 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.Predicate;
@@ -32,8 +30,6 @@ import javax.annotation.Nullable;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
 
 import net.shibboleth.idp.authn.config.AuthenticationProfileConfiguration;
 import net.shibboleth.idp.profile.config.AbstractProfileConfiguration;
@@ -72,7 +68,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractProfileConfi
      */
     public MockAuthenticationProfileConfiguration(@Nonnull @NotEmpty final String id,
             @Nonnull @NonnullElements final List<Principal> methods) {
-        this(id, methods, Collections.<String>emptySet(), Collections.<String>emptyList());
+        this(id, methods, Collections.emptySet(), Collections.emptyList());
     }
 
     /**
@@ -97,7 +93,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractProfileConfi
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<Principal> getDefaultAuthenticationMethods(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return ImmutableList.copyOf(defaultAuthenticationMethods);
+        return defaultAuthenticationMethods;
     }
     
     /**
@@ -106,15 +102,13 @@ public class MockAuthenticationProfileConfiguration extends AbstractProfileConfi
      * @param methods   default authentication methods to use
      */
     public void setDefaultAuthenticationMethods(@Nonnull @NonnullElements final List<Principal> methods) {
-        Constraint.isNotNull(methods, "List of methods cannot be null");
-        
-        defaultAuthenticationMethods = new ArrayList<>(Collections2.filter(methods, Predicates.notNull()));
+        defaultAuthenticationMethods = List.copyOf(Constraint.isNotNull(methods, "List of methods cannot be null"));
     }
     
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<String> getNameIDFormatPrecedence(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return ImmutableList.copyOf(nameIDFormatPrecedence);
+        return nameIDFormatPrecedence;
     }
 
     /**
@@ -125,7 +119,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractProfileConfi
     public void setNameIDFormatPrecedence(@Nonnull @NonnullElements final List<String> formats) {
         Constraint.isNotNull(formats, "List of formats cannot be null");
         
-        nameIDFormatPrecedence = new ArrayList<>(StringSupport.normalizeStringCollection(formats));
+        nameIDFormatPrecedence = List.copyOf(StringSupport.normalizeStringCollection(formats));
     }
 
     /** {@inheritDoc} */
@@ -142,7 +136,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractProfileConfi
     public void setAuthenticationFlows(@Nonnull @NonnullElements final Collection<String> flows) {
         Constraint.isNotNull(flows, "Collection of flows cannot be null");
         
-        authenticationFlows = new HashSet<>(StringSupport.normalizeStringCollection(flows));
+        authenticationFlows = Set.copyOf(StringSupport.normalizeStringCollection(flows));
     }
 
     /** {@inheritDoc} */
@@ -159,7 +153,7 @@ public class MockAuthenticationProfileConfiguration extends AbstractProfileConfi
     public void setPostAuthenticationFlows(@Nonnull @NonnullElements final Collection<String> flows) {
         Constraint.isNotNull(flows, "Collection of flows cannot be null");
         
-        postAuthenticationFlows = new ArrayList<>(StringSupport.normalizeStringCollection(flows));
+        postAuthenticationFlows = List.copyOf(StringSupport.normalizeStringCollection(flows));
     }
 
     /** {@inheritDoc} */
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializer.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializer.java
index 99cbbab..138c74f 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializer.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializer.java
@@ -22,10 +22,10 @@ import java.io.StringReader;
 import java.io.StringWriter;
 import java.security.Principal;
 import java.time.Instant;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
@@ -52,14 +52,12 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.storage.StorageSerializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Handles serialization of results, delegating handling of {@link Principal} objects to one or more
  * {@link PrincipalSerializer} plugins.
@@ -122,7 +120,7 @@ public class DefaultAuthenticationResultSerializer extends AbstractInitializable
             @Nonnull @NonnullElements final Collection<PrincipalSerializer<String>> serializers) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        principalSerializers = new ArrayList<>(Collections2.filter(serializers, Predicates.notNull()));
+        principalSerializers = List.copyOf(Constraint.isNotNull(serializers, "Serializers cannot be null"));
     }
 
     /**
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContext.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContext.java
index 4208bb6..4a8edef 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContext.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContext.java
@@ -17,9 +17,9 @@
 
 package net.shibboleth.idp.authn.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;
@@ -39,9 +39,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * An action that populates an {@link AuthenticationContext} with the {@link AuthenticationFlowDescriptor}
  * objects configured into the IdP, potential flows filtered by flow IDs from a lookup function.
@@ -89,9 +86,8 @@ public class PopulateAuthenticationContext extends AbstractAuthenticationAction
      */
     public void setAvailableFlows(@Nonnull @NonnullElements final Collection<AuthenticationFlowDescriptor> 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"));
     }
 
     /**
@@ -103,9 +99,8 @@ public class PopulateAuthenticationContext extends AbstractAuthenticationAction
      */
     public void setPotentialFlows(@Nonnull @NonnullElements final Collection<AuthenticationFlowDescriptor> flows) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(flows, "Flow collection cannot be null");
         
-        potentialFlows = new ArrayList<>(Collections2.filter(flows, Predicates.notNull()));
+        potentialFlows = List.copyOf(Constraint.isNotNull(flows, "Flow collection cannot be null"));
     }
     
     /**
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContext.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContext.java
index 6acf17c..1d3c93d 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContext.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContext.java
@@ -17,9 +17,9 @@
 
 package net.shibboleth.idp.authn.impl;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 
@@ -34,9 +34,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * An action that populates a {@link SubjectCanonicalizationContext} with the
  * {@link SubjectCanonicalizationFlowDescriptor} objects configured into the IdP.
@@ -66,9 +63,8 @@ public class PopulateSubjectCanonicalizationContext extends AbstractSubjectCanon
     public void setAvailableFlows(
             @Nonnull @NonnullElements final Collection<SubjectCanonicalizationFlowDescriptor> 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"));
     }
         
     /** {@inheritDoc} */
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/RemoteUserAuthServlet.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/RemoteUserAuthServlet.java
index 8ef675a..54966f0 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/RemoteUserAuthServlet.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/RemoteUserAuthServlet.java
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -47,9 +48,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
 
 /**
  * Extracts authentication information from the request and returns it via the IdP's external authentication
@@ -129,7 +128,7 @@ public class RemoteUserAuthServlet extends HttpServlet {
      * @param attributes    list of request attributes to check
      */
     public void setCheckAttributes(@Nonnull @NonnullElements final Collection<String> attributes) {
-        checkAttributes = new ArrayList<>(Collections2.filter(attributes, Predicates.notNull()));
+        checkAttributes = List.copyOf(attributes);
     }
 
     /**
@@ -138,7 +137,7 @@ public class RemoteUserAuthServlet extends HttpServlet {
      * @param headers list of request headers to check
      */
     public void setCheckHeaders(@Nonnull @NonnullElements final Collection<String> headers) {
-        checkHeaders = new ArrayList<>(Collections2.filter(headers, Predicates.notNull()));
+        checkHeaders = List.copyOf(headers);
     }
     
     /**
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateCredentials.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateCredentials.java
index 5046b42..5701e5a 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateCredentials.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateCredentials.java
@@ -44,9 +44,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * An action that processes a list of {@link CredentialValidator} objects to produce an {@link AuthenticationResult}.
  *  
@@ -111,9 +108,8 @@ public class ValidateCredentials extends AbstractValidationAction implements War
      */
     public void setValidators(@Nonnull @NonnullElements final List<CredentialValidator> validators) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(validators, "Validators list cannot be null");
         
-        credentialValidators = new ArrayList<>(Collections2.filter(validators, Predicates.notNull()));
+        credentialValidators = List.copyOf(Constraint.isNotNull(validators, "Validators list cannot be null"));
     }
     
     /**
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddress.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddress.java
index 18e43be..e71d332 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddress.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddress.java
@@ -18,10 +18,10 @@
 package net.shibboleth.idp.authn.impl;
 
 import java.net.InetAddress;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -46,9 +46,7 @@ import net.shibboleth.utilities.java.support.net.IPRange;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
 
 /**
  * An action that ensures that a user-agent address found within a {@link UserAgentContext}
@@ -97,7 +95,7 @@ public class ValidateUserAgentAddress extends AbstractValidationAction {
         mappings = new HashMap<>(newMappings.size());
         for (final Map.Entry<String,Collection<IPRange>> e : newMappings.entrySet()) {
             if (!Strings.isNullOrEmpty(e.getKey())) {
-                mappings.put(e.getKey(), new ArrayList<>(Collections2.filter(e.getValue(), Predicates.notNull())));
+                mappings.put(e.getKey(), List.copyOf(e.getValue()));
             }
         }
     }
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java
index 6a2d171..71761f4 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java
@@ -18,7 +18,6 @@
 package net.shibboleth.idp.authn.impl;
 
 import java.security.cert.X509Certificate;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -48,8 +47,6 @@ import org.opensaml.security.x509.X509Support;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * An action that operates on a {@link SubjectCanonicalizationContext} child of the current
@@ -106,9 +103,8 @@ public class X500SubjectCanonicalization extends AbstractSubjectCanonicalization
      */
     public void setSubjectAltNameTypes(@Nonnull @NonnullElements final List<Integer> types) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(types, "Type list cannot be null");
         
-        subjectAltNameTypes = new ArrayList<>(Collections2.filter(types, Predicates.notNull()));
+        subjectAltNameTypes = List.copyOf(Constraint.isNotNull(types, "Type list cannot be null"));
     }
 
     /**
@@ -118,9 +114,9 @@ public class X500SubjectCanonicalization extends AbstractSubjectCanonicalization
      */
     public void setObjectIds(@Nonnull @NonnullElements final List<String> ids) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(ids, "OID list cannot be null");
         
-        objectIds = new ArrayList<>(StringSupport.normalizeStringCollection(ids));
+        objectIds = List.copyOf(StringSupport.normalizeStringCollection(
+                Constraint.isNotNull(ids, "OID list cannot be null")));
     }
     
     /** {@inheritDoc} */
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/InexactPrincipalEvalPredicateFactory.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/InexactPrincipalEvalPredicateFactory.java
index 5eece19..39c527d 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/InexactPrincipalEvalPredicateFactory.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/InexactPrincipalEvalPredicateFactory.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.authn.principal.impl;
 
 import java.security.Principal;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -32,9 +33,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Live;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
 
@@ -83,7 +82,7 @@ public class InexactPrincipalEvalPredicateFactory implements PrincipalEvalPredic
         
         for (final Map.Entry<String,Collection<String>> e : rules.entrySet()) {
             if (!Strings.isNullOrEmpty(e.getKey()) && e.getValue() != null) {
-                matchingRules.putAll(e.getKey(), Collections2.filter(e.getValue(), Predicates.notNull()));
+                matchingRules.putAll(e.getKey(), List.copyOf(e.getValue()));
             }
         }
     }
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/ProxyAuthenticationPrincipalSerializer.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/ProxyAuthenticationPrincipalSerializer.java
index 3bdb795..c96bb55 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/ProxyAuthenticationPrincipalSerializer.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/ProxyAuthenticationPrincipalSerializer.java
@@ -43,9 +43,6 @@ import javax.json.stream.JsonGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.idp.authn.principal.AbstractPrincipalSerializer;
 import net.shibboleth.idp.authn.principal.ProxyAuthenticationPrincipal;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -83,10 +80,7 @@ public class ProxyAuthenticationPrincipalSerializer extends AbstractPrincipalSer
     @Nonnull @NotEmpty public String serialize(@Nonnull final Principal principal) throws IOException {
         
         final JsonArrayBuilder arrayBuilder = getJsonArrayBuilder();
-        for (final String aa : Collections2.filter(((ProxyAuthenticationPrincipal) principal).getAuthorities(),
-                Predicates.notNull())) {
-            arrayBuilder.add(aa);
-        }
+        ((ProxyAuthenticationPrincipal) principal).getAuthorities().forEach(arrayBuilder::add);
 
         final StringWriter sink = new StringWriter(32);
         
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/spnego/impl/KerberosSettings.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/spnego/impl/KerberosSettings.java
index c865935..b2d1dbb 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/spnego/impl/KerberosSettings.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/spnego/impl/KerberosSettings.java
@@ -17,15 +17,12 @@
 
 package net.shibboleth.idp.authn.spnego.impl;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -105,9 +102,8 @@ public class KerberosSettings extends AbstractInitializableComponent {
      */
     public void setRealms(@Nonnull @NonnullElements final Collection<KerberosRealmSettings> realms) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(realms, "The realms collection cannot be null");
         
-        realmSettings = new ArrayList<>(Collections2.filter(realms, Predicates.notNull()));
+        realmSettings = List.copyOf(Constraint.isNotNull(realms, "The realms collection cannot be null"));
     }
 
     /**
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
index b50ac45..a69bb96 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
@@ -37,7 +37,6 @@ import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.principal.AuthenticationResultPrincipal;
 import net.shibboleth.idp.authn.principal.IdPAttributePrincipal;
 import net.shibboleth.idp.authn.principal.PasswordPrincipal;
-import net.shibboleth.idp.authn.principal.PrincipalSerializer;
 import net.shibboleth.idp.authn.principal.ProxyAuthenticationPrincipal;
 import net.shibboleth.idp.authn.principal.TestPrincipal;
 import net.shibboleth.idp.authn.principal.UsernamePrincipal;
@@ -164,7 +163,7 @@ public class DefaultAuthenticationResultSerializerTest {
         final PasswordPrincipalSerializer pwSerializer = new PasswordPrincipalSerializer();
         pwSerializer.setDataSealer(sealer);
         pwSerializer.initialize();
-        serializer.setPrincipalSerializers(Collections.<PrincipalSerializer<String>>singletonList(pwSerializer));
+        serializer.setPrincipalSerializers(Collections.singletonList(pwSerializer));
         serializer.initialize();
         
         final AuthenticationResult result = createResult("test", new Subject());
@@ -205,7 +204,7 @@ public class DefaultAuthenticationResultSerializerTest {
 
     @Test public void testLdap() throws Exception {
         final LDAPPrincipalSerializer lpSerializer = new LDAPPrincipalSerializer();
-        serializer.setPrincipalSerializers(Collections.<PrincipalSerializer<String>>singletonList(lpSerializer));
+        serializer.setPrincipalSerializers(Collections.singletonList(lpSerializer));
         serializer.initialize();
         
         final AuthenticationResult result = createResult("test", new Subject());
@@ -238,7 +237,7 @@ public class DefaultAuthenticationResultSerializerTest {
 
     @Test public void testIdPAttribute() throws Exception {
         final IdPAttributePrincipalSerializer attrSerializer = new IdPAttributePrincipalSerializer();
-        serializer.setPrincipalSerializers(Collections.<PrincipalSerializer<String>>singletonList(attrSerializer));
+        serializer.setPrincipalSerializers(Collections.singletonList(attrSerializer));
         serializer.initialize();
         
         final AuthenticationResult result = createResult("test", new Subject());
@@ -271,7 +270,7 @@ public class DefaultAuthenticationResultSerializerTest {
 
     @Test public void testProxyAuthentication() throws Exception {
         final ProxyAuthenticationPrincipalSerializer proxySerializer = new ProxyAuthenticationPrincipalSerializer();
-        serializer.setPrincipalSerializers(Collections.<PrincipalSerializer<String>>singletonList(proxySerializer));
+        serializer.setPrincipalSerializers(Collections.singletonList(proxySerializer));
         serializer.initialize();
         
         final AuthenticationResult result = createResult("test", new Subject());
diff --git a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/config/impl/LoginConfiguration.java b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/config/impl/LoginConfiguration.java
index f51c5c3..6dbba81 100644
--- a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/config/impl/LoginConfiguration.java
+++ b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/config/impl/LoginConfiguration.java
@@ -20,7 +20,7 @@ package net.shibboleth.idp.cas.config.impl;
 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 +32,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.AuthnContextClassRefPrincipal;
@@ -93,8 +92,12 @@ public class LoginConfiguration extends AbstractProtocolConfiguration
     /** {@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();
     }
         
     /**
@@ -105,8 +108,7 @@ public class LoginConfiguration extends AbstractProtocolConfiguration
     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);
         }
@@ -125,7 +127,12 @@ public class LoginConfiguration extends AbstractProtocolConfiguration
     /** {@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();
     }
 
     /**
@@ -136,7 +143,7 @@ public class LoginConfiguration extends AbstractProtocolConfiguration
     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);
         }
@@ -185,7 +192,12 @@ public class LoginConfiguration extends AbstractProtocolConfiguration
     /** {@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();
     }
 
     /**
@@ -197,7 +209,7 @@ public class LoginConfiguration extends AbstractProtocolConfiguration
         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-cas-impl/src/main/java/net/shibboleth/idp/cas/flow/impl/PrepareTicketValidationResponseAction.java b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/flow/impl/PrepareTicketValidationResponseAction.java
index 2822a8b..7f7b1db 100644
--- a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/flow/impl/PrepareTicketValidationResponseAction.java
+++ b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/flow/impl/PrepareTicketValidationResponseAction.java
@@ -61,9 +61,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Prepares {@link TicketValidationResponse} for use in CAS protocol response views. Possible outcomes:
  * <ul>
@@ -215,7 +212,7 @@ public class PrepareTicketValidationResponseAction extends
                 ActionSupport.buildEvent(profileRequestContext, IdPEventIds.UNABLE_ENCODE_ATTRIBUTE);
                 return;
             }
-            for (final IdPAttribute attribute : Collections2.filter(inputAttributes, Predicates.notNull())) {
+            for (final IdPAttribute attribute : inputAttributes) {
                 encodeAttribute(component.getComponent(), profileRequestContext, attribute, encodedAttributes);
             }
         } finally {
diff --git a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/storage/impl/CollectionSerializer.java b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/storage/impl/CollectionSerializer.java
index 724a30a..887c1f4 100644
--- a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/storage/impl/CollectionSerializer.java
+++ b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/storage/impl/CollectionSerializer.java
@@ -44,9 +44,6 @@ import org.opensaml.storage.StorageSerializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Serializes a {@link Collection} of strings. <code>Null</code> elements and non-string values are ignored.
  */
@@ -74,14 +71,14 @@ public class CollectionSerializer extends AbstractInitializableComponent impleme
     @Nonnull @NotEmpty public String serialize(@Nonnull final Collection<String> instance) throws IOException {
         Constraint.isNotNull(instance, "Storage indexes cannot be null");
 
-        final Collection<String> filteredInstance = Collections2.filter(instance, Predicates.notNull());
-
         final StringWriter sink = new StringWriter(128);
         
         try (final JsonGenerator gen = generatorFactory.createGenerator(sink)) {
             gen.writeStartArray();
-            for (final String element : filteredInstance) {
-                gen.write(element);
+            for (final String element : instance) {
+                if (element != null) {
+                    gen.write(element);
+                }
             }
             gen.writeEnd();
         }

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


More information about the commits mailing list