From b72d076178ba8c73c419e5ea62144e88bf9c741f Mon Sep 17 00:00:00 2001 From: Jared Davis Date: Wed, 10 Jun 2026 19:03:22 -0400 Subject: [PATCH 1/2] add throw UnsupportedOperationException instead of null returns. Update wording per coments from @ctrueden --- .../eval/AbstractStandardEvaluator.java | 71 +++++++++++-------- .../eval/AbstractStandardEvaluatorTest.java | 3 +- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java b/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java index f3d7226..4c165dc 100644 --- a/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java +++ b/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java @@ -110,14 +110,25 @@ public Object function(final Object a, final Object b) { } // NB: Unknown function type. - return null; + throw new UnsupportedOperationException("function " + a + " was not found"); + } + + private static Object throwUnsupportedImplementation(final String op) { + throw new UnsupportedOperationException("Operation " + op + " is not implemented"); } + private static Object throwUnsupportedParameters(String op, Object a, Object b) { + throw new UnsupportedOperationException("Operation " + op + " did not complete with parameters A= [" + a + "] type " + type(a) + " B = [" + b + "] type" + type(b)); + } + private static String type(Object o) { + return o == null ? "" : o.getClass().getSimpleName(); + } + // -- dot -- @Override public Object dot(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dot"); } // -- groups -- @@ -142,12 +153,12 @@ public Object braces(final Object... args) { @Override public Object transpose(final Object a) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("transpose"); } @Override public Object dotTranspose(final Object a) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotTranspose"); } @Override @@ -156,7 +167,7 @@ public Object pow(final Object a, final Object b) { if (isD(av) && isD(bv)) return pow(d(av), d(bv)); if (isBI(av) && isI(bv)) return pow(bi(av), i(bv)); if (isBD(av) && isI(bv)) return pow(bd(av), i(bv)); - return null; + return throwUnsupportedParameters("pow", av, bv); } public double pow(final double av, final double bv) { return Math.pow(av, bv); } public BigInteger pow(final BigInteger av, final int bv) { return av.pow(bv); } @@ -164,7 +175,7 @@ public Object pow(final Object a, final Object b) { @Override public Object dotPow(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotPow"); } // -- unary -- @@ -206,7 +217,7 @@ public Object complement(final Object a) { final Object av = value(a); if (isI(av)) return complement(i(av)); if (isL(av)) return complement(l(av)); - return null; + return throwUnsupportedParameters("complement", av, null); } public int complement(final int a) { return ~a; } public long complement(final long a) { return ~a; } @@ -226,7 +237,7 @@ public Object mul(final Object a, final Object b) { if (isD(av) && isD(bv)) return mul(d(av), d(bv)); if (isBI(av) && isBI(bv)) return mul(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return mul(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("mul", av, bv); } public int mul(final int av, final int bv) { return av * bv; } public long mul(final long av, final long bv) { return av * bv; } @@ -248,7 +259,7 @@ public Object div(final Object a, final Object b) { if (isD(av) && isD(bv)) return div(d(av), d(bv)); if (isBI(av) && isBI(bv)) return div(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return div(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("div", av, bv); } public int div(final int av, final int bv) { return av / bv; } public long div(final long av, final long bv) { return av / bv; } @@ -270,7 +281,7 @@ public Object mod(final Object a, final Object b) { if (isD(av) && isD(bv)) return mod(d(av), d(bv)); if (isBI(av) && isBI(bv)) return mod(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return mod(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("mod", av, bv); } public int mod(final int av, final int bv) { return av % bv; } public long mod(final long av, final long bv) { return av % bv; } @@ -285,22 +296,22 @@ public BigDecimal mod(final BigDecimal av, final BigDecimal bv) { @Override public Object rightDiv(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("rightDiv"); } @Override public Object dotMul(Object a, Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotMul"); } @Override public Object dotDiv(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotDiv"); } @Override public Object dotRightDiv(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotRightDiv"); } // -- additive -- @@ -315,7 +326,7 @@ public Object add(final Object a, final Object b) { if (isD(av) && isD(bv)) return add(d(av), d(bv)); if (isBI(av) && isBI(bv)) return add(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return add(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("add", av, bv); } public String add(final String av, final String bv) { return av + bv; } public int add(final int av, final int bv) { return av + bv; } @@ -338,7 +349,7 @@ public Object sub(final Object a, final Object b) { if (isD(av) && isD(bv)) return sub(d(av), d(bv)); if (isBI(av) && isBI(bv)) return sub(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return sub(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("sub", av, bv); } public int sub(final int av, final int bv) { return av - bv; } public long sub(final long av, final long bv) { return av - bv; } @@ -359,7 +370,7 @@ public Object leftShift(final Object a, final Object b) { if (isI(av) && isI(bv)) return leftShift(i(av), i(bv)); if (isL(av) && isL(bv)) return leftShift(l(av), l(bv)); if (isBI(av) && isI(bv)) return leftShift(bi(av), i(bv)); - return null; + return throwUnsupportedParameters("leftShift", av, bv); } public int leftShift(final int av, final int bv) { return av << bv; } public long leftShift(final long av, final long bv) { return av << bv; } @@ -373,7 +384,7 @@ public Object rightShift(final Object a, final Object b) { if (isI(av) && isI(bv)) return rightShift(i(av), i(bv)); if (isL(av) && isL(bv)) return rightShift(l(av), l(bv)); if (isBI(av) && isI(bv)) return rightShift(bi(av), i(bv)); - return null; + return throwUnsupportedParameters("rightShift", av, bv); } public int rightShift(final int av, final int bv) { return av >> bv; } public long rightShift(final long av, final long bv) { return av >> bv; } @@ -386,7 +397,7 @@ public Object unsignedRightShift(final Object a, final Object b) { final Object av = value(a), bv = value(b); if (isI(av) && isI(bv)) return unsignedRightShift(i(av), i(bv)); if (isL(av) && isL(bv)) return unsignedRightShift(l(av), l(bv)); - return null; + return throwUnsupportedParameters("unsignedRightShift", av, bv); } public int unsignedRightShift(final int av, final int bv) { return av >>> bv; } public long unsignedRightShift(final long av, final long bv) { return av >>> bv; } @@ -404,7 +415,7 @@ public Object lessThan(final Object a, final Object b) { if (isD(av) && isD(bv)) return lessThan(d(av), d(bv)); if (isBI(av) && isBI(bv)) return lessThan(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return lessThan(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("lessThan", av, bv); } public boolean lessThan(final Comparable av, final T bv) { return av.compareTo(bv) < 0; @@ -421,7 +432,7 @@ public Object greaterThan(final Object a, final Object b) { if (isD(av) && isD(bv)) return greaterThan(d(av), d(bv)); if (isBI(av) && isBI(bv)) return greaterThan(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return greaterThan(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("greaterThan", av, bv); } public boolean greaterThan(final Comparable av, final T bv) { return av.compareTo(bv) > 0; @@ -438,7 +449,7 @@ public Object lessThanOrEqual(final Object a, final Object b) { if (isD(av) && isD(bv)) return lessThanOrEqual(d(av), d(bv)); if (isBI(av) && isBI(bv)) return lessThanOrEqual(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return lessThanOrEqual(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("lessThanOrEqual", av, bv); } public boolean lessThanOrEqual(final Comparable av, final T bv) { return av.compareTo(bv) <= 0; @@ -455,7 +466,7 @@ public Object greaterThanOrEqual(final Object a, final Object b) { if (isD(av) && isD(bv)) return greaterThanOrEqual(d(av), d(bv)); if (isBI(av) && isBI(bv)) return greaterThanOrEqual(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return greaterThanOrEqual(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("greaterThanOrEqual", av, bv); } public boolean greaterThanOrEqual(final Comparable av, final T bv) { return av.compareTo(bv) >= 0; @@ -463,7 +474,7 @@ public boolean greaterThanOrEqual(final Comparable av, final T bv) { @Override public Object instanceOf(final Object av, final Object bv) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("instanceOf"); } // -- equality -- @@ -486,7 +497,7 @@ public Object bitwiseAnd(final Object a, final Object b) { if (isI(av) && isI(bv)) return bitwiseAnd(i(av), i(bv)); if (isL(av) && isL(bv)) return bitwiseAnd(l(av), l(bv)); if (isBI(av) && isBI(bv)) return bitwiseAnd(bi(av), bi(bv)); - return null; + return throwUnsupportedParameters("bitwiseAnd", av, bv); } public int bitwiseAnd(final int av, final int bv) { return av & bv; } public long bitwiseAnd(final long av, final long bv) { return av & bv; } @@ -500,7 +511,7 @@ public Object bitwiseOr(final Object a, final Object b) { if (isI(av) && isI(bv)) return bitwiseOr(i(av), i(bv)); if (isL(av) && isL(bv)) return bitwiseOr(l(av), l(bv)); if (isBI(av) && isBI(bv)) return bitwiseOr(bi(av), bi(bv)); - return null; + return throwUnsupportedParameters("bitwiseOr", av, bv); } public int bitwiseOr(final int av, final int bv) { return av | bv; } public long bitwiseOr(final long av, final long bv) { return av | bv; } @@ -514,7 +525,7 @@ public BigInteger bitwiseOr(final BigInteger av, final BigInteger bv) { public Object logicalAnd(final Object a, final Object b) { final Object av = value(a), bv = value(b); if (isBool(av) && isBool(bv)) return logicalAnd(bool(av), bool(bv)); - return null; + return throwUnsupportedParameters("logicalAnd", av, bv); } public boolean logicalAnd(final boolean av, final boolean bv) { return av && bv; } @@ -522,7 +533,7 @@ public Object logicalAnd(final Object a, final Object b) { public Object logicalOr(final Object a, final Object b) { final Object av = value(a), bv = value(b); if (isBool(av) && isBool(bv)) return logicalOr(bool(av), bool(bv)); - return null; + return throwUnsupportedParameters("logicalOr", av, bv); } public boolean logicalOr(final boolean av, final boolean bv) { return av || bv; } @@ -530,12 +541,12 @@ public Object logicalOr(final Object a, final Object b) { @Override public Object question(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("question"); } @Override public Object colon(Object a, Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("colon"); } // -- Helper methods - type matching -- diff --git a/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java b/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java index 1aa2755..3aa2933 100644 --- a/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java +++ b/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java @@ -31,7 +31,6 @@ package org.scijava.parsington.eval; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -109,7 +108,7 @@ public void testFunction() { assertEquals("b", e.function(v, Arrays.asList(1))); assertEquals("c", e.function(v, Arrays.asList(2))); - assertNull(e.function(o(0), o(1))); + assertThrows(UnsupportedOperationException.class, () ->e.function(o(0), o(1))); } // -- dot -- From e16c113a94ea6b7eea5350fc647ec8e43a91777b Mon Sep 17 00:00:00 2001 From: Jared Davis Date: Wed, 10 Jun 2026 19:03:22 -0400 Subject: [PATCH 2/2] add throw UnsupportedOperationException instead of null returns. Update wording per comments from @ctrueden --- .../eval/AbstractStandardEvaluator.java | 71 +++++++++++-------- .../eval/AbstractStandardEvaluatorTest.java | 3 +- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java b/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java index f3d7226..96fb6b4 100644 --- a/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java +++ b/src/main/java/org/scijava/parsington/eval/AbstractStandardEvaluator.java @@ -110,14 +110,25 @@ public Object function(final Object a, final Object b) { } // NB: Unknown function type. - return null; + throw new UnsupportedOperationException("function " + a + " was not found"); + } + + private static Object throwUnsupportedImplementation(final String op) { + throw new UnsupportedOperationException("Operation " + op + " is not implemented"); } + private static Object throwUnsupportedParameters(String op, Object a, Object b) { + throw new UnsupportedOperationException("Operation " + op + " did not complete with parameters A= [" + a + "] type " + type(a) + " B = [" + b + "] type " + type(b)); + } + private static String type(Object o) { + return o == null ? "" : o.getClass().getSimpleName(); + } + // -- dot -- @Override public Object dot(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dot"); } // -- groups -- @@ -142,12 +153,12 @@ public Object braces(final Object... args) { @Override public Object transpose(final Object a) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("transpose"); } @Override public Object dotTranspose(final Object a) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotTranspose"); } @Override @@ -156,7 +167,7 @@ public Object pow(final Object a, final Object b) { if (isD(av) && isD(bv)) return pow(d(av), d(bv)); if (isBI(av) && isI(bv)) return pow(bi(av), i(bv)); if (isBD(av) && isI(bv)) return pow(bd(av), i(bv)); - return null; + return throwUnsupportedParameters("pow", av, bv); } public double pow(final double av, final double bv) { return Math.pow(av, bv); } public BigInteger pow(final BigInteger av, final int bv) { return av.pow(bv); } @@ -164,7 +175,7 @@ public Object pow(final Object a, final Object b) { @Override public Object dotPow(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotPow"); } // -- unary -- @@ -206,7 +217,7 @@ public Object complement(final Object a) { final Object av = value(a); if (isI(av)) return complement(i(av)); if (isL(av)) return complement(l(av)); - return null; + return throwUnsupportedParameters("complement", av, null); } public int complement(final int a) { return ~a; } public long complement(final long a) { return ~a; } @@ -226,7 +237,7 @@ public Object mul(final Object a, final Object b) { if (isD(av) && isD(bv)) return mul(d(av), d(bv)); if (isBI(av) && isBI(bv)) return mul(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return mul(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("mul", av, bv); } public int mul(final int av, final int bv) { return av * bv; } public long mul(final long av, final long bv) { return av * bv; } @@ -248,7 +259,7 @@ public Object div(final Object a, final Object b) { if (isD(av) && isD(bv)) return div(d(av), d(bv)); if (isBI(av) && isBI(bv)) return div(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return div(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("div", av, bv); } public int div(final int av, final int bv) { return av / bv; } public long div(final long av, final long bv) { return av / bv; } @@ -270,7 +281,7 @@ public Object mod(final Object a, final Object b) { if (isD(av) && isD(bv)) return mod(d(av), d(bv)); if (isBI(av) && isBI(bv)) return mod(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return mod(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("mod", av, bv); } public int mod(final int av, final int bv) { return av % bv; } public long mod(final long av, final long bv) { return av % bv; } @@ -285,22 +296,22 @@ public BigDecimal mod(final BigDecimal av, final BigDecimal bv) { @Override public Object rightDiv(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("rightDiv"); } @Override public Object dotMul(Object a, Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotMul"); } @Override public Object dotDiv(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotDiv"); } @Override public Object dotRightDiv(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("dotRightDiv"); } // -- additive -- @@ -315,7 +326,7 @@ public Object add(final Object a, final Object b) { if (isD(av) && isD(bv)) return add(d(av), d(bv)); if (isBI(av) && isBI(bv)) return add(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return add(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("add", av, bv); } public String add(final String av, final String bv) { return av + bv; } public int add(final int av, final int bv) { return av + bv; } @@ -338,7 +349,7 @@ public Object sub(final Object a, final Object b) { if (isD(av) && isD(bv)) return sub(d(av), d(bv)); if (isBI(av) && isBI(bv)) return sub(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return sub(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("sub", av, bv); } public int sub(final int av, final int bv) { return av - bv; } public long sub(final long av, final long bv) { return av - bv; } @@ -359,7 +370,7 @@ public Object leftShift(final Object a, final Object b) { if (isI(av) && isI(bv)) return leftShift(i(av), i(bv)); if (isL(av) && isL(bv)) return leftShift(l(av), l(bv)); if (isBI(av) && isI(bv)) return leftShift(bi(av), i(bv)); - return null; + return throwUnsupportedParameters("leftShift", av, bv); } public int leftShift(final int av, final int bv) { return av << bv; } public long leftShift(final long av, final long bv) { return av << bv; } @@ -373,7 +384,7 @@ public Object rightShift(final Object a, final Object b) { if (isI(av) && isI(bv)) return rightShift(i(av), i(bv)); if (isL(av) && isL(bv)) return rightShift(l(av), l(bv)); if (isBI(av) && isI(bv)) return rightShift(bi(av), i(bv)); - return null; + return throwUnsupportedParameters("rightShift", av, bv); } public int rightShift(final int av, final int bv) { return av >> bv; } public long rightShift(final long av, final long bv) { return av >> bv; } @@ -386,7 +397,7 @@ public Object unsignedRightShift(final Object a, final Object b) { final Object av = value(a), bv = value(b); if (isI(av) && isI(bv)) return unsignedRightShift(i(av), i(bv)); if (isL(av) && isL(bv)) return unsignedRightShift(l(av), l(bv)); - return null; + return throwUnsupportedParameters("unsignedRightShift", av, bv); } public int unsignedRightShift(final int av, final int bv) { return av >>> bv; } public long unsignedRightShift(final long av, final long bv) { return av >>> bv; } @@ -404,7 +415,7 @@ public Object lessThan(final Object a, final Object b) { if (isD(av) && isD(bv)) return lessThan(d(av), d(bv)); if (isBI(av) && isBI(bv)) return lessThan(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return lessThan(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("lessThan", av, bv); } public boolean lessThan(final Comparable av, final T bv) { return av.compareTo(bv) < 0; @@ -421,7 +432,7 @@ public Object greaterThan(final Object a, final Object b) { if (isD(av) && isD(bv)) return greaterThan(d(av), d(bv)); if (isBI(av) && isBI(bv)) return greaterThan(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return greaterThan(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("greaterThan", av, bv); } public boolean greaterThan(final Comparable av, final T bv) { return av.compareTo(bv) > 0; @@ -438,7 +449,7 @@ public Object lessThanOrEqual(final Object a, final Object b) { if (isD(av) && isD(bv)) return lessThanOrEqual(d(av), d(bv)); if (isBI(av) && isBI(bv)) return lessThanOrEqual(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return lessThanOrEqual(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("lessThanOrEqual", av, bv); } public boolean lessThanOrEqual(final Comparable av, final T bv) { return av.compareTo(bv) <= 0; @@ -455,7 +466,7 @@ public Object greaterThanOrEqual(final Object a, final Object b) { if (isD(av) && isD(bv)) return greaterThanOrEqual(d(av), d(bv)); if (isBI(av) && isBI(bv)) return greaterThanOrEqual(bi(av), bi(bv)); if (isBD(av) && isBD(bv)) return greaterThanOrEqual(bd(av), bd(bv)); - return null; + return throwUnsupportedParameters("greaterThanOrEqual", av, bv); } public boolean greaterThanOrEqual(final Comparable av, final T bv) { return av.compareTo(bv) >= 0; @@ -463,7 +474,7 @@ public boolean greaterThanOrEqual(final Comparable av, final T bv) { @Override public Object instanceOf(final Object av, final Object bv) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("instanceOf"); } // -- equality -- @@ -486,7 +497,7 @@ public Object bitwiseAnd(final Object a, final Object b) { if (isI(av) && isI(bv)) return bitwiseAnd(i(av), i(bv)); if (isL(av) && isL(bv)) return bitwiseAnd(l(av), l(bv)); if (isBI(av) && isBI(bv)) return bitwiseAnd(bi(av), bi(bv)); - return null; + return throwUnsupportedParameters("bitwiseAnd", av, bv); } public int bitwiseAnd(final int av, final int bv) { return av & bv; } public long bitwiseAnd(final long av, final long bv) { return av & bv; } @@ -500,7 +511,7 @@ public Object bitwiseOr(final Object a, final Object b) { if (isI(av) && isI(bv)) return bitwiseOr(i(av), i(bv)); if (isL(av) && isL(bv)) return bitwiseOr(l(av), l(bv)); if (isBI(av) && isBI(bv)) return bitwiseOr(bi(av), bi(bv)); - return null; + return throwUnsupportedParameters("bitwiseOr", av, bv); } public int bitwiseOr(final int av, final int bv) { return av | bv; } public long bitwiseOr(final long av, final long bv) { return av | bv; } @@ -514,7 +525,7 @@ public BigInteger bitwiseOr(final BigInteger av, final BigInteger bv) { public Object logicalAnd(final Object a, final Object b) { final Object av = value(a), bv = value(b); if (isBool(av) && isBool(bv)) return logicalAnd(bool(av), bool(bv)); - return null; + return throwUnsupportedParameters("logicalAnd", av, bv); } public boolean logicalAnd(final boolean av, final boolean bv) { return av && bv; } @@ -522,7 +533,7 @@ public Object logicalAnd(final Object a, final Object b) { public Object logicalOr(final Object a, final Object b) { final Object av = value(a), bv = value(b); if (isBool(av) && isBool(bv)) return logicalOr(bool(av), bool(bv)); - return null; + return throwUnsupportedParameters("logicalOr", av, bv); } public boolean logicalOr(final boolean av, final boolean bv) { return av || bv; } @@ -530,12 +541,12 @@ public Object logicalOr(final Object a, final Object b) { @Override public Object question(final Object a, final Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("question"); } @Override public Object colon(Object a, Object b) { - throw new UnsupportedOperationException(); + return throwUnsupportedImplementation("colon"); } // -- Helper methods - type matching -- diff --git a/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java b/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java index 1aa2755..3aa2933 100644 --- a/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java +++ b/src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java @@ -31,7 +31,6 @@ package org.scijava.parsington.eval; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -109,7 +108,7 @@ public void testFunction() { assertEquals("b", e.function(v, Arrays.asList(1))); assertEquals("c", e.function(v, Arrays.asList(2))); - assertNull(e.function(o(0), o(1))); + assertThrows(UnsupportedOperationException.class, () ->e.function(o(0), o(1))); } // -- dot --