[java-shib-shared] branch main updated: Fix null bugs and annotation mistakes.
Scott Cantor
cantor.2 at osu.edu
Fri Nov 4 18:53:18 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-shib-shared.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-shared.git;a=commit;h=9016e64b3130959129ec7fa8f9ddfeabe604a466
The following commit(s) were added to refs/heads/main by this push:
new 9016e64b Fix null bugs and annotation mistakes.
9016e64b is described below
commit 9016e64b3130959129ec7fa8f9ddfeabe604a466
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Nov 4 14:53:15 2022 -0400
Fix null bugs and annotation mistakes.
---
.../shared/logic/PredicateDrivenFunction.java | 4 +--
.../shared/logic/ScriptedBiConsumer.java | 19 +++++-----
.../shared/logic/ScriptedBiFunction.java | 19 +++++-----
.../shared/logic/ScriptedBiPredicate.java | 42 +++++++++++++++-------
.../shibboleth/shared/logic/ScriptedConsumer.java | 10 +++---
.../shibboleth/shared/logic/ScriptedFunction.java | 10 +++---
.../shibboleth/shared/logic/ScriptedPredicate.java | 29 ++++++++++++---
.../shared/scripting/AbstractScriptEvaluator.java | 4 +--
.../shared/scripting/EvaluableScript.java | 4 +--
.../shibboleth/shared/xml/AttributeSupport.java | 3 +-
.../net/shibboleth/shared/xml/DOMTypeSupport.java | 2 +-
.../net/shibboleth/shared/logic/ScriptedTest.java | 8 ++---
.../shared/primitive/ObjectSupportTest.java | 1 +
13 files changed, 100 insertions(+), 55 deletions(-)
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/PredicateDrivenFunction.java b/shib-support/src/main/java/net/shibboleth/shared/logic/PredicateDrivenFunction.java
index fd676298..6dad807e 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/PredicateDrivenFunction.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/PredicateDrivenFunction.java
@@ -44,10 +44,10 @@ public class PredicateDrivenFunction<T,U> implements Function<T,U> {
@Nonnull private final Predicate<? super T> predicate;
/** Function to apply if predicate is true. */
- @Nullable private final Function<? super T,U> trueFunction;
+ @Nonnull private final Function<? super T,U> trueFunction;
/** Function to apply if predicate is false. */
- @Nullable private final Function<? super T,U> falseFunction;
+ @Nonnull private final Function<? super T,U> falseFunction;
/**
* Constructor.
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiConsumer.java b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiConsumer.java
index 25a808a0..a82fab1c 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiConsumer.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiConsumer.java
@@ -101,13 +101,16 @@ public class ScriptedBiConsumer<T,U> extends AbstractScriptEvaluator implements
final Pair<Class<T>,Class<U>> types = getInputTypes();
if (null != types) {
- if (null != first && !types.getFirst().isInstance(first)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), first.getClass(), types.getFirst());
+
+ final Class<T> intype1 = types.getFirst();
+ final Class<U> intype2 = types.getSecond();
+
+ if (null != first && null != intype1 && !intype1.isInstance(first)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), first.getClass(), intype1);
return;
}
- if (null != second && !types.getSecond().isInstance(second)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), second.getClass(),
- types.getSecond());
+ if (null != second && null != intype2 && !intype2.isInstance(second)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), second.getClass(), intype2);
return;
}
}
@@ -118,8 +121,8 @@ public class ScriptedBiConsumer<T,U> extends AbstractScriptEvaluator implements
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("input1", input[0], ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("input2", input[1], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input1", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input2", input != null ? input[1] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -159,7 +162,7 @@ public class ScriptedBiConsumer<T,U> extends AbstractScriptEvaluator implements
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static <T,U> ScriptedBiConsumer<T,U> resourceScript(final Resource resource)
+ public static <T,U> ScriptedBiConsumer<T,U> resourceScript(@Nonnull final Resource resource)
throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiFunction.java b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiFunction.java
index 520fc6ae..f8e6a22d 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiFunction.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiFunction.java
@@ -121,13 +121,16 @@ public class ScriptedBiFunction<T,U,V> extends AbstractScriptEvaluator implement
final Pair<Class<T>,Class<U>> types = getInputTypes();
if (null != types) {
- if (null != first && !types.getFirst().isInstance(first)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), first.getClass(), types.getFirst());
+
+ final Class<T> intype1 = types.getFirst();
+ final Class<U> intype2 = types.getSecond();
+
+ if (null != first && null != intype1 && !intype1.isInstance(first)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), first.getClass(), intype1);
return (V) getReturnOnError();
}
- if (null != second && !types.getSecond().isInstance(second)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), second.getClass(),
- types.getSecond());
+ if (null != second && null != intype2 && !intype2.isInstance(second)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), second.getClass(), intype2);
return (V) getReturnOnError();
}
}
@@ -138,8 +141,8 @@ public class ScriptedBiFunction<T,U,V> extends AbstractScriptEvaluator implement
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("input1", input[0], ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("input2", input[1], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input1", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input2", input != null ? input[1] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -181,7 +184,7 @@ public class ScriptedBiFunction<T,U,V> extends AbstractScriptEvaluator implement
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static <T,U,V> ScriptedBiFunction<T,U,V> resourceScript(final Resource resource)
+ public static <T,U,V> ScriptedBiFunction<T,U,V> resourceScript(@Nonnull final Resource resource)
throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiPredicate.java b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiPredicate.java
index 0ce05693..b8c6c0d5 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiPredicate.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedBiPredicate.java
@@ -114,26 +114,44 @@ public class ScriptedBiPredicate<T,U> extends AbstractScriptEvaluator implements
final Pair<Class<T>,Class<U>> types = getInputTypes();
if (null != types) {
- if (null != first && !types.getFirst().isInstance(first)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), first.getClass(), types.getFirst());
- return (boolean) getReturnOnError();
+ final Class<T> intype1 = types.getFirst();
+ final Class<U> intype2 = types.getSecond();
+
+ if (null != first && null != intype1 && !intype1.isInstance(first)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), first.getClass(), intype1);
+ return (boolean) returnError();
}
- if (null != second && !types.getSecond().isInstance(second)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), second.getClass(),
- types.getSecond());
- return (boolean) getReturnOnError();
+ if (null != second && null != intype2 && !intype2.isInstance(second)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), second.getClass(), intype2);
+ return (boolean) returnError();
}
}
final Object result = evaluate(first, second);
- return (boolean) (result != null ? result : getReturnOnError());
+ return (boolean) (result != null ? result : returnError());
}
-
+
+ /**
+ * Helper function to sanity check return-on-error object.
+ *
+ * @return a boolean-valued error fallback
+ *
+ * @throws ClassCastException if the installed fallback is null or non-Boolean
+ */
+ private boolean returnError() throws ClassCastException {
+ final Object ret = getReturnOnError();
+ if (ret instanceof Boolean) {
+ return (boolean) ret;
+ }
+
+ throw new ClassCastException("Unable to cast return value to a boolean");
+ }
+
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("input1", input[0], ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("input2", input[1], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input1", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input2", input != null ? input[1] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -173,7 +191,7 @@ public class ScriptedBiPredicate<T,U> extends AbstractScriptEvaluator implements
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static <T,U> ScriptedBiPredicate<T,U> resourceScript(final Resource resource)
+ public static <T,U> ScriptedBiPredicate<T,U> resourceScript(@Nonnull final Resource resource)
throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedConsumer.java b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedConsumer.java
index 6a8569f9..7ffb0174 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedConsumer.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedConsumer.java
@@ -93,9 +93,9 @@ public class ScriptedConsumer<T> extends AbstractScriptEvaluator implements Cons
/** {@inheritDoc} */
public void accept(@Nullable final T input) {
- if (null != getInputType() && null != input && !getInputType().isInstance(input)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), input.getClass(),
- getInputType());
+ final Class<T> itype = getInputType();
+ if (null != itype && null != input && !itype.isInstance(input)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), input.getClass(), itype);
} else {
evaluate(input);
}
@@ -104,7 +104,7 @@ public class ScriptedConsumer<T> extends AbstractScriptEvaluator implements Cons
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("input", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -142,7 +142,7 @@ public class ScriptedConsumer<T> extends AbstractScriptEvaluator implements Cons
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static <T> ScriptedConsumer<T> resourceScript(final Resource resource)
+ public static <T> ScriptedConsumer<T> resourceScript(@Nonnull final Resource resource)
throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedFunction.java b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedFunction.java
index d13c92f0..cf90271d 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedFunction.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedFunction.java
@@ -113,9 +113,9 @@ public class ScriptedFunction<T, U> extends AbstractScriptEvaluator implements F
@SuppressWarnings("unchecked")
public U apply(@Nullable final T input) {
- if (null != getInputType() && null != input && !getInputType().isInstance(input)) {
- log.error("{} Input of type {} was not of type {}", getLogPrefix(), input.getClass(),
- getInputType());
+ final Class<T> itype = getInputType();
+ if (null != itype && null != input && !itype.isInstance(input)) {
+ log.error("{} Input of type {} was not of type {}", getLogPrefix(), input.getClass(), itype);
return (U) getReturnOnError();
}
@@ -125,7 +125,7 @@ public class ScriptedFunction<T, U> extends AbstractScriptEvaluator implements F
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("input", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -165,7 +165,7 @@ public class ScriptedFunction<T, U> extends AbstractScriptEvaluator implements F
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static <T,U> ScriptedFunction<T,U> resourceScript(final Resource resource)
+ public static <T,U> ScriptedFunction<T,U> resourceScript(@Nonnull final Resource resource)
throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedPredicate.java b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedPredicate.java
index e6d65260..f5167dcf 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedPredicate.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/logic/ScriptedPredicate.java
@@ -20,6 +20,7 @@ package net.shibboleth.shared.logic;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Collections;
import java.util.function.Predicate;
import javax.annotation.Nonnull;
@@ -111,20 +112,37 @@ public class ScriptedPredicate<T> extends AbstractScriptEvaluator implements Pre
/** {@inheritDoc} */
public boolean test(@Nullable final T input) {
- if (null != getInputType() && null != input && !getInputType().isInstance(input)) {
+ final Class<T> itype = getInputType();
+ if (null != itype && null != input && !itype.isInstance(input)) {
log.error("{} Input of type {} was not of type {}", getLogPrefix(), input.getClass(),
getInputType());
- return (boolean) getReturnOnError();
+ return returnError();
}
final Object result = evaluate(input);
- return (boolean) (result != null ? result : getReturnOnError());
+ return (boolean) (result != null ? result : returnError());
+ }
+
+ /**
+ * Helper function to sanity check return-on-error object.
+ *
+ * @return a boolean-valued error fallback
+ *
+ * @throws ClassCastException if the installed fallback is null or non-Boolean
+ */
+ private boolean returnError() throws ClassCastException {
+ final Object ret = getReturnOnError();
+ if (ret instanceof Boolean) {
+ return (boolean) ret;
+ }
+
+ throw new ClassCastException("Unable to cast return value to a boolean");
}
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("input", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -162,7 +180,8 @@ public class ScriptedPredicate<T> extends AbstractScriptEvaluator implements Pre
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static <T> ScriptedPredicate<T> resourceScript(final Resource resource) throws ScriptException, IOException {
+ public static <T> ScriptedPredicate<T> resourceScript(@Nonnull final Resource resource)
+ throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/scripting/AbstractScriptEvaluator.java b/shib-support/src/main/java/net/shibboleth/shared/scripting/AbstractScriptEvaluator.java
index 88d7e680..c4c211e2 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/scripting/AbstractScriptEvaluator.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/scripting/AbstractScriptEvaluator.java
@@ -205,8 +205,8 @@ public abstract class AbstractScriptEvaluator {
try {
final Object result = script.eval(scriptContext);
-
- if (null != getOutputType() && null != result && !getOutputType().isInstance(result)) {
+ final Class<?> otype = getOutputType();
+ if (null != otype && null != result && !otype.isInstance(result)) {
log.error("{} Output of type {} was not of type {}", getLogPrefix(), result.getClass(),
getOutputType());
return getReturnOnError();
diff --git a/shib-support/src/main/java/net/shibboleth/shared/scripting/EvaluableScript.java b/shib-support/src/main/java/net/shibboleth/shared/scripting/EvaluableScript.java
index a31feb9e..6c20e279 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/scripting/EvaluableScript.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/scripting/EvaluableScript.java
@@ -56,7 +56,7 @@ public final class EvaluableScript extends AbstractInitializableComponent {
@NonnullAfterInit @NotEmpty private String script;
/** The script engine to execute the script. */
- @Nullable private ScriptEngine scriptEngine;
+ @NonnullAfterInit private ScriptEngine scriptEngine;
/** The compiled form of the script, if the script engine supports compiling. */
@Nullable private CompiledScript compiledScript;
@@ -75,7 +75,7 @@ public final class EvaluableScript extends AbstractInitializableComponent {
*
* @return the script source
*/
- @Nonnull @NotEmpty public String getScript() {
+ @NonnullAfterInit @NotEmpty public String getScript() {
return script;
}
diff --git a/shib-support/src/main/java/net/shibboleth/shared/xml/AttributeSupport.java b/shib-support/src/main/java/net/shibboleth/shared/xml/AttributeSupport.java
index f3ee4241..5221340b 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/xml/AttributeSupport.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/xml/AttributeSupport.java
@@ -486,7 +486,7 @@ public final class AttributeSupport {
* an attribute
*/
public static boolean removeAttribute(@Nullable final Element element, @Nullable final QName attributeName) {
- if (hasAttribute(element, attributeName)) {
+ if (hasAttribute(element, attributeName) && null != element && null != attributeName) {
element.removeAttributeNS(StringSupport.trimOrNull(attributeName.getNamespaceURI()),
attributeName.getLocalPart());
return true;
@@ -494,4 +494,5 @@ public final class AttributeSupport {
return false;
}
+
}
\ No newline at end of file
diff --git a/shib-support/src/main/java/net/shibboleth/shared/xml/DOMTypeSupport.java b/shib-support/src/main/java/net/shibboleth/shared/xml/DOMTypeSupport.java
index bfd7713c..d8c435b0 100644
--- a/shib-support/src/main/java/net/shibboleth/shared/xml/DOMTypeSupport.java
+++ b/shib-support/src/main/java/net/shibboleth/shared/xml/DOMTypeSupport.java
@@ -92,7 +92,7 @@ public final class DOMTypeSupport {
* @return the type or null
*/
@Nullable public static QName getXSIType(@Nullable final Element e) {
- if (hasXSIType(e)) {
+ if (hasXSIType(e) && null != e) {
final Attr attribute = e.getAttributeNodeNS(XMLConstants.XSI_NS, "type");
final String attributeValue = attribute.getTextContent().trim();
return QNameSupport.constructQName(e, attributeValue);
diff --git a/shib-support/src/test/java/net/shibboleth/shared/logic/ScriptedTest.java b/shib-support/src/test/java/net/shibboleth/shared/logic/ScriptedTest.java
index 140459b9..4c0b1488 100644
--- a/shib-support/src/test/java/net/shibboleth/shared/logic/ScriptedTest.java
+++ b/shib-support/src/test/java/net/shibboleth/shared/logic/ScriptedTest.java
@@ -34,7 +34,7 @@ public class ScriptedTest {
@Test public void testPredicate() throws ScriptException {
- ScriptedPredicate<Object> test = ScriptedPredicate.inlineScript(returnSelf);
+ final ScriptedPredicate<Object> test = ScriptedPredicate.inlineScript(returnSelf);
Assert.assertTrue(test.test(Boolean.TRUE));
Assert.assertFalse(test.test(Boolean.FALSE));
@@ -45,7 +45,7 @@ public class ScriptedTest {
@Test public void testPredicateCustom() throws ScriptException {
- ScriptedPredicate<Object> test = ScriptedPredicate.inlineScript(returnCustom);
+ final ScriptedPredicate<Object> test = ScriptedPredicate.inlineScript(returnCustom);
test.setCustomObject(Boolean.TRUE);
Assert.assertTrue(test.test(Boolean.FALSE));
@@ -79,7 +79,7 @@ public class ScriptedTest {
@Test public void testFunction() throws ScriptException {
- ScriptedFunction<Object,Object> test = ScriptedFunction.inlineScript(returnSelf);
+ final ScriptedFunction<Object,Object> test = ScriptedFunction.inlineScript(returnSelf);
Assert.assertEquals(test.apply(Boolean.FALSE), Boolean.FALSE);
Assert.assertEquals(test.apply(Boolean.TRUE), Boolean.TRUE);
@@ -94,7 +94,7 @@ public class ScriptedTest {
@Test public void testBadScriptFunction() throws ScriptException {
- ScriptedFunction<Boolean,Boolean> test = ScriptedFunction.inlineScript(returnSelfString);
+ final ScriptedFunction<Boolean,Boolean> test = ScriptedFunction.inlineScript(returnSelfString);
test.setOutputType(Boolean.class);
test.setInputType(Boolean.class);
diff --git a/shib-support/src/test/java/net/shibboleth/shared/primitive/ObjectSupportTest.java b/shib-support/src/test/java/net/shibboleth/shared/primitive/ObjectSupportTest.java
index e36278c2..fcf33424 100644
--- a/shib-support/src/test/java/net/shibboleth/shared/primitive/ObjectSupportTest.java
+++ b/shib-support/src/test/java/net/shibboleth/shared/primitive/ObjectSupportTest.java
@@ -25,6 +25,7 @@ import org.testng.annotations.Test;
*/
public class ObjectSupportTest {
+ /** Test method. */
@Test public void testFirstNonNull() {
Object foo = new Object();
Object bar = new Object();
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list