[java-opensaml] branch master updated: Remove most uses of Guava null filtering.

Scott Cantor cantor.2 at osu.edu
Fri Oct 25 13:55:06 EDT 2019


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

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

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

The following commit(s) were added to refs/heads/master by this push:
       new  95ce0fb   Remove most uses of Guava null filtering.
95ce0fb is described below

commit 95ce0fb5a1bb26cfcbfe0b283c22e1c502db93da
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Oct 25 13:54:24 2019 -0400

    Remove most uses of Guava null filtering.
---
 .../core/metrics/FilteredMetricRegistry.java       |  8 +----
 .../handler/impl/BasicMessageHandlerChain.java     | 10 ++----
 .../impl/MessageHandlerErrorStrategyAdapter.java   |  9 ++----
 .../opensaml/profile/logic/IPRangePredicate.java   |  6 ++--
 .../profile/logic/EntityAttributesPredicate.java   | 32 +++++--------------
 .../resolver/ChainingMetadataResolver.java         |  9 ++----
 .../resolver/filter/MetadataFilterChain.java       |  5 +--
 .../impl/ChainingNameIdentifierGenerator.java      |  7 ++---
 .../resolver/filter/impl/AlgorithmFilter.java      |  5 ++-
 .../filter/impl/EntityAttributesFilter.java        |  4 +--
 .../filter/impl/NodeProcessingMetadataFilter.java  | 10 ++----
 .../impl/AbstractBatchMetadataResolver.java        |  9 ++----
 .../impl/AbstractDynamicMetadataResolver.java      | 11 +++----
 .../MetadataQueryProtocolRequestURLBuilder.java    | 10 +++---
 .../index/impl/SAMLArtifactMetadataIndex.java      | 16 ++++------
 .../saml1/profile/impl/AddStatusToResponse.java    |  8 ++---
 .../impl/AddSubjectConfirmationToSubjects.java     |  7 ++---
 .../saml2/profile/impl/AddStatusToResponse.java    |  8 ++---
 ...MetadataQueryProtocolRequestURLBuilderTest.java |  3 --
 .../HttpClientSecurityConfigurationCriterion.java  | 16 +++-------
 .../security/x509/tls/CertificateNameOptions.java  | 15 +++------
 .../ClientTLSValidationConfigurationCriterion.java | 19 +++---------
 .../impl/AbstractChainingCredentialResolver.java   | 12 ++------
 .../security/trust/impl/ChainingTrustEngine.java   | 13 +++-----
 .../impl/BasicX509CredentialNameEvaluator.java     | 10 ++----
 .../trust/impl/ChainingTrustEngineTest.java        | 12 +-------
 .../SOAPClientPipelineNameMappingFunction.java     |  9 +-----
 .../SOAPClientPipelineNameMappingPredicate.java    |  9 +-----
 .../java/org/opensaml/soap/util/SOAPSupport.java   | 11 +++----
 .../impl/client/LoadClientStorageServices.java     |  5 ++-
 .../client/PopulateClientStorageLoadContext.java   |  7 ++---
 .../client/PopulateClientStorageSaveContext.java   | 14 +++------
 .../SaveCookieBackedClientStorageServices.java     |  5 ++-
 .../DecryptionConfigurationCriterion.java          | 18 +++--------
 .../EncryptionConfigurationCriterion.java          | 18 +++--------
 .../SignatureSigningConfigurationCriterion.java    | 18 +++--------
 .../SignatureValidationConfigurationCriterion.java | 18 +++--------
 .../support/ChainingEncryptedKeyResolver.java      | 22 ++++++-------
 .../xmlsec/impl/BasicEncryptionConfiguration.java  | 36 ++++++++++------------
 .../impl/BasicSignatureSigningConfiguration.java   | 29 ++++++++---------
 .../opensaml/xmlsec/impl/BlacklistPredicate.java   | 11 ++-----
 .../opensaml/xmlsec/impl/WhitelistPredicate.java   |  9 ++----
 .../impl/ChainingSignaturePrevalidator.java        |  7 +----
 .../support/impl/ChainingSignatureTrustEngine.java | 14 +++------
 .../impl/BasicEncryptionConfigurationTest.java     |  6 ++--
 .../BasicSignatureSigningConfigurationTest.java    |  2 +-
 .../xmlsec/impl/BlacklistPredicateTest.java        | 17 ----------
 .../WhitelistBlacklistConfigurationCriterion.java  | 18 +++--------
 .../xmlsec/impl/WhitelistPredicateTest.java        | 17 ----------
 .../impl/ChainingSignatureTrustEngineTest.java     | 20 ------------
 50 files changed, 167 insertions(+), 447 deletions(-)

diff --git a/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java b/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java
index 9f7af5f..7da8151 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java
@@ -34,8 +34,6 @@ import com.codahale.metrics.MetricFilter;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.MetricSet;
 import com.codahale.metrics.Timer;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -125,11 +123,7 @@ public class FilteredMetricRegistry extends MetricRegistry {
      */
     public void registerMultiple(@Nonnull @NonnullElements final Collection<MetricSet> metricSets)
             throws IllegalArgumentException {
-        Constraint.isNotNull(metricSets, "Collection cannot be null");
-        
-        for (final MetricSet set : Collections2.filter(metricSets, Predicates.notNull())) {
-            registerAll(set);
-        }
+        Constraint.isNotNull(metricSets, "Collection cannot be null").forEach(m -> registerAll(m));
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java
index 47f3b78..ad23f89 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.messaging.handler.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -33,9 +32,6 @@ import org.opensaml.messaging.handler.MessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerChain;
 import org.opensaml.messaging.handler.MessageHandlerException;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * A basic implementation of {@link MessageHandlerChain}.
  */
@@ -70,9 +66,7 @@ public class BasicMessageHandlerChain extends AbstractMessageHandler
      */
     public void setHandlers(@Nullable @NonnullElements final List<MessageHandler> handlers) {
         if (handlers != null) {
-            final ArrayList<MessageHandler> newMembers = new ArrayList<>();
-            newMembers.addAll(Collections2.filter(handlers, Predicates.notNull()));
-            members = newMembers;
+            members = List.copyOf(handlers);
         } else {
             members = Collections.emptyList();
         }
@@ -81,7 +75,7 @@ public class BasicMessageHandlerChain extends AbstractMessageHandler
     /** {@inheritDoc} */
     public void doInvoke(@Nonnull final MessageContext msgContext) throws MessageHandlerException {
         if (members != null) {
-            for (final MessageHandler handler: members) {
+            for (final MessageHandler handler : members) {
                 handler.invoke(msgContext);
             }
         }
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
index bd61313..c03fdff 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.messaging.handler.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -33,9 +32,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * A {@link MessageHandler} which wraps and invokes another handler, catches any {@link Throwable} which is 
  * thrown by the wrapped handler's {@link MessageHandler#invoke(MessageContext)}, and applies
@@ -87,9 +83,8 @@ public class MessageHandlerErrorStrategyAdapter extends AbstractMessageHandler {
     public MessageHandlerErrorStrategyAdapter(@Nonnull final MessageHandler messageHandler, 
             @Nonnull @NonnullElements final List<TypedMessageErrorHandler> typedErrorHandlers) {
         wrappedHandler = Constraint.isNotNull(messageHandler, "Wrapped MessageHandler cannot be null");
-        errorHandlers = new ArrayList<>(Collections2.filter(
-                Constraint.isNotNull(typedErrorHandlers, "List of TypedMessageErroHandlers cannot be null"), 
-                Predicates.notNull()));
+        errorHandlers = List.copyOf(
+                Constraint.isNotNull(typedErrorHandlers, "List of TypedMessageErroHandlers cannot be null"));
         
         rethrowIfHandled = false;
         rethrowIfNotHandled = true;
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
index baa72db..bfbaf6c 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
@@ -17,9 +17,9 @@
 
 package org.opensaml.profile.logic;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -27,8 +27,6 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.opensaml.messaging.context.BaseContext;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 import com.google.common.net.InetAddresses;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -62,7 +60,7 @@ public class IPRangePredicate implements Predicate<BaseContext> {
     public void setRanges(@Nonnull @NonnullElements final Collection<IPRange> ranges) {
         Constraint.isNotNull(ranges, "Address range collection cannot be null");
         
-        addressRanges = new ArrayList<>(Collections2.filter(ranges, Predicates.notNull()));
+        addressRanges = List.copyOf(ranges);
     }
     
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java
index 0250204..d18a0d8 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java
@@ -43,9 +43,6 @@ import org.opensaml.saml.saml2.metadata.Extensions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
@@ -84,9 +81,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
     public EntityAttributesPredicate(
             @Nonnull @NonnullElements @ParameterName(name="candidates") final Collection<Candidate> candidates) {
         
-        Constraint.isNotNull(candidates, "Attribute collection cannot be null");
-        
-        candidateSet = new ArrayList<>(Collections2.filter(candidates, Predicates.notNull()));
+        candidateSet = List.copyOf(Constraint.isNotNull(candidates, "Candidate collection cannot be null"));
         
         trimTags = true;
         matchAll = false;
@@ -102,9 +97,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
             @Nonnull @NonnullElements @ParameterName(name="candidates") final Collection<Candidate> candidates,
             @ParameterName(name="trim") final boolean trim) {
         
-        Constraint.isNotNull(candidates, "Attribute collection cannot be null");
-        
-        candidateSet = new ArrayList<>(Collections2.filter(candidates, Predicates.notNull()));
+        candidateSet = List.copyOf(Constraint.isNotNull(candidates, "Candidate collection cannot be null"));
         
         trimTags = trim;
         matchAll = false;
@@ -122,9 +115,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
             @ParameterName(name="trim") final boolean trim,
             @ParameterName(name="all") final boolean all) {
         
-        Constraint.isNotNull(candidates, "Attribute collection cannot be null");
-        
-        candidateSet = new ArrayList<>(Collections2.filter(candidates, Predicates.notNull()));
+        candidateSet = List.copyOf(Constraint.isNotNull(candidates, "Candidate collection cannot be null"));
         
         trimTags = trim;
         matchAll = all;
@@ -154,7 +145,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
      * @return  the candidate criteria
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Collection<Candidate> getCandidates() {
-        return ImmutableList.copyOf(candidateSet);
+        return candidateSet;
     }
 
 // Checkstyle: CyclomaticComplexity OFF
@@ -289,7 +280,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
          * @return the exact values to match
          */
         @Nonnull @NonnullElements @Unmodifiable @NotLive public List<String> getValues() {
-            return ImmutableList.copyOf(values);
+            return values;
         }
 
         /**
@@ -298,13 +289,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
          * @param vals the exact values to match
          */
         public void setValues(@Nonnull @NonnullElements final Collection<String> vals) {
-            Constraint.isNotNull(vals, "Values collection cannot be null");
-            values = new ArrayList<>(vals.size());
-            for (final String value : vals) {
-                if (value != null) {
-                    values.add(value);
-                }
-            }
+            values = List.copyOf(Constraint.isNotNull(vals, "Values collection cannot be null"));
         }
 
         /**
@@ -313,7 +298,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
          * @return the regular expressions to match.
          */
         @Nonnull @NonnullElements @Unmodifiable @NotLive public List<Pattern> getRegexps() {
-            return ImmutableList.copyOf(regexps);
+            return regexps;
         }
 
         /**
@@ -322,8 +307,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
          * @param exps the regular expressions to match
          */
         public void setRegexps(@Nonnull @NonnullElements final Collection<Pattern> exps) {
-            Constraint.isNotNull(exps, "Regular expressions collection cannot be null");
-            regexps = new ArrayList<>(Collections2.filter(exps, Predicates.notNull()));
+            regexps = List.copyOf(Constraint.isNotNull(exps, "Regular expressions collection cannot be null"));
         }
     }
     
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
index 6d32b7a..0c2e75e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
@@ -18,7 +18,6 @@
 package org.opensaml.saml.metadata.resolver;
 
 import java.time.Instant;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -40,10 +39,6 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * A metadata provider that uses registered resolvers, in turn, to answer queries.
  * 
@@ -70,7 +65,7 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
      * @return list of currently registered resolvers
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<MetadataResolver> getResolvers() {
-        return ImmutableList.copyOf(resolvers);
+        return resolvers;
     }
 
     /**
@@ -90,7 +85,7 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
             return;
         }
 
-        resolvers = new ArrayList<>(Collections2.filter(newResolvers, Predicates.notNull()));
+        resolvers = List.copyOf(newResolvers);
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java
index 83b0cca..68a9731 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java
@@ -31,9 +31,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * A filter that allows the composition of {@link MetadataFilter}s. Filters will be executed on the given metadata
  * document in the order they were added to the chain.
@@ -97,7 +94,7 @@ public class MetadataFilterChain implements MetadataFilter {
     public void setFilters(@Nonnull @NonnullElements final List<MetadataFilter> newFilters) {
         Constraint.isNotNull(newFilters, "Filter collection cannot be null");
         
-        filters = new ArrayList<>(Collections2.filter(newFilters, Predicates.notNull()));
+        filters = new ArrayList<>(List.copyOf(newFilters));
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/ChainingNameIdentifierGenerator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/ChainingNameIdentifierGenerator.java
index d80d322..7715bcb 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/ChainingNameIdentifierGenerator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/ChainingNameIdentifierGenerator.java
@@ -36,9 +36,7 @@ import org.opensaml.saml.common.profile.NameIdentifierGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.ListMultimap;
 
 /**
@@ -77,14 +75,13 @@ public class ChainingNameIdentifierGenerator<NameIdType extends SAMLObject>
         Constraint.isNotNull(generators, "NameIdentifierGenerator list cannot be null");
         
         nameIdGeneratorMap.clear();
-        for (final NameIdentifierGenerator<NameIdType> generator
-                : Collections2.filter(generators, Predicates.notNull())) {
+        for (final NameIdentifierGenerator<NameIdType> generator : generators) {
             if (generator instanceof FormatSpecificNameIdentifierGenerator) {
                 nameIdGeneratorMap.put(
                         ((FormatSpecificNameIdentifierGenerator<NameIdType>) generator).getFormat(), generator);
             } else {
                 log.warn("Unable to install NameIdentifierGenerator of type {}, not format-specific",
-                        generator.getClass().getName());
+                        generator != null ? generator.getClass().getName() : "null");
             }
         }
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
index ad02441..5136938 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
 
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.function.Predicate;
 
@@ -51,9 +52,7 @@ import org.opensaml.security.credential.UsageType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.Multimap;
 
 /**
@@ -94,7 +93,7 @@ public class AlgorithmFilter extends AbstractInitializableComponent implements M
         applyMap = ArrayListMultimap.create(rules.size(), 1);
         for (final Map.Entry<Predicate<EntityDescriptor>,Collection<XMLObject>> entry : rules.entrySet()) {
             if (entry.getKey() != null && entry.getValue() != null) {
-                applyMap.putAll(entry.getKey(), Collections2.filter(entry.getValue(), Predicates.notNull()));
+                applyMap.putAll(entry.getKey(), List.copyOf(entry.getValue()));
             }
         }
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
index 14d5665..f80060d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
@@ -50,9 +50,7 @@ import org.opensaml.saml.saml2.metadata.Extensions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.Multimap;
 
 /**
@@ -105,7 +103,7 @@ public class EntityAttributesFilter extends AbstractInitializableComponent imple
         applyMap = ArrayListMultimap.create(rules.size(), 1);
         for (final Map.Entry<Predicate<EntityDescriptor>,Collection<Attribute>> entry : rules.entrySet()) {
             if (entry.getKey() != null && entry.getValue() != null) {
-                applyMap.putAll(entry.getKey(), Collections2.filter(entry.getValue(), Predicates.notNull()));
+                applyMap.putAll(entry.getKey(), List.copyOf(entry.getValue()));
             }
         }
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
index 6fdea93..95dfd01 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
@@ -18,7 +18,6 @@
 package org.opensaml.saml.metadata.resolver.filter.impl;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -36,9 +35,6 @@ import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.metadata.resolver.filter.MetadataNodeProcessor;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * An implementation of {@link MetadataFilter} which applies a {@link MetadataNodeProcessor} to each element node in the
  * metadata document tree. The node processors will be applied in the order of {@link List} provided by
@@ -51,13 +47,13 @@ public class NodeProcessingMetadataFilter extends AbstractInitializableComponent
     
     /** Constructor. */
     public NodeProcessingMetadataFilter() {
-        processors = Collections.emptyList();
+        processors = new ArrayList<>();
     }
 
     /**
      * Get the list of metadata node processors.
      * 
-     * @return the list of metadata node processors.
+     * @return the list of metadata node processors
      */
     @Nonnull @NonnullElements @Live public List<MetadataNodeProcessor> getNodeProcessors() {
         return processors;
@@ -73,7 +69,7 @@ public class NodeProcessingMetadataFilter extends AbstractInitializableComponent
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         Constraint.isNotNull(newProcessors, "MetadataNodeProcessor list cannot be null");
 
-        processors = new ArrayList<>(Collections2.filter(newProcessors, Predicates.notNull()));
+        processors = new ArrayList<>(List.copyOf(newProcessors));
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
index 18dd24e..246a34a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.metadata.resolver.impl;
 import java.time.Instant;
 
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
@@ -41,9 +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.ImmutableSet;
 import com.google.common.collect.Iterables;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -115,7 +111,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
      * @return the set of configured indexes
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Set<MetadataIndex> getIndexes() {
-        return ImmutableSet.copyOf(indexes);
+        return indexes;
     }
 
     /**
@@ -128,8 +124,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
         if (newIndexes == null) {
             indexes = Collections.emptySet();
         } else {
-            indexes = new HashSet<>();
-            indexes.addAll(Collections2.filter(newIndexes, Predicates.notNull()));
+            indexes = Set.copyOf(newIndexes);
         }
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
index c2d13b7..bf15cde 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
@@ -67,8 +67,6 @@ import com.codahale.metrics.Timer.Context;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Optional;
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableSet;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -600,7 +598,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @return the set of configured indexes
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Set<MetadataIndex> getIndexes() {
-        return ImmutableSet.copyOf(indexes);
+        return indexes;
     }
 
     /**
@@ -610,11 +608,12 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      */
     public void setIndexes(@Nullable final Set<MetadataIndex> newIndexes) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        
         if (newIndexes == null) {
             indexes = Collections.emptySet();
         } else {
-            indexes = new HashSet<>();
-            indexes.addAll(Collections2.filter(newIndexes, Predicates.notNull()));
+            indexes = Set.copyOf(newIndexes);
         }
     }
     
@@ -1284,7 +1283,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
             }
             
             if (getInitializationFromCachePredicate() == null) {
-                setInitializationFromCachePredicate(Predicates.<EntityDescriptor>alwaysTrue());
+                setInitializationFromCachePredicate(Predicates.alwaysTrue());
             }
             
             persistentCacheInitMetrics = new PersistentCacheInitializationMetrics();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java
index 9cfd889..05f1538 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.metadata.resolver.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Function;
 
@@ -28,12 +27,11 @@ import org.opensaml.core.criterion.EntityIdCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 import com.google.common.escape.Escaper;
 import com.google.common.net.UrlEscapers;
 
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -101,7 +99,7 @@ public class MetadataQueryProtocolRequestURLBuilder implements Function<Criteria
      */
     public MetadataQueryProtocolRequestURLBuilder(
             @ParameterName(name="baseURL") @Nonnull @NotEmpty final String baseURL,
-            @ParameterName(name="secondaryURLBuilders") @Nullable 
+            @ParameterName(name="secondaryURLBuilders") @Nullable @NonnullElements
                 final List<MetadataQueryProtocolURLBuilder> secondaryURLBuilders) {
         this(baseURL, null, secondaryURLBuilders);
     }
@@ -116,7 +114,7 @@ public class MetadataQueryProtocolRequestURLBuilder implements Function<Criteria
     public MetadataQueryProtocolRequestURLBuilder(
             @ParameterName(name="baseURL") @Nonnull @NotEmpty final String baseURL, 
             @ParameterName(name="transform") @Nullable final Function<String,String> transform,
-            @ParameterName(name="secondaryURLBuilders") @Nullable 
+            @ParameterName(name="secondaryURLBuilders") @Nullable @NonnullElements
                 final List<MetadataQueryProtocolURLBuilder> secondaryURLBuilders
             ) {
         base = Constraint.isNotNull(StringSupport.trimOrNull(baseURL), "Base URL was null or empty");
@@ -129,7 +127,7 @@ public class MetadataQueryProtocolRequestURLBuilder implements Function<Criteria
         transformer = transform;
         
         if (secondaryURLBuilders != null) {
-            urlBuilders = new ArrayList<>(Collections2.filter(secondaryURLBuilders, Predicates.notNull()));
+            urlBuilders = List.copyOf(secondaryURLBuilders);
         }
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java
index 0db710b..cc8bfc8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java
@@ -21,7 +21,6 @@ import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -53,10 +52,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.collection.LazySet;
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -69,7 +66,7 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 public class SAMLArtifactMetadataIndex implements MetadataIndex {
     
     /** Indexing function instance to use. */
-    private List<Function<EntityDescriptor, Set<MetadataIndexKey>>> indexingFunctions;
+    @Nonnull @NonnullElements private List<Function<EntityDescriptor, Set<MetadataIndexKey>>> indexingFunctions;
     
     /**
      * Constructor.
@@ -84,7 +81,7 @@ public class SAMLArtifactMetadataIndex implements MetadataIndex {
      * </p>
      */
     public SAMLArtifactMetadataIndex() {
-        this(Lists.<Function<EntityDescriptor, Set<MetadataIndexKey>>>newArrayList(
+        this(Arrays.asList(
                 new EntityIDToSHA1SourceIDIndexingFunction(),
                 new SourceIDExtensionIndexingFunction(),
                 new SourceLocationIndexingFunction()
@@ -98,10 +95,9 @@ public class SAMLArtifactMetadataIndex implements MetadataIndex {
      */
     public SAMLArtifactMetadataIndex(
             @Nonnull final List<Function<EntityDescriptor, Set<MetadataIndexKey>>> descriptorIndexingFunctions) {
-        indexingFunctions = new ArrayList<>(Collections2.filter(
-                Constraint.isNotNull(descriptorIndexingFunctions, 
-                        "EntityDescriptor indexing functions list may not be null"),
-                Predicates.notNull()));
+        indexingFunctions = List.copyOf(
+                Constraint.isNotNull(descriptorIndexingFunctions,
+                        "EntityDescriptor indexing functions list may not be null"));
         Constraint.isNotEmpty(indexingFunctions, "EntityDescriptor indexing functions list may not be empty");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
index 531fb55..d999d73 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -55,7 +54,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * Action that sets {@link Status} content in a {@link Response} obtained from
@@ -160,8 +158,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
     public void setStatusCodes(@Nonnull @NonnullElements final List<QName> codes) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        Constraint.isNotNull(codes, "Status code list cannot be null");
-        defaultStatusCodes = new ArrayList<>(Collections2.filter(codes, Predicates.notNull()));
+        defaultStatusCodes = List.copyOf(Constraint.isNotNull(codes, "Status code list cannot be null"));
     }
     
     /**
@@ -301,8 +298,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
             for (final Map.Entry<String,List<QName>> entry : mappings.entrySet()) {
                 final String event = StringSupport.trimOrNull(entry.getKey());
                 if (event != null && entry.getValue() != null) {
-                    codeMappings.put(event, new ArrayList<>(Collections2.filter(entry.getValue(),
-                            Predicates.notNull())));
+                    codeMappings.put(event, List.copyOf(entry.getValue()));
                 }
             }
             
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
index ca9eb7c..af63f7c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -17,9 +17,9 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Objects;
 import java.util.function.Function;
 
@@ -52,9 +52,6 @@ import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Action that builds {@link SubjectConfirmation} and adds it to the {@link Subject} of all the statements
  * in all the assertions found in a {@link Response}. The message to update is returned by a lookup
@@ -144,7 +141,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         Constraint.isNotEmpty(methods, "Confirmation method collection cannot be null or empty");
         
-        confirmationMethods = new ArrayList<>(Collections2.filter(methods, Predicates.notNull()));
+        confirmationMethods = List.copyOf(methods);
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
index 4babb7b..1d03b47 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -54,7 +53,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * Action that sets {@link Status} content in a {@link StatusResponseType} obtained from
@@ -161,8 +159,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
     public void setStatusCodes(@Nonnull @NonnullElements final List<String> codes) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        Constraint.isNotNull(codes, "Status code list cannot be null");
-        defaultStatusCodes = new ArrayList<>(Collections2.filter(codes, Predicates.notNull()));
+        defaultStatusCodes = List.copyOf(Constraint.isNotNull(codes, "Status code list cannot be null"));
     }
     
     /**
@@ -302,8 +299,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
             for (final Map.Entry<String,List<String>> entry : mappings.entrySet()) {
                 final String event = StringSupport.trimOrNull(entry.getKey());
                 if (event != null && entry.getValue() != null) {
-                    codeMappings.put(event, new ArrayList<>(Collections2.filter(entry.getValue(),
-                            Predicates.notNull())));
+                    codeMappings.put(event, List.copyOf(entry.getValue()));
                 }
             }
             
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java
index b2cad24..b3b2f3a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java
@@ -64,9 +64,6 @@ public class MetadataQueryProtocolRequestURLBuilderTest {
         function = new MetadataQueryProtocolRequestURLBuilder("http://metadata.example.org/service", Lists.newArrayList(bar,foo));
         Assert.assertEquals(function.apply(new CriteriaSet(new SimpleStringCriterion("will-be-ignored"))), "http://metadata.example.org/service/tags/bar");
         
-        function = new MetadataQueryProtocolRequestURLBuilder("http://metadata.example.org/service", Lists.newArrayList(null, null, foo, bar));
-        Assert.assertEquals(function.apply(new CriteriaSet(new SimpleStringCriterion("will-be-ignored"))), "http://metadata.example.org/service/tags/foo");
-        
         function = new MetadataQueryProtocolRequestURLBuilder("http://metadata.example.org/service", Lists.newArrayList(noValue, foo, bar));
         Assert.assertEquals(function.apply(new CriteriaSet(new SimpleStringCriterion("will-be-ignored"))), "http://metadata.example.org/service/tags/foo");
     }
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/httpclient/HttpClientSecurityConfigurationCriterion.java b/opensaml-security-api/src/main/java/org/opensaml/security/httpclient/HttpClientSecurityConfigurationCriterion.java
index 070bf01..758b5f8 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/httpclient/HttpClientSecurityConfigurationCriterion.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/httpclient/HttpClientSecurityConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.security.httpclient;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -30,10 +28,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.resolver.Criterion;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link HttpClientSecurityConfiguration}.
  */
@@ -50,8 +44,8 @@ public class HttpClientSecurityConfigurationCriterion implements Criterion {
     public HttpClientSecurityConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<HttpClientSecurityConfiguration> configurations) {
         Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.copyOf(configurations);
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
     
@@ -63,8 +57,8 @@ public class HttpClientSecurityConfigurationCriterion implements Criterion {
     public HttpClientSecurityConfigurationCriterion(@Nonnull @NonnullElements  @NotEmpty final
             HttpClientSecurityConfiguration... configurations) {
         Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(configurations);
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -73,7 +67,7 @@ public class HttpClientSecurityConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<HttpClientSecurityConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/CertificateNameOptions.java b/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/CertificateNameOptions.java
index 1910d76..ede1043 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/CertificateNameOptions.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/CertificateNameOptions.java
@@ -18,7 +18,6 @@
 package org.opensaml.security.x509.tls;
 
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
@@ -32,10 +31,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import org.opensaml.security.x509.InternalX500DNHandler;
 import org.opensaml.security.x509.X500DNHandler;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Options for deriving message context issuer names from an client TLS X.509 certificate.
  */
@@ -109,7 +104,7 @@ public class CertificateNameOptions implements Cloneable {
      * @return Returns the subjectAltNames.
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public Set<Integer> getSubjectAltNames() {
-        return ImmutableSet.copyOf(subjectAltNames);
+        return subjectAltNames;
     }
     
     /**
@@ -118,14 +113,12 @@ public class CertificateNameOptions implements Cloneable {
      * 
      * @param names the set of types of subject alternative names
      */
-    public void setSubjectAltNames(@Nullable final Set<Integer> names) {
+    public void setSubjectAltNames(@Nullable @NonnullElements final Set<Integer> names) {
         if (names == null) {
             subjectAltNames = Collections.emptySet();
-            return;
+        } else {
+            subjectAltNames = Set.copyOf(names);
         }
-        
-        subjectAltNames = new HashSet<>();
-        subjectAltNames.addAll(Collections2.filter(names, Predicates.notNull()));
     }
 
     /**
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/ClientTLSValidationConfigurationCriterion.java b/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/ClientTLSValidationConfigurationCriterion.java
index 14fcc45..7c9ce48 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/ClientTLSValidationConfigurationCriterion.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/x509/tls/ClientTLSValidationConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.security.x509.tls;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -30,10 +28,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.resolver.Criterion;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link ClientTLSValidationConfiguration}.
  */
@@ -49,10 +43,8 @@ public class ClientTLSValidationConfigurationCriterion implements Criterion {
      */
     public ClientTLSValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<ClientTLSValidationConfiguration> configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
-        
+        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -62,9 +54,8 @@ public class ClientTLSValidationConfigurationCriterion implements Criterion {
      */
     public ClientTLSValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             ClientTLSValidationConfiguration... configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -73,7 +64,7 @@ public class ClientTLSValidationConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<ClientTLSValidationConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java
index 8e03bd3..08847b1 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.security.credential.impl;
 
-import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
@@ -37,10 +36,6 @@ import org.opensaml.security.credential.CredentialResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * An abstract implementation of {@link CredentialResolver} which chains together one or more underlying credential 
  * resolver implementations. Resolved credentials are returned from all underlying resolvers in the chain, 
@@ -62,9 +57,8 @@ public abstract class AbstractChainingCredentialResolver<ResolverType extends Cr
      * 
      * @param credResolvers the list of chained credential resolvers
      */
-    public AbstractChainingCredentialResolver(@Nonnull final List<ResolverType> credResolvers) {
-        Constraint.isNotNull(credResolvers, "CredentialResolver list cannot be null");
-        resolvers = new ArrayList<>(Collections2.filter(credResolvers, Predicates.notNull()));
+    public AbstractChainingCredentialResolver(@Nonnull @NonnullElements final List<ResolverType> credResolvers) {
+        resolvers = List.copyOf(Constraint.isNotNull(credResolvers, "CredentialResolver list cannot be null"));
     }
 
     /**
@@ -73,7 +67,7 @@ public abstract class AbstractChainingCredentialResolver<ResolverType extends Cr
      * @return the list of credential resolvers in the chain
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<ResolverType> getResolverChain() {
-        return ImmutableList.copyOf(resolvers);
+        return resolvers;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/trust/impl/ChainingTrustEngine.java b/opensaml-security-impl/src/main/java/org/opensaml/security/trust/impl/ChainingTrustEngine.java
index ce0fa80..26e297d 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/trust/impl/ChainingTrustEngine.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/trust/impl/ChainingTrustEngine.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.security.trust.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -28,10 +27,6 @@ import org.opensaml.security.trust.TrustEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
@@ -58,9 +53,9 @@ public class ChainingTrustEngine<TokenType> implements TrustEngine<TokenType> {
      * 
      * @param chain the list of trust engines in the chain
      */
-    public ChainingTrustEngine(@Nonnull @ParameterName(name="chain") final List<TrustEngine<? super TokenType>> chain) {
-        Constraint.isNotNull(chain, "TrustEngine list cannot be null");
-        engines = new ArrayList<>(Collections2.filter(chain, Predicates.notNull()));
+    public ChainingTrustEngine(
+            @Nonnull @NonnullElements @ParameterName(name="chain") final List<TrustEngine<? super TokenType>> chain) {
+        engines = List.copyOf(Constraint.isNotNull(chain, "TrustEngine list cannot be null"));
     }
 
     /**
@@ -69,7 +64,7 @@ public class ChainingTrustEngine<TokenType> implements TrustEngine<TokenType> {
      * @return the modifiable list of trust engines in the chain
      */
     @Nonnull  @NonnullElements @Unmodifiable @NotLive public List<TrustEngine<? super TokenType>> getChain() {
-        return ImmutableList.copyOf(engines);
+        return engines;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java
index fb81d6f..eb6e32f 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java
@@ -41,10 +41,7 @@ import org.opensaml.security.x509.X509Support;
 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.ImmutableSet;
 
 /**
  * A basic implementaion of {@link X509CredentialNameEvaluator} which evaluates various identifiers 
@@ -123,7 +120,7 @@ public class BasicX509CredentialNameEvaluator implements X509CredentialNameEvalu
      * @return the immutable set of alt name identifiers
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public Set<Integer> getSubjectAltNameTypes() {
-        return ImmutableSet.copyOf(subjectAltNameTypes);
+        return subjectAltNameTypes;
     }
 
     /**
@@ -134,12 +131,11 @@ public class BasicX509CredentialNameEvaluator implements X509CredentialNameEvalu
      * 
      * @param nameTypes the new set of alt name identifiers
      */
-    public void setSubjectAltNameTypes(@Nullable final Set<Integer> nameTypes) {
+    public void setSubjectAltNameTypes(@Nullable @NonnullElements final Set<Integer> nameTypes) {
         if (nameTypes == null) {
             subjectAltNameTypes = Collections.emptySet();
         } else {
-            subjectAltNameTypes = new HashSet<>();
-            subjectAltNameTypes.addAll(Collections2.filter(nameTypes, Predicates.notNull()));
+            subjectAltNameTypes = Set.copyOf(nameTypes);
         }
     }
 
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java
index d7efe7e..53b322e 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java
@@ -86,17 +86,7 @@ public class ChainingTrustEngineTest {
         engine = new ChainingTrustEngine<>(chain);
         Assert.assertTrue(engine.validate(token, criteriaSet), "SuperEngine evaled token as trusted");
     }
-    
-    @Test
-    public void testNullEngineOK() throws SecurityException {
-        chain.add( new FooEngine(Boolean.FALSE));
-        chain.add( null );
-        chain.add( new FooEngine(Boolean.TRUE));
-        engine = new ChainingTrustEngine<>(chain);
-        Assert.assertTrue(engine.validate(token, criteriaSet), 
-                "Engine # 3 evaled token as trusted with intervening null engine");
-    }
-    
+        
     @Test(expectedExceptions=SecurityException.class)
     public void testException() throws SecurityException {
         chain.add( new FooEngine(Boolean.FALSE));
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java
index f4883d5..c57116a 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.soap.client.messaging;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Function;
 
@@ -33,9 +32,6 @@ import org.opensaml.soap.client.SOAPClientContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Maps;
-
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
@@ -78,10 +74,7 @@ public class SOAPClientPipelineNameMappingFunction<T> implements Function<Messag
             @Nullable @ParameterName(name="lookupStrategy") 
                 final ContextDataLookupFunction<MessageContext, SOAPClientContext> lookupStrategy) {
         
-        Constraint.isNotNull(mappings, "Delegate mappings may not be null");
-        delegateMap = new HashMap<>(Maps.filterKeys(
-                Maps.filterValues(mappings, Predicates.notNull()), 
-                Predicates.notNull()));
+        delegateMap = Map.copyOf(Constraint.isNotNull(mappings, "Delegate mappings may not be null"));
         
         if (lookupStrategy != null) {
             soapClientContextLookup = lookupStrategy;
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java
index 63a43fa..24967e9 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.soap.client.messaging;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Function;
 import java.util.function.Predicate;
@@ -34,9 +33,6 @@ import org.opensaml.soap.client.SOAPClientContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Maps;
-
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
@@ -77,10 +73,7 @@ public class SOAPClientPipelineNameMappingPredicate implements Predicate<Message
             @Nullable @ParameterName(name="lookupStrategy") 
                 final ContextDataLookupFunction<MessageContext, SOAPClientContext> lookupStrategy) {
         
-        Constraint.isNotNull(mappings, "Delegate mappings may not be null");
-        delegateMap = new HashMap<>(Maps.filterKeys(
-                Maps.filterValues(mappings, Predicates.notNull()), 
-                Predicates.notNull()));
+        delegateMap = Map.copyOf(Constraint.isNotNull(mappings, "Delegate mappings may not be null"));
         
         if (lookupStrategy != null) {
             soapClientContextLookup = lookupStrategy;
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
index 999b1d8..d2452e3 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
@@ -26,6 +26,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.collection.LazyList;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -46,9 +47,6 @@ import org.opensaml.soap.soap11.FaultCode;
 import org.opensaml.soap.soap11.FaultString;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Iterables;
-
 /**
  * Helper methods for working with SOAP.
  */
@@ -406,7 +404,7 @@ public final class SOAPSupport {
      * @return the new Fault element object
      */
     public static Fault buildSOAP11Fault(@Nonnull final QName faultCode, @Nonnull final String faultString,
-            @Nullable final String faultActor, @Nullable final List<XMLObject> detailChildren,
+            @Nullable final String faultActor, @Nullable @NonnullElements final List<XMLObject> detailChildren,
             @Nullable final Map<QName, String> detailAttributes) {
         Constraint.isNotNull(faultCode, "faultcode cannot be null");
         Constraint.isNotNull(faultString, "faultstring cannot be null");
@@ -437,10 +435,9 @@ public final class SOAPSupport {
         if (detailChildren != null && !detailChildren.isEmpty()) {
             detailObj = (Detail) builderFactory.getBuilder(Detail.DEFAULT_ELEMENT_NAME)
                 .buildObject(Detail.DEFAULT_ELEMENT_NAME);
-            for (final XMLObject xo : Iterables.filter(detailChildren, Predicates.notNull())) {
-                detailObj.getUnknownXMLObjects().add(xo);
-            }
+            detailObj.getUnknownXMLObjects().addAll(detailChildren);
         }
+        
         if (detailAttributes != null && !detailAttributes.isEmpty()) {
             if (detailObj == null) {
                 detailObj = (Detail) builderFactory.getBuilder(Detail.DEFAULT_ELEMENT_NAME)
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
index 34df2bf..bf1ddbc 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -37,9 +38,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.Iterables;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -108,7 +107,7 @@ public class LoadClientStorageServices extends AbstractProfileAction {
         
         Constraint.isNotNull(services, "StorageService collection cannot be null");
         storageServices = new HashMap<>(services.size());
-        for (final ClientStorageService ss : Collections2.filter(services, Predicates.notNull())) {
+        for (final ClientStorageService ss : List.copyOf(services)) {
             storageServices.put(ss.getStorageName(), ss);
         }
     }
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
index 1a97456..24a9cc1 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 
@@ -30,9 +31,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;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -72,8 +70,7 @@ public class PopulateClientStorageLoadContext extends AbstractProfileAction {
     public void setStorageServices(@Nonnull @NonnullElements final Collection<ClientStorageService> services) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        Constraint.isNotNull(services, "StorageService collection cannot be null");
-        storageServices = new ArrayList<>(Collections2.filter(services, Predicates.notNull()));
+        storageServices = List.copyOf(Constraint.isNotNull(services, "StorageService collection cannot be null"));
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
index 13dfb14..eab2bbb 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
@@ -17,9 +17,10 @@
 
 package org.opensaml.storage.impl.client;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 
@@ -29,9 +30,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;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -71,8 +69,7 @@ public class PopulateClientStorageSaveContext extends AbstractProfileAction {
     public void setStorageServices(@Nonnull @NonnullElements final Collection<ClientStorageService> services) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        Constraint.isNotNull(services, "StorageService collection cannot be null");
-        storageServices = new ArrayList<>(Collections2.filter(services, Predicates.notNull()));
+        storageServices = List.copyOf(Constraint.isNotNull(services, "StorageService collection cannot be null"));
     }
     
     /** {@inheritDoc} */
@@ -111,9 +108,8 @@ public class PopulateClientStorageSaveContext extends AbstractProfileAction {
             profileRequestContext.addSubcontext(saveCtx, true);
             
             if (log.isDebugEnabled()) {
-                final Collection<String> ids =
-                        Collections2.transform(saveCtx.getStorageOperations(),
-                                ClientStorageServiceOperation::getStorageServiceID);
+                final Collection<String> ids = saveCtx.getStorageOperations().stream().map(
+                        ClientStorageServiceOperation::getStorageServiceID).collect(Collectors.toList());
                 log.debug("{} ClientStorageServices requiring save: {}", getLogPrefix(), ids);
             }
         }
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java
index 4850704..aa4692a 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java
@@ -20,6 +20,7 @@ package org.opensaml.storage.impl.client;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -33,8 +34,6 @@ import org.opensaml.storage.impl.client.ClientStorageService.ClientStorageSource
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 import com.google.common.escape.Escaper;
 import com.google.common.net.UrlEscapers;
 
@@ -83,7 +82,7 @@ public class SaveCookieBackedClientStorageServices
         
         Constraint.isNotNull(services, "StorageService collection cannot be null");
         storageServices = new HashMap<>(services.size());
-        for (final ClientStorageService ss : Collections2.filter(services, Predicates.notNull())) {
+        for (final ClientStorageService ss : List.copyOf(services)) {
             storageServices.put(ss.getId(), ss);
         }
     }
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/DecryptionConfigurationCriterion.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/DecryptionConfigurationCriterion.java
index 18674fd..b1b3802 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/DecryptionConfigurationCriterion.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/DecryptionConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.xmlsec.criterion;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -32,10 +30,6 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
 
 import org.opensaml.xmlsec.DecryptionConfiguration;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link DecryptionConfiguration}.
  */
@@ -51,9 +45,8 @@ public class DecryptionConfigurationCriterion implements Criterion {
      */
     public DecryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<DecryptionConfiguration> configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
     
@@ -64,9 +57,8 @@ public class DecryptionConfigurationCriterion implements Criterion {
      */
     public DecryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             DecryptionConfiguration... configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -76,7 +68,7 @@ public class DecryptionConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<DecryptionConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/EncryptionConfigurationCriterion.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/EncryptionConfigurationCriterion.java
index b34140d..be0155d 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/EncryptionConfigurationCriterion.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/EncryptionConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.xmlsec.criterion;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -32,10 +30,6 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
 
 import org.opensaml.xmlsec.EncryptionConfiguration;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link EncryptionConfiguration}.
  */
@@ -51,9 +45,8 @@ public class EncryptionConfigurationCriterion implements Criterion {
      */
     public EncryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<EncryptionConfiguration> configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
     
@@ -64,9 +57,8 @@ public class EncryptionConfigurationCriterion implements Criterion {
      */
     public EncryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             EncryptionConfiguration... configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -75,7 +67,7 @@ public class EncryptionConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<EncryptionConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureSigningConfigurationCriterion.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureSigningConfigurationCriterion.java
index eca63f1..8b87c9a 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureSigningConfigurationCriterion.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureSigningConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.xmlsec.criterion;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -32,10 +30,6 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
 
 import org.opensaml.xmlsec.SignatureSigningConfiguration;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link SignatureSigningConfiguration}.
  */
@@ -51,9 +45,8 @@ public class SignatureSigningConfigurationCriterion implements Criterion {
      */
     public SignatureSigningConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<SignatureSigningConfiguration> configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
     
@@ -64,9 +57,8 @@ public class SignatureSigningConfigurationCriterion implements Criterion {
      */
     public SignatureSigningConfigurationCriterion(@Nonnull @NonnullElements  @NotEmpty final
             SignatureSigningConfiguration... configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -75,7 +67,7 @@ public class SignatureSigningConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<SignatureSigningConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureValidationConfigurationCriterion.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureValidationConfigurationCriterion.java
index 497b0d8..d12e2d6 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureValidationConfigurationCriterion.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/criterion/SignatureValidationConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.xmlsec.criterion;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -32,10 +30,6 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
 
 import org.opensaml.xmlsec.SignatureValidationConfiguration;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link SignatureValidationConfiguration}.
  */
@@ -51,9 +45,8 @@ public class SignatureValidationConfigurationCriterion implements Criterion {
      */
     public SignatureValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<SignatureValidationConfiguration> configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
     
@@ -64,9 +57,8 @@ public class SignatureValidationConfigurationCriterion implements Criterion {
      */
     public SignatureValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             SignatureValidationConfiguration... configurations) {
-        Constraint.isNotNull(configurations, "List of configurations cannot be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -75,7 +67,7 @@ public class SignatureValidationConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<SignatureValidationConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java
index 9404804..b91626d 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.xmlsec.encryption.support;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -32,10 +31,6 @@ import org.opensaml.xmlsec.encryption.EncryptedKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
@@ -60,9 +55,9 @@ public class ChainingEncryptedKeyResolver extends AbstractEncryptedKeyResolver {
      * @param encKeyResolvers the chain of encrypted key resolvers
      */
     public ChainingEncryptedKeyResolver(
-            @Nonnull @ParameterName(name="encKeyResolvers") final List<EncryptedKeyResolver> encKeyResolvers) {
-        Constraint.isNotNull(encKeyResolvers, "List of EncryptedKeyResolvers cannot be null");
-        resolvers = new ArrayList<>(Collections2.filter(encKeyResolvers, Predicates.notNull()));
+            @Nonnull @NonnullElements @ParameterName(name="encKeyResolvers")
+            final List<EncryptedKeyResolver> encKeyResolvers) {
+        resolvers = List.copyOf(Constraint.isNotNull(encKeyResolvers, "List of EncryptedKeyResolvers cannot be null"));
     }
 
     /** 
@@ -72,11 +67,11 @@ public class ChainingEncryptedKeyResolver extends AbstractEncryptedKeyResolver {
      * @param recipients the set of recipients
      */
     public ChainingEncryptedKeyResolver(
-            @Nonnull @ParameterName(name="encKeyResolvers") final List<EncryptedKeyResolver> encKeyResolvers,
+            @Nonnull @NonnullElements @ParameterName(name="encKeyResolvers")
+            final List<EncryptedKeyResolver> encKeyResolvers,
             @Nullable @ParameterName(name="recipients") final Set<String> recipients) {
         super(recipients);
-        Constraint.isNotNull(encKeyResolvers, "List of EncryptedKeyResolvers cannot be null");
-        resolvers = new ArrayList<>(Collections2.filter(encKeyResolvers, Predicates.notNull()));
+        resolvers = List.copyOf(Constraint.isNotNull(encKeyResolvers, "List of EncryptedKeyResolvers cannot be null"));
     }
     
     /** 
@@ -86,7 +81,8 @@ public class ChainingEncryptedKeyResolver extends AbstractEncryptedKeyResolver {
      * @param recipient the recipient
      */
     public ChainingEncryptedKeyResolver(
-            @Nonnull @ParameterName(name="encKeyResolvers") final List<EncryptedKeyResolver> encKeyResolvers,
+            @Nonnull @NonnullElements @ParameterName(name="encKeyResolvers")
+            final List<EncryptedKeyResolver> encKeyResolvers,
             @Nullable @ParameterName(name="recipient") final String recipient) {
         this(encKeyResolvers, Collections.singleton(recipient));
     }
@@ -97,7 +93,7 @@ public class ChainingEncryptedKeyResolver extends AbstractEncryptedKeyResolver {
      * @return a list of EncryptedKeyResolver instances
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<EncryptedKeyResolver> getResolverChain() {
-        return ImmutableList.copyOf(resolvers);
+        return resolvers;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionConfiguration.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionConfiguration.java
index d04feaa..aa2521c 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionConfiguration.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionConfiguration.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.xmlsec.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -37,9 +36,6 @@ import org.opensaml.xmlsec.keyinfo.NamedKeyInfoGeneratorManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
 
 /**
  * Basic implementation of {@link EncryptionConfiguration}.
@@ -94,7 +90,7 @@ public class BasicEncryptionConfiguration extends BasicWhitelistBlacklistConfigu
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<Credential> getDataEncryptionCredentials() {
-        return ImmutableList.copyOf(dataEncryptionCredentials);
+        return dataEncryptionCredentials;
     }
     
     /**
@@ -102,18 +98,18 @@ public class BasicEncryptionConfiguration extends BasicWhitelistBlacklistConfigu
      * 
      * @param credentials the list of data encryption credentials
      */
-    public void setDataEncryptionCredentials(@Nullable final List<Credential> credentials) {
+    public void setDataEncryptionCredentials(@Nullable @NonnullElements final List<Credential> credentials) {
         if (credentials == null) {
             dataEncryptionCredentials  = Collections.emptyList();
-            return;
+        } else {
+            dataEncryptionCredentials = List.copyOf(credentials);
         }
-        dataEncryptionCredentials = new ArrayList<>(Collections2.filter(credentials, Predicates.notNull()));
     }
     
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<String> getDataEncryptionAlgorithms() {
-        return ImmutableList.copyOf(dataEncryptionAlgorithms);
+        return dataEncryptionAlgorithms;
     }
     
     /**
@@ -121,18 +117,18 @@ public class BasicEncryptionConfiguration extends BasicWhitelistBlacklistConfigu
      * 
      * @param algorithms the list of algorithms
      */
-    public void setDataEncryptionAlgorithms(@Nullable final List<String> algorithms) {
+    public void setDataEncryptionAlgorithms(@Nullable @NonnullElements final List<String> algorithms) {
         if (algorithms == null) {
             dataEncryptionAlgorithms = Collections.emptyList();
-            return;
+        } else {
+            dataEncryptionAlgorithms = List.copyOf(StringSupport.normalizeStringCollection(algorithms));
         }
-        dataEncryptionAlgorithms = new ArrayList<>(StringSupport.normalizeStringCollection(algorithms));
     }
     
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<Credential> getKeyTransportEncryptionCredentials() {
-        return ImmutableList.copyOf(keyTransportEncryptionCredentials);
+        return keyTransportEncryptionCredentials;
     }
     
     /**
@@ -140,18 +136,18 @@ public class BasicEncryptionConfiguration extends BasicWhitelistBlacklistConfigu
      * 
      * @param credentials the list of key transport encryption credentials
      */
-    public void setKeyTransportEncryptionCredentials(@Nullable final List<Credential> credentials) {
+    public void setKeyTransportEncryptionCredentials(@Nullable @NonnullElements final List<Credential> credentials) {
         if (credentials == null) {
             keyTransportEncryptionCredentials  = Collections.emptyList();
-            return;
+        } else {
+            keyTransportEncryptionCredentials = List.copyOf(credentials);
         }
-        keyTransportEncryptionCredentials = new ArrayList<>(Collections2.filter(credentials, Predicates.notNull()));
     }
     
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<String> getKeyTransportEncryptionAlgorithms() {
-        return ImmutableList.copyOf(keyTransportEncryptionAlgorithms);
+        return keyTransportEncryptionAlgorithms;
     }
     
     /**
@@ -159,12 +155,12 @@ public class BasicEncryptionConfiguration extends BasicWhitelistBlacklistConfigu
      * 
      * @param algorithms the list of algorithms
      */
-    public void setKeyTransportEncryptionAlgorithms(@Nullable final List<String> algorithms) {
+    public void setKeyTransportEncryptionAlgorithms(@Nullable @NonnullElements final List<String> algorithms) {
         if (algorithms == null) {
             keyTransportEncryptionAlgorithms = Collections.emptyList();
-            return;
+        } else {
+            keyTransportEncryptionAlgorithms = List.copyOf(StringSupport.normalizeStringCollection(algorithms));
         }
-        keyTransportEncryptionAlgorithms = new ArrayList<>(StringSupport.normalizeStringCollection(algorithms));
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfiguration.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfiguration.java
index 8d0c4d5..a7ef1f5 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfiguration.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfiguration.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.xmlsec.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -35,10 +34,6 @@ import org.opensaml.xmlsec.keyinfo.NamedKeyInfoGeneratorManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Basic implementation of {@link SignatureSigningConfiguration}.
  */
@@ -83,7 +78,7 @@ public class BasicSignatureSigningConfiguration extends BasicWhitelistBlacklistC
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<Credential> getSigningCredentials() {
-        return ImmutableList.copyOf(signingCredentials);
+        return signingCredentials;
     }
     
     /**
@@ -91,18 +86,18 @@ public class BasicSignatureSigningConfiguration extends BasicWhitelistBlacklistC
      * 
      * @param credentials the list of signing credentials
      */
-    public void setSigningCredentials(@Nullable final List<Credential> credentials) {
+    public void setSigningCredentials(@Nullable @NonnullElements final List<Credential> credentials) {
         if (credentials == null) {
             signingCredentials = Collections.emptyList();
-            return;
+        } else {
+            signingCredentials = List.copyOf(credentials);
         }
-        signingCredentials = new ArrayList<>(Collections2.filter(credentials, Predicates.notNull()));
     }
     
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<String> getSignatureAlgorithms() {
-        return ImmutableList.copyOf(signatureAlgorithms);
+        return signatureAlgorithms;
     }
     
     /**
@@ -110,18 +105,18 @@ public class BasicSignatureSigningConfiguration extends BasicWhitelistBlacklistC
      * 
      * @param algorithms the list of signature algorithms
      */
-    public void setSignatureAlgorithms(@Nullable final List<String> algorithms) {
+    public void setSignatureAlgorithms(@Nullable @NonnullElements final List<String> algorithms) {
         if (algorithms == null) {
             signatureAlgorithms = Collections.emptyList();
-            return;
+        } else {
+            signatureAlgorithms = List.copyOf(StringSupport.normalizeStringCollection(algorithms));
         }
-        signatureAlgorithms = new ArrayList<>(StringSupport.normalizeStringCollection(algorithms));
     }
     
     /** {@inheritDoc} */
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<String> getSignatureReferenceDigestMethods() {
-        return ImmutableList.copyOf(signatureReferenceDigestMethods);
+        return signatureReferenceDigestMethods;
     }
     
     /**
@@ -129,12 +124,12 @@ public class BasicSignatureSigningConfiguration extends BasicWhitelistBlacklistC
      * 
      * @param algorithms a list of digest method algorithm URIs
      */
-    public void setSignatureReferenceDigestMethods(@Nullable final List<String> algorithms) {
+    public void setSignatureReferenceDigestMethods(@Nullable @NonnullElements final List<String> algorithms) {
         if (algorithms == null) {
             signatureReferenceDigestMethods = Collections.emptyList();
-            return;
+        } else {
+            signatureReferenceDigestMethods = List.copyOf(StringSupport.normalizeStringCollection(algorithms));
         }
-        signatureReferenceDigestMethods = new ArrayList<>(StringSupport.normalizeStringCollection(algorithms));
     }
     
     /**
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java
index dcf1c3e..ecf83ca 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java
@@ -18,7 +18,7 @@
 package org.opensaml.xmlsec.impl;
 
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.Set;
 import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
@@ -27,9 +27,6 @@ import javax.annotation.Nullable;
 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.collect.Collections2;
-
 /**
  * Predicate which implements an algorithm URI blacklist policy.
  */
@@ -43,10 +40,8 @@ public class BlacklistPredicate implements Predicate<String> {
      *
      * @param algorithms collection of blacklisted algorithms
      */
-    public BlacklistPredicate(@Nonnull final Collection<String> algorithms) {
-        Constraint.isNotNull(algorithms, "Blacklist may not be null");
-        blacklist = new HashSet<>();
-        blacklist.addAll(Collections2.filter(algorithms, Predicates.notNull()));
+    public BlacklistPredicate(@Nonnull @NonnullElements final Collection<String> algorithms) {
+        blacklist = Set.copyOf(Constraint.isNotNull(algorithms, "Blacklist may not be null"));
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java
index 5289e7f..b829dc0 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java
@@ -18,7 +18,7 @@
 package org.opensaml.xmlsec.impl;
 
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.Set;
 import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
@@ -27,9 +27,6 @@ import javax.annotation.Nullable;
 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.collect.Collections2;
-
 /**
  * Predicate which implements an algorithm URI whitelist policy.
  * 
@@ -45,9 +42,7 @@ public class WhitelistPredicate implements Predicate<String> {
      * @param algorithms collection of whitelisted algorithms
      */
     public WhitelistPredicate(@Nonnull final Collection<String> algorithms) {
-        Constraint.isNotNull(algorithms, "Whitelist may not be null");
-        whitelist = new HashSet<>();
-        whitelist.addAll(Collections2.filter(algorithms, Predicates.notNull()));
+        whitelist = Set.copyOf(Constraint.isNotNull(algorithms, "Whitelist may not be null"));
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignaturePrevalidator.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignaturePrevalidator.java
index 5d7fd23..51047d8 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignaturePrevalidator.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignaturePrevalidator.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.xmlsec.signature.support.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -32,9 +31,6 @@ import org.opensaml.xmlsec.signature.support.SignaturePrevalidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * A signature prevalidator implementation which chains execution of a list of {@link SignaturePrevalidator} instances.
  */
@@ -53,8 +49,7 @@ public class ChainingSignaturePrevalidator implements SignaturePrevalidator {
      */
     public ChainingSignaturePrevalidator(@Nonnull @NonnullElements @ParameterName(name="validatorChain") 
                                                       final List<SignaturePrevalidator> validatorChain) {
-        Constraint.isNotNull(validatorChain, "SignaturePrevalidator list cannot be null");
-        validators = new ArrayList<>(Collections2.filter(validatorChain, Predicates.notNull()));
+        validators = List.copyOf(Constraint.isNotNull(validatorChain, "SignaturePrevalidator list cannot be null"));
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngine.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngine.java
index 7b401fe..3f19821 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngine.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngine.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.xmlsec.signature.support.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -38,10 +37,6 @@ import org.opensaml.xmlsec.signature.support.SignatureTrustEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Evaluate a signature in sequence using a chain of subordinate trust engines. If the signature may be established as
  * trusted by any of the subordinate engines, the token is considered trusted. Otherwise it is considered untrusted.
@@ -59,10 +54,9 @@ public class ChainingSignatureTrustEngine implements SignatureTrustEngine {
      *  
      *  @param chain the list of trust engines in the chain
      */
-    public ChainingSignatureTrustEngine(@Nonnull @NonnullElements @ParameterName(name="chain") 
-                                                      final List<SignatureTrustEngine> chain) {
-        Constraint.isNotNull(chain, "SignatureTrustEngine list cannot be null");
-        engines = new ArrayList<>(Collections2.filter(chain, Predicates.notNull()));
+    public ChainingSignatureTrustEngine(
+            @Nonnull @NonnullElements @ParameterName(name="chain") final List<SignatureTrustEngine> chain) {
+        engines = List.copyOf(Constraint.isNotNull(chain, "SignatureTrustEngine list cannot be null"));
     }
 
     /**
@@ -71,7 +65,7 @@ public class ChainingSignatureTrustEngine implements SignatureTrustEngine {
      * @return the modifiable list of trust engines in the chain
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public List<SignatureTrustEngine> getChain() {
-        return ImmutableList.copyOf(engines);
+        return engines;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java
index cf5ef9b..4b68c42 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java
@@ -87,7 +87,7 @@ public class BasicEncryptionConfigurationTest {
         Assert.assertNotNull(config.getDataEncryptionCredentials());
         Assert.assertEquals(config.getDataEncryptionCredentials().size(), 0);
         
-        config.setDataEncryptionCredentials(Arrays.asList(cred1, null, cred2, null));
+        config.setDataEncryptionCredentials(Arrays.asList(cred1, cred2));
         
         Assert.assertNotNull(config.getDataEncryptionCredentials());
         Assert.assertEquals(config.getDataEncryptionCredentials().size(), 2);
@@ -109,7 +109,7 @@ public class BasicEncryptionConfigurationTest {
         Assert.assertNotNull(config.getDataEncryptionAlgorithms());
         Assert.assertEquals(config.getDataEncryptionAlgorithms().size(), 0);
         
-        config.setDataEncryptionAlgorithms(Arrays.asList("   A   ", null, null, "   B    ", null, "   C    "));
+        config.setDataEncryptionAlgorithms(Arrays.asList("   A   ", "   B    ", "   C    "));
         
         Assert.assertNotNull(config.getDataEncryptionAlgorithms());
         Assert.assertEquals(config.getDataEncryptionAlgorithms().size(), 3);
@@ -134,7 +134,7 @@ public class BasicEncryptionConfigurationTest {
         Assert.assertNotNull(config.getKeyTransportEncryptionCredentials());
         Assert.assertEquals(config.getKeyTransportEncryptionCredentials().size(), 0);
         
-        config.setKeyTransportEncryptionCredentials(Arrays.asList(cred1, null, cred2, null));
+        config.setKeyTransportEncryptionCredentials(Arrays.asList(cred1, cred2));
         
         Assert.assertNotNull(config.getKeyTransportEncryptionCredentials());
         Assert.assertEquals(config.getKeyTransportEncryptionCredentials().size(), 2);
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfigurationTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfigurationTest.java
index 86922be..11d98c8 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfigurationTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicSignatureSigningConfigurationTest.java
@@ -77,7 +77,7 @@ public class BasicSignatureSigningConfigurationTest {
         Assert.assertNotNull(config.getSigningCredentials());
         Assert.assertEquals(config.getSigningCredentials().size(), 0);
         
-        config.setSigningCredentials(Arrays.asList(cred1, null, cred2, null));
+        config.setSigningCredentials(Arrays.asList(cred1, cred2));
         
         Assert.assertNotNull(config.getSigningCredentials());
         Assert.assertEquals(config.getSigningCredentials().size(), 2);
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java
index eb3301f..3affb02 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java
@@ -43,23 +43,6 @@ public class BlacklistPredicateTest {
         Assert.assertTrue(predicate.test("bax"));
     }
     
-    @Test
-    public void testWithNullsInSet() {
-        BlacklistPredicate predicate = new BlacklistPredicate(Arrays.asList("A", null, "B", null, "C", null, "D"));
-        
-        Assert.assertFalse(predicate.test("A"));
-        Assert.assertFalse(predicate.test("B"));
-        Assert.assertFalse(predicate.test("C"));
-        Assert.assertFalse(predicate.test("D"));
-        
-        Assert.assertTrue(predicate.test("X"));
-        Assert.assertTrue(predicate.test("Y"));
-        Assert.assertTrue(predicate.test("Z"));
-        Assert.assertTrue(predicate.test("foo"));
-        Assert.assertTrue(predicate.test("bar"));
-        Assert.assertTrue(predicate.test("bax"));
-    }
-    
     @Test(expectedExceptions=ConstraintViolationException.class)
     public void testNullSet() {
         new BlacklistPredicate(null);
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistBlacklistConfigurationCriterion.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistBlacklistConfigurationCriterion.java
index f1e1ed1..a297bbe 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistBlacklistConfigurationCriterion.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistBlacklistConfigurationCriterion.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.xmlsec.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -32,10 +30,6 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
 
 import org.opensaml.xmlsec.WhitelistBlacklistConfiguration;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-
 /**
  * Criterion which holds one or more instances of {@link WhitelistBlacklistConfiguration},
  * used exclusively for testing the {@link AbstractSecurityParametersResolver}.
@@ -52,9 +46,8 @@ public class WhitelistBlacklistConfigurationCriterion implements Criterion {
      */
     public WhitelistBlacklistConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty
             List<WhitelistBlacklistConfiguration> configurations) {
-        Constraint.isNotNull(configurations, "List of configurations may not be null");
-        configs = new ArrayList<>(Collections2.filter(configurations, Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations may not be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
     
@@ -65,9 +58,8 @@ public class WhitelistBlacklistConfigurationCriterion implements Criterion {
      */
     public WhitelistBlacklistConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty
             WhitelistBlacklistConfiguration... configurations) {
-        Constraint.isNotNull(configurations, "List of configurations may not be null");
-        configs = new ArrayList<>(Collections2.filter(Arrays.asList(configurations), Predicates.notNull()));
-        Constraint.isGreaterThanOrEqual(1, configs.size(), "At least one configuration is required");
+        configs = List.of(Constraint.isNotNull(configurations, "List of configurations may not be null"));
+        Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
     /**
@@ -76,7 +68,7 @@ public class WhitelistBlacklistConfigurationCriterion implements Criterion {
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
     public List<WhitelistBlacklistConfiguration> getConfigurations() {
-        return ImmutableList.copyOf(configs);
+        return configs;
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java
index 77bed9b..a72e599 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java
@@ -45,23 +45,6 @@ public class WhitelistPredicateTest {
         Assert.assertFalse(predicate.test("bar"));
         Assert.assertFalse(predicate.test("bax"));
     }
-
-    @Test
-    public void testWithNullsInSet() {
-        WhitelistPredicate predicate = new WhitelistPredicate(Arrays.asList("A", null, "B", null, "C", null, "D"));
-        
-        Assert.assertTrue(predicate.test("A"));
-        Assert.assertTrue(predicate.test("B"));
-        Assert.assertTrue(predicate.test("C"));
-        Assert.assertTrue(predicate.test("D"));
-        
-        Assert.assertFalse(predicate.test("X"));
-        Assert.assertFalse(predicate.test("Y"));
-        Assert.assertFalse(predicate.test("Z"));
-        Assert.assertFalse(predicate.test("foo"));
-        Assert.assertFalse(predicate.test("bar"));
-        Assert.assertFalse(predicate.test("bax"));
-    }
     
     @Test(expectedExceptions=ConstraintViolationException.class)
     public void testNullSet() {
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java
index c591522..af10fb7 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java
@@ -85,26 +85,6 @@ public class ChainingSignatureTrustEngineTest extends XMLObjectBaseTestCase {
         Assert.assertFalse(engine.validate(token, criteriaSet), "No engine evaled token as trusted");
     }
 
-    @Test
-    public void testNullEngineOK() throws SecurityException {
-        chain.add(new MockSignatureTrustEngine(Boolean.FALSE));
-        chain.add(null);
-        chain.add(new MockSignatureTrustEngine(Boolean.TRUE));
-        engine = new ChainingSignatureTrustEngine(chain);
-        Assert.assertTrue(engine.validate(token, criteriaSet),
-                "Engine # 3 evaled token as trusted with intervening null engine");
-    }
-
-    @Test
-    public void testRawSignature() throws SecurityException {
-        chain.add(new MockSignatureTrustEngine(Boolean.FALSE));
-        chain.add(null);
-        chain.add(new MockSignatureTrustEngine(Boolean.TRUE));
-        engine = new ChainingSignatureTrustEngine(chain);
-        Assert.assertTrue(engine.validate(null, null, null, null, null),
-                "Engine # 3 evaled raw signature as trusted with intervening null engine");
-    }
-
     @Test(expectedExceptions = SecurityException.class)
     public void testException() throws SecurityException {
         chain.add(new MockSignatureTrustEngine(Boolean.FALSE));

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


More information about the commits mailing list