[java-shib-attribute] branch main updated: IDP-2069 Null Handling

Rod Widdowson rdw at steadingsoftware.com
Sat Mar 11 15:51:21 UTC 2023


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

rdw pushed a commit to branch main
in repository java-shib-attribute.

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=150726cb8538bc789032bd054770929d5deeb19e

The following commit(s) were added to refs/heads/main by this push:
     new 150726cb8 IDP-2069 Null Handling
150726cb8 is described below

commit 150726cb8538bc789032bd054770929d5deeb19e
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Mar 11 15:38:59 2023 +0000

    IDP-2069 Null Handling
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Eschew the two parameter getSubContext() method
---
 .../idp/attribute/filter/AttributeRule.java        |  3 ++-
 .../filter/context/AttributeFilterContextTest.java |  4 ++--
 .../context/AttributeFilterWorkContextTest.java    |  6 ++---
 .../attribute/filter/impl/AttributeFilterImpl.java | 12 ++++++----
 .../impl/BaseComplexAttributeFilterTestCase.java   |  2 +-
 .../attribute/filter/matcher/impl/DataSources.java |  4 ++--
 .../saml/impl/AttributeInMetadataMatcherTest.java  |  4 ++--
 .../impl/MappedAttributeInMetadataMatcherTest.java |  4 ++--
 .../impl/PredicatePolicyRuleTest.java              |  6 ++---
 .../impl/ProxiedRequesterPolicyRuleTest.java       |  6 ++---
 .../impl/ProxiedRequesterRegexpPolicyRuleTest.java |  2 +-
 .../policyrule/saml/impl/BaseMetadataTests.java    |  4 ++--
 .../filter/tests/AttributeFilterPolicyTest.java    | 11 ++++-----
 .../tests/AttributeValueFilterPolicyTest.java      |  6 ++---
 .../filter/spring/policy/DataSources.java          |  9 ++++----
 .../policy/ProxiedRequesterRuleParserTest.java     |  7 +++---
 .../testing/BaseAttributeFilterParserTest.java     |  3 +--
 .../attribute/resolver/AbstractResolverPlugin.java |  2 +-
 .../resolver/AbstractAttributeDefinitionTest.java  | 16 ++++++-------
 .../resolver/AbstractDataConnectorTest.java        |  8 +++----
 .../resolver/AbstractResolverPluginTest.java       | 27 +++++++++++-----------
 .../resolver/AttributeResolutionLookupTest.java    |  4 ++--
 .../resolver/impl/AttributeResolverImpl.java       | 13 ++++++-----
 .../ad/impl/DateTimeAttributeDefinitionTest.java   | 12 +++++-----
 .../resolver/ad/impl/DecryptedAttributeTest.java   |  2 +-
 .../idp/attribute/resolver/ad/impl/LogicTest.java  | 11 +++++----
 .../impl/PrincipalNameAttributeDefinitionTest.java |  2 +-
 .../resolver/ad/impl/SimpleAttributeTest.java      | 20 ++++++++--------
 .../ad/impl/StaticAttributeDefinitionTest.java     |  2 +-
 .../resolver/ad/impl/TemplateAttributeTest.java    | 22 +++++++++++-------
 .../dc/impl/SAMLAttributeDataConnectorTest.java    |  5 ++--
 .../dc/impl/ScriptedDataConnectorTest.java         | 10 ++++----
 .../resolver/dc/impl/StaticDataConnectorTest.java  |  2 +-
 .../impl/AttributeResolutionContextTest.java       |  4 ++--
 .../resolver/spring/AttributeResolverTest.java     |  4 ++--
 .../ad/impl/ScriptedAttributeParserTest.java       |  2 +-
 .../spring/ad/impl/SimpleAttributeParserTest.java  |  9 +++-----
 .../resolver/testing/ResolverTestSupport.java      |  2 +-
 .../attribute/resolver/testing/TestSources.java    | 10 ++++----
 39 files changed, 141 insertions(+), 141 deletions(-)

diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
index aa1cac86d..c03174709 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
@@ -175,7 +175,7 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
         Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
 
         final AttributeFilterWorkContext filterWorkContext = Constraint.isNotNull(
-                filterContext.getSubcontext(AttributeFilterWorkContext.class, false),
+                filterContext.getSubcontext(AttributeFilterWorkContext.class),
                 "Attribute filter work context can not be null");
 
         log.debug("{} Filtering values for attribute '{}' which currently contains {} values", getLogPrefix(),
@@ -229,6 +229,7 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
             result = new StringBuffer("Attribute filtering engine '").append(getId()).append("' ").toString();
             logPrefix = result;
         }
+        assert result!=null;
         return result;
     }
 
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
index e45f1942f..443d27a1e 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
@@ -34,7 +34,7 @@ public class AttributeFilterContextTest {
     /** Test that post-construction state is what is expected. */
     @Test public void testPostConstructionState() {
         final AttributeFilterContext context = new AttributeFilterContext();
-        final AttributeFilterWorkContext child = context.getSubcontext(AttributeFilterWorkContext.class, true);
+        final AttributeFilterWorkContext child = context.getOrCreateSubcontext(AttributeFilterWorkContext.class);
         assert child != null;
         
         Assert.assertNotNull(context.getFilteredIdPAttributes());
@@ -120,7 +120,7 @@ public class AttributeFilterContextTest {
         final AttributeFilterContext context = new AttributeFilterContext();
         Assert.assertNull(context.getRequesterMetadataContext());
 
-        final SAMLMetadataContext mas = context.getSubcontext(SAMLMetadataContext.class, true);
+        final SAMLMetadataContext mas = context.getOrCreateSubcontext(SAMLMetadataContext.class);
         context.setRequesterMetadataContextLookupStrategy(new ChildContextLookup<AttributeFilterContext, SAMLMetadataContext>(
                 SAMLMetadataContext.class));
 
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
index c5c2f406b..ab0b9b63a 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
@@ -48,8 +48,7 @@ public class AttributeFilterWorkContextTest {
      */
     @Test public void testPermittedAttributeValues() throws AttributeFilterException {
         final AttributeFilterContext parent = new AttributeFilterContext();
-        final AttributeFilterWorkContext context = parent.getSubcontext(AttributeFilterWorkContext.class, true);
-        assert context != null;
+        final AttributeFilterWorkContext context = parent.getOrCreateSubcontext(AttributeFilterWorkContext.class);
         
         final IdPAttribute attribute1 = new IdPAttribute("one");
         attribute1.setValues(Arrays.asList(aStringAttributeValue, bStringAttributeValue));
@@ -96,8 +95,7 @@ public class AttributeFilterWorkContextTest {
      */
     @Test public void testDeniedAttributeValues() throws AttributeFilterException {
         final AttributeFilterContext parent = new AttributeFilterContext();
-        final AttributeFilterWorkContext context = parent.getSubcontext(AttributeFilterWorkContext.class, true);
-        assert context != null;
+        final AttributeFilterWorkContext context = parent.getOrCreateSubcontext(AttributeFilterWorkContext.class);
 
         final IdPAttribute attribute1 = new IdPAttribute("one");
         attribute1.setValues(Arrays.asList(aStringAttributeValue, bStringAttributeValue));
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
index a85dc8774..638139734 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
@@ -43,6 +43,7 @@ import net.shibboleth.idp.attribute.filter.context.AttributeFilterWorkContext;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
@@ -73,8 +74,8 @@ public class AttributeFilterImpl extends AbstractIdentifiableInitializableCompon
     public AttributeFilterImpl(@Nonnull @NotEmpty final String engineId,
             @Nullable @NonnullElements final Collection<AttributeFilterPolicy> policies) {
         setId(engineId);
-
-        filterPolicies = List.copyOf(policies);
+        assert policies!=null;
+        filterPolicies = CollectionSupport.copyToList(policies);
         
         metricContextLookupStrategy = new ChildContextLookup<>(MetricContext.class).compose(new RootContextLookup<>());
     }
@@ -107,7 +108,7 @@ public class AttributeFilterImpl extends AbstractIdentifiableInitializableCompon
             final Map<String, IdPAttribute> prefilteredAttributes = filterContext.getPrefilteredIdPAttributes();
 
             // Create work context to hold intermediate results.
-            filterContext.getSubcontext(AttributeFilterWorkContext.class, true);
+            filterContext.getOrCreateSubcontext(AttributeFilterWorkContext.class);
 
             log.debug("{} Beginning process of filtering the following {} attributes: {}", new Object[] {getLogPrefix(),
                     prefilteredAttributes.size(), prefilteredAttributes.keySet(),});
@@ -118,8 +119,11 @@ public class AttributeFilterImpl extends AbstractIdentifiableInitializableCompon
             }
 
             for (final Entry<String, IdPAttribute> entry : filterContext.getPrefilteredIdPAttributes().entrySet()) {
+                assert entry!=null;
+                final String key = entry.getKey();
+                assert key!=null;
                 final Collection<IdPAttributeValue> filteredAttributeValues =
-                        getFilteredValues(entry.getKey(), filterContext);
+                        getFilteredValues(key, filterContext);
                 if (null != filteredAttributeValues && !filteredAttributeValues.isEmpty()) {
                     final IdPAttribute filteredAttribute;
                     try {
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java
index 84cc9d0b9..df0324615 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java
@@ -68,7 +68,7 @@ public class BaseComplexAttributeFilterTestCase extends XMLObjectBaseTestCase {
         connector.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         return Constraint.isNotNull(connector.resolve(context), "Resolved Attributes were null");
     }
 
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java
index 17806f8fa..43126237c 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java
@@ -72,7 +72,7 @@ public abstract class DataSources {
 
         final ProfileRequestContext parent = new ProfileRequestContext();
         parent.addSubcontext(TestSources.createResolutionContext(principal, issuerID, recipientId));
-        final AttributeFilterContext retVal = parent.getSubcontext(AttributeFilterContext.class, true);
+        final AttributeFilterContext retVal = parent.getOrCreateSubcontext(AttributeFilterContext.class);
         assert retVal != null;
         retVal.setPrincipal(principal);
         retVal.setAttributeIssuerID(issuerID);
@@ -85,7 +85,7 @@ public abstract class DataSources {
     @Nonnull public static AttributeFilterContext unPopulatedFilterContext() {
 
         final ProfileRequestContext parent = new ProfileRequestContext();
-        final AttributeFilterContext afc = parent.getSubcontext(AttributeFilterContext.class, true);
+        final AttributeFilterContext afc = parent.getOrCreateSubcontext(AttributeFilterContext.class);
         assert afc != null;
         afc.setProfileRequestContextLookupStrategy(new ParentContextLookup<>(ProfileRequestContext.class));
         
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
index 5eb89f105..68a59b1f1 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
@@ -95,10 +95,10 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
 
     private void setRequestedAttributesInContext(final AttributeFilterContext context,
             final Collection<RequestedAttribute> attributes) {
-        final SAMLMetadataContext samlMetadataContext = context.getSubcontext(SAMLMetadataContext.class, true);
+        final SAMLMetadataContext samlMetadataContext = context.getOrCreateSubcontext(SAMLMetadataContext.class);
         assert samlMetadataContext != null;
         final AttributeConsumingServiceContext acsCtx =
-                samlMetadataContext.getSubcontext(AttributeConsumingServiceContext.class, true);
+                samlMetadataContext.getOrCreateSubcontext(AttributeConsumingServiceContext.class);
         assert acsCtx != null;
         final AttributeConsumingService acs =
                 acsCtx.setAttributeConsumingService(acsBuilder.buildObject()).getAttributeConsumingService();
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
index 81bd8e653..e10090f5b 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
@@ -83,10 +83,10 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
     private void setRequestedAttributesInContext(@Nonnull final AttributeFilterContext context,
             @Nonnull final Multimap<String, IdPAttribute> multimap) {
         final AttributesMapContainer container = new AttributesMapContainer(multimap);
-        final SAMLMetadataContext samlMetadataContext = context.getSubcontext(SAMLMetadataContext.class, true);
+        final SAMLMetadataContext samlMetadataContext = context.getOrCreateSubcontext(SAMLMetadataContext.class);
         assert samlMetadataContext != null;
         final AttributeConsumingServiceContext acsCtx =
-                samlMetadataContext.getSubcontext(AttributeConsumingServiceContext.class, true);
+                samlMetadataContext.getOrCreateSubcontext(AttributeConsumingServiceContext.class);
         assert acsCtx != null;
         final AttributeConsumingService acs = acsCtx.setAttributeConsumingService(acsBuilder.buildObject()).getAttributeConsumingService();
         assert acs != null;
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java
index 67e0fcdfe..52b736044 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java
@@ -58,8 +58,7 @@ public class PredicatePolicyRuleTest {
         rule.initialize();
 
         final ProfileRequestContext pc = new ProfileRequestContext();
-        final AttributeFilterContext afc = pc.getSubcontext(AttributeFilterContext.class, true);
-        assert afc != null;
+        final AttributeFilterContext afc = pc.getOrCreateSubcontext(AttributeFilterContext.class);
         afc.setProfileRequestContextLookupStrategy(new ParentContextLookup<>(ProfileRequestContext.class));
         
         assertEquals(rule.matches(afc), Tristate.FALSE);
@@ -72,8 +71,7 @@ public class PredicatePolicyRuleTest {
         rule.initialize();
         
         final ProfileRequestContext pc = new ProfileRequestContext();
-        final AttributeFilterContext afc = pc.getSubcontext(AttributeFilterContext.class, true);
-        assert afc != null;
+        final AttributeFilterContext afc = pc.getOrCreateSubcontext(AttributeFilterContext.class);
         assertEquals(rule.matches(afc), Tristate.FAIL);
     }
     
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java
index 47a87c678..af0e6760d 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java
@@ -71,8 +71,7 @@ public class ProxiedRequesterPolicyRuleTest {
         ctx.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
         
-        final ProxiedRequesterContext proxyCtx = ctx.getSubcontext(ProxiedRequesterContext.class, true);
-        assert proxyCtx != null;
+        final ProxiedRequesterContext proxyCtx = ctx.getOrCreateSubcontext(ProxiedRequesterContext.class);
         
         proxyCtx.getRequesters().addAll(Arrays.asList("foo", "bar"));
 
@@ -90,8 +89,7 @@ public class ProxiedRequesterPolicyRuleTest {
         ctx.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
 
-        final ProxiedRequesterContext proxyCtx = ctx.getSubcontext(ProxiedRequesterContext.class, true);
-        assert proxyCtx != null;
+        final ProxiedRequesterContext proxyCtx = ctx.getOrCreateSubcontext(ProxiedRequesterContext.class);
 
         proxyCtx.getRequesters().addAll(Arrays.asList("foo", "bar"));
 
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java
index 99c212bc3..e341b424e 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java
@@ -63,7 +63,7 @@ public class ProxiedRequesterRegexpPolicyRuleTest {
         ctx.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
         
-        final ProxiedRequesterContext proxyCtx = ctx.getSubcontext(ProxiedRequesterContext.class, true);
+        final ProxiedRequesterContext proxyCtx = ctx.getOrCreateSubcontext(ProxiedRequesterContext.class);
         assert proxyCtx != null;
         
         proxyCtx.getRequesters().addAll(Arrays.asList("foo", "bar"));
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java
index 3e9ad7f49..ceb37a112 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java
@@ -98,7 +98,7 @@ public class BaseMetadataTests extends XMLObjectBaseTestCase {
     static protected AttributeFilterContext reqMetadataContext(EntityDescriptor sp, String principal) {
 
         final AttributeFilterContext filterContext = new AttributeFilterContext();
-        final SAMLMetadataContext metadataContext = filterContext.getSubcontext(SAMLMetadataContext.class, true);
+        final SAMLMetadataContext metadataContext = filterContext.getOrCreateSubcontext(SAMLMetadataContext.class);
         assert metadataContext != null;
         
         metadataContext.setEntityDescriptor(sp);
@@ -115,7 +115,7 @@ public class BaseMetadataTests extends XMLObjectBaseTestCase {
     @Nonnull static protected AttributeFilterContext issMetadataContext(EntityDescriptor idp, String principal) {
 
         final AttributeFilterContext filterContext = new AttributeFilterContext();
-        final SAMLMetadataContext metadataContext = filterContext.getSubcontext(SAMLMetadataContext.class, true);
+        final SAMLMetadataContext metadataContext = filterContext.getOrCreateSubcontext(SAMLMetadataContext.class);
         assert metadataContext != null;
         
         metadataContext.setEntityDescriptor(idp);
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java
index d0aea6203..b06e4b07f 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java
@@ -165,7 +165,7 @@ public class AttributeFilterPolicyTest {
         policy.initialize();
 
         AttributeFilterContext context = new AttributeFilterContext();
-        context.getSubcontext(AttributeFilterWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeFilterWorkContext.class);
 
         IdPAttribute attribute = new IdPAttribute(ATTR_NAME);
 
@@ -188,7 +188,7 @@ public class AttributeFilterPolicyTest {
     @Test public void testApply() throws ComponentInitializationException, AttributeFilterException {
         
         AttributeFilterContext ctx = apply(Tristate.TRUE);
-        AttributeFilterWorkContext workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, false);
+        AttributeFilterWorkContext workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class);
         assert workCtx != null;
         
         final Collection<?> values = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
@@ -200,12 +200,12 @@ public class AttributeFilterPolicyTest {
         Assert.assertNull(workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME_2));
 
         ctx = apply(Tristate.FALSE);
-        workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, false);
+        workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class);
         assert workCtx != null;
         Assert.assertNull(workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME));
 
         ctx = apply(Tristate.FAIL);
-        workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, false);
+        workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class);
         assert workCtx != null;
         Assert.assertNull(workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME));
 }
@@ -216,8 +216,7 @@ public class AttributeFilterPolicyTest {
         // Empty attribute
         //
         final AttributeFilterContext ctx = new AttributeFilterContext();
-        final AttributeFilterWorkContext workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, true);
-        assert workCtx != null;
+        final AttributeFilterWorkContext workCtx = ctx.getOrCreateSubcontext(AttributeFilterWorkContext.class);
         
         final IdPAttribute attribute = new IdPAttribute(ATTR_NAME);
         attribute.setValues(Collections.emptyList());
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java
index fdcf10438..3f381c0b8 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java
@@ -207,8 +207,7 @@ public class AttributeValueFilterPolicyTest {
 
         AttributeFilterContext context = new AttributeFilterContext();
         context.setPrefilteredIdPAttributes(Arrays.asList(attribute1));
-        AttributeFilterWorkContext workCtx = context.getSubcontext(AttributeFilterWorkContext.class, true);
-        assert workCtx != null;
+        AttributeFilterWorkContext workCtx = context.getOrCreateSubcontext(AttributeFilterWorkContext.class);
         
         policy.apply(attribute1, context);
         Collection<IdPAttributeValue> result = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
@@ -225,8 +224,7 @@ public class AttributeValueFilterPolicyTest {
         policy.initialize();
 
         context = new AttributeFilterContext();
-        workCtx = context.getSubcontext(AttributeFilterWorkContext.class, true);
-        assert workCtx != null;
+        workCtx = context.getOrCreateSubcontext(AttributeFilterWorkContext.class);
         context.setPrefilteredIdPAttributes(Arrays.asList(attribute1));
 
         policy.apply(attribute1, context);
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java
index 310c4523b..0e07b7063 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java
@@ -19,6 +19,8 @@ package net.shibboleth.idp.attribute.filter.spring.policy;
 
 import javax.annotation.Nonnull;
 
+import org.opensaml.messaging.context.MessageContext;
+
 import net.shibboleth.idp.attribute.ByteAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
@@ -28,8 +30,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
-import org.opensaml.messaging.context.MessageContext;
-
 /**
  * Strings and such used for testing.
  */
@@ -72,8 +72,7 @@ public abstract class DataSources {
 
         final MessageContext parent = new MessageContext();
         parent.addSubcontext(TestSources.createResolutionContext(principal, issuerID, recipientId));
-        final AttributeFilterContext retVal = parent.getSubcontext(AttributeFilterContext.class, true);
-        assert retVal != null;
+        final AttributeFilterContext retVal = parent.getOrCreateSubcontext(AttributeFilterContext.class);
         retVal.setPrincipal(principal);
         retVal.setAttributeIssuerID(issuerID);
         retVal.setAttributeRecipientID(recipientId);
@@ -84,7 +83,7 @@ public abstract class DataSources {
 
         final MessageContext parent = new MessageContext();
         parent.addSubcontext(new AttributeResolutionContext());
-        final AttributeFilterContext afc = parent.getSubcontext(AttributeFilterContext.class, true);
+        final AttributeFilterContext afc = parent.getOrCreateSubcontext(AttributeFilterContext.class);
         assert afc != null;
         return afc;
     }
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
index 4c81130eb..ff08d237e 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
@@ -58,8 +58,8 @@ public class ProxiedRequesterRuleParserTest extends BaseAttributeFilterParserTes
         filterContext.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
         
-        final ProxiedRequesterContext prc = filterContext.getSubcontext(ProxiedRequesterContext.class, true); 
-        assert prc != null;
+        final ProxiedRequesterContext prc = filterContext.getOrCreateSubcontext(ProxiedRequesterContext.class); 
+
         prc.getRequesters().addAll(Arrays.asList("foo", "bar"));
         
         
@@ -79,8 +79,7 @@ public class ProxiedRequesterRuleParserTest extends BaseAttributeFilterParserTes
                 DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
         filterContext.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
-        final ProxiedRequesterContext prc = filterContext.getSubcontext(ProxiedRequesterContext.class, true); 
-        assert prc != null;
+        final ProxiedRequesterContext prc = filterContext.getOrCreateSubcontext(ProxiedRequesterContext.class); 
         prc.getRequesters().addAll(Arrays.asList("foo", "bar"));
 
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java
index d7e2f13c8..0b2d67cf2 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
 import org.opensaml.saml.ext.saml2mdattr.EntityAttributes;
@@ -102,7 +101,7 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
         connector.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         return Constraint.isNotNull(connector.resolve(context), "Attributes were null");
     }
     
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index 4899e13d1..83bc2e468 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -189,7 +189,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
             }
     
             final AttributeResolverWorkContext workContext =
-                    resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                    resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
             try {
                 if (workContext == null) {
                     throw new ResolutionException("AttributeResolverWorkContext cannot be null");
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
index bede14389..9cb803a1a 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
@@ -17,21 +17,21 @@
 
 package net.shibboleth.idp.attribute.resolver;
 
-import java.util.Collections;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
 /**
  * Unit test for {@link AttributeDefinition}. This test does not test any methods inherited from
  * {@link ResolverPlugin}, those are covered in {@link AbstractResolverPluginTest}.
@@ -78,7 +78,7 @@ public class AbstractAttributeDefinitionTest {
     @Test
     public void resolve() throws Exception {
         AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
 
         MockAttributeDefinition definition = new MockAttributeDefinition("foo", (IdPAttribute) null);
         definition.initialize();
@@ -97,9 +97,9 @@ public class AbstractAttributeDefinitionTest {
         MockAttributeDefinition definition = new MockAttributeDefinition("foo", null);
         
         final ResolverDataConnectorDependency dc  = new ResolverDataConnectorDependency("dc");
-        dc.setAttributeNames(Collections.singletonList("da"));
-        definition.setDataConnectorDependencies(Collections.singleton(dc));
-        definition.setAttributeDependencies(Collections.singleton(new ResolverAttributeDefinitionDependency("ad")));
+        dc.setAttributeNames(CollectionSupport.singletonList("da"));
+        definition.setDataConnectorDependencies(CollectionSupport.singleton(dc));
+        definition.setAttributeDependencies(CollectionSupport.singleton(new ResolverAttributeDefinitionDependency("ad")));
         definition.initialize();
         
         final Set<ResolverDataConnectorDependency> dDepends = definition.getDataConnectorDependencies();
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
index 6d800f173..5648699ff 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
@@ -24,7 +24,6 @@ import static org.testng.Assert.assertTrue;
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -36,6 +35,7 @@ import org.testng.annotations.Test;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.collection.CollectionSupport;
 
 /**
  * Unit test for {@link DataConnector}. This test does not test any methods inherited from
@@ -72,7 +72,7 @@ public class AbstractDataConnectorTest {
      */
     @Test public void resolve() throws Exception {
         AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
 
         MockBaseDataConnector connector = new MockBaseDataConnector("foo", (Map<String, IdPAttribute>) null);
         connector.initialize();
@@ -98,7 +98,7 @@ public class AbstractDataConnectorTest {
     @Test public void testExports() {
         final AbstractDataConnector connector = new MockBaseDataConnector("foo", null);
         assertTrue(connector.getExportAttributes().isEmpty());
-        connector.setExportAttributes(List.of("bar", "foo", "bar", "foo"));
+        connector.setExportAttributes(CollectionSupport.listOf("bar", "foo", "bar", "foo"));
         assertEquals(connector.getExportAttributes().size(), 2);
     }
 
@@ -117,7 +117,7 @@ public class AbstractDataConnectorTest {
          * @param id id of the data connector
          * @param values values returned for {@link #resolve(AttributeResolutionContext)}
          */
-        public MockBaseDataConnector(final String id, final Map<String, IdPAttribute> values) {
+        public MockBaseDataConnector(@Nonnull final String id, final Map<String, IdPAttribute> values) {
             setId(id);
             staticValues = values;
         }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
index 2ccf86aff..55c9a79a2 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
@@ -17,24 +17,25 @@
 
 package net.shibboleth.idp.attribute.resolver;
 
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
-import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
-
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Predicates;
 
+import net.shibboleth.idp.attribute.IdPAttribute;
+import net.shibboleth.idp.attribute.StringAttributeValue;
+import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
+import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.collection.CollectionSupport;
+import net.shibboleth.shared.logic.PredicateSupport;
+
 /** Unit test for {@link ResolverPlugin}. */
 @SuppressWarnings("javadoc")
 public class AbstractResolverPluginTest {
@@ -56,7 +57,7 @@ public class AbstractResolverPluginTest {
     @Test public void activationCriteria() {
         final MockBaseAttributeResolver plugin = new MockBaseAttributeResolver(" foo ", "bar");
 
-        plugin.setActivationCondition(Predicates.alwaysFalse());
+        plugin.setActivationCondition(PredicateSupport.alwaysFalse());
         Assert.assertEquals(plugin.getActivationCondition(), Predicates.alwaysFalse());
     }
 
@@ -141,7 +142,7 @@ public class AbstractResolverPluginTest {
      */
     @Test public void resolver() throws Exception {
         AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         MockBaseAttributeResolver plugin = new MockBaseAttributeResolver("foo", "bar");
         plugin.initialize();
 
@@ -151,7 +152,7 @@ public class AbstractResolverPluginTest {
 
         context = new AttributeResolutionContext();
         plugin = new MockBaseAttributeResolver(" foo ", "bar");
-        plugin.setActivationCondition(Predicates.<ProfileRequestContext> alwaysFalse());
+        plugin.setActivationCondition(PredicateSupport.<ProfileRequestContext> alwaysFalse());
 
         plugin.initialize();
         Assert.assertNull(plugin.resolve(context));
@@ -172,10 +173,10 @@ public class AbstractResolverPluginTest {
          * @param id id of this plugin
          * @param value value returned by resolution
          */
-        public MockBaseAttributeResolver(String id, String value) {
+        public MockBaseAttributeResolver(@Nonnull String id, @Nonnull String value) {
             resolverValue = new IdPAttribute(id);
             setId(id);
-            resolverValue.setValues(Collections.singletonList(new StringAttributeValue(value)));
+            resolverValue.setValues(CollectionSupport.singletonList(new StringAttributeValue(value)));
         }
 
         /** {@inheritDoc} */
@@ -185,8 +186,8 @@ public class AbstractResolverPluginTest {
         }
 
         /** {@inheritDoc} */
-        protected IdPAttribute doAttributeDefinitionResolve(AttributeResolutionContext resolutionContext,
-                AttributeResolverWorkContext workContext) throws ResolutionException {
+        protected IdPAttribute doAttributeDefinitionResolve(@Nonnull AttributeResolutionContext resolutionContext,
+                @Nonnull AttributeResolverWorkContext workContext) throws ResolutionException {
             return resolverValue;
         }
     }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
index 967aa5386..576e09b90 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
@@ -36,7 +36,7 @@ public class AttributeResolutionLookupTest {
     
     @Test public void apply() {
         final ProfileRequestContext pfc = new ProfileRequestContext();
-        final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+        final AttributeResolutionContext arc = pfc.getOrCreateSubcontext(AttributeResolutionContext.class);
         assert arc != null;
         arc.setAttributeIssuerID("child");
 
@@ -46,7 +46,7 @@ public class AttributeResolutionLookupTest {
     
     @Test public void applyParent() {
         final AttributeResolutionContext parent = new AttributeResolutionContext();
-        final ProfileRequestContext pfc = parent.getSubcontext(ProfileRequestContext.class, true);
+        final ProfileRequestContext pfc = parent.getOrCreateSubcontext(ProfileRequestContext.class);
         parent.setAttributeIssuerID("parent");
 
         final TestClass what = new TestClass();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index 80ccb8056..8e969ed8f 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -191,8 +191,7 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
 
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, true);
-        assert workContext != null;
+                resolutionContext.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         AttributeContext attributeContext = null;
 
         final boolean timerStarted = startTimer(resolutionContext);
@@ -207,14 +206,16 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
                 }
                 finalizePreResolvedAttributes(resolutionContext);
             }
-            attributeContext = resolutionContext.getSubcontext(AttributeContext.class, true);
+            attributeContext = resolutionContext.getOrCreateSubcontext(AttributeContext.class);
 
             boolean hasExportingDataConnector = false;
 
             for (final Entry<String, DataConnector> dataConnectorEntry : dataConnectors.entrySet()) {
                 if (!dataConnectorEntry.getValue().getExportAttributes().isEmpty()) {
                     hasExportingDataConnector = true;
-                    resolveDataConnector(dataConnectorEntry.getKey(), resolutionContext);
+                    final String key = dataConnectorEntry.getKey();
+                    assert key!=null;
+                    resolveDataConnector(key, resolutionContext);
                 }
             }
 
@@ -228,6 +229,7 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
             log.debug("{} Attempting to resolve the following attribute definitions {}", logPrefix, attributeIds);
     
             for (final String attributeId : attributeIds) {
+                assert attributeId!=null;
                 resolveAttributeDefinition(attributeId, resolutionContext);
             }
     
@@ -606,8 +608,7 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
             return;
         }
 
-        final AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class, true);
-        assert context != null;
+        final AttributeContext context = resolutionContext.getOrCreateSubcontext(AttributeContext.class);
         log.debug("Pre-resolved Attributes: {}", resolvedAttributes.keySet());
         context.setIdPAttributes(resolvedAttributes.values());
         context.setUnfilteredIdPAttributes(resolvedAttributes.values());
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
index c39122f2a..29e7db4d7 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
@@ -73,11 +73,11 @@ public class DateTimeAttributeDefinitionTest {
         } catch (final ComponentInitializationException e) {
             //OK
         }
-        simple.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
+        simple.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
         simple.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final IdPAttribute result = simple.resolve(context);
         assert result != null;
         
@@ -98,8 +98,8 @@ public class DateTimeAttributeDefinitionTest {
     private void errors(boolean ignore) throws ComponentInitializationException, ResolutionException {
         final AbstractAttributeDefinition sa = new AbstractAttributeDefinition() {
 
-            protected IdPAttribute doAttributeDefinitionResolve(AttributeResolutionContext resolutionContext,
-                    AttributeResolverWorkContext workContext) throws ResolutionException {
+            protected IdPAttribute doAttributeDefinitionResolve(@Nonnull AttributeResolutionContext resolutionContext,
+                    @Nonnull AttributeResolverWorkContext workContext) throws ResolutionException {
                 final IdPAttribute result = new IdPAttribute(TEST_ATTRIBUTE_NAME+"in");
                 result.setValues(List.of(EmptyAttributeValue.NULL, EmptyAttributeValue.ZERO_LENGTH, new StringAttributeValue(STRING_SECS)));
                 return result;
@@ -110,7 +110,7 @@ public class DateTimeAttributeDefinitionTest {
 
         final DateTimeAttributeDefinition datetime = new DateTimeAttributeDefinition();
         datetime.setId(TEST_ATTRIBUTE_NAME);
-        datetime.setAttributeDependencies(Set.of(TestSources.makeAttributeDefinitionDependency(TEST_ATTRIBUTE_NAME+"in")));
+        datetime.setAttributeDependencies(CollectionSupport.setOf(TestSources.makeAttributeDefinitionDependency(TEST_ATTRIBUTE_NAME+"in")));
         datetime.setIgnoreConversionErrors(ignore);
         datetime.initialize();
 
@@ -118,7 +118,7 @@ public class DateTimeAttributeDefinitionTest {
         resolver.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         
         try {
             resolver.resolveAttributes(context);
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
index 6dbab1134..f0cbf79ef 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
@@ -117,7 +117,7 @@ public class DecryptedAttributeTest {
         decrypted.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final IdPAttribute result = decrypted.resolve(context);
         assert result != null;
 
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
index 09cdba10a..7f3aa0ce0 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
@@ -30,6 +30,7 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.logic.AttributeIssuerIdPredicate;
 import net.shibboleth.idp.attribute.resolver.logic.AttributePrincipalPredicate;
 import net.shibboleth.idp.attribute.resolver.logic.AttributeRecipientIdPredicate;
+import net.shibboleth.shared.collection.CollectionSupport;
 
 /**
  * Test for {@link AttributeIssuerIdPredicate}, {@link AttributePrincipalPredicate} and {@link AttributeRecipientIdPredicate}.
@@ -37,9 +38,9 @@ import net.shibboleth.idp.attribute.resolver.logic.AttributeRecipientIdPredicate
 @SuppressWarnings("javadoc")
 public class LogicTest {
 
-    final private AttributeIssuerIdPredicate aiip = new AttributeIssuerIdPredicate(Collections.singleton("AII"));
+    final private AttributeIssuerIdPredicate aiip = new AttributeIssuerIdPredicate(CollectionSupport.singleton("AII"));
     final private AttributePrincipalPredicate app = new AttributePrincipalPredicate(Lists.newArrayList("AP", "Principal"));
-    final private AttributeRecipientIdPredicate arip = new AttributeRecipientIdPredicate(Collections.singleton("ARI"));
+    final private AttributeRecipientIdPredicate arip = new AttributeRecipientIdPredicate(CollectionSupport.singleton("ARI"));
     
 
     @Test public void empty() {
@@ -49,7 +50,7 @@ public class LogicTest {
         assertFalse(app.test(pfc));
         assertFalse(arip.test(pfc));
 
-        pfc.getSubcontext(AttributeResolutionContext.class, true);
+        pfc.getOrCreateSubcontext(AttributeResolutionContext.class);
         assertFalse(aiip.test(pfc));
         assertFalse(app.test(pfc));
         assertFalse(arip.test(pfc));
@@ -57,7 +58,7 @@ public class LogicTest {
     
     @Test public void wrong() {
         final ProfileRequestContext pfc = new ProfileRequestContext();
-        final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+        final AttributeResolutionContext arc = pfc.getOrCreateSubcontext(AttributeResolutionContext.class);
         assert arc != null;
         
         arc.setAttributeIssuerID("badValue");
@@ -71,7 +72,7 @@ public class LogicTest {
 
     @Test public void correct() {
         final ProfileRequestContext pfc = new ProfileRequestContext();
-        final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+        final AttributeResolutionContext arc = pfc.getOrCreateSubcontext(AttributeResolutionContext.class);
         assert arc != null;
         
         arc.setAttributeIssuerID("AII");
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
index c25f95410..45dfae460 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
@@ -41,7 +41,7 @@ public class PrincipalNameAttributeDefinitionTest {
         defn.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         
         try {
             defn.resolve(context);
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
index ead114b0f..fbee8d4f7 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
@@ -27,6 +27,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
@@ -72,11 +74,11 @@ public class SimpleAttributeTest {
         } catch (final ComponentInitializationException e) {
             //OK
         }
-        simple.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
+        simple.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
         simple.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final IdPAttribute result = simple.resolve(context);
         assert result != null;
 
@@ -91,8 +93,8 @@ public class SimpleAttributeTest {
     private void nulls(boolean strip) throws ComponentInitializationException, ResolutionException {
         final AbstractAttributeDefinition sa = new AbstractAttributeDefinition() {
 
-            protected IdPAttribute doAttributeDefinitionResolve(AttributeResolutionContext resolutionContext,
-                    AttributeResolverWorkContext workContext) throws ResolutionException {
+            protected IdPAttribute doAttributeDefinitionResolve(@Nonnull AttributeResolutionContext resolutionContext,
+                    @Nonnull AttributeResolverWorkContext workContext) throws ResolutionException {
                 final IdPAttribute result = new IdPAttribute(TEST_ATTRIBUTE_NAME+"in");
                 result.setValues(List.of(EmptyAttributeValue.NULL, EmptyAttributeValue.ZERO_LENGTH, new StringAttributeValue("foo")));
                 return result;
@@ -103,7 +105,7 @@ public class SimpleAttributeTest {
 
         final SimpleAttributeDefinition simple = new SimpleAttributeDefinition();
         simple.setId(TEST_ATTRIBUTE_NAME);
-        simple.setAttributeDependencies(Set.of(TestSources.makeAttributeDefinitionDependency(TEST_ATTRIBUTE_NAME+"in")));
+        simple.setAttributeDependencies(CollectionSupport.setOf(TestSources.makeAttributeDefinitionDependency(TEST_ATTRIBUTE_NAME+"in")));
         simple.setStripNulls(strip);
         simple.initialize();
 
@@ -111,7 +113,7 @@ public class SimpleAttributeTest {
         resolver.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         resolver.resolveAttributes(context);
 
         final IdPAttribute result = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME);
@@ -223,7 +225,7 @@ public class SimpleAttributeTest {
 
         final SimpleAttributeDefinition simple = new SimpleAttributeDefinition();
         simple.setId(TEST_ATTRIBUTE_NAME);
-        simple.setDataConnectorDependencies(Collections.singleton(depend));
+        simple.setDataConnectorDependencies(CollectionSupport.singleton(depend));
         simple.initialize();
 
         final IdPAttribute result = simple.resolve(resolutionContext);
@@ -248,9 +250,9 @@ public class SimpleAttributeTest {
         final SimpleAttributeDefinition simple = new SimpleAttributeDefinition();
         simple.setId(TEST_ATTRIBUTE_NAME);
 
-        simple.setAttributeDependencies(Collections.singleton(
+        simple.setAttributeDependencies(CollectionSupport.singleton(
                 TestSources.makeAttributeDefinitionDependency(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR)));
-        simple.setDataConnectorDependencies(Collections.singleton(
+        simple.setDataConnectorDependencies(CollectionSupport.singleton(
                 TestSources.makeDataConnectorDependency(TestSources.STATIC_CONNECTOR_NAME,
                         TestSources.DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR)));
         simple.initialize();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
index 4f6269819..806ee60a4 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
@@ -75,7 +75,7 @@ public class StaticAttributeDefinitionTest {
         assertNotNull(attrDef.getValue());
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         IdPAttribute result = attrDef.resolve(context);
         assert result != null;
         assertEquals(result.getId(), "attribute");
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
index d1138556c..bf203f95d 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
@@ -17,7 +17,11 @@
 
 package net.shibboleth.idp.attribute.resolver.ad.impl;
 
-import static org.testng.Assert.*;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -44,6 +48,7 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContex
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImplTest;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.collection.LazySet;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
@@ -93,6 +98,7 @@ public class TemplateAttributeTest {
                 fail("couldn't create engine", e);
             }
         }
+        assert engineSingleton!=null;
         return engineSingleton;
     }
 
@@ -108,7 +114,7 @@ public class TemplateAttributeTest {
         TemplateAttributeDefinition attr = new TemplateAttributeDefinition();
         attr.setId(name);
         assertNull(attr.getTemplate());
-        attr.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
+        attr.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
         try {
             attr.initialize();
             fail("No template");
@@ -120,7 +126,7 @@ public class TemplateAttributeTest {
         assertNull(attr.getTemplateText());
         attr.setTemplateText(TEST_ATTRIBUTES_TEMPLATE_ATTR);
         assertNull(attr.getVelocityEngine());
-        attr.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
+        attr.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
         try {
             attr.initialize();
             fail("engine");
@@ -140,12 +146,12 @@ public class TemplateAttributeTest {
         }
         assertNotNull(attr.getTemplateText());
 
-        attr.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
+        attr.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
         
         attr.initialize();
         assertNotNull(attr.getTemplate());
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final IdPAttribute val = attr.resolve(context);
         assert val != null;
         final Collection<?> results = val.getValues();
@@ -156,7 +162,7 @@ public class TemplateAttributeTest {
         attr.setId(name);
         attr.setVelocityEngine(getEngine());
         attr.setTemplateText(TEST_ATTRIBUTES_TEMPLATE_ATTR);
-        attr.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
+        attr.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", "bar")));
         
         attr.initialize();
         assertNotNull(attr.getTemplate());
@@ -169,7 +175,7 @@ public class TemplateAttributeTest {
         attr = new TemplateAttributeDefinition();
         attr.setId(name);
         attr.setVelocityEngine(getEngine());
-        attr.setDataConnectorDependencies(Collections.singleton(TestSources.makeDataConnectorDependency("foo", TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR)));
+        attr.setDataConnectorDependencies(CollectionSupport.singleton(TestSources.makeDataConnectorDependency("foo", TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR)));
         try {
             attr.initialize();
             fail("No Text or attributes");
@@ -241,7 +247,7 @@ public class TemplateAttributeTest {
         ds.add(TestSources.makeAttributeDefinitionDependency(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR));
         
         templateDef.setAttributeDependencies(ds);
-        templateDef.setDataConnectorDependencies(Collections.singleton(
+        templateDef.setDataConnectorDependencies(CollectionSupport.singleton(
                 TestSources.makeDataConnectorDependency(TestSources.STATIC_CONNECTOR_NAME,
                             TestSources.DEPENDS_ON_SECOND_ATTRIBUTE_NAME)));
         templateDef.initialize();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
index ee4e26352..f4d11209a 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
@@ -59,7 +60,7 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
         connector.initialize();
     
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final Map<String, IdPAttribute> attributes = connector.resolve(context);
         assert attributes != null;
         assertEquals(attributes.size(), 2);
@@ -79,7 +80,7 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
 
         final EntityAttributes obj;
 
-        public Locator(String path) {
+        public Locator(@Nonnull String path) {
             obj = (EntityAttributes) unmarshallElement(path);
         }
 
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
index b294bb013..9b56dcea9 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
@@ -62,9 +62,8 @@ public class ScriptedDataConnectorTest {
 
         connector.initialize();
 
-        final AttributeResolutionContext context = new ProfileRequestContext().getSubcontext(AttributeResolutionContext.class,  true);
-        assert context != null;
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        final AttributeResolutionContext context = new ProfileRequestContext().getOrCreateSubcontext(AttributeResolutionContext.class);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         
         connector.resolve(context);
     }
@@ -82,9 +81,8 @@ public class ScriptedDataConnectorTest {
 
         connector.initialize();
 
-        final AttributeResolutionContext context = new ProfileRequestContext().getSubcontext(AttributeResolutionContext.class,  true);
-        assert context != null;
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        final AttributeResolutionContext context = new ProfileRequestContext().getOrCreateSubcontext(AttributeResolutionContext.class);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final Map<String, IdPAttribute> result = connector.resolve(context);
         assert result != null;
         
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
index 7159ab3e9..acbd123da 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
@@ -76,7 +76,7 @@ public class StaticDataConnectorTest {
         assertEquals(connector.getAttributes().size(), 2);
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        context.getSubcontext(AttributeResolverWorkContext.class, true);
+        context.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         final Map<String, IdPAttribute> result = connector.resolve(context);
         assert result != null;
         
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
index 51e5c7505..81ac9d201 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
@@ -103,7 +103,7 @@ public class AttributeResolutionContextTest {
     
     @Test public void lookupsParent() {
         final ProfileRequestContext profileCtx = new ProfileRequestContext();
-        final AttributeResolutionContext context = profileCtx.getSubcontext(AttributeResolutionContext.class, true);
+        final AttributeResolutionContext context = profileCtx.getOrCreateSubcontext(AttributeResolutionContext.class);
         assert context != null;
 
         context.setPrincipal(THE_PRINCIPAL);
@@ -125,7 +125,7 @@ public class AttributeResolutionContextTest {
         
     @Test public void lookupsChild() {
         final AttributeResolutionContext context = new AttributeResolutionContext();
-        final ProfileRequestContext profileCtx = context.getSubcontext(ProfileRequestContext.class, true);
+        final ProfileRequestContext profileCtx = context.getOrCreateSubcontext(ProfileRequestContext.class);
         
         context.setPrincipal(THE_PRINCIPAL);
         context.setAttributeIssuerID(THE_ISSUER);
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
index 0b33d50ba..7f71eb982 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
@@ -433,14 +433,14 @@ public class AttributeResolverTest extends OpenSAMLInitBaseTestCase {
         resolutionContext = TestSources.createResolutionContext("PETER", "issuer", "recipient");
         resolutionContext.setProfileRequestContextLookupStrategy(new ChildContextLookup<>(ProfileRequestContext.class));
         // add a child so we can navigate via that
-        resolutionContext.getSubcontext(ProfileRequestContext.class, true);
+        resolutionContext.getOrCreateSubcontext(ProfileRequestContext.class);
         resolver.resolveAttributes(resolutionContext);
         assertEquals(resolutionContext.getResolvedIdPAttributes().size(), 1);
         assertNotNull(resolutionContext.getResolvedIdPAttributes().get("EPA1"));
 
         resolutionContext = TestSources.createResolutionContext("PRINCIPAL", "ISSUER", "recipient");
         resolutionContext.setProfileRequestContextLookupStrategy(new ChildContextLookup<>(ProfileRequestContext.class));
-        resolutionContext.getSubcontext(ProfileRequestContext.class, true);
+        resolutionContext.getOrCreateSubcontext(ProfileRequestContext.class);
         resolver.resolveAttributes(resolutionContext);
         assertEquals(resolutionContext.getResolvedIdPAttributes().size(), 1);
         assertNotNull(resolutionContext.getResolvedIdPAttributes().get("EPE"));
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java
index 6b4008276..b8c0ae364 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java
@@ -78,7 +78,7 @@ public class ScriptedAttributeParserTest extends BaseAttributeDefinitionParserTe
         try {
             final ScriptedAttributeDefinition  attrdef =  getAttributeDefn("resolver/scriptedAttributeBad.xml", ScriptedAttributeDefinition.class);
             AttributeResolutionContext arc = new AttributeResolutionContext();
-            arc.getSubcontext(AttributeResolverWorkContext.class, true);
+            arc.getOrCreateSubcontext(AttributeResolverWorkContext.class);
             attrdef.resolve(arc);
             fail("Bad script worked?");
         } catch (BeanDefinitionStoreException | BeanCreationException | ResolutionException e) {
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java
index 6e7634613..c1d00f1fc 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java
@@ -128,8 +128,7 @@ public class SimpleAttributeParserTest extends BaseAttributeDefinitionParserTest
         final ResolutionLabelPredicate pre = (ResolutionLabelPredicate) attr.getActivationCondition();
         assert pre != null;
         final ProfileRequestContext prc = new ProfileRequestContext();
-        final AttributeResolutionContext resContext = prc.getSubcontext(AttributeResolutionContext.class, true);
-        assert resContext != null;
+        final AttributeResolutionContext resContext = prc.getOrCreateSubcontext(AttributeResolutionContext.class);
         resContext.setResolutionLabel("p1");
         assertTrue(pre.test(prc));
         resContext.setResolutionLabel("p2 p3");
@@ -157,8 +156,7 @@ public class SimpleAttributeParserTest extends BaseAttributeDefinitionParserTest
         final Predicate<ProfileRequestContext> pre = attr.getActivationCondition();
         assert pre != null;
         final ProfileRequestContext prc = new ProfileRequestContext();
-        final AttributeResolutionContext resContext = prc.getSubcontext(AttributeResolutionContext.class, true);
-        assert resContext != null;
+        final AttributeResolutionContext resContext = prc.getOrCreateSubcontext(AttributeResolutionContext.class);
         resContext.setResolutionLabel("p1");
         assertFalse(pre.test(prc));
         resContext.setResolutionLabel("p2 p3");
@@ -186,8 +184,7 @@ public class SimpleAttributeParserTest extends BaseAttributeDefinitionParserTest
         final Predicate<ProfileRequestContext> pre = attr.getActivationCondition();
         assert pre != null;
         final ProfileRequestContext prc = new ProfileRequestContext();
-        final AttributeResolutionContext resContext = prc.getSubcontext(AttributeResolutionContext.class, true);
-        assert resContext != null;
+        final AttributeResolutionContext resContext = prc.getOrCreateSubcontext(AttributeResolutionContext.class);
         
         resContext.setResolutionLabel("p1");
         assertTrue(pre.test(prc));
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java
index 0432cd13e..f573d547e 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java
@@ -71,7 +71,7 @@ public class ResolverTestSupport {
     @Nonnull public static AttributeResolutionContext buildResolutionContext(final ResolverPlugin<?>... plugins) {
         final AttributeResolutionContext resolutionContext = new AttributeResolutionContext();
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, true);
+                resolutionContext.getOrCreateSubcontext(AttributeResolverWorkContext.class);
 
         assert workContext != null;
         
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
index 4b55a742e..c46e0792f 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
@@ -157,7 +157,7 @@ public final class TestSources {
         attributeSet.add(attr);
 
         attr = new IdPAttribute(DEPENDS_ON_SECOND_ATTRIBUTE_NAME);
-        attr.setValues(List.of(new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[0]),
+        attr.setValues(CollectionSupport.listOf(new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[0]),
                 new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[1])));
         attributeSet.add(attr);
         
@@ -180,7 +180,7 @@ public final class TestSources {
      * @return the definition
      * @throws ComponentInitializationException if intialization fails
      */
-    @Nonnull public static AttributeDefinition populatedStaticAttribute(String attributeName,
+    @Nonnull public static AttributeDefinition populatedStaticAttribute(@Nonnull String attributeName,
             int attributeValuesCount) throws ComponentInitializationException {
         
         final List<IdPAttributeValue> valuesList = new ArrayList<>();
@@ -226,14 +226,14 @@ public final class TestSources {
     @Nonnull public static AttributeResolutionContext createResolutionContext(String principal, String issuerID,
             String recipientId) {
         final ProfileRequestContext parent = new ProfileRequestContext();
-        final AttributeResolutionContext retVal = parent.getSubcontext(AttributeResolutionContext.class, true);
+        final AttributeResolutionContext retVal = parent.getOrCreateSubcontext(AttributeResolutionContext.class);
         assert retVal != null;
         
         retVal.setAttributeIssuerID(issuerID);
         retVal.setAttributeRecipientID(recipientId);
         retVal.setPrincipal(principal);
 
-        retVal.getSubcontext(AttributeResolverWorkContext.class, true);
+        retVal.getOrCreateSubcontext(AttributeResolverWorkContext.class);
         return retVal;
     }
 
@@ -241,7 +241,7 @@ public final class TestSources {
      * @param attributeId what to depend on
      * @return the dependency
      */
-    @Nonnull public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(String attributeId) {
+    @Nonnull public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(@Nonnull String attributeId) {
         return new ResolverAttributeDefinitionDependency(attributeId);
     }
     

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


More information about the commits mailing list