Skip to content

Commit a081dfc

Browse files
gselzerctrueden
authored andcommitted
Extract matching Exceptions to SciJava Ops API
This cleans up OpEnvironment methods
1 parent 354abba commit a081dfc

10 files changed

Lines changed: 38 additions & 60 deletions

File tree

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/DependencyMatchingException.java renamed to scijava/scijava-ops-api/src/main/java/org/scijava/ops/api/features/DependencyMatchingException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
package org.scijava.ops.engine.matcher;
2+
package org.scijava.ops.api.features;
33

44
import org.scijava.ops.api.OpRef;
55

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/OpMatchingException.java renamed to scijava/scijava-ops-api/src/main/java/org/scijava/ops/api/features/OpMatchingException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.scijava.ops.engine.matcher;
1+
package org.scijava.ops.api.features;
22

33
import org.scijava.ops.api.OpRef;
44

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/impl/DefaultOpEnvironment.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@
6464
import org.scijava.ops.api.OpRef;
6565
import org.scijava.ops.api.OpWrapper;
6666
import org.scijava.ops.api.RichOp;
67+
import org.scijava.ops.api.features.DependencyMatchingException;
68+
import org.scijava.ops.api.features.OpMatchingException;
6769
import org.scijava.ops.api.features.BaseOpHints.Adaptation;
6870
import org.scijava.ops.api.features.BaseOpHints.DependencyMatching;
6971
import org.scijava.ops.api.features.BaseOpHints.History;
7072
import org.scijava.ops.api.features.BaseOpHints.Simplification;
7173
import org.scijava.ops.engine.hint.DefaultHints;
72-
import org.scijava.ops.engine.matcher.DependencyMatchingException;
7374
import org.scijava.ops.engine.matcher.OpMatcher;
74-
import org.scijava.ops.engine.matcher.OpMatchingException;
7575
import org.scijava.ops.engine.matcher.impl.DefaultOpMatcher;
7676
import org.scijava.ops.engine.matcher.impl.DefaultOpRef;
7777
import org.scijava.ops.engine.matcher.impl.InfoMatchingOpRef;
@@ -213,12 +213,10 @@ public <T> T op(final String opName, final Nil<T> specialType,
213213
}
214214

215215
@Override
216-
public <T> T op(final String opName, final Nil<T> specialType, final Nil<?>[] inTypes, final Nil<?> outType, Hints hints) {
217-
try {
218-
return findOp(opName, specialType, inTypes, outType, hints).asOpType();
219-
} catch (OpMatchingException e) {
220-
throw new IllegalArgumentException(e);
221-
}
216+
public <T> T op(final String opName, final Nil<T> specialType,
217+
final Nil<?>[] inTypes, final Nil<?> outType, Hints hints)
218+
{
219+
return findOp(opName, specialType, inTypes, outType, hints).asOpType();
222220
}
223221

224222
@Override
@@ -241,12 +239,7 @@ public InfoChain infoChain(String opName, Nil<?> specialType,
241239

242240
@Override
243241
public InfoChain chainFromInfo(OpInfo info, Nil<?> specialType) {
244-
try {
245-
return findOp(info, specialType, getDefaultHints()).infoChain();
246-
} catch (OpMatchingException e) {
247-
throw new IllegalArgumentException(e);
248-
}
249-
242+
return findOp(info, specialType, getDefaultHints()).infoChain();
250243
}
251244

252245
@Override

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/MatchingResult.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.scijava.ops.api.OpRef;
88
import org.scijava.ops.api.OpUtils;
99
import org.scijava.ops.api.OpCandidate.StatusCode;
10+
import org.scijava.ops.api.features.OpMatchingException;
1011

1112
/**
1213
* Class representing the result from type matching done by the

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/simplify/SimplifiedOpInfo.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import org.scijava.ops.api.OpEnvironment;
1414
import org.scijava.ops.api.OpInfo;
1515
import org.scijava.ops.api.OpUtils;
16+
import org.scijava.ops.api.features.OpMatchingException;
1617
import org.scijava.ops.api.features.BaseOpHints.Simplification;
1718
import org.scijava.ops.engine.conversionLoss.LossReporter;
18-
import org.scijava.ops.engine.matcher.OpMatchingException;
1919
import org.scijava.ops.engine.struct.OpRetypingMemberParser;
2020
import org.scijava.ops.engine.struct.RetypingRequest;
2121
import org.scijava.ops.spi.Op;
@@ -183,10 +183,9 @@ private static <T, R> double determineLoss(OpEnvironment env, Nil<T> from, Nil<R
183183
LossReporter<T, R> op = env.op("lossReporter", specialTypeNil, new Nil[] {
184184
Nil.of(nilFromType), Nil.of(nilToType) }, Nil.of(Double.class));
185185
return op.apply(from, to);
186-
} catch(IllegalArgumentException e) {
187-
if (e.getCause() instanceof OpMatchingException)
188-
return Double.POSITIVE_INFINITY;
189-
throw e;
186+
}
187+
catch (OpMatchingException e) {
188+
return Double.POSITIVE_INFINITY;
190189
}
191190
}
192191

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/simplify/SimplifiedOpRef.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import org.scijava.ops.api.OpEnvironment;
1616
import org.scijava.ops.api.OpInfo;
1717
import org.scijava.ops.api.OpRef;
18+
import org.scijava.ops.api.features.OpMatchingException;
1819
import org.scijava.ops.api.features.BaseOpHints.Adaptation;
1920
import org.scijava.ops.api.features.BaseOpHints.Simplification;
20-
import org.scijava.ops.engine.matcher.OpMatchingException;
2121
import org.scijava.types.Nil;
2222
import org.scijava.types.Types;
2323

scijava/scijava-ops-engine/src/test/java/org/scijava/ops/engine/hints/AdaptationHintTest.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import org.scijava.ops.api.Hints;
99
import org.scijava.ops.engine.AbstractTestEnvironment;
1010
import org.scijava.ops.api.OpHints;
11+
import org.scijava.ops.api.features.OpMatchingException;
1112
import org.scijava.ops.api.features.BaseOpHints.Adaptation;
1213
import org.scijava.ops.engine.hint.DefaultHints;
13-
import org.scijava.ops.engine.matcher.OpMatchingException;
1414
import org.scijava.ops.spi.OpCollection;
1515
import org.scijava.ops.spi.OpField;
1616
import org.scijava.function.Computers;
@@ -38,8 +38,7 @@ public void testAdaptation() {
3838
ops.op("test.adaptation.hints").inType(Double[].class).outType(
3939
Double[].class).computer();
4040
throw new IllegalStateException("This op call should not match!");
41-
} catch( IllegalArgumentException e) {
42-
assertTrue(e.getCause() instanceof OpMatchingException);
41+
} catch( OpMatchingException e) {
4342
}
4443
}
4544

@@ -57,8 +56,7 @@ public void testAdaptationPerCallHints() {
5756
ops.op("test.adaptation.hints").inType(Double[].class).outType(
5857
Double[].class).computer(hints);
5958
throw new IllegalStateException("This op call should not match!");
60-
} catch( IllegalArgumentException e) {
61-
assertTrue(e.getCause() instanceof OpMatchingException);
59+
} catch( OpMatchingException e) {
6260
}
6361
}
6462

@@ -81,8 +79,7 @@ public void testNonAdaptableOp() {
8179
ops.op("test.adaptation.unadaptable").inType(Double[].class).outType(
8280
Double[].class).computer();
8381
throw new IllegalStateException("This op call should not match!");
84-
} catch( IllegalArgumentException e) {
85-
assertTrue(e.getCause() instanceof OpMatchingException);
82+
} catch( OpMatchingException e) {
8683
}
8784
}
8885

@@ -100,8 +97,7 @@ public void testNonAdaptableOpPerCallHints() {
10097
ops.op("test.adaptation.unadaptable").inType(Double[].class).outType(
10198
Double[].class).computer(hints);
10299
throw new IllegalStateException("This op call should not match!");
103-
} catch( IllegalArgumentException e) {
104-
assertTrue(e.getCause() instanceof OpMatchingException);
100+
} catch( OpMatchingException e) {
105101
}
106102
}
107103

scijava/scijava-ops-engine/src/test/java/org/scijava/ops/engine/hints/SimplificationHintTest.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11

22
package org.scijava.ops.engine.hints;
33

4-
import static org.junit.Assert.assertTrue;
54

65
import java.util.function.Function;
76

87
import org.junit.Test;
98
import org.scijava.ops.api.Hints;
109
import org.scijava.ops.engine.AbstractTestEnvironment;
1110
import org.scijava.ops.api.OpHints;
11+
import org.scijava.ops.api.features.OpMatchingException;
1212
import org.scijava.ops.api.features.BaseOpHints.Simplification;
1313
import org.scijava.ops.engine.hint.DefaultHints;
14-
import org.scijava.ops.engine.matcher.OpMatchingException;
1514
import org.scijava.ops.spi.OpCollection;
1615
import org.scijava.ops.spi.OpField;
1716
import org.scijava.plugin.Plugin;
@@ -40,8 +39,7 @@ public void testSimplification() {
4039
throw new IllegalStateException(
4140
"Simplification is forbidden - this op call should not match!");
4241
}
43-
catch (IllegalArgumentException e) {
44-
assertTrue(e.getCause() instanceof OpMatchingException);
42+
catch (OpMatchingException e) {
4543
}
4644

4745
}
@@ -62,8 +60,7 @@ public void testSimplificationPerCallHints() {
6260
throw new IllegalStateException(
6361
"Simplification is forbidden - this op call should not match!");
6462
}
65-
catch (IllegalArgumentException e) {
66-
assertTrue(e.getCause() instanceof OpMatchingException);
63+
catch (OpMatchingException e) {
6764
}
6865

6966
}
@@ -91,8 +88,7 @@ public void testUnsimplifiableOp() {
9188
throw new IllegalStateException(
9289
"The only relevant Op is not simplifiable - this op call should not match!");
9390
}
94-
catch (IllegalArgumentException e) {
95-
assertTrue(e.getCause() instanceof OpMatchingException);
91+
catch (OpMatchingException e) {
9692
}
9793

9894
}
@@ -114,8 +110,7 @@ public void testUnsimplifiableOpPerCallHints() {
114110
throw new IllegalStateException(
115111
"The only relevant Op is not simplifiable - this op call should not match!");
116112
}
117-
catch (IllegalArgumentException e) {
118-
assertTrue(e.getCause() instanceof OpMatchingException);
113+
catch (OpMatchingException e) {
119114
}
120115

121116
}

scijava/scijava-ops-engine/src/test/java/org/scijava/ops/engine/matcher/DefaultMatchingErrorTest.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
import org.junit.Assert;
77
import org.junit.Test;
88
import org.scijava.function.Computers;
9+
import org.scijava.ops.api.features.DependencyMatchingException;
10+
import org.scijava.ops.api.features.OpMatchingException;
911
import org.scijava.ops.engine.AbstractTestEnvironment;
10-
import org.scijava.ops.engine.matcher.impl.OpAdaptationInfo;
1112
import org.scijava.ops.spi.Op;
1213
import org.scijava.ops.spi.OpCollection;
1314
import org.scijava.ops.spi.OpDependency;
@@ -34,10 +35,10 @@ public void duplicateErrorRegressionTest() {
3435
.function();
3536
Assert.fail();
3637
}
37-
catch (IllegalArgumentException e) {
38+
catch (OpMatchingException e) {
3839
Assert.assertTrue(e.getMessage().startsWith(
39-
"org.scijava.ops.engine.matcher.OpMatchingException: " +
40-
"Multiple 'test.duplicateOp/java.util.function.Function<java.lang.Double, java.lang.Double>' " +
40+
"Multiple 'test.duplicateOp/" +
41+
"java.util.function.Function<java.lang.Double, java.lang.Double>' " +
4142
"ops of priority 0.0:"));
4243
}
4344
}
@@ -52,10 +53,8 @@ public void missingDependencyRegressionTest() {
5253
.apply();
5354
Assert.fail("Expected DependencyMatchingException");
5455
}
55-
catch (IllegalArgumentException e) {
56-
Throwable cause = e.getCause();
57-
Assert.assertTrue(cause instanceof DependencyMatchingException);
58-
String message = cause.getMessage();
56+
catch (DependencyMatchingException e) {
57+
String message = e.getMessage();
5958
Assert.assertTrue(message.contains("Name: \"test.nonexistingOp\""));
6059
}
6160
}
@@ -70,10 +69,8 @@ public void missingNestedDependencyRegressionTest() {
7069
ops.op("test.outsideOp").input(1.).outType(Double.class).apply();
7170
Assert.fail("Expected DependencyMatchingException");
7271
}
73-
catch (IllegalArgumentException e) {
74-
Throwable cause = e.getCause();
75-
Assert.assertTrue(cause instanceof DependencyMatchingException);
76-
String message = cause.getMessage();
72+
catch (DependencyMatchingException e) {
73+
String message = e.getMessage();
7774
Assert.assertTrue(message.contains("Name: \"test.missingDependencyOp\""));
7875
Assert.assertTrue(message.contains("Name: \"test.nonexistingOp\""));
7976
}
@@ -90,10 +87,8 @@ public void missingDependencyViaAdaptationTest() {
9087
ops.op("test.adaptMissingDep").input(d).outType(Double[].class).apply();
9188
Assert.fail("Expected DependencyMatchingException");
9289
}
93-
catch (IllegalArgumentException e) {
94-
Throwable cause = e.getCause();
95-
Assert.assertTrue(cause instanceof DependencyMatchingException);
96-
String message = cause.getMessage();
90+
catch (DependencyMatchingException e) {
91+
String message = e.getMessage();
9792
Assert.assertTrue(message.contains("Adaptor:"));
9893
Assert.assertTrue(message.contains("Name: \"test.nonexistingOp\""));
9994

scijava/scijava-ops-engine/src/test/java/org/scijava/ops/engine/util/OpsAsParametersTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.junit.Test;
99
import org.scijava.ops.engine.AbstractTestEnvironment;
1010
import org.scijava.ops.api.OpBuilder;
11+
import org.scijava.ops.api.features.OpMatchingException;
1112
import org.scijava.ops.spi.Op;
1213
import org.scijava.ops.spi.OpCollection;
1314
import org.scijava.ops.spi.OpField;
@@ -28,9 +29,7 @@ public class OpsAsParametersTest extends AbstractTestEnvironment {
2829
return output;
2930
};
3031

31-
// TODO: find a better way to check that this call fails BECAUSE func cannot be
32-
// reified
33-
@Test(expected=IllegalArgumentException.class)
32+
@Test(expected=OpMatchingException.class)
3433
public void TestOpWithNonReifiableFunction() {
3534

3635
List<Number> list = new ArrayList<>();

0 commit comments

Comments
 (0)