[java-oidc-common] branch main updated: Null cleanup, review NonnullElements.

Scott Cantor cantor.2 at osu.edu
Tue Oct 3 16:43:13 UTC 2023


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

scantor pushed a commit to branch main
in repository java-oidc-common.

View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=63d08173a0066672009fb3db9ee67330c14571df

The following commit(s) were added to refs/heads/main by this push:
     new 63d0817  Null cleanup, review NonnullElements.
63d0817 is described below

commit 63d08173a0066672009fb3db9ee67330c14571df
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Oct 3 12:43:09 2023 -0400

    Null cleanup, review NonnullElements.
---
 .../spring/enc/impl/OIDCByteEncoderParser.java     |  2 +-
 .../enc/impl/OIDCScopedStringEncoderParser.java    |  2 +-
 .../spring/enc/impl/OIDCStringEncoderParser.java   |  2 +-
 .../resolver/spring/enc/impl/package-info.java     |  5 +-
 .../impl/OIDCByteAttributeTranscoder.java          |  9 +--
 .../impl/OIDCScopedStringAttributeTranscoder.java  | 22 +++---
 .../impl/OIDCStringAttributeTranscoder.java        | 80 +++++++++++++---------
 .../attribute/transcoding/impl/package-info.java   |  5 +-
 8 files changed, 76 insertions(+), 51 deletions(-)

diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCByteEncoderParser.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCByteEncoderParser.java
index 092edb6..6761f3b 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCByteEncoderParser.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCByteEncoderParser.java
@@ -33,7 +33,7 @@ public class OIDCByteEncoderParser extends BaseOIDCAttributeEncoderParser {
 
     /** {@inheritDoc} */
     @Override
-    protected BeanReference buildTranscoder() {
+    @Nonnull protected BeanReference buildTranscoder() {
         return new RuntimeBeanReference("OIDCByteTranscoder");
     }
 
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCScopedStringEncoderParser.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCScopedStringEncoderParser.java
index 21be30d..eef92ef 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCScopedStringEncoderParser.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCScopedStringEncoderParser.java
@@ -50,7 +50,7 @@ public class OIDCScopedStringEncoderParser extends BaseOIDCAttributeEncoderParse
 
     /** {@inheritDoc} */
     @Override
-    protected BeanReference buildTranscoder() {
+    @Nonnull protected BeanReference buildTranscoder() {
         return new RuntimeBeanReference("OIDCScopedStringTranscoder");
     }
 
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCStringEncoderParser.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCStringEncoderParser.java
index 6631d4c..0fb4da5 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCStringEncoderParser.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/OIDCStringEncoderParser.java
@@ -50,7 +50,7 @@ public class OIDCStringEncoderParser extends BaseOIDCAttributeEncoderParser {
 
     /** {@inheritDoc} */
     @Override
-    protected BeanReference buildTranscoder() {
+    @Nonnull protected BeanReference buildTranscoder() {
         return new RuntimeBeanReference("OIDCStringTranscoder");
     }
 
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/package-info.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/package-info.java
index d1043cb..1b76d18 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/package-info.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/resolver/spring/enc/impl/package-info.java
@@ -13,4 +13,7 @@
  */
 
 /** Attribute encoder namespace implementations.*/
-package net.shibboleth.oidc.attribute.resolver.spring.enc.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.oidc.attribute.resolver.spring.enc.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java
index 5010619..3703de8 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java
@@ -14,7 +14,6 @@
 
 package net.shibboleth.oidc.attribute.transcoding.impl;
 
-import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -30,9 +29,9 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.oidc.attribute.transcoding.AbstractOIDCAttributeTranscoder;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.codec.Base64Support;
 import net.shibboleth.shared.codec.EncodingException;
+import net.shibboleth.shared.collection.CollectionSupport;
 
 /**
  * Class encoding byte attributes to base64 encoded string json object. Name of the attribute will be set as the key.
@@ -50,7 +49,9 @@ public class OIDCByteAttributeTranscoder extends AbstractOIDCAttributeTranscoder
                     throws AttributeEncodingException {
         
         final Boolean asInteger = rule.getOrDefault(PROP_ASINTEGER, Boolean.class, false);
+        assert asInteger != null;
         final Boolean asArray = rule.getOrDefault(PROP_ASARRAY, Boolean.class, false);
+        assert asArray != null;
         final String delimiter = rule.getOrDefault(PROP_STRING_DELIMITER, String.class, " "); 
         
         String attributeString = "";
@@ -92,12 +93,12 @@ public class OIDCByteAttributeTranscoder extends AbstractOIDCAttributeTranscoder
     
     /** {@inheritDoc} */
     @Override
-    @Nonnull @NonnullElements protected List<IdPAttributeValue> decodeValues(
+    @Nonnull protected List<IdPAttributeValue> decodeValues(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Object input,
             @Nonnull final TranscodingRule rule) throws AttributeDecodingException {
         
         // TODO: implement value decoding
-        return Collections.emptyList();
+        return CollectionSupport.emptyList();
     }
 
 }
\ No newline at end of file
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java
index 084a97a..7265748 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java
@@ -15,7 +15,6 @@
 package net.shibboleth.oidc.attribute.transcoding.impl;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -24,7 +23,6 @@ import javax.annotation.Nullable;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.minidev.json.JSONArray;
 import net.shibboleth.idp.attribute.AttributeDecodingException;
@@ -35,8 +33,9 @@ import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.oidc.attribute.transcoding.AbstractOIDCAttributeTranscoder;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.collection.CollectionSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Class encoding scoped string attributes to string json object. Name of the attribute will be set as the key. The
@@ -75,7 +74,9 @@ public class OIDCScopedStringAttributeTranscoder extends AbstractOIDCAttributeTr
                 .collect(Collectors.toUnmodifiableList());
         
         // Values of arbitrary mapped type placed into JSONArray.
-        if (rule.getOrDefault(PROP_ASARRAY, Boolean.class, false)) {
+        final Boolean asArray = rule.getOrDefault(PROP_ASARRAY, Boolean.class, false);
+        assert asArray != null;
+        if (asArray) {
             final JSONArray array = new JSONArray();
             array.addAll(values);
             return array;
@@ -101,7 +102,7 @@ public class OIDCScopedStringAttributeTranscoder extends AbstractOIDCAttributeTr
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull @NonnullElements protected List<IdPAttributeValue> decodeValues(
+    @Nonnull protected List<IdPAttributeValue> decodeValues(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Object input,
             @Nonnull final TranscodingRule rule) throws AttributeDecodingException {
         
@@ -111,16 +112,16 @@ public class OIDCScopedStringAttributeTranscoder extends AbstractOIDCAttributeTr
             final int offset = stringValue.indexOf(scopeDelimiter);
             if (offset < 0) {
                 log.warn("Ignoring value with no scope delimiter ({})", scopeDelimiter);
-                return Collections.emptyList();
+                return CollectionSupport.emptyList();
             }
-            return List.of(ScopedStringAttributeValue.valueOf(stringValue.substring(0, offset), 
+            return CollectionSupport.listOf(ScopedStringAttributeValue.valueOf(stringValue.substring(0, offset), 
                     stringValue.substring(offset + scopeDelimiter.length())));
-        }
-        else if (input instanceof JSONArray) {
+        } else if (input instanceof JSONArray) {
             // Deal with array recursively
             final JSONArray array = (JSONArray)input;
             final List<IdPAttributeValue> arrayValuesDecoded = new ArrayList<>();
             for (final Object element : array) {
+                assert element != null;
                 arrayValuesDecoded.addAll(decodeValues(profileRequestContext, element, rule));
             }
             return arrayValuesDecoded;
@@ -130,7 +131,8 @@ public class OIDCScopedStringAttributeTranscoder extends AbstractOIDCAttributeTr
                     + "transcoding rule '{} -> {}'",
                     input.getClass().getName(), input, rule.getOrDefault(PROP_NAME, String.class, "unknown"), 
                     rule.getOrDefault(AttributeTranscoderRegistry.PROP_ID, String.class, "unknown"));
-            return Collections.emptyList();
+            return CollectionSupport.emptyList();
         }
     }
+    
 }
\ No newline at end of file
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java
index 0f93375..32c2460 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java
@@ -15,7 +15,6 @@
 package net.shibboleth.oidc.attribute.transcoding.impl;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -26,7 +25,6 @@ import javax.annotation.Nullable;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 
@@ -42,10 +40,11 @@ import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.oidc.attribute.transcoding.AbstractOIDCAttributeTranscoder;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.collection.CollectionSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Class encoding string attributes to string json object. Name of the attribute will be set as the key. The string
@@ -101,7 +100,9 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
                     .map(StringAttributeValue::getValue));
         
         // Handle String values parsed into JSON.
-        if (rule.getOrDefault(PROP_ASOBJECT, Boolean.class, false)) {
+        final Boolean asObject = rule.getOrDefault(PROP_ASOBJECT, Boolean.class, false);
+        assert asObject != null;
+        if (asObject) {
             if (values.size() == 1) {
                 final Object value = values.get(0);
                 if (!(value instanceof String)) {
@@ -128,7 +129,9 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
         }
         
         // Values of arbitrary mapped type placed into JSONArray.
-        if (rule.getOrDefault(PROP_ASARRAY, Boolean.class, false)) {
+        final Boolean asArray = rule.getOrDefault(PROP_ASARRAY, Boolean.class, false);
+        assert asArray != null;
+        if (asArray) {
             final JSONArray array = new JSONArray();
             array.addAll(values);
             return array;
@@ -162,44 +165,52 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull @NonnullElements protected List<IdPAttributeValue> decodeValues(
+    @Nonnull protected List<IdPAttributeValue> decodeValues(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Object input,
             @Nonnull final TranscodingRule rule) throws AttributeDecodingException {
         
         // Input could be any JSON data type e.g. String, Number, JSONObject, Array, Boolean.
              
         if (input instanceof String) {            
-            return List.of(StringAttributeValue.valueOf((String)input));  
-            
-        } else if (input instanceof Integer && 
-                rule.getOrDefault(PROP_NUMBER_AS_STRING, Boolean.class, false)) {              
-            return List.of(StringAttributeValue.valueOf(Integer.toString((Integer)input)));         
-            
-        } else if (input instanceof Double && 
-                rule.getOrDefault(PROP_NUMBER_AS_STRING, Boolean.class, false)) {            
-            return List.of(StringAttributeValue.valueOf(Double.toString((Double)input)));            
-            
-        } else if (input instanceof Boolean && 
-                rule.getOrDefault(PROP_BOOLEAN_AS_STRING, Boolean.class, false)) {           
-            return List.of(StringAttributeValue.valueOf(Boolean.toString((Boolean)input)));            
+            return CollectionSupport.listOf(StringAttributeValue.valueOf((String)input));  
             
+        }
+        
+        final Boolean numAsString = rule.getOrDefault(PROP_NUMBER_AS_STRING, Boolean.class, false);
+        assert numAsString != null;
+        
+        final Boolean boolAsString = rule.getOrDefault(PROP_BOOLEAN_AS_STRING, Boolean.class, false);
+        assert boolAsString != null;
+        
+        final Boolean asObject = rule.getOrDefault(PROP_ASOBJECT, Boolean.class, false);
+        assert asObject != null;
+        
+        if (input instanceof Integer && numAsString) {              
+            return CollectionSupport.listOf(StringAttributeValue.valueOf(Integer.toString((Integer)input)));         
+        } else if (input instanceof Double && numAsString) {            
+            return CollectionSupport.listOf(StringAttributeValue.valueOf(Double.toString((Double)input)));            
+        } else if (input instanceof Boolean && boolAsString) {           
+            return CollectionSupport.listOf(StringAttributeValue.valueOf(Boolean.toString((Boolean)input)));            
         } else if (input instanceof JSONArray) {
-            if (rule.getOrDefault(PROP_ARRAY_AS_STRING, Boolean.class, false)) {
+            final Boolean arrayAsString = rule.getOrDefault(PROP_ARRAY_AS_STRING, Boolean.class, false);
+            assert arrayAsString != null;
+            if (arrayAsString) {
                 // Serialize JSON Array to JSON string
-                return List.of(StringAttributeValue.valueOf(((JSONArray)input).toJSONString()));
+                return CollectionSupport.listOf(StringAttributeValue.valueOf(((JSONArray)input).toJSONString()));
             } else {
                 // Deal with array recursively
-                final JSONArray array = (JSONArray)input;
+                final JSONArray array = (JSONArray) input;
                 final List<IdPAttributeValue> arrayValuesDecoded = new ArrayList<>();
                 for (final Object element : array) {
+                    assert element != null;
                     arrayValuesDecoded.addAll(decodeValues(profileRequestContext, element, rule));
                 }
                 return arrayValuesDecoded;  
             }
             
-        } else if (input instanceof JSONObject && rule.getOrDefault(PROP_ASOBJECT, Boolean.class, false)) {
+        } else if (input instanceof JSONObject && asObject) {
             // Serialize JSONObject to a JSON string.
-            return List.of(StringAttributeValue.valueOf(((JSONObject)input).toJSONString()));
+            return CollectionSupport.listOf(StringAttributeValue.valueOf(((JSONObject)input).toJSONString()));
             
         } else {
             log.trace("Could not convert values of type {} for the claim '{}' to a string attribute using "
@@ -207,7 +218,7 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
                     input.getClass().getName(), input, rule.getOrDefault(PROP_NAME, String.class, "unknown"), 
                     rule.getOrDefault(AttributeTranscoderRegistry.PROP_ID, String.class, "unknown"));
             
-            return Collections.emptyList();
+            return CollectionSupport.emptyList();
         }
         
     }
@@ -239,10 +250,13 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
      * 
      * @return list of String, Boolean or Integer objects
      */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable private List<?> transformValues(
-            @Nonnull final TranscodingRule rule, @Nonnull @NonnullElements final Stream<String> attributeValues) {
+    @Nonnull @NotLive @Unmodifiable private List<?> transformValues(
+            @Nonnull final TranscodingRule rule, @Nonnull final Stream<String> attributeValues) {
+        
+        final Boolean asInt = rule.getOrDefault(PROP_ASINTEGER, Boolean.class, false);
+        assert asInt != null;
         
-        if (rule.getOrDefault(PROP_ASINTEGER, Boolean.class, false)) {
+        if (asInt) {
             log.debug("String values interpreted as integer by rule");
             return attributeValues
                     .map(v -> {
@@ -254,17 +268,19 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
                         }
                     })
                     .filter(Predicates.notNull())
-                    .collect(Collectors.toUnmodifiableList());
+                    .collect(CollectionSupport.nonnullCollector(Collectors.toUnmodifiableList())).get();
         }
         
-        if (rule.getOrDefault(PROP_ASBOOLEAN, Boolean.class, false)) {
+        final Boolean asBool = rule.getOrDefault(PROP_ASBOOLEAN, Boolean.class, false);
+        assert asBool != null;
+        if (asBool) {
             log.debug("String values interpreted as Boolean by rule");
             return attributeValues
                     .map(v -> XSBooleanValue.valueOf(v).getValue())
-                    .collect(Collectors.toUnmodifiableList());
+                    .collect(CollectionSupport.nonnullCollector(Collectors.toUnmodifiableList())).get();
         }
 
-        return attributeValues.collect(Collectors.toUnmodifiableList());
+        return attributeValues.collect(CollectionSupport.nonnullCollector(Collectors.toUnmodifiableList())).get();
     }
 
 }
\ No newline at end of file
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/package-info.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/package-info.java
index 8a13b2d..6fd87ac 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/package-info.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/package-info.java
@@ -13,4 +13,7 @@
  */
 
 /** Attribute encoder implementations. */
-package net.shibboleth.oidc.attribute.transcoding.impl;
\ No newline at end of file
+ at NonnullElements
+package net.shibboleth.oidc.attribute.transcoding.impl;
+
+import net.shibboleth.shared.annotation.constraint.NonnullElements;

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


More information about the commits mailing list