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

Scott Cantor cantor.2 at osu.edu
Mon Oct 28 11:27:04 EDT 2019


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

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

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

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

commit f56b765ab348d73c6e9cf8b39a11ee92e4247d22
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Oct 28 11:26:26 2019 -0400

    IDP-1516 - Reduce Guava dependence
    
    https://issues.shibboleth.net/jira/browse/IDP-1516
---
 .../admin/BasicAdministrativeFlowDescriptor.java   | 30 ++++++++-------
 ...InitializeAdministrativeProfileContextTree.java |  6 +--
 .../idp/admin/impl/UnlockDataSealers.java          |  9 ++---
 .../idp/admin/impl/UnlockPrivateKeys.java          | 13 +++----
 .../attribute/filter/AttributeFilterPolicy.java    |  5 +--
 .../filter/context/AttributeFilterContext.java     | 43 +++++++++++++---------
 .../attribute/filter/impl/AttributeFilterImpl.java |  8 ++--
 .../logic/impl/AbstractComposedMatcher.java        | 15 +++-----
 .../saml/impl/AttributeInMetadataMatcher.java      |  2 +-
 .../logic/impl/AbstractComposedPolicyRule.java     | 14 +++----
 .../impl/AbstractEntityAttributePolicyRule.java    |  8 ++--
 .../impl/AttributeTranscoderRegistryImpl.java      |  9 +----
 .../transcoding/impl/TranscodingRuleLoader.java    |  3 --
 .../attribute/resolver/AbstractResolverPlugin.java | 19 ++++++----
 .../context/AttributeResolutionContext.java        | 27 ++++++--------
 .../ad/mapped/impl/MappedAttributeDefinition.java  |  9 +++--
 .../resolver/ad/mapped/impl/ValueMap.java          |  9 +++--
 .../http/impl/ScriptedResponseMappingStrategy.java | 17 +++------
 .../spring/dc/impl/DataConnectorFactoryBean.java   | 14 ++-----
 .../LogoutPropagationFlowDescriptorSelector.java   | 10 +----
 .../session/impl/StorageBackedSessionManager.java  |  9 ++---
 .../shibboleth/idp/ui/impl/SetRPUIInformation.java | 11 +-----
 22 files changed, 127 insertions(+), 163 deletions(-)

diff --git a/idp-admin-api/src/main/java/net/shibboleth/idp/admin/BasicAdministrativeFlowDescriptor.java b/idp-admin-api/src/main/java/net/shibboleth/idp/admin/BasicAdministrativeFlowDescriptor.java
index 1bbc0e5..fc88d50 100644
--- a/idp-admin-api/src/main/java/net/shibboleth/idp/admin/BasicAdministrativeFlowDescriptor.java
+++ b/idp-admin-api/src/main/java/net/shibboleth/idp/admin/BasicAdministrativeFlowDescriptor.java
@@ -21,7 +21,6 @@ import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
@@ -56,7 +55,6 @@ import org.opensaml.saml.ext.saml2mdui.UIInfo;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 
 /**
  * A descriptor for an administrative flow.
@@ -201,7 +199,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
      */
     public void setDisplayNames(@Nonnull @NonnullElements final Collection<LangBearingString> displayNames) {
         uiInfo.getDisplayNames().clear();
-        for (final LangBearingString s : Collections2.filter(displayNames, Predicates.notNull())) {
+        for (final LangBearingString s : displayNames) {
             final DisplayName displayName =
                     ((SAMLObjectBuilder<DisplayName>) builderFactory.<DisplayName>getBuilderOrThrow(
                             DisplayName.DEFAULT_ELEMENT_NAME)).buildObject();
@@ -218,7 +216,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
      */
     public void setDescriptions(@Nonnull @NonnullElements final Collection<LangBearingString> descriptions) {
         uiInfo.getDescriptions().clear();
-        for (final LangBearingString s : Collections2.filter(descriptions, Predicates.notNull())) {
+        for (final LangBearingString s : descriptions) {
             final Description desc =
                     ((SAMLObjectBuilder<Description>) builderFactory.<Description>getBuilderOrThrow(
                             Description.DEFAULT_ELEMENT_NAME)).buildObject();
@@ -236,7 +234,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
      */
     public void setLogos(@Nonnull @NonnullElements final Collection<Logo> logos) {
         uiInfo.getLogos().clear();
-        for (final Logo src : Collections2.filter(logos, Predicates.notNull())) {
+        for (final Logo src : logos) {
             final org.opensaml.saml.ext.saml2mdui.Logo logo =
                     ((SAMLObjectBuilder<org.opensaml.saml.ext.saml2mdui.Logo>) 
                             builderFactory.<org.opensaml.saml.ext.saml2mdui.Logo>getBuilderOrThrow(
@@ -256,7 +254,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
      */
     public void setInformationURLs(@Nonnull @NonnullElements final Collection<LangBearingString> urls) {
         uiInfo.getInformationURLs().clear();
-        for (final LangBearingString s : Collections2.filter(urls, Predicates.notNull())) {
+        for (final LangBearingString s : urls) {
             final InformationURL url =
                     ((SAMLObjectBuilder<InformationURL>) builderFactory.<InformationURL>getBuilderOrThrow(
                             InformationURL.DEFAULT_ELEMENT_NAME)).buildObject();
@@ -273,7 +271,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
      */
     public void setPrivacyStatementURLs(@Nonnull @NonnullElements final Collection<LangBearingString> urls) {
         uiInfo.getPrivacyStatementURLs().clear();
-        for (final LangBearingString s : Collections2.filter(urls, Predicates.notNull())) {
+        for (final LangBearingString s : urls) {
             final PrivacyStatementURL url =
                     ((SAMLObjectBuilder<PrivacyStatementURL>) builderFactory.<PrivacyStatementURL>getBuilderOrThrow(
                             PrivacyStatementURL.DEFAULT_ELEMENT_NAME)).buildObject();
@@ -350,8 +348,11 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public List<Principal> getDefaultAuthenticationMethods(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableList(
-                defaultAuthenticationMethodsLookupStrategy.apply(profileRequestContext));
+        final Collection<Principal> methods = defaultAuthenticationMethodsLookupStrategy.apply(profileRequestContext);
+        if (methods != null) {
+            return List.copyOf(methods);
+        }
+        return Collections.emptyList();
     }
     
     /**
@@ -362,8 +363,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
     public void setDefaultAuthenticationMethods(@Nullable @NonnullElements final Collection<Principal> methods) {
 
         if (methods != null) {
-            defaultAuthenticationMethodsLookupStrategy =
-                    FunctionSupport.constant(new ArrayList<>(Collections2.filter(methods, Predicates.notNull())));
+            defaultAuthenticationMethodsLookupStrategy = FunctionSupport.constant(List.copyOf(methods));
         } else {
             defaultAuthenticationMethodsLookupStrategy = FunctionSupport.constant(null);
         }
@@ -382,7 +382,11 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
     /** {@inheritDoc} */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public Set<String> getAuthenticationFlows(
             @Nullable final ProfileRequestContext profileRequestContext) {
-        return CollectionSupport.buildImmutableSet(authenticationFlowsLookupStrategy.apply(profileRequestContext));
+        final Set<String> flows = authenticationFlowsLookupStrategy.apply(profileRequestContext);
+        if (flows != null) {
+            return Set.copyOf(flows);
+        }
+        return Collections.emptySet();
     }
 
     /**
@@ -394,7 +398,7 @@ public class BasicAdministrativeFlowDescriptor extends AbstractProfileConfigurat
 
         if (flows != null) {
             authenticationFlowsLookupStrategy =
-                    FunctionSupport.constant(new HashSet<>(StringSupport.normalizeStringCollection(flows)));
+                    FunctionSupport.constant(Set.copyOf(StringSupport.normalizeStringCollection(flows)));
         } else {
             authenticationFlowsLookupStrategy = FunctionSupport.constant(null);
         }
diff --git a/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/InitializeAdministrativeProfileContextTree.java b/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/InitializeAdministrativeProfileContextTree.java
index 7990838..c604374 100644
--- a/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/InitializeAdministrativeProfileContextTree.java
+++ b/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/InitializeAdministrativeProfileContextTree.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.admin.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -28,9 +27,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.idp.admin.AdministrativeFlowDescriptor;
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.idp.profile.IdPEventIds;
@@ -83,7 +79,7 @@ public class InitializeAdministrativeProfileContextTree extends AbstractProfileA
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
         if (langs != null) {
-            fallbackLanguages = new ArrayList<>(Collections2.filter(langs, Predicates.notNull()));
+            fallbackLanguages = List.copyOf(langs);
         } else {
             fallbackLanguages = null;
         }
diff --git a/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockDataSealers.java b/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockDataSealers.java
index 3a781b2..b844487 100644
--- a/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockDataSealers.java
+++ b/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockDataSealers.java
@@ -18,10 +18,10 @@
 package net.shibboleth.idp.admin.impl;
 
 import java.security.KeyException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -39,9 +39,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Action that sets keystore and key passwords for one or more DataSealer KeyStrategy
  * objects based on query parameters.
@@ -83,8 +80,8 @@ public class UnlockDataSealers extends AbstractProfileAction {
     public void setKeyStrategies(@Nullable @NonnullElements final Collection<BasicKeystoreKeyStrategy> strategies) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        if (strategies != null && !strategies.isEmpty()) {
-            keyStrategies = new ArrayList<>(Collections2.filter(strategies, Predicates.notNull()));
+        if (strategies != null) {
+            keyStrategies = List.copyOf(strategies);
         } else {
             keyStrategies = Collections.emptyList();
         }
diff --git a/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockPrivateKeys.java b/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockPrivateKeys.java
index e328db7..52a50e3 100644
--- a/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockPrivateKeys.java
+++ b/idp-admin-impl/src/main/java/net/shibboleth/idp/admin/impl/UnlockPrivateKeys.java
@@ -20,10 +20,10 @@ package net.shibboleth.idp.admin.impl;
 import java.io.IOException;
 import java.io.InputStream;
 import java.security.KeyException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -44,9 +44,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.io.Resource;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 /**
  * Action that creates private key objects and injects them into existing
  * {@link MutableCredential} objects.
@@ -87,8 +84,8 @@ public class UnlockPrivateKeys extends AbstractProfileAction {
     public void setCredentials(@Nullable @NonnullElements final Collection<MutableCredential> creds) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        if (creds != null && !creds.isEmpty()) {
-            credentials = new ArrayList<>(Collections2.filter(creds, Predicates.notNull()));
+        if (creds != null) {
+            credentials = List.copyOf(creds);
         } else {
             credentials = Collections.emptyList();
         }
@@ -102,8 +99,8 @@ public class UnlockPrivateKeys extends AbstractProfileAction {
     public void setKeyResources(@Nullable @NonnullElements final Collection<Resource> keys) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        if (keys != null && !keys.isEmpty()) {
-            keyResources = new ArrayList<>(Collections2.filter(keys, Predicates.notNull()));
+        if (keys != null) {
+            keyResources = List.copyOf(keys);
         } else {
             keyResources = Collections.emptyList();
         }
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
index 703640e..039cbba 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
@@ -31,8 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.Collections2;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.filter.PolicyRequirementRule.Tristate;
@@ -90,7 +89,7 @@ public class AttributeFilterPolicy extends AbstractIdentifiedInitializableCompon
         final ArrayList<AttributeRule> checkedPolicies = new ArrayList<>();
         CollectionSupport.addIf(checkedPolicies, attributeRules, Predicates.notNull());
         if (null != attributeRules) {
-            valuePolicies = ImmutableList.copyOf(Iterables.filter(attributeRules, Predicates.notNull()));
+            valuePolicies = List.copyOf(Collections2.filter(attributeRules, Predicates.notNull()));
         } else {
             valuePolicies = Collections.emptyList();
         }
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
index ee3b4ff..66f7e7b 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.attribute.filter.context;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -32,7 +31,6 @@ import net.shibboleth.idp.attribute.filter.AttributeFilter;
 import net.shibboleth.idp.attribute.filter.AttributeFilterException;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.service.ReloadableService;
 import net.shibboleth.utilities.java.support.service.ServiceableComponent;
@@ -44,8 +42,6 @@ import org.opensaml.saml.metadata.resolver.MetadataResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-
 /** A context supplying input to the {@link net.shibboleth.idp.attribute.filter.AttributeFilter} interface. */
 @NotThreadSafe
 public final class AttributeFilterContext extends BaseContext {
@@ -160,13 +156,16 @@ public final class AttributeFilterContext extends BaseContext {
      */
     @Nonnull public AttributeFilterContext setPrefilteredIdPAttributes(
             @Nullable @NullableElements final Collection<IdPAttribute> attributes) {
-        final Collection<IdPAttribute> checkedAttributes = new ArrayList<>();
-        CollectionSupport.addIf(checkedAttributes, attributes, Predicates.notNull());
-
-        prefilteredAttributes = new HashMap<>(checkedAttributes.size());
 
-        for (final IdPAttribute attribute : checkedAttributes) {
-            prefilteredAttributes.put(attribute.getId(), attribute);
+        if (attributes != null) {
+            prefilteredAttributes = new HashMap<>(attributes.size());
+            for (final IdPAttribute attribute : attributes) {
+                if (attribute != null) {
+                    prefilteredAttributes.put(attribute.getId(), attribute);
+                }
+            }
+        } else {
+            prefilteredAttributes = new HashMap<>();
         }
         
         return this;
@@ -185,16 +184,24 @@ public final class AttributeFilterContext extends BaseContext {
      * Sets the attributes that have been filtered.
      * 
      * @param attributes attributes that have been filtered
+     * 
+     * @return this context
      */
-    public void setFilteredIdPAttributes(@Nullable @NullableElements final Collection<IdPAttribute> attributes) {
-        final Collection<IdPAttribute> checkedAttributes = new ArrayList<>();
-        CollectionSupport.addIf(checkedAttributes, attributes, Predicates.notNull());
-
-        filteredAttributes = new HashMap<>(checkedAttributes.size());
-
-        for (final IdPAttribute attribute : checkedAttributes) {
-            filteredAttributes.put(attribute.getId(), attribute);
+    @Nonnull public AttributeFilterContext setFilteredIdPAttributes(
+            @Nullable @NullableElements final Collection<IdPAttribute> attributes) {
+        
+        if (attributes != null) {
+            filteredAttributes = new HashMap<>(attributes.size());
+            for (final IdPAttribute attribute : attributes) {
+                if (attribute != null) {
+                    filteredAttributes.put(attribute.getId(), attribute);
+                }
+            }
+        } else {
+            filteredAttributes = new HashMap<>();
         }
+        
+        return this;
     }
     
     /**
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
index 0c89d78..eff5c74 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
@@ -51,8 +51,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 
 /** Service that filters out attributes and values based upon loaded policies. */
 @ThreadSafe
@@ -62,10 +60,10 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
     @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeFilterImpl.class);
 
     /** Filter policies used by this engine. */
-    private final List<AttributeFilterPolicy> filterPolicies;
+    @Nonnull @NonnullElements private final List<AttributeFilterPolicy> filterPolicies;
 
     /** Log prefix. */
-    private String logPrefix;
+    @Nullable private String logPrefix;
 
     /** Strategy to get the {@link MetricContext} for timing. */
     @Nonnull private Function<AttributeFilterContext,MetricContext> metricContextLookupStrategy;
@@ -82,7 +80,7 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
 
         final ArrayList<AttributeFilterPolicy> checkedPolicies = new ArrayList<>();
         CollectionSupport.addIf(checkedPolicies, policies, Predicates.notNull());
-        filterPolicies = ImmutableList.copyOf(Iterables.filter(checkedPolicies, Predicates.notNull()));
+        filterPolicies = List.copyOf(checkedPolicies);
         
         metricContextLookupStrategy = new ChildContextLookup<>(MetricContext.class).compose(new RootContextLookup<>());
     }
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcher.java
index a04cdfd..676ead7 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcher.java
@@ -17,8 +17,8 @@
 
 package net.shibboleth.idp.attribute.filter.matcher.logic.impl;
 
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -29,15 +29,13 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.component.UnmodifiableComponent;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.Collections2;
 
 /**
  * Base class for {@link Matcher} implementations that are compositions of two or more other
@@ -55,13 +53,12 @@ public abstract class AbstractComposedMatcher extends AbstractIdentifiableInitia
      */
     public void setSubsidiaries(@Nullable @NullableElements final Collection<Matcher> composedMatchers) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        final ArrayList<Matcher> checkedMatchers = new ArrayList<>();
-
+        
         if (composedMatchers != null) {
-            CollectionSupport.addIf(checkedMatchers, composedMatchers, Predicates.notNull());
+            matchers = List.copyOf(Collections2.filter(composedMatchers, Predicates.notNull()));
+        } else {
+            matchers = Collections.emptyList();
         }
-
-        matchers = ImmutableList.copyOf(Iterables.filter(checkedMatchers, Predicates.notNull()));
     }
 
     /** {@inheritDoc} */
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
index 3723378..422c8d6 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
@@ -228,7 +228,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
                 // TODO: not sure what the right answer is here
                 log.debug("{} The peer's metadata did not contain requested attribute information"
                         + ", returning all the input values", getLogPrefix());
-                return ImmutableSet.copyOf(attribute.getValues());
+                return Set.copyOf(attribute.getValues());
             }
             log.debug("{} The peer's metadata did not contain requested attribute information"
                     + ", returning no values", getLogPrefix());
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/logic/impl/AbstractComposedPolicyRule.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/logic/impl/AbstractComposedPolicyRule.java
index 240af0b..bd76b54 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/logic/impl/AbstractComposedPolicyRule.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/logic/impl/AbstractComposedPolicyRule.java
@@ -17,8 +17,8 @@
 
 package net.shibboleth.idp.attribute.filter.policyrule.logic.impl;
 
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -29,7 +29,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -37,8 +36,7 @@ import net.shibboleth.utilities.java.support.component.UnmodifiableComponent;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.Collections2;
 
 /**
  * Base class for {@link PolicyRequirementRule} implementations that are compositions of other
@@ -56,12 +54,12 @@ public abstract class AbstractComposedPolicyRule extends AbstractIdentifiableIni
      */
     public void setSubsidiaries(@Nullable @NullableElements final Collection<PolicyRequirementRule> theRules) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        final ArrayList<PolicyRequirementRule> checkedMatchers = new ArrayList<>();
-
+        
         if (theRules != null) {
-            CollectionSupport.addIf(checkedMatchers, theRules, Predicates.notNull());
+            rules = List.copyOf(Collections2.filter(theRules, Predicates.notNull()));
+        } else {
+            rules = Collections.emptyList();
         }
-        rules = ImmutableList.copyOf(Iterables.filter(checkedMatchers, Predicates.notNull()));        
     }
     
     /** {@inheritDoc} */
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java
index ae94225..35f27b1 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -58,8 +59,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.Multimap;
 
 /**
@@ -281,9 +280,8 @@ public abstract class AbstractEntityAttributePolicyRule extends AbstractPolicyRu
                         new Object[] {getLogPrefix(), name, getAttributeName(), getNameFormat(),});
                 
                 valueAccumulator.addAll(
-                        Collections2.filter(
-                                Collections2.transform(entityAttribute.getAttributeValues(), this::getStringValue),
-                                Predicates.notNull()));
+                        entityAttribute.getAttributeValues().stream().filter(v -> v != null).map(
+                                this::getStringValue).collect(Collectors.toList()));
             }
         }
     }
diff --git a/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java b/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
index 6e89204..3a7a822 100644
--- a/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
+++ b/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
@@ -49,9 +49,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Multimap;
 
@@ -126,14 +124,11 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
      */
     public void setTranscoderRegistry(@Nonnull @NonnullElements final Collection<TranscodingRule> mappings) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        Constraint.isNotNull(mappings, "Mappings cannot be null");
         
        transcodingRegistry.clear();
-
-        if (mappings == null) {
-            return;
-        }
         
-        for (final TranscodingRule mapping : Collections2.filter(mappings, Predicates.notNull())) {
+        for (final TranscodingRule mapping : mappings) {
             
             final String internalId = StringSupport.trimOrNull(mapping.get(PROP_ID, String.class));
             if (internalId != null) {
diff --git a/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/TranscodingRuleLoader.java b/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/TranscodingRuleLoader.java
index 375afba..a043018 100644
--- a/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/TranscodingRuleLoader.java
+++ b/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/TranscodingRuleLoader.java
@@ -33,8 +33,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.io.FileSystemResource;
 
-import com.google.common.base.Predicates;
-
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -100,7 +98,6 @@ public class TranscodingRuleLoader {
         
         rules = maps
                 .stream()
-                .filter(Predicates.notNull())
                 .map(m -> {
                     return new TranscodingRule(m);
                     })
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index 632bc14..79f3b99 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -18,7 +18,6 @@
 package net.shibboleth.idp.attribute.resolver;
 
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
@@ -36,6 +35,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.DisposableBean;
 
 import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2;
 
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
@@ -43,7 +43,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -170,9 +169,11 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final HashSet<ResolverAttributeDefinitionDependency> checkedDeps = new HashSet<>();
-        CollectionSupport.addIf(checkedDeps, dependencies, Predicates.notNull());
-        attributeDependencies = Collections.unmodifiableSet(checkedDeps);
+        if (dependencies != null) {
+            attributeDependencies = Set.copyOf(Collections2.filter(dependencies, Predicates.notNull()));
+        } else {
+            attributeDependencies = Collections.emptySet(); 
+        }
     }
     
     /**
@@ -185,9 +186,11 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final HashSet<ResolverDataConnectorDependency> checkedDeps = new HashSet<>();
-        CollectionSupport.addIf(checkedDeps, dependencies, Predicates.notNull());
-        dataConnectorDependencies = Collections.unmodifiableSet(checkedDeps);
+        if (dependencies != null) {
+            dataConnectorDependencies = Set.copyOf(Collections2.filter(dependencies, Predicates.notNull()));
+        } else {
+            dataConnectorDependencies = Collections.emptySet();
+        }
     }
 
 
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
index b14ad15..e34f3fb 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
@@ -18,8 +18,8 @@
 package net.shibboleth.idp.attribute.resolver.context;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
@@ -45,10 +45,6 @@ import org.opensaml.messaging.context.BaseContext;
 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.ImmutableMap;
-
 /** A context supplying input to the {@link net.shibboleth.idp.attribute.resolver.AttributeResolver} interface. */
 @NotThreadSafe
 public final class AttributeResolutionContext extends BaseContext {
@@ -83,8 +79,8 @@ public final class AttributeResolutionContext extends BaseContext {
     /** Constructor. */
     public AttributeResolutionContext() {
         allowCachedResults = true;
-        requestedAttributeNames = new HashSet<>();
-        resolvedAttributes = new HashMap<>();
+        requestedAttributeNames = Collections.emptySet();
+        resolvedAttributes = Collections.emptyMap();
     }
     
     /**
@@ -282,10 +278,8 @@ public final class AttributeResolutionContext extends BaseContext {
      */
     @Nullable public AttributeResolutionContext setRequestedIdPAttributeNames(
             @Nonnull @NonnullElements final Collection<String> names) {
-        Constraint.isNotNull(names, "Requested IdPAttribute collection cannot be null");
-
-        requestedAttributeNames.clear();
-        requestedAttributeNames.addAll(Collections2.filter(names, Predicates.notNull()));
+        requestedAttributeNames = Set.copyOf(
+                Constraint.isNotNull(names, "Requested IdPAttribute collection cannot be null"));
         
         return this;
     }
@@ -296,7 +290,7 @@ public final class AttributeResolutionContext extends BaseContext {
      * @return set of resolved attributes
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Map<String, IdPAttribute> getResolvedIdPAttributes() {
-        return ImmutableMap.copyOf(resolvedAttributes);
+        return resolvedAttributes;
     }
 
     /**
@@ -308,16 +302,19 @@ public final class AttributeResolutionContext extends BaseContext {
      */
     @Nullable public AttributeResolutionContext setResolvedIdPAttributes(
             @Nullable @NullableElements final Collection<IdPAttribute> attributes) {
-        resolvedAttributes = new HashMap<>();
-
+        
+        final Map<String,IdPAttribute> copy = new HashMap<>();
+        
         if (attributes != null) {
             for (final IdPAttribute attribute : attributes) {
                 if (attribute != null) {
-                    resolvedAttributes.put(attribute.getId(), attribute);
+                    copy.put(attribute.getId(), attribute);
                 }
             }
         }
         
+        resolvedAttributes = Map.copyOf(copy);
+        
         return this;
     }
 
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index beea056..ecbeb4a 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -50,8 +50,7 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.Collections2;
 
 /**
  * Implementation of Mapped Attributes. <br/>
@@ -93,7 +92,11 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        valueMaps = ImmutableSet.copyOf(Iterables.filter(mappings, Predicates.notNull()));
+        if (mappings != null) {
+            valueMaps = Set.copyOf(Collections2.filter(mappings, Predicates.notNull()));
+        } else {
+            valueMaps = Collections.emptySet();
+        }
     }
 
     /**
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
index 4932212..003e1fa 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
@@ -32,8 +32,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.Collections2;
 
 import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -89,7 +88,11 @@ public class ValueMap implements Function<String, Set<StringAttributeValue>> {
      */
     public void setSourceValues(@Nullable @NullableElements final Collection<SourceValue> newValues) {
 
-        sourceValues = ImmutableSet.copyOf(Iterables.filter(newValues, Predicates.notNull()));
+        if (newValues != null) {
+            sourceValues = Set.copyOf(Collections2.filter(newValues, Predicates.notNull()));
+        } else {
+            sourceValues = Collections.emptySet();
+        }
     }
 
     /**
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
index b7096c0..688e9a9 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
@@ -40,12 +40,10 @@ import org.apache.http.entity.ContentType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
+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;
@@ -94,10 +92,8 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
      * 
      * @param statuses successful codes
      */
-    public void setAcceptStatuses(@Nonnull final Collection<Integer> statuses) {
-        Constraint.isNotNull(statuses, "Statuses cannot be null");
-        
-        acceptStatuses = new HashSet<>(Collections2.filter(statuses, Predicates.notNull()));
+    public void setAcceptStatuses(@Nonnull @NonnullElements final Collection<Integer> statuses) {
+        acceptStatuses = Set.copyOf(Constraint.isNotNull(statuses, "Statuses cannot be null"));
     }
 
     /**
@@ -105,10 +101,9 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
      * 
      * @param types types to allow
      */
-    public void setAcceptTypes(@Nonnull final Collection<String> types) {
-        Constraint.isNotNull(types, "Types cannot be null");
-        
-        acceptTypes = new HashSet<>(StringSupport.normalizeStringCollection(types));
+    public void setAcceptTypes(@Nonnull @NonnullElements final Collection<String> types) {
+        acceptTypes = Set.copyOf(StringSupport.normalizeStringCollection(
+                Constraint.isNotNull(types, "Types cannot be null")));
     }
     
     /**
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/DataConnectorFactoryBean.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/DataConnectorFactoryBean.java
index c6c90ac..1f12226 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/DataConnectorFactoryBean.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/DataConnectorFactoryBean.java
@@ -21,7 +21,6 @@ import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.Constructor;
 import java.time.Duration;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -46,11 +45,6 @@ import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.support.GenericApplicationContext;
 import org.springframework.core.io.Resource;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-
 /**
  * A factory bean to collect the parameterization that goes onto a {@link AbstractDataConnector}.
  * 
@@ -135,8 +129,7 @@ public class DataConnectorFactoryBean extends AbstractResolverPluginFactoryBean<
      * @param theResources the resources to look at
      */
     public void setResources(@Nonnull @NonnullElements final List<Resource> theResources) {
-        resources =
-                ImmutableList.<Resource> builder().addAll(Iterables.filter(theResources, Predicates.notNull())).build();
+        resources = List.copyOf(Constraint.isNotNull(theResources, "Resources cannot be null"));
     }
 
     /**
@@ -173,7 +166,8 @@ public class DataConnectorFactoryBean extends AbstractResolverPluginFactoryBean<
      */
     public void setBeanFactoryPostProcessors(@Nonnull @NonnullElements 
             final List<BeanFactoryPostProcessor> processors) {
-        factoryPostProcessors = new ArrayList<>(Collections2.filter(processors, Predicates.notNull()));
+        factoryPostProcessors = List.copyOf(
+                Constraint.isNotNull(processors, "BeanFactoryPostProcessors cannot be null"));
     }
 
     /**
@@ -191,7 +185,7 @@ public class DataConnectorFactoryBean extends AbstractResolverPluginFactoryBean<
      * @param processors bean post processors to apply
      */
     public void setBeanPostProcessors(@Nonnull @NonnullElements final List<BeanPostProcessor> processors) {
-        postProcessors = new ArrayList<>(Collections2.filter(processors, Predicates.notNull()));
+        postProcessors = List.copyOf(Constraint.isNotNull(processors, "BeanPostProcessors cannot be null"));
     }
 
     /**
diff --git a/idp-session-api/src/main/java/net/shibboleth/idp/session/logic/LogoutPropagationFlowDescriptorSelector.java b/idp-session-api/src/main/java/net/shibboleth/idp/session/logic/LogoutPropagationFlowDescriptorSelector.java
index 7dd51f7..f872575 100644
--- a/idp-session-api/src/main/java/net/shibboleth/idp/session/logic/LogoutPropagationFlowDescriptorSelector.java
+++ b/idp-session-api/src/main/java/net/shibboleth/idp/session/logic/LogoutPropagationFlowDescriptorSelector.java
@@ -17,16 +17,12 @@
 
 package net.shibboleth.idp.session.logic;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.idp.session.LogoutPropagationFlowDescriptor;
 import net.shibboleth.idp.session.SPSession;
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
@@ -39,7 +35,7 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 public class LogoutPropagationFlowDescriptorSelector implements Function<SPSession,LogoutPropagationFlowDescriptor> {
 
     /** List of available flows. */
-    private final List<LogoutPropagationFlowDescriptor> availableFlows;
+    @Nonnull @NonnullElements private final List<LogoutPropagationFlowDescriptor> availableFlows;
 
     /**
      * Constructor.
@@ -48,9 +44,7 @@ public class LogoutPropagationFlowDescriptorSelector implements Function<SPSessi
      */
     public LogoutPropagationFlowDescriptorSelector(
             @Nonnull @NonnullElements @ParameterName(name="flows") final List<LogoutPropagationFlowDescriptor> flows) {
-        Constraint.isNotNull(flows, "Flows cannot be null");
-
-        availableFlows = new ArrayList<>(Collections2.filter(flows, Predicates.notNull()));
+        availableFlows = List.copyOf(Constraint.isNotNull(flows, "Flows cannot be null"));
     }
 
     /** {@inheritDoc} */
diff --git a/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java b/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
index 56037cf..1846efe 100644
--- a/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
+++ b/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
@@ -62,10 +62,8 @@ import org.opensaml.storage.VersionMismatchException;
 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.ImmutableList;
-import com.google.common.collect.Iterables;
 
 /**
  * Implementation of {@link SessionManager} and {@link SessionResolver} interfaces that relies on a
@@ -463,11 +461,12 @@ public class StorageBackedSessionManager extends AbstractIdentifiableInitializab
     public void setAuthenticationFlowDescriptors(
             @Nonnull @NonnullElements final Iterable<AuthenticationFlowDescriptor> flows) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(flows, "Flow collection cannot be null");
 
         flowDescriptorMap.clear();
-        for (final AuthenticationFlowDescriptor desc : Iterables.filter(flows, Predicates.notNull())) {
-            flowDescriptorMap.put(desc.getId(), desc);
+        for (final AuthenticationFlowDescriptor desc : Constraint.isNotNull(flows, "Flow collection cannot be null")) {
+            if (desc != null) { 
+                flowDescriptorMap.put(desc.getId(), desc);
+            }
         }
     }
 
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java
index 94edf2a..6176354 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/impl/SetRPUIInformation.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.ui.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Function;
 
@@ -40,9 +39,6 @@ import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.idp.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
@@ -51,6 +47,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.net.HttpServletSupport;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
  * Action to populate the {@link ProfileRequestContext} with a {@link RelyingPartyUIContext}. The contents are populated
@@ -149,11 +146,7 @@ public class SetRPUIInformation extends AbstractProfileAction {
     public void setFallbackLanguages(@Nonnull @NonnullElements final List<String> langs) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        if (langs != null) {
-            fallbackLanguages = new ArrayList<>(Collections2.filter(langs, Predicates.notNull()));
-        } else {
-            fallbackLanguages = null;
-        }
+        fallbackLanguages = List.copyOf(StringSupport.normalizeStringCollection(langs));
     }
 
     /**

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


More information about the commits mailing list